remix-utils
Version:
This package contains simple utility functions to use with [React Router](https://reactrouter.com/).
73 lines (71 loc) • 2.3 kB
TypeScript
import type { Cookie } from "react-router";
import { z } from "zod";
import type { TypedCookie } from "./typed-cookie.js";
/**
* Rolling cookies allows you to prolong the expiration of a cookie by updating
* the expiration date of every cookie.
*
* The `rollingCookie` function is prepared to be used in `entry.server`
* exported function to update the expiration date of a cookie if no loader set
* it.
*
* For document request you can use it on the `handleRequest` function:
*
* ```ts
* import { rollingCookie } from "remix-utils/rolling-cookie";
* import { sessionCookie } from "~/session.server";
*
* export default function handleRequest(
* request: Request,
* responseStatusCode: number,
* responseHeaders: Headers,
* remixContext: EntryContext
* ) {
* await rollingCookie(sessionCookie, request, responseHeaders);
*
* return isbot(request.headers.get("user-agent"))
* ? handleBotRequest(
* request,
* responseStatusCode,
* responseHeaders,
* remixContext
* )
* : handleBrowserRequest(
* request,
* responseStatusCode,
* responseHeaders,
* remixContext
* );
* }
* ```
*
* And for data request you can do it on the `handleDataRequest` function:
* ```ts
* import { rollingCookie } from "remix-utils/rolling-cookie";
*
* export let handleDataRequest: HandleDataRequestFunction = async (
* response: Response,
* { request }
* ) => {
* let cookieValue = await sessionCookie.parse(
* responseHeaders.get("set-cookie")
* );
* if (!cookieValue) {
* cookieValue = await sessionCookie.parse(request.headers.get("cookie"));
* responseHeaders.append(
* "Set-Cookie",
* await sessionCookie.serialize(cookieValue)
* );
* }
*
* return response;
* };
* ```
*
* @param cookie The cookie to keep alive
* @param request The request object
* @param responseHeaders The response headers object
* @returns A promise that resolves when the cookie has been set in the response
* @see https://sergiodxa.com/articles/add-rolling-sessions-to-remix
*/
export declare function rollingCookie<Schema extends z.ZodTypeAny>(cookie: Cookie | TypedCookie<Schema>, request: Request, responseHeaders: Headers): Promise<void>;