import { ComponentPagination, ConfirmService, hasMoreItems, Notifier } from '@app/core'
import { PluginService } from '@app/core/plugins/plugin.service'
import { compareSemVer } from '@shared/core-utils/miscs/miscs'
-import { PeerTubePlugin } from '@shared/models/plugins/peertube-plugin.model'
-import { PluginType } from '@shared/models/plugins/plugin.type'
+import { PeerTubePlugin, PluginType } from '@shared/models'
@Component({
selector: 'my-plugin-list-installed',
import { ActivatedRoute, Router } from '@angular/router'
import { PluginApiService } from '@app/+admin/plugins/shared/plugin-api.service'
import { ComponentPagination, ConfirmService, hasMoreItems, Notifier, PluginService } from '@app/core'
-import { PeerTubePluginIndex } from '@shared/models/plugins/peertube-plugin-index.model'
-import { PluginType } from '@shared/models/plugins/plugin.type'
+import { PeerTubePluginIndex, PluginType } from '@shared/models'
@Component({
selector: 'my-plugin-search',
import { FormReactiveValidationMessages, FormValidatorService } from '@app/shared/shared-forms'
import { InstanceService } from '@app/shared/shared-instance'
import { VideoCaptionEdit, VideoEdit, VideoService } from '@app/shared/shared-main'
-import { LiveVideo, ServerConfig, VideoConstant, VideoDetails, VideoPrivacy } from '@shared/models'
-import { RegisterClientFormFieldOptions, RegisterClientVideoFieldOptions } from '@shared/models/plugins/register-client-form-field.model'
+import {
+ LiveVideo,
+ RegisterClientFormFieldOptions,
+ RegisterClientVideoFieldOptions,
+ ServerConfig,
+ VideoConstant,
+ VideoDetails,
+ VideoPrivacy
+} from '@shared/models'
import { I18nPrimengCalendarService } from './i18n-primeng-calendar.service'
import { VideoCaptionAddModalComponent } from './video-caption-add-modal.component'
import { VideoEditType } from './video-edit.type'
import { RegisterClientHelpers } from 'src/types/register-client-option.model'
import { getHookType, internalRunHook } from '@shared/core-utils/plugins/hooks'
-import { RegisterClientFormFieldOptions, RegisterClientVideoFieldOptions } from '@shared/models/plugins/register-client-form-field.model'
import {
ClientHookName,
clientHookObject,
ClientScript,
PluginType,
+ RegisterClientFormFieldOptions,
RegisterClientHookOptions,
- ServerConfigPlugin,
- RegisterClientSettingsScript
+ RegisterClientSettingsScript,
+ RegisterClientVideoFieldOptions,
+ ServerConfigPlugin
} from '../../../shared/models'
import { ClientScript as ClientScriptModule } from '../types/client-script.model'
import { importModule } from './utils'
import * as express from 'express'
-import { getFormattedObjects } from '../../helpers/utils'
+import { logger } from '@server/helpers/logger'
+import { getFormattedObjects } from '@server/helpers/utils'
+import { listAvailablePluginsFromIndex } from '@server/lib/plugins/plugin-index'
+import { PluginManager } from '@server/lib/plugins/plugin-manager'
import {
asyncMiddleware,
authenticate,
+ availablePluginsSortValidator,
ensureUserHasRight,
paginationValidator,
+ pluginsSortValidator,
setDefaultPagination,
setDefaultSort
-} from '../../middlewares'
-import { availablePluginsSortValidator, pluginsSortValidator } from '../../middlewares/validators'
-import { PluginModel } from '../../models/server/plugin'
-import { UserRight } from '../../../shared/models/users'
+} from '@server/middlewares'
import {
existingPluginValidator,
installOrUpdatePluginValidator,
listPluginsValidator,
uninstallPluginValidator,
updatePluginSettingsValidator
-} from '../../middlewares/validators/plugins'
-import { PluginManager } from '../../lib/plugins/plugin-manager'
-import { InstallOrUpdatePlugin } from '../../../shared/models/plugins/install-plugin.model'
-import { ManagePlugin } from '../../../shared/models/plugins/manage-plugin.model'
-import { logger } from '../../helpers/logger'
-import { listAvailablePluginsFromIndex } from '../../lib/plugins/plugin-index'
-import { PeertubePluginIndexList } from '../../../shared/models/plugins/peertube-plugin-index-list.model'
-import { RegisteredServerSettings } from '../../../shared/models/plugins/register-server-setting.model'
-import { PublicServerSetting } from '../../../shared/models/plugins/public-server.setting'
-import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
+} from '@server/middlewares/validators/plugins'
+import { PluginModel } from '@server/models/server/plugin'
+import { HttpStatusCode } from '@shared/core-utils'
+import {
+ InstallOrUpdatePlugin,
+ ManagePlugin,
+ PeertubePluginIndexList,
+ PublicServerSetting,
+ RegisteredServerSettings,
+ UserRight
+} from '@shared/models'
const pluginRouter = express.Router()
-import { ServerActionHookName, ServerFilterHookName } from '../../../shared/models/plugins/server-hook.model'
-import { PluginManager } from './plugin-manager'
-import { logger } from '../../helpers/logger'
import * as Bluebird from 'bluebird'
+import { ServerActionHookName, ServerFilterHookName } from '../../../shared/models'
+import { logger } from '../../helpers/logger'
+import { PluginManager } from './plugin-manager'
type PromiseFunction <U, T> = (params: U) => Promise<T> | Bluebird<T>
type RawFunction <U, T> = (params: U) => T
import { sanitizeUrl } from '@server/helpers/core-utils'
-import { ResultList } from '../../../shared/models'
-import { PeertubePluginIndexList } from '../../../shared/models/plugins/peertube-plugin-index-list.model'
-import { PeerTubePluginIndex } from '../../../shared/models/plugins/peertube-plugin-index.model'
+import { logger } from '@server/helpers/logger'
+import { doJSONRequest } from '@server/helpers/requests'
+import { CONFIG } from '@server/initializers/config'
+import { PEERTUBE_VERSION } from '@server/initializers/constants'
+import { PluginModel } from '@server/models/server/plugin'
import {
+ PeerTubePluginIndex,
+ PeertubePluginIndexList,
PeertubePluginLatestVersionRequest,
- PeertubePluginLatestVersionResponse
-} from '../../../shared/models/plugins/peertube-plugin-latest-version.model'
-import { logger } from '../../helpers/logger'
-import { doJSONRequest } from '../../helpers/requests'
-import { CONFIG } from '../../initializers/config'
-import { PEERTUBE_VERSION } from '../../initializers/constants'
-import { PluginModel } from '../../models/server/plugin'
+ PeertubePluginLatestVersionResponse,
+ ResultList
+} from '@shared/models'
import { PluginManager } from './plugin-manager'
async function listAvailablePluginsFromIndex (options: PeertubePluginIndexList) {
import { ensureDir, outputFile, readJSON } from 'fs-extra'
import { basename, join } from 'path'
import { MOAuthTokenUser, MUser } from '@server/types/models'
-import { RegisterServerHookOptions } from '@shared/models/plugins/register-server-hook.model'
+import { getCompleteLocale } from '@shared/core-utils'
+import { ClientScript, PluginPackageJson, PluginTranslation, PluginTranslationPaths, RegisterServerHookOptions } from '@shared/models'
import { getHookType, internalRunHook } from '../../../shared/core-utils/plugins/hooks'
-import {
- ClientScript,
- PluginPackageJson,
- PluginTranslationPaths as PackagePluginTranslations
-} from '../../../shared/models/plugins/plugin-package-json.model'
-import { PluginTranslation } from '../../../shared/models/plugins/plugin-translation.model'
import { PluginType } from '../../../shared/models/plugins/plugin.type'
-import { ServerHook, ServerHookName } from '../../../shared/models/plugins/server-hook.model'
+import { ServerHook, ServerHookName } from '../../../shared/models/plugins/server/server-hook.model'
import { isLibraryCodeValid, isPackageJSONValid } from '../../helpers/custom-validators/plugins'
import { logger } from '../../helpers/logger'
import { CONFIG } from '../../initializers/config'
import { ClientHtml } from '../client-html'
import { RegisterHelpers } from './register-helpers'
import { installNpmPlugin, installNpmPluginFromDisk, removeNpmPlugin } from './yarn'
-import { getCompleteLocale } from '@shared/core-utils'
export interface RegisteredPlugin {
npmName: string
// ###################### Translations ######################
- private async addTranslations (plugin: PluginModel, npmName: string, translationPaths: PackagePluginTranslations) {
+ private async addTranslations (plugin: PluginModel, npmName: string, translationPaths: PluginTranslationPaths) {
for (const locale of Object.keys(translationPaths)) {
const path = translationPaths[locale]
const json = await readJSON(join(this.getPluginPath(plugin.name, plugin.type), path))
PluginVideoLicenceManager,
PluginVideoPrivacyManager,
RegisterServerHookOptions,
- RegisterServerSettingOptions
+ RegisterServerSettingOptions,
+ serverHookObject
} from '@shared/models'
-import { serverHookObject } from '@shared/models/plugins/server-hook.model'
import { VideoTranscodingProfilesManager } from '../transcoding/video-transcoding-profiles'
import { buildPluginHelpers } from './plugin-helpers-builder'
import * as express from 'express'
import { body, param, query, ValidationChain } from 'express-validator'
-import { logger } from '../../helpers/logger'
-import { areValidationErrors } from './utils'
+import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
+import { PluginType } from '../../../shared/models/plugins/plugin.type'
+import { InstallOrUpdatePlugin } from '../../../shared/models/plugins/server/api/install-plugin.model'
+import { exists, isBooleanValid, isSafePath, toBooleanOrNull, toIntOrNull } from '../../helpers/custom-validators/misc'
import { isNpmPluginNameValid, isPluginNameValid, isPluginTypeValid, isPluginVersionValid } from '../../helpers/custom-validators/plugins'
+import { logger } from '../../helpers/logger'
+import { CONFIG } from '../../initializers/config'
import { PluginManager } from '../../lib/plugins/plugin-manager'
-import { isBooleanValid, isSafePath, toBooleanOrNull, exists, toIntOrNull } from '../../helpers/custom-validators/misc'
import { PluginModel } from '../../models/server/plugin'
-import { InstallOrUpdatePlugin } from '../../../shared/models/plugins/install-plugin.model'
-import { PluginType } from '../../../shared/models/plugins/plugin.type'
-import { CONFIG } from '../../initializers/config'
-import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
+import { areValidationErrors } from './utils'
const getPluginValidator = (pluginType: PluginType, withVersion = true) => {
const validators: (ValidationChain | express.Handler)[] = [
import { FindAndCountOptions, json, QueryTypes } from 'sequelize'
import { AllowNull, Column, CreatedAt, DataType, DefaultScope, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
import { MPlugin, MPluginFormattable } from '@server/types/models'
-import { PeerTubePlugin } from '../../../shared/models/plugins/peertube-plugin.model'
-import { PluginType } from '../../../shared/models/plugins/plugin.type'
-import { RegisterServerSettingOptions } from '../../../shared/models/plugins/register-server-setting.model'
+import { PeerTubePlugin, PluginType, RegisterServerSettingOptions } from '../../../shared/models'
import {
isPluginDescriptionValid,
isPluginHomepage,
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import 'mocha'
-
+import { HttpStatusCode } from '@shared/core-utils'
import {
checkBadCountPagination,
checkBadSortPagination,
flushAndRunServer,
immutableAssign,
installPlugin,
- makeGetRequest, makePostBodyRequest, makePutBodyRequest,
+ makeGetRequest,
+ makePostBodyRequest,
+ makePutBodyRequest,
ServerInfo,
setAccessTokensToServers,
userLogin
-} from '../../../../shared/extra-utils'
-import { PluginType } from '../../../../shared/models/plugins/plugin.type'
-import { PeerTubePlugin } from '../../../../shared/models/plugins/peertube-plugin.model'
-import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
+} from '@shared/extra-utils'
+import { PeerTubePlugin, PluginType } from '@shared/models'
describe('Test server plugins API validators', function () {
let server: ServerInfo
updatePluginSettings,
wait,
waitUntilLog
-} from '../../../../shared/extra-utils'
-import { PeerTubePluginIndex } from '../../../../shared/models/plugins/peertube-plugin-index.model'
-import { PeerTubePlugin } from '../../../../shared/models/plugins/peertube-plugin.model'
-import { PluginPackageJson } from '../../../../shared/models/plugins/plugin-package-json.model'
-import { PluginType } from '../../../../shared/models/plugins/plugin.type'
-import { PublicServerSetting } from '../../../../shared/models/plugins/public-server.setting'
-import { ServerConfig } from '../../../../shared/models/server'
-import { User } from '../../../../shared/models/users'
+} from '@shared/extra-utils'
+import { PeerTubePlugin, PeerTubePluginIndex, PluginPackageJson, PluginType, PublicServerSetting, ServerConfig, User } from '@shared/models'
const expect = chai.expect
registerTSPaths()
import * as program from 'commander'
-import { PluginType } from '../../shared/models/plugins/plugin.type'
import { installPlugin, listPlugins, uninstallPlugin, updatePlugin } from '../../shared/extra-utils/server/plugins'
import { getAdminTokenOrDie, getServerCredentials } from './cli'
-import { PeerTubePlugin } from '../../shared/models/plugins/peertube-plugin.model'
+import { PeerTubePlugin, PluginType } from '../../shared/models'
import { isAbsolute } from 'path'
import * as CliTable3 from 'cli-table3'
import commander = require('commander')
import { readJSON, writeJSON } from 'fs-extra'
import { join } from 'path'
import { RegisteredServerSettings } from '@shared/models'
-import { PeertubePluginIndexList } from '../../models/plugins/peertube-plugin-index-list.model'
+import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
+import { PeertubePluginIndexList } from '../../models/plugins/plugin-index/peertube-plugin-index-list.model'
import { PluginType } from '../../models/plugins/plugin.type'
import { buildServerDirectory, root } from '../miscs/miscs'
import { makeGetRequest, makePostBodyRequest, makePutBodyRequest } from '../requests/requests'
import { ServerInfo } from './servers'
-import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
function listPlugins (parameters: {
url: string
--- /dev/null
+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'
-import { RegisterServerSettingOptions } from "./register-server-setting.model"
+import { RegisterServerSettingOptions } from '../server'
export interface RegisterClientSettingsScript {
isSettingHidden (options: {
-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'
--- /dev/null
+export * from './peertube-plugin-index-list.model'
+export * from './peertube-plugin-index.model'
+export * from './peertube-plugin-latest-version.model'
-import { PluginType } from './plugin.type'
+import { PluginType } from '../plugin.type'
export interface PeertubePluginIndexList {
start: number
-import { PluginClientScope } from './plugin-client-scope.type'
+import { PluginClientScope } from './client/plugin-client-scope.type'
export type PluginTranslationPaths = {
[ locale: string ]: string
--- /dev/null
+export * from './install-plugin.model'
+export * from './manage-plugin.model'
+export * from './peertube-plugin.model'
-import { PluginType } from './plugin.type'
+import { PluginType } from '../../plugin.type'
export interface PeerTubePlugin {
name: string
--- /dev/null
+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'
--- /dev/null
+
+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'
-import { VideoPlaylistPrivacy } from '../videos/playlist/video-playlist-privacy.model'
+import { VideoPlaylistPrivacy } from '../../../videos/playlist/video-playlist-privacy.model'
export interface PluginPlaylistPrivacyManager {
// PUBLIC = 1,
-import { EncoderOptionsBuilder } from '../videos/video-transcoding.model'
+import { EncoderOptionsBuilder } from '../../../videos/video-transcoding.model'
export interface PluginTranscodingManager {
addLiveProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean
-import { VideoPrivacy } from '../videos/video-privacy.enum'
+import { VideoPrivacy } from '../../../videos/video-privacy.enum'
export interface PluginVideoPrivacyManager {
// PUBLIC = 1
--- /dev/null
+export * from './public-server.setting'
+export * from './register-server-setting.model'
-import { RegisterClientFormFieldOptions } from './register-client-form-field.model'
+import { RegisterClientFormFieldOptions } from '../../client'
export type RegisterServerSettingOptions = RegisterClientFormFieldOptions & {
// If the setting is not private, anyone can view its value (client code included)