]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - shared/models/server/server-config.model.ts
Bumped to version v5.2.1
[github/Chocobozzz/PeerTube.git] / shared / models / server / server-config.model.ts
1 import { ClientScriptJSON } from '../plugins/plugin-package-json.model'
2 import { NSFWPolicyType } from '../videos/nsfw-policy.type'
3 import { VideoPrivacy } from '../videos/video-privacy.enum'
4 import { BroadcastMessageLevel } from './broadcast-message-level.type'
5
6 export interface ServerConfigPlugin {
7 name: string
8 npmName: string
9 version: string
10 description: string
11 clientScripts: { [name: string]: ClientScriptJSON }
12 }
13
14 export interface ServerConfigTheme extends ServerConfigPlugin {
15 css: string[]
16 }
17
18 export interface RegisteredExternalAuthConfig {
19 npmName: string
20 name: string
21 version: string
22 authName: string
23 authDisplayName: string
24 }
25
26 export interface RegisteredIdAndPassAuthConfig {
27 npmName: string
28 name: string
29 version: string
30 authName: string
31 weight: number
32 }
33
34 export interface ServerConfig {
35 serverVersion: string
36 serverCommit?: string
37
38 client: {
39 videos: {
40 miniature: {
41 displayAuthorAvatar: boolean
42 preferAuthorDisplayName: boolean
43 }
44 resumableUpload: {
45 maxChunkSize: number
46 }
47 }
48
49 menu: {
50 login: {
51 redirectOnSingleExternalAuth: boolean
52 }
53 }
54 }
55
56 defaults: {
57 publish: {
58 downloadEnabled: boolean
59 commentsEnabled: boolean
60 privacy: VideoPrivacy
61 licence: number
62 }
63
64 p2p: {
65 webapp: {
66 enabled: boolean
67 }
68
69 embed: {
70 enabled: boolean
71 }
72 }
73 }
74
75 webadmin: {
76 configuration: {
77 edition: {
78 allowed: boolean
79 }
80 }
81 }
82
83 instance: {
84 name: string
85 shortDescription: string
86 isNSFW: boolean
87 defaultNSFWPolicy: NSFWPolicyType
88 defaultClientRoute: string
89 customizations: {
90 javascript: string
91 css: string
92 }
93 }
94
95 search: {
96 remoteUri: {
97 users: boolean
98 anonymous: boolean
99 }
100
101 searchIndex: {
102 enabled: boolean
103 url: string
104 disableLocalSearch: boolean
105 isDefaultSearch: boolean
106 }
107 }
108
109 plugin: {
110 registered: ServerConfigPlugin[]
111
112 registeredExternalAuths: RegisteredExternalAuthConfig[]
113
114 registeredIdAndPassAuths: RegisteredIdAndPassAuthConfig[]
115 }
116
117 theme: {
118 registered: ServerConfigTheme[]
119 default: string
120 }
121
122 email: {
123 enabled: boolean
124 }
125
126 contactForm: {
127 enabled: boolean
128 }
129
130 signup: {
131 allowed: boolean
132 allowedForCurrentIP: boolean
133 requiresEmailVerification: boolean
134 requiresApproval: boolean
135 minimumAge: number
136 }
137
138 transcoding: {
139 hls: {
140 enabled: boolean
141 }
142
143 webtorrent: {
144 enabled: boolean
145 }
146
147 enabledResolutions: number[]
148
149 profile: string
150 availableProfiles: string[]
151
152 remoteRunners: {
153 enabled: boolean
154 }
155 }
156
157 live: {
158 enabled: boolean
159
160 allowReplay: boolean
161 latencySetting: {
162 enabled: boolean
163 }
164
165 maxDuration: number
166 maxInstanceLives: number
167 maxUserLives: number
168
169 transcoding: {
170 enabled: boolean
171
172 remoteRunners: {
173 enabled: boolean
174 }
175
176 enabledResolutions: number[]
177
178 profile: string
179 availableProfiles: string[]
180 }
181
182 rtmp: {
183 port: number
184 }
185 }
186
187 videoStudio: {
188 enabled: boolean
189
190 remoteRunners: {
191 enabled: boolean
192 }
193 }
194
195 import: {
196 videos: {
197 http: {
198 enabled: boolean
199 }
200 torrent: {
201 enabled: boolean
202 }
203 }
204 videoChannelSynchronization: {
205 enabled: boolean
206 }
207 }
208
209 autoBlacklist: {
210 videos: {
211 ofUsers: {
212 enabled: boolean
213 }
214 }
215 }
216
217 avatar: {
218 file: {
219 size: {
220 max: number
221 }
222 extensions: string[]
223 }
224 }
225
226 banner: {
227 file: {
228 size: {
229 max: number
230 }
231 extensions: string[]
232 }
233 }
234
235 video: {
236 image: {
237 size: {
238 max: number
239 }
240 extensions: string[]
241 }
242 file: {
243 extensions: string[]
244 }
245 }
246
247 videoCaption: {
248 file: {
249 size: {
250 max: number
251 }
252 extensions: string[]
253 }
254 }
255
256 user: {
257 videoQuota: number
258 videoQuotaDaily: number
259 }
260
261 videoChannels: {
262 maxPerUser: number
263 }
264
265 trending: {
266 videos: {
267 intervalDays: number
268 algorithms: {
269 enabled: string[]
270 default: string
271 }
272 }
273 }
274
275 tracker: {
276 enabled: boolean
277 }
278
279 followings: {
280 instance: {
281 autoFollowIndex: {
282 indexUrl: string
283 }
284 }
285 }
286
287 broadcastMessage: {
288 enabled: boolean
289 message: string
290 level: BroadcastMessageLevel
291 dismissable: boolean
292 }
293
294 homepage: {
295 enabled: boolean
296 }
297 }
298
299 export type HTMLServerConfig = Omit<ServerConfig, 'signup'>