Cookies
Models HTTP cookies and cookie collections for requests and responses.
A Cookie stores a name, value, encoded value, and standard cookie
attributes. A Cookies value is an immutable collection keyed by cookie
name. This module parses request Cookie headers, builds response
Set-Cookie headers, and provides helpers for adding, removing, merging, and
expiring cookies.
Combinators
expireCookie
Adds an expired cookie safely with an empty value, Max-Age=0, and an epoch Expires value.
Details
Returns a CookiesError in the Result failure channel when the name or options are invalid.
Signature
declare const expireCookie: { (name: string, options?: Omit<{ readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; }, "expires" | "maxAge">): (self: Cookies) => Result<Cookies, CookiesError>; (self: Cookies, name: string, options?: Omit<{ readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; }, "expires" | "maxAge">): Result<Cookies, CookiesError>;}expireCookieUnsafe
Adds an expired cookie to a Cookies object, throwing an error if invalid
Signature
declare const expireCookieUnsafe: { (name: string, options?: Omit<{ readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; }, "expires" | "maxAge">): (self: Cookies) => Cookies; (self: Cookies, name: string, options?: Omit<{ readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; }, "expires" | "maxAge">): Cookies;}Gets a cookie from a Cookies object safely.
Signature
declare const get: { (name: string): (self: Cookies) => Option<Cookie>; (self: Cookies, name: string): Option<Cookie>;}Gets the decoded value of a cookie by name safely.
Details
Returns Option.none() when the cookie is not present.
Signature
declare const getValue: { (name: string): (self: Cookies) => Option<string>; (self: Cookies, name: string): Option<string>;}Combines two Cookies objects, removing duplicates from the first
Signature
declare const merge: { (that: Cookies): (self: Cookies) => Cookies; (self: Cookies, that: Cookies): Cookies;}Removes a cookie by name
Signature
declare const remove: { (name: string): (self: Cookies) => Cookies; (self: Cookies, name: string): Cookies;}Creates and adds a cookie safely by name and value.
Details
The cookie fields are validated first; invalid input returns a CookiesError in the Result failure channel.
Signature
declare const set: { (name: string, value: string, options?: { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; }): (self: Cookies) => Result<Cookies, CookiesError>; (self: Cookies, name: string, value: string, options?: { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; }): Result<Cookies, CookiesError>;}Creates and adds multiple cookies safely from name/value/options tuples.
Details
If any tuple is invalid, returns the first CookiesError and leaves the original collection unchanged.
Signature
declare const setAll: { (cookies: Iterable<readonly [string, string, { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; } | undefined]>): (self: Cookies) => Result<Cookies, CookiesError>; (self: Cookies, cookies: Iterable<readonly [string, string, { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; } | undefined]>): Result<Cookies, CookiesError>;}setAllCookie
Adds multiple cookies to a Cookies object
Signature
declare const setAllCookie: { (cookies: Iterable<Cookie>): (self: Cookies) => Cookies; (self: Cookies, cookies: Iterable<Cookie>): Cookies;}setAllUnsafe
Adds multiple cookies to a Cookies object, throwing an error if invalid
Signature
declare const setAllUnsafe: { (cookies: Iterable<readonly [string, string, { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; } | undefined]>): (self: Cookies) => Cookies; (self: Cookies, cookies: Iterable<readonly [string, string, { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; } | undefined]>): Cookies;}Adds a cookie to a Cookies object
Signature
declare const setCookie: { (cookie: Cookie): (self: Cookies) => Cookies; (self: Cookies, cookie: Cookie): Cookies;}Creates and adds a cookie by name and value, throwing if the cookie fields are invalid.
Signature
declare const setUnsafe: { (name: string, value: string, options?: { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; }): (self: Cookies) => Cookies; (self: Cookies, name: string, value: string, options?: { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Duration.Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "lax" | "strict" | "none"; readonly secure?: boolean; }): Cookies;}Constructors
An empty Cookies object
Signature
declare const empty: CookiesfromIterable
Create a Cookies object from an Iterable
Signature
declare function fromIterable(cookies: Iterable<Cookie>): CookiesfromReadonlyRecord
Creates a Cookies collection from an existing readonly record of cookies keyed by cookie name.
Signature
declare function fromReadonlyRecord(cookies: Record.ReadonlyRecord<string, Cookie>): CookiesfromSetCookie
Create a Cookies object from a set of Set-Cookie headers
Signature
declare function fromSetCookie(headers: string | Iterable<string, any, any>): CookiesmakeCookie
Creates a cookie, validating the name, encoded value, domain, path, and finite maxAge.
Details
Returns a CookiesError in the Result failure channel when validation fails.
Signature
declare function makeCookie(name: string, value: string, options?: { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "none" | "lax" | "strict"; readonly secure?: boolean;}): Result<Cookie, CookiesError>makeCookieUnsafe
Create a new cookie, throwing an error if invalid
Signature
declare function makeCookieUnsafe(name: string, value: string, options?: { readonly domain?: string; readonly expires?: Date; readonly httpOnly?: boolean; readonly maxAge?: Input; readonly partitioned?: boolean; readonly path?: string; readonly priority?: "low" | "medium" | "high"; readonly sameSite?: "none" | "lax" | "strict"; readonly secure?: boolean;}): CookieDecoding
parseHeader
Parses a cookie header into a record of key-value pairs
Details
Adapted from https://github.com/fastify/fastify-cookie under MIT License
Signature
declare function parseHeader(header: string): Record<string, string>Encoding
serializeCookie
Serializes a cookie into a string.
Details
Adapted from https://github.com/fastify/fastify-cookie under MIT License
Signature
declare function serializeCookie(self: Cookie): stringtoCookieHeader
Serializes a Cookies object into a Cookie header.
Signature
declare function toCookieHeader(self: Cookies): stringConverts a Cookies collection to a record of decoded cookie values keyed by cookie name.
Signature
declare function toRecord(self: Cookies): Record<string, string>toSetCookieHeaders
Serializes a Cookies collection into an array of Set-Cookie header values.
Signature
declare function toSetCookieHeaders(self: Cookies): Array<string>Errors
CookiesError
Error returned when a cookie name, value, domain, path, or max-age option is invalid.
Details
Inspect reason to determine the specific validation failure.
Signature
declare class CookiesError extends YieldableError<this> & { readonly _tag: "CookieError";} & Readonly<{ readonly reason: CookiesErrorReason;}> { constructor(args: { readonly reason: CookiesErrorReason; }); readonly "~effect/http/Cookies/CookieError": "~effect/http/Cookies/CookieError"; message: "InvalidCookieName" | "InvalidCookieValue" | "InvalidCookieDomain" | "InvalidCookiePath" | "CookieInfinityMaxAge"; static fromReason(reason: "InvalidCookieName" | "InvalidCookieValue" | "InvalidCookieDomain" | "InvalidCookiePath" | "CookieInfinityMaxAge", cause?: unknown): CookiesError;}CookiesErrorReason
Error reason describing why cookie construction failed, such as invalid name, value, domain, path, or infinite max-age.
Signature
declare class CookiesErrorReason extends Error<{ readonly _tag: "InvalidCookieName" | "InvalidCookieValue" | "InvalidCookieDomain" | "InvalidCookiePath" | "CookieInfinityMaxAge"; readonly cause?: unknown;}> { constructor(args: { readonly _tag: "InvalidCookieName" | "InvalidCookieValue" | "InvalidCookieDomain" | "InvalidCookiePath" | "CookieInfinityMaxAge"; readonly cause?: unknown; });}Guards
Models
Predicates
Schemas
CookieSchema
Schema for Cookie values.
Signature
declare const CookieSchema: CookieSchemaCookieSchema interface
Schema interface for validating Cookie values.
Signature
interface CookieSchema extends declare<Cookie> { constructor(_: never);}CookiesSchema
Schema for Cookies collections.
Details
JSON encoding uses Set-Cookie header strings, while isomorphic encoding uses
a readonly record of cookie values.
Signature
declare const CookiesSchema: CookiesSchemaCookiesSchema interface
Schema interface for validating and encoding Cookies collections.
Signature
interface CookiesSchema extends declare<Cookies, Record.ReadonlyRecord<string, Cookie>> { constructor(_: never);}schemaRecord
Schema for transforming Cookies into records of decoded string values keyed
by cookie name.
Signature
declare const schemaRecord: decodeTo<$Record<String, String>, CookiesSchema, never, never>