UNPKG

@tanstack/start-server-core

Version:

Modern and scalable routing for React applications

65 lines (64 loc) 2.79 kB
import { CookieSerializeOptions } from 'cookie-es'; /** Algorithm used for encryption and decryption. */ type EncryptionAlgorithm = 'aes-128-ctr' | 'aes-256-cbc'; /** Algorithm used for integrity verification. */ type IntegrityAlgorithm = 'sha256'; /** * Options for customizing the key derivation algorithm used to generate encryption and integrity verification keys as well as the algorithms and salt sizes used. */ type SealOptions = Readonly<{ /** Encryption step options. */ encryption: SealOptionsSub<EncryptionAlgorithm>; /** Integrity step options. */ integrity: SealOptionsSub<IntegrityAlgorithm>; ttl: number; /** Number of seconds of permitted clock skew for incoming expirations. Defaults to 60 seconds. */ timestampSkewSec: number; /** * Local clock time offset, expressed in number of milliseconds (positive or negative). Defaults to 0. */ localtimeOffsetMsec: number; }>; /** `seal()` method options. */ type SealOptionsSub<TAlgorithm extends _Algorithm = _Algorithm> = Readonly<{ /** The length of the salt (random buffer used to ensure that two identical objects will generate a different encrypted result). Defaults to 256. */ saltBits: number; /** The algorithm used. Defaults to 'aes-256-cbc' for encryption and 'sha256' for integrity. */ algorithm: TAlgorithm; /** The number of iterations used to derive a key from the password. Defaults to 1. */ iterations: number; /** Minimum password size. Defaults to 32. */ minPasswordlength: number; }>; /** Password secret string or buffer.*/ type SessionDataT = Record<string, any>; export type SessionData<T extends SessionDataT = SessionDataT> = Partial<T>; export interface Session<T extends SessionDataT = SessionDataT> { id: string; createdAt: number; data: SessionData<T>; } export type SessionUpdate<T extends SessionData = SessionData> = Partial<SessionData<T>> | ((oldData: SessionData<T>) => Partial<SessionData<T>> | undefined); export interface SessionManager<T extends SessionDataT = SessionDataT> { readonly id: string | undefined; readonly data: SessionData<T>; update: (update: SessionUpdate<T>) => Promise<SessionManager<T>>; clear: () => Promise<SessionManager<T>>; } export interface SessionConfig { /** Private key used to encrypt session tokens */ password: string; /** Session expiration time in seconds */ maxAge?: number; /** default is 'start' */ name?: string; /** Default is secure, httpOnly, / */ cookie?: false | CookieSerializeOptions; /** Default is x-start-session / x-{name}-session */ sessionHeader?: false | string; seal?: SealOptions; crypto?: Crypto; /** Default is Crypto.randomUUID */ generateId?: () => string; } export {};