///
import { FastifyPluginCallback } from "fastify";
declare module "fastify" {
interface FastifyInstance extends SignerMethods {
/**
* Serialize a cookie name-value pair into a Set-Cookie header string
* @param name Cookie name
* @param value Cookie value
* @param opts Options
* @throws {TypeError} When maxAge option is invalid
*/
serializeCookie(name: string, value: string, opts?: fastifyCookie.SerializeOptions): string;
/**
* Manual cookie parsing method
* @docs https://github.com/fastify/fastify-cookie#manual-cookie-parsing
* @param cookieHeader Raw cookie header value
*/
parseCookie(cookieHeader: string): {
[key: string]: string;
};
}
interface FastifyRequest extends SignerMethods {
/**
* Request cookies
*/
cookies: { [cookieName: string]: string | undefined };
}
interface FastifyReply extends SignerMethods {
/**
* Request cookies
*/
cookies: { [cookieName: string]: string | undefined };
}
interface SignerMethods {
/**
* Signs the specified cookie using the secret/signer provided.
* @param value cookie value
*/
signCookie(value: string): string;
/**
* Unsigns the specified cookie using the secret/signer provided.
* @param value Cookie value
*/
unsignCookie(value: string): fastifyCookie.UnsignResult;
}
export type setCookieWrapper = (
name: string,
value: string,
options?: fastifyCookie.CookieSerializeOptions
) => FastifyReply;
interface FastifyReply {
/**
* Set response cookie
* @name setCookie
* @param name Cookie name
* @param value Cookie value
* @param options Serialize options
*/
setCookie: setCookieWrapper;
/**
* @alias setCookie
*/
cookie(
name: string,
value: string,
options?: fastifyCookie.CookieSerializeOptions
): this;
/**
* clear response cookie
* @param name Cookie name
* @param options Serialize options
*/
clearCookie(
name: string,
options?: fastifyCookie.CookieSerializeOptions
): this;
/**
* Unsigns the specified cookie using the secret provided.
* @param value Cookie value
*/
unsignCookie(value: string): fastifyCookie.UnsignResult;
}
}
type FastifyCookiePlugin = FastifyPluginCallback<
NonNullable
>;
declare namespace fastifyCookie {
interface SignerBase {
sign: (value: string) => string;
unsign: (input: string) => UnsignResult;
}
export class Signer implements SignerBase {
constructor (secrets: string | Array | Buffer | Array, algorithm?: string)
sign: (value: string) => string;
unsign: (input: string) => UnsignResult;
}
export interface SerializeOptions {
/** The `Domain` attribute. */
domain?: string;
/** Specifies a function that will be used to encode a cookie's value. Since value of a cookie has a limited character set (and must be a simple string), this function can be used to encode a value into a string suited for a cookie's value. */
encode?(val: string): string;
/** The expiration `date` used for the `Expires` attribute. */
expires?: Date;
/** Add the `HttpOnly` attribute. Defaults to `false`. */
httpOnly?: boolean;
/** A `number` in seconds that specifies the `Max-Age` attribute. */
maxAge?: number;
/** A `boolean` indicating whether the cookie is tied to the top-level site where it's initially set and cannot be accessed from elsewhere. */
partitioned?: boolean;
/** The `Path` attribute. */
path?: string;
/** A `boolean` or one of the `SameSite` string attributes. E.g.: `lax`, `none` or `strict`. */
sameSite?: 'lax' | 'none' | 'strict' | boolean;
/** One of the `Priority` string attributes (`low`, `medium` or `high`) specifying a retention priority for HTTP cookies that will be respected by user agents during cookie eviction. */
priority?: 'low' | 'medium' | 'high';
/** Add the `Secure` attribute. Defaults to `false`. */
secure?: boolean;
}
export interface CookieSerializeOptions extends Omit {
/** Add the `Secure` attribute. Value can be set to `"auto"`; in this case the `Secure` attribute will only be added for HTTPS requests. Defaults to `false`. */
secure?: boolean | 'auto';
signed?: boolean;
}
export interface ParseOptions {
decode?: (encodedURIComponent: string) => string;
}
type HookType = 'onRequest' | 'preParsing' | 'preValidation' | 'preHandler' | 'preSerialization';
export interface FastifyCookieOptions {
secret?: string | string[] | Buffer | Buffer[] | Signer;
hook?: HookType | false;
parseOptions?: fastifyCookie.CookieSerializeOptions;
}
export type Sign = (value: string, secret: string | Buffer, algorithm?: string) => string;
export type Unsign = (input: string, secret: string | Buffer, algorithm?: string) => UnsignResult;
export type SignerFactory = (secrets: string | string[] | Buffer | Buffer[], algorithm?: string) => SignerBase;
export type UnsignResult = {
valid: true;
renew: boolean;
value: string;
} | {
valid: false;
renew: false;
value: null;
}
export const signerFactory: SignerFactory;
export const sign: Sign;
export const unsign: Unsign;
export interface FastifyCookie extends FastifyCookiePlugin {
parse: (cookieHeader: string, opts?: ParseOptions) => { [key: string]: string };
serialize: (name: string, value: string, opts?: SerializeOptions) => string;
signerFactory: SignerFactory;
Signer: Signer;
sign: Sign;
unsign: Unsign;
}
export const fastifyCookie: FastifyCookie;
export interface FastifyCookieOptions {
secret?: string | string[] | Buffer | Buffer[] | SignerBase;
algorithm?: string;
parseOptions?: CookieSerializeOptions;
}
export { fastifyCookie as default };
}
declare function fastifyCookie(
...params: Parameters
): ReturnType;
export = fastifyCookie;