@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
1 lines • 4.89 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/shared/configuration/config.ts"],"names":["last","elements","length","undefined","configurationLoad","params","api","uid","callFn","revision","authToken","token","lastRevision","Array","isArray","filter","isNumber","load","Error","logger","config","Config","mergeConfigsWithDefault","err","error","Boolean","defaultConfiguration","latest","withLatest","whatever","pipe","something"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA,SAASA,IAAT,CAAiBC,QAAjB,EAAgC;AAC9B,MAAIA,QAAQ,CAACC,MAAT,KAAoB,CAAxB,EAA2B;AACzB,WAAOC,SAAP;AACD;;AAED,SAAOF,QAAQ,CAACA,QAAQ,CAACC,MAAT,GAAkB,CAAnB,CAAf;AACD;;AAED,MAAME,iBAAiB,GAAG,MAAOC,MAAP,IAAoC;AAC5D,QAAMC,GAAG,GAAG,iBAAZ;;AACA,MAAID,MAAM,CAACE,GAAX,EAAgB;AACd,WAAOD,GAAG,CAACE,MAAJ,CACL,uBADK,EAEL;AACEC,MAAAA,QAAQ,EAAEJ,MAAM,CAACI,QADnB;AAEEF,MAAAA,GAAG,EAAEF,MAAM,CAACE;AAFd,KAFK,EAML;AACEG,MAAAA,SAAS,EAAEL,MAAM,CAACK;AADpB,KANK,CAAP;AAUD,GAXD,MAWO;AACL,UAAMC,KAAK,GAAGN,MAAM,CAACK,SAAP,KAAqB,MAAM,mCAA3B,CAAd;AAEA,UAAME,YAAY,GAChBC,KAAK,CAACC,OAAN,CAAcT,MAAM,CAACI,QAArB,KAAkCT,IAAI,CAACK,MAAM,CAACI,QAAP,CAAgBM,MAAhB,CAAuBC,cAAvB,CAAD,CADxC;AAGA,UAAMP,QAAQ,GACZ,OAAOG,YAAP,KAAwB,QAAxB,GAAmCA,YAAnC,GAAkDP,MAAM,CAACI,QAD3D;AAGA,WAAOH,GAAG,CAACE,MAAJ,CACL,mBADK,EAEL,EACE,IAAI,OAAOC,QAAP,KAAoB,QAApB,IAAgC;AAClCA,QAAAA;AADkC,OAApC;AADF,KAFK,EAOL;AACEC,MAAAA,SAAS,EAAEC;AADb,KAPK,CAAP;AAWD;AACF,CAlCD;;AA2CO,MAAMM,IAAI,GAAG,OAClBZ,MAAwB,GAAG,EADT,KAEU;AAAA;;AAC5B,MAAIA,MAAM,CAACE,GAAP,IAAc,CAACF,MAAM,CAACK,SAA1B,EAAqC;AACnC,UAAM,IAAIQ,KAAJ,CACJ,4DADI,CAAN;AAGD;;AAED,QAAMC,MAAM,qBAAGd,MAAM,CAACc,MAAV,2DAAoB,kCAAhC;;AAEA,MAAI;AACF,UAAMC,MAAM,GAAG,MAAMhB,iBAAiB,CAACC,MAAD,CAAtC,CADE,CAEF;AACA;AACA;;AACA,WAAOgB,oBAAOC,uBAAP,CAA+BF,MAA/B,CAAP;AACD,GAND,CAME,OAAOG,GAAP,EAAY;AACZ,sCAAcA,GAAd;AACAJ,IAAAA,MAAM,CAACK,KAAP,CACE,iCADF,EAEE,GAAG,CAACD,GAAD,EAAMlB,MAAM,CAACI,QAAb,EAAuBM,MAAvB,CAA8BU,OAA9B,CAFL;AAIA,WAAOJ,oBAAOK,oBAAd;AACD;AACF,CAzBM;;;;AA2BA,MAAMC,MAAM,GAAG,MAAM,iBAAM,MAAM,gBAAKV,IAAI,EAAT,CAAZ,CAArB;;;;AAEA,MAAMW,UAAU,GAAOC,QAAJ,IACxBA,QAAQ,CAACC,IAAT,CACE,wBAAQC,SAAS,IACf,gBAAKd,IAAI,EAAT,EAAaa,IAAb,CACE,oBAAIV,MAAM,IAAI,CAACW,SAAD,EAAYX,MAAZ,CAAd,CADF,CADF,CADF,CADK","sourcesContent":["import { Config } from '@aimee-blue/ab-contracts';\nimport { apiOf } from '../api';\nimport { Observable, from, defer } from 'rxjs';\nimport { map, flatMap } from 'rxjs/operators';\nimport { currentSelfSignedToken } from '../auth';\nimport { isNumber } from 'util';\nimport { registerError } from '../registerError';\nimport { BasicLogger, defaultBasicLogger } from '../logging';\n\nfunction last<T>(elements: T[]) {\n if (elements.length === 0) {\n return undefined;\n }\n\n return elements[elements.length - 1];\n}\n\nconst configurationLoad = async (params: IGetConfigParams) => {\n const api = apiOf<Config.IApi>();\n if (params.uid) {\n return api.callFn(\n 'configurationLoadUser',\n {\n revision: params.revision,\n uid: params.uid,\n },\n {\n authToken: params.authToken,\n }\n );\n } else {\n const token = params.authToken || (await currentSelfSignedToken());\n\n const lastRevision =\n Array.isArray(params.revision) && last(params.revision.filter(isNumber));\n\n const revision =\n typeof lastRevision === 'number' ? lastRevision : params.revision;\n\n return api.callFn(\n 'configurationLoad',\n {\n ...(typeof revision === 'number' && {\n revision,\n }),\n },\n {\n authToken: token,\n }\n );\n }\n};\n\nexport interface IGetConfigParams {\n revision?: Config.Revision;\n authToken?: string;\n uid?: string;\n logger?: BasicLogger;\n}\n\nexport const load = async (\n params: IGetConfigParams = {}\n): Promise<Config.IConfig> => {\n if (params.uid && !params.authToken) {\n throw new Error(\n 'authToken is required when requesting user specific config'\n );\n }\n\n const logger = params.logger ?? defaultBasicLogger();\n\n try {\n const config = await configurationLoad(params);\n // even though server already returns to us a merged configuration\n // it might have be configuration from different version of contracts\n // so here we ensure that we use defaults from our version of contracts:\n return Config.mergeConfigsWithDefault(config as Config.IPartialConfig);\n } catch (err) {\n registerError(err);\n logger.error(\n '💥 Failed when fetching config',\n ...[err, params.revision].filter(Boolean)\n );\n return Config.defaultConfiguration;\n }\n};\n\nexport const latest = () => defer(() => from(load()));\n\nexport const withLatest = <T>(whatever: Observable<T>) =>\n whatever.pipe(\n flatMap(something =>\n from(load()).pipe(\n map(config => [something, config] as [T, Config.IConfig])\n )\n )\n );\n"],"file":"config.js"}