diff options
Diffstat (limited to 'server/lib/plugins')
-rw-r--r-- | server/lib/plugins/plugin-index.ts | 64 | ||||
-rw-r--r-- | server/lib/plugins/plugin-manager.ts | 4 |
2 files changed, 68 insertions, 0 deletions
diff --git a/server/lib/plugins/plugin-index.ts b/server/lib/plugins/plugin-index.ts new file mode 100644 index 000000000..4a8a90ec8 --- /dev/null +++ b/server/lib/plugins/plugin-index.ts | |||
@@ -0,0 +1,64 @@ | |||
1 | import { doRequest } from '../../helpers/requests' | ||
2 | import { CONFIG } from '../../initializers/config' | ||
3 | import { | ||
4 | PeertubePluginLatestVersionRequest, | ||
5 | PeertubePluginLatestVersionResponse | ||
6 | } from '../../../shared/models/plugins/peertube-plugin-latest-version.model' | ||
7 | import { PeertubePluginIndexList } from '../../../shared/models/plugins/peertube-plugin-index-list.model' | ||
8 | import { ResultList } from '../../../shared/models' | ||
9 | import { PeerTubePluginIndex } from '../../../shared/models/plugins/peertube-plugin-index.model' | ||
10 | import { PluginModel } from '../../models/server/plugin' | ||
11 | import { PluginManager } from './plugin-manager' | ||
12 | import { logger } from '../../helpers/logger' | ||
13 | |||
14 | const packageJSON = require('../../../../package.json') | ||
15 | |||
16 | async function listAvailablePluginsFromIndex (options: PeertubePluginIndexList) { | ||
17 | const { start = 0, count = 20, search, sort = 'npmName', pluginType } = options | ||
18 | |||
19 | const qs: PeertubePluginIndexList = { | ||
20 | start, | ||
21 | count, | ||
22 | sort, | ||
23 | pluginType, | ||
24 | search, | ||
25 | currentPeerTubeEngine: packageJSON.version | ||
26 | } | ||
27 | |||
28 | const uri = CONFIG.PLUGINS.INDEX.URL + '/api/v1/plugins' | ||
29 | |||
30 | const { body } = await doRequest({ uri, qs, json: true }) | ||
31 | |||
32 | logger.debug('Got result from PeerTube index.', { body }) | ||
33 | |||
34 | await addInstanceInformation(body) | ||
35 | |||
36 | return body as ResultList<PeerTubePluginIndex> | ||
37 | } | ||
38 | |||
39 | async function addInstanceInformation (result: ResultList<PeerTubePluginIndex>) { | ||
40 | for (const d of result.data) { | ||
41 | d.installed = PluginManager.Instance.isRegistered(d.npmName) | ||
42 | d.name = PluginModel.normalizePluginName(d.npmName) | ||
43 | } | ||
44 | |||
45 | return result | ||
46 | } | ||
47 | |||
48 | async function getLatestPluginsVersion (npmNames: string[]): Promise<PeertubePluginLatestVersionResponse> { | ||
49 | const bodyRequest: PeertubePluginLatestVersionRequest = { | ||
50 | npmNames, | ||
51 | currentPeerTubeEngine: packageJSON.version | ||
52 | } | ||
53 | |||
54 | const uri = CONFIG.PLUGINS.INDEX.URL + '/api/v1/plugins/latest-version' | ||
55 | |||
56 | const { body } = await doRequest({ uri, body: bodyRequest }) | ||
57 | |||
58 | return body | ||
59 | } | ||
60 | |||
61 | export { | ||
62 | listAvailablePluginsFromIndex, | ||
63 | getLatestPluginsVersion | ||
64 | } | ||
diff --git a/server/lib/plugins/plugin-manager.ts b/server/lib/plugins/plugin-manager.ts index 7576b284c..9e4ec5adf 100644 --- a/server/lib/plugins/plugin-manager.ts +++ b/server/lib/plugins/plugin-manager.ts | |||
@@ -55,6 +55,10 @@ export class PluginManager { | |||
55 | 55 | ||
56 | // ###################### Getters ###################### | 56 | // ###################### Getters ###################### |
57 | 57 | ||
58 | isRegistered (npmName: string) { | ||
59 | return !!this.getRegisteredPluginOrTheme(npmName) | ||
60 | } | ||
61 | |||
58 | getRegisteredPluginOrTheme (npmName: string) { | 62 | getRegisteredPluginOrTheme (npmName: string) { |
59 | return this.registeredPlugins[npmName] | 63 | return this.registeredPlugins[npmName] |
60 | } | 64 | } |