mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-05 10:49:28 +02:00
Reorganize plugin models
This commit is contained in:
parent
2b02c520e6
commit
428ccb8b7a
48 changed files with 113 additions and 112 deletions
3
shared/models/plugins/server/api/index.ts
Normal file
3
shared/models/plugins/server/api/index.ts
Normal file
|
@ -0,0 +1,3 @@
|
|||
export * from './install-plugin.model'
|
||||
export * from './manage-plugin.model'
|
||||
export * from './peertube-plugin.model'
|
4
shared/models/plugins/server/api/install-plugin.model.ts
Normal file
4
shared/models/plugins/server/api/install-plugin.model.ts
Normal file
|
@ -0,0 +1,4 @@
|
|||
export interface InstallOrUpdatePlugin {
|
||||
npmName?: string
|
||||
path?: string
|
||||
}
|
3
shared/models/plugins/server/api/manage-plugin.model.ts
Normal file
3
shared/models/plugins/server/api/manage-plugin.model.ts
Normal file
|
@ -0,0 +1,3 @@
|
|||
export interface ManagePlugin {
|
||||
npmName: string
|
||||
}
|
16
shared/models/plugins/server/api/peertube-plugin.model.ts
Normal file
16
shared/models/plugins/server/api/peertube-plugin.model.ts
Normal file
|
@ -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
|
||||
}
|
6
shared/models/plugins/server/index.ts
Normal file
6
shared/models/plugins/server/index.ts
Normal file
|
@ -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'
|
9
shared/models/plugins/server/managers/index.ts
Normal file
9
shared/models/plugins/server/managers/index.ts
Normal file
|
@ -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'
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
export interface PluginSettingsManager {
|
||||
getSetting: (name: string) => Promise<string | boolean>
|
||||
|
||||
getSettings: (names: string[]) => Promise<{ [settingName: string]: string | boolean }>
|
||||
|
||||
setSetting: (name: string, value: string) => Promise<any>
|
||||
|
||||
onSettingsChange: (cb: (names: string[]) => Promise<any>) => void
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
export interface PluginStorageManager {
|
||||
getData: (key: string) => Promise<string>
|
||||
|
||||
storeData: (key: string, data: any) => Promise<any>
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
export interface PluginVideoCategoryManager {
|
||||
addCategory: (categoryKey: number, categoryLabel: string) => boolean
|
||||
|
||||
deleteCategory: (categoryKey: number) => boolean
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
export interface PluginVideoLanguageManager {
|
||||
addLanguage: (languageKey: string, languageLabel: string) => boolean
|
||||
|
||||
deleteLanguage: (languageKey: string) => boolean
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
export interface PluginVideoLicenceManager {
|
||||
addLicence: (licenceKey: number, licenceLabel: string) => boolean
|
||||
|
||||
deleteLicence: (licenceKey: number) => boolean
|
||||
}
|
|
@ -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
|
||||
}
|
5
shared/models/plugins/server/plugin-translation.model.ts
Normal file
5
shared/models/plugins/server/plugin-translation.model.ts
Normal file
|
@ -0,0 +1,5 @@
|
|||
export type PluginTranslation = {
|
||||
[ npmName: string ]: {
|
||||
[ key: string ]: string
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { ServerHookName } from './server-hook.model'
|
||||
|
||||
export interface RegisterServerHookOptions {
|
||||
target: ServerHookName
|
||||
handler: Function
|
||||
priority?: number
|
||||
}
|
123
shared/models/plugins/server/server-hook.model.ts
Normal file
123
shared/models/plugins/server/server-hook.model.ts
Normal file
|
@ -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 <T> (hookName: ServerHookName, result?: T, params?: any): Promise<T>
|
||||
}
|
2
shared/models/plugins/server/settings/index.ts
Normal file
2
shared/models/plugins/server/settings/index.ts
Normal file
|
@ -0,0 +1,2 @@
|
|||
export * from './public-server.setting'
|
||||
export * from './register-server-setting.model'
|
|
@ -0,0 +1,3 @@
|
|||
export interface PublicServerSetting {
|
||||
publicSettings: { [ name: string ]: string }
|
||||
}
|
|
@ -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[]
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue