UNPKG

ts-jose

Version:

Wrap functions of JOSE in steady interface

61 lines 2.1 kB
import { JoseError } from './error.js'; import { JWK } from './jwk.js'; export class JWKS { constructor(keys) { this.keys = keys; } getKey(options = {}) { if (options.kid !== undefined) { const key = this.getKeyByKid(options.kid); if (key === undefined) { throw new JoseError('Keys', 'kid', options.kid); } else if (options.use !== undefined && key.use !== options.use) { throw new JoseError('Keys', 'use', key.use, options.use); } else if (options.alg !== undefined && key.alg !== undefined) { if (key.alg !== options.alg) { throw new 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 JoseError('Keys', 'use', options.use); const keys2 = options.alg !== undefined ? this.getKeyByAlg(options.alg, keys1) : keys1; if (keys2.length === 0) throw new 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.fromObject(key)); } return new JWKS(keys); } } //# sourceMappingURL=jwks.js.map