Split types and typings
[oweals/peertube.git] / shared / extra-utils / server / config.ts
1 import { makeDeleteRequest, makeGetRequest, makePutBodyRequest } from '../requests/requests'
2 import { CustomConfig } from '../../models/server/custom-config.model'
3 import { DeepPartial } from '@server/types/utils'
4 import { merge } from 'lodash'
5
6 function getConfig (url: string) {
7   const path = '/api/v1/config'
8
9   return makeGetRequest({
10     url,
11     path,
12     statusCodeExpected: 200
13   })
14 }
15
16 function getAbout (url: string) {
17   const path = '/api/v1/config/about'
18
19   return makeGetRequest({
20     url,
21     path,
22     statusCodeExpected: 200
23   })
24 }
25
26 function getCustomConfig (url: string, token: string, statusCodeExpected = 200) {
27   const path = '/api/v1/config/custom'
28
29   return makeGetRequest({
30     url,
31     token,
32     path,
33     statusCodeExpected
34   })
35 }
36
37 function updateCustomConfig (url: string, token: string, newCustomConfig: CustomConfig, statusCodeExpected = 200) {
38   const path = '/api/v1/config/custom'
39
40   return makePutBodyRequest({
41     url,
42     token,
43     path,
44     fields: newCustomConfig,
45     statusCodeExpected
46   })
47 }
48
49 function updateCustomSubConfig (url: string, token: string, newConfig: DeepPartial<CustomConfig>) {
50   const updateParams: CustomConfig = {
51     instance: {
52       name: 'PeerTube updated',
53       shortDescription: 'my short description',
54       description: 'my super description',
55       terms: 'my super terms',
56       codeOfConduct: 'my super coc',
57
58       creationReason: 'my super creation reason',
59       moderationInformation: 'my super moderation information',
60       administrator: 'Kuja',
61       maintenanceLifetime: 'forever',
62       businessModel: 'my super business model',
63       hardwareInformation: '2vCore 3GB RAM',
64
65       languages: [ 'en', 'es' ],
66       categories: [ 1, 2 ],
67
68       defaultClientRoute: '/videos/recently-added',
69       isNSFW: true,
70       defaultNSFWPolicy: 'blur',
71       customizations: {
72         javascript: 'alert("coucou")',
73         css: 'body { background-color: red; }'
74       }
75     },
76     theme: {
77       default: 'default'
78     },
79     services: {
80       twitter: {
81         username: '@MySuperUsername',
82         whitelisted: true
83       }
84     },
85     cache: {
86       previews: {
87         size: 2
88       },
89       captions: {
90         size: 3
91       }
92     },
93     signup: {
94       enabled: false,
95       limit: 5,
96       requiresEmailVerification: false
97     },
98     admin: {
99       email: 'superadmin1@example.com'
100     },
101     contactForm: {
102       enabled: true
103     },
104     user: {
105       videoQuota: 5242881,
106       videoQuotaDaily: 318742
107     },
108     transcoding: {
109       enabled: true,
110       allowAdditionalExtensions: true,
111       allowAudioFiles: true,
112       threads: 1,
113       resolutions: {
114         '0p': false,
115         '240p': false,
116         '360p': true,
117         '480p': true,
118         '720p': false,
119         '1080p': false,
120         '2160p': false
121       },
122       webtorrent: {
123         enabled: true
124       },
125       hls: {
126         enabled: false
127       }
128     },
129     import: {
130       videos: {
131         http: {
132           enabled: false
133         },
134         torrent: {
135           enabled: false
136         }
137       }
138     },
139     autoBlacklist: {
140       videos: {
141         ofUsers: {
142           enabled: false
143         }
144       }
145     },
146     followers: {
147       instance: {
148         enabled: true,
149         manualApproval: false
150       }
151     },
152     followings: {
153       instance: {
154         autoFollowBack: {
155           enabled: false
156         },
157         autoFollowIndex: {
158           indexUrl: 'https://instances.joinpeertube.org/api/v1/instances/hosts',
159           enabled: false
160         }
161       }
162     },
163     broadcastMessage: {
164       enabled: true,
165       level: 'warning',
166       message: 'hello',
167       dismissable: true
168     },
169     search: {
170       remoteUri: {
171         users: true,
172         anonymous: true
173       },
174       searchIndex: {
175         enabled: true,
176         url: 'https://search.joinpeertube.org',
177         disableLocalSearch: true,
178         isDefaultSearch: true
179       }
180     }
181   }
182
183   merge(updateParams, newConfig)
184
185   return updateCustomConfig(url, token, updateParams)
186 }
187
188 function deleteCustomConfig (url: string, token: string, statusCodeExpected = 200) {
189   const path = '/api/v1/config/custom'
190
191   return makeDeleteRequest({
192     url,
193     token,
194     path,
195     statusCodeExpected
196   })
197 }
198
199 // ---------------------------------------------------------------------------
200
201 export {
202   getConfig,
203   getCustomConfig,
204   updateCustomConfig,
205   getAbout,
206   deleteCustomConfig,
207   updateCustomSubConfig
208 }