@berlingske-media/bm.node-module.gateway_jwt
Version:
AuthGateway JWT verification library based on public JWKS endpoint
37 lines • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.rateLimitWrapper = void 0;
const tslib_1 = require("tslib");
const limiter_1 = require("limiter");
const errors_1 = require("../errors");
function rateLimitWrapper(client, { jwksRequestsPerMinute = 10 }) {
const getSigningKey = client.getSigningKey.bind(client);
const limiter = new limiter_1.RateLimiter({
tokensPerInterval: jwksRequestsPerMinute,
interval: 'minute',
fireImmediately: true,
});
client.debug(`Configured rate limiting to JWKS endpoint at ${jwksRequestsPerMinute}/minute`);
return (kid) => tslib_1.__awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
limiter.removeTokens(1).then((remaining) => tslib_1.__awaiter(this, void 0, void 0, function* () {
client.debug('Requests to the JWKS endpoint available for the next minute:', remaining);
if (remaining < 0) {
console.warn('Too many requests to the JWKS endpoint');
reject(new errors_1.JwksRateLimitError('Too many requests to the JWKS endpoint'));
}
else {
try {
const key = yield getSigningKey(kid);
resolve(key);
}
catch (error) {
reject(error);
}
}
}));
});
});
}
exports.rateLimitWrapper = rateLimitWrapper;
//# sourceMappingURL=rateLimit.js.map