/**
* Represents an HTTP Cookie.
*
* @see {@link https://www.rfc-editor.org/rfc/rfc6265.html#section-4.2.1}
*/
export interface Cookie {
/** Name of the cookie. */
name: string;
/** Value of the cookie. */
value: string;
/**
* The cookie's `Expires` attribute, either as an explicit date or UTC
* milliseconds. If `undefined`, the cookie will expire when the client's
* session ends.
*
* @example
Explicit date:
*
* ```ts
* import { Cookie } from "@std/http/cookie";
* const cookie: Cookie = {
* name: 'name',
* value: 'value',
* // expires on Fri Dec 30 2022
* expires: new Date('2022-12-31')
* }
* ```
*
* @example UTC milliseconds
*
* ```ts
* import { Cookie } from "@std/http/cookie";
* const cookie: Cookie = {
* name: 'name',
* value: 'value',
* // expires 10 seconds from now
* expires: Date.now() + 10000
* }
* ```
*/
expires?: Date | number;
/**
* The cookie's `Max-Age` attribute, in seconds. Must be a non-negative
* integer. A cookie with a `maxAge` of `0` expires immediately.
*/
maxAge?: number;
/**
* The cookie's `Domain` attribute. Specifies those hosts to which the cookie
* will be sent.
*/
domain?: string;
/**
* The cookie's `Path` attribute. A cookie with a path will only be included
* in the `Cookie` request header if the requested URL matches that path.
*/
path?: string;
/**
* The cookie's `Secure` attribute. If `true`, the cookie will only be
* included in the `Cookie` request header if the connection uses SSL and
* HTTPS.
*
* @default {false}
*/
secure?: boolean;
/**
* The cookie's `HTTPOnly` attribute. If `true`, the cookie cannot be accessed via JavaScript.
*
* @default {false}
*/
httpOnly?: boolean;
/**
* The cookie's `Partitioned` attribute.
* If `true`, the cookie will be only be included in the `Cookie` request header if
* the domain it is embedded by matches the domain the cookie was originally set from.
*
* Warning: This is an attribute that has not been fully standardized yet.
* It may change in the future without following the semver semantics of the package.
* Clients may ignore the attribute until they understand it.
*
* @default {false}
*/
partitioned?: boolean;
/**
* Allows servers to assert that a cookie ought not to
* be sent along with cross-site requests.
*/
sameSite?: "Strict" | "Lax" | "None";
/**
* Additional key value pairs with the form "key=value".
*
* @default {[]}
*/
unparsed?: string[];
}
/**
* Parse cookies of a header
*
* @example Usage
* ```ts
* import { getCookies } from "@std/http/cookie";
* import { assertEquals } from "@std/assert";
*
* const headers = new Headers();
* headers.set("Cookie", "full=of; tasty=chocolate");
*
* const cookies = getCookies(headers);
* assertEquals(cookies, { full: "of", tasty: "chocolate" });
* ```
*
* @param headers The headers instance to get cookies from
* @return Object with cookie names as keys
*/
export declare function getCookies(headers: Headers): Record;
/**
* Set the cookie header properly in the headers
*
* @example Usage
* ```ts
* import { Cookie, setCookie } from "@std/http/cookie";
* import { assertEquals } from "@std/assert";
*
* const headers = new Headers();
* const cookie: Cookie = { name: "Space", value: "Cat" };
* setCookie(headers, cookie);
*
* const cookieHeader = headers.get("set-cookie");
*
* assertEquals(cookieHeader, "Space=Cat");
* ```
*
* @param headers The headers instance to set the cookie to
* @param cookie Cookie to set
*/
export declare function setCookie(headers: Headers, cookie: Cookie): void;
/**
* Set the cookie header with empty value in the headers to delete it.
*
* The attributes (`path`, `domain`, `secure`, `httpOnly`, `partitioned`) need
* to match the values when the cookie was set.
*
* > Note: Deleting a `Cookie` will set its expiration date before now. Forcing
* > the browser to delete it.
*
* @example Usage
* ```ts
* import { deleteCookie } from "@std/http/cookie";
* import { assertEquals } from "@std/assert";
*
* const headers = new Headers();
* deleteCookie(headers, "deno");
*
* const cookieHeader = headers.get("set-cookie");
*
* assertEquals(cookieHeader, "deno=; Expires=Thu, 01 Jan 1970 00:00:00 GMT");
* ```
*
* @param headers The headers instance to delete the cookie from
* @param name Name of cookie
* @param attributes Additional cookie attributes
*/
export declare function deleteCookie(headers: Headers, name: string, attributes?: Pick): void;
/**
* Parse set-cookies of a header
*
* @example Usage
* ```ts
* import { getSetCookies } from "@std/http/cookie";
* import { assertEquals } from "@std/assert";
*
* const headers = new Headers([
* ["Set-Cookie", "lulu=meow; Secure; Max-Age=3600"],
* ["Set-Cookie", "booya=kasha; HttpOnly; Path=/"],
* ]);
*
* const cookies = getSetCookies(headers);
*
* assertEquals(cookies[0], {
* name: "lulu",
* value: "meow",
* secure: true,
* maxAge: 3600
* });
* ```
*
* @param headers The headers instance to get set-cookies from
* @return List of cookies
*/
export declare function getSetCookies(headers: Headers): Cookie[];
//# sourceMappingURL=cookie.d.ts.map