123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
- import { readJSON, writeJSON } from 'fs-extra'
- import { join } from 'path'
- import { root } from '@shared/core-utils'
- import {
- HttpStatusCode,
- PeerTubePlugin,
- PeerTubePluginIndex,
- PeertubePluginIndexList,
- PluginPackageJSON,
- PluginTranslation,
- PluginType,
- PublicServerSetting,
- RegisteredServerSettings,
- ResultList
- } from '@shared/models'
- import { AbstractCommand, OverrideCommandOptions } from '../shared'
- export class PluginsCommand extends AbstractCommand {
- static getPluginTestPath (suffix = '') {
- return join(root(), 'server', 'tests', 'fixtures', 'peertube-plugin-test' + suffix)
- }
- list (options: OverrideCommandOptions & {
- start?: number
- count?: number
- sort?: string
- pluginType?: PluginType
- uninstalled?: boolean
- }) {
- const { start, count, sort, pluginType, uninstalled } = options
- const path = '/api/v1/plugins'
- return this.getRequestBody<ResultList<PeerTubePlugin>>({
- ...options,
- path,
- query: {
- start,
- count,
- sort,
- pluginType,
- uninstalled
- },
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- listAvailable (options: OverrideCommandOptions & {
- start?: number
- count?: number
- sort?: string
- pluginType?: PluginType
- currentPeerTubeEngine?: string
- search?: string
- expectedStatus?: HttpStatusCode
- }) {
- const { start, count, sort, pluginType, search, currentPeerTubeEngine } = options
- const path = '/api/v1/plugins/available'
- const query: PeertubePluginIndexList = {
- start,
- count,
- sort,
- pluginType,
- currentPeerTubeEngine,
- search
- }
- return this.getRequestBody<ResultList<PeerTubePluginIndex>>({
- ...options,
- path,
- query,
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- get (options: OverrideCommandOptions & {
- npmName: string
- }) {
- const path = '/api/v1/plugins/' + options.npmName
- return this.getRequestBody<PeerTubePlugin>({
- ...options,
- path,
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- updateSettings (options: OverrideCommandOptions & {
- npmName: string
- settings: any
- }) {
- const { npmName, settings } = options
- const path = '/api/v1/plugins/' + npmName + '/settings'
- return this.putBodyRequest({
- ...options,
- path,
- fields: { settings },
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
- })
- }
- getRegisteredSettings (options: OverrideCommandOptions & {
- npmName: string
- }) {
- const path = '/api/v1/plugins/' + options.npmName + '/registered-settings'
- return this.getRequestBody<RegisteredServerSettings>({
- ...options,
- path,
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- getPublicSettings (options: OverrideCommandOptions & {
- npmName: string
- }) {
- const { npmName } = options
- const path = '/api/v1/plugins/' + npmName + '/public-settings'
- return this.getRequestBody<PublicServerSetting>({
- ...options,
- path,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- getTranslations (options: OverrideCommandOptions & {
- locale: string
- }) {
- const { locale } = options
- const path = '/plugins/translations/' + locale + '.json'
- return this.getRequestBody<PluginTranslation>({
- ...options,
- path,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- install (options: OverrideCommandOptions & {
- path?: string
- npmName?: string
- pluginVersion?: string
- }) {
- const { npmName, path, pluginVersion } = options
- const apiPath = '/api/v1/plugins/install'
- return this.postBodyRequest({
- ...options,
- path: apiPath,
- fields: { npmName, path, pluginVersion },
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- update (options: OverrideCommandOptions & {
- path?: string
- npmName?: string
- }) {
- const { npmName, path } = options
- const apiPath = '/api/v1/plugins/update'
- return this.postBodyRequest({
- ...options,
- path: apiPath,
- fields: { npmName, path },
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- uninstall (options: OverrideCommandOptions & {
- npmName: string
- }) {
- const { npmName } = options
- const apiPath = '/api/v1/plugins/uninstall'
- return this.postBodyRequest({
- ...options,
- path: apiPath,
- fields: { npmName },
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
- })
- }
- getCSS (options: OverrideCommandOptions = {}) {
- const path = '/plugins/global.css'
- return this.getRequestText({
- ...options,
- path,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- getExternalAuth (options: OverrideCommandOptions & {
- npmName: string
- npmVersion: string
- authName: string
- query?: any
- }) {
- const { npmName, npmVersion, authName, query } = options
- const path = '/plugins/' + npmName + '/' + npmVersion + '/auth/' + authName
- return this.getRequest({
- ...options,
- path,
- query,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200,
- redirects: 0
- })
- }
- updatePackageJSON (npmName: string, json: any) {
- const path = this.getPackageJSONPath(npmName)
- return writeJSON(path, json)
- }
- getPackageJSON (npmName: string): Promise<PluginPackageJSON> {
- const path = this.getPackageJSONPath(npmName)
- return readJSON(path)
- }
- private getPackageJSONPath (npmName: string) {
- return this.server.servers.buildDirectory(join('plugins', 'node_modules', npmName, 'package.json'))
- }
- }
|