UNPKG

jose

Version:

JWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes

795 lines (675 loc) • 26.7 kB
/** Supported JWS "alg" (Algorithm) Header Parameter values. Availability depends on the runtime. */ export type JWSAlgorithm = | 'HS256' | 'HS384' | 'HS512' | 'RS256' | 'RS384' | 'RS512' | 'PS256' | 'PS384' | 'PS512' | 'ES256' | 'ES384' | 'ES512' | 'EdDSA' | 'Ed25519' | 'ML-DSA-44' | 'ML-DSA-65' | 'ML-DSA-87' | (string & {}) /** Supported JWE "alg" (Algorithm) Header Parameter values. Availability depends on the runtime. */ export type JWEKeyManagementAlgorithm = | 'dir' | 'A128KW' | 'A192KW' | 'A256KW' | 'A128GCMKW' | 'A192GCMKW' | 'A256GCMKW' | 'ECDH-ES' | 'ECDH-ES+A128KW' | 'ECDH-ES+A192KW' | 'ECDH-ES+A256KW' | 'RSA-OAEP' | 'RSA-OAEP-256' | 'RSA-OAEP-384' | 'RSA-OAEP-512' | 'PBES2-HS256+A128KW' | 'PBES2-HS384+A192KW' | 'PBES2-HS512+A256KW' | (string & {}) /** * Supported JWE "enc" (Encryption Algorithm) Header Parameter values. Availability depends on the * runtime. */ export type JWEContentEncryptionAlgorithm = | 'A128CBC-HS256' | 'A192CBC-HS384' | 'A256CBC-HS512' | 'A128GCM' | 'A192GCM' | 'A256GCM' | (string & {}) /** JWK "kty" (Key Type) Parameter values supported by this module. */ export type JWKKeyType = 'EC' | 'RSA' | 'OKP' | 'AKP' | 'oct' | (string & {}) /** * Generic JSON Web Key Parameters. * * > Note: This is declared as a type alias rather than an interface so that it satisfies the implicit index * > signature of the `JsonWebKey` types shipped by `@types/node` and `lib.dom`. */ export type JWKParameters = { /** JWK "kty" (Key Type) Parameter */ kty?: JWKKeyType /** JWK "alg" (Algorithm) Parameter */ alg?: JWSAlgorithm | JWEKeyManagementAlgorithm | JWEContentEncryptionAlgorithm /** JWK "key_ops" (Key Operations) Parameter (RFC 7517, Section 4.3). */ key_ops?: string[] /** Web Crypto "ext" (Extractable) member; whether the key may be exported. */ ext?: boolean /** JWK "use" (Public Key Use) Parameter */ use?: 'sig' | 'enc' | (string & {}) /** * "x5c" (X.509 Certificate Chain): base64-encoded DER certificates (RFC 7517, Section 4.7; RFC * 7515, Section 4.1.6). */ x5c?: string[] /** "x5t" (X.509 Certificate SHA-1 Thumbprint): base64url-encoded digest of the DER certificate. */ x5t?: string /** * "x5t#S256" (X.509 Certificate SHA-256 Thumbprint): base64url-encoded digest of the DER * certificate. */ 'x5t#S256'?: string /** JWK "x5u" (X.509 URL) Parameter: URL of a PEM-encoded certificate or certificate chain. */ x5u?: string /** JWK "kid" (Key ID) Parameter */ kid?: string } /** Convenience interface for public OKP JSON Web Keys. */ export interface JWK_OKP_Public extends JWKParameters { /** JWK "crv" (Subtype of Key Pair) Parameter (RFC 8037, Section 2). */ crv: string /** Base64url-encoded public key (RFC 8037, Section 2). */ x: string } /** Convenience interface for private OKP JSON Web Keys. */ export interface JWK_OKP_Private extends JWK_OKP_Public { /** Base64url-encoded private key (RFC 8037, Section 2). */ d: string } /** Convenience interface for public AKP JSON Web Keys. */ export interface JWK_AKP_Public extends JWKParameters { /** JWK "alg" (Algorithm) Parameter */ alg: string /** AKP JWK "pub" (Public Key): base64url-encoded public key (RFC 9964, Section 3) */ pub: string } /** Convenience interface for private AKP JSON Web Keys. */ export interface JWK_AKP_Private extends JWK_AKP_Public { /** * AKP JWK "priv" (Private Key): base64url-encoded private key; ML-DSA uses a 32-octet seed (RFC * 9964, Sections 3-4) */ priv: string } /** Convenience interface for public EC JSON Web Keys. */ export interface JWK_EC_Public extends JWKParameters { /** JWK "crv" (Curve) Parameter (RFC 7518, Section 6.2.1.1). */ crv: string /** Base64url-encoded x-coordinate (RFC 7518, Section 6.2.1.2). */ x: string /** Base64url-encoded y-coordinate (RFC 7518, Section 6.2.1.3). */ y: string } /** Convenience interface for private EC JSON Web Keys. */ export interface JWK_EC_Private extends JWK_EC_Public { /** Base64url-encoded private key (RFC 7518, Section 6.2.2). */ d: string } /** Convenience interface for public RSA JSON Web Keys. */ export interface JWK_RSA_Public extends JWKParameters { /** Public exponent, encoded as Base64urlUInt (RFC 7518, Section 6.3.1). */ e: string /** Modulus, encoded as Base64urlUInt (RFC 7518, Section 6.3.1). */ n: string } /** Convenience interface for private RSA JSON Web Keys. */ export interface JWK_RSA_Private extends JWK_RSA_Public { /** Private exponent, encoded as Base64urlUInt (RFC 7518, Section 6.3.2). */ d: string /** First factor CRT exponent, encoded as Base64urlUInt (RFC 7518, Section 6.3.2). */ dp: string /** Second factor CRT exponent, encoded as Base64urlUInt (RFC 7518, Section 6.3.2). */ dq: string /** First prime factor, encoded as Base64urlUInt (RFC 7518, Section 6.3.2). */ p: string /** Second prime factor, encoded as Base64urlUInt (RFC 7518, Section 6.3.2). */ q: string /** First CRT coefficient, encoded as Base64urlUInt (RFC 7518, Section 6.3.2). */ qi: string } /** Convenience interface for "oct" JSON Web Keys. */ export interface JWK_oct extends JWKParameters { /** JWK "k" (Key Value): base64url-encoded key octets (RFC 7518, Section 6.4.1). */ k: string } /** * JSON Web Key ({@link https://www.rfc-editor.org/info/rfc7517/ JWK}). "RSA", "EC", "OKP", "AKP", * and "oct" key types are supported. * * > Note: This is declared as a type alias rather than an interface so that it satisfies the implicit index * > signature of the `JsonWebKey` types shipped by `@types/node` and `lib.dom`. It spells out the * > {@link JWKParameters} members rather than intersecting them so that every JWK member is documented * > in one place. */ export type JWK = { /** JWK "kty" (Key Type) Parameter */ kty?: JWKKeyType /** JWK "alg" (Algorithm) Parameter */ alg?: JWSAlgorithm | JWEKeyManagementAlgorithm | JWEContentEncryptionAlgorithm /** JWK "key_ops" (Key Operations) Parameter (RFC 7517, Section 4.3). */ key_ops?: string[] /** Web Crypto "ext" (Extractable) member; whether the key may be exported. */ ext?: boolean /** JWK "use" (Public Key Use) Parameter */ use?: 'sig' | 'enc' | (string & {}) /** * "x5c" (X.509 Certificate Chain): base64-encoded DER certificates (RFC 7517, Section 4.7; RFC * 7515, Section 4.1.6). */ x5c?: string[] /** "x5t" (X.509 Certificate SHA-1 Thumbprint): base64url-encoded digest of the DER certificate. */ x5t?: string /** * "x5t#S256" (X.509 Certificate SHA-256 Thumbprint): base64url-encoded digest of the DER * certificate. */ 'x5t#S256'?: string /** JWK "x5u" (X.509 URL) Parameter: URL of a PEM-encoded certificate or certificate chain. */ x5u?: string /** JWK "kid" (Key ID) Parameter */ kid?: string /** JWK "crv" Parameter: Curve for EC keys or Subtype of Key Pair for OKP keys. */ crv?: string /** * Private key material: Base64urlUInt for RSA (RFC 7518, Section 6.3.2.1), base64url-encoded * octets for EC (Section 6.2.2.1) or OKP (RFC 8037, Section 2). */ d?: string /** RSA first factor CRT exponent, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ dp?: string /** RSA second factor CRT exponent, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ dq?: string /** RSA public exponent, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ e?: string /** JWK "k" (Key Value): base64url-encoded key octets (RFC 7518, Section 6.4.1). */ k?: string /** RSA modulus, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ n?: string /** RSA first prime factor, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ p?: string /** RSA second prime factor, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ q?: string /** RSA first CRT coefficient, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ qi?: string /** * Base64url-encoded EC x-coordinate (RFC 7518, Section 6.2.1.2) or OKP public key (RFC 8037, * Section 2). */ x?: string /** Base64url-encoded EC y-coordinate (RFC 7518, Section 6.2.1.3). */ y?: string /** AKP JWK "pub" (Public Key): base64url-encoded public key (RFC 9964, Section 3) */ pub?: string /** * AKP JWK "priv" (Private Key): base64url-encoded private key; ML-DSA uses a 32-octet seed (RFC * 9964, Sections 3-4) */ priv?: string /** Additional RSA prime factors. */ oth?: Array<{ /** Factor CRT exponent, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ d?: string /** Prime factor, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ r?: string /** Factor CRT coefficient, encoded as Base64urlUInt (RFC 7518, Section 6.3). */ t?: string }> } /** Discriminated union of supported JSON Web Key shapes, narrowed by the "kty" (Key Type) Parameter. */ // Intersect "kty" into each member separately: typedoc omits the parentheses in `X & (A | B)`. export type AnyJWK = | (JWK_EC_Private & { kty: 'EC' }) | (JWK_EC_Public & { kty: 'EC' }) | (JWK_RSA_Private & { kty: 'RSA' }) | (JWK_RSA_Public & { kty: 'RSA' }) | (JWK_OKP_Private & { kty: 'OKP' }) | (JWK_OKP_Public & { kty: 'OKP' }) | (JWK_AKP_Private & { kty: 'AKP' }) | (JWK_AKP_Public & { kty: 'AKP' }) | (JWK_oct & { kty: 'oct' }) /** Key or secret input accepted by all sign, verify, encrypt, and decrypt operations. */ export type KeyInput = CryptoKey | KeyObject | JWK | Uint8Array /** Dynamic key resolver for consuming operations. */ export interface GetKeyFunction<IProtectedHeader, IToken, KeyTypes extends KeyInput = KeyInput> { /** * Resolves a key for an unverified token. Throw if no suitable key can be resolved. * * @param token The consumed JWE or JWS token; none of its components have been verified. */ (protectedHeader: IProtectedHeader, token: IToken): Promise<KeyTypes> | KeyTypes } /** Flattened JWS JSON Serialization verification input. */ export interface FlattenedJWSInput { /** JWS Unprotected Header as a JSON object. Not integrity protected; omit when empty. */ header?: JWSHeaderParameters /** Base64url-encoded JWS Payload; with `b64: false`, supply an unencoded string or Uint8Array. */ payload: string | Uint8Array /** Base64url-encoded UTF-8 JWS Protected Header. Integrity protected; omit when empty. */ protected?: string /** Base64url-encoded JWS Signature (digital signature or MAC). */ signature: string } /** General JWS JSON Serialization verification input. */ export interface GeneralJWSInput { /** Base64url-encoded JWS Payload; with `b64: false`, supply an unencoded string or Uint8Array. */ payload: string | Uint8Array /** * The "signatures" member value MUST be an array of JSON objects. Each object represents a JWS * Signature (digital signature or MAC) over the JWS Payload and the JWS Protected Header. */ signatures: Omit<FlattenedJWSInput, 'payload'>[] } /** * Flattened JWS JSON Serialization token. The payload is an empty string for detached content when * the {@link https://www.rfc-editor.org/info/rfc7797/ unencoded payload option} is used. */ export interface FlattenedJWS extends Partial<FlattenedJWSInput> { payload: string signature: string } /** * General JWS JSON Serialization token. The payload is an empty string for detached content when * the {@link https://www.rfc-editor.org/info/rfc7797/ unencoded payload option} is used. */ export interface GeneralJWS { payload: string signatures: Omit<FlattenedJWSInput, 'payload'>[] } /** Header Parameters common to JWE and JWS. */ export interface JoseHeaderParameters { /** "kid" (Key ID) Header Parameter */ kid?: string /** "x5t" (X.509 Certificate SHA-1 Thumbprint): base64url-encoded digest of the DER certificate. */ x5t?: string /** * "x5c" (X.509 Certificate Chain): base64-encoded DER certificates (RFC 7517, Section 4.7; RFC * 7515, Section 4.1.6). */ x5c?: string[] /** "x5u" (X.509 URL) Header Parameter: URL of a PEM-encoded certificate or certificate chain. */ x5u?: string /** "jku" (JWK Set URL) Header Parameter (RFC 7515, Section 4.1.2). */ jku?: string /** * "jwk" (JSON Web Key) Header Parameter: public JWK only; private and symmetric key parameters * are not permitted. */ jwk?: Omit<JWK, 'd' | 'dp' | 'dq' | 'k' | 'p' | 'q' | 'qi' | 'priv' | 'oth'> /** "typ" (Type) Header Parameter */ typ?: string /** "cty" (Content Type) Header Parameter (RFC 7515, Section 4.1.10). */ cty?: string } /** Recognized JWS Header Parameters; additional members may also be present. */ export interface JWSHeaderParameters extends JoseHeaderParameters { /** JWS "alg" (Algorithm) Header Parameter */ alg?: JWSAlgorithm /** * Controls payload encoding and the JWS Signing Input as defined by * {@link https://www.rfc-editor.org/info/rfc7797/ RFC7797}. Set to `false` and list `b64` in * `crit` to use an unencoded payload. */ b64?: boolean /** * "crit" (Critical) Header Parameter: names of extensions that must be understood and processed; * must be integrity protected (RFC 7515, Section 4.1.11). */ crit?: string[] /** Any other JWS Header member. */ [propName: string]: unknown } /** Recognized JWE Key Management-related Header Parameters. */ export interface JWEKeyManagementHeaderParameters { /** * Raw Agreement PartyUInfo bytes; base64url-encoded as the "apu" Header Parameter (RFC 7518, * Section 4.6.1.2). */ apu?: Uint8Array /** * Raw Agreement PartyVInfo bytes; base64url-encoded as the "apv" Header Parameter (RFC 7518, * Section 4.6.1.3). */ apv?: Uint8Array /** * "p2c" (PBES2 Count) Header Parameter: positive PBKDF2 iteration count (RFC 7518, Section * 4.8.1.2). */ p2c?: number /** * Raw PBES2 Salt Input bytes (RFC 7518, Section 4.8.1.1). * * @deprecated For testing and vector validation only. */ p2s?: Uint8Array /** * Raw Initialization Vector bytes for AES GCM Key Encryption (RFC 7518, Section 4.7.1.1). * * @deprecated For testing and vector validation only. */ iv?: Uint8Array /** * Ephemeral private key input. The resulting "epk" (Ephemeral Public Key) Header Parameter * contains only the public key (RFC 7518, Section 4.6.1.1). * * @deprecated For testing and vector validation only. */ epk?: CryptoKey | KeyObject } /** Flattened JWE JSON Serialization token. */ export interface FlattenedJWE { /** Base64url-encoded JWE AAD; integrity protected but not encrypted. Omit when empty. */ aad?: string /** Base64url-encoded JWE Ciphertext. */ ciphertext: string /** Base64url-encoded JWE Encrypted Key. Omit when empty. */ encrypted_key?: string /** * JWE Per-Recipient Unprotected Header as a JSON object. Not integrity protected; omit when * empty. */ header?: JWEHeaderParameters /** Base64url-encoded JWE Initialization Vector. Omit when empty. */ iv?: string /** Base64url-encoded UTF-8 JWE Protected Header. Integrity protected; omit when empty. */ protected?: string /** Base64url-encoded JWE Authentication Tag. Omit when empty. */ tag?: string /** JWE Shared Unprotected Header as a JSON object. Not integrity protected; omit when empty. */ unprotected?: JWEHeaderParameters } /** General JWE JSON Serialization token. */ export interface GeneralJWE extends Omit<FlattenedJWE, 'encrypted_key' | 'header'> { recipients: Pick<FlattenedJWE, 'encrypted_key' | 'header'>[] } /** Recognized JWE Header Parameters; additional members may also be present. */ export interface JWEHeaderParameters extends JoseHeaderParameters { /** JWE "alg" (Algorithm) Header Parameter */ alg?: JWEKeyManagementAlgorithm /** JWE "enc" (Encryption Algorithm) Header Parameter */ enc?: JWEContentEncryptionAlgorithm /** * "crit" (Critical) Header Parameter: names of extensions that must be understood and processed; * must be integrity protected (RFC 7516, Section 4.1.13). */ crit?: string[] /** * JWE "zip" (Compression Algorithm) Header Parameter; must be integrity protected. Only `"DEF"` * (raw DEFLATE) is supported, requiring the runtime's `CompressionStream` / `DecompressionStream` * APIs. */ zip?: 'DEF' | (string & {}) /** Any other JWE Header member. */ [propName: string]: unknown } /** Shared "crit" option for signing, verification, encryption, and decryption. */ export interface CritOption { /** * Recognized "crit" (Critical) Header Parameter names. Set each value to `true` to require * integrity protection, or `false` when protection is optional. The JWS `b64` extension is always * recognized and processed. * * > Warning: Other extensions are only checked for syntax and optional integrity protection. Their presence * > is not required by this option. You must check their presence and process them according to the * > profile's validation steps after the operation succeeds. */ crit?: { [propName: string]: boolean } } /** JWE Decryption options. */ export interface DecryptOptions extends CritOption { /** * Accepted JWE "alg" (Algorithm) Header Parameter values. Defaults to all algorithms applicable * to the key or secret except PBES2, which must be explicitly allowed. */ keyManagementAlgorithms?: JWEKeyManagementAlgorithm[] /** * Accepted JWE "enc" (Encryption Algorithm) Header Parameter values. Defaults to all algorithms * applicable to the key or secret. */ contentEncryptionAlgorithms?: JWEContentEncryptionAlgorithm[] /** * Maximum "p2c" (PBES2 Count) Header Parameter value, limiting PBKDF2 iterations and their * computational expense. Defaults to 10000; must be a positive safe integer or `Infinity` to * disable the limit. */ maxPBES2Count?: number /** * Maximum decompressed plaintext size in bytes. Defaults to 250000; `0` rejects compressed JWEs, * and `Infinity` disables the limit. Other values must be positive safe integers. */ maxDecompressedLength?: number } /** JWE Encryption options. */ export interface EncryptOptions extends CritOption {} /** JWT Claims Set verification options. */ export interface JWTClaimVerificationOptions { /** Expected JWT "aud" (Audience) Claim value(s). Requires the claim to be present. */ audience?: string | string[] /** * Clock skew tolerance in seconds or a duration string (e.g. "5 seconds"). Applies to the "nbf" * (Not Before) and "exp" (Expiration Time) claims, and to "iat" (Issued At) when * {@link maxTokenAge} is set. */ clockTolerance?: string | number /** Expected JWT "iss" (Issuer) Claim value(s). Requires the claim to be present. */ issuer?: string | string[] /** * Maximum time since the JWT "iat" (Issued At) Claim, in seconds or a duration string (e.g. "2 * hours"). Requires the claim to be present. */ maxTokenAge?: string | number /** Expected JWT "sub" (Subject) Claim value. Requires the claim to be present. */ subject?: string /** Expected JWT "typ" (Type) Header Parameter value. Requires the parameter to be present. */ typ?: string /** Date for NumericDate comparisons. Defaults to `new Date()`. */ currentDate?: Date /** * Additional claim names required in the JWT Claims Set. The {@link issuer}, {@link audience}, * {@link subject}, and {@link maxTokenAge} options independently require "iss", "aud", "sub", and * "iat", respectively. */ requiredClaims?: string[] } /** JWS Verification options. */ export interface VerifyOptions extends CritOption { /** * Accepted JWS "alg" (Algorithm) Header Parameter values. Defaults to all algorithms applicable * to the key or secret. Unsecured JWTs (`alg: "none"`) are never accepted. */ algorithms?: JWSAlgorithm[] } /** JWS Signing options. */ export interface SignOptions extends CritOption {} /** Recognized JWT Claims Set members; additional members may also be present. */ export interface JWTPayload { /** "iss" (Issuer) Claim. */ iss?: string /** "sub" (Subject) Claim. */ sub?: string /** "aud" (Audience) Claim. */ aud?: string | string[] /** "jti" (JWT ID) Claim. */ jti?: string /** "nbf" (Not Before) Claim, expressed as a NumericDate (seconds since the Unix epoch). */ nbf?: number /** "exp" (Expiration Time) Claim, expressed as a NumericDate (seconds since the Unix epoch). */ exp?: number /** "iat" (Issued At) Claim, expressed as a NumericDate (seconds since the Unix epoch). */ iat?: number /** Any other JWT Claims Set member. */ [propName: string]: unknown } /** Flattened JWE JSON Serialization decryption result. */ export interface FlattenedDecryptResult { /** Decoded JWE AAD bytes, integrity protected but not encrypted. */ additionalAuthenticatedData?: Uint8Array /** Plaintext. */ plaintext: Uint8Array /** JWE Protected Header. */ protectedHeader?: JWEHeaderParameters /** JWE Shared Unprotected Header. Not integrity protected. */ sharedUnprotectedHeader?: JWEHeaderParameters /** JWE Per-Recipient Unprotected Header. Not integrity protected. */ unprotectedHeader?: JWEHeaderParameters } /** General JWE JSON Serialization decryption result. */ export interface GeneralDecryptResult extends FlattenedDecryptResult {} /** JWE Compact Serialization decryption result. */ export interface CompactDecryptResult { /** Plaintext. */ plaintext: Uint8Array /** JWE Protected Header. */ protectedHeader: CompactJWEHeaderParameters } /** Flattened JWS JSON Serialization verification result. */ export interface FlattenedVerifyResult { /** JWS Payload. */ payload: Uint8Array /** JWS Protected Header. */ protectedHeader?: JWSHeaderParameters /** JWS Unprotected Header. Not integrity protected. */ unprotectedHeader?: JWSHeaderParameters } /** General JWS JSON Serialization verification result. */ export interface GeneralVerifyResult extends FlattenedVerifyResult {} /** JWS Compact Serialization verification result. */ export interface CompactVerifyResult { /** JWS Payload. */ payload: Uint8Array /** JWS Protected Header. */ protectedHeader: CompactJWSHeaderParameters } /** Signed or MACed JSON Web Token (JWT) verification result. */ export interface JWTVerifyResult<PayloadType = JWTPayload> { /** JWT Claims Set. */ payload: PayloadType & JWTPayload & ([PayloadType] extends [object] ? unknown : unknown extends PayloadType ? unknown : never) /** JWS Protected Header. */ protectedHeader: JWTHeaderParameters } /** Encrypted JSON Web Token (JWT) decryption result. */ export interface JWTDecryptResult<PayloadType = JWTPayload> { /** JWT Claims Set. */ payload: PayloadType & JWTPayload & ([PayloadType] extends [object] ? unknown : unknown extends PayloadType ? unknown : never) /** JWE Protected Header. */ protectedHeader: CompactJWEHeaderParameters } /** Key resolver result metadata. */ export interface ResolvedKey<KeyType extends CryptoKey | Uint8Array = CryptoKey | Uint8Array> { /** The resolved key, present only when a key resolver is used. */ key: KeyType } /** Recognized JWS Compact Serialization Header Parameters; additional members may also be present. */ export interface CompactJWSHeaderParameters extends JWSHeaderParameters { alg: JWSAlgorithm } /** Recognized JWT Header Parameters for JWS; additional members may also be present. */ export interface JWTHeaderParameters extends CompactJWSHeaderParameters { b64?: boolean } /** Recognized JWE Compact Serialization Header Parameters; additional members may also be present. */ export interface CompactJWEHeaderParameters extends JWEHeaderParameters { alg: JWEKeyManagementAlgorithm enc: JWEContentEncryptionAlgorithm } /** JSON Web Key Set. */ export interface JSONWebKeySet { /** "keys" Parameter: an array of JWKs (RFC 7517, Section 5.1). */ keys: JWK[] } /** Node.js {@link !KeyObject} representation accepted as key input. */ export interface KeyObject { type: string } /** The runtime's Web Crypto {@link !CryptoKey} representation accepted as key input. */ export type CryptoKey = typeof globalThis extends { crypto: { subtle: { generateKey(...args: any[]): Promise<infer R> } } } ? Extract<R, { type: string }> : CryptoKeyStructuralFallback /** Structural fallback used when the host {@link !CryptoKey} type cannot be inferred. */ export interface CryptoKeyStructuralFallback { readonly algorithm: { name: string } readonly extractable: boolean readonly type: string readonly usages: string[] } /** Shared fluent API for JWT-producing classes. */ export interface ProduceJWT { /** * Set the "iss" (Issuer) Claim (RFC 7519, Section 4.1.1). * * @param issuer "Issuer" Claim value to set on the JWT Claims Set. */ setIssuer(issuer: string): this /** * Set the "sub" (Subject) Claim (RFC 7519, Section 4.1.2). * * @param subject "sub" (Subject) Claim value to set on the JWT Claims Set. */ setSubject(subject: string): this /** * Set the "aud" (Audience) Claim (RFC 7519, Section 4.1.3). * * @param audience "aud" (Audience) Claim value to set on the JWT Claims Set. */ setAudience(audience: string | string[]): this /** * Set the "jti" (JWT ID) Claim (RFC 7519, Section 4.1.7). * * @param jwtId "jti" (JWT ID) Claim value to set on the JWT Claims Set. */ setJti(jwtId: string): this /** * Set the "nbf" (Not Before) Claim. Numbers are NumericDate values (seconds since the Unix * epoch); Dates are converted to seconds. Strings are relative to now, using seconds, minutes, * hours, days, weeks, or years (365.25 days; no months). Prefix `-` or suffix `ago` subtracts the * duration. * * @param input "nbf" (Not Before) Claim value as a timestamp, Date, or relative duration. */ setNotBefore(input: number | string | Date): this /** * Set the "exp" (Expiration Time) Claim. Accepts a NumericDate value (seconds since the Unix * epoch), a Date, or a duration relative to now using the same formats as {@link setNotBefore}. * * @param input "exp" (Expiration Time) Claim value as a timestamp, Date, or relative duration. */ setExpirationTime(input: number | string | Date): this /** * Set the "iat" (Issued At) Claim. Defaults to the current Unix timestamp in seconds. Accepts a * Unix timestamp in seconds, a Date, or a duration relative to now using the same formats as * {@link setNotBefore}. * * @param input "iat" (Issued At) Claim value as a timestamp, Date, or relative duration. */ setIssuedAt(input?: number | string | Date): this }