lateCookieHandler

tcmts.cli.web.lateCookieHandler · #w35ivtsd · term · runs anywhere

Answers POST /__tcm/cookies/<token> with the cookies kept under that token, once.

import { lateCookies } from "#codebase/tcmts/cli/web";
import type { Middleware } from "#codebase/tcmts/cli/web";

export const lateCookieHandler: Middleware = (req, res, next) => {
  const m = /^\/__tcm\/cookies\/([\w-]{20,})$/.exec((req.url ?? "").split("?")[0]!);
  if (!m) return next();
  const now = Date.now();
  for (const [k, v] of lateCookies) if (v.expires < now) lateCookies.delete(k);
  const kept = req.method === "POST" ? lateCookies.get(m[1]!) : undefined;
  lateCookies.delete(m[1]!);
  if (kept) res.setHeader("set-cookie", kept.cookies);
  res.statusCode = kept ? 204 : 404;
  res.end();
}

uses

used by