Support broadcast messages
[oweals/peertube.git] / shared / models / server / server-config.model.ts
1 import { ClientScript } from '../plugins/plugin-package-json.model'
2 import { NSFWPolicyType } from '../videos/nsfw-policy.type'
3 import { BroadcastMessageLevel } from './broadcast-message-level.type'
4
5 export interface ServerConfigPlugin {
6   name: string
7   version: string
8   description: string
9   clientScripts: { [name: string]: ClientScript }
10 }
11
12 export interface ServerConfigTheme extends ServerConfigPlugin {
13   css: string[]
14 }
15
16 export interface RegisteredExternalAuthConfig {
17   npmName: string
18   name: string
19   version: string
20   authName: string
21   authDisplayName: string
22 }
23
24 export interface RegisteredIdAndPassAuthConfig {
25   npmName: string
26   name: string
27   version: string
28   authName: string
29   weight: number
30 }
31
32 export interface ServerConfig {
33   serverVersion: string
34   serverCommit?: string
35
36   instance: {
37     name: string
38     shortDescription: string
39     defaultClientRoute: string
40     isNSFW: boolean
41     defaultNSFWPolicy: NSFWPolicyType
42     customizations: {
43       javascript: string
44       css: string
45     }
46   }
47
48   search: {
49     remoteUri: {
50       users: boolean
51       anonymous: boolean
52     }
53   }
54
55   plugin: {
56     registered: ServerConfigPlugin[]
57
58     registeredExternalAuths: RegisteredExternalAuthConfig[]
59
60     registeredIdAndPassAuths: RegisteredIdAndPassAuthConfig[]
61   }
62
63   theme: {
64     registered: ServerConfigTheme[]
65     default: string
66   }
67
68   email: {
69     enabled: boolean
70   }
71
72   contactForm: {
73     enabled: boolean
74   }
75
76   signup: {
77     allowed: boolean
78     allowedForCurrentIP: boolean
79     requiresEmailVerification: boolean
80   }
81
82   transcoding: {
83     hls: {
84       enabled: boolean
85     }
86
87     webtorrent: {
88       enabled: boolean
89     }
90
91     enabledResolutions: number[]
92   }
93
94   import: {
95     videos: {
96       http: {
97         enabled: boolean
98       }
99       torrent: {
100         enabled: boolean
101       }
102     }
103   }
104
105   autoBlacklist: {
106     videos: {
107       ofUsers: {
108         enabled: boolean
109       }
110     }
111   }
112
113   avatar: {
114     file: {
115       size: {
116         max: number
117       }
118       extensions: string[]
119     }
120   }
121
122   video: {
123     image: {
124       size: {
125         max: number
126       }
127       extensions: string[]
128     }
129     file: {
130       extensions: string[]
131     }
132   }
133
134   videoCaption: {
135     file: {
136       size: {
137         max: number
138       }
139       extensions: string[]
140     }
141   }
142
143   user: {
144     videoQuota: number
145     videoQuotaDaily: number
146   }
147
148   trending: {
149     videos: {
150       intervalDays: number
151     }
152   }
153
154   tracker: {
155     enabled: boolean
156   }
157
158   followings: {
159     instance: {
160       autoFollowIndex: {
161         indexUrl: string
162       }
163     }
164   }
165
166   broadcastMessage: {
167     enabled: boolean
168     message: string
169     level: BroadcastMessageLevel
170     dismissable: boolean
171   }
172 }