UNPKG

ts-jose

Version:

Wrap functions of JOSE in steady interface

65 lines 2.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JWKS = void 0; const error_js_1 = require("./error.cjs"); const jwk_js_1 = require("./jwk.cjs"); class JWKS { constructor(keys) { this.keys = keys; } getKey(options = {}) { if (options.kid !== undefined) { const key = this.getKeyByKid(options.kid); if (key === undefined) { throw new error_js_1.JoseError('Keys', 'kid', options.kid); } else if (options.use !== undefined && key.use !== options.use) { throw new error_js_1.JoseError('Keys', 'use', key.use, options.use); } else if (options.alg !== undefined && key.alg !== undefined) { if (key.alg !== options.alg) { throw new error_js_1.JoseError('Keys', 'alg', key.alg, options.alg); } } return key; } const keys1 = options.use !== undefined ? this.getKeyByUse(options.use) : this.keys; if (keys1.length === 0) throw new error_js_1.JoseError('Keys', 'use', options.use); const keys2 = options.alg !== undefined ? this.getKeyByAlg(options.alg, keys1) : keys1; if (keys2.length === 0) throw new error_js_1.JoseError('Keys', 'alg', options.alg); return keys2[0]; } getKeyByKid(kid) { return this.keys.find((key) => key.kid === kid); } getKeyByUse(use, keys) { if (keys === undefined) { keys = this.keys; } return keys.filter((key) => key.use === use); } getKeyByAlg(alg, keys) { if (keys === undefined) { keys = this.keys; } return keys.filter((key) => key.alg === alg); } toObject() { return { keys: this.keys.map((key) => ({ ...key.metadata })) }; } async toPublic() { const keys = await Promise.all(this.keys.map((key) => key.toPublic())); return new JWKS(keys); } static async fromObject(jwks) { const keys = []; for (const key of jwks.keys) { keys.push(await jwk_js_1.JWK.fromObject(key)); } return new JWKS(keys); } } exports.JWKS = JWKS; //# sourceMappingURL=jwks.js.map