@@ -197,6 +197,142 @@ export class RemoteConfigApiClient {
197197 } ) ;
198198 }
199199
200+ public getServerConfigTemplate ( ) : Promise < RemoteConfigTemplate > {
201+ return this . getUrl ( )
202+ . then ( ( url ) => {
203+ const request : HttpRequestConfig = {
204+ method : 'GET' ,
205+ url : `${ url } /namespaces/firebase-server/remoteConfig` ,
206+ headers : FIREBASE_REMOTE_CONFIG_HEADERS
207+ } ;
208+ return this . httpClient . send ( request ) ;
209+ } )
210+ . then ( ( resp ) => {
211+ return this . toRemoteConfigTemplate ( resp ) ;
212+ } )
213+ . catch ( ( err ) => {
214+ throw this . toFirebaseError ( err ) ;
215+ } ) ;
216+ }
217+
218+ public getServerConfigTemplateAtVersion ( versionNumber : number | string ) : Promise < RemoteConfigTemplate > {
219+ const data = { versionNumber : this . validateVersionNumber ( versionNumber ) } ;
220+ return this . getUrl ( )
221+ . then ( ( url ) => {
222+ const request : HttpRequestConfig = {
223+ method : 'GET' ,
224+ url : `${ url } /namespaces/firebase-server/remoteConfig` ,
225+ headers : FIREBASE_REMOTE_CONFIG_HEADERS ,
226+ data
227+ } ;
228+ return this . httpClient . send ( request ) ;
229+ } )
230+ . then ( ( resp ) => {
231+ return this . toRemoteConfigTemplate ( resp ) ;
232+ } )
233+ . catch ( ( err ) => {
234+ throw this . toFirebaseError ( err ) ;
235+ } ) ;
236+ }
237+
238+ public validateServerConfigTemplate ( template : RemoteConfigTemplate ) : Promise < RemoteConfigTemplate > {
239+ template = this . validateInputRemoteConfigTemplate ( template ) ;
240+ return this . sendServerPutRequest ( template , template . etag , true )
241+ . then ( ( resp ) => {
242+ this . validateEtag ( resp . headers [ 'etag' ] ) ;
243+ return this . toRemoteConfigTemplate ( resp , template . etag ) ;
244+ } )
245+ . catch ( ( err ) => {
246+ throw this . toFirebaseError ( err ) ;
247+ } ) ;
248+ }
249+
250+ public publishServerConfigTemplate (
251+ template : RemoteConfigTemplate ,
252+ options ?: { force : boolean ; }
253+ ) : Promise < RemoteConfigTemplate > {
254+ template = this . validateInputRemoteConfigTemplate ( template ) ;
255+ let ifMatch : string = template . etag ;
256+ if ( options && options . force === true ) {
257+ ifMatch = '*' ;
258+ }
259+ return this . sendServerPutRequest ( template , ifMatch )
260+ . then ( ( resp ) => {
261+ return this . toRemoteConfigTemplate ( resp ) ;
262+ } )
263+ . catch ( ( err ) => {
264+ throw this . toFirebaseError ( err ) ;
265+ } ) ;
266+ }
267+
268+ public rollbackServerConfigTemplate ( versionNumber : number | string ) : Promise < RemoteConfigTemplate > {
269+ const data = { versionNumber : this . validateVersionNumber ( versionNumber ) } ;
270+ return this . getUrl ( )
271+ . then ( ( url ) => {
272+ const request : HttpRequestConfig = {
273+ method : 'POST' ,
274+ url : `${ url } /namespaces/firebase-server/remoteConfig:rollback` ,
275+ headers : FIREBASE_REMOTE_CONFIG_HEADERS ,
276+ data
277+ } ;
278+ return this . httpClient . send ( request ) ;
279+ } )
280+ . then ( ( resp ) => {
281+ return this . toRemoteConfigTemplate ( resp ) ;
282+ } )
283+ . catch ( ( err ) => {
284+ throw this . toFirebaseError ( err ) ;
285+ } ) ;
286+ }
287+
288+ public listServerConfigVersions ( options ?: ListVersionsOptions ) : Promise < ListVersionsResult > {
289+ if ( typeof options !== 'undefined' ) {
290+ options = this . validateListVersionsOptions ( options ) ;
291+ }
292+ return this . getUrl ( )
293+ . then ( ( url ) => {
294+ const request : HttpRequestConfig = {
295+ method : 'GET' ,
296+ url : `${ url } /namespaces/firebase-server/remoteConfig:listVersions` ,
297+ headers : FIREBASE_REMOTE_CONFIG_HEADERS ,
298+ data : options
299+ } ;
300+ return this . httpClient . send ( request ) ;
301+ } )
302+ . then ( ( resp ) => {
303+ return resp . data ;
304+ } )
305+ . catch ( ( err ) => {
306+ throw this . toFirebaseError ( err ) ;
307+ } ) ;
308+ }
309+
310+ private sendServerPutRequest (
311+ template : RemoteConfigTemplate ,
312+ etag : string ,
313+ validateOnly ?: boolean
314+ ) : Promise < RequestResponse > {
315+ let path = 'namespaces/firebase-server/remoteConfig' ;
316+ if ( validateOnly ) {
317+ path += '?validate_only=true' ;
318+ }
319+ return this . getUrl ( )
320+ . then ( ( url ) => {
321+ const request : HttpRequestConfig = {
322+ method : 'PUT' ,
323+ url : `${ url } /${ path } ` ,
324+ headers : { ...FIREBASE_REMOTE_CONFIG_HEADERS , 'If-Match' : etag } ,
325+ data : {
326+ conditions : template . conditions ,
327+ parameters : template . parameters ,
328+ parameterGroups : template . parameterGroups ,
329+ version : template . version ,
330+ }
331+ } ;
332+ return this . httpClient . send ( request ) ;
333+ } ) ;
334+ }
335+
200336 private sendPutRequest (
201337 template : RemoteConfigTemplate ,
202338 etag : string ,
0 commit comments