66 *
77 * See License file for more information.
88 */
9- import * as admin from 'firebase-admin' ;
10- import * as functions from 'firebase-functions/v2' ;
11- import { CallableRequest } from 'firebase-functions/v2/https' ;
9+ // import * as admin from 'firebase-admin';
10+ import { getRemoteConfig } from 'firebase-admin/remote-config' ;
11+ import { logger } from 'firebase-functions/v2' ;
12+ import { CallableRequest , onCall } from 'firebase-functions/v2/https' ;
13+ import { getAdminApp } from '.' ;
1214
13- admin . initializeApp ( ) ;
14- const remoteConfig = admin . remoteConfig ( ) ;
15-
16- export const testFunctionRemoteConfigUpdateV2 = functions . https . onCall (
17- (
15+ export const testFunctionRemoteConfigUpdateV2 = onCall (
16+ {
17+ maxInstances : 1 ,
18+ concurrency : 1 ,
19+ } ,
20+ async (
1821 req : CallableRequest < {
1922 operations : {
2023 delete : string [ ] | undefined ;
@@ -23,61 +26,55 @@ export const testFunctionRemoteConfigUpdateV2 = functions.https.onCall(
2326 } ;
2427 } > ,
2528 ) => {
26- console . log ( Date . now ( ) , req ) ;
29+ let template = await getRemoteConfig ( getAdminApp ( ) ) . getTemplate ( ) ;
30+ logger . info ( 'received template version: ' + JSON . stringify ( template . version ) ) ;
31+ // logger.info('received template: ' + JSON.stringify(template, null, 2));
32+
33+ if ( req . data !== undefined && req . data . operations !== undefined ) {
34+ modifyTemplate ( req . data , template ) ;
35+ }
2736
28- return new Promise ( function ( resolve , reject ) {
29- remoteConfig
30- . getTemplate ( )
31- . then ( ( template : any ) => {
32- console . log ( 'received template version: ' + JSON . stringify ( template . version ) ) ;
33- // console.log('received template: ' + JSON.stringify(template, null, 2));
37+ // validate the template
38+ template = await getRemoteConfig ( getAdminApp ( ) ) . validateTemplate ( template ) ;
39+ logger . info ( 'template is valid after updates.' ) ;
40+ template = await getRemoteConfig ( getAdminApp ( ) ) . publishTemplate ( template ) ;
41+ logger . info ( 'template published, new version: ' + JSON . stringify ( template . version ) ) ;
3442
35- if ( req . data ?. operations [ 'delete' ] !== undefined ) {
36- const deletions = req . data ?. operations [ 'delete' ] ;
37- deletions . forEach ( ( deletion : string ) => {
38- console . log ( 'deleting key: ' + deletion ) ;
39- if ( template . parameters ?. deletion !== undefined ) {
40- delete template . parameters . deletion ;
41- }
42- } ) ;
43- }
43+ return { templateVersion : template . version ?. versionNumber } ;
44+ } ,
45+ ) ;
4446
45- if ( req . data ?. operations [ 'add' ] !== undefined ) {
46- const adds = req . data ?. operations [ 'add' ] ;
47- adds . forEach ( ( add : { name : string ; value : any } ) => {
48- console . log ( 'adding key: ' + JSON . stringify ( add ) ) ;
49- template . parameters [ add . name ] = {
50- description : 'realtime test parameter' ,
51- defaultValue : {
52- value : add . value ,
53- } ,
54- } ;
55- } ) ;
56- }
47+ function modifyTemplate ( data : any , template : any ) {
48+ if ( data . operations [ 'delete' ] !== undefined ) {
49+ const deletions = data . operations [ 'delete' ] ;
50+ deletions . forEach ( ( deletion : string ) => {
51+ logger . info ( 'deleting key: ' + deletion ) ;
52+ if ( template . parameters [ deletion ] !== undefined ) {
53+ delete template . parameters [ deletion ] ;
54+ }
55+ } ) ;
56+ }
5757
58- if ( req . data ?. operations [ 'update' ] !== undefined ) {
59- const updates = req . data ?. operations [ 'update' ] ;
60- updates . forEach ( ( update : { name : string ; value : any } ) => {
61- console . log ( 'updating key: ' + JSON . stringify ( update ) ) ;
62- if ( template . parameters [ update . name ] !== undefined ) {
63- template . parameters [ update . name ] . defaultValue = update . value ;
64- }
65- } ) ;
66- }
58+ if ( data . operations [ 'add' ] !== undefined ) {
59+ const adds = data . operations [ 'add' ] ;
60+ adds . forEach ( ( add : { name : string ; value : any } ) => {
61+ logger . info ( 'adding key: ' + JSON . stringify ( add ) ) ;
62+ template . parameters [ add . name ] = {
63+ description : 'realtime test parameter' ,
64+ defaultValue : {
65+ value : add . value ,
66+ } ,
67+ } ;
68+ } ) ;
69+ }
6770
68- // validate the template
69- remoteConfig . validateTemplate ( template ) . then ( template => {
70- console . log ( 'template is valid after updates.' ) ;
71- remoteConfig . publishTemplate ( template ) . then ( template => {
72- console . log ( 'template published, new version: ' + JSON . stringify ( template . version ) ) ;
73- resolve ( { templateVersion : template . version ?. versionNumber } ) ;
74- } ) ;
75- } ) ;
76- } )
77- . catch ( ( err : string ) => {
78- console . error ( 'remoteConfig.getTemplate failure: ' + err ) ;
79- reject ( { status : 'failure' , message : err } ) ;
80- } ) ;
71+ if ( data . operations [ 'update' ] !== undefined ) {
72+ const updates = data . operations [ 'update' ] ;
73+ updates . forEach ( ( update : { name : string ; value : any } ) => {
74+ logger . info ( 'updating key: ' + JSON . stringify ( update ) ) ;
75+ if ( template . parameters [ update . name ] !== undefined ) {
76+ template . parameters [ update . name ] . defaultValue = update . value ;
77+ }
8178 } ) ;
82- } ,
83- ) ;
79+ }
80+ }
0 commit comments