@growth-labs/cms 0.5.15 → 0.5.17

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.
@@ -12,5 +12,26 @@ export interface D1PreparedStatement {
12
12
  export interface D1Database {
13
13
  prepare(query: string): D1PreparedStatement;
14
14
  batch(statements: D1PreparedStatement[]): Promise<D1Result[]>;
15
+ /**
16
+ * The D1 Sessions API entry point (present on real workerd bindings; absent
17
+ * on some local shims). A session routes reads to the nearest read replica
18
+ * with sequential consistency inside the session; writes still reach the
19
+ * primary. Optional so structural fakes without it remain assignable —
20
+ * callers must feature-check (see `openReadSession`).
21
+ */
22
+ withSession?(constraint?: string): D1DatabaseSession;
23
+ }
24
+ /**
25
+ * The session handle returned by `withSession`. Structurally the same
26
+ * prepare/batch surface the engine reads through — it deliberately omits
27
+ * `withSession` itself (sessions do not nest). `getBookmark` returns the
28
+ * session's latest observed commit token (null until the first query
29
+ * completes) — D1's mechanism for carrying consistency across sessions,
30
+ * requests, or a write on the raw binding followed by a session read.
31
+ */
32
+ export interface D1DatabaseSession {
33
+ prepare(query: string): D1PreparedStatement;
34
+ batch(statements: D1PreparedStatement[]): Promise<D1Result[]>;
35
+ getBookmark?(): string | null;
15
36
  }
16
37
  //# sourceMappingURL=d1.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../src/engine/d1.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,EAAE,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAA;IAC/C,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACvE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;CACxD;AAED,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAA;IAC3C,KAAK,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;CAC7D"}
1
+ {"version":3,"file":"d1.d.ts","sourceRoot":"","sources":["../../src/engine/d1.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,EAAE,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAA;IAC/C,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACvE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;CACxD;AAED,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAA;IAC3C,KAAK,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC7D;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAA;CACpD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAA;IAC3C,KAAK,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC7D,WAAW,CAAC,IAAI,MAAM,GAAG,IAAI,CAAA;CAC7B"}
@@ -7,7 +7,7 @@ export { type ApiKeyListEntry, type CreateApiKeyInput, type CreateApiKeyResult,
7
7
  export { type ContentMetadata, ContentMetadataError, type ContentMetadataPrimitive, type ContentMetadataValue, MAX_CONTENT_METADATA_BYTES, parseContentMetadata, serializeContentMetadata, } from './content-metadata.js';
8
8
  export { type ContributorInput, type ContributorRecord, listContributors, setContributors, } from './contributors.js';
9
9
  export { runScheduledPublish, type ScheduledPublishResult } from './cron.js';
10
- export type { D1Database, D1PreparedStatement, D1Result } from './d1.js';
10
+ export type { D1Database, D1DatabaseSession, D1PreparedStatement, D1Result } from './d1.js';
11
11
  export { applyFoundryCallback, type CallbackInput, type DispatchResult, dispatchToFoundry, type ProcessingState, verifyHmac, } from './foundry-dispatch.js';
12
12
  export { htmlToMarkdown, type ParsedImportItem, parseGhost, parseMarkdown, parseSubstackCsv, } from './import-parsers.js';
13
13
  export { type AcceptInviteInput, acceptInvite, type CreateInviteInput, type CreateInviteResult, createInvite, hashInviteToken, type InviteRecord, loadInviteByToken, } from './invites.js';
@@ -18,6 +18,7 @@ export { ContentArchiveImportLimitError, type ContentArchiveInput, type ContentA
18
18
  export { evaluateArticleBody, type PublishGuardOptions, type PublishGuardOutcome, publishGuardResponseOrNull, } from './publish-guard.js';
19
19
  export { getPublishedContentById, getPublishedContentBySlug, type ListPublishedContentOptions, listPublishedContent, MAX_PUBLISHED_CONTENT_PAGE_BYTES, MAX_PUBLISHED_CONTENT_PAGE_SIZE, MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES, type PublishedContent, type PublishedContentCursor, type PublishedContentPage, PublishedContentReadError, type PublishedContentReadErrorCode, } from './published-content.js';
20
20
  export { type ArticleInput, assertContentBodyValidForPublish, type BaseContentInput, type ContentItemRecord, type CreateContentInput, claimScheduledForPublish, countWords, createContent, createRevision, duplicateContentItem, ensureUniqueSlug, estimateReadTime, evaluateContentBodyForPublish, getContentItem, getContentRelations, getContentSnapshot, getContentTagPairs, MAX_ITEM_TAG_COUNT, MAX_ITEM_TAGS_TOTAL_BYTES, MAX_TAG_LABEL_BYTES, type NewsletterInput, type PodcastInput, PublishContentValidationError, publishContent, scheduleContent, setContentRelations, setContentTags, TagInputError, type UpdateContentInput, unpublishContent, updateContentItem, VerifiedMediaDurationConflictError, type VideoInput, } from './publisher.js';
21
+ export { openReadSession } from './read-session.js';
21
22
  export { type ClearManualReadStateOptions, type ContentStateKey, clearManualReadState, clearReaderHistory, DEFAULT_READER_STATE_BATCH_SIZE, deleteReaderState, exportReaderStatePage, getReaderState, getReaderStateBatch, listReaderState, MAX_READER_STATE_BATCH_SIZE, READER_AUTOMATIC_COMPLETION_BPS, type ReaderBehavioralConsent, type ReaderPreferences, type ReaderPreferenceValue, ReaderStateConflictError, ReaderStateDurableStateError, type ReaderStateExportPage, ReaderStateInputError, type ReaderStateListOptions, type ReaderStateMutationResult, type ReaderStatePage, type ReaderStateRecord, type ReaderStateScope, type RecordReaderOpenOptions, type RecordReaderProgressOptions, recordReaderOpen, recordReaderProgress, recordReaderUnlock, type SetManualReadStateOptions, type SetReaderPreferencesOptions, type SetSavedStateOptions, setManualReadState, setReaderPreferences, setSavedState, } from './reader-state.js';
22
23
  export { type ContentRevisionPayload, createRevisionWithDelta, getRevision, listRevisions, type RevisionSummary, restoreRevision, } from './revisions.js';
23
24
  export { decodeHeadingEntities, type SanitizeOptions, sanitize, sanitizeBody, stripOverEscapes, } from './sanitize.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ export { evaluateArticleBody, publishGuardResponseOrNull, } from './publish-guar
39
39
  export { getPublishedContentById, getPublishedContentBySlug, listPublishedContent, MAX_PUBLISHED_CONTENT_PAGE_BYTES, MAX_PUBLISHED_CONTENT_PAGE_SIZE, MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES, PublishedContentReadError, } from './published-content.js';
40
40
  // The publishing engine — content data-access core.
41
41
  export { assertContentBodyValidForPublish, claimScheduledForPublish, countWords, createContent, createRevision, duplicateContentItem, ensureUniqueSlug, estimateReadTime, evaluateContentBodyForPublish, getContentItem, getContentRelations, getContentSnapshot, getContentTagPairs, MAX_ITEM_TAG_COUNT, MAX_ITEM_TAGS_TOTAL_BYTES, MAX_TAG_LABEL_BYTES, PublishContentValidationError, publishContent, scheduleContent, setContentRelations, setContentTags, TagInputError, unpublishContent, updateContentItem, VerifiedMediaDurationConflictError, } from './publisher.js';
42
+ export { openReadSession } from './read-session.js';
42
43
  // Verified-user/site reader product state. Analytics remains observation-only.
43
44
  export { clearManualReadState, clearReaderHistory, DEFAULT_READER_STATE_BATCH_SIZE, deleteReaderState, exportReaderStatePage, getReaderState, getReaderStateBatch, listReaderState, MAX_READER_STATE_BATCH_SIZE, READER_AUTOMATIC_COMPLETION_BPS, ReaderStateConflictError, ReaderStateDurableStateError, ReaderStateInputError, recordReaderOpen, recordReaderProgress, recordReaderUnlock, setManualReadState, setReaderPreferences, setSavedState, } from './reader-state.js';
44
45
  // Revision engine — snapshot + word-delta history + restore.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,16 @@ export interface ListPublishedContentOptions {
29
29
  channel?: string;
30
30
  limit?: number;
31
31
  cursor?: PublishedContentCursor | null;
32
+ /**
33
+ * `false` strips `content.body_markdown` / `content.body_html` from each
34
+ * payload IN SQL, so corpus snapshots (lists, navs, hubs) stop hauling the
35
+ * full article bodies — measured 17.2 MB → 0.4 MB for a 203-article corpus.
36
+ * Precomputed `content.word_count` / `content.read_time_minutes` survive,
37
+ * so summaries keep read-time without the body. Routes that render a body
38
+ * fetch it per item (`getPublishedContentBySlug`). Defaults to `true`
39
+ * (full payloads, byte-identical to prior behavior).
40
+ */
41
+ bodies?: boolean;
32
42
  }
33
43
  export interface PublishedContentPage {
34
44
  items: PublishedContent[];
@@ -1 +1 @@
1
- {"version":3,"file":"published-content.d.ts","sourceRoot":"","sources":["../../src/engine/published-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EACN,KAAK,eAAe,EAGpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAS5D,eAAO,MAAM,+BAA+B,MAAM,CAAA;AAClD,eAAO,MAAM,mCAAmC,QAAkB,CAAA;AAClE,eAAO,MAAM,gCAAgC,QAAkB,CAAA;AAU/D,MAAM,MAAM,6BAA6B,GACtC,iCAAiC,GACjC,4BAA4B,GAC5B,6BAA6B,GAC7B,2BAA2B,GAC3B,kCAAkC,GAClC,0BAA0B,GAC1B,uBAAuB,CAAA;AAE1B,qBAAa,yBAA0B,SAAQ,KAAK;IAElD,QAAQ,CAAC,IAAI,EAAE,6BAA6B;gBAAnC,IAAI,EAAE,6BAA6B,EAC5C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY;CAKvB;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,sBAAsB,CAAA;IAC/B,QAAQ,EAAE,eAAe,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC3C,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACtC;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACzC;AAwQD,wBAAsB,uBAAuB,CAC5C,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAqBlC;AAED,wBAAsB,yBAAyB,CAC9C,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA4BlC;AAkFD,wBAAsB,oBAAoB,CACzC,EAAE,EAAE,UAAU,EACd,OAAO,GAAE,2BAAgC,GACvC,OAAO,CAAC,oBAAoB,CAAC,CA0H/B"}
1
+ {"version":3,"file":"published-content.d.ts","sourceRoot":"","sources":["../../src/engine/published-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EACN,KAAK,eAAe,EAGpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAS5D,eAAO,MAAM,+BAA+B,MAAM,CAAA;AAClD,eAAO,MAAM,mCAAmC,QAAkB,CAAA;AAClE,eAAO,MAAM,gCAAgC,QAAkB,CAAA;AAU/D,MAAM,MAAM,6BAA6B,GACtC,iCAAiC,GACjC,4BAA4B,GAC5B,6BAA6B,GAC7B,2BAA2B,GAC3B,kCAAkC,GAClC,0BAA0B,GAC1B,uBAAuB,CAAA;AAE1B,qBAAa,yBAA0B,SAAQ,KAAK;IAElD,QAAQ,CAAC,IAAI,EAAE,6BAA6B;gBAAnC,IAAI,EAAE,6BAA6B,EAC5C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY;CAKvB;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,sBAAsB,CAAA;IAC/B,QAAQ,EAAE,eAAe,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC3C,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAA;IACtC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACzC;AA8SD,wBAAsB,uBAAuB,CAC5C,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAsBlC;AAED,wBAAsB,yBAAyB,CAC9C,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA6BlC;AA8FD,wBAAsB,oBAAoB,CACzC,EAAE,EAAE,UAAU,EACd,OAAO,GAAE,2BAAgC,GACvC,OAAO,CAAC,oBAAoB,CAAC,CAoI/B"}
@@ -1,9 +1,10 @@
1
1
  import { ContentMetadataError, parseContentMetadata, } from './content-metadata.js';
2
+ import { openReadSession } from './read-session.js';
2
3
  import { TagInputError, validateRevisionTaxonomy } from './taxonomy.js';
3
4
  const CONTENT_TYPES = new Set(['article', 'video', 'podcast', 'newsletter', 'page']);
4
5
  const CONTENT_STATUSES = new Set(['draft', 'scheduled', 'review', 'published', 'archived']);
5
6
  const CONTENT_VISIBILITIES = new Set(['free', 'premium']);
6
- const LIST_OPTION_KEYS = new Set(['type', 'channel', 'limit', 'cursor']);
7
+ const LIST_OPTION_KEYS = new Set(['type', 'channel', 'limit', 'cursor', 'bodies']);
7
8
  const CURSOR_KEYS = new Set(['publishedAt', 'contentId']);
8
9
  export const MAX_PUBLISHED_CONTENT_PAGE_SIZE = 100;
9
10
  export const MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES = 4 * 1024 * 1024;
@@ -38,6 +39,26 @@ SELECT
38
39
  length(CAST(cr.payload_json AS BLOB)) AS payload_bytes
39
40
  FROM content_items ci
40
41
  `;
42
+ // bodies:false variant — the SAME row shape with the body fields removed in
43
+ // SQL. Every byte accounting downstream (page budget, per-item cap, the
44
+ // changed-during-read integrity check) uses the STRIPPED length consistently,
45
+ // so the contracts hold with no special cases.
46
+ const BODYLESS_PAYLOAD_EXPR = `json_remove(cr.payload_json, '$.content.body_markdown', '$.content.body_html')`;
47
+ const SELECT_PUBLISHED_CONTENT_BODYLESS = `
48
+ SELECT
49
+ ci.id AS content_id,
50
+ ci.published_revision_id AS pointer_revision_id,
51
+ ci.published_at AS canonical_published_at,
52
+ cr.id AS revision_id,
53
+ cr.content_id AS revision_content_id,
54
+ CASE
55
+ WHEN length(CAST(${BODYLESS_PAYLOAD_EXPR} AS BLOB)) <= ${MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES}
56
+ THEN ${BODYLESS_PAYLOAD_EXPR}
57
+ ELSE NULL
58
+ END AS payload_json,
59
+ length(CAST(${BODYLESS_PAYLOAD_EXPR} AS BLOB)) AS payload_bytes
60
+ FROM content_items ci
61
+ `;
41
62
  const SELECT_PUBLISHED_CONTENT_OUTLINE = `
42
63
  SELECT
43
64
  ci.id AS content_id,
@@ -46,6 +67,14 @@ SELECT
46
67
  length(CAST(cr.payload_json AS BLOB)) AS payload_bytes
47
68
  FROM content_items ci
48
69
  `;
70
+ const SELECT_PUBLISHED_CONTENT_OUTLINE_BODYLESS = `
71
+ SELECT
72
+ ci.id AS content_id,
73
+ ci.published_revision_id AS pointer_revision_id,
74
+ ci.published_at AS canonical_published_at,
75
+ length(CAST(${BODYLESS_PAYLOAD_EXPR} AS BLOB)) AS payload_bytes
76
+ FROM content_items ci
77
+ `;
49
78
  const SELECT_PUBLISHED_CONTENT_BY_SLUG = `
50
79
  SELECT
51
80
  ci.id AS content_id,
@@ -76,7 +105,7 @@ function byteLength(value) {
76
105
  function invalidPayload(message) {
77
106
  throw new PublishedContentReadError('published_payload_invalid', message);
78
107
  }
79
- function validatePayload(raw, row) {
108
+ function validatePayload(raw, row, requireBodies = true) {
80
109
  if (byteLength(raw) > MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES) {
81
110
  throw new PublishedContentReadError('published_payload_limit_exceeded', `published revision payload exceeds ${MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES} bytes`);
82
111
  }
@@ -151,7 +180,11 @@ function validatePayload(raw, row) {
151
180
  if (!content)
152
181
  return invalidPayload('published revision content is missing');
153
182
  if (['article', 'newsletter', 'page'].includes(item.type) &&
154
- typeof content.body_markdown !== 'string') {
183
+ typeof content.body_markdown !== 'string' &&
184
+ // A bodies:false read strips the body fields in SQL; absent is the
185
+ // expected shape there, but a present-yet-non-string body is still
186
+ // corrupt in every mode.
187
+ (requireBodies || content.body_markdown !== undefined)) {
155
188
  return invalidPayload('published revision body Markdown is invalid');
156
189
  }
157
190
  if (item.type === 'video' && typeof content.video_id !== 'string') {
@@ -162,7 +195,7 @@ function validatePayload(raw, row) {
162
195
  }
163
196
  return decoded;
164
197
  }
165
- function decodePublishedContent(row) {
198
+ function decodePublishedContent(row, requireBodies = true) {
166
199
  if (!row.revision_id || !row.revision_content_id || row.payload_bytes === null) {
167
200
  throw new PublishedContentReadError('published_revision_missing', 'canonical publication pointer does not resolve to a revision');
168
201
  }
@@ -181,7 +214,7 @@ function decodePublishedContent(row) {
181
214
  if (!Number.isSafeInteger(row.canonical_published_at) || row.canonical_published_at < 0) {
182
215
  throw new PublishedContentReadError('published_payload_invalid', 'canonical published_at is invalid');
183
216
  }
184
- const payload = validatePayload(row.payload_json, row);
217
+ const payload = validatePayload(row.payload_json, row, requireBodies);
185
218
  const item = payload.item;
186
219
  let metadata;
187
220
  try {
@@ -217,7 +250,8 @@ function wrapReadError(error) {
217
250
  export async function getPublishedContentById(db, contentId) {
218
251
  assertLookupValue(contentId, 'contentId', 256);
219
252
  try {
220
- const row = await db
253
+ const reader = openReadSession(db);
254
+ const row = await reader
221
255
  .prepare(`${SELECT_PUBLISHED_CONTENT}
222
256
  LEFT JOIN content_revisions cr
223
257
  ON cr.id = ci.published_revision_id
@@ -238,7 +272,8 @@ LIMIT 1`)
238
272
  export async function getPublishedContentBySlug(db, slug) {
239
273
  assertLookupValue(slug, 'slug', 512);
240
274
  try {
241
- const result = await db
275
+ const reader = openReadSession(db);
276
+ const result = await reader
242
277
  .prepare(`${SELECT_PUBLISHED_CONTENT_BY_SLUG}
243
278
  WHERE ci.status = 'published'
244
279
  AND ci.deleted_at IS NULL
@@ -304,8 +339,16 @@ function normalizeListOptions(options) {
304
339
  contentId: options.cursor.contentId,
305
340
  };
306
341
  }
342
+ let bodies = true;
343
+ if (options.bodies !== undefined) {
344
+ if (typeof options.bodies !== 'boolean') {
345
+ throw new PublishedContentReadError('published_content_input_invalid', 'bodies must be a boolean');
346
+ }
347
+ bodies = options.bodies;
348
+ }
307
349
  return {
308
350
  limit,
351
+ bodies,
309
352
  type,
310
353
  channel,
311
354
  cursor,
@@ -333,8 +376,9 @@ export async function listPublishedContent(db, options = {}) {
333
376
  values.push(normalized.cursor.publishedAt, normalized.cursor.publishedAt, normalized.cursor.contentId);
334
377
  }
335
378
  try {
336
- const outlineResult = await db
337
- .prepare(`${SELECT_PUBLISHED_CONTENT_OUTLINE}
379
+ const reader = openReadSession(db);
380
+ const outlineResult = await reader
381
+ .prepare(`${normalized.bodies ? SELECT_PUBLISHED_CONTENT_OUTLINE : SELECT_PUBLISHED_CONTENT_OUTLINE_BODYLESS}
338
382
  JOIN content_revisions cr ON cr.id = ci.published_revision_id
339
383
  WHERE ${predicates.join('\n AND ')}
340
384
  ORDER BY ci.published_at DESC, ci.id DESC
@@ -367,25 +411,32 @@ LIMIT ?`)
367
411
  return { items: [], nextCursor: null };
368
412
  // Hydrate the selected outlines in bound-variable-safe chunks. Each chunk
369
413
  // binds two variables per outline; capping at MAX_HYDRATE_CHUNK_OUTLINES
370
- // keeps every statement at or under D1's 100-variable limit. Rows merge
371
- // into one pointer-keyed map, so ordering and the per-item integrity
372
- // checks below are identical to a single-statement hydrate.
373
- const rowsByPointer = new Map();
414
+ // keeps every statement at or under D1's 100-variable limit. Chunks are
415
+ // independent point lookups pinned to exact (id, revision) pairs, so they
416
+ // run concurrently one round-trip wave instead of a sequential chain.
417
+ // Rows merge into one pointer-keyed map, so ordering and the per-item
418
+ // integrity checks below are identical to a single-statement hydrate.
419
+ const chunks = [];
374
420
  for (let offset = 0; offset < selected.length; offset += MAX_HYDRATE_CHUNK_OUTLINES) {
375
- const chunk = selected.slice(offset, offset + MAX_HYDRATE_CHUNK_OUTLINES);
421
+ chunks.push(selected.slice(offset, offset + MAX_HYDRATE_CHUNK_OUTLINES));
422
+ }
423
+ const chunkResults = await Promise.all(chunks.map((chunk) => {
376
424
  const chunkPredicates = chunk.map(() => '(ci.id = ? AND ci.published_revision_id = ?)');
377
425
  const chunkValues = chunk.flatMap((outline) => [
378
426
  outline.content_id,
379
427
  outline.pointer_revision_id,
380
428
  ]);
381
- const chunkResult = await db
382
- .prepare(`${SELECT_PUBLISHED_CONTENT}
429
+ return reader
430
+ .prepare(`${normalized.bodies ? SELECT_PUBLISHED_CONTENT : SELECT_PUBLISHED_CONTENT_BODYLESS}
383
431
  JOIN content_revisions cr ON cr.id = ci.published_revision_id
384
432
  WHERE ci.status = 'published'
385
433
  AND ci.deleted_at IS NULL
386
434
  AND (${chunkPredicates.join(' OR ')})`)
387
435
  .bind(...chunkValues)
388
436
  .all();
437
+ }));
438
+ const rowsByPointer = new Map();
439
+ for (const chunkResult of chunkResults) {
389
440
  for (const row of chunkResult.results ?? []) {
390
441
  rowsByPointer.set(`${row.content_id}\0${row.pointer_revision_id}`, row);
391
442
  }
@@ -398,7 +449,7 @@ WHERE ci.status = 'published'
398
449
  byteLength(row.payload_json) !== outline.payload_bytes) {
399
450
  throw new PublishedContentReadError('published_read_failed', 'published revision changed during its bounded read');
400
451
  }
401
- return decodePublishedContent(row);
452
+ return decodePublishedContent(row, normalized.bodies);
402
453
  });
403
454
  const hasMore = outlines.length > selected.length;
404
455
  const last = items.at(-1);
@@ -1 +1 @@
1
- {"version":3,"file":"published-content.js","sourceRoot":"","sources":["../../src/engine/published-content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"published-content.js","sourceRoot":"","sources":["../../src/engine/published-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { D1Database } from './d1.js';
2
+ /**
3
+ * Route reads through a D1 read-replica session when the runtime supports it.
4
+ *
5
+ * `first-unconstrained` sends the first query to the nearest replica and
6
+ * threads the session bookmark through every subsequent query, so reads are
7
+ * sequentially consistent within the session while avoiding the cross-region
8
+ * primary round-trip that dominates SSR wall time (450ms × N sequential
9
+ * statements). Requires read replication to be enabled on the database
10
+ * (`read_replication.mode: auto`); without it — or on runtimes whose binding
11
+ * has no `withSession` — this returns the binding unchanged, which is exactly
12
+ * the pre-session behavior. That fallback is silent by design: the synthetic
13
+ * render canaries that page on slow pages are the loud surface for a
14
+ * replication regression.
15
+ *
16
+ * Reads only: callers that write must keep using the raw binding. (D1 forwards
17
+ * session writes to the primary, so a stray write through a session is routed
18
+ * correctly — but the engine's read model never writes.) A write through the
19
+ * raw binding is NOT immediately visible to this session's replica reads;
20
+ * public serving tolerates that eventual consistency, and admin
21
+ * read-after-write flows use the engine's primary-bound reads instead.
22
+ */
23
+ export declare function openReadSession(db: D1Database): D1Database;
24
+ //# sourceMappingURL=read-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-session.d.ts","sourceRoot":"","sources":["../../src/engine/read-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAczC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,UAAU,CAO1D"}
@@ -0,0 +1,43 @@
1
+ // One read session per D1 binding IDENTITY. workerd binding objects are
2
+ // isolate-stable, so on a warm isolate this session is shared by every request
3
+ // for the isolate's lifetime — deliberately: D1 session bookmarks only
4
+ // advance, so every read through the session is monotonic (it observes a
5
+ // database state at least as new as any state previously observed through the
6
+ // session). That is a strictly stronger guarantee than per-request sessions
7
+ // would give, and it is what keeps cursor pagination coherent across the
8
+ // multiple statements of a corpus load. On runtimes that hand out fresh
9
+ // binding objects per request the cache simply misses and each request gets
10
+ // its own session, which is also correct.
11
+ const sessionsByBinding = new WeakMap();
12
+ /**
13
+ * Route reads through a D1 read-replica session when the runtime supports it.
14
+ *
15
+ * `first-unconstrained` sends the first query to the nearest replica and
16
+ * threads the session bookmark through every subsequent query, so reads are
17
+ * sequentially consistent within the session while avoiding the cross-region
18
+ * primary round-trip that dominates SSR wall time (450ms × N sequential
19
+ * statements). Requires read replication to be enabled on the database
20
+ * (`read_replication.mode: auto`); without it — or on runtimes whose binding
21
+ * has no `withSession` — this returns the binding unchanged, which is exactly
22
+ * the pre-session behavior. That fallback is silent by design: the synthetic
23
+ * render canaries that page on slow pages are the loud surface for a
24
+ * replication regression.
25
+ *
26
+ * Reads only: callers that write must keep using the raw binding. (D1 forwards
27
+ * session writes to the primary, so a stray write through a session is routed
28
+ * correctly — but the engine's read model never writes.) A write through the
29
+ * raw binding is NOT immediately visible to this session's replica reads;
30
+ * public serving tolerates that eventual consistency, and admin
31
+ * read-after-write flows use the engine's primary-bound reads instead.
32
+ */
33
+ export function openReadSession(db) {
34
+ if (typeof db.withSession !== 'function')
35
+ return db;
36
+ const cached = sessionsByBinding.get(db);
37
+ if (cached)
38
+ return cached;
39
+ const session = db.withSession('first-unconstrained');
40
+ sessionsByBinding.set(db, session);
41
+ return session;
42
+ }
43
+ //# sourceMappingURL=read-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-session.js","sourceRoot":"","sources":["../../src/engine/read-session.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,+EAA+E;AAC/E,uEAAuE;AACvE,yEAAyE;AACzE,8EAA8E;AAC9E,4EAA4E;AAC5E,yEAAyE;AACzE,wEAAwE;AACxE,4EAA4E;AAC5E,0CAA0C;AAC1C,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAsB,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAAC,EAAc;IAC7C,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU;QAAE,OAAO,EAAE,CAAA;IACnD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACxC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAA;IACrD,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAClC,OAAO,OAAO,CAAA;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growth-labs/cms",
3
- "version": "0.5.15",
3
+ "version": "0.5.17",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "growth-labs-cms-migrations": "./dist/cli/migrations.js"
package/src/engine/d1.ts CHANGED
@@ -26,4 +26,26 @@ export interface D1PreparedStatement {
26
26
  export interface D1Database {
27
27
  prepare(query: string): D1PreparedStatement
28
28
  batch(statements: D1PreparedStatement[]): Promise<D1Result[]>
29
+ /**
30
+ * The D1 Sessions API entry point (present on real workerd bindings; absent
31
+ * on some local shims). A session routes reads to the nearest read replica
32
+ * with sequential consistency inside the session; writes still reach the
33
+ * primary. Optional so structural fakes without it remain assignable —
34
+ * callers must feature-check (see `openReadSession`).
35
+ */
36
+ withSession?(constraint?: string): D1DatabaseSession
37
+ }
38
+
39
+ /**
40
+ * The session handle returned by `withSession`. Structurally the same
41
+ * prepare/batch surface the engine reads through — it deliberately omits
42
+ * `withSession` itself (sessions do not nest). `getBookmark` returns the
43
+ * session's latest observed commit token (null until the first query
44
+ * completes) — D1's mechanism for carrying consistency across sessions,
45
+ * requests, or a write on the raw binding followed by a session read.
46
+ */
47
+ export interface D1DatabaseSession {
48
+ prepare(query: string): D1PreparedStatement
49
+ batch(statements: D1PreparedStatement[]): Promise<D1Result[]>
50
+ getBookmark?(): string | null
29
51
  }
@@ -73,7 +73,7 @@ export {
73
73
  // Scheduled-publish sweep.
74
74
  export { runScheduledPublish, type ScheduledPublishResult } from './cron.js'
75
75
  // The injected D1 surface the engine operates over.
76
- export type { D1Database, D1PreparedStatement, D1Result } from './d1.js'
76
+ export type { D1Database, D1DatabaseSession, D1PreparedStatement, D1Result } from './d1.js'
77
77
  // Foundry dispatch + HMAC callback engine (P3 Task 5 / bead-08).
78
78
  export {
79
79
  applyFoundryCallback,
@@ -226,6 +226,7 @@ export {
226
226
  VerifiedMediaDurationConflictError,
227
227
  type VideoInput,
228
228
  } from './publisher.js'
229
+ export { openReadSession } from './read-session.js'
229
230
  // Verified-user/site reader product state. Analytics remains observation-only.
230
231
  export {
231
232
  type ClearManualReadStateOptions,
@@ -5,13 +5,14 @@ import {
5
5
  parseContentMetadata,
6
6
  } from './content-metadata.js'
7
7
  import type { D1Database } from './d1.js'
8
+ import { openReadSession } from './read-session.js'
8
9
  import type { ContentRevisionPayload } from './revisions.js'
9
10
  import { TagInputError, validateRevisionTaxonomy } from './taxonomy.js'
10
11
 
11
12
  const CONTENT_TYPES = new Set<ContentType>(['article', 'video', 'podcast', 'newsletter', 'page'])
12
13
  const CONTENT_STATUSES = new Set(['draft', 'scheduled', 'review', 'published', 'archived'])
13
14
  const CONTENT_VISIBILITIES = new Set(['free', 'premium'])
14
- const LIST_OPTION_KEYS = new Set(['type', 'channel', 'limit', 'cursor'])
15
+ const LIST_OPTION_KEYS = new Set(['type', 'channel', 'limit', 'cursor', 'bodies'])
15
16
  const CURSOR_KEYS = new Set(['publishedAt', 'contentId'])
16
17
 
17
18
  export const MAX_PUBLISHED_CONTENT_PAGE_SIZE = 100
@@ -67,6 +68,16 @@ export interface ListPublishedContentOptions {
67
68
  channel?: string
68
69
  limit?: number
69
70
  cursor?: PublishedContentCursor | null
71
+ /**
72
+ * `false` strips `content.body_markdown` / `content.body_html` from each
73
+ * payload IN SQL, so corpus snapshots (lists, navs, hubs) stop hauling the
74
+ * full article bodies — measured 17.2 MB → 0.4 MB for a 203-article corpus.
75
+ * Precomputed `content.word_count` / `content.read_time_minutes` survive,
76
+ * so summaries keep read-time without the body. Routes that render a body
77
+ * fetch it per item (`getPublishedContentBySlug`). Defaults to `true`
78
+ * (full payloads, byte-identical to prior behavior).
79
+ */
80
+ bodies?: boolean
70
81
  }
71
82
 
72
83
  export interface PublishedContentPage {
@@ -107,6 +118,27 @@ SELECT
107
118
  FROM content_items ci
108
119
  `
109
120
 
121
+ // bodies:false variant — the SAME row shape with the body fields removed in
122
+ // SQL. Every byte accounting downstream (page budget, per-item cap, the
123
+ // changed-during-read integrity check) uses the STRIPPED length consistently,
124
+ // so the contracts hold with no special cases.
125
+ const BODYLESS_PAYLOAD_EXPR = `json_remove(cr.payload_json, '$.content.body_markdown', '$.content.body_html')`
126
+ const SELECT_PUBLISHED_CONTENT_BODYLESS = `
127
+ SELECT
128
+ ci.id AS content_id,
129
+ ci.published_revision_id AS pointer_revision_id,
130
+ ci.published_at AS canonical_published_at,
131
+ cr.id AS revision_id,
132
+ cr.content_id AS revision_content_id,
133
+ CASE
134
+ WHEN length(CAST(${BODYLESS_PAYLOAD_EXPR} AS BLOB)) <= ${MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES}
135
+ THEN ${BODYLESS_PAYLOAD_EXPR}
136
+ ELSE NULL
137
+ END AS payload_json,
138
+ length(CAST(${BODYLESS_PAYLOAD_EXPR} AS BLOB)) AS payload_bytes
139
+ FROM content_items ci
140
+ `
141
+
110
142
  const SELECT_PUBLISHED_CONTENT_OUTLINE = `
111
143
  SELECT
112
144
  ci.id AS content_id,
@@ -116,6 +148,15 @@ SELECT
116
148
  FROM content_items ci
117
149
  `
118
150
 
151
+ const SELECT_PUBLISHED_CONTENT_OUTLINE_BODYLESS = `
152
+ SELECT
153
+ ci.id AS content_id,
154
+ ci.published_revision_id AS pointer_revision_id,
155
+ ci.published_at AS canonical_published_at,
156
+ length(CAST(${BODYLESS_PAYLOAD_EXPR} AS BLOB)) AS payload_bytes
157
+ FROM content_items ci
158
+ `
159
+
119
160
  const SELECT_PUBLISHED_CONTENT_BY_SLUG = `
120
161
  SELECT
121
162
  ci.id AS content_id,
@@ -149,7 +190,11 @@ function invalidPayload(message: string): never {
149
190
  throw new PublishedContentReadError('published_payload_invalid', message)
150
191
  }
151
192
 
152
- function validatePayload(raw: string, row: PublishedContentRow): ContentRevisionPayload {
193
+ function validatePayload(
194
+ raw: string,
195
+ row: PublishedContentRow,
196
+ requireBodies = true,
197
+ ): ContentRevisionPayload {
153
198
  if (byteLength(raw) > MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES) {
154
199
  throw new PublishedContentReadError(
155
200
  'published_payload_limit_exceeded',
@@ -233,7 +278,11 @@ function validatePayload(raw: string, row: PublishedContentRow): ContentRevision
233
278
  if (!content) return invalidPayload('published revision content is missing')
234
279
  if (
235
280
  ['article', 'newsletter', 'page'].includes(item.type as string) &&
236
- typeof content.body_markdown !== 'string'
281
+ typeof content.body_markdown !== 'string' &&
282
+ // A bodies:false read strips the body fields in SQL; absent is the
283
+ // expected shape there, but a present-yet-non-string body is still
284
+ // corrupt in every mode.
285
+ (requireBodies || content.body_markdown !== undefined)
237
286
  ) {
238
287
  return invalidPayload('published revision body Markdown is invalid')
239
288
  }
@@ -247,7 +296,7 @@ function validatePayload(raw: string, row: PublishedContentRow): ContentRevision
247
296
  return decoded as unknown as ContentRevisionPayload
248
297
  }
249
298
 
250
- function decodePublishedContent(row: PublishedContentRow): PublishedContent {
299
+ function decodePublishedContent(row: PublishedContentRow, requireBodies = true): PublishedContent {
251
300
  if (!row.revision_id || !row.revision_content_id || row.payload_bytes === null) {
252
301
  throw new PublishedContentReadError(
253
302
  'published_revision_missing',
@@ -285,7 +334,7 @@ function decodePublishedContent(row: PublishedContentRow): PublishedContent {
285
334
  )
286
335
  }
287
336
 
288
- const payload = validatePayload(row.payload_json, row)
337
+ const payload = validatePayload(row.payload_json, row, requireBodies)
289
338
  const item = payload.item
290
339
  let metadata: ContentMetadata
291
340
  try {
@@ -342,7 +391,8 @@ export async function getPublishedContentById(
342
391
  ): Promise<PublishedContent | null> {
343
392
  assertLookupValue(contentId, 'contentId', 256)
344
393
  try {
345
- const row = await db
394
+ const reader = openReadSession(db)
395
+ const row = await reader
346
396
  .prepare(
347
397
  `${SELECT_PUBLISHED_CONTENT}
348
398
  LEFT JOIN content_revisions cr
@@ -368,7 +418,8 @@ export async function getPublishedContentBySlug(
368
418
  ): Promise<PublishedContent | null> {
369
419
  assertLookupValue(slug, 'slug', 512)
370
420
  try {
371
- const result = await db
421
+ const reader = openReadSession(db)
422
+ const result = await reader
372
423
  .prepare(
373
424
  `${SELECT_PUBLISHED_CONTENT_BY_SLUG}
374
425
  WHERE ci.status = 'published'
@@ -397,6 +448,7 @@ LIMIT 2`,
397
448
 
398
449
  function normalizeListOptions(options: unknown): {
399
450
  limit: number
451
+ bodies: boolean
400
452
  type?: ContentType
401
453
  channel?: string
402
454
  cursor?: PublishedContentCursor
@@ -467,8 +519,19 @@ function normalizeListOptions(options: unknown): {
467
519
  contentId: options.cursor.contentId,
468
520
  }
469
521
  }
522
+ let bodies = true
523
+ if (options.bodies !== undefined) {
524
+ if (typeof options.bodies !== 'boolean') {
525
+ throw new PublishedContentReadError(
526
+ 'published_content_input_invalid',
527
+ 'bodies must be a boolean',
528
+ )
529
+ }
530
+ bodies = options.bodies
531
+ }
470
532
  return {
471
533
  limit,
534
+ bodies,
472
535
  type,
473
536
  channel,
474
537
  cursor,
@@ -504,9 +567,10 @@ export async function listPublishedContent(
504
567
  )
505
568
  }
506
569
  try {
507
- const outlineResult = await db
570
+ const reader = openReadSession(db)
571
+ const outlineResult = await reader
508
572
  .prepare(
509
- `${SELECT_PUBLISHED_CONTENT_OUTLINE}
573
+ `${normalized.bodies ? SELECT_PUBLISHED_CONTENT_OUTLINE : SELECT_PUBLISHED_CONTENT_OUTLINE_BODYLESS}
510
574
  JOIN content_revisions cr ON cr.id = ci.published_revision_id
511
575
  WHERE ${predicates.join('\n AND ')}
512
576
  ORDER BY ci.published_at DESC, ci.id DESC
@@ -550,27 +614,36 @@ LIMIT ?`,
550
614
 
551
615
  // Hydrate the selected outlines in bound-variable-safe chunks. Each chunk
552
616
  // binds two variables per outline; capping at MAX_HYDRATE_CHUNK_OUTLINES
553
- // keeps every statement at or under D1's 100-variable limit. Rows merge
554
- // into one pointer-keyed map, so ordering and the per-item integrity
555
- // checks below are identical to a single-statement hydrate.
556
- const rowsByPointer = new Map<string, PublishedContentRow>()
617
+ // keeps every statement at or under D1's 100-variable limit. Chunks are
618
+ // independent point lookups pinned to exact (id, revision) pairs, so they
619
+ // run concurrently one round-trip wave instead of a sequential chain.
620
+ // Rows merge into one pointer-keyed map, so ordering and the per-item
621
+ // integrity checks below are identical to a single-statement hydrate.
622
+ const chunks: PublishedContentOutlineRow[][] = []
557
623
  for (let offset = 0; offset < selected.length; offset += MAX_HYDRATE_CHUNK_OUTLINES) {
558
- const chunk = selected.slice(offset, offset + MAX_HYDRATE_CHUNK_OUTLINES)
559
- const chunkPredicates = chunk.map(() => '(ci.id = ? AND ci.published_revision_id = ?)')
560
- const chunkValues = chunk.flatMap((outline) => [
561
- outline.content_id,
562
- outline.pointer_revision_id,
563
- ])
564
- const chunkResult = await db
565
- .prepare(
566
- `${SELECT_PUBLISHED_CONTENT}
624
+ chunks.push(selected.slice(offset, offset + MAX_HYDRATE_CHUNK_OUTLINES))
625
+ }
626
+ const chunkResults = await Promise.all(
627
+ chunks.map((chunk) => {
628
+ const chunkPredicates = chunk.map(() => '(ci.id = ? AND ci.published_revision_id = ?)')
629
+ const chunkValues = chunk.flatMap((outline) => [
630
+ outline.content_id,
631
+ outline.pointer_revision_id,
632
+ ])
633
+ return reader
634
+ .prepare(
635
+ `${normalized.bodies ? SELECT_PUBLISHED_CONTENT : SELECT_PUBLISHED_CONTENT_BODYLESS}
567
636
  JOIN content_revisions cr ON cr.id = ci.published_revision_id
568
637
  WHERE ci.status = 'published'
569
638
  AND ci.deleted_at IS NULL
570
639
  AND (${chunkPredicates.join(' OR ')})`,
571
- )
572
- .bind(...chunkValues)
573
- .all<PublishedContentRow>()
640
+ )
641
+ .bind(...chunkValues)
642
+ .all<PublishedContentRow>()
643
+ }),
644
+ )
645
+ const rowsByPointer = new Map<string, PublishedContentRow>()
646
+ for (const chunkResult of chunkResults) {
574
647
  for (const row of chunkResult.results ?? []) {
575
648
  rowsByPointer.set(`${row.content_id}\0${row.pointer_revision_id}`, row)
576
649
  }
@@ -588,7 +661,7 @@ WHERE ci.status = 'published'
588
661
  'published revision changed during its bounded read',
589
662
  )
590
663
  }
591
- return decodePublishedContent(row)
664
+ return decodePublishedContent(row, normalized.bodies)
592
665
  })
593
666
  const hasMore = outlines.length > selected.length
594
667
  const last = items.at(-1)
@@ -0,0 +1,43 @@
1
+ import type { D1Database } from './d1.js'
2
+
3
+ // One read session per D1 binding IDENTITY. workerd binding objects are
4
+ // isolate-stable, so on a warm isolate this session is shared by every request
5
+ // for the isolate's lifetime — deliberately: D1 session bookmarks only
6
+ // advance, so every read through the session is monotonic (it observes a
7
+ // database state at least as new as any state previously observed through the
8
+ // session). That is a strictly stronger guarantee than per-request sessions
9
+ // would give, and it is what keeps cursor pagination coherent across the
10
+ // multiple statements of a corpus load. On runtimes that hand out fresh
11
+ // binding objects per request the cache simply misses and each request gets
12
+ // its own session, which is also correct.
13
+ const sessionsByBinding = new WeakMap<object, D1Database>()
14
+
15
+ /**
16
+ * Route reads through a D1 read-replica session when the runtime supports it.
17
+ *
18
+ * `first-unconstrained` sends the first query to the nearest replica and
19
+ * threads the session bookmark through every subsequent query, so reads are
20
+ * sequentially consistent within the session while avoiding the cross-region
21
+ * primary round-trip that dominates SSR wall time (450ms × N sequential
22
+ * statements). Requires read replication to be enabled on the database
23
+ * (`read_replication.mode: auto`); without it — or on runtimes whose binding
24
+ * has no `withSession` — this returns the binding unchanged, which is exactly
25
+ * the pre-session behavior. That fallback is silent by design: the synthetic
26
+ * render canaries that page on slow pages are the loud surface for a
27
+ * replication regression.
28
+ *
29
+ * Reads only: callers that write must keep using the raw binding. (D1 forwards
30
+ * session writes to the primary, so a stray write through a session is routed
31
+ * correctly — but the engine's read model never writes.) A write through the
32
+ * raw binding is NOT immediately visible to this session's replica reads;
33
+ * public serving tolerates that eventual consistency, and admin
34
+ * read-after-write flows use the engine's primary-bound reads instead.
35
+ */
36
+ export function openReadSession(db: D1Database): D1Database {
37
+ if (typeof db.withSession !== 'function') return db
38
+ const cached = sessionsByBinding.get(db)
39
+ if (cached) return cached
40
+ const session = db.withSession('first-unconstrained')
41
+ sessionsByBinding.set(db, session)
42
+ return session
43
+ }