diff options
Diffstat (limited to 'shared/extra-utils/server/follows-command.ts')
-rw-r--r-- | shared/extra-utils/server/follows-command.ts | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/shared/extra-utils/server/follows-command.ts b/shared/extra-utils/server/follows-command.ts new file mode 100644 index 000000000..2b889cf66 --- /dev/null +++ b/shared/extra-utils/server/follows-command.ts | |||
@@ -0,0 +1,141 @@ | |||
1 | import { pick } from 'lodash' | ||
2 | import { ActivityPubActorType, ActorFollow, FollowState, HttpStatusCode, ResultList, ServerFollowCreate } from '@shared/models' | ||
3 | import { AbstractCommand, OverrideCommandOptions } from '../shared' | ||
4 | import { PeerTubeServer } from './server' | ||
5 | |||
6 | export class FollowsCommand extends AbstractCommand { | ||
7 | |||
8 | getFollowers (options: OverrideCommandOptions & { | ||
9 | start: number | ||
10 | count: number | ||
11 | sort: string | ||
12 | search?: string | ||
13 | actorType?: ActivityPubActorType | ||
14 | state?: FollowState | ||
15 | }) { | ||
16 | const path = '/api/v1/server/followers' | ||
17 | |||
18 | const toPick = [ 'start', 'count', 'sort', 'search', 'state', 'actorType' ] | ||
19 | const query = pick(options, toPick) | ||
20 | |||
21 | return this.getRequestBody<ResultList<ActorFollow>>({ | ||
22 | ...options, | ||
23 | |||
24 | path, | ||
25 | query, | ||
26 | implicitToken: false, | ||
27 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
28 | }) | ||
29 | } | ||
30 | |||
31 | getFollowings (options: OverrideCommandOptions & { | ||
32 | start?: number | ||
33 | count?: number | ||
34 | sort?: string | ||
35 | search?: string | ||
36 | actorType?: ActivityPubActorType | ||
37 | state?: FollowState | ||
38 | } = {}) { | ||
39 | const path = '/api/v1/server/following' | ||
40 | |||
41 | const toPick = [ 'start', 'count', 'sort', 'search', 'state', 'actorType' ] | ||
42 | const query = pick(options, toPick) | ||
43 | |||
44 | return this.getRequestBody<ResultList<ActorFollow>>({ | ||
45 | ...options, | ||
46 | |||
47 | path, | ||
48 | query, | ||
49 | implicitToken: false, | ||
50 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
51 | }) | ||
52 | } | ||
53 | |||
54 | follow (options: OverrideCommandOptions & { | ||
55 | hosts?: string[] | ||
56 | handles?: string[] | ||
57 | }) { | ||
58 | const path = '/api/v1/server/following' | ||
59 | |||
60 | const fields: ServerFollowCreate = {} | ||
61 | |||
62 | if (options.hosts) { | ||
63 | fields.hosts = options.hosts.map(f => f.replace(/^http:\/\//, '')) | ||
64 | } | ||
65 | |||
66 | if (options.handles) { | ||
67 | fields.handles = options.handles | ||
68 | } | ||
69 | |||
70 | return this.postBodyRequest({ | ||
71 | ...options, | ||
72 | |||
73 | path, | ||
74 | fields, | ||
75 | implicitToken: true, | ||
76 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | ||
77 | }) | ||
78 | } | ||
79 | |||
80 | async unfollow (options: OverrideCommandOptions & { | ||
81 | target: PeerTubeServer | string | ||
82 | }) { | ||
83 | const { target } = options | ||
84 | |||
85 | const handle = typeof target === 'string' | ||
86 | ? target | ||
87 | : target.host | ||
88 | |||
89 | const path = '/api/v1/server/following/' + handle | ||
90 | |||
91 | return this.deleteRequest({ | ||
92 | ...options, | ||
93 | |||
94 | path, | ||
95 | implicitToken: true, | ||
96 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | ||
97 | }) | ||
98 | } | ||
99 | |||
100 | acceptFollower (options: OverrideCommandOptions & { | ||
101 | follower: string | ||
102 | }) { | ||
103 | const path = '/api/v1/server/followers/' + options.follower + '/accept' | ||
104 | |||
105 | return this.postBodyRequest({ | ||
106 | ...options, | ||
107 | |||
108 | path, | ||
109 | implicitToken: true, | ||
110 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | ||
111 | }) | ||
112 | } | ||
113 | |||
114 | rejectFollower (options: OverrideCommandOptions & { | ||
115 | follower: string | ||
116 | }) { | ||
117 | const path = '/api/v1/server/followers/' + options.follower + '/reject' | ||
118 | |||
119 | return this.postBodyRequest({ | ||
120 | ...options, | ||
121 | |||
122 | path, | ||
123 | implicitToken: true, | ||
124 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | ||
125 | }) | ||
126 | } | ||
127 | |||
128 | removeFollower (options: OverrideCommandOptions & { | ||
129 | follower: PeerTubeServer | ||
130 | }) { | ||
131 | const path = '/api/v1/server/followers/peertube@' + options.follower.host | ||
132 | |||
133 | return this.deleteRequest({ | ||
134 | ...options, | ||
135 | |||
136 | path, | ||
137 | implicitToken: true, | ||
138 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | ||
139 | }) | ||
140 | } | ||
141 | } | ||