@decocms/nextjs 8.6.0 → 8.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ export interface BindDraftOptions {
35
35
  /** The page's own `searchParams` (a layout has none: it reads the proxy's `x-deco-version`). */
36
36
  searchParams?: SearchParams;
37
37
  }
38
- type BindCMS = Pick<CMS, "readVersion" | "forRelease">;
38
+ type BindCMS = Pick<CMS, "readVersion" | "forRelease" | "checkRelease">;
39
39
  /**
40
40
  * Binds what the request reads: the version, if any (the page's own
41
41
  * `?__draft=` first, `off` leaving preview, then the version the proxy
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAYlE,OAAO,EAAE,kBAAkB,EAAa,MAAM,WAAW,CAAC;AAE1D,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,eAAe,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC;AAOvD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9F;AAmDD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,MAAM,CAS9D;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,YAAY,CAAC,EACvC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKxB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAiBlE,OAAO,EAAE,kBAAkB,EAAa,MAAM,WAAW,CAAC;AAE1D,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,eAAe,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,GAAG,cAAc,CAAC,CAAC;AAOxE;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9F;AAkED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,MAAM,CAU9D;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,YAAY,CAAC,EACvC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKxB"}
@@ -27,8 +27,8 @@
27
27
  import { parseVisitor } from "@decocms/blocks/experiments";
28
28
  import { headers } from "next/headers.js";
29
29
  import { ASSIGNMENTS_HEADER, parseAssignmentsSegment, withoutDarkTests, } from "../assignments.js";
30
- import { DRAFT_PARAM, VERSION_HEADER } from "../draft.js";
31
- import { allowedDraft, requestLike } from "../drafts.js";
30
+ import { DRAFT_PARAM, DRAFT_UNAVAILABLE_HEADER, RELEASE_CHECK_HEADER, VERSION_HEADER, } from "../draft.js";
31
+ import { allowedDraft, draftReleaseCheck, requestLike } from "../drafts.js";
32
32
  import { VISITOR_HEADER } from "../visitor.js";
33
33
  import { activeDraftPointer, draftSlot } from "./slot.js";
34
34
  export { ASSIGNMENTS_ROUTE_PREFIX, assignmentsSegment, parseAssignmentsSegment, } from "../assignments.js";
@@ -97,13 +97,25 @@ async function bindVersion(cms, options) {
97
97
  if (param === "off")
98
98
  return false;
99
99
  const requestHeaders = await headers();
100
+ // The proxy read the link's draft and it's gone: the release, with the notice.
101
+ if (requestHeaders.get(DRAFT_UNAVAILABLE_HEADER) === "1") {
102
+ draftSlot().unavailable = true;
103
+ return false;
104
+ }
100
105
  const forwarded = param ?? requestHeaders.get(VERSION_HEADER);
101
106
  const query = forwarded ? `?${DRAFT_PARAM}=${encodeURIComponent(forwarded)}` : "";
102
107
  const request = requestLike(requestHeaders, `/${query}`);
103
- const version = request ? await allowedDraft(cms, request) : null;
108
+ if (request === null)
109
+ return false;
110
+ // The proxy's release check for this request (`x-deco-release-check`), or one of its own:
111
+ // the host check here and the page's draft reads share it.
112
+ const releaseCheck = await draftReleaseCheck(cms, request, requestHeaders.get(RELEASE_CHECK_HEADER));
113
+ const version = await allowedDraft(cms, request, releaseCheck);
104
114
  if (version === null)
105
115
  return false;
106
- draftSlot().version = version;
116
+ const slot = draftSlot();
117
+ slot.version = version;
118
+ slot.releaseCheck = releaseCheck ?? null;
107
119
  return true;
108
120
  }
109
121
  /**
@@ -114,8 +126,10 @@ async function bindVersion(cms, options) {
114
126
  * and campaigns decide instead. Create one per request.
115
127
  */
116
128
  export function contentClient(cms) {
117
- const { version, visitor, assignments } = draftSlot();
129
+ const { version, visitor, assignments, releaseCheck } = draftSlot();
118
130
  const options = { visitor, version: version?.version ?? null };
131
+ if (version !== null && releaseCheck !== null)
132
+ options.releaseCheck = releaseCheck;
119
133
  if (version?.date !== undefined)
120
134
  options.date = version.date;
121
135
  const experiments = over(version?.experiments, assignments?.experiments);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,15 @@ interface DraftSlot {
13
13
  version: RequestVersion | null;
14
14
  visitor: Visitor | null;
15
15
  assignments: PathAssignments | null;
16
+ /** The link named a draft that can't be read anymore: the page renders the release. */
17
+ unavailable: boolean;
18
+ /** The request's release check (`cms.checkRelease()`), which its draft reads wait for. */
19
+ releaseCheck: string | null;
16
20
  }
17
21
  export declare const draftSlot: () => DraftSlot;
18
22
  /** The version bound to this request (`bindDraft`), or `null` when it renders the current release. */
19
23
  export declare function activeDraftPointer(): string | null;
24
+ /** Whether the request's link named a draft that can't be read anymore (`bindDraft`). */
25
+ export declare function draftUnavailable(): boolean;
20
26
  export {};
21
27
  //# sourceMappingURL=slot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slot.d.ts","sourceRoot":"","sources":["../../src/server/slot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,UAAU,SAAS;IACjB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,SAAS,QAChB,SACL,CAAC;AAEF,sGAAsG;AACtG,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD"}
1
+ {"version":3,"file":"slot.d.ts","sourceRoot":"","sources":["../../src/server/slot.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,UAAU,SAAS;IACjB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,uFAAuF;IACvF,WAAW,EAAE,OAAO,CAAC;IACrB,0FAA0F;IAC1F,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,SAAS,QAChB,SAOL,CAAC;AAEF,sGAAsG;AACtG,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAED,yFAAyF;AACzF,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C"}
@@ -1,7 +1,17 @@
1
1
  import { cache } from "react";
2
- export const draftSlot = cache(() => ({ version: null, visitor: null, assignments: null }));
2
+ export const draftSlot = cache(() => ({
3
+ version: null,
4
+ visitor: null,
5
+ assignments: null,
6
+ unavailable: false,
7
+ releaseCheck: null,
8
+ }));
3
9
  /** The version bound to this request (`bindDraft`), or `null` when it renders the current release. */
4
10
  export function activeDraftPointer() {
5
11
  return draftSlot().version?.version ?? null;
6
12
  }
13
+ /** Whether the request's link named a draft that can't be read anymore (`bindDraft`). */
14
+ export function draftUnavailable() {
15
+ return draftSlot().unavailable;
16
+ }
7
17
  //# sourceMappingURL=slot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slot.js","sourceRoot":"","sources":["../../src/server/slot.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAS9B,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAC5B,GAAc,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CACvE,CAAC;AAEF,sGAAsG;AACtG,MAAM,UAAU,kBAAkB;IAChC,OAAO,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"slot.js","sourceRoot":"","sources":["../../src/server/slot.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAa9B,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAC5B,GAAc,EAAE,CAAC,CAAC;IAChB,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,IAAI;CACnB,CAAC,CACH,CAAC;AAEF,sGAAsG;AACtG,MAAM,UAAU,kBAAkB;IAChC,OAAO,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,SAAS,EAAE,CAAC,WAAW,CAAC;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decocms/nextjs",
3
- "version": "8.6.0",
3
+ "version": "8.7.0",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=24"
@@ -67,7 +67,7 @@
67
67
  }
68
68
  },
69
69
  "devDependencies": {
70
- "@decocms/blocks": "8.6.0",
70
+ "@decocms/blocks": "8.7.0",
71
71
  "@opentelemetry/api": "^1.9.1",
72
72
  "@types/react": "^19.0.0",
73
73
  "@types/react-dom": "^19.0.0",
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * The "Preview mode" badge for the request's draft: a Server Component that
3
3
  * renders `DraftBadge` (`@decocms/blocks/preview`) only when `bindDraft`
4
- * bound a draft, so a published page emits nothing.
4
+ * bound a draft, so a published page emits nothing; when the link named a
5
+ * draft that can't be read anymore, the badge's calm notice instead.
5
6
  *
6
7
  * Render it inside the page, after `bindDraft` was awaited, never from a
7
8
  * layout: a layout renders alongside the page that fills it, so it may run
@@ -9,7 +10,7 @@
9
10
  */
10
11
  import { DraftBadge } from "@decocms/blocks/preview";
11
12
  import type { ReactNode } from "react";
12
- import { activeDraftPointer } from "./server/slot.ts";
13
+ import { activeDraftPointer, draftUnavailable } from "./server/slot.ts";
13
14
 
14
15
  export interface DraftPreviewIndicatorProps {
15
16
  /** Where "Exit preview" goes; default: the current URL with `?__draft=off`. */
@@ -18,6 +19,6 @@ export interface DraftPreviewIndicatorProps {
18
19
 
19
20
  export function DraftPreviewIndicator({ exitHref }: DraftPreviewIndicatorProps = {}): ReactNode {
20
21
  const pointer = activeDraftPointer();
21
- if (!pointer) return null;
22
+ if (!pointer) return draftUnavailable() ? <DraftBadge pointer={null} unavailable /> : null;
22
23
  return <DraftBadge pointer={pointer} exitHref={exitHref} />;
23
24
  }
@@ -25,7 +25,7 @@
25
25
 
26
26
  /** `draftResponseHeaders(pointer)` (`src/draft.ts`), as `next.config` header entries. */
27
27
  const DRAFT_NO_STORE_HEADERS = [
28
- { key: "Cache-Control", value: "no-store, private" },
28
+ { key: "Cache-Control", value: "max-age=0, no-cache, must-revalidate" },
29
29
  { key: "Vary", value: "Cookie" },
30
30
  { key: "X-Robots-Tag", value: "noindex, nofollow" },
31
31
  ];
package/src/draft.ts CHANGED
@@ -31,19 +31,48 @@ export const DRAFT_COOKIE = "__deco_draft";
31
31
  */
32
32
  export const VERSION_HEADER = "x-deco-version";
33
33
 
34
+ /**
35
+ * The request header the proxy sets on a draft request it hands the pages:
36
+ * the id of the release check it made for it (`cms.checkRelease()`), so
37
+ * `bindDraft`'s host check and the page's draft reads wait for that check
38
+ * instead of making their own (one `latest.json` read per preview request).
39
+ * The proxy removes any copy that arrives from outside; an id the CMS didn't
40
+ * make (a proxy in another process) is a check of its own anyway.
41
+ */
42
+ export const RELEASE_CHECK_HEADER = "x-deco-release-check";
43
+
34
44
  /** The URL prefix a drafted request is rewritten onto (`app/%5Fdraft/[[...path]]`). */
35
45
  export const DRAFT_ROUTE_PREFIX = "/_draft";
36
46
 
37
47
  /**
38
- * The response headers of a page rendered from a draft: never stored by a
39
- * browser or a CDN (`Cache-Control: no-store, private`, `Vary: Cookie`) and
40
- * never indexed (`X-Robots-Tag: noindex, nofollow`). `{}` when `version` is
41
- * `null`, so the result of the draft decision applies as is.
48
+ * The request header the proxy sets when the link named a draft that can't be
49
+ * read anymore (deleted, say): the pages render the release and
50
+ * `DraftPreviewIndicator` says so calmly. The proxy removes any copy that
51
+ * arrives from outside.
52
+ */
53
+ export const DRAFT_UNAVAILABLE_HEADER = "x-deco-draft-unavailable";
54
+
55
+ /**
56
+ * The `Cache-Control` of every response to a preview request (a request with
57
+ * `?__draft=`, whatever its value, or the draft cookie): always revalidated,
58
+ * never answered from a cache (PO 2026-10-23).
59
+ */
60
+ export const DRAFT_CACHE_CONTROL = "max-age=0, no-cache, must-revalidate";
61
+
62
+ /**
63
+ * The response headers of a preview: never answered from a browser's or a
64
+ * CDN's cache (`Cache-Control: max-age=0, no-cache, must-revalidate`, `Vary:
65
+ * Cookie`) and never indexed (`X-Robots-Tag: noindex, nofollow`). `{}` when
66
+ * `preview` is `null`, `false` or empty, so the result of the draft decision
67
+ * applies as is: pass the version, or whether the request carries a draft
68
+ * signal at all (`?__draft=off` and a refused or unavailable draft too).
42
69
  */
43
- export function draftResponseHeaders(version: string | null | undefined): Record<string, string> {
44
- if (!version) return {};
70
+ export function draftResponseHeaders(
71
+ preview: string | boolean | null | undefined,
72
+ ): Record<string, string> {
73
+ if (!preview) return {};
45
74
  return {
46
- "Cache-Control": "no-store, private",
75
+ "Cache-Control": DRAFT_CACHE_CONTROL,
47
76
  Vary: "Cookie",
48
77
  "X-Robots-Tag": "noindex, nofollow",
49
78
  };
package/src/drafts.ts CHANGED
@@ -21,7 +21,13 @@
21
21
  *
22
22
  * No React, no Next.js and no module state: the proxy and the pages share it.
23
23
  */
24
- import { type CMS, parseVersion, type RequestLike, type RequestVersion } from "@decocms/blocks";
24
+ import {
25
+ type CMS,
26
+ parseDraftPointer,
27
+ parseVersion,
28
+ type RequestLike,
29
+ type RequestVersion,
30
+ } from "@decocms/blocks";
25
31
  import { DRAFT_COOKIE, DRAFT_PARAM } from "./draft.ts";
26
32
 
27
33
  const DRAFT_OFF = "off";
@@ -103,10 +109,37 @@ export function requestLike(
103
109
  export async function allowedDraft(
104
110
  cms: Pick<CMS, "readVersion">,
105
111
  request: RequestLike,
112
+ releaseCheck?: string | null,
106
113
  ): Promise<RequestVersion | null> {
107
114
  const read = readDraftVersion(request);
108
115
  if (read === null) return null;
109
- return (await cms.readVersion(request)) === null ? null : read;
116
+ return (await cms.readVersion(request, { releaseCheck })) === null ? null : read;
117
+ }
118
+
119
+ /** A draft pointer's version that names no draft: the release, nothing fetched. */
120
+ const LOCAL_VERSION = "local";
121
+
122
+ /** Whether a version names a saved draft (a pointer, not a release's SHA and not `local`). */
123
+ export function namesDraft(version: string): boolean {
124
+ const parsed = parseDraftPointer(version);
125
+ return parsed !== null && parsed.version !== LOCAL_VERSION;
126
+ }
127
+
128
+ /**
129
+ * The release check of a request whose link names a draft
130
+ * (`cms.checkRelease()`), so its host check, its draft reads and its render
131
+ * share one read of `latest.json`: the one `forwarded` names when the CMS
132
+ * made it (the proxy's, for the same request), else a new one. `undefined`
133
+ * for any other request: the release, a release's SHA, no link.
134
+ */
135
+ export async function draftReleaseCheck(
136
+ cms: Pick<CMS, "checkRelease">,
137
+ request: RequestLike,
138
+ forwarded?: string | null,
139
+ ): Promise<string | undefined> {
140
+ const read = readDraftVersion(request);
141
+ if (read === null || !namesDraft(read.version)) return undefined;
142
+ return cms.checkRelease(forwarded);
110
143
  }
111
144
 
112
145
  /**
@@ -30,8 +30,11 @@
30
30
  * (`contentClient`), deciding nothing again. It sends the visitor's cookie on
31
31
  * a first visit only, never from a preview.
32
32
  *
33
- * Cached (ISR) pages can't read a request, so a drafted request to one is
34
- * rewritten onto a dynamic draft route (`/_draft/<path>`, mounted as
33
+ * Cached (ISR) pages can't read a request, so a preview request (any draft
34
+ * signal: `?__draft=` with any value, `off` included, or the draft cookie) is
35
+ * rewritten onto a dynamic draft route, never cached, and answers
36
+ * `Cache-Control: max-age=0, no-cache, must-revalidate`; a drafted request
37
+ * is rewritten onto it (`/_draft/<path>`, mounted as
35
38
  * `app/%5Fdraft/...`: a literal `_draft` folder is private in Next and never
36
39
  * routes), and a published one onto the assignments route
37
40
  * (`/_assignments/<assignments>/<path>`, `rewriteToAssignmentsRoute`), where
@@ -58,11 +61,18 @@ import {
58
61
  type RequestAssignments,
59
62
  readAssignmentsAndScope,
60
63
  } from "../assignments.ts";
61
- import { DRAFT_ROUTE_PREFIX, draftResponseHeaders, VERSION_HEADER } from "../draft.ts";
64
+ import {
65
+ DRAFT_ROUTE_PREFIX,
66
+ DRAFT_UNAVAILABLE_HEADER,
67
+ draftResponseHeaders,
68
+ RELEASE_CHECK_HEADER,
69
+ VERSION_HEADER,
70
+ } from "../draft.ts";
62
71
  import {
63
72
  allowedDraft,
64
73
  draftCookie,
65
74
  draftLinkValue,
75
+ draftReleaseCheck,
66
76
  endsPreview,
67
77
  hasDraftSignal,
68
78
  requestLike,
@@ -71,8 +81,11 @@ import { VISITOR_HEADER } from "../visitor.ts";
71
81
 
72
82
  export { requestLike } from "../drafts.ts";
73
83
 
74
- /** What the draft decision needs from the CMS: its preview host check, and the release. */
75
- export type CMSHandle = Pick<CMS, "readVersion" | "forRelease">;
84
+ /**
85
+ * What the draft decision needs from the CMS: its preview host check, the
86
+ * release, and the draft a link names (read once before the page renders).
87
+ */
88
+ export type CMSHandle = Pick<CMS, "readVersion" | "forRelease" | "forDraft" | "checkRelease">;
76
89
 
77
90
  /** What the proxy does with a request's draft state. */
78
91
  export interface DraftDecision {
@@ -85,6 +98,25 @@ export interface DraftDecision {
85
98
  version: RequestVersion | null;
86
99
  /** The `Set-Cookie` the response carries: storing a link's version, or ending a preview. */
87
100
  setCookie: string | null;
101
+ /**
102
+ * The request carries a draft signal at all (`?__draft=` with any value, or
103
+ * the draft cookie): it renders on the draft route, never from a cache,
104
+ * and answers `draftResponseHeaders`, whatever `version` is.
105
+ */
106
+ preview?: boolean;
107
+ /**
108
+ * The link named a draft that can't be read (deleted, or its host
109
+ * failing): the release renders, the cookie is expired when the draft is
110
+ * gone (a failure that may pass leaves it), and the pages show
111
+ * the calm notice (`x-deco-draft-unavailable`), never an error page.
112
+ */
113
+ unavailable?: true;
114
+ /**
115
+ * The release check made for this draft request (`cms.checkRelease()`),
116
+ * forwarded on `x-deco-release-check`: the host check, the draft read here
117
+ * and the page's all wait for it, so the request reads `latest.json` once.
118
+ */
119
+ releaseCheck?: string;
88
120
  }
89
121
 
90
122
  export {
@@ -102,11 +134,21 @@ export {
102
134
  export { DRAFT_ROUTE_PREFIX, VERSION_HEADER } from "../draft.ts";
103
135
 
104
136
  const INERT: DraftDecision = Object.freeze({ version: null, setCookie: null });
137
+ /** A preview that renders the release (`off`, a refused host, a value that doesn't parse). */
138
+ const RELEASE_PREVIEW: DraftDecision = Object.freeze({
139
+ version: null,
140
+ setCookie: null,
141
+ preview: true,
142
+ });
105
143
 
106
144
  /**
107
145
  * The version a request renders and the cookie its response sets, on a host
108
146
  * the CMS allows (as the pages' `bindDraft` checks again). A request with
109
- * no `?__draft=` and no draft cookie never reaches the CMS.
147
+ * no `?__draft=` and no draft cookie never reaches the CMS. A draft request
148
+ * checks for the latest release once (`cms.checkRelease()`), shared by the
149
+ * host check, the read below and the page. A draft pointer
150
+ * is read once here (`forDraft(...).revision()`, the read the page makes
151
+ * again): a draft that can't be read gives the release and `unavailable`.
110
152
  */
111
153
  export async function decideDraft(
112
154
  cms: CMSHandle,
@@ -116,15 +158,55 @@ export async function decideDraft(
116
158
  const like = requestLike(request.headers, url.pathname + url.search, url.host);
117
159
  if (like === null || !hasDraftSignal(like)) return INERT;
118
160
  // Ending a preview is allowed on any host, so a cookie set earlier always goes.
119
- if (endsPreview(like)) return { version: null, setCookie: draftCookie("", ["Max-Age=0"]) };
120
- const version = await allowedDraft(cms, like);
121
- if (version === null) return INERT;
161
+ if (endsPreview(like)) return { ...RELEASE_PREVIEW, setCookie: expiredCookie() };
162
+ // One release check per draft request, shared below and by the page.
163
+ const releaseCheck = await draftReleaseCheck(cms, like);
164
+ const version = await allowedDraft(cms, like, releaseCheck);
165
+ if (version === null) return RELEASE_PREVIEW;
166
+ if (releaseCheck !== undefined) {
167
+ try {
168
+ await cms.forDraft(version.version, { releaseCheck }).revision();
169
+ } catch (error) {
170
+ // Gone (deleted): the preview ends. Any other failure (the drafts' host
171
+ // down, a timeout) leaves the cookie alone, so the next request tries again.
172
+ const setCookie = isDraftGone(error) ? expiredCookie() : null;
173
+ return { ...RELEASE_PREVIEW, setCookie, unavailable: true };
174
+ }
175
+ }
122
176
  const link = draftLinkValue(like);
123
- return { version, setCookie: link ? draftCookie(encodeURIComponent(link)) : null };
177
+ return {
178
+ version,
179
+ setCookie: link ? draftCookie(encodeURIComponent(link)) : null,
180
+ preview: true,
181
+ ...(releaseCheck === undefined ? {} : { releaseCheck }),
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Whether a draft read failed because the drafts' host no longer has the
187
+ * draft (`404`/`410`), as opposed to a failure that may pass (a `5xx`, a
188
+ * timeout, a network error). Reads the error and its causes.
189
+ */
190
+ function isDraftGone(error: unknown): boolean {
191
+ for (let e = error, depth = 0; e instanceof Error && depth < 5; e = e.cause, depth++) {
192
+ if (/draft changes: HTTP (404|410)\b/.test(e.message)) return true;
193
+ }
194
+ return false;
195
+ }
196
+
197
+ /** The `Set-Cookie` that ends a preview. */
198
+ function expiredCookie(): string {
199
+ return draftCookie("", ["Max-Age=0"]);
124
200
  }
125
201
 
126
202
  /** The headers the proxy writes for the pages: never taken from outside. */
127
- const OWN_HEADERS = [VERSION_HEADER, VISITOR_HEADER, ASSIGNMENTS_HEADER];
203
+ const OWN_HEADERS = [
204
+ VERSION_HEADER,
205
+ VISITOR_HEADER,
206
+ ASSIGNMENTS_HEADER,
207
+ DRAFT_UNAVAILABLE_HEADER,
208
+ RELEASE_CHECK_HEADER,
209
+ ];
128
210
 
129
211
  /**
130
212
  * The request headers to forward: the accepted version on `x-deco-version`,
@@ -141,6 +223,10 @@ export function draftRequestHeaders(
141
223
  const headers = new Headers(request.headers);
142
224
  for (const name of OWN_HEADERS) headers.delete(name);
143
225
  if (decision.version) headers.set(VERSION_HEADER, decision.version.version);
226
+ if (decision.version && decision.releaseCheck) {
227
+ headers.set(RELEASE_CHECK_HEADER, decision.releaseCheck);
228
+ }
229
+ if (decision.unavailable) headers.set(DRAFT_UNAVAILABLE_HEADER, "1");
144
230
  return headers;
145
231
  }
146
232
 
@@ -196,8 +282,9 @@ export function applyVisitor<R extends Response>(response: R, decision: VisitorD
196
282
 
197
283
  /**
198
284
  * Each test and campaign on or off for this request, decided once:
199
- * `cms.client({ visitor, ...version })` (the visitor, and the Studio link's
200
- * version, moment and switched tests and campaigns) resolving the saved
285
+ * `cms.client({ visitor, ...version, releaseCheck })` (the visitor, the Studio
286
+ * link's version, moment and switched tests and campaigns, and the request's
287
+ * release check) resolving the saved
201
288
  * `experiments` and `campaigns` blocks. Missing blocks, or content that
202
289
  * doesn't load, give none, never an error.
203
290
  */
@@ -206,9 +293,13 @@ export function decideAssignments(
206
293
  draft: DraftDecision,
207
294
  visitor: VisitorDecision,
208
295
  ): Promise<RequestAssignments> {
209
- return readAssignmentsAndScope(cms, { visitor: visitor.visitor, ...draft.version }).then(
210
- (read) => read.assignments,
211
- );
296
+ // A draft's read shares the request's release check (`decideDraft`), never one of its own.
297
+ const releaseCheck = draft.version ? draft.releaseCheck : undefined;
298
+ return readAssignmentsAndScope(cms, {
299
+ visitor: visitor.visitor,
300
+ ...draft.version,
301
+ ...(releaseCheck ? { releaseCheck } : {}),
302
+ }).then((read) => read.assignments);
212
303
  }
213
304
 
214
305
  /**
@@ -244,10 +335,12 @@ export function isDraftRoutePath(pathname: string): boolean {
244
335
  }
245
336
 
246
337
  /**
247
- * The rewrite of a drafted request onto the draft route, keeping its path and
248
- * forwarding the version and, when given, the visitor (`decideVisitor`) and
249
- * the assignments (`decideAssignments`); `null` when the request isn't
250
- * drafted or is already on the draft route.
338
+ * The rewrite of a preview request (a drafted one, or any other with a draft
339
+ * signal: `off`, a refused host, a draft that can't be read) onto the draft
340
+ * route, which is dynamic and never cached, keeping its path and forwarding
341
+ * the version and, when given, the visitor (`decideVisitor`) and the
342
+ * assignments (`decideAssignments`); `null` when the request isn't a preview
343
+ * or is already on the draft route.
251
344
  */
252
345
  export function rewriteToDraftRoute(
253
346
  request: NextRequest,
@@ -255,7 +348,7 @@ export function rewriteToDraftRoute(
255
348
  visitor?: VisitorDecision,
256
349
  assignments?: RequestAssignments,
257
350
  ): NextResponse | null {
258
- if (!decision.version) return null;
351
+ if (!decision.version && !decision.preview) return null;
259
352
  const url = request.nextUrl.clone();
260
353
  if (isDraftRoutePath(url.pathname)) return null;
261
354
  url.pathname = `${DRAFT_ROUTE_PREFIX}${url.pathname}`;
@@ -282,7 +375,7 @@ const ASSIGNED_CACHE_CONTROL = "private, no-cache";
282
375
  * minutes stale (the first request after that still gets it while Next
283
376
  * renders it again), a banner switching on late, which is accepted.
284
377
  *
285
- * `null` for a drafted request (it renders on the draft route, never cached)
378
+ * `null` for a preview request (it renders on the draft route, never cached)
286
379
  * and for a path already on the draft or assignments route. When the content
287
380
  * saves tests or campaigns, the response is marked `Cache-Control: private,
288
381
  * no-cache`: Next keeps one cached page per set of assignments, but the URL
@@ -297,7 +390,7 @@ export async function rewriteToAssignmentsRoute(
297
390
  draft: DraftDecision,
298
391
  visitor: VisitorDecision,
299
392
  ): Promise<NextResponse | null> {
300
- if (draft.version) return null;
393
+ if (draft.version || draft.preview) return null;
301
394
  const url = request.nextUrl.clone();
302
395
  if (isDraftRoutePath(url.pathname) || isAssignmentsRoutePath(url.pathname)) return null;
303
396
  const { assignments, varies } = await readAssignmentsAndScope(cms, { visitor: visitor.visitor });
@@ -312,15 +405,20 @@ export async function rewriteToAssignmentsRoute(
312
405
  }
313
406
 
314
407
  /**
315
- * The cookie and the response headers of a draft: `Set-Cookie`, and for a
316
- * drafted response `Cache-Control: no-store, private`, `Vary: Cookie` and
408
+ * The cookie and the response headers of a preview: `Set-Cookie`, and for
409
+ * any request with a draft signal (`preview`, or a version)
410
+ * `Cache-Control: max-age=0, no-cache, must-revalidate`, `Vary: Cookie` and
317
411
  * `X-Robots-Tag: noindex, nofollow` (`draftResponseHeaders`). With the
318
412
  * version in a cookie a draft shares its URL with the published page, so a
319
- * cache keyed on the URL alone would serve it to visitors.
413
+ * cache keyed on the URL alone would serve it to visitors. The proxy answers
414
+ * before the page renders, so it can't hold the cookie back from a failed
415
+ * render; `decideDraft` reads the draft first instead, and a draft that
416
+ * can't be read expires the cookie.
320
417
  */
321
418
  export function applyDraft<R extends Response>(response: R, decision: DraftDecision): R {
322
419
  if (decision.setCookie) response.headers.append("set-cookie", decision.setCookie);
323
- for (const [name, value] of Object.entries(draftResponseHeaders(decision.version?.version))) {
420
+ const preview = decision.preview === true || decision.version !== null;
421
+ for (const [name, value] of Object.entries(draftResponseHeaders(preview))) {
324
422
  response.headers.set(name, value);
325
423
  }
326
424
  return response;
@@ -359,7 +457,8 @@ export function draftProxy(
359
457
  }
360
458
  const decision = await decideDraft(cms, request);
361
459
  const visitor = decideVisitor(request, decision);
362
- const onAssignmentsRoute = decision.version === null && assignments?.(request) === true;
460
+ const onAssignmentsRoute =
461
+ decision.version === null && decision.preview !== true && assignments?.(request) === true;
363
462
  const rewritten = onAssignmentsRoute
364
463
  ? await rewriteToAssignmentsRoute(cms, request, decision, visitor)
365
464
  : null;