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
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: Cookies;fromIterable
Create a Cookies object from an Iterable
Signature
declare function fromIterable(cookies: Iterable<Cookie>): Cookies;fromReadonlyRecord
Creates a Cookies collection from an existing readonly record of cookies keyed by cookie name.
Signature
declare function fromReadonlyRecord(cookies: Record.ReadonlyRecord<string, Cookie>): Cookies;fromSetCookie
Create a Cookies object from a set of Set-Cookie headers
Signature
declare function fromSetCookie(headers: string | Iterable<string, any, any>): Cookies;makeCookie
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;
},
): Cookie;Decoding
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): string;toCookieHeader
Serializes a Cookies object into a Cookie header.
Signature
declare function toCookieHeader(self: Cookies): string;Converts 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: CookieSchema;CookieSchema 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: CookiesSchema;CookiesSchema 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>;
Adds an expired cookie safely with an empty value,
Max-Age=0, and an epochExpiresvalue.Details
Returns a
CookiesErrorin theResultfailure channel when the name or options are invalid.