12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- const VError = require('verror');
- module.exports = function (dependencies) {
- const { sign, decode, resolve } = dependencies;
- function prepareToken(options) {
- let keyData;
- try {
- keyData = resolve(options.key);
- } catch (err) {
- throw new VError(err, 'Failed loading token key');
- }
- try {
- const token = sign.bind(null, {}, keyData, {
- algorithm: 'ES256',
- issuer: options.teamId,
- header: { kid: options.keyId },
- });
- return {
- generation: 0,
- current: token(),
- iat: null,
- regenerate(generation) {
- if (generation === this.generation) {
- this.generation += 1;
- this.current = token();
- this.iat = null;
- }
- },
- isExpired(validSeconds) {
- if (this.iat == null) {
- const decoded = decode(this.current);
- this.iat = decoded.iat;
- }
- return Math.floor(Date.now() / 1000) - this.iat >= validSeconds;
- },
- };
- } catch (err) {
- throw new VError(err, 'Failed to generate token');
- }
- }
- return prepareToken;
- };
|