Fix plugin settings manager definition

This mainly fix the `onSettingsChange` argument typing.
I'm not 100% sure the setting `value` can be a boolean though.
But this is how it was typed before so I just made it consistent.

Feel free to change - or suggest change - to the type names / location.
pull/4750/head
lutangar 2022-01-20 12:07:15 +01:00 committed by Chocobozzz
parent 82b9a1005c
commit d2d4a5a999
5 changed files with 27 additions and 16 deletions

View File

@ -4,7 +4,7 @@ import {
RegisterClientRouteOptions, RegisterClientRouteOptions,
RegisterClientSettingsScriptOptions, RegisterClientSettingsScriptOptions,
RegisterClientVideoFieldOptions, RegisterClientVideoFieldOptions,
ServerConfig ServerConfig, SettingEntries
} from '@shared/models' } from '@shared/models'
export type RegisterClientOptions = { export type RegisterClientOptions = {
@ -30,7 +30,7 @@ export type RegisterClientHelpers = {
getAuthHeader: () => { 'Authorization': string } | undefined getAuthHeader: () => { 'Authorization': string } | undefined
getSettings: () => Promise<{ [ name: string ]: string }> getSettings: () => Promise<SettingEntries>
getServerConfig: () => Promise<ServerConfig> getServerConfig: () => Promise<ServerConfig>

View File

@ -17,6 +17,7 @@ import {
RegisterServerHookOptions, RegisterServerHookOptions,
RegisterServerSettingOptions, RegisterServerSettingOptions,
serverHookObject, serverHookObject,
SettingsChangeCallback,
VideoPlaylistPrivacy, VideoPlaylistPrivacy,
VideoPrivacy VideoPrivacy
} from '@shared/models' } from '@shared/models'
@ -46,7 +47,7 @@ export class RegisterHelpers {
private idAndPassAuths: RegisterServerAuthPassOptions[] = [] private idAndPassAuths: RegisterServerAuthPassOptions[] = []
private externalAuths: RegisterServerAuthExternalOptions[] = [] private externalAuths: RegisterServerAuthExternalOptions[] = []
private readonly onSettingsChangeCallbacks: ((settings: any) => Promise<any>)[] = [] private readonly onSettingsChangeCallbacks: SettingsChangeCallback[] = []
private readonly router: express.Router private readonly router: express.Router
private readonly videoConstantManagerFactory: VideoConstantManagerFactory private readonly videoConstantManagerFactory: VideoConstantManagerFactory
@ -256,7 +257,7 @@ export class RegisterHelpers {
setSetting: (name: string, value: string) => PluginModel.setSetting(this.plugin.name, this.plugin.type, name, value), setSetting: (name: string, value: string) => PluginModel.setSetting(this.plugin.name, this.plugin.type, name, value),
onSettingsChange: (cb: (settings: any) => Promise<any>) => this.onSettingsChangeCallbacks.push(cb) onSettingsChange: (cb: SettingsChangeCallback) => this.onSettingsChangeCallbacks.push(cb)
} }
} }

View File

@ -2,7 +2,7 @@ import { FindAndCountOptions, json, QueryTypes } from 'sequelize'
import { AllowNull, Column, CreatedAt, DataType, DefaultScope, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' import { AllowNull, Column, CreatedAt, DataType, DefaultScope, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
import { MPlugin, MPluginFormattable } from '@server/types/models' import { MPlugin, MPluginFormattable } from '@server/types/models'
import { AttributesOnly } from '@shared/typescript-utils' import { AttributesOnly } from '@shared/typescript-utils'
import { PeerTubePlugin, PluginType, RegisterServerSettingOptions } from '../../../shared/models' import { PeerTubePlugin, PluginType, RegisterServerSettingOptions, SettingEntries, SettingValue } from '../../../shared/models'
import { import {
isPluginDescriptionValid, isPluginDescriptionValid,
isPluginHomepage, isPluginHomepage,
@ -148,7 +148,7 @@ export class PluginModel extends Model<Partial<AttributesOnly<PluginModel>>> {
return PluginModel.findOne(query) return PluginModel.findOne(query)
.then(p => { .then(p => {
const result: { [settingName: string ]: string | boolean } = {} const result: SettingEntries = {}
for (const name of settingNames) { for (const name of settingNames) {
if (!p || !p.settings || p.settings[name] === undefined) { if (!p || !p.settings || p.settings[name] === undefined) {
@ -166,7 +166,7 @@ export class PluginModel extends Model<Partial<AttributesOnly<PluginModel>>> {
}) })
} }
static setSetting (pluginName: string, pluginType: PluginType, settingName: string, settingValue: string) { static setSetting (pluginName: string, pluginType: PluginType, settingName: string, settingValue: SettingValue) {
const query = { const query = {
where: { where: {
name: pluginName, name: pluginName,
@ -273,7 +273,7 @@ export class PluginModel extends Model<Partial<AttributesOnly<PluginModel>>> {
} }
getPublicSettings (registeredSettings: RegisterServerSettingOptions[]) { getPublicSettings (registeredSettings: RegisterServerSettingOptions[]) {
const result: { [ name: string ]: string } = {} const result: SettingEntries = {}
const settings = this.settings || {} const settings = this.settings || {}
for (const r of registeredSettings) { for (const r of registeredSettings) {

View File

@ -1,9 +1,17 @@
export interface PluginSettingsManager { export type SettingValue = string | boolean
getSetting: (name: string) => Promise<string | boolean>
getSettings: (names: string[]) => Promise<{ [settingName: string]: string | boolean }> export interface SettingEntries {
[settingName: string]: SettingValue
setSetting: (name: string, value: string) => Promise<any> }
onSettingsChange: (cb: (names: string[]) => Promise<any>) => void export type SettingsChangeCallback = (settings: SettingEntries) => Promise<any>
export interface PluginSettingsManager {
getSetting: (name: string) => Promise<SettingValue>
getSettings: (names: string[]) => Promise<SettingEntries>
setSetting: (name: string, value: SettingValue) => Promise<any>
onSettingsChange: (cb: SettingsChangeCallback) => void
} }

View File

@ -1,3 +1,5 @@
import { SettingEntries } from '../managers/plugin-settings-manager.model'
export interface PublicServerSetting { export interface PublicServerSetting {
publicSettings: { [ name: string ]: string } publicSettings: SettingEntries
} }