Files
2024-03-07 12:48:47 +01:00

243 lines
5.2 KiB
TypeScript

import type { KeyLike } from '../types.d.ts'
/**
* A generic Error that all other JOSE specific Error subclasses extend.
*
*/
export class JOSEError extends Error {
/** A unique error code for the particular error subclass. */
static get code(): string {
return 'ERR_JOSE_GENERIC'
}
/** A unique error code for the particular error subclass. */
code: string = 'ERR_JOSE_GENERIC'
constructor(message?: string) {
super(message)
this.name = this.constructor.name
// @ts-ignore
Error.captureStackTrace?.(this, this.constructor)
}
}
/**
* An error subclass thrown when a JWT Claim Set member validation fails.
*
*/
export class JWTClaimValidationFailed extends JOSEError {
static get code(): 'ERR_JWT_CLAIM_VALIDATION_FAILED' {
return 'ERR_JWT_CLAIM_VALIDATION_FAILED'
}
code = 'ERR_JWT_CLAIM_VALIDATION_FAILED'
/** The Claim for which the validation failed. */
claim: string
/** Reason code for the validation failure. */
reason: string
constructor(message: string, claim = 'unspecified', reason = 'unspecified') {
super(message)
this.claim = claim
this.reason = reason
}
}
/**
* An error subclass thrown when a JWT is expired.
*
*/
export class JWTExpired extends JOSEError implements JWTClaimValidationFailed {
static get code(): 'ERR_JWT_EXPIRED' {
return 'ERR_JWT_EXPIRED'
}
code = 'ERR_JWT_EXPIRED'
/** The Claim for which the validation failed. */
claim: string
/** Reason code for the validation failure. */
reason: string
constructor(message: string, claim = 'unspecified', reason = 'unspecified') {
super(message)
this.claim = claim
this.reason = reason
}
}
/**
* An error subclass thrown when a JOSE Algorithm is not allowed per developer preference.
*
*/
export class JOSEAlgNotAllowed extends JOSEError {
static get code(): 'ERR_JOSE_ALG_NOT_ALLOWED' {
return 'ERR_JOSE_ALG_NOT_ALLOWED'
}
code = 'ERR_JOSE_ALG_NOT_ALLOWED'
}
/**
* An error subclass thrown when a particular feature or algorithm is not supported by this
* implementation or JOSE in general.
*
*/
export class JOSENotSupported extends JOSEError {
static get code(): 'ERR_JOSE_NOT_SUPPORTED' {
return 'ERR_JOSE_NOT_SUPPORTED'
}
code = 'ERR_JOSE_NOT_SUPPORTED'
}
/**
* An error subclass thrown when a JWE ciphertext decryption fails.
*
*/
export class JWEDecryptionFailed extends JOSEError {
static get code(): 'ERR_JWE_DECRYPTION_FAILED' {
return 'ERR_JWE_DECRYPTION_FAILED'
}
code = 'ERR_JWE_DECRYPTION_FAILED'
message = 'decryption operation failed'
}
/**
* An error subclass thrown when a JWE ciphertext decompression fails.
*
*/
export class JWEDecompressionFailed extends JOSEError {
static get code(): 'ERR_JWE_DECOMPRESSION_FAILED' {
return 'ERR_JWE_DECOMPRESSION_FAILED'
}
code = 'ERR_JWE_DECOMPRESSION_FAILED'
message = 'decompression operation failed'
}
/**
* An error subclass thrown when a JWE is invalid.
*
*/
export class JWEInvalid extends JOSEError {
static get code(): 'ERR_JWE_INVALID' {
return 'ERR_JWE_INVALID'
}
code = 'ERR_JWE_INVALID'
}
/**
* An error subclass thrown when a JWS is invalid.
*
*/
export class JWSInvalid extends JOSEError {
static get code(): 'ERR_JWS_INVALID' {
return 'ERR_JWS_INVALID'
}
code = 'ERR_JWS_INVALID'
}
/**
* An error subclass thrown when a JWT is invalid.
*
*/
export class JWTInvalid extends JOSEError {
static get code(): 'ERR_JWT_INVALID' {
return 'ERR_JWT_INVALID'
}
code = 'ERR_JWT_INVALID'
}
/**
* An error subclass thrown when a JWK is invalid.
*
*/
export class JWKInvalid extends JOSEError {
static get code(): 'ERR_JWK_INVALID' {
return 'ERR_JWK_INVALID'
}
code = 'ERR_JWK_INVALID'
}
/**
* An error subclass thrown when a JWKS is invalid.
*
*/
export class JWKSInvalid extends JOSEError {
static get code(): 'ERR_JWKS_INVALID' {
return 'ERR_JWKS_INVALID'
}
code = 'ERR_JWKS_INVALID'
}
/**
* An error subclass thrown when no keys match from a JWKS.
*
*/
export class JWKSNoMatchingKey extends JOSEError {
static get code(): 'ERR_JWKS_NO_MATCHING_KEY' {
return 'ERR_JWKS_NO_MATCHING_KEY'
}
code = 'ERR_JWKS_NO_MATCHING_KEY'
message = 'no applicable key found in the JSON Web Key Set'
}
/**
* An error subclass thrown when multiple keys match from a JWKS.
*
*/
export class JWKSMultipleMatchingKeys extends JOSEError {
/** @ignore */
[Symbol.asyncIterator]!: () => AsyncIterableIterator<KeyLike>
static get code(): 'ERR_JWKS_MULTIPLE_MATCHING_KEYS' {
return 'ERR_JWKS_MULTIPLE_MATCHING_KEYS'
}
code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS'
message = 'multiple matching keys found in the JSON Web Key Set'
}
/**
* Timeout was reached when retrieving the JWKS response.
*
*/
export class JWKSTimeout extends JOSEError {
static get code(): 'ERR_JWKS_TIMEOUT' {
return 'ERR_JWKS_TIMEOUT'
}
code = 'ERR_JWKS_TIMEOUT'
message = 'request timed out'
}
/**
* An error subclass thrown when JWS signature verification fails.
*
*/
export class JWSSignatureVerificationFailed extends JOSEError {
static get code(): 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED' {
return 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED'
}
code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED'
message = 'signature verification failed'
}