Skip to content
131 changes: 131 additions & 0 deletions src/types/utils/jwt.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
/**
Based on https://github.com/panva/jose/tree/v6.0.10
Copyright (c) 2018 Filip Skokan.
https://github.com/panva/jose/blob/v6.0.10/LICENSE.md
*/

/** Generic JSON Web Key Parameters. */
export interface JWKParameters {
/** JWK "kty" (Key Type) Parameter */
kty?: string;
/**
* JWK "alg" (Algorithm) Parameter
*
* @see {@link https://github.com/panva/jose/issues/210 Algorithm Key Requirements}
*/
alg?: string;
/** JWK "key_ops" (Key Operations) Parameter */
key_ops?: string[];
/** JWK "ext" (Extractable) Parameter */
ext?: boolean;
/** JWK "use" (Public Key Use) Parameter */
use?: string;
/** JWK "x5c" (X.509 Certificate Chain) Parameter */
x5c?: string[];
/** JWK "x5t" (X.509 Certificate SHA-1 Thumbprint) Parameter */
x5t?: string;
/** JWK "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) Parameter */
"x5t#S256"?: string;
/** JWK "x5u" (X.509 URL) Parameter */
x5u?: string;
/** JWK "kid" (Key ID) Parameter */
kid?: string;
}

/**
* JSON Web Key ({@link https://www.rfc-editor.org/rfc/rfc7517 JWK}). "RSA", "EC", "OKP", and "oct"
* key types are supported.
*
* @see {@link JWK_OKP_Public}
* @see {@link JWK_OKP_Private}
* @see {@link JWK_EC_Public}
* @see {@link JWK_EC_Private}
* @see {@link JWK_RSA_Public}
* @see {@link JWK_RSA_Private}
* @see {@link JWK_oct}
*/
export interface JWK extends JWKParameters {
/**
* - EC JWK "crv" (Curve) Parameter
* - OKP JWK "crv" (The Subtype of Key Pair) Parameter
*/
crv?: string;
/**
* - Private RSA JWK "d" (Private Exponent) Parameter
* - Private EC JWK "d" (ECC Private Key) Parameter
* - Private OKP JWK "d" (The Private Key) Parameter
*/
d?: string;
/** Private RSA JWK "dp" (First Factor CRT Exponent) Parameter */
dp?: string;
/** Private RSA JWK "dq" (Second Factor CRT Exponent) Parameter */
dq?: string;
/** RSA JWK "e" (Exponent) Parameter */
e?: string;
/** Oct JWK "k" (Key Value) Parameter */
k?: string;
/** RSA JWK "n" (Modulus) Parameter */
n?: string;
/** Private RSA JWK "p" (First Prime Factor) Parameter */
p?: string;
/** Private RSA JWK "q" (Second Prime Factor) Parameter */
q?: string;
/** Private RSA JWK "qi" (First CRT Coefficient) Parameter */
qi?: string;
/**
* - EC JWK "x" (X Coordinate) Parameter
* - OKP JWK "x" (The public key) Parameter
*/
x?: string;
/** EC JWK "y" (Y Coordinate) Parameter */
y?: string;
}

/** Header Parameters common to JWE and JWS */
export interface JoseHeaderParameters {
/** "kid" (Key ID) Header Parameter */
kid?: string;

/** "x5t" (X.509 Certificate SHA-1 Thumbprint) Header Parameter */
x5t?: string;

/** "x5c" (X.509 Certificate Chain) Header Parameter */
x5c?: string[];

/** "x5u" (X.509 URL) Header Parameter */
x5u?: string;

/** "jku" (JWK Set URL) Header Parameter */
jku?: string;

/** "jwk" (JSON Web Key) Header Parameter */
jwk?: Pick<JWK, "kty" | "crv" | "x" | "y" | "e" | "n">;

/** "typ" (Type) Header Parameter */
typ?: string;

/** "cty" (Content Type) Header Parameter */
cty?: string;
}

/** Recognized JWS Header Parameters, any other Header Members may also be present. */
export interface JWSHeaderParameters extends JoseHeaderParameters {
/**
* JWS "alg" (Algorithm) Header Parameter
*
* @see {@link https://github.com/panva/jose/issues/210#jws-alg Algorithm Key Requirements}
*/
alg?: string;

/**
* This JWS Extension Header Parameter modifies the JWS Payload representation and the JWS Signing
* Input computation as per {@link https://www.rfc-editor.org/rfc/rfc7797 RFC7797}.
*/
b64?: boolean;

/** JWS "crit" (Critical) Header Parameter */
crit?: string[];

/** Any other JWS Header member. */
[propName: string]: unknown;
}
9 changes: 7 additions & 2 deletions src/types/utils/session.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { CookieSerializeOptions } from "cookie-es";
import type { SealOptions } from "../../utils/internal/iron-crypto";
import type { JWEOptions } from "../../utils/internal/jwe";
import type { kGetSession } from "../../utils/internal/session";

type SessionDataT = Record<string, any>;
Expand All @@ -24,7 +24,12 @@ export interface SessionConfig {
cookie?: false | CookieSerializeOptions;
/** Default is x-h3-session / x-{name}-session */
sessionHeader?: false | string;
seal?: SealOptions;
/** JWE options for encryption/decryption */
jwe?: Partial<JWEOptions>;
/** Time skew tolerance in seconds */
timestampSkewSec?: number;
/** Local time offset in milliseconds */
localtimeOffsetMsec?: number;
crypto?: Crypto;
/** Default is Crypto.randomUUID */
generateId?: () => string;
Expand Down
Loading
Loading