setCookie

tcmts.server.setCookie · #6x2oclsp · term · runs on the server

uses tcmts.server.requestNow, which uses tcmts.server.callNow, which uses #tcm/host (call)

Send a cookie with the answer: HttpOnly and SameSite=Lax unless opts says, for the app's base path.

import { requestNow } from "#codebase/tcmts/server";
import type { CookieOptions } from "#codebase/tcmts/server";

export function setCookie(name: string, value: string, opts: CookieOptions = {}): void {
  const c = requestNow("setCookie()");
  if (!/^[\w!#$%&'*+.^`|~-]+$/.test(name)) throw new Error(`invalid cookie name '${name}'`);
  const parts = [
    `${name}=${encodeURIComponent(value)}`,
    `Path=${opts.path ?? c.cookiePath ?? "/"}`,
    `SameSite=${opts.sameSite ?? "Lax"}`,
  ];
  if (opts.maxAge !== undefined) parts.push(`Max-Age=${Math.floor(opts.maxAge)}`);
  if (opts.httpOnly ?? true) parts.push("HttpOnly");
  if (opts.secure ?? c.secure) parts.push("Secure");
  c.setCookies.push(parts.join("; "));
}

uses

used by