]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame_incremental - shared/extra-utils/server/plugins.ts
Add live transcoding bit rate tests
[github/Chocobozzz/PeerTube.git] / shared / extra-utils / server / plugins.ts
... / ...
CommitLineData
1import { readJSON, writeJSON } from 'fs-extra'
2import { join } from 'path'
3import { PeertubePluginIndexList } from '../../models/plugins/peertube-plugin-index-list.model'
4import { PluginType } from '../../models/plugins/plugin.type'
5import { buildServerDirectory, root } from '../miscs/miscs'
6import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests'
7import { ServerInfo } from './servers'
8
9function listPlugins (parameters: {
10 url: string
11 accessToken: string
12 start?: number
13 count?: number
14 sort?: string
15 pluginType?: PluginType
16 uninstalled?: boolean
17 expectedStatus?: number
18}) {
19 const { url, accessToken, start, count, sort, pluginType, uninstalled, expectedStatus = 200 } = parameters
20 const path = '/api/v1/plugins'
21
22 return makeGetRequest({
23 url,
24 path,
25 token: accessToken,
26 query: {
27 start,
28 count,
29 sort,
30 pluginType,
31 uninstalled
32 },
33 statusCodeExpected: expectedStatus
34 })
35}
36
37function listAvailablePlugins (parameters: {
38 url: string
39 accessToken: string
40 start?: number
41 count?: number
42 sort?: string
43 pluginType?: PluginType
44 currentPeerTubeEngine?: string
45 search?: string
46 expectedStatus?: number
47}) {
48 const { url, accessToken, start, count, sort, pluginType, search, currentPeerTubeEngine, expectedStatus = 200 } = parameters
49 const path = '/api/v1/plugins/available'
50
51 const query: PeertubePluginIndexList = {
52 start,
53 count,
54 sort,
55 pluginType,
56 currentPeerTubeEngine,
57 search
58 }
59
60 return makeGetRequest({
61 url,
62 path,
63 token: accessToken,
64 query,
65 statusCodeExpected: expectedStatus
66 })
67}
68
69function getPlugin (parameters: {
70 url: string
71 accessToken: string
72 npmName: string
73 expectedStatus?: number
74}) {
75 const { url, accessToken, npmName, expectedStatus = 200 } = parameters
76 const path = '/api/v1/plugins/' + npmName
77
78 return makeGetRequest({
79 url,
80 path,
81 token: accessToken,
82 statusCodeExpected: expectedStatus
83 })
84}
85
86function updatePluginSettings (parameters: {
87 url: string
88 accessToken: string
89 npmName: string
90 settings: any
91 expectedStatus?: number
92}) {
93 const { url, accessToken, npmName, settings, expectedStatus = 204 } = parameters
94 const path = '/api/v1/plugins/' + npmName + '/settings'
95
96 return makePutBodyRequest({
97 url,
98 path,
99 token: accessToken,
100 fields: { settings },
101 statusCodeExpected: expectedStatus
102 })
103}
104
105function getPluginRegisteredSettings (parameters: {
106 url: string
107 accessToken: string
108 npmName: string
109 expectedStatus?: number
110}) {
111 const { url, accessToken, npmName, expectedStatus = 200 } = parameters
112 const path = '/api/v1/plugins/' + npmName + '/registered-settings'
113
114 return makeGetRequest({
115 url,
116 path,
117 token: accessToken,
118 statusCodeExpected: expectedStatus
119 })
120}
121
122function getPublicSettings (parameters: {
123 url: string
124 npmName: string
125 expectedStatus?: number
126}) {
127 const { url, npmName, expectedStatus = 200 } = parameters
128 const path = '/api/v1/plugins/' + npmName + '/public-settings'
129
130 return makeGetRequest({
131 url,
132 path,
133 statusCodeExpected: expectedStatus
134 })
135}
136
137function getPluginTranslations (parameters: {
138 url: string
139 locale: string
140 expectedStatus?: number
141}) {
142 const { url, locale, expectedStatus = 200 } = parameters
143 const path = '/plugins/translations/' + locale + '.json'
144
145 return makeGetRequest({
146 url,
147 path,
148 statusCodeExpected: expectedStatus
149 })
150}
151
152function installPlugin (parameters: {
153 url: string
154 accessToken: string
155 path?: string
156 npmName?: string
157 expectedStatus?: number
158}) {
159 const { url, accessToken, npmName, path, expectedStatus = 200 } = parameters
160 const apiPath = '/api/v1/plugins/install'
161
162 return makePostBodyRequest({
163 url,
164 path: apiPath,
165 token: accessToken,
166 fields: { npmName, path },
167 statusCodeExpected: expectedStatus
168 })
169}
170
171function updatePlugin (parameters: {
172 url: string
173 accessToken: string
174 path?: string
175 npmName?: string
176 expectedStatus?: number
177}) {
178 const { url, accessToken, npmName, path, expectedStatus = 200 } = parameters
179 const apiPath = '/api/v1/plugins/update'
180
181 return makePostBodyRequest({
182 url,
183 path: apiPath,
184 token: accessToken,
185 fields: { npmName, path },
186 statusCodeExpected: expectedStatus
187 })
188}
189
190function uninstallPlugin (parameters: {
191 url: string
192 accessToken: string
193 npmName: string
194 expectedStatus?: number
195}) {
196 const { url, accessToken, npmName, expectedStatus = 204 } = parameters
197 const apiPath = '/api/v1/plugins/uninstall'
198
199 return makePostBodyRequest({
200 url,
201 path: apiPath,
202 token: accessToken,
203 fields: { npmName },
204 statusCodeExpected: expectedStatus
205 })
206}
207
208function getPluginsCSS (url: string) {
209 const path = '/plugins/global.css'
210
211 return makeGetRequest({
212 url,
213 path,
214 statusCodeExpected: 200
215 })
216}
217
218function getPackageJSONPath (server: ServerInfo, npmName: string) {
219 return buildServerDirectory(server, join('plugins', 'node_modules', npmName, 'package.json'))
220}
221
222function updatePluginPackageJSON (server: ServerInfo, npmName: string, json: any) {
223 const path = getPackageJSONPath(server, npmName)
224
225 return writeJSON(path, json)
226}
227
228function getPluginPackageJSON (server: ServerInfo, npmName: string) {
229 const path = getPackageJSONPath(server, npmName)
230
231 return readJSON(path)
232}
233
234function getPluginTestPath (suffix = '') {
235 return join(root(), 'server', 'tests', 'fixtures', 'peertube-plugin-test' + suffix)
236}
237
238function getExternalAuth (options: {
239 url: string
240 npmName: string
241 npmVersion: string
242 authName: string
243 query?: any
244 statusCodeExpected?: number
245}) {
246 const { url, npmName, npmVersion, authName, statusCodeExpected, query } = options
247
248 const path = '/plugins/' + npmName + '/' + npmVersion + '/auth/' + authName
249
250 return makeGetRequest({
251 url,
252 path,
253 query,
254 statusCodeExpected: statusCodeExpected || 200,
255 redirects: 0
256 })
257}
258
259export {
260 listPlugins,
261 listAvailablePlugins,
262 installPlugin,
263 getPluginTranslations,
264 getPluginsCSS,
265 updatePlugin,
266 getPlugin,
267 uninstallPlugin,
268 updatePluginSettings,
269 getPluginRegisteredSettings,
270 getPackageJSONPath,
271 updatePluginPackageJSON,
272 getPluginPackageJSON,
273 getPluginTestPath,
274 getPublicSettings,
275 getExternalAuth
276}