@growth-labs/cms 0.3.1 → 0.4.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.
Files changed (41) hide show
  1. package/README.md +58 -5
  2. package/dist/engine/content-metadata.d.ts +13 -0
  3. package/dist/engine/content-metadata.d.ts.map +1 -0
  4. package/dist/engine/content-metadata.js +80 -0
  5. package/dist/engine/content-metadata.js.map +1 -0
  6. package/dist/engine/index.d.ts +3 -1
  7. package/dist/engine/index.d.ts.map +1 -1
  8. package/dist/engine/index.js +5 -1
  9. package/dist/engine/index.js.map +1 -1
  10. package/dist/engine/publication.d.ts +29 -1
  11. package/dist/engine/publication.d.ts.map +1 -1
  12. package/dist/engine/publication.js +197 -15
  13. package/dist/engine/publication.js.map +1 -1
  14. package/dist/engine/published-content.d.ts +40 -0
  15. package/dist/engine/published-content.d.ts.map +1 -0
  16. package/dist/engine/published-content.js +388 -0
  17. package/dist/engine/published-content.js.map +1 -0
  18. package/dist/engine/publisher.d.ts +16 -1
  19. package/dist/engine/publisher.d.ts.map +1 -1
  20. package/dist/engine/publisher.js +74 -11
  21. package/dist/engine/publisher.js.map +1 -1
  22. package/dist/engine/revisions.d.ts.map +1 -1
  23. package/dist/engine/revisions.js +2 -0
  24. package/dist/engine/revisions.js.map +1 -1
  25. package/dist/schema/migrations.d.ts.map +1 -1
  26. package/dist/schema/migrations.js +24 -0
  27. package/dist/schema/migrations.js.map +1 -1
  28. package/dist/schema/types.d.ts +6 -0
  29. package/dist/schema/types.d.ts.map +1 -1
  30. package/dist/schema/types.js.map +1 -1
  31. package/migrations/0020_content_metadata_read_model.sql +19 -0
  32. package/migrations/0021_published_revision_slug_index.sql +5 -0
  33. package/package.json +1 -1
  34. package/src/engine/content-metadata.ts +122 -0
  35. package/src/engine/index.ts +26 -0
  36. package/src/engine/publication.ts +329 -18
  37. package/src/engine/published-content.ts +581 -0
  38. package/src/engine/publisher.ts +106 -10
  39. package/src/engine/revisions.ts +4 -0
  40. package/src/schema/migrations.ts +24 -0
  41. package/src/schema/types.ts +6 -0
@@ -0,0 +1,40 @@
1
+ import type { ContentType } from '../schema/types.js';
2
+ import { type ContentMetadata } from './content-metadata.js';
3
+ import type { D1Database } from './d1.js';
4
+ import type { ContentRevisionPayload } from './revisions.js';
5
+ export declare const MAX_PUBLISHED_CONTENT_PAGE_SIZE = 100;
6
+ export declare const MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES: number;
7
+ export declare const MAX_PUBLISHED_CONTENT_PAGE_BYTES: number;
8
+ export type PublishedContentReadErrorCode = 'published_content_input_invalid' | 'published_revision_missing' | 'published_revision_mismatch' | 'published_payload_invalid' | 'published_payload_limit_exceeded' | 'published_slug_ambiguous' | 'published_read_failed';
9
+ export declare class PublishedContentReadError extends Error {
10
+ readonly code: PublishedContentReadErrorCode;
11
+ constructor(code: PublishedContentReadErrorCode, message: string, options?: ErrorOptions);
12
+ }
13
+ export interface PublishedContent {
14
+ contentId: string;
15
+ revisionId: string;
16
+ slug: string;
17
+ type: ContentType;
18
+ publishedAt: number;
19
+ updatedAt: number;
20
+ payload: ContentRevisionPayload;
21
+ metadata: ContentMetadata;
22
+ }
23
+ export interface PublishedContentCursor {
24
+ publishedAt: number;
25
+ contentId: string;
26
+ }
27
+ export interface ListPublishedContentOptions {
28
+ type?: ContentType;
29
+ channel?: string;
30
+ limit?: number;
31
+ cursor?: PublishedContentCursor | null;
32
+ }
33
+ export interface PublishedContentPage {
34
+ items: PublishedContent[];
35
+ nextCursor: PublishedContentCursor | null;
36
+ }
37
+ export declare function getPublishedContentById(db: D1Database, contentId: string): Promise<PublishedContent | null>;
38
+ export declare function getPublishedContentBySlug(db: D1Database, slug: string): Promise<PublishedContent | null>;
39
+ export declare function listPublishedContent(db: D1Database, options?: ListPublishedContentOptions): Promise<PublishedContentPage>;
40
+ //# sourceMappingURL=published-content.d.ts.map
@@ -0,0 +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;AAQ5D,eAAO,MAAM,+BAA+B,MAAM,CAAA;AAClD,eAAO,MAAM,mCAAmC,QAAkB,CAAA;AAClE,eAAO,MAAM,gCAAgC,QAAkB,CAAA;AAE/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;AAmQD,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,CAkH/B"}
@@ -0,0 +1,388 @@
1
+ import { ContentMetadataError, parseContentMetadata, } from './content-metadata.js';
2
+ const CONTENT_TYPES = new Set(['article', 'video', 'podcast', 'newsletter', 'page']);
3
+ const CONTENT_STATUSES = new Set(['draft', 'scheduled', 'review', 'published', 'archived']);
4
+ const CONTENT_VISIBILITIES = new Set(['free', 'premium']);
5
+ const LIST_OPTION_KEYS = new Set(['type', 'channel', 'limit', 'cursor']);
6
+ const CURSOR_KEYS = new Set(['publishedAt', 'contentId']);
7
+ export const MAX_PUBLISHED_CONTENT_PAGE_SIZE = 100;
8
+ export const MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES = 4 * 1024 * 1024;
9
+ export const MAX_PUBLISHED_CONTENT_PAGE_BYTES = 4 * 1024 * 1024;
10
+ export class PublishedContentReadError extends Error {
11
+ code;
12
+ constructor(code, message, options) {
13
+ super(message, options);
14
+ this.code = code;
15
+ this.name = 'PublishedContentReadError';
16
+ }
17
+ }
18
+ const SELECT_PUBLISHED_CONTENT = `
19
+ SELECT
20
+ ci.id AS content_id,
21
+ ci.published_revision_id AS pointer_revision_id,
22
+ ci.published_at AS canonical_published_at,
23
+ cr.id AS revision_id,
24
+ cr.content_id AS revision_content_id,
25
+ CASE
26
+ WHEN length(CAST(cr.payload_json AS BLOB)) <= ${MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES}
27
+ THEN cr.payload_json
28
+ ELSE NULL
29
+ END AS payload_json,
30
+ length(CAST(cr.payload_json AS BLOB)) AS payload_bytes
31
+ FROM content_items ci
32
+ `;
33
+ const SELECT_PUBLISHED_CONTENT_OUTLINE = `
34
+ SELECT
35
+ ci.id AS content_id,
36
+ ci.published_revision_id AS pointer_revision_id,
37
+ ci.published_at AS canonical_published_at,
38
+ length(CAST(cr.payload_json AS BLOB)) AS payload_bytes
39
+ FROM content_items ci
40
+ `;
41
+ const SELECT_PUBLISHED_CONTENT_BY_SLUG = `
42
+ SELECT
43
+ ci.id AS content_id,
44
+ ci.published_revision_id AS pointer_revision_id,
45
+ ci.published_at AS canonical_published_at,
46
+ cr.id AS revision_id,
47
+ cr.content_id AS revision_content_id,
48
+ CASE
49
+ WHEN length(CAST(cr.payload_json AS BLOB)) <= ${MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES}
50
+ THEN cr.payload_json
51
+ ELSE NULL
52
+ END AS payload_json,
53
+ length(CAST(cr.payload_json AS BLOB)) AS payload_bytes
54
+ FROM content_revisions cr INDEXED BY idx_content_revisions_published_slug
55
+ JOIN content_items ci
56
+ ON ci.published_revision_id = cr.id
57
+ AND cr.content_id = ci.id
58
+ `;
59
+ function isPlainRecord(value) {
60
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
61
+ return false;
62
+ const prototype = Object.getPrototypeOf(value);
63
+ return prototype === Object.prototype || prototype === null;
64
+ }
65
+ function byteLength(value) {
66
+ return new TextEncoder().encode(value).byteLength;
67
+ }
68
+ function invalidPayload(message) {
69
+ throw new PublishedContentReadError('published_payload_invalid', message);
70
+ }
71
+ function validatePayload(raw, row) {
72
+ if (byteLength(raw) > MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES) {
73
+ throw new PublishedContentReadError('published_payload_limit_exceeded', `published revision payload exceeds ${MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES} bytes`);
74
+ }
75
+ let decoded;
76
+ try {
77
+ decoded = JSON.parse(raw);
78
+ }
79
+ catch {
80
+ return invalidPayload('published revision payload is not valid JSON');
81
+ }
82
+ if (!isPlainRecord(decoded))
83
+ return invalidPayload('published revision payload must be an object');
84
+ if (!isPlainRecord(decoded.item))
85
+ return invalidPayload('published revision item must be an object');
86
+ if (decoded.content !== null && !isPlainRecord(decoded.content)) {
87
+ return invalidPayload('published revision content must be an object or null');
88
+ }
89
+ if (!Array.isArray(decoded.tags) || !decoded.tags.every((tag) => typeof tag === 'string')) {
90
+ return invalidPayload('published revision tags must be strings');
91
+ }
92
+ if (decoded.tags.length > 10 ||
93
+ decoded.tags.some((tag) => tag.length === 0 || tag.length > 256)) {
94
+ return invalidPayload('published revision tags exceed their canonical bounds');
95
+ }
96
+ if (!Array.isArray(decoded.related) ||
97
+ decoded.related.length > 100 ||
98
+ !decoded.related.every((relation) => isPlainRecord(relation) &&
99
+ typeof relation.related_id === 'string' &&
100
+ relation.related_id.length > 0 &&
101
+ relation.related_id.length <= 256 &&
102
+ Number.isSafeInteger(relation.rank) &&
103
+ relation.rank >= 0 &&
104
+ (relation.reason === null || typeof relation.reason === 'string'))) {
105
+ return invalidPayload('published revision relations are malformed');
106
+ }
107
+ const item = decoded.item;
108
+ if (item.id !== row.content_id) {
109
+ throw new PublishedContentReadError('published_revision_mismatch', 'published revision item does not belong to the canonical content item');
110
+ }
111
+ if (typeof item.slug !== 'string' || item.slug.length === 0) {
112
+ return invalidPayload('published revision slug is invalid');
113
+ }
114
+ if (item.slug.length > 512)
115
+ return invalidPayload('published revision slug is too long');
116
+ if (typeof item.type !== 'string' || !CONTENT_TYPES.has(item.type)) {
117
+ return invalidPayload('published revision type is invalid');
118
+ }
119
+ if (typeof item.title !== 'string' || !item.title.trim() || item.title.length > 1_024) {
120
+ return invalidPayload('published revision title is invalid');
121
+ }
122
+ if (typeof item.status !== 'string' || !CONTENT_STATUSES.has(item.status)) {
123
+ return invalidPayload('published revision status is invalid');
124
+ }
125
+ if (typeof item.visibility !== 'string' || !CONTENT_VISIBILITIES.has(item.visibility)) {
126
+ return invalidPayload('published revision visibility is invalid');
127
+ }
128
+ if (!Number.isSafeInteger(item.updated_at) || item.updated_at < 0) {
129
+ return invalidPayload('published revision updated_at is invalid');
130
+ }
131
+ if (item.metadata_json !== undefined && typeof item.metadata_json !== 'string') {
132
+ return invalidPayload('published revision metadata must be JSON text');
133
+ }
134
+ const content = decoded.content;
135
+ if (!content)
136
+ return invalidPayload('published revision content is missing');
137
+ if (['article', 'newsletter', 'page'].includes(item.type) &&
138
+ typeof content.body_markdown !== 'string') {
139
+ return invalidPayload('published revision body Markdown is invalid');
140
+ }
141
+ if (item.type === 'video' && typeof content.video_id !== 'string') {
142
+ return invalidPayload('published revision video ID is invalid');
143
+ }
144
+ if (item.type === 'podcast' && typeof content.audio_r2_key !== 'string') {
145
+ return invalidPayload('published revision podcast audio key is invalid');
146
+ }
147
+ return decoded;
148
+ }
149
+ function decodePublishedContent(row) {
150
+ if (!row.revision_id || !row.revision_content_id || row.payload_bytes === null) {
151
+ throw new PublishedContentReadError('published_revision_missing', 'canonical publication pointer does not resolve to a revision');
152
+ }
153
+ if (!Number.isSafeInteger(row.payload_bytes) || row.payload_bytes < 1) {
154
+ throw new PublishedContentReadError('published_payload_invalid', 'published revision payload length is invalid');
155
+ }
156
+ if (row.payload_bytes > MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES) {
157
+ throw new PublishedContentReadError('published_payload_limit_exceeded', `published revision payload exceeds ${MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES} bytes`);
158
+ }
159
+ if (row.payload_json === null || byteLength(row.payload_json) !== row.payload_bytes) {
160
+ throw new PublishedContentReadError('published_read_failed', 'published revision changed during its bounded read');
161
+ }
162
+ if (row.pointer_revision_id !== row.revision_id || row.revision_content_id !== row.content_id) {
163
+ throw new PublishedContentReadError('published_revision_mismatch', 'canonical publication pointer resolves to a revision owned by another item');
164
+ }
165
+ if (!Number.isSafeInteger(row.canonical_published_at) || row.canonical_published_at < 0) {
166
+ throw new PublishedContentReadError('published_payload_invalid', 'canonical published_at is invalid');
167
+ }
168
+ const payload = validatePayload(row.payload_json, row);
169
+ const item = payload.item;
170
+ let metadata;
171
+ try {
172
+ metadata = parseContentMetadata(typeof item.metadata_json === 'undefined' ? '{}' : item.metadata_json);
173
+ }
174
+ catch (error) {
175
+ if (error instanceof ContentMetadataError) {
176
+ throw new PublishedContentReadError('published_payload_invalid', `published revision metadata is invalid: ${error.message}`);
177
+ }
178
+ throw error;
179
+ }
180
+ return {
181
+ contentId: row.content_id,
182
+ revisionId: row.revision_id,
183
+ slug: item.slug,
184
+ type: item.type,
185
+ publishedAt: row.canonical_published_at,
186
+ updatedAt: item.updated_at,
187
+ payload,
188
+ metadata,
189
+ };
190
+ }
191
+ function assertLookupValue(value, field, maxLength) {
192
+ if (typeof value !== 'string' || !value || value.length > maxLength) {
193
+ throw new PublishedContentReadError('published_content_input_invalid', `${field} must be between 1 and ${maxLength} characters`);
194
+ }
195
+ }
196
+ function wrapReadError(error) {
197
+ if (error instanceof PublishedContentReadError)
198
+ throw error;
199
+ throw new PublishedContentReadError('published_read_failed', 'published content could not be read safely', { cause: error });
200
+ }
201
+ export async function getPublishedContentById(db, contentId) {
202
+ assertLookupValue(contentId, 'contentId', 256);
203
+ try {
204
+ const row = await db
205
+ .prepare(`${SELECT_PUBLISHED_CONTENT}
206
+ LEFT JOIN content_revisions cr
207
+ ON cr.id = ci.published_revision_id
208
+ WHERE ci.id = ?
209
+ AND ci.status = 'published'
210
+ AND ci.deleted_at IS NULL
211
+ AND ci.published_revision_id IS NOT NULL
212
+ AND ci.published_at IS NOT NULL
213
+ LIMIT 1`)
214
+ .bind(contentId)
215
+ .first();
216
+ return row ? decodePublishedContent(row) : null;
217
+ }
218
+ catch (error) {
219
+ return wrapReadError(error);
220
+ }
221
+ }
222
+ export async function getPublishedContentBySlug(db, slug) {
223
+ assertLookupValue(slug, 'slug', 512);
224
+ try {
225
+ const result = await db
226
+ .prepare(`${SELECT_PUBLISHED_CONTENT_BY_SLUG}
227
+ WHERE ci.status = 'published'
228
+ AND ci.deleted_at IS NULL
229
+ AND ci.published_revision_id IS NOT NULL
230
+ AND ci.published_at IS NOT NULL
231
+ AND json_extract(cr.payload_json, '$.item.slug') = ?
232
+ ORDER BY ci.id DESC
233
+ LIMIT 2`)
234
+ .bind(slug)
235
+ .all();
236
+ const rows = result.results ?? [];
237
+ if (rows.length === 0)
238
+ return null;
239
+ if (rows.length > 1) {
240
+ throw new PublishedContentReadError('published_slug_ambiguous', 'published slug resolves to more than one canonical content item');
241
+ }
242
+ return decodePublishedContent(rows[0]);
243
+ }
244
+ catch (error) {
245
+ return wrapReadError(error);
246
+ }
247
+ }
248
+ function normalizeListOptions(options) {
249
+ if (!isPlainRecord(options)) {
250
+ throw new PublishedContentReadError('published_content_input_invalid', 'published content options must be an object');
251
+ }
252
+ if (Object.keys(options).some((key) => !LIST_OPTION_KEYS.has(key))) {
253
+ throw new PublishedContentReadError('published_content_input_invalid', 'published content options contain an unsupported field');
254
+ }
255
+ const limit = options.limit ?? 20;
256
+ if (typeof limit !== 'number' ||
257
+ !Number.isSafeInteger(limit) ||
258
+ limit < 1 ||
259
+ limit > MAX_PUBLISHED_CONTENT_PAGE_SIZE) {
260
+ throw new PublishedContentReadError('published_content_input_invalid', `limit must be between 1 and ${MAX_PUBLISHED_CONTENT_PAGE_SIZE}`);
261
+ }
262
+ let type;
263
+ if (options.type !== undefined) {
264
+ if (typeof options.type !== 'string' || !CONTENT_TYPES.has(options.type)) {
265
+ throw new PublishedContentReadError('published_content_input_invalid', 'unknown published content type');
266
+ }
267
+ type = options.type;
268
+ }
269
+ let channel;
270
+ if (options.channel !== undefined) {
271
+ assertLookupValue(options.channel, 'channel', 128);
272
+ channel = options.channel;
273
+ }
274
+ let cursor;
275
+ if (options.cursor !== undefined && options.cursor !== null) {
276
+ if (!isPlainRecord(options.cursor) ||
277
+ Object.keys(options.cursor).some((key) => !CURSOR_KEYS.has(key))) {
278
+ throw new PublishedContentReadError('published_content_input_invalid', 'published content cursor is malformed');
279
+ }
280
+ if (typeof options.cursor.publishedAt !== 'number' ||
281
+ !Number.isSafeInteger(options.cursor.publishedAt) ||
282
+ options.cursor.publishedAt < 0) {
283
+ throw new PublishedContentReadError('published_content_input_invalid', 'cursor publishedAt must be a non-negative integer');
284
+ }
285
+ assertLookupValue(options.cursor.contentId, 'cursor contentId', 256);
286
+ cursor = {
287
+ publishedAt: options.cursor.publishedAt,
288
+ contentId: options.cursor.contentId,
289
+ };
290
+ }
291
+ return {
292
+ limit,
293
+ type,
294
+ channel,
295
+ cursor,
296
+ };
297
+ }
298
+ export async function listPublishedContent(db, options = {}) {
299
+ const normalized = normalizeListOptions(options);
300
+ const predicates = [
301
+ "ci.status = 'published'",
302
+ 'ci.deleted_at IS NULL',
303
+ 'ci.published_revision_id IS NOT NULL',
304
+ 'ci.published_at IS NOT NULL',
305
+ ];
306
+ const values = [];
307
+ if (normalized.type) {
308
+ predicates.push("json_extract(cr.payload_json, '$.item.type') = ?");
309
+ values.push(normalized.type);
310
+ }
311
+ if (normalized.channel) {
312
+ predicates.push("json_extract(cr.payload_json, '$.item.channel') = ?");
313
+ values.push(normalized.channel);
314
+ }
315
+ if (normalized.cursor) {
316
+ predicates.push('(ci.published_at < ? OR (ci.published_at = ? AND ci.id < ?))');
317
+ values.push(normalized.cursor.publishedAt, normalized.cursor.publishedAt, normalized.cursor.contentId);
318
+ }
319
+ try {
320
+ const outlineResult = await db
321
+ .prepare(`${SELECT_PUBLISHED_CONTENT_OUTLINE}
322
+ JOIN content_revisions cr ON cr.id = ci.published_revision_id
323
+ WHERE ${predicates.join('\n AND ')}
324
+ ORDER BY ci.published_at DESC, ci.id DESC
325
+ LIMIT ?`)
326
+ .bind(...values, normalized.limit + 1)
327
+ .all();
328
+ const outlines = outlineResult.results ?? [];
329
+ const selected = [];
330
+ let selectedBytes = 0;
331
+ for (const outline of outlines.slice(0, normalized.limit)) {
332
+ if (typeof outline.content_id !== 'string' ||
333
+ typeof outline.pointer_revision_id !== 'string' ||
334
+ !Number.isSafeInteger(outline.canonical_published_at) ||
335
+ outline.canonical_published_at < 0 ||
336
+ !Number.isSafeInteger(outline.payload_bytes) ||
337
+ outline.payload_bytes < 1) {
338
+ throw new PublishedContentReadError('published_payload_invalid', 'published revision outline is malformed');
339
+ }
340
+ if (outline.payload_bytes > MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES) {
341
+ throw new PublishedContentReadError('published_payload_limit_exceeded', `published revision payload exceeds ${MAX_PUBLISHED_CONTENT_PAYLOAD_BYTES} bytes`);
342
+ }
343
+ if (selected.length > 0 &&
344
+ selectedBytes + outline.payload_bytes > MAX_PUBLISHED_CONTENT_PAGE_BYTES) {
345
+ break;
346
+ }
347
+ selected.push(outline);
348
+ selectedBytes += outline.payload_bytes;
349
+ }
350
+ if (selected.length === 0)
351
+ return { items: [], nextCursor: null };
352
+ const selectedPredicates = selected.map(() => '(ci.id = ? AND ci.published_revision_id = ?)');
353
+ const selectedValues = selected.flatMap((outline) => [
354
+ outline.content_id,
355
+ outline.pointer_revision_id,
356
+ ]);
357
+ const result = await db
358
+ .prepare(`${SELECT_PUBLISHED_CONTENT}
359
+ JOIN content_revisions cr ON cr.id = ci.published_revision_id
360
+ WHERE ci.status = 'published'
361
+ AND ci.deleted_at IS NULL
362
+ AND (${selectedPredicates.join(' OR ')})`)
363
+ .bind(...selectedValues)
364
+ .all();
365
+ const rows = result.results ?? [];
366
+ const rowsByPointer = new Map(rows.map((row) => [`${row.content_id}\0${row.pointer_revision_id}`, row]));
367
+ const items = selected.map((outline) => {
368
+ const row = rowsByPointer.get(`${outline.content_id}\0${outline.pointer_revision_id}`);
369
+ if (!row ||
370
+ row.canonical_published_at !== outline.canonical_published_at ||
371
+ row.payload_json === null ||
372
+ byteLength(row.payload_json) !== outline.payload_bytes) {
373
+ throw new PublishedContentReadError('published_read_failed', 'published revision changed during its bounded read');
374
+ }
375
+ return decodePublishedContent(row);
376
+ });
377
+ const hasMore = outlines.length > selected.length;
378
+ const last = items.at(-1);
379
+ return {
380
+ items,
381
+ nextCursor: hasMore && last ? { publishedAt: last.publishedAt, contentId: last.contentId } : null,
382
+ };
383
+ }
384
+ catch (error) {
385
+ return wrapReadError(error);
386
+ }
387
+ }
388
+ //# sourceMappingURL=published-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"published-content.js","sourceRoot":"","sources":["../../src/engine/published-content.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ContentType } from '../schema/types.js';
2
+ import { type ContentMetadata } from './content-metadata.js';
2
3
  import type { D1Database } from './d1.js';
3
4
  import { type PublishGuardOutcome } from './publish-guard.js';
4
5
  type ContentVisibility = 'free' | 'premium';
@@ -36,6 +37,8 @@ export interface BaseContentInput {
36
37
  tags?: string[];
37
38
  /** The SEO focus keyword for this content item (migration 0004 column). */
38
39
  seoFocusKeyword?: string | null;
40
+ /** Declared site-specific JSON values retained in every immutable revision. */
41
+ metadata?: ContentMetadata;
39
42
  }
40
43
  export interface ArticleInput extends BaseContentInput {
41
44
  type: 'article';
@@ -89,7 +92,17 @@ export interface PageInput extends BaseContentInput {
89
92
  editorTakeaways?: string[] | null;
90
93
  };
91
94
  }
92
- export type CreateContentInput = ArticleInput | VideoInput | PodcastInput | NewsletterInput | PageInput;
95
+ export type CreateContentInput = (ArticleInput | VideoInput | PodcastInput | NewsletterInput | PageInput) & {
96
+ /** Optional namespaced archive key. New copies deliberately do not inherit it. */
97
+ sourceId?: string | null;
98
+ /** Initial historical values for archive ingestion; normal creates omit this. */
99
+ initialTimestamps?: {
100
+ publishedAt?: number | null;
101
+ createdAt?: number | null;
102
+ updatedAt?: number | null;
103
+ publishTz?: string | null;
104
+ };
105
+ };
93
106
  export interface UpdateContentInput extends Partial<BaseContentInput> {
94
107
  content?: Partial<ArticleInput['content'] | VideoInput['content'] | PodcastInput['content'] | NewsletterInput['content'] | PageInput['content']>;
95
108
  relations?: Array<{
@@ -131,6 +144,8 @@ export interface ContentItemRecord {
131
144
  ai_locked_fields: string | null;
132
145
  published_revision_id: string | null;
133
146
  seo_focus_keyword: string | null;
147
+ metadata_json: string;
148
+ source_id: string | null;
134
149
  created_at: number | null;
135
150
  updated_at: number | null;
136
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/engine/publisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/engine/publisher.ts"],"names":[],"mappings":"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"}