aboutsummaryrefslogtreecommitdiffhomepage
path: root/shared/models/server
diff options
context:
space:
mode:
Diffstat (limited to 'shared/models/server')
-rw-r--r--shared/models/server/about.model.ts20
-rw-r--r--shared/models/server/broadcast-message-level.type.ts1
-rw-r--r--shared/models/server/client-log-create.model.ts11
-rw-r--r--shared/models/server/client-log-level.type.ts1
-rw-r--r--shared/models/server/contact-form.model.ts6
-rw-r--r--shared/models/server/custom-config.model.ts259
-rw-r--r--shared/models/server/debug.model.ts12
-rw-r--r--shared/models/server/emailer.model.ts49
-rw-r--r--shared/models/server/index.ts16
-rw-r--r--shared/models/server/job.model.ts304
-rw-r--r--shared/models/server/peertube-problem-document.model.ts32
-rw-r--r--shared/models/server/server-config.model.ts305
-rw-r--r--shared/models/server/server-debug.model.ts4
-rw-r--r--shared/models/server/server-error-code.enum.ts89
-rw-r--r--shared/models/server/server-follow-create.model.ts4
-rw-r--r--shared/models/server/server-log-level.type.ts1
-rw-r--r--shared/models/server/server-stats.model.ts47
17 files changed, 0 insertions, 1161 deletions
diff --git a/shared/models/server/about.model.ts b/shared/models/server/about.model.ts
deleted file mode 100644
index 6d4ba63c4..000000000
--- a/shared/models/server/about.model.ts
+++ /dev/null
@@ -1,20 +0,0 @@
1export interface About {
2 instance: {
3 name: string
4 shortDescription: string
5 description: string
6 terms: string
7
8 codeOfConduct: string
9 hardwareInformation: string
10
11 creationReason: string
12 moderationInformation: string
13 administrator: string
14 maintenanceLifetime: string
15 businessModel: string
16
17 languages: string[]
18 categories: number[]
19 }
20}
diff --git a/shared/models/server/broadcast-message-level.type.ts b/shared/models/server/broadcast-message-level.type.ts
deleted file mode 100644
index bf43e18b5..000000000
--- a/shared/models/server/broadcast-message-level.type.ts
+++ /dev/null
@@ -1 +0,0 @@
1export type BroadcastMessageLevel = 'info' | 'warning' | 'error'
diff --git a/shared/models/server/client-log-create.model.ts b/shared/models/server/client-log-create.model.ts
deleted file mode 100644
index c9dc65568..000000000
--- a/shared/models/server/client-log-create.model.ts
+++ /dev/null
@@ -1,11 +0,0 @@
1import { ClientLogLevel } from './client-log-level.type'
2
3export interface ClientLogCreate {
4 message: string
5 url: string
6 level: ClientLogLevel
7
8 stackTrace?: string
9 userAgent?: string
10 meta?: string
11}
diff --git a/shared/models/server/client-log-level.type.ts b/shared/models/server/client-log-level.type.ts
deleted file mode 100644
index 18dea2751..000000000
--- a/shared/models/server/client-log-level.type.ts
+++ /dev/null
@@ -1 +0,0 @@
1export type ClientLogLevel = 'warn' | 'error'
diff --git a/shared/models/server/contact-form.model.ts b/shared/models/server/contact-form.model.ts
deleted file mode 100644
index c23e6d1ba..000000000
--- a/shared/models/server/contact-form.model.ts
+++ /dev/null
@@ -1,6 +0,0 @@
1export interface ContactForm {
2 fromEmail: string
3 fromName: string
4 subject: string
5 body: string
6}
diff --git a/shared/models/server/custom-config.model.ts b/shared/models/server/custom-config.model.ts
deleted file mode 100644
index 0dbb46fa8..000000000
--- a/shared/models/server/custom-config.model.ts
+++ /dev/null
@@ -1,259 +0,0 @@
1import { NSFWPolicyType } from '../videos/nsfw-policy.type'
2import { BroadcastMessageLevel } from './broadcast-message-level.type'
3
4export type ConfigResolutions = {
5 '144p': boolean
6 '240p': boolean
7 '360p': boolean
8 '480p': boolean
9 '720p': boolean
10 '1080p': boolean
11 '1440p': boolean
12 '2160p': boolean
13}
14
15export interface CustomConfig {
16 instance: {
17 name: string
18 shortDescription: string
19 description: string
20 terms: string
21 codeOfConduct: string
22
23 creationReason: string
24 moderationInformation: string
25 administrator: string
26 maintenanceLifetime: string
27 businessModel: string
28 hardwareInformation: string
29
30 languages: string[]
31 categories: number[]
32
33 isNSFW: boolean
34 defaultNSFWPolicy: NSFWPolicyType
35
36 defaultClientRoute: string
37
38 customizations: {
39 javascript?: string
40 css?: string
41 }
42 }
43
44 theme: {
45 default: string
46 }
47
48 services: {
49 twitter: {
50 username: string
51 whitelisted: boolean
52 }
53 }
54
55 client: {
56 videos: {
57 miniature: {
58 preferAuthorDisplayName: boolean
59 }
60 }
61
62 menu: {
63 login: {
64 redirectOnSingleExternalAuth: boolean
65 }
66 }
67 }
68
69 cache: {
70 previews: {
71 size: number
72 }
73
74 captions: {
75 size: number
76 }
77
78 torrents: {
79 size: number
80 }
81
82 storyboards: {
83 size: number
84 }
85 }
86
87 signup: {
88 enabled: boolean
89 limit: number
90 requiresApproval: boolean
91 requiresEmailVerification: boolean
92 minimumAge: number
93 }
94
95 admin: {
96 email: string
97 }
98
99 contactForm: {
100 enabled: boolean
101 }
102
103 user: {
104 history: {
105 videos: {
106 enabled: boolean
107 }
108 }
109 videoQuota: number
110 videoQuotaDaily: number
111 }
112
113 videoChannels: {
114 maxPerUser: number
115 }
116
117 transcoding: {
118 enabled: boolean
119
120 allowAdditionalExtensions: boolean
121 allowAudioFiles: boolean
122
123 remoteRunners: {
124 enabled: boolean
125 }
126
127 threads: number
128 concurrency: number
129
130 profile: string
131
132 resolutions: ConfigResolutions & { '0p': boolean }
133
134 alwaysTranscodeOriginalResolution: boolean
135
136 webVideos: {
137 enabled: boolean
138 }
139
140 hls: {
141 enabled: boolean
142 }
143 }
144
145 live: {
146 enabled: boolean
147
148 allowReplay: boolean
149
150 latencySetting: {
151 enabled: boolean
152 }
153
154 maxDuration: number
155 maxInstanceLives: number
156 maxUserLives: number
157
158 transcoding: {
159 enabled: boolean
160 remoteRunners: {
161 enabled: boolean
162 }
163 threads: number
164 profile: string
165 resolutions: ConfigResolutions
166 alwaysTranscodeOriginalResolution: boolean
167 }
168 }
169
170 videoStudio: {
171 enabled: boolean
172
173 remoteRunners: {
174 enabled: boolean
175 }
176 }
177
178 videoFile: {
179 update: {
180 enabled: boolean
181 }
182 }
183
184 import: {
185 videos: {
186 concurrency: number
187
188 http: {
189 enabled: boolean
190 }
191 torrent: {
192 enabled: boolean
193 }
194 }
195 videoChannelSynchronization: {
196 enabled: boolean
197 maxPerUser: number
198 }
199 }
200
201 trending: {
202 videos: {
203 algorithms: {
204 enabled: string[]
205 default: string
206 }
207 }
208 }
209
210 autoBlacklist: {
211 videos: {
212 ofUsers: {
213 enabled: boolean
214 }
215 }
216 }
217
218 followers: {
219 instance: {
220 enabled: boolean
221 manualApproval: boolean
222 }
223 }
224
225 followings: {
226 instance: {
227 autoFollowBack: {
228 enabled: boolean
229 }
230
231 autoFollowIndex: {
232 enabled: boolean
233 indexUrl: string
234 }
235 }
236 }
237
238 broadcastMessage: {
239 enabled: boolean
240 message: string
241 level: BroadcastMessageLevel
242 dismissable: boolean
243 }
244
245 search: {
246 remoteUri: {
247 users: boolean
248 anonymous: boolean
249 }
250
251 searchIndex: {
252 enabled: boolean
253 url: string
254 disableLocalSearch: boolean
255 isDefaultSearch: boolean
256 }
257 }
258
259}
diff --git a/shared/models/server/debug.model.ts b/shared/models/server/debug.model.ts
deleted file mode 100644
index 41f2109af..000000000
--- a/shared/models/server/debug.model.ts
+++ /dev/null
@@ -1,12 +0,0 @@
1export interface Debug {
2 ip: string
3 activityPubMessagesWaiting: number
4}
5
6export interface SendDebugCommand {
7 command: 'remove-dandling-resumable-uploads'
8 | 'process-video-views-buffer'
9 | 'process-video-viewers'
10 | 'process-video-channel-sync-latest'
11 | 'process-update-videos-scheduler'
12}
diff --git a/shared/models/server/emailer.model.ts b/shared/models/server/emailer.model.ts
deleted file mode 100644
index 39512d306..000000000
--- a/shared/models/server/emailer.model.ts
+++ /dev/null
@@ -1,49 +0,0 @@
1type From = string | { name?: string, address: string }
2
3interface Base extends Partial<SendEmailDefaultMessageOptions> {
4 to: string[] | string
5}
6
7interface MailTemplate extends Base {
8 template: string
9 locals?: { [key: string]: any }
10 text?: undefined
11}
12
13interface MailText extends Base {
14 text: string
15
16 locals?: Partial<SendEmailDefaultLocalsOptions> & {
17 title?: string
18 action?: {
19 url: string
20 text: string
21 }
22 }
23}
24
25interface SendEmailDefaultLocalsOptions {
26 instanceName: string
27 text: string
28 subject: string
29}
30
31interface SendEmailDefaultMessageOptions {
32 to: string[] | string
33 from: From
34 subject: string
35 replyTo: string
36}
37
38export type SendEmailDefaultOptions = {
39 template: 'common'
40
41 message: SendEmailDefaultMessageOptions
42
43 locals: SendEmailDefaultLocalsOptions & {
44 WEBSERVER: any
45 EMAIL: any
46 }
47}
48
49export type SendEmailOptions = MailTemplate | MailText
diff --git a/shared/models/server/index.ts b/shared/models/server/index.ts
deleted file mode 100644
index a9136f3d4..000000000
--- a/shared/models/server/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
1export * from './about.model'
2export * from './broadcast-message-level.type'
3export * from './client-log-create.model'
4export * from './client-log-level.type'
5export * from './contact-form.model'
6export * from './custom-config.model'
7export * from './debug.model'
8export * from './emailer.model'
9export * from './job.model'
10export * from './peertube-problem-document.model'
11export * from './server-config.model'
12export * from './server-debug.model'
13export * from './server-error-code.enum'
14export * from './server-follow-create.model'
15export * from './server-log-level.type'
16export * from './server-stats.model'
diff --git a/shared/models/server/job.model.ts b/shared/models/server/job.model.ts
deleted file mode 100644
index c14806dab..000000000
--- a/shared/models/server/job.model.ts
+++ /dev/null
@@ -1,304 +0,0 @@
1import { ContextType } from '../activitypub/context'
2import { VideoState } from '../videos'
3import { VideoResolution } from '../videos/file/video-resolution.enum'
4import { VideoStudioTaskCut } from '../videos/studio'
5import { SendEmailOptions } from './emailer.model'
6
7export type JobState = 'active' | 'completed' | 'failed' | 'waiting' | 'delayed' | 'paused' | 'waiting-children'
8
9export type JobType =
10 | 'activitypub-cleaner'
11 | 'activitypub-follow'
12 | 'activitypub-http-broadcast-parallel'
13 | 'activitypub-http-broadcast'
14 | 'activitypub-http-fetcher'
15 | 'activitypub-http-unicast'
16 | 'activitypub-refresher'
17 | 'actor-keys'
18 | 'after-video-channel-import'
19 | 'email'
20 | 'federate-video'
21 | 'transcoding-job-builder'
22 | 'manage-video-torrent'
23 | 'move-to-object-storage'
24 | 'notify'
25 | 'video-channel-import'
26 | 'video-file-import'
27 | 'video-import'
28 | 'video-live-ending'
29 | 'video-redundancy'
30 | 'video-studio-edition'
31 | 'video-transcoding'
32 | 'videos-views-stats'
33 | 'generate-video-storyboard'
34
35export interface Job {
36 id: number | string
37 state: JobState | 'unknown'
38 type: JobType
39 data: any
40 priority: number
41 progress: number
42 error: any
43 createdAt: Date | string
44 finishedOn: Date | string
45 processedOn: Date | string
46
47 parent?: {
48 id: string
49 }
50}
51
52export type ActivitypubHttpBroadcastPayload = {
53 uris: string[]
54 contextType: ContextType
55 body: any
56 signatureActorId?: number
57}
58
59export type ActivitypubFollowPayload = {
60 followerActorId: number
61 name: string
62 host: string
63 isAutoFollow?: boolean
64 assertIsChannel?: boolean
65}
66
67export type FetchType = 'activity' | 'video-shares' | 'video-comments' | 'account-playlists'
68export type ActivitypubHttpFetcherPayload = {
69 uri: string
70 type: FetchType
71 videoId?: number
72}
73
74export type ActivitypubHttpUnicastPayload = {
75 uri: string
76 contextType: ContextType
77 signatureActorId?: number
78 body: object
79}
80
81export type RefreshPayload = {
82 type: 'video' | 'video-playlist' | 'actor'
83 url: string
84}
85
86export type EmailPayload = SendEmailOptions
87
88export type VideoFileImportPayload = {
89 videoUUID: string
90 filePath: string
91}
92
93// ---------------------------------------------------------------------------
94
95export type VideoImportTorrentPayloadType = 'magnet-uri' | 'torrent-file'
96export type VideoImportYoutubeDLPayloadType = 'youtube-dl'
97
98export interface VideoImportYoutubeDLPayload {
99 type: VideoImportYoutubeDLPayloadType
100 videoImportId: number
101
102 fileExt?: string
103}
104
105export interface VideoImportTorrentPayload {
106 type: VideoImportTorrentPayloadType
107 videoImportId: number
108}
109
110export type VideoImportPayload = (VideoImportYoutubeDLPayload | VideoImportTorrentPayload) & {
111 preventException: boolean
112}
113
114export interface VideoImportPreventExceptionResult {
115 resultType: 'success' | 'error'
116}
117
118// ---------------------------------------------------------------------------
119
120export type VideoRedundancyPayload = {
121 videoId: number
122}
123
124export type ManageVideoTorrentPayload =
125 {
126 action: 'create'
127 videoId: number
128 videoFileId: number
129 } | {
130 action: 'update-metadata'
131
132 videoId?: number
133 streamingPlaylistId?: number
134
135 videoFileId: number
136 }
137
138// Video transcoding payloads
139
140interface BaseTranscodingPayload {
141 videoUUID: string
142 isNewVideo?: boolean
143}
144
145export interface HLSTranscodingPayload extends BaseTranscodingPayload {
146 type: 'new-resolution-to-hls'
147 resolution: VideoResolution
148 fps: number
149 copyCodecs: boolean
150
151 deleteWebVideoFiles: boolean
152}
153
154export interface NewWebVideoResolutionTranscodingPayload extends BaseTranscodingPayload {
155 type: 'new-resolution-to-web-video'
156 resolution: VideoResolution
157 fps: number
158}
159
160export interface MergeAudioTranscodingPayload extends BaseTranscodingPayload {
161 type: 'merge-audio-to-web-video'
162
163 resolution: VideoResolution
164 fps: number
165
166 hasChildren: boolean
167}
168
169export interface OptimizeTranscodingPayload extends BaseTranscodingPayload {
170 type: 'optimize-to-web-video'
171
172 quickTranscode: boolean
173
174 hasChildren: boolean
175}
176
177export type VideoTranscodingPayload =
178 HLSTranscodingPayload
179 | NewWebVideoResolutionTranscodingPayload
180 | OptimizeTranscodingPayload
181 | MergeAudioTranscodingPayload
182
183export interface VideoLiveEndingPayload {
184 videoId: number
185 publishedAt: string
186 liveSessionId: number
187 streamingPlaylistId: number
188
189 replayDirectory?: string
190}
191
192export interface ActorKeysPayload {
193 actorId: number
194}
195
196export interface DeleteResumableUploadMetaFilePayload {
197 filepath: string
198}
199
200export interface MoveObjectStoragePayload {
201 videoUUID: string
202 isNewVideo: boolean
203 previousVideoState: VideoState
204}
205
206export type VideoStudioTaskCutPayload = VideoStudioTaskCut
207
208export type VideoStudioTaskIntroPayload = {
209 name: 'add-intro'
210
211 options: {
212 file: string
213 }
214}
215
216export type VideoStudioTaskOutroPayload = {
217 name: 'add-outro'
218
219 options: {
220 file: string
221 }
222}
223
224export type VideoStudioTaskWatermarkPayload = {
225 name: 'add-watermark'
226
227 options: {
228 file: string
229
230 watermarkSizeRatio: number
231 horitonzalMarginRatio: number
232 verticalMarginRatio: number
233 }
234}
235
236export type VideoStudioTaskPayload =
237 VideoStudioTaskCutPayload |
238 VideoStudioTaskIntroPayload |
239 VideoStudioTaskOutroPayload |
240 VideoStudioTaskWatermarkPayload
241
242export interface VideoStudioEditionPayload {
243 videoUUID: string
244 tasks: VideoStudioTaskPayload[]
245}
246
247// ---------------------------------------------------------------------------
248
249export interface VideoChannelImportPayload {
250 externalChannelUrl: string
251 videoChannelId: number
252
253 partOfChannelSyncId?: number
254}
255
256export interface AfterVideoChannelImportPayload {
257 channelSyncId: number
258}
259
260// ---------------------------------------------------------------------------
261
262export type NotifyPayload =
263 {
264 action: 'new-video'
265 videoUUID: string
266 }
267
268// ---------------------------------------------------------------------------
269
270export interface FederateVideoPayload {
271 videoUUID: string
272 isNewVideo: boolean
273}
274
275// ---------------------------------------------------------------------------
276
277export interface TranscodingJobBuilderPayload {
278 videoUUID: string
279
280 optimizeJob?: {
281 isNewVideo: boolean
282 }
283
284 // Array of jobs to create
285 jobs?: {
286 type: 'video-transcoding'
287 payload: VideoTranscodingPayload
288 priority?: number
289 }[]
290
291 // Array of sequential jobs to create
292 sequentialJobs?: {
293 type: 'video-transcoding'
294 payload: VideoTranscodingPayload
295 priority?: number
296 }[][]
297}
298
299// ---------------------------------------------------------------------------
300
301export interface GenerateStoryboardPayload {
302 videoUUID: string
303 federate: boolean
304}
diff --git a/shared/models/server/peertube-problem-document.model.ts b/shared/models/server/peertube-problem-document.model.ts
deleted file mode 100644
index 83d9cea9b..000000000
--- a/shared/models/server/peertube-problem-document.model.ts
+++ /dev/null
@@ -1,32 +0,0 @@
1import { HttpStatusCode } from '../../models'
2import { OAuth2ErrorCode, ServerErrorCode } from './server-error-code.enum'
3
4export interface PeerTubeProblemDocumentData {
5 'invalid-params'?: Record<string, object>
6
7 originUrl?: string
8
9 keyId?: string
10
11 targetUrl?: string
12
13 actorUrl?: string
14
15 // Feeds
16 format?: string
17 url?: string
18}
19
20export interface PeerTubeProblemDocument extends PeerTubeProblemDocumentData {
21 type: string
22 title: string
23
24 detail: string
25 // Compat PeerTube <= 3.2
26 error: string
27
28 status: HttpStatusCode
29
30 docs?: string
31 code?: ServerErrorCode | OAuth2ErrorCode
32}
diff --git a/shared/models/server/server-config.model.ts b/shared/models/server/server-config.model.ts
deleted file mode 100644
index 3f61e93b5..000000000
--- a/shared/models/server/server-config.model.ts
+++ /dev/null
@@ -1,305 +0,0 @@
1import { ClientScriptJSON } from '../plugins/plugin-package-json.model'
2import { NSFWPolicyType } from '../videos/nsfw-policy.type'
3import { VideoPrivacy } from '../videos/video-privacy.enum'
4import { BroadcastMessageLevel } from './broadcast-message-level.type'
5
6export interface ServerConfigPlugin {
7 name: string
8 npmName: string
9 version: string
10 description: string
11 clientScripts: { [name: string]: ClientScriptJSON }
12}
13
14export interface ServerConfigTheme extends ServerConfigPlugin {
15 css: string[]
16}
17
18export interface RegisteredExternalAuthConfig {
19 npmName: string
20 name: string
21 version: string
22 authName: string
23 authDisplayName: string
24}
25
26export interface RegisteredIdAndPassAuthConfig {
27 npmName: string
28 name: string
29 version: string
30 authName: string
31 weight: number
32}
33
34export 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 web_videos: {
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 videoFile: {
196 update: {
197 enabled: boolean
198 }
199 }
200
201 import: {
202 videos: {
203 http: {
204 enabled: boolean
205 }
206 torrent: {
207 enabled: boolean
208 }
209 }
210 videoChannelSynchronization: {
211 enabled: boolean
212 }
213 }
214
215 autoBlacklist: {
216 videos: {
217 ofUsers: {
218 enabled: boolean
219 }
220 }
221 }
222
223 avatar: {
224 file: {
225 size: {
226 max: number
227 }
228 extensions: string[]
229 }
230 }
231
232 banner: {
233 file: {
234 size: {
235 max: number
236 }
237 extensions: string[]
238 }
239 }
240
241 video: {
242 image: {
243 size: {
244 max: number
245 }
246 extensions: string[]
247 }
248 file: {
249 extensions: string[]
250 }
251 }
252
253 videoCaption: {
254 file: {
255 size: {
256 max: number
257 }
258 extensions: string[]
259 }
260 }
261
262 user: {
263 videoQuota: number
264 videoQuotaDaily: number
265 }
266
267 videoChannels: {
268 maxPerUser: number
269 }
270
271 trending: {
272 videos: {
273 intervalDays: number
274 algorithms: {
275 enabled: string[]
276 default: string
277 }
278 }
279 }
280
281 tracker: {
282 enabled: boolean
283 }
284
285 followings: {
286 instance: {
287 autoFollowIndex: {
288 indexUrl: string
289 }
290 }
291 }
292
293 broadcastMessage: {
294 enabled: boolean
295 message: string
296 level: BroadcastMessageLevel
297 dismissable: boolean
298 }
299
300 homepage: {
301 enabled: boolean
302 }
303}
304
305export type HTMLServerConfig = Omit<ServerConfig, 'signup'>
diff --git a/shared/models/server/server-debug.model.ts b/shared/models/server/server-debug.model.ts
deleted file mode 100644
index 4b731bb90..000000000
--- a/shared/models/server/server-debug.model.ts
+++ /dev/null
@@ -1,4 +0,0 @@
1export interface ServerDebug {
2 ip: string
3 activityPubMessagesWaiting: number
4}
diff --git a/shared/models/server/server-error-code.enum.ts b/shared/models/server/server-error-code.enum.ts
deleted file mode 100644
index 583e8245f..000000000
--- a/shared/models/server/server-error-code.enum.ts
+++ /dev/null
@@ -1,89 +0,0 @@
1export const enum ServerErrorCode {
2 /**
3 * The simplest form of payload too large: when the file size is over the
4 * global file size limit
5 */
6 MAX_FILE_SIZE_REACHED = 'max_file_size_reached',
7
8 /**
9 * The payload is too large for the user quota set
10 */
11 QUOTA_REACHED = 'quota_reached',
12
13 /**
14 * Error yielded upon trying to access a video that is not federated, nor can
15 * be. This may be due to: remote videos on instances that are not followed by
16 * yours, and with your instance disallowing unknown instances being accessed.
17 */
18 DOES_NOT_RESPECT_FOLLOW_CONSTRAINTS = 'does_not_respect_follow_constraints',
19
20 LIVE_NOT_ENABLED = 'live_not_enabled',
21 LIVE_NOT_ALLOWING_REPLAY = 'live_not_allowing_replay',
22 LIVE_CONFLICTING_PERMANENT_AND_SAVE_REPLAY = 'live_conflicting_permanent_and_save_replay',
23 /**
24 * Pretty self-explanatory: the set maximum number of simultaneous lives was
25 * reached, and this error is typically there to inform the user trying to
26 * broadcast one.
27 */
28 MAX_INSTANCE_LIVES_LIMIT_REACHED = 'max_instance_lives_limit_reached',
29 /**
30 * Pretty self-explanatory: the set maximum number of simultaneous lives FOR
31 * THIS USER was reached, and this error is typically there to inform the user
32 * trying to broadcast one.
33 */
34 MAX_USER_LIVES_LIMIT_REACHED = 'max_user_lives_limit_reached',
35
36 /**
37 * A torrent should have at most one correct video file. Any more and we will
38 * not be able to choose automatically.
39 */
40 INCORRECT_FILES_IN_TORRENT = 'incorrect_files_in_torrent',
41
42 COMMENT_NOT_ASSOCIATED_TO_VIDEO = 'comment_not_associated_to_video',
43
44 MISSING_TWO_FACTOR = 'missing_two_factor',
45 INVALID_TWO_FACTOR = 'invalid_two_factor',
46
47 ACCOUNT_WAITING_FOR_APPROVAL = 'account_waiting_for_approval',
48 ACCOUNT_APPROVAL_REJECTED = 'account_approval_rejected',
49
50 RUNNER_JOB_NOT_IN_PROCESSING_STATE = 'runner_job_not_in_processing_state',
51 RUNNER_JOB_NOT_IN_PENDING_STATE = 'runner_job_not_in_pending_state',
52 UNKNOWN_RUNNER_TOKEN = 'unknown_runner_token',
53
54 VIDEO_REQUIRES_PASSWORD = 'video_requires_password',
55 INCORRECT_VIDEO_PASSWORD = 'incorrect_video_password',
56
57 VIDEO_ALREADY_BEING_TRANSCODED = 'video_already_being_transcoded'
58}
59
60/**
61 * oauthjs/oauth2-server error codes
62 * @see https://datatracker.ietf.org/doc/html/rfc6749#section-5.2
63 **/
64export const enum OAuth2ErrorCode {
65 /**
66 * The provided authorization grant (e.g., authorization code, resource owner
67 * credentials) or refresh token is invalid, expired, revoked, does not match
68 * the redirection URI used in the authorization request, or was issued to
69 * another client.
70 *
71 * @see https://github.com/oauthjs/node-oauth2-server/blob/master/lib/errors/invalid-grant-error.js
72 */
73 INVALID_GRANT = 'invalid_grant',
74
75 /**
76 * Client authentication failed (e.g., unknown client, no client authentication
77 * included, or unsupported authentication method).
78 *
79 * @see https://github.com/oauthjs/node-oauth2-server/blob/master/lib/errors/invalid-client-error.js
80 */
81 INVALID_CLIENT = 'invalid_client',
82
83 /**
84 * The access token provided is expired, revoked, malformed, or invalid for other reasons
85 *
86 * @see https://github.com/oauthjs/node-oauth2-server/blob/master/lib/errors/invalid-token-error.js
87 */
88 INVALID_TOKEN = 'invalid_token'
89}
diff --git a/shared/models/server/server-follow-create.model.ts b/shared/models/server/server-follow-create.model.ts
deleted file mode 100644
index 3f90c7d6f..000000000
--- a/shared/models/server/server-follow-create.model.ts
+++ /dev/null
@@ -1,4 +0,0 @@
1export interface ServerFollowCreate {
2 hosts?: string[]
3 handles?: string[]
4}
diff --git a/shared/models/server/server-log-level.type.ts b/shared/models/server/server-log-level.type.ts
deleted file mode 100644
index f0f31a4ae..000000000
--- a/shared/models/server/server-log-level.type.ts
+++ /dev/null
@@ -1 +0,0 @@
1export type ServerLogLevel = 'debug' | 'info' | 'warn' | 'error' | 'audit'
diff --git a/shared/models/server/server-stats.model.ts b/shared/models/server/server-stats.model.ts
deleted file mode 100644
index 82f5a737f..000000000
--- a/shared/models/server/server-stats.model.ts
+++ /dev/null
@@ -1,47 +0,0 @@
1import { ActivityType } from '../activitypub'
2import { VideoRedundancyStrategyWithManual } from '../redundancy'
3
4type ActivityPubMessagesSuccess = Record<`totalActivityPub${ActivityType}MessagesSuccesses`, number>
5type ActivityPubMessagesErrors = Record<`totalActivityPub${ActivityType}MessagesErrors`, number>
6
7export interface ServerStats extends ActivityPubMessagesSuccess, ActivityPubMessagesErrors {
8 totalUsers: number
9 totalDailyActiveUsers: number
10 totalWeeklyActiveUsers: number
11 totalMonthlyActiveUsers: number
12
13 totalLocalVideos: number
14 totalLocalVideoViews: number
15 totalLocalVideoComments: number
16 totalLocalVideoFilesSize: number
17
18 totalVideos: number
19 totalVideoComments: number
20
21 totalLocalVideoChannels: number
22 totalLocalDailyActiveVideoChannels: number
23 totalLocalWeeklyActiveVideoChannels: number
24 totalLocalMonthlyActiveVideoChannels: number
25
26 totalLocalPlaylists: number
27
28 totalInstanceFollowers: number
29 totalInstanceFollowing: number
30
31 videosRedundancy: VideosRedundancyStats[]
32
33 totalActivityPubMessagesProcessed: number
34 totalActivityPubMessagesSuccesses: number
35 totalActivityPubMessagesErrors: number
36
37 activityPubMessagesProcessedPerSecond: number
38 totalActivityPubMessagesWaiting: number
39}
40
41export interface VideosRedundancyStats {
42 strategy: VideoRedundancyStrategyWithManual
43 totalSize: number
44 totalUsed: number
45 totalVideoFiles: number
46 totalVideos: number
47}