Move to eslint
[oweals/peertube.git] / shared / models / server / server-config.model.ts
1 import { NSFWPolicyType } from '../videos/nsfw-policy.type'
2 import { ClientScript } from '../plugins/plugin-package-json.model'
3
4 export interface ServerConfigPlugin {
5   name: string
6   version: string
7   description: string
8   clientScripts: { [name: string]: ClientScript }
9 }
10
11 export interface ServerConfigTheme extends ServerConfigPlugin {
12   css: string[]
13 }
14
15 export interface ServerConfig {
16   serverVersion: string
17   serverCommit?: string
18
19   instance: {
20     name: string
21     shortDescription: string
22     defaultClientRoute: string
23     isNSFW: boolean
24     defaultNSFWPolicy: NSFWPolicyType
25     customizations: {
26       javascript: string
27       css: string
28     }
29   }
30
31   plugin: {
32     registered: ServerConfigPlugin[]
33   }
34
35   theme: {
36     registered: ServerConfigTheme[]
37     default: string
38   }
39
40   email: {
41     enabled: boolean
42   }
43
44   contactForm: {
45     enabled: boolean
46   }
47
48   signup: {
49     allowed: boolean
50     allowedForCurrentIP: boolean
51     requiresEmailVerification: boolean
52   }
53
54   transcoding: {
55     hls: {
56       enabled: boolean
57     }
58
59     webtorrent: {
60       enabled: boolean
61     }
62
63     enabledResolutions: number[]
64   }
65
66   import: {
67     videos: {
68       http: {
69         enabled: boolean
70       }
71       torrent: {
72         enabled: boolean
73       }
74     }
75   }
76
77   autoBlacklist: {
78     videos: {
79       ofUsers: {
80         enabled: boolean
81       }
82     }
83   }
84
85   avatar: {
86     file: {
87       size: {
88         max: number
89       }
90       extensions: string[]
91     }
92   }
93
94   video: {
95     image: {
96       size: {
97         max: number
98       }
99       extensions: string[]
100     }
101     file: {
102       extensions: string[]
103     }
104   }
105
106   videoCaption: {
107     file: {
108       size: {
109         max: number
110       }
111       extensions: string[]
112     }
113   }
114
115   user: {
116     videoQuota: number
117     videoQuotaDaily: number
118   }
119
120   trending: {
121     videos: {
122       intervalDays: number
123     }
124   }
125
126   tracker: {
127     enabled: boolean
128   }
129
130   followings: {
131     instance: {
132       autoFollowIndex: {
133         indexUrl: string
134       }
135     }
136   }
137 }