@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
60 lines (51 loc) • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createSelfSignedTokens = createSelfSignedTokens;
exports.currentSelfSignedToken = currentSelfSignedToken;
exports.selfSignedTokens = void 0;
var _rxjs = require("rxjs");
var _abAuth = require("@aimee-blue/ab-auth");
var _operators = require("rxjs/operators");
function createSelfSignedTokens(params, deps = {
now: () => (0, _rxjs.from)(Promise.resolve(Date.now())),
signJwt: (...args) => (0, _rxjs.from)((0, _abAuth.signJwtUsingServiceAccountKey)(...args))
}) {
const nextJwt = (0, _rxjs.defer)(() => deps.now().pipe((0, _operators.take)(1), (0, _operators.switchMap)(now => {
const iat = now / 1000;
const exp = iat + params.expireInMillis / 1000;
return deps.signJwt({
aud: 'https://aimeeblue.com/functions',
iat,
exp
}).pipe((0, _operators.take)(1), (0, _operators.map)(result => ({ ...result,
expiresAtMillis: now + params.expireInMillis
})));
})));
return (0, _rxjs.timer)(0, params.rollNewTokenInMillis, params.scheduler).pipe((0, _operators.exhaustMap)(() => nextJwt), (0, _operators.shareReplay)({
bufferSize: 1,
refCount: true,
windowTime: params.rollNewTokenInMillis,
scheduler: params.scheduler
}));
}
function buildSelfSignedTokensLazy() {
let tokensStream = null;
return () => {
if (tokensStream) {
return tokensStream;
}
return tokensStream = createSelfSignedTokens({
expireInMillis: 3600 * 1000,
rollNewTokenInMillis: 3000 * 1000
});
};
}
const selfSignedTokens = buildSelfSignedTokensLazy();
exports.selfSignedTokens = selfSignedTokens;
async function currentSelfSignedToken() {
const result = await selfSignedTokens().pipe((0, _operators.take)(1)).toPromise();
return result.signedJwt;
}
//# sourceMappingURL=selfSignedTokens.js.map