UNPKG

@aimee-blue/ab-service-kit

Version:
86 lines (63 loc) 2.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withLatest = exports.latest = exports.load = void 0; var _abContracts = require("@aimee-blue/ab-contracts"); var _api = require("../api"); var _rxjs = require("rxjs"); var _operators = require("rxjs/operators"); var _auth = require("../auth"); var _util = require("util"); var _registerError = require("../registerError"); var _logging = require("../logging"); function last(elements) { if (elements.length === 0) { return undefined; } return elements[elements.length - 1]; } const configurationLoad = async params => { const api = (0, _api.apiOf)(); if (params.uid) { return api.callFn('configurationLoadUser', { revision: params.revision, uid: params.uid }, { authToken: params.authToken }); } else { const token = params.authToken || (await (0, _auth.currentSelfSignedToken)()); const lastRevision = Array.isArray(params.revision) && last(params.revision.filter(_util.isNumber)); const revision = typeof lastRevision === 'number' ? lastRevision : params.revision; return api.callFn('configurationLoad', { ...(typeof revision === 'number' && { revision }) }, { authToken: token }); } }; const load = async (params = {}) => { var _params$logger; if (params.uid && !params.authToken) { throw new Error('authToken is required when requesting user specific config'); } const logger = (_params$logger = params.logger) !== null && _params$logger !== void 0 ? _params$logger : (0, _logging.defaultBasicLogger)(); try { const config = await configurationLoad(params); // even though server already returns to us a merged configuration // it might have be configuration from different version of contracts // so here we ensure that we use defaults from our version of contracts: return _abContracts.Config.mergeConfigsWithDefault(config); } catch (err) { (0, _registerError.registerError)(err); logger.error('💥 Failed when fetching config', ...[err, params.revision].filter(Boolean)); return _abContracts.Config.defaultConfiguration; } }; exports.load = load; const latest = () => (0, _rxjs.defer)(() => (0, _rxjs.from)(load())); exports.latest = latest; const withLatest = whatever => whatever.pipe((0, _operators.flatMap)(something => (0, _rxjs.from)(load()).pipe((0, _operators.map)(config => [something, config])))); exports.withLatest = withLatest; //# sourceMappingURL=config.js.map