diff options
Diffstat (limited to 'shared/extra-utils/server/plugins-command.ts')
-rw-r--r-- | shared/extra-utils/server/plugins-command.ts | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/shared/extra-utils/server/plugins-command.ts b/shared/extra-utils/server/plugins-command.ts new file mode 100644 index 000000000..b944475a2 --- /dev/null +++ b/shared/extra-utils/server/plugins-command.ts | |||
@@ -0,0 +1,256 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | ||
2 | |||
3 | import { readJSON, writeJSON } from 'fs-extra' | ||
4 | import { join } from 'path' | ||
5 | import { root } from '@server/helpers/core-utils' | ||
6 | import { | ||
7 | HttpStatusCode, | ||
8 | PeerTubePlugin, | ||
9 | PeerTubePluginIndex, | ||
10 | PeertubePluginIndexList, | ||
11 | PluginPackageJson, | ||
12 | PluginTranslation, | ||
13 | PluginType, | ||
14 | PublicServerSetting, | ||
15 | RegisteredServerSettings, | ||
16 | ResultList | ||
17 | } from '@shared/models' | ||
18 | import { AbstractCommand, OverrideCommandOptions } from '../shared' | ||
19 | |||
20 | export class PluginsCommand extends AbstractCommand { | ||
21 | |||
22 | static getPluginTestPath (suffix = '') { | ||
23 | return join(root(), 'server', 'tests', 'fixtures', 'peertube-plugin-test' + suffix) | ||
24 | } | ||
25 | |||
26 | list (options: OverrideCommandOptions & { | ||
27 | start?: number | ||
28 | count?: number | ||
29 | sort?: string | ||
30 | pluginType?: PluginType | ||
31 | uninstalled?: boolean | ||
32 | }) { | ||
33 | const { start, count, sort, pluginType, uninstalled } = options | ||
34 | const path = '/api/v1/plugins' | ||
35 | |||
36 | return this.getRequestBody<ResultList<PeerTubePlugin>>({ | ||
37 | ...options, | ||
38 | |||
39 | path, | ||
40 | query: { | ||
41 | start, | ||
42 | count, | ||
43 | sort, | ||
44 | pluginType, | ||
45 | uninstalled | ||
46 | }, | ||
47 | implicitToken: true, | ||
48 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
49 | }) | ||
50 | } | ||
51 | |||
52 | listAvailable (options: OverrideCommandOptions & { | ||
53 | start?: number | ||
54 | count?: number | ||
55 | sort?: string | ||
56 | pluginType?: PluginType | ||
57 | currentPeerTubeEngine?: string | ||
58 | search?: string | ||
59 | expectedStatus?: HttpStatusCode | ||
60 | }) { | ||
61 | const { start, count, sort, pluginType, search, currentPeerTubeEngine } = options | ||
62 | const path = '/api/v1/plugins/available' | ||
63 | |||
64 | const query: PeertubePluginIndexList = { | ||
65 | start, | ||
66 | count, | ||
67 | sort, | ||
68 | pluginType, | ||
69 | currentPeerTubeEngine, | ||
70 | search | ||
71 | } | ||
72 | |||
73 | return this.getRequestBody<ResultList<PeerTubePluginIndex>>({ | ||
74 | ...options, | ||
75 | |||
76 | path, | ||
77 | query, | ||
78 | implicitToken: true, | ||
79 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
80 | }) | ||
81 | } | ||
82 | |||
83 | get (options: OverrideCommandOptions & { | ||
84 | npmName: string | ||
85 | }) { | ||
86 | const path = '/api/v1/plugins/' + options.npmName | ||
87 | |||
88 | return this.getRequestBody<PeerTubePlugin>({ | ||
89 | ...options, | ||
90 | |||
91 | path, | ||
92 | implicitToken: true, | ||
93 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
94 | }) | ||
95 | } | ||
96 | |||
97 | updateSettings (options: OverrideCommandOptions & { | ||
98 | npmName: string | ||
99 | settings: any | ||
100 | }) { | ||
101 | const { npmName, settings } = options | ||
102 | const path = '/api/v1/plugins/' + npmName + '/settings' | ||
103 | |||
104 | return this.putBodyRequest({ | ||
105 | ...options, | ||
106 | |||
107 | path, | ||
108 | fields: { settings }, | ||
109 | implicitToken: true, | ||
110 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | ||
111 | }) | ||
112 | } | ||
113 | |||
114 | getRegisteredSettings (options: OverrideCommandOptions & { | ||
115 | npmName: string | ||
116 | }) { | ||
117 | const path = '/api/v1/plugins/' + options.npmName + '/registered-settings' | ||
118 | |||
119 | return this.getRequestBody<RegisteredServerSettings>({ | ||
120 | ...options, | ||
121 | |||
122 | path, | ||
123 | implicitToken: true, | ||
124 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
125 | }) | ||
126 | } | ||
127 | |||
128 | getPublicSettings (options: OverrideCommandOptions & { | ||
129 | npmName: string | ||
130 | }) { | ||
131 | const { npmName } = options | ||
132 | const path = '/api/v1/plugins/' + npmName + '/public-settings' | ||
133 | |||
134 | return this.getRequestBody<PublicServerSetting>({ | ||
135 | ...options, | ||
136 | |||
137 | path, | ||
138 | implicitToken: false, | ||
139 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
140 | }) | ||
141 | } | ||
142 | |||
143 | getTranslations (options: OverrideCommandOptions & { | ||
144 | locale: string | ||
145 | }) { | ||
146 | const { locale } = options | ||
147 | const path = '/plugins/translations/' + locale + '.json' | ||
148 | |||
149 | return this.getRequestBody<PluginTranslation>({ | ||
150 | ...options, | ||
151 | |||
152 | path, | ||
153 | implicitToken: false, | ||
154 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
155 | }) | ||
156 | } | ||
157 | |||
158 | install (options: OverrideCommandOptions & { | ||
159 | path?: string | ||
160 | npmName?: string | ||
161 | }) { | ||
162 | const { npmName, path } = options | ||
163 | const apiPath = '/api/v1/plugins/install' | ||
164 | |||
165 | return this.postBodyRequest({ | ||
166 | ...options, | ||
167 | |||
168 | path: apiPath, | ||
169 | fields: { npmName, path }, | ||
170 | implicitToken: true, | ||
171 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
172 | }) | ||
173 | } | ||
174 | |||
175 | update (options: OverrideCommandOptions & { | ||
176 | path?: string | ||
177 | npmName?: string | ||
178 | }) { | ||
179 | const { npmName, path } = options | ||
180 | const apiPath = '/api/v1/plugins/update' | ||
181 | |||
182 | return this.postBodyRequest({ | ||
183 | ...options, | ||
184 | |||
185 | path: apiPath, | ||
186 | fields: { npmName, path }, | ||
187 | implicitToken: true, | ||
188 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
189 | }) | ||
190 | } | ||
191 | |||
192 | uninstall (options: OverrideCommandOptions & { | ||
193 | npmName: string | ||
194 | }) { | ||
195 | const { npmName } = options | ||
196 | const apiPath = '/api/v1/plugins/uninstall' | ||
197 | |||
198 | return this.postBodyRequest({ | ||
199 | ...options, | ||
200 | |||
201 | path: apiPath, | ||
202 | fields: { npmName }, | ||
203 | implicitToken: true, | ||
204 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | ||
205 | }) | ||
206 | } | ||
207 | |||
208 | getCSS (options: OverrideCommandOptions = {}) { | ||
209 | const path = '/plugins/global.css' | ||
210 | |||
211 | return this.getRequestText({ | ||
212 | ...options, | ||
213 | |||
214 | path, | ||
215 | implicitToken: false, | ||
216 | defaultExpectedStatus: HttpStatusCode.OK_200 | ||
217 | }) | ||
218 | } | ||
219 | |||
220 | getExternalAuth (options: OverrideCommandOptions & { | ||
221 | npmName: string | ||
222 | npmVersion: string | ||
223 | authName: string | ||
224 | query?: any | ||
225 | }) { | ||
226 | const { npmName, npmVersion, authName, query } = options | ||
227 | |||
228 | const path = '/plugins/' + npmName + '/' + npmVersion + '/auth/' + authName | ||
229 | |||
230 | return this.getRequest({ | ||
231 | ...options, | ||
232 | |||
233 | path, | ||
234 | query, | ||
235 | implicitToken: false, | ||
236 | defaultExpectedStatus: HttpStatusCode.OK_200, | ||
237 | redirects: 0 | ||
238 | }) | ||
239 | } | ||
240 | |||
241 | updatePackageJSON (npmName: string, json: any) { | ||
242 | const path = this.getPackageJSONPath(npmName) | ||
243 | |||
244 | return writeJSON(path, json) | ||
245 | } | ||
246 | |||
247 | getPackageJSON (npmName: string): Promise<PluginPackageJson> { | ||
248 | const path = this.getPackageJSONPath(npmName) | ||
249 | |||
250 | return readJSON(path) | ||
251 | } | ||
252 | |||
253 | private getPackageJSONPath (npmName: string) { | ||
254 | return this.server.servers.buildDirectory(join('plugins', 'node_modules', npmName, 'package.json')) | ||
255 | } | ||
256 | } | ||