From 428ccb8b7a44ce60cabb7401a5464cf5fcbd4dba Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 11 May 2021 12:04:47 +0200 Subject: Reorganize plugin models --- shared/models/plugins/client-hook.model.ts | 125 --------------------- shared/models/plugins/client/client-hook.model.ts | 125 +++++++++++++++++++++ shared/models/plugins/client/index.ts | 6 + .../plugins/client/plugin-client-scope.type.ts | 9 ++ .../client/plugin-element-placeholder.type.ts | 1 + .../client/register-client-form-field.model.ts | 23 ++++ .../plugins/client/register-client-hook.model.ts | 7 ++ .../register-client-settings-script.model.ts | 8 ++ shared/models/plugins/index.ts | 28 +---- shared/models/plugins/install-plugin.model.ts | 4 - shared/models/plugins/manage-plugin.model.ts | 3 - .../plugins/peertube-plugin-index-list.model.ts | 10 -- .../models/plugins/peertube-plugin-index.model.ts | 14 --- .../peertube-plugin-latest-version.model.ts | 10 -- shared/models/plugins/peertube-plugin.model.ts | 16 --- shared/models/plugins/plugin-client-scope.type.ts | 9 -- .../plugins/plugin-element-placeholder.type.ts | 1 - shared/models/plugins/plugin-index/index.ts | 3 + .../peertube-plugin-index-list.model.ts | 10 ++ .../plugin-index/peertube-plugin-index.model.ts | 14 +++ .../peertube-plugin-latest-version.model.ts | 10 ++ shared/models/plugins/plugin-package-json.model.ts | 2 +- .../plugin-playlist-privacy-manager.model.ts | 8 -- .../plugins/plugin-settings-manager.model.ts | 9 -- .../models/plugins/plugin-storage-manager.model.ts | 5 - .../plugins/plugin-transcoding-manager.model.ts | 13 --- shared/models/plugins/plugin-translation.model.ts | 5 - .../plugins/plugin-video-category-manager.model.ts | 5 - .../plugins/plugin-video-language-manager.model.ts | 5 - .../plugins/plugin-video-licence-manager.model.ts | 5 - .../plugins/plugin-video-privacy-manager.model.ts | 9 -- shared/models/plugins/public-server.setting.ts | 3 - .../plugins/register-client-form-field.model.ts | 23 ---- .../models/plugins/register-client-hook.model.ts | 7 -- .../register-client-settings-script.model.ts | 8 -- .../models/plugins/register-server-hook.model.ts | 7 -- .../plugins/register-server-setting.model.ts | 12 -- shared/models/plugins/server-hook.model.ts | 123 -------------------- shared/models/plugins/server/api/index.ts | 3 + .../plugins/server/api/install-plugin.model.ts | 4 + .../plugins/server/api/manage-plugin.model.ts | 3 + .../plugins/server/api/peertube-plugin.model.ts | 16 +++ shared/models/plugins/server/index.ts | 6 + shared/models/plugins/server/managers/index.ts | 9 ++ .../plugin-playlist-privacy-manager.model.ts | 8 ++ .../managers/plugin-settings-manager.model.ts | 9 ++ .../managers/plugin-storage-manager.model.ts | 5 + .../managers/plugin-transcoding-manager.model.ts | 13 +++ .../plugin-video-category-manager.model.ts | 5 + .../plugin-video-language-manager.model.ts | 5 + .../managers/plugin-video-licence-manager.model.ts | 5 + .../managers/plugin-video-privacy-manager.model.ts | 9 ++ .../plugins/server/plugin-translation.model.ts | 5 + .../plugins/server/register-server-hook.model.ts | 7 ++ shared/models/plugins/server/server-hook.model.ts | 123 ++++++++++++++++++++ shared/models/plugins/server/settings/index.ts | 2 + .../server/settings/public-server.setting.ts | 3 + .../settings/register-server-setting.model.ts | 12 ++ 58 files changed, 472 insertions(+), 465 deletions(-) delete mode 100644 shared/models/plugins/client-hook.model.ts create mode 100644 shared/models/plugins/client/client-hook.model.ts create mode 100644 shared/models/plugins/client/index.ts create mode 100644 shared/models/plugins/client/plugin-client-scope.type.ts create mode 100644 shared/models/plugins/client/plugin-element-placeholder.type.ts create mode 100644 shared/models/plugins/client/register-client-form-field.model.ts create mode 100644 shared/models/plugins/client/register-client-hook.model.ts create mode 100644 shared/models/plugins/client/register-client-settings-script.model.ts delete mode 100644 shared/models/plugins/install-plugin.model.ts delete mode 100644 shared/models/plugins/manage-plugin.model.ts delete mode 100644 shared/models/plugins/peertube-plugin-index-list.model.ts delete mode 100644 shared/models/plugins/peertube-plugin-index.model.ts delete mode 100644 shared/models/plugins/peertube-plugin-latest-version.model.ts delete mode 100644 shared/models/plugins/peertube-plugin.model.ts delete mode 100644 shared/models/plugins/plugin-client-scope.type.ts delete mode 100644 shared/models/plugins/plugin-element-placeholder.type.ts create mode 100644 shared/models/plugins/plugin-index/index.ts create mode 100644 shared/models/plugins/plugin-index/peertube-plugin-index-list.model.ts create mode 100644 shared/models/plugins/plugin-index/peertube-plugin-index.model.ts create mode 100644 shared/models/plugins/plugin-index/peertube-plugin-latest-version.model.ts delete mode 100644 shared/models/plugins/plugin-playlist-privacy-manager.model.ts delete mode 100644 shared/models/plugins/plugin-settings-manager.model.ts delete mode 100644 shared/models/plugins/plugin-storage-manager.model.ts delete mode 100644 shared/models/plugins/plugin-transcoding-manager.model.ts delete mode 100644 shared/models/plugins/plugin-translation.model.ts delete mode 100644 shared/models/plugins/plugin-video-category-manager.model.ts delete mode 100644 shared/models/plugins/plugin-video-language-manager.model.ts delete mode 100644 shared/models/plugins/plugin-video-licence-manager.model.ts delete mode 100644 shared/models/plugins/plugin-video-privacy-manager.model.ts delete mode 100644 shared/models/plugins/public-server.setting.ts delete mode 100644 shared/models/plugins/register-client-form-field.model.ts delete mode 100644 shared/models/plugins/register-client-hook.model.ts delete mode 100644 shared/models/plugins/register-client-settings-script.model.ts delete mode 100644 shared/models/plugins/register-server-hook.model.ts delete mode 100644 shared/models/plugins/register-server-setting.model.ts delete mode 100644 shared/models/plugins/server-hook.model.ts create mode 100644 shared/models/plugins/server/api/index.ts create mode 100644 shared/models/plugins/server/api/install-plugin.model.ts create mode 100644 shared/models/plugins/server/api/manage-plugin.model.ts create mode 100644 shared/models/plugins/server/api/peertube-plugin.model.ts create mode 100644 shared/models/plugins/server/index.ts create mode 100644 shared/models/plugins/server/managers/index.ts create mode 100644 shared/models/plugins/server/managers/plugin-playlist-privacy-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-settings-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-storage-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-transcoding-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-video-category-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-video-language-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-video-licence-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-video-privacy-manager.model.ts create mode 100644 shared/models/plugins/server/plugin-translation.model.ts create mode 100644 shared/models/plugins/server/register-server-hook.model.ts create mode 100644 shared/models/plugins/server/server-hook.model.ts create mode 100644 shared/models/plugins/server/settings/index.ts create mode 100644 shared/models/plugins/server/settings/public-server.setting.ts create mode 100644 shared/models/plugins/server/settings/register-server-setting.model.ts (limited to 'shared/models/plugins') diff --git a/shared/models/plugins/client-hook.model.ts b/shared/models/plugins/client-hook.model.ts deleted file mode 100644 index 620651051..000000000 --- a/shared/models/plugins/client-hook.model.ts +++ /dev/null @@ -1,125 +0,0 @@ -// Data from API hooks: {hookType}:api.{location}.{elementType}.{actionType}.{target} -// Data in internal functions: {hookType}:{location}.{elementType}.{actionType}.{target} - -export const clientFilterHookObject = { - // Filter params/result of the function that fetch videos of the trending page - 'filter:api.trending-videos.videos.list.params': true, - 'filter:api.trending-videos.videos.list.result': true, - - // Filter params/result of the function that fetch videos of the trending page - 'filter:api.most-liked-videos.videos.list.params': true, - 'filter:api.most-liked-videos.videos.list.result': true, - - // Filter params/result of the function that fetch videos of the local page - 'filter:api.local-videos.videos.list.params': true, - 'filter:api.local-videos.videos.list.result': true, - - // Filter params/result of the function that fetch videos of the recently-added page - 'filter:api.recently-added-videos.videos.list.params': true, - 'filter:api.recently-added-videos.videos.list.result': true, - - // Filter params/result of the function that fetch videos of the user subscription page - 'filter:api.user-subscriptions-videos.videos.list.params': true, - 'filter:api.user-subscriptions-videos.videos.list.result': true, - - // Filter params/result of the function that fetch the video of the video-watch page - 'filter:api.video-watch.video.get.params': true, - 'filter:api.video-watch.video.get.result': true, - - // Filter params/result of the function that fetch the threads of the video-watch page - 'filter:api.video-watch.video-threads.list.params': true, - 'filter:api.video-watch.video-threads.list.result': true, - - // Filter params/result of the function that fetch the replies of a thread in the video-watch page - 'filter:api.video-watch.video-thread-replies.list.params': true, - 'filter:api.video-watch.video-thread-replies.list.result': true, - - // Filter params/result of the function that fetch videos according to the user search - 'filter:api.search.videos.list.params': true, - 'filter:api.search.videos.list.result': true, - // Filter params/result of the function that fetch video-channels according to the user search - 'filter:api.search.video-channels.list.params': true, - 'filter:api.search.video-channels.list.result': true, - - // Filter form - 'filter:api.signup.registration.create.params': true, - - // Filter the options to create our player - 'filter:internal.video-watch.player.build-options.params': true, - 'filter:internal.video-watch.player.build-options.result': true, - - // Filter our SVG icons content - 'filter:internal.common.svg-icons.get-content.params': true, - 'filter:internal.common.svg-icons.get-content.result': true -} - -export type ClientFilterHookName = keyof typeof clientFilterHookObject - -export const clientActionHookObject = { - // Fired when the application is being initialized - 'action:application.init': true, - - // Fired when the video watch page is being initialized - 'action:video-watch.init': true, - // Fired when the video watch page loaded the video - 'action:video-watch.video.loaded': true, - // Fired when the player finished loading - 'action:video-watch.player.loaded': true, - // Fired when the video watch page comments(threads) are loaded and load more comments on scroll - 'action:video-watch.video-threads.loaded': true, - // Fired when a user click on 'View x replies' and they're loaded - 'action:video-watch.video-thread-replies.loaded': true, - - // Fired when the video edit page (upload, URL/torrent import, update) is being initialized - 'action:video-edit.init': true, - - // Fired when the login page is being initialized - 'action:login.init': true, - - // Fired when the search page is being initialized - 'action:search.init': true, - - // Fired every time Angular URL changes - 'action:router.navigation-end': true, - - // Fired when the registration page is being initialized - 'action:signup.register.init': true, - - // PeerTube >= 3.2 - // Fired when the admin plugin settings page is being initialized - 'action:admin-plugin-settings.init': true, - - // Fired when the video upload page is being initalized - 'action:video-upload.init': true, - // Fired when the video import by URL page is being initalized - 'action:video-url-import.init': true, - // Fired when the video import by torrent/magnet URI page is being initalized - 'action:video-torrent-import.init': true, - // Fired when the "Go Live" page is being initalized - 'action:go-live.init': true, - - // Fired when the user explicitely logged in/logged out - 'action:auth-user.logged-in': true, - 'action:auth-user.logged-out': true, - // Fired when the application loaded user information (using tokens from the local storage or after a successful login) - 'action:auth-user.information-loaded': true, - - // Fired when the modal to download a video/caption is shown - 'action:modal.video-download.shown': true, - - // ####### Embed hooks ####### - // /!\ In embed scope, peertube helpers are not available - // ########################### - - // Fired when the embed loaded the player - 'action:embed.player.loaded': true -} - -export type ClientActionHookName = keyof typeof clientActionHookObject - -export const clientHookObject = Object.assign({}, clientFilterHookObject, clientActionHookObject) -export type ClientHookName = keyof typeof clientHookObject - -export interface ClientHook { - runHook (hookName: ClientHookName, result?: T, params?: any): Promise -} diff --git a/shared/models/plugins/client/client-hook.model.ts b/shared/models/plugins/client/client-hook.model.ts new file mode 100644 index 000000000..620651051 --- /dev/null +++ b/shared/models/plugins/client/client-hook.model.ts @@ -0,0 +1,125 @@ +// Data from API hooks: {hookType}:api.{location}.{elementType}.{actionType}.{target} +// Data in internal functions: {hookType}:{location}.{elementType}.{actionType}.{target} + +export const clientFilterHookObject = { + // Filter params/result of the function that fetch videos of the trending page + 'filter:api.trending-videos.videos.list.params': true, + 'filter:api.trending-videos.videos.list.result': true, + + // Filter params/result of the function that fetch videos of the trending page + 'filter:api.most-liked-videos.videos.list.params': true, + 'filter:api.most-liked-videos.videos.list.result': true, + + // Filter params/result of the function that fetch videos of the local page + 'filter:api.local-videos.videos.list.params': true, + 'filter:api.local-videos.videos.list.result': true, + + // Filter params/result of the function that fetch videos of the recently-added page + 'filter:api.recently-added-videos.videos.list.params': true, + 'filter:api.recently-added-videos.videos.list.result': true, + + // Filter params/result of the function that fetch videos of the user subscription page + 'filter:api.user-subscriptions-videos.videos.list.params': true, + 'filter:api.user-subscriptions-videos.videos.list.result': true, + + // Filter params/result of the function that fetch the video of the video-watch page + 'filter:api.video-watch.video.get.params': true, + 'filter:api.video-watch.video.get.result': true, + + // Filter params/result of the function that fetch the threads of the video-watch page + 'filter:api.video-watch.video-threads.list.params': true, + 'filter:api.video-watch.video-threads.list.result': true, + + // Filter params/result of the function that fetch the replies of a thread in the video-watch page + 'filter:api.video-watch.video-thread-replies.list.params': true, + 'filter:api.video-watch.video-thread-replies.list.result': true, + + // Filter params/result of the function that fetch videos according to the user search + 'filter:api.search.videos.list.params': true, + 'filter:api.search.videos.list.result': true, + // Filter params/result of the function that fetch video-channels according to the user search + 'filter:api.search.video-channels.list.params': true, + 'filter:api.search.video-channels.list.result': true, + + // Filter form + 'filter:api.signup.registration.create.params': true, + + // Filter the options to create our player + 'filter:internal.video-watch.player.build-options.params': true, + 'filter:internal.video-watch.player.build-options.result': true, + + // Filter our SVG icons content + 'filter:internal.common.svg-icons.get-content.params': true, + 'filter:internal.common.svg-icons.get-content.result': true +} + +export type ClientFilterHookName = keyof typeof clientFilterHookObject + +export const clientActionHookObject = { + // Fired when the application is being initialized + 'action:application.init': true, + + // Fired when the video watch page is being initialized + 'action:video-watch.init': true, + // Fired when the video watch page loaded the video + 'action:video-watch.video.loaded': true, + // Fired when the player finished loading + 'action:video-watch.player.loaded': true, + // Fired when the video watch page comments(threads) are loaded and load more comments on scroll + 'action:video-watch.video-threads.loaded': true, + // Fired when a user click on 'View x replies' and they're loaded + 'action:video-watch.video-thread-replies.loaded': true, + + // Fired when the video edit page (upload, URL/torrent import, update) is being initialized + 'action:video-edit.init': true, + + // Fired when the login page is being initialized + 'action:login.init': true, + + // Fired when the search page is being initialized + 'action:search.init': true, + + // Fired every time Angular URL changes + 'action:router.navigation-end': true, + + // Fired when the registration page is being initialized + 'action:signup.register.init': true, + + // PeerTube >= 3.2 + // Fired when the admin plugin settings page is being initialized + 'action:admin-plugin-settings.init': true, + + // Fired when the video upload page is being initalized + 'action:video-upload.init': true, + // Fired when the video import by URL page is being initalized + 'action:video-url-import.init': true, + // Fired when the video import by torrent/magnet URI page is being initalized + 'action:video-torrent-import.init': true, + // Fired when the "Go Live" page is being initalized + 'action:go-live.init': true, + + // Fired when the user explicitely logged in/logged out + 'action:auth-user.logged-in': true, + 'action:auth-user.logged-out': true, + // Fired when the application loaded user information (using tokens from the local storage or after a successful login) + 'action:auth-user.information-loaded': true, + + // Fired when the modal to download a video/caption is shown + 'action:modal.video-download.shown': true, + + // ####### Embed hooks ####### + // /!\ In embed scope, peertube helpers are not available + // ########################### + + // Fired when the embed loaded the player + 'action:embed.player.loaded': true +} + +export type ClientActionHookName = keyof typeof clientActionHookObject + +export const clientHookObject = Object.assign({}, clientFilterHookObject, clientActionHookObject) +export type ClientHookName = keyof typeof clientHookObject + +export interface ClientHook { + runHook (hookName: ClientHookName, result?: T, params?: any): Promise +} diff --git a/shared/models/plugins/client/index.ts b/shared/models/plugins/client/index.ts new file mode 100644 index 000000000..6dfc6351f --- /dev/null +++ b/shared/models/plugins/client/index.ts @@ -0,0 +1,6 @@ +export * from './client-hook.model' +export * from './plugin-client-scope.type' +export * from './plugin-element-placeholder.type' +export * from './register-client-form-field.model' +export * from './register-client-hook.model' +export * from './register-client-settings-script.model' diff --git a/shared/models/plugins/client/plugin-client-scope.type.ts b/shared/models/plugins/client/plugin-client-scope.type.ts new file mode 100644 index 000000000..8cc234ff2 --- /dev/null +++ b/shared/models/plugins/client/plugin-client-scope.type.ts @@ -0,0 +1,9 @@ +export type PluginClientScope = + 'common' | + 'video-watch' | + 'search' | + 'signup' | + 'login' | + 'embed' | + 'video-edit' | + 'admin-plugin' diff --git a/shared/models/plugins/client/plugin-element-placeholder.type.ts b/shared/models/plugins/client/plugin-element-placeholder.type.ts new file mode 100644 index 000000000..129099c62 --- /dev/null +++ b/shared/models/plugins/client/plugin-element-placeholder.type.ts @@ -0,0 +1 @@ +export type PluginElementPlaceholder = 'player-next' diff --git a/shared/models/plugins/client/register-client-form-field.model.ts b/shared/models/plugins/client/register-client-form-field.model.ts new file mode 100644 index 000000000..2df071337 --- /dev/null +++ b/shared/models/plugins/client/register-client-form-field.model.ts @@ -0,0 +1,23 @@ +export type RegisterClientFormFieldOptions = { + name?: string + label?: string + type: 'input' | 'input-checkbox' | 'input-password' | 'input-textarea' | 'markdown-text' | 'markdown-enhanced' | 'select' | 'html' + + // For select type + options?: { value: string, label: string }[] + + // For html type + html?: string + + descriptionHTML?: string + + // Default setting value + default?: string | boolean + + // Not supported by plugin setting registration, use registerSettingsScript instead + hidden?: (options: any) => boolean +} + +export interface RegisterClientVideoFieldOptions { + type: 'update' | 'upload' | 'import-url' | 'import-torrent' | 'go-live' +} diff --git a/shared/models/plugins/client/register-client-hook.model.ts b/shared/models/plugins/client/register-client-hook.model.ts new file mode 100644 index 000000000..81047b21d --- /dev/null +++ b/shared/models/plugins/client/register-client-hook.model.ts @@ -0,0 +1,7 @@ +import { ClientHookName } from './client-hook.model' + +export interface RegisterClientHookOptions { + target: ClientHookName + handler: Function + priority?: number +} diff --git a/shared/models/plugins/client/register-client-settings-script.model.ts b/shared/models/plugins/client/register-client-settings-script.model.ts new file mode 100644 index 000000000..481ceef96 --- /dev/null +++ b/shared/models/plugins/client/register-client-settings-script.model.ts @@ -0,0 +1,8 @@ +import { RegisterServerSettingOptions } from '../server' + +export interface RegisterClientSettingsScript { + isSettingHidden (options: { + setting: RegisterServerSettingOptions + formValues: { [name: string]: any } + }): boolean +} diff --git a/shared/models/plugins/index.ts b/shared/models/plugins/index.ts index 03b27f907..cbbe4916e 100644 --- a/shared/models/plugins/index.ts +++ b/shared/models/plugins/index.ts @@ -1,28 +1,6 @@ -export * from './client-hook.model' +export * from './client' +export * from './plugin-index' +export * from './server' export * from './hook-type.enum' -export * from './install-plugin.model' -export * from './manage-plugin.model' -export * from './peertube-plugin-index-list.model' -export * from './peertube-plugin-index.model' -export * from './peertube-plugin-latest-version.model' -export * from './peertube-plugin.model' -export * from './plugin-client-scope.type' -export * from './plugin-element-placeholder.type' export * from './plugin-package-json.model' -export * from './plugin-playlist-privacy-manager.model' -export * from './plugin-settings-manager.model' -export * from './plugin-storage-manager.model' -export * from './plugin-transcoding-manager.model' -export * from './plugin-translation.model' -export * from './plugin-video-category-manager.model' -export * from './plugin-video-language-manager.model' -export * from './plugin-video-licence-manager.model' -export * from './plugin-video-privacy-manager.model' export * from './plugin.type' -export * from './public-server.setting' -export * from './register-client-hook.model' -export * from './register-client-settings-script.model' -export * from './register-client-form-field.model' -export * from './register-server-hook.model' -export * from './register-server-setting.model' -export * from './server-hook.model' diff --git a/shared/models/plugins/install-plugin.model.ts b/shared/models/plugins/install-plugin.model.ts deleted file mode 100644 index 5a268ebe1..000000000 --- a/shared/models/plugins/install-plugin.model.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface InstallOrUpdatePlugin { - npmName?: string - path?: string -} diff --git a/shared/models/plugins/manage-plugin.model.ts b/shared/models/plugins/manage-plugin.model.ts deleted file mode 100644 index 612b3056c..000000000 --- a/shared/models/plugins/manage-plugin.model.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface ManagePlugin { - npmName: string -} diff --git a/shared/models/plugins/peertube-plugin-index-list.model.ts b/shared/models/plugins/peertube-plugin-index-list.model.ts deleted file mode 100644 index 817bac31e..000000000 --- a/shared/models/plugins/peertube-plugin-index-list.model.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { PluginType } from './plugin.type' - -export interface PeertubePluginIndexList { - start: number - count: number - sort: string - pluginType?: PluginType - currentPeerTubeEngine?: string - search?: string -} diff --git a/shared/models/plugins/peertube-plugin-index.model.ts b/shared/models/plugins/peertube-plugin-index.model.ts deleted file mode 100644 index e91c8b4dc..000000000 --- a/shared/models/plugins/peertube-plugin-index.model.ts +++ /dev/null @@ -1,14 +0,0 @@ -export interface PeerTubePluginIndex { - npmName: string - description: string - homepage: string - createdAt: Date - updatedAt: Date - - popularity: number - - latestVersion: string - - name?: string - installed?: boolean -} diff --git a/shared/models/plugins/peertube-plugin-latest-version.model.ts b/shared/models/plugins/peertube-plugin-latest-version.model.ts deleted file mode 100644 index 811a64429..000000000 --- a/shared/models/plugins/peertube-plugin-latest-version.model.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface PeertubePluginLatestVersionRequest { - currentPeerTubeEngine?: string - - npmNames: string[] -} - -export type PeertubePluginLatestVersionResponse = { - npmName: string - latestVersion: string | null -}[] diff --git a/shared/models/plugins/peertube-plugin.model.ts b/shared/models/plugins/peertube-plugin.model.ts deleted file mode 100644 index 2b0bb8cfa..000000000 --- a/shared/models/plugins/peertube-plugin.model.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { PluginType } from './plugin.type' - -export interface PeerTubePlugin { - name: string - type: PluginType - latestVersion: string - version: string - enabled: boolean - uninstalled: boolean - peertubeEngine: string - description: string - homepage: string - settings: { [ name: string ]: string } - createdAt: Date - updatedAt: Date -} diff --git a/shared/models/plugins/plugin-client-scope.type.ts b/shared/models/plugins/plugin-client-scope.type.ts deleted file mode 100644 index 8cc234ff2..000000000 --- a/shared/models/plugins/plugin-client-scope.type.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type PluginClientScope = - 'common' | - 'video-watch' | - 'search' | - 'signup' | - 'login' | - 'embed' | - 'video-edit' | - 'admin-plugin' diff --git a/shared/models/plugins/plugin-element-placeholder.type.ts b/shared/models/plugins/plugin-element-placeholder.type.ts deleted file mode 100644 index 129099c62..000000000 --- a/shared/models/plugins/plugin-element-placeholder.type.ts +++ /dev/null @@ -1 +0,0 @@ -export type PluginElementPlaceholder = 'player-next' diff --git a/shared/models/plugins/plugin-index/index.ts b/shared/models/plugins/plugin-index/index.ts new file mode 100644 index 000000000..913846638 --- /dev/null +++ b/shared/models/plugins/plugin-index/index.ts @@ -0,0 +1,3 @@ +export * from './peertube-plugin-index-list.model' +export * from './peertube-plugin-index.model' +export * from './peertube-plugin-latest-version.model' diff --git a/shared/models/plugins/plugin-index/peertube-plugin-index-list.model.ts b/shared/models/plugins/plugin-index/peertube-plugin-index-list.model.ts new file mode 100644 index 000000000..ecb46482e --- /dev/null +++ b/shared/models/plugins/plugin-index/peertube-plugin-index-list.model.ts @@ -0,0 +1,10 @@ +import { PluginType } from '../plugin.type' + +export interface PeertubePluginIndexList { + start: number + count: number + sort: string + pluginType?: PluginType + currentPeerTubeEngine?: string + search?: string +} diff --git a/shared/models/plugins/plugin-index/peertube-plugin-index.model.ts b/shared/models/plugins/plugin-index/peertube-plugin-index.model.ts new file mode 100644 index 000000000..e91c8b4dc --- /dev/null +++ b/shared/models/plugins/plugin-index/peertube-plugin-index.model.ts @@ -0,0 +1,14 @@ +export interface PeerTubePluginIndex { + npmName: string + description: string + homepage: string + createdAt: Date + updatedAt: Date + + popularity: number + + latestVersion: string + + name?: string + installed?: boolean +} diff --git a/shared/models/plugins/plugin-index/peertube-plugin-latest-version.model.ts b/shared/models/plugins/plugin-index/peertube-plugin-latest-version.model.ts new file mode 100644 index 000000000..811a64429 --- /dev/null +++ b/shared/models/plugins/plugin-index/peertube-plugin-latest-version.model.ts @@ -0,0 +1,10 @@ +export interface PeertubePluginLatestVersionRequest { + currentPeerTubeEngine?: string + + npmNames: string[] +} + +export type PeertubePluginLatestVersionResponse = { + npmName: string + latestVersion: string | null +}[] diff --git a/shared/models/plugins/plugin-package-json.model.ts b/shared/models/plugins/plugin-package-json.model.ts index c26e9ae5b..b2f92af80 100644 --- a/shared/models/plugins/plugin-package-json.model.ts +++ b/shared/models/plugins/plugin-package-json.model.ts @@ -1,4 +1,4 @@ -import { PluginClientScope } from './plugin-client-scope.type' +import { PluginClientScope } from './client/plugin-client-scope.type' export type PluginTranslationPaths = { [ locale: string ]: string diff --git a/shared/models/plugins/plugin-playlist-privacy-manager.model.ts b/shared/models/plugins/plugin-playlist-privacy-manager.model.ts deleted file mode 100644 index d1823ef4e..000000000 --- a/shared/models/plugins/plugin-playlist-privacy-manager.model.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { VideoPlaylistPrivacy } from '../videos/playlist/video-playlist-privacy.model' - -export interface PluginPlaylistPrivacyManager { - // PUBLIC = 1, - // UNLISTED = 2, - // PRIVATE = 3 - deletePlaylistPrivacy: (privacyKey: VideoPlaylistPrivacy) => boolean -} diff --git a/shared/models/plugins/plugin-settings-manager.model.ts b/shared/models/plugins/plugin-settings-manager.model.ts deleted file mode 100644 index 3c28c0565..000000000 --- a/shared/models/plugins/plugin-settings-manager.model.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface PluginSettingsManager { - getSetting: (name: string) => Promise - - getSettings: (names: string[]) => Promise<{ [settingName: string]: string | boolean }> - - setSetting: (name: string, value: string) => Promise - - onSettingsChange: (cb: (names: string[]) => Promise) => void -} diff --git a/shared/models/plugins/plugin-storage-manager.model.ts b/shared/models/plugins/plugin-storage-manager.model.ts deleted file mode 100644 index 51567044a..000000000 --- a/shared/models/plugins/plugin-storage-manager.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface PluginStorageManager { - getData: (key: string) => Promise - - storeData: (key: string, data: any) => Promise -} diff --git a/shared/models/plugins/plugin-transcoding-manager.model.ts b/shared/models/plugins/plugin-transcoding-manager.model.ts deleted file mode 100644 index 8babccd4e..000000000 --- a/shared/models/plugins/plugin-transcoding-manager.model.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { EncoderOptionsBuilder } from '../videos/video-transcoding.model' - -export interface PluginTranscodingManager { - addLiveProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean - - addVODProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean - - addLiveEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void - - addVODEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void - - removeAllProfilesAndEncoderPriorities(): void -} diff --git a/shared/models/plugins/plugin-translation.model.ts b/shared/models/plugins/plugin-translation.model.ts deleted file mode 100644 index a2dd8e560..000000000 --- a/shared/models/plugins/plugin-translation.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type PluginTranslation = { - [ npmName: string ]: { - [ key: string ]: string - } -} diff --git a/shared/models/plugins/plugin-video-category-manager.model.ts b/shared/models/plugins/plugin-video-category-manager.model.ts deleted file mode 100644 index 201bfa979..000000000 --- a/shared/models/plugins/plugin-video-category-manager.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface PluginVideoCategoryManager { - addCategory: (categoryKey: number, categoryLabel: string) => boolean - - deleteCategory: (categoryKey: number) => boolean -} diff --git a/shared/models/plugins/plugin-video-language-manager.model.ts b/shared/models/plugins/plugin-video-language-manager.model.ts deleted file mode 100644 index 3fd577a79..000000000 --- a/shared/models/plugins/plugin-video-language-manager.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface PluginVideoLanguageManager { - addLanguage: (languageKey: string, languageLabel: string) => boolean - - deleteLanguage: (languageKey: string) => boolean -} diff --git a/shared/models/plugins/plugin-video-licence-manager.model.ts b/shared/models/plugins/plugin-video-licence-manager.model.ts deleted file mode 100644 index 82a634d3a..000000000 --- a/shared/models/plugins/plugin-video-licence-manager.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface PluginVideoLicenceManager { - addLicence: (licenceKey: number, licenceLabel: string) => boolean - - deleteLicence: (licenceKey: number) => boolean -} diff --git a/shared/models/plugins/plugin-video-privacy-manager.model.ts b/shared/models/plugins/plugin-video-privacy-manager.model.ts deleted file mode 100644 index 3ada99608..000000000 --- a/shared/models/plugins/plugin-video-privacy-manager.model.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { VideoPrivacy } from '../videos/video-privacy.enum' - -export interface PluginVideoPrivacyManager { - // PUBLIC = 1 - // UNLISTED = 2 - // PRIVATE = 3 - // INTERNAL = 4 - deletePrivacy: (privacyKey: VideoPrivacy) => boolean -} diff --git a/shared/models/plugins/public-server.setting.ts b/shared/models/plugins/public-server.setting.ts deleted file mode 100644 index 9802c4d7d..000000000 --- a/shared/models/plugins/public-server.setting.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface PublicServerSetting { - publicSettings: { [ name: string ]: string } -} diff --git a/shared/models/plugins/register-client-form-field.model.ts b/shared/models/plugins/register-client-form-field.model.ts deleted file mode 100644 index 2df071337..000000000 --- a/shared/models/plugins/register-client-form-field.model.ts +++ /dev/null @@ -1,23 +0,0 @@ -export type RegisterClientFormFieldOptions = { - name?: string - label?: string - type: 'input' | 'input-checkbox' | 'input-password' | 'input-textarea' | 'markdown-text' | 'markdown-enhanced' | 'select' | 'html' - - // For select type - options?: { value: string, label: string }[] - - // For html type - html?: string - - descriptionHTML?: string - - // Default setting value - default?: string | boolean - - // Not supported by plugin setting registration, use registerSettingsScript instead - hidden?: (options: any) => boolean -} - -export interface RegisterClientVideoFieldOptions { - type: 'update' | 'upload' | 'import-url' | 'import-torrent' | 'go-live' -} diff --git a/shared/models/plugins/register-client-hook.model.ts b/shared/models/plugins/register-client-hook.model.ts deleted file mode 100644 index 81047b21d..000000000 --- a/shared/models/plugins/register-client-hook.model.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ClientHookName } from './client-hook.model' - -export interface RegisterClientHookOptions { - target: ClientHookName - handler: Function - priority?: number -} diff --git a/shared/models/plugins/register-client-settings-script.model.ts b/shared/models/plugins/register-client-settings-script.model.ts deleted file mode 100644 index ac16af366..000000000 --- a/shared/models/plugins/register-client-settings-script.model.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { RegisterServerSettingOptions } from "./register-server-setting.model" - -export interface RegisterClientSettingsScript { - isSettingHidden (options: { - setting: RegisterServerSettingOptions - formValues: { [name: string]: any } - }): boolean -} diff --git a/shared/models/plugins/register-server-hook.model.ts b/shared/models/plugins/register-server-hook.model.ts deleted file mode 100644 index 746fdc329..000000000 --- a/shared/models/plugins/register-server-hook.model.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ServerHookName } from './server-hook.model' - -export interface RegisterServerHookOptions { - target: ServerHookName - handler: Function - priority?: number -} diff --git a/shared/models/plugins/register-server-setting.model.ts b/shared/models/plugins/register-server-setting.model.ts deleted file mode 100644 index 9f45c3c37..000000000 --- a/shared/models/plugins/register-server-setting.model.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { RegisterClientFormFieldOptions } from './register-client-form-field.model' - -export type RegisterServerSettingOptions = RegisterClientFormFieldOptions & { - // If the setting is not private, anyone can view its value (client code included) - // If the setting is private, only server-side hooks can access it - // Mainly used by the PeerTube client to get admin config - private: boolean -} - -export interface RegisteredServerSettings { - registeredSettings: RegisterServerSettingOptions[] -} diff --git a/shared/models/plugins/server-hook.model.ts b/shared/models/plugins/server-hook.model.ts deleted file mode 100644 index 88277af5a..000000000 --- a/shared/models/plugins/server-hook.model.ts +++ /dev/null @@ -1,123 +0,0 @@ -// {hookType}:{api?}.{location}.{subLocation?}.{actionType}.{target} - -export const serverFilterHookObject = { - // Filter params/result used to list videos for the REST API - // (used by the trending page, recently-added page, local page etc) - 'filter:api.videos.list.params': true, - 'filter:api.videos.list.result': true, - - // Filter params/result used to list account videos for the REST API - 'filter:api.accounts.videos.list.params': true, - 'filter:api.accounts.videos.list.result': true, - - // Filter params/result used to list channel videos for the REST API - 'filter:api.video-channels.videos.list.params': true, - 'filter:api.video-channels.videos.list.result': true, - - // Filter params/result used to list my user videos for the REST API - 'filter:api.user.me.videos.list.params': true, - 'filter:api.user.me.videos.list.result': true, - - // Filter params/results to search videos/channels in the DB or on the remote index - 'filter:api.search.videos.local.list.params': true, - 'filter:api.search.videos.local.list.result': true, - 'filter:api.search.videos.index.list.params': true, - 'filter:api.search.videos.index.list.result': true, - 'filter:api.search.video-channels.local.list.params': true, - 'filter:api.search.video-channels.local.list.result': true, - 'filter:api.search.video-channels.index.list.params': true, - 'filter:api.search.video-channels.index.list.result': true, - - // Filter the result of the get function - // Used to get detailed video information (video watch page for example) - 'filter:api.video.get.result': true, - - // Filter the result of the accept upload/live, import via torrent/url functions - // If this function returns false then the upload is aborted with an error - 'filter:api.video.upload.accept.result': true, - 'filter:api.live-video.create.accept.result': true, - 'filter:api.video.pre-import-url.accept.result': true, - 'filter:api.video.pre-import-torrent.accept.result': true, - 'filter:api.video.post-import-url.accept.result': true, - 'filter:api.video.post-import-torrent.accept.result': true, - // Filter the result of the accept comment (thread or reply) functions - // If the functions return false then the user cannot post its comment - 'filter:api.video-thread.create.accept.result': true, - 'filter:api.video-comment-reply.create.accept.result': true, - - // Filter params/result used to list threads of a specific video - // (used by the video watch page) - 'filter:api.video-threads.list.params': true, - 'filter:api.video-threads.list.result': true, - - // Filter params/result used to list replies of a specific thread - // (used by the video watch page when we click on the "View replies" button) - 'filter:api.video-thread-comments.list.params': true, - 'filter:api.video-thread-comments.list.result': true, - - // Filter result used to check if we need to auto blacklist a video - // (fired when a local or remote video is created or updated) - 'filter:video.auto-blacklist.result': true, - - // Filter result used to check if a user can register on the instance - 'filter:api.user.signup.allowed.result': true, - - // Filter result used to check if video/torrent download is allowed - 'filter:api.download.video.allowed.result': true, - 'filter:api.download.torrent.allowed.result': true, - - // Filter result to check if the embed is allowed for a particular request - 'filter:html.embed.video.allowed.result': true, - 'filter:html.embed.video-playlist.allowed.result': true -} - -export type ServerFilterHookName = keyof typeof serverFilterHookObject - -export const serverActionHookObject = { - // Fired when the application has been loaded and is listening HTTP requests - 'action:application.listening': true, - - // Fired when a local video is updated - 'action:api.video.updated': true, - // Fired when a local video is deleted - 'action:api.video.deleted': true, - // Fired when a local video is uploaded - 'action:api.video.uploaded': true, - // Fired when a local video is viewed - 'action:api.video.viewed': true, - - // Fired when a live video is created - 'action:api.live-video.created': true, - - // Fired when a thread is created - 'action:api.video-thread.created': true, - // Fired when a reply to a thread is created - 'action:api.video-comment-reply.created': true, - // Fired when a comment (thread or reply) is deleted - 'action:api.video-comment.deleted': true, - - // Fired when a user is blocked (banned) - 'action:api.user.blocked': true, - // Fired when a user is unblocked (unbanned) - 'action:api.user.unblocked': true, - // Fired when a user registered on the instance - 'action:api.user.registered': true, - // Fired when an admin/moderator created a user - 'action:api.user.created': true, - // Fired when a user is removed by an admin/moderator - 'action:api.user.deleted': true, - // Fired when a user is updated by an admin/moderator - 'action:api.user.updated': true, - - // Fired when a user got a new oauth2 token - 'action:api.user.oauth2-got-token': true -} - -export type ServerActionHookName = keyof typeof serverActionHookObject - -export const serverHookObject = Object.assign({}, serverFilterHookObject, serverActionHookObject) -export type ServerHookName = keyof typeof serverHookObject - -export interface ServerHook { - runHook (hookName: ServerHookName, result?: T, params?: any): Promise -} diff --git a/shared/models/plugins/server/api/index.ts b/shared/models/plugins/server/api/index.ts new file mode 100644 index 000000000..eb59a03f0 --- /dev/null +++ b/shared/models/plugins/server/api/index.ts @@ -0,0 +1,3 @@ +export * from './install-plugin.model' +export * from './manage-plugin.model' +export * from './peertube-plugin.model' diff --git a/shared/models/plugins/server/api/install-plugin.model.ts b/shared/models/plugins/server/api/install-plugin.model.ts new file mode 100644 index 000000000..5a268ebe1 --- /dev/null +++ b/shared/models/plugins/server/api/install-plugin.model.ts @@ -0,0 +1,4 @@ +export interface InstallOrUpdatePlugin { + npmName?: string + path?: string +} diff --git a/shared/models/plugins/server/api/manage-plugin.model.ts b/shared/models/plugins/server/api/manage-plugin.model.ts new file mode 100644 index 000000000..612b3056c --- /dev/null +++ b/shared/models/plugins/server/api/manage-plugin.model.ts @@ -0,0 +1,3 @@ +export interface ManagePlugin { + npmName: string +} diff --git a/shared/models/plugins/server/api/peertube-plugin.model.ts b/shared/models/plugins/server/api/peertube-plugin.model.ts new file mode 100644 index 000000000..54c383f57 --- /dev/null +++ b/shared/models/plugins/server/api/peertube-plugin.model.ts @@ -0,0 +1,16 @@ +import { PluginType } from '../../plugin.type' + +export interface PeerTubePlugin { + name: string + type: PluginType + latestVersion: string + version: string + enabled: boolean + uninstalled: boolean + peertubeEngine: string + description: string + homepage: string + settings: { [ name: string ]: string } + createdAt: Date + updatedAt: Date +} diff --git a/shared/models/plugins/server/index.ts b/shared/models/plugins/server/index.ts new file mode 100644 index 000000000..d3ff49d3b --- /dev/null +++ b/shared/models/plugins/server/index.ts @@ -0,0 +1,6 @@ +export * from './api' +export * from './managers' +export * from './settings' +export * from './plugin-translation.model' +export * from './register-server-hook.model' +export * from './server-hook.model' diff --git a/shared/models/plugins/server/managers/index.ts b/shared/models/plugins/server/managers/index.ts new file mode 100644 index 000000000..49365a854 --- /dev/null +++ b/shared/models/plugins/server/managers/index.ts @@ -0,0 +1,9 @@ + +export * from './plugin-playlist-privacy-manager.model' +export * from './plugin-settings-manager.model' +export * from './plugin-storage-manager.model' +export * from './plugin-transcoding-manager.model' +export * from './plugin-video-category-manager.model' +export * from './plugin-video-language-manager.model' +export * from './plugin-video-licence-manager.model' +export * from './plugin-video-privacy-manager.model' diff --git a/shared/models/plugins/server/managers/plugin-playlist-privacy-manager.model.ts b/shared/models/plugins/server/managers/plugin-playlist-privacy-manager.model.ts new file mode 100644 index 000000000..4703c0a8b --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-playlist-privacy-manager.model.ts @@ -0,0 +1,8 @@ +import { VideoPlaylistPrivacy } from '../../../videos/playlist/video-playlist-privacy.model' + +export interface PluginPlaylistPrivacyManager { + // PUBLIC = 1, + // UNLISTED = 2, + // PRIVATE = 3 + deletePlaylistPrivacy: (privacyKey: VideoPlaylistPrivacy) => boolean +} diff --git a/shared/models/plugins/server/managers/plugin-settings-manager.model.ts b/shared/models/plugins/server/managers/plugin-settings-manager.model.ts new file mode 100644 index 000000000..3c28c0565 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-settings-manager.model.ts @@ -0,0 +1,9 @@ +export interface PluginSettingsManager { + getSetting: (name: string) => Promise + + getSettings: (names: string[]) => Promise<{ [settingName: string]: string | boolean }> + + setSetting: (name: string, value: string) => Promise + + onSettingsChange: (cb: (names: string[]) => Promise) => void +} diff --git a/shared/models/plugins/server/managers/plugin-storage-manager.model.ts b/shared/models/plugins/server/managers/plugin-storage-manager.model.ts new file mode 100644 index 000000000..51567044a --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-storage-manager.model.ts @@ -0,0 +1,5 @@ +export interface PluginStorageManager { + getData: (key: string) => Promise + + storeData: (key: string, data: any) => Promise +} diff --git a/shared/models/plugins/server/managers/plugin-transcoding-manager.model.ts b/shared/models/plugins/server/managers/plugin-transcoding-manager.model.ts new file mode 100644 index 000000000..a0422a460 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-transcoding-manager.model.ts @@ -0,0 +1,13 @@ +import { EncoderOptionsBuilder } from '../../../videos/video-transcoding.model' + +export interface PluginTranscodingManager { + addLiveProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean + + addVODProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean + + addLiveEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void + + addVODEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void + + removeAllProfilesAndEncoderPriorities(): void +} diff --git a/shared/models/plugins/server/managers/plugin-video-category-manager.model.ts b/shared/models/plugins/server/managers/plugin-video-category-manager.model.ts new file mode 100644 index 000000000..201bfa979 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-video-category-manager.model.ts @@ -0,0 +1,5 @@ +export interface PluginVideoCategoryManager { + addCategory: (categoryKey: number, categoryLabel: string) => boolean + + deleteCategory: (categoryKey: number) => boolean +} diff --git a/shared/models/plugins/server/managers/plugin-video-language-manager.model.ts b/shared/models/plugins/server/managers/plugin-video-language-manager.model.ts new file mode 100644 index 000000000..3fd577a79 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-video-language-manager.model.ts @@ -0,0 +1,5 @@ +export interface PluginVideoLanguageManager { + addLanguage: (languageKey: string, languageLabel: string) => boolean + + deleteLanguage: (languageKey: string) => boolean +} diff --git a/shared/models/plugins/server/managers/plugin-video-licence-manager.model.ts b/shared/models/plugins/server/managers/plugin-video-licence-manager.model.ts new file mode 100644 index 000000000..82a634d3a --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-video-licence-manager.model.ts @@ -0,0 +1,5 @@ +export interface PluginVideoLicenceManager { + addLicence: (licenceKey: number, licenceLabel: string) => boolean + + deleteLicence: (licenceKey: number) => boolean +} diff --git a/shared/models/plugins/server/managers/plugin-video-privacy-manager.model.ts b/shared/models/plugins/server/managers/plugin-video-privacy-manager.model.ts new file mode 100644 index 000000000..7717115e3 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-video-privacy-manager.model.ts @@ -0,0 +1,9 @@ +import { VideoPrivacy } from '../../../videos/video-privacy.enum' + +export interface PluginVideoPrivacyManager { + // PUBLIC = 1 + // UNLISTED = 2 + // PRIVATE = 3 + // INTERNAL = 4 + deletePrivacy: (privacyKey: VideoPrivacy) => boolean +} diff --git a/shared/models/plugins/server/plugin-translation.model.ts b/shared/models/plugins/server/plugin-translation.model.ts new file mode 100644 index 000000000..a2dd8e560 --- /dev/null +++ b/shared/models/plugins/server/plugin-translation.model.ts @@ -0,0 +1,5 @@ +export type PluginTranslation = { + [ npmName: string ]: { + [ key: string ]: string + } +} diff --git a/shared/models/plugins/server/register-server-hook.model.ts b/shared/models/plugins/server/register-server-hook.model.ts new file mode 100644 index 000000000..746fdc329 --- /dev/null +++ b/shared/models/plugins/server/register-server-hook.model.ts @@ -0,0 +1,7 @@ +import { ServerHookName } from './server-hook.model' + +export interface RegisterServerHookOptions { + target: ServerHookName + handler: Function + priority?: number +} diff --git a/shared/models/plugins/server/server-hook.model.ts b/shared/models/plugins/server/server-hook.model.ts new file mode 100644 index 000000000..88277af5a --- /dev/null +++ b/shared/models/plugins/server/server-hook.model.ts @@ -0,0 +1,123 @@ +// {hookType}:{api?}.{location}.{subLocation?}.{actionType}.{target} + +export const serverFilterHookObject = { + // Filter params/result used to list videos for the REST API + // (used by the trending page, recently-added page, local page etc) + 'filter:api.videos.list.params': true, + 'filter:api.videos.list.result': true, + + // Filter params/result used to list account videos for the REST API + 'filter:api.accounts.videos.list.params': true, + 'filter:api.accounts.videos.list.result': true, + + // Filter params/result used to list channel videos for the REST API + 'filter:api.video-channels.videos.list.params': true, + 'filter:api.video-channels.videos.list.result': true, + + // Filter params/result used to list my user videos for the REST API + 'filter:api.user.me.videos.list.params': true, + 'filter:api.user.me.videos.list.result': true, + + // Filter params/results to search videos/channels in the DB or on the remote index + 'filter:api.search.videos.local.list.params': true, + 'filter:api.search.videos.local.list.result': true, + 'filter:api.search.videos.index.list.params': true, + 'filter:api.search.videos.index.list.result': true, + 'filter:api.search.video-channels.local.list.params': true, + 'filter:api.search.video-channels.local.list.result': true, + 'filter:api.search.video-channels.index.list.params': true, + 'filter:api.search.video-channels.index.list.result': true, + + // Filter the result of the get function + // Used to get detailed video information (video watch page for example) + 'filter:api.video.get.result': true, + + // Filter the result of the accept upload/live, import via torrent/url functions + // If this function returns false then the upload is aborted with an error + 'filter:api.video.upload.accept.result': true, + 'filter:api.live-video.create.accept.result': true, + 'filter:api.video.pre-import-url.accept.result': true, + 'filter:api.video.pre-import-torrent.accept.result': true, + 'filter:api.video.post-import-url.accept.result': true, + 'filter:api.video.post-import-torrent.accept.result': true, + // Filter the result of the accept comment (thread or reply) functions + // If the functions return false then the user cannot post its comment + 'filter:api.video-thread.create.accept.result': true, + 'filter:api.video-comment-reply.create.accept.result': true, + + // Filter params/result used to list threads of a specific video + // (used by the video watch page) + 'filter:api.video-threads.list.params': true, + 'filter:api.video-threads.list.result': true, + + // Filter params/result used to list replies of a specific thread + // (used by the video watch page when we click on the "View replies" button) + 'filter:api.video-thread-comments.list.params': true, + 'filter:api.video-thread-comments.list.result': true, + + // Filter result used to check if we need to auto blacklist a video + // (fired when a local or remote video is created or updated) + 'filter:video.auto-blacklist.result': true, + + // Filter result used to check if a user can register on the instance + 'filter:api.user.signup.allowed.result': true, + + // Filter result used to check if video/torrent download is allowed + 'filter:api.download.video.allowed.result': true, + 'filter:api.download.torrent.allowed.result': true, + + // Filter result to check if the embed is allowed for a particular request + 'filter:html.embed.video.allowed.result': true, + 'filter:html.embed.video-playlist.allowed.result': true +} + +export type ServerFilterHookName = keyof typeof serverFilterHookObject + +export const serverActionHookObject = { + // Fired when the application has been loaded and is listening HTTP requests + 'action:application.listening': true, + + // Fired when a local video is updated + 'action:api.video.updated': true, + // Fired when a local video is deleted + 'action:api.video.deleted': true, + // Fired when a local video is uploaded + 'action:api.video.uploaded': true, + // Fired when a local video is viewed + 'action:api.video.viewed': true, + + // Fired when a live video is created + 'action:api.live-video.created': true, + + // Fired when a thread is created + 'action:api.video-thread.created': true, + // Fired when a reply to a thread is created + 'action:api.video-comment-reply.created': true, + // Fired when a comment (thread or reply) is deleted + 'action:api.video-comment.deleted': true, + + // Fired when a user is blocked (banned) + 'action:api.user.blocked': true, + // Fired when a user is unblocked (unbanned) + 'action:api.user.unblocked': true, + // Fired when a user registered on the instance + 'action:api.user.registered': true, + // Fired when an admin/moderator created a user + 'action:api.user.created': true, + // Fired when a user is removed by an admin/moderator + 'action:api.user.deleted': true, + // Fired when a user is updated by an admin/moderator + 'action:api.user.updated': true, + + // Fired when a user got a new oauth2 token + 'action:api.user.oauth2-got-token': true +} + +export type ServerActionHookName = keyof typeof serverActionHookObject + +export const serverHookObject = Object.assign({}, serverFilterHookObject, serverActionHookObject) +export type ServerHookName = keyof typeof serverHookObject + +export interface ServerHook { + runHook (hookName: ServerHookName, result?: T, params?: any): Promise +} diff --git a/shared/models/plugins/server/settings/index.ts b/shared/models/plugins/server/settings/index.ts new file mode 100644 index 000000000..b456de019 --- /dev/null +++ b/shared/models/plugins/server/settings/index.ts @@ -0,0 +1,2 @@ +export * from './public-server.setting' +export * from './register-server-setting.model' diff --git a/shared/models/plugins/server/settings/public-server.setting.ts b/shared/models/plugins/server/settings/public-server.setting.ts new file mode 100644 index 000000000..9802c4d7d --- /dev/null +++ b/shared/models/plugins/server/settings/public-server.setting.ts @@ -0,0 +1,3 @@ +export interface PublicServerSetting { + publicSettings: { [ name: string ]: string } +} diff --git a/shared/models/plugins/server/settings/register-server-setting.model.ts b/shared/models/plugins/server/settings/register-server-setting.model.ts new file mode 100644 index 000000000..d9a798cac --- /dev/null +++ b/shared/models/plugins/server/settings/register-server-setting.model.ts @@ -0,0 +1,12 @@ +import { RegisterClientFormFieldOptions } from '../../client' + +export type RegisterServerSettingOptions = RegisterClientFormFieldOptions & { + // If the setting is not private, anyone can view its value (client code included) + // If the setting is private, only server-side hooks can access it + // Mainly used by the PeerTube client to get admin config + private: boolean +} + +export interface RegisteredServerSettings { + registeredSettings: RegisterServerSettingOptions[] +} -- cgit v1.2.3