@worker-tools/middleware
Version:
A suite of standalone HTTP server middlewares for Worker Runtimes.
47 lines (46 loc) • 2.25 kB
TypeScript
import type { StorageArea } from 'kv-storage-interface';
import type { Context } from './context.js';
import type { Awaitable } from './utils/common-types.js';
import type { UnsignedCookiesContext, SignedCookiesContext, EncryptedCookiesContext } from './cookies.js';
import type { FlushedContext } from './flushed.js';
declare type Rec = Record<PropertyKey, any>;
declare type CookieContext = Context & (EncryptedCookiesContext | SignedCookiesContext | UnsignedCookiesContext);
interface SessionContext<S extends Rec = Rec> {
session: S;
}
export interface CookieSessionContext<S extends Rec = Rec> extends SessionContext<S> {
cookieSession: S;
}
export interface StorageSessionContext<S extends Rec = Rec> extends SessionContext<S> {
storageSession: S;
}
export interface CookieSessionOptions<S extends Rec = Rec> {
/** The name of the session cookie. Defaults to `sid`. */
cookieName?: string;
/** Session expiration time in seconds. Defaults to five minutes. */
expirationTtl?: number;
/** Provide a record that serves as the default session object. Also used for type inference. */
defaultSession?: S;
}
export interface StorageSessionOptions<S extends Rec = Rec> extends CookieSessionOptions<S> {
/** The storage area where to persist the session objects. */
storage: StorageArea;
}
/**
* Cookie session middleware for worker runtimes.
*
* Requires a cookie store, preferably encrypted or signed.
*
* Important: This will serialize the entire session data and store it in a cookie. It is sent with every request!
* Only applicable for small session objects. Use `storageSession` for a traditional, KV store-backed session.
*/
export declare function cookieSession<S extends Rec = Rec>(options?: CookieSessionOptions<S>): <X extends CookieContext>(ax: Awaitable<X>) => Promise<X & CookieSessionContext<S>>;
/**
* Session middleware for worker runtimes.
*
* Need to provide a `StorageArea` to persist the session between requests.
* See `@worker-tools/kv-storage`.
*
*/
export declare function storageSession<S extends Rec = Rec>(options: StorageSessionOptions<S>): <X extends CookieContext & Partial<FlushedContext>>(ax: Awaitable<X>) => Promise<X & StorageSessionContext<S>>;
export {};