]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - shared/extra-utils/server/plugins.ts
Correctly fix octet stream fallback for video ext
[github/Chocobozzz/PeerTube.git] / shared / extra-utils / server / plugins.ts
1 import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests'
2 import { PluginType } from '../../models/plugins/plugin.type'
3 import { PeertubePluginIndexList } from '../../models/plugins/peertube-plugin-index-list.model'
4 import { readJSON, writeJSON } from 'fs-extra'
5 import { ServerInfo } from './servers'
6 import { root } from '../miscs/miscs'
7 import { join } from 'path'
8
9 function 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
37 function 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
69 function 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
86 function 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
105 function 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
122 function 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
137 function 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
152 function 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
171 function 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
190 function 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
208 function getPluginsCSS (url: string) {
209 const path = '/plugins/global.css'
210
211 return makeGetRequest({
212 url,
213 path,
214 statusCodeExpected: 200
215 })
216 }
217
218 function getPackageJSONPath (server: ServerInfo, npmName: string) {
219 return join(root(), 'test' + server.internalServerNumber, 'plugins', 'node_modules', npmName, 'package.json')
220 }
221
222 function updatePluginPackageJSON (server: ServerInfo, npmName: string, json: any) {
223 const path = getPackageJSONPath(server, npmName)
224
225 return writeJSON(path, json)
226 }
227
228 function getPluginPackageJSON (server: ServerInfo, npmName: string) {
229 const path = getPackageJSONPath(server, npmName)
230
231 return readJSON(path)
232 }
233
234 function getPluginTestPath (suffix = '') {
235 return join(root(), 'server', 'tests', 'fixtures', 'peertube-plugin-test' + suffix)
236 }
237
238 export {
239 listPlugins,
240 listAvailablePlugins,
241 installPlugin,
242 getPluginTranslations,
243 getPluginsCSS,
244 updatePlugin,
245 getPlugin,
246 uninstallPlugin,
247 updatePluginSettings,
248 getPluginRegisteredSettings,
249 getPackageJSONPath,
250 updatePluginPackageJSON,
251 getPluginPackageJSON,
252 getPluginTestPath,
253 getPublicSettings
254 }