@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
86 lines (63 loc) • 2.53 kB
JavaScript
;
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