@growth-labs/cms 0.5.29 → 0.5.31

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 (151) hide show
  1. package/dist/engine/foundry-dispatch.d.ts +7 -2
  2. package/dist/engine/foundry-dispatch.d.ts.map +1 -1
  3. package/dist/engine/foundry-dispatch.js +24 -6
  4. package/dist/engine/foundry-dispatch.js.map +1 -1
  5. package/dist/engine/fronts-publish-intent.d.ts +174 -0
  6. package/dist/engine/fronts-publish-intent.d.ts.map +1 -0
  7. package/dist/engine/fronts-publish-intent.js +352 -0
  8. package/dist/engine/fronts-publish-intent.js.map +1 -0
  9. package/dist/engine/fronts-publish.d.ts +80 -0
  10. package/dist/engine/fronts-publish.d.ts.map +1 -0
  11. package/dist/engine/fronts-publish.js +286 -0
  12. package/dist/engine/fronts-publish.js.map +1 -0
  13. package/dist/engine/index.d.ts +7 -0
  14. package/dist/engine/index.d.ts.map +1 -1
  15. package/dist/engine/index.js +10 -0
  16. package/dist/engine/index.js.map +1 -1
  17. package/dist/engine/publication-continuity.d.ts +77 -0
  18. package/dist/engine/publication-continuity.d.ts.map +1 -0
  19. package/dist/engine/publication-continuity.js +94 -0
  20. package/dist/engine/publication-continuity.js.map +1 -0
  21. package/dist/engine/publication-receipt/canonical-json.d.ts +34 -0
  22. package/dist/engine/publication-receipt/canonical-json.d.ts.map +1 -0
  23. package/dist/engine/publication-receipt/canonical-json.js +100 -0
  24. package/dist/engine/publication-receipt/canonical-json.js.map +1 -0
  25. package/dist/engine/publication-receipt/receipt.d.ts +316 -0
  26. package/dist/engine/publication-receipt/receipt.d.ts.map +1 -0
  27. package/dist/engine/publication-receipt/receipt.js +131 -0
  28. package/dist/engine/publication-receipt/receipt.js.map +1 -0
  29. package/dist/engine/publication-receipt/signature.d.ts +36 -0
  30. package/dist/engine/publication-receipt/signature.d.ts.map +1 -0
  31. package/dist/engine/publication-receipt/signature.js +79 -0
  32. package/dist/engine/publication-receipt/signature.js.map +1 -0
  33. package/dist/engine/publication.d.ts.map +1 -1
  34. package/dist/engine/publication.js +2 -0
  35. package/dist/engine/publication.js.map +1 -1
  36. package/dist/engine/publisher.d.ts.map +1 -1
  37. package/dist/engine/publisher.js +23 -1
  38. package/dist/engine/publisher.js.map +1 -1
  39. package/dist/engine/source-sections.d.ts +20 -0
  40. package/dist/engine/source-sections.d.ts.map +1 -0
  41. package/dist/engine/source-sections.js +130 -0
  42. package/dist/engine/source-sections.js.map +1 -0
  43. package/dist/engine/validator/checks/source-section-diagnostics.d.ts +7 -0
  44. package/dist/engine/validator/checks/source-section-diagnostics.d.ts.map +1 -0
  45. package/dist/engine/validator/checks/source-section-diagnostics.js +120 -0
  46. package/dist/engine/validator/checks/source-section-diagnostics.js.map +1 -0
  47. package/dist/engine/validator/index.d.ts +10 -0
  48. package/dist/engine/validator/index.d.ts.map +1 -1
  49. package/dist/engine/validator/index.js +4 -0
  50. package/dist/engine/validator/index.js.map +1 -1
  51. package/dist/engine/validator/types.d.ts +1 -1
  52. package/dist/engine/validator/types.d.ts.map +1 -1
  53. package/dist/engine/validator/types.js +10 -0
  54. package/dist/engine/validator/types.js.map +1 -1
  55. package/dist/integration/index.d.ts.map +1 -1
  56. package/dist/integration/index.js +10 -0
  57. package/dist/integration/index.js.map +1 -1
  58. package/dist/providers/types.d.ts +1 -0
  59. package/dist/providers/types.d.ts.map +1 -1
  60. package/dist/routes/content.d.ts.map +1 -1
  61. package/dist/routes/content.js +22 -2
  62. package/dist/routes/content.js.map +1 -1
  63. package/dist/routes/fronts-publish.d.ts +10 -0
  64. package/dist/routes/fronts-publish.d.ts.map +1 -0
  65. package/dist/routes/fronts-publish.js +250 -0
  66. package/dist/routes/fronts-publish.js.map +1 -0
  67. package/dist/routes/index.d.ts +3 -0
  68. package/dist/routes/index.d.ts.map +1 -1
  69. package/dist/routes/index.js +4 -0
  70. package/dist/routes/index.js.map +1 -1
  71. package/dist/routes/surveys.d.ts.map +1 -1
  72. package/dist/routes/surveys.js +13 -1
  73. package/dist/routes/surveys.js.map +1 -1
  74. package/dist/schema/insights-ingest.d.ts +28 -28
  75. package/dist/schema/layout.d.ts +2 -2
  76. package/dist/schema/migrations.d.ts.map +1 -1
  77. package/dist/schema/migrations.js +36 -0
  78. package/dist/schema/migrations.js.map +1 -1
  79. package/dist/schema/portable-text.d.ts +2 -2
  80. package/dist/schema/tables.d.ts +1 -1
  81. package/dist/schema/tables.d.ts.map +1 -1
  82. package/dist/schema/tables.js +2 -0
  83. package/dist/schema/tables.js.map +1 -1
  84. package/dist/schema/types.d.ts +59 -0
  85. package/dist/schema/types.d.ts.map +1 -1
  86. package/dist/schema/types.js.map +1 -1
  87. package/dist/surveys/access.d.ts +2 -0
  88. package/dist/surveys/access.d.ts.map +1 -1
  89. package/dist/surveys/access.js +7 -0
  90. package/dist/surveys/access.js.map +1 -1
  91. package/dist/surveys/errors.d.ts +8 -0
  92. package/dist/surveys/errors.d.ts.map +1 -1
  93. package/dist/surveys/errors.js +12 -0
  94. package/dist/surveys/errors.js.map +1 -1
  95. package/dist/surveys/schema.d.ts +129 -54
  96. package/dist/surveys/schema.d.ts.map +1 -1
  97. package/dist/surveys/schema.js +45 -0
  98. package/dist/surveys/schema.js.map +1 -1
  99. package/dist/ui/api/fronts/publish-callback.d.ts +3 -0
  100. package/dist/ui/api/fronts/publish-callback.d.ts.map +1 -0
  101. package/dist/ui/api/fronts/publish-callback.js +8 -0
  102. package/dist/ui/api/fronts/publish-callback.js.map +1 -0
  103. package/dist/ui/api/fronts/schedule.d.ts +3 -0
  104. package/dist/ui/api/fronts/schedule.d.ts.map +1 -0
  105. package/dist/ui/api/fronts/schedule.js +8 -0
  106. package/dist/ui/api/fronts/schedule.js.map +1 -0
  107. package/dist/ui/editor/ContentForm.d.ts.map +1 -1
  108. package/dist/ui/editor/ContentForm.js +52 -1
  109. package/dist/ui/editor/ContentForm.js.map +1 -1
  110. package/dist/ui/editor/body-warnings.d.ts +27 -0
  111. package/dist/ui/editor/body-warnings.d.ts.map +1 -0
  112. package/dist/ui/editor/body-warnings.js +58 -0
  113. package/dist/ui/editor/body-warnings.js.map +1 -0
  114. package/dist/ui/screens/SurveyResponsesScreen.d.ts +7 -1
  115. package/dist/ui/screens/SurveyResponsesScreen.d.ts.map +1 -1
  116. package/dist/ui/screens/SurveyResponsesScreen.js +141 -32
  117. package/dist/ui/screens/SurveyResponsesScreen.js.map +1 -1
  118. package/migrations/0026_fronts_publish.sql +31 -0
  119. package/migrations/0027_fronts_publish_intent.sql +44 -0
  120. package/package.json +1 -1
  121. package/src/engine/foundry-dispatch.ts +22 -6
  122. package/src/engine/fronts-publish-intent.ts +676 -0
  123. package/src/engine/fronts-publish.ts +417 -0
  124. package/src/engine/index.ts +60 -0
  125. package/src/engine/publication-continuity.ts +140 -0
  126. package/src/engine/publication-receipt/canonical-json.ts +123 -0
  127. package/src/engine/publication-receipt/receipt.ts +160 -0
  128. package/src/engine/publication-receipt/signature.ts +112 -0
  129. package/src/engine/publication.ts +2 -0
  130. package/src/engine/publisher.ts +23 -1
  131. package/src/engine/source-sections.ts +153 -0
  132. package/src/engine/validator/checks/source-section-diagnostics.ts +187 -0
  133. package/src/engine/validator/index.ts +12 -0
  134. package/src/engine/validator/types.ts +19 -0
  135. package/src/integration/index.ts +10 -0
  136. package/src/providers/types.ts +1 -1
  137. package/src/routes/content.ts +23 -2
  138. package/src/routes/fronts-publish.ts +292 -0
  139. package/src/routes/index.ts +8 -0
  140. package/src/routes/surveys.ts +12 -1
  141. package/src/schema/migrations.ts +36 -0
  142. package/src/schema/tables.ts +2 -0
  143. package/src/schema/types.ts +61 -0
  144. package/src/surveys/access.ts +9 -0
  145. package/src/surveys/errors.ts +12 -0
  146. package/src/surveys/schema.ts +47 -0
  147. package/src/ui/api/fronts/publish-callback.ts +18 -0
  148. package/src/ui/api/fronts/schedule.ts +18 -0
  149. package/src/ui/editor/ContentForm.tsx +93 -0
  150. package/src/ui/editor/body-warnings.ts +78 -0
  151. package/src/ui/screens/SurveyResponsesScreen.tsx +369 -121
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fronts-publish-intent.js","sourceRoot":"","sources":["../../src/engine/fronts-publish-intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { ContentType, FrontsPublishStatus } from '../schema/types.js';
2
+ import type { D1Database } from './d1.js';
3
+ /** The five lifecycle states foundryd reports for a Fronts publish intent. */
4
+ export declare const FRONTS_PUBLISH_STATUSES: readonly FrontsPublishStatus[];
5
+ export declare function isFrontsPublishStatus(value: unknown): value is FrontsPublishStatus;
6
+ /**
7
+ * Feature flag — a ROLLBACK LEVER, not a graduation gate. Default ENABLED; the
8
+ * additive Fronts publish endpoints only go dark when the host explicitly sets
9
+ * FRONTS_PUBLISH_ENABLED to a falsy string ('0' | 'false' | 'off' | 'no') or the
10
+ * boolean false. When off, foundryd's polls/callbacks are refused loudly (503)
11
+ * and the untouched D1 cron path owns publishing.
12
+ */
13
+ export declare function isFrontsPublishEnabled(env: Record<string, unknown> | undefined): boolean;
14
+ export interface FrontsScheduleItem {
15
+ id: string;
16
+ type: ContentType;
17
+ slug: string;
18
+ title: string;
19
+ channel: string | null;
20
+ /** Scheduled publish time, unix epoch seconds. */
21
+ publishAt: number;
22
+ /** Current lifecycle marker (null until foundryd first acknowledges it). */
23
+ frontsPublishStatus: FrontsPublishStatus | null;
24
+ /** publish_at is at or before `now` — foundryd is late on this one. */
25
+ overdue: boolean;
26
+ }
27
+ export interface ListFrontsPublishScheduleOptions {
28
+ /** Window upper bound, unix epoch seconds. Items due at/before this are returned. */
29
+ toSeconds: number;
30
+ /** Reference time for the `overdue` flag, unix epoch seconds. Defaults to Date.now(). */
31
+ nowSeconds?: number;
32
+ /** Hard cap on rows returned. Default 200, max 1000. */
33
+ limit?: number;
34
+ }
35
+ /**
36
+ * List `scheduled` items due at or before the window end. Includes overdue
37
+ * items (publish_at < window start) — the window's lower bound is intentionally
38
+ * not applied, matching foundryd's "next window + any overdue" contract. Ordered
39
+ * by publish_at ascending so the most-overdue item is published first.
40
+ */
41
+ export declare function listFrontsPublishSchedule(db: D1Database, options: ListFrontsPublishScheduleOptions): Promise<FrontsScheduleItem[]>;
42
+ export interface FrontsPublishReceipt {
43
+ published_urls?: string[] | null;
44
+ platform_post_ids?: string[] | null;
45
+ sha256?: string | null;
46
+ }
47
+ export interface FrontsPublishCallbackInput {
48
+ eventId: string;
49
+ intentId?: string | null;
50
+ contentId: string;
51
+ version?: number | null;
52
+ correlationId?: string | null;
53
+ status: FrontsPublishStatus;
54
+ /** ISO-8601 string or unix epoch seconds; used as the published_at on `live`. */
55
+ occurredAt?: string | number | null;
56
+ receipt?: FrontsPublishReceipt | null;
57
+ error?: string | null;
58
+ /** Reference time (unix seconds), for tests. Defaults to Date.now(). */
59
+ now?: number;
60
+ }
61
+ export interface FrontsPublishCallbackResult {
62
+ ok: boolean;
63
+ /** True when this event_id was already processed — no state change this call. */
64
+ deduped: boolean;
65
+ status: FrontsPublishStatus;
66
+ /** True when the item is published (flipped by this call, or already was). */
67
+ published: boolean;
68
+ /** The content_publication_attempts ledger row id, when this call published. */
69
+ attemptId: string | null;
70
+ contentFound: boolean;
71
+ /** Set when a `live` callback could not be committed through the ledger. */
72
+ ledgerError: string | null;
73
+ }
74
+ /**
75
+ * Apply one foundryd publish-callback. Idempotent by `event_id`: a repeat
76
+ * delivery returns the stored outcome without re-applying. See the module
77
+ * header for the state-transition contract.
78
+ */
79
+ export declare function applyFrontsPublishCallback(db: D1Database, input: FrontsPublishCallbackInput): Promise<FrontsPublishCallbackResult>;
80
+ //# sourceMappingURL=fronts-publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fronts-publish.d.ts","sourceRoot":"","sources":["../../src/engine/fronts-publish.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGzC,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,EAAE,SAAS,mBAAmB,EAMxD,CAAA;AAEV,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,CASxF;AAID,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAA;IAC/C,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,gCAAgC;IAChD,qFAAqF;IACrF,SAAS,EAAE,MAAM,CAAA;IACjB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC9C,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,gCAAgC,GACvC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAiC/B;AAID,MAAM,WAAW,oBAAoB;IACpC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,0BAA0B;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,EAAE,mBAAmB,CAAA;IAC3B,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,2BAA2B;IAC3C,EAAE,EAAE,OAAO,CAAA;IACX,iFAAiF;IACjF,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAA;IAClB,gFAAgF;IAChF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AA2BD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC/C,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,0BAA0B,GAC/B,OAAO,CAAC,2BAA2B,CAAC,CAoJtC"}
@@ -0,0 +1,286 @@
1
+ // Fronts publish path — the additive, flag-gated, out-of-process publish flow
2
+ // (increment: cms/Masthead side).
3
+ //
4
+ // TWO seams, both driven by the external Fronts publish worker (foundryd):
5
+ //
6
+ // 1. listFrontsPublishSchedule — the poll surface. Returns `scheduled` items
7
+ // whose `publish_at` has arrived or is arriving within the caller's window
8
+ // (plus any overdue), so foundryd knows what to publish. Mirrors the
9
+ // `runScheduledPublish` (engine/cron.ts) due-predicate — `content_items`
10
+ // scheduling columns are INTEGER unix seconds, so the window is compared in
11
+ // seconds (NOT the D1 `datetime('now')` TEXT format; there is no
12
+ // space-vs-T comparison trap on this column).
13
+ //
14
+ // 2. applyFrontsPublishCallback — the receiver. Records foundryd's outbound
15
+ // callback (idempotent by `event_id`), reflects the lifecycle status onto
16
+ // `content_items.fronts_publish_status`, and — ONLY on a confirmed `live`
17
+ // with a receipt — drives the item to published THROUGH the existing
18
+ // `content_publication_attempts` 2PC ledger via `publishOne`. A
19
+ // `queued`/`publishing`/`late`/`failed` callback (or a `live` with no
20
+ // receipt) never flips the item to published.
21
+ //
22
+ // The legacy D1 cron publish path (engine/cron.ts `runScheduledPublish` + the
23
+ // site's cron) is UNTOUCHED and remains the rollback lever; this path is purely
24
+ // additive and gated by FRONTS_PUBLISH_ENABLED (default ON — a rollback lever,
25
+ // not a dark-staging gate).
26
+ import { publishOne } from './publication.js';
27
+ /** The five lifecycle states foundryd reports for a Fronts publish intent. */
28
+ export const FRONTS_PUBLISH_STATUSES = [
29
+ 'queued',
30
+ 'publishing',
31
+ 'live',
32
+ 'late',
33
+ 'failed',
34
+ ];
35
+ export function isFrontsPublishStatus(value) {
36
+ return typeof value === 'string' && FRONTS_PUBLISH_STATUSES.includes(value);
37
+ }
38
+ /**
39
+ * Feature flag — a ROLLBACK LEVER, not a graduation gate. Default ENABLED; the
40
+ * additive Fronts publish endpoints only go dark when the host explicitly sets
41
+ * FRONTS_PUBLISH_ENABLED to a falsy string ('0' | 'false' | 'off' | 'no') or the
42
+ * boolean false. When off, foundryd's polls/callbacks are refused loudly (503)
43
+ * and the untouched D1 cron path owns publishing.
44
+ */
45
+ export function isFrontsPublishEnabled(env) {
46
+ const raw = env?.FRONTS_PUBLISH_ENABLED;
47
+ if (raw === undefined || raw === null)
48
+ return true;
49
+ if (typeof raw === 'boolean')
50
+ return raw;
51
+ if (typeof raw === 'number')
52
+ return raw !== 0;
53
+ if (typeof raw === 'string') {
54
+ return !['0', 'false', 'off', 'no'].includes(raw.trim().toLowerCase());
55
+ }
56
+ return true;
57
+ }
58
+ /**
59
+ * List `scheduled` items due at or before the window end. Includes overdue
60
+ * items (publish_at < window start) — the window's lower bound is intentionally
61
+ * not applied, matching foundryd's "next window + any overdue" contract. Ordered
62
+ * by publish_at ascending so the most-overdue item is published first.
63
+ */
64
+ export async function listFrontsPublishSchedule(db, options) {
65
+ const now = options.nowSeconds ?? Math.floor(Date.now() / 1_000);
66
+ const limit = Math.min(Math.max(1, Math.floor(options.limit ?? 200)), 1000);
67
+ const result = await db
68
+ .prepare(`SELECT id, type, slug, title, channel, publish_at, fronts_publish_status
69
+ FROM content_items
70
+ WHERE status = 'scheduled'
71
+ AND publish_at IS NOT NULL
72
+ AND publish_at <= ?
73
+ ORDER BY publish_at ASC
74
+ LIMIT ?`)
75
+ .bind(options.toSeconds, limit)
76
+ .all();
77
+ return (result.results ?? []).map((row) => ({
78
+ id: row.id,
79
+ type: row.type,
80
+ slug: row.slug,
81
+ title: row.title,
82
+ channel: row.channel,
83
+ publishAt: row.publish_at,
84
+ frontsPublishStatus: row.fronts_publish_status,
85
+ overdue: row.publish_at <= now,
86
+ }));
87
+ }
88
+ function hasReceipt(receipt) {
89
+ if (!receipt)
90
+ return false;
91
+ const urls = Array.isArray(receipt.published_urls) && receipt.published_urls.length > 0;
92
+ const ids = Array.isArray(receipt.platform_post_ids) && receipt.platform_post_ids.length > 0;
93
+ const sha = typeof receipt.sha256 === 'string' && receipt.sha256.trim().length > 0;
94
+ return urls || ids || sha;
95
+ }
96
+ /** Resolve occurred_at to a bounded, non-future unix-seconds value (or null). */
97
+ function resolveOccurredAtSeconds(occurredAt, now) {
98
+ let seconds = null;
99
+ if (typeof occurredAt === 'number' && Number.isFinite(occurredAt)) {
100
+ seconds = Math.floor(occurredAt);
101
+ }
102
+ else if (typeof occurredAt === 'string' && occurredAt.trim()) {
103
+ const ms = Date.parse(occurredAt);
104
+ if (!Number.isNaN(ms))
105
+ seconds = Math.floor(ms / 1_000);
106
+ }
107
+ if (seconds === null || !Number.isSafeInteger(seconds) || seconds < 0)
108
+ return null;
109
+ // publishOne rejects a published_at later than `now`; clamp for clock skew.
110
+ return Math.min(seconds, now);
111
+ }
112
+ /**
113
+ * Apply one foundryd publish-callback. Idempotent by `event_id`: a repeat
114
+ * delivery returns the stored outcome without re-applying. See the module
115
+ * header for the state-transition contract.
116
+ */
117
+ export async function applyFrontsPublishCallback(db, input) {
118
+ const now = input.now ?? Math.floor(Date.now() / 1_000);
119
+ // 1. Idempotency — replay the stored outcome for a known event_id.
120
+ const existing = await readStoredOutcome(db, input.eventId);
121
+ if (existing)
122
+ return existing;
123
+ // 2. Resolve the target item. A missing item is NOT recorded, so a retry can
124
+ // still land once the item exists.
125
+ const item = await db
126
+ .prepare('SELECT id, status, fronts_publish_status FROM content_items WHERE id = ? LIMIT 1')
127
+ .bind(input.contentId)
128
+ .first();
129
+ if (!item) {
130
+ return {
131
+ ok: false,
132
+ deduped: false,
133
+ status: input.status,
134
+ published: false,
135
+ attemptId: null,
136
+ contentFound: false,
137
+ ledgerError: null,
138
+ };
139
+ }
140
+ // 3. On a confirmed `live` WITH a receipt, drive the publish through the 2PC
141
+ // ledger — record attempt + commit — flipping the item to published.
142
+ // A `live` on an already-published item just confirms it (no re-publish,
143
+ // so we never race the cron path into a duplicate revision).
144
+ let published = item.status === 'published';
145
+ let attemptId = null;
146
+ let ledgerError = null;
147
+ const shouldPublish = input.status === 'live' && hasReceipt(input.receipt);
148
+ if (shouldPublish && item.status !== 'published') {
149
+ try {
150
+ const receiptSummary = summarizeReceipt(input.receipt);
151
+ const surface = {
152
+ name: 'fronts',
153
+ async prepare() {
154
+ return { name: 'fronts', status: 'ok', phase: 'prepare' };
155
+ },
156
+ async commit() {
157
+ return { name: 'fronts', status: 'ok', phase: 'commit', message: receiptSummary };
158
+ },
159
+ };
160
+ const publishedAt = resolveOccurredAtSeconds(input.occurredAt, now);
161
+ const receipt = await publishOne(db, {
162
+ contentId: input.contentId,
163
+ now,
164
+ ...(publishedAt !== null ? { publishedAt } : {}),
165
+ createdBy: 'foundry.fronts-publish',
166
+ surfaces: [surface],
167
+ });
168
+ attemptId = receipt.attemptId;
169
+ published = true;
170
+ }
171
+ catch (error) {
172
+ // publishOne can throw when a concurrent/superseding publish already
173
+ // moved the canonical pointer (the item ends up published anyway) — treat
174
+ // that as success. Any other failure is recorded and surfaced loudly.
175
+ const reread = await db
176
+ .prepare('SELECT status FROM content_items WHERE id = ? LIMIT 1')
177
+ .bind(input.contentId)
178
+ .first();
179
+ if (reread?.status === 'published') {
180
+ published = true;
181
+ }
182
+ else {
183
+ ledgerError = error instanceof Error ? error.message : String(error);
184
+ }
185
+ }
186
+ }
187
+ const incomingOccurredAt = resolveOccurredAtSeconds(input.occurredAt, now);
188
+ // 4. Reflect the lifecycle marker onto the item — but NEVER regress it. A
189
+ // retried/out-of-order `publishing`/`failed` arriving after `live` must not
190
+ // make a published item read as publishing/failed, so gate on occurred_at
191
+ // ordering and the terminal `live`/published state.
192
+ const latestSeenRow = await db
193
+ .prepare('SELECT MAX(occurred_at) AS latest FROM fronts_publish_events WHERE content_id = ? AND occurred_at IS NOT NULL')
194
+ .bind(input.contentId)
195
+ .first();
196
+ if (shouldApplyFrontsMarker(item.status, item.fronts_publish_status, input.status, incomingOccurredAt, latestSeenRow?.latest ?? null)) {
197
+ await db
198
+ .prepare('UPDATE content_items SET fronts_publish_status = ?, updated_at = unixepoch() WHERE id = ?')
199
+ .bind(input.status, input.contentId)
200
+ .run();
201
+ }
202
+ // 5. Record the durable, idempotent event row (the "processed" marker). The
203
+ // dedupe SELECT (step 1) and this INSERT are not one transaction, so two
204
+ // concurrent same-event_id deliveries can both reach here — ON CONFLICT DO
205
+ // NOTHING makes the loser a no-op (never a spurious PK-violation 500), and
206
+ // we then replay the winner's stored outcome. publishOne's own CAS already
207
+ // prevents a double publish.
208
+ const insertResult = await db
209
+ .prepare(`INSERT INTO fronts_publish_events
210
+ (event_id, intent_id, content_id, version, correlation_id, status, occurred_at,
211
+ receipt_json, error, published, attempt_id, received_at)
212
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
213
+ ON CONFLICT(event_id) DO NOTHING`)
214
+ .bind(input.eventId, input.intentId ?? null, input.contentId, typeof input.version === 'number' && Number.isFinite(input.version)
215
+ ? Math.floor(input.version)
216
+ : null, input.correlationId ?? null, input.status, incomingOccurredAt, input.receipt ? JSON.stringify(input.receipt) : null, ledgerError, published ? 1 : 0, attemptId, now)
217
+ .run();
218
+ const changes = insertResult.meta?.changes;
219
+ if (typeof changes === 'number' && changes === 0) {
220
+ // A concurrent callback with the same event_id won the PK race.
221
+ const winner = await readStoredOutcome(db, input.eventId);
222
+ if (winner)
223
+ return winner;
224
+ }
225
+ return {
226
+ ok: ledgerError === null,
227
+ deduped: false,
228
+ status: input.status,
229
+ published,
230
+ attemptId,
231
+ contentFound: true,
232
+ ledgerError,
233
+ };
234
+ }
235
+ /** Replay a stored callback outcome by event_id, or null when not yet recorded. */
236
+ async function readStoredOutcome(db, eventId) {
237
+ const row = await db
238
+ .prepare('SELECT status, published, attempt_id, error FROM fronts_publish_events WHERE event_id = ? LIMIT 1')
239
+ .bind(eventId)
240
+ .first();
241
+ if (!row)
242
+ return null;
243
+ return {
244
+ ok: !row.error,
245
+ deduped: true,
246
+ status: row.status,
247
+ published: row.published === 1,
248
+ attemptId: row.attempt_id,
249
+ contentFound: true,
250
+ ledgerError: row.error,
251
+ };
252
+ }
253
+ /**
254
+ * Whether an incoming callback may overwrite `content_items.fronts_publish_status`.
255
+ * `live` is the authoritative terminal-success marker (always reflected, never
256
+ * downgraded); older-by-occurred_at callbacks may not regress a newer marker.
257
+ */
258
+ function shouldApplyFrontsMarker(itemStatus, currentMarker, incomingStatus, incomingOccurredAt, latestSeenOccurredAt) {
259
+ if (incomingStatus === 'live')
260
+ return true;
261
+ if (itemStatus === 'published' || currentMarker === 'live')
262
+ return false;
263
+ if (incomingOccurredAt !== null &&
264
+ latestSeenOccurredAt !== null &&
265
+ incomingOccurredAt < latestSeenOccurredAt) {
266
+ return false;
267
+ }
268
+ return true;
269
+ }
270
+ /** Bounded, human-readable receipt digest recorded on the ledger surface receipt. */
271
+ function summarizeReceipt(receipt) {
272
+ if (!receipt)
273
+ return 'fronts:live';
274
+ const parts = [];
275
+ if (Array.isArray(receipt.published_urls) && receipt.published_urls.length > 0) {
276
+ parts.push(`urls=${receipt.published_urls.length}`);
277
+ }
278
+ if (Array.isArray(receipt.platform_post_ids) && receipt.platform_post_ids.length > 0) {
279
+ parts.push(`posts=${receipt.platform_post_ids.length}`);
280
+ }
281
+ if (typeof receipt.sha256 === 'string' && receipt.sha256.trim()) {
282
+ parts.push(`sha256=${receipt.sha256.trim().slice(0, 64)}`);
283
+ }
284
+ return `fronts:live ${parts.join(' ')}`.trim().slice(0, 500);
285
+ }
286
+ //# sourceMappingURL=fronts-publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fronts-publish.js","sourceRoot":"","sources":["../../src/engine/fronts-publish.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,18 @@ export { type ContributorInput, type ContributorRecord, listContributors, setCon
9
9
  export { runScheduledPublish, type ScheduledPublishResult } from './cron.js';
10
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
+ export { applyFrontsPublishCallback, FRONTS_PUBLISH_STATUSES, type FrontsPublishCallbackInput, type FrontsPublishCallbackResult, type FrontsPublishReceipt, type FrontsScheduleItem, isFrontsPublishEnabled, isFrontsPublishStatus, type ListFrontsPublishScheduleOptions, listFrontsPublishSchedule, } from './fronts-publish.js';
13
+ export { armFrontsPublishTriggerToken, type FrontsPublishContentRefs, type FrontsPublishIntent, FrontsPublishIntentError, type FrontsPublishIntentErrorCode, type FrontsPublishIntentFailure, frontsPublishTriggerTokenHash, type HydrateFrontsPublishIntentsResult, hydrateFrontsPublishIntents, setFrontsChannelTargets, } from './fronts-publish-intent.js';
12
14
  export { htmlToMarkdown, type ParsedImportItem, parseGhost, parseMarkdown, parseSubstackCsv, } from './import-parsers.js';
13
15
  export { type AcceptInviteInput, acceptInvite, type CreateInviteInput, type CreateInviteResult, createInvite, hashInviteToken, type InviteRecord, loadInviteByToken, } from './invites.js';
14
16
  export { listMembers, loadMembership, type MemberListEntry, type MembershipRecord, removeMember, setRole, type UpsertMastheadUserInput, upsertMastheadUser, } from './members.js';
15
17
  export { canChangeMemberRole, canRemoveMember, type MemberActionDecision, type MembershipSummary, ownerCount, } from './membership-rules.js';
16
18
  export { buildOgCardSpec, type OgCardSpec, type OgCardSpecOpts, type OgImageRenderer, } from './og-render.js';
17
19
  export { ContentArchiveImportLimitError, type ContentArchiveInput, type ContentArchiveItem, DEFAULT_PENDING_PUBLICATION_ATTEMPT_LIMIT, DEFAULT_PUBLICATION_SURFACE_HOOK_TIMEOUT_MS, type ImportContentArchiveOptions, type ImportContentArchiveResult, type ImportedArchiveItem, importContentArchive, type ListPendingPublicationAttemptsOptions, listPendingPublicationAttempts, MAX_PENDING_PUBLICATION_ATTEMPT_LIMIT, MAX_PUBLICATION_SURFACE_HOOK_TIMEOUT_MS, type PublicationAttempt, type PublicationAttemptState, PublicationInputError, PublicationNotFoundError, type PublicationOperation, PublicationPointerMoveError, type PublicationReconciler, PublicationReconciliationError, type PublicationReconciliationInput, type PublicationSurfaceCommitStatus, type PublicationSurfacePhase, type PublicationSurfaceReceipt, PublicationSurfaceRequirementError, type PublicationSurfaceStatus, type PublishOneInput, type PublishOneReceipt, publishOne, type RetryPublicationSurfacesInput, type RetryPublicationSurfacesReceipt, type RollbackPublicationInput, type RollbackPublicationReceipt, retryPublicationSurfaces, rollbackPublication, type SkippedArchiveItem, } from './publication.js';
20
+ export { acceptsProbeStatus, type ContinuityArchiveItem, type ContinuityDrift, type ContinuityDriftField, type ContinuityPublishedRow, isRetiredItem, payloadDrift, } from './publication-continuity.js';
21
+ export { CanonicalJsonError, canonicalJson, canonicalJsonBytes, canonicalJsonSha256, type JsonValue, } from './publication-receipt/canonical-json.js';
22
+ export { canonicalizeReceiptBody, PublicationReceiptError, SITE_PUBLICATION_RECEIPT_AUDIENCE, SITE_PUBLICATION_RECEIPT_SCHEMA, type SitePublicationReceiptBody, sitePublicationReceiptBodySchema, } from './publication-receipt/receipt.js';
23
+ export { type SignedPublicationReceipt, signPublicationReceipt, verifyPublicationReceipt, } from './publication-receipt/signature.js';
18
24
  export { evaluateArticleBody, type PublishGuardOptions, type PublishGuardOutcome, publishGuardResponseOrNull, } from './publish-guard.js';
19
25
  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
26
  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';
@@ -27,6 +33,7 @@ export { type SeoCheck, type SeoScoreInput, type SeoScoreResult, scoreDraft, } f
27
33
  export { buildContentPath, ensureTrailingSlash, normalizeSlug, slugify, stripTrailingSlash, } from './slug.js';
28
34
  export { applySlugRenameRedirects, clearSlugRedirect, recordSlugRedirect, } from './slug-redirects.js';
29
35
  export { listActiveIds, purgeContent, restoreContent, softDeleteContent, } from './soft-delete.js';
36
+ export { normalizeSourceSections, type SourceSectionNormalization, } from './source-sections.js';
30
37
  export { createTag, deleteTag, listTags, renameTag, searchTags, type TagSummary, } from './tags.js';
31
38
  export { type TaxonomyTag, utf8ByteLength, validateDeclaredTagList, validateRevisionTaxonomy, validateSingleDeclaredTag, validateStoredTaxonomyRows, } from './taxonomy.js';
32
39
  export { type UrlGuardResult, validateWebhookUrl } from './url-guard.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":"AAMA,OAAO,EAAE,KAAK,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEnE,OAAO,EACN,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,6BAA6B,EAC7B,KAAK,2BAA2B,GAChC,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,SAAS,EACT,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,eAAe,EACf,KAAK,0BAA0B,EAC/B,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,eAAe,EACf,KAAK,oBAAoB,EACzB,eAAe,GACf,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,YAAY,EACZ,aAAa,EACb,iBAAiB,GACjB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,KAAK,kBAAkB,EACvB,eAAe,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,EACN,KAAK,eAAe,EACpB,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,GACxB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,eAAe,GACf,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAE5E,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE3F,OAAO,EACN,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,iBAAiB,EACjB,KAAK,eAAe,EACpB,UAAU,GACV,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACN,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,gCAAgC,EACrC,yBAAyB,GACzB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACN,4BAA4B,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,wBAAwB,EACxB,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,6BAA6B,EAC7B,KAAK,iCAAiC,EACtC,2BAA2B,EAC3B,uBAAuB,GACvB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACN,cAAc,EACd,KAAK,gBAAgB,EACrB,UAAU,EACV,aAAa,EACb,gBAAgB,GAChB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACN,KAAK,iBAAiB,EACtB,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,YAAY,EACZ,eAAe,EACf,KAAK,YAAY,EACjB,iBAAiB,GACjB,MAAM,cAAc,CAAA;AAErB,OAAO,EACN,WAAW,EACX,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,YAAY,EACZ,OAAO,EACP,KAAK,uBAAuB,EAC5B,kBAAkB,GAClB,MAAM,cAAc,CAAA;AAErB,OAAO,EACN,mBAAmB,EACnB,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,UAAU,GACV,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACN,eAAe,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,GACpB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACN,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,yCAAyC,EACzC,2CAA2C,EAC3C,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,oBAAoB,EACpB,KAAK,qCAAqC,EAC1C,8BAA8B,EAC9B,qCAAqC,EACrC,uCAAuC,EACvC,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,oBAAoB,EACzB,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,8BAA8B,EAC9B,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,kCAAkC,EAClC,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,UAAU,EACV,KAAK,6BAA6B,EAClC,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,kBAAkB,GACvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACN,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,aAAa,EACb,YAAY,GACZ,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,SAAS,GACd,MAAM,yCAAyC,CAAA;AAChD,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,iCAAiC,EACjC,+BAA+B,EAC/B,KAAK,0BAA0B,EAC/B,gCAAgC,GAChC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACN,KAAK,wBAAwB,EAC7B,sBAAsB,EACtB,wBAAwB,GACxB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EACN,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,0BAA0B,GAC1B,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,2BAA2B,EAChC,oBAAoB,EACpB,gCAAgC,EAChC,+BAA+B,EAC/B,mCAAmC,EACnC,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,yBAAyB,EACzB,KAAK,6BAA6B,GAClC,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACN,KAAK,YAAY,EACjB,gCAAgC,EAChC,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,UAAU,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,6BAA6B,EAC7B,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,6BAA6B,EAC7B,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,kCAAkC,EAClC,KAAK,UAAU,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EACN,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,+BAA+B,EAC/B,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,+BAA+B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,wBAAwB,EACxB,4BAA4B,EAC5B,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GACb,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACN,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,KAAK,eAAe,EACpB,eAAe,GACf,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACN,qBAAqB,EACrB,KAAK,eAAe,EACpB,QAAQ,EACR,YAAY,EACZ,gBAAgB,GAChB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,KAAK,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE/E,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,UAAU,GACV,MAAM,UAAU,CAAA;AAEjB,OAAO,EACN,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,kBAAkB,GAClB,MAAM,WAAW,CAAA;AAElB,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACN,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,GACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACN,uBAAuB,EACvB,KAAK,0BAA0B,GAC/B,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACN,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,EACV,KAAK,UAAU,GACf,MAAM,WAAW,CAAA;AAClB,OAAO,EACN,KAAK,WAAW,EAChB,cAAc,EACd,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,GAC1B,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,KAAK,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExE,OAAO,EACN,KAAK,gBAAgB,EACrB,WAAW,EACX,sBAAsB,EACtB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,UAAU,GACV,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACN,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,GACpB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACN,KAAK,yBAAyB,EAC9B,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,GAClB,MAAM,eAAe,CAAA"}
@@ -21,6 +21,11 @@ export { listContributors, setContributors, } from './contributors.js';
21
21
  export { runScheduledPublish } from './cron.js';
22
22
  // Foundry dispatch + HMAC callback engine (P3 Task 5 / bead-08).
23
23
  export { applyFoundryCallback, dispatchToFoundry, verifyHmac, } from './foundry-dispatch.js';
24
+ // Fronts publish path — schedule poll + publish-callback receiver (additive, flag-gated).
25
+ export { applyFrontsPublishCallback, FRONTS_PUBLISH_STATUSES, isFrontsPublishEnabled, isFrontsPublishStatus, listFrontsPublishSchedule, } from './fronts-publish.js';
26
+ // Canonical Fronts publish INTENT contract — the CMS-owned canonical values a
27
+ // pull consumer needs to build a complete publish intent (packages#500).
28
+ export { armFrontsPublishTriggerToken, FrontsPublishIntentError, frontsPublishTriggerTokenHash, hydrateFrontsPublishIntents, setFrontsChannelTargets, } from './fronts-publish-intent.js';
24
29
  // Import parsers — pure string→struct transforms for Markdown/Ghost/Substack.
25
30
  export { htmlToMarkdown, parseGhost, parseMarkdown, parseSubstackCsv, } from './import-parsers.js';
26
31
  // Invite engine — workspace_invites (P7 Task 5).
@@ -33,6 +38,10 @@ export { canChangeMemberRole, canRemoveMember, ownerCount, } from './membership-
33
38
  export { buildOgCardSpec, } from './og-render.js';
34
39
  // Bounded one-item publication kernel.
35
40
  export { ContentArchiveImportLimitError, DEFAULT_PENDING_PUBLICATION_ATTEMPT_LIMIT, DEFAULT_PUBLICATION_SURFACE_HOOK_TIMEOUT_MS, importContentArchive, listPendingPublicationAttempts, MAX_PENDING_PUBLICATION_ATTEMPT_LIMIT, MAX_PUBLICATION_SURFACE_HOOK_TIMEOUT_MS, PublicationInputError, PublicationNotFoundError, PublicationPointerMoveError, PublicationReconciliationError, PublicationSurfaceRequirementError, publishOne, retryPublicationSurfaces, rollbackPublication, } from './publication.js';
41
+ export { acceptsProbeStatus, isRetiredItem, payloadDrift, } from './publication-continuity.js';
42
+ export { CanonicalJsonError, canonicalJson, canonicalJsonBytes, canonicalJsonSha256, } from './publication-receipt/canonical-json.js';
43
+ export { canonicalizeReceiptBody, PublicationReceiptError, SITE_PUBLICATION_RECEIPT_AUDIENCE, SITE_PUBLICATION_RECEIPT_SCHEMA, sitePublicationReceiptBodySchema, } from './publication-receipt/receipt.js';
44
+ export { signPublicationReceipt, verifyPublicationReceipt, } from './publication-receipt/signature.js';
36
45
  // Pre-publish body validation guard.
37
46
  export { evaluateArticleBody, publishGuardResponseOrNull, } from './publish-guard.js';
38
47
  // Bounded, pointer-selected public content read model.
@@ -56,6 +65,7 @@ export { buildContentPath, ensureTrailingSlash, normalizeSlug, slugify, stripTra
56
65
  export { applySlugRenameRedirects, clearSlugRedirect, recordSlugRedirect, } from './slug-redirects.js';
57
66
  // Soft-delete engine — softDeleteContent / restoreContent / purgeContent / listActiveIds.
58
67
  export { listActiveIds, purgeContent, restoreContent, softDeleteContent, } from './soft-delete.js';
68
+ export { normalizeSourceSections, } from './source-sections.js';
59
69
  // Tag CRUD engine — listTags / searchTags / renameTag / deleteTag.
60
70
  export { createTag, deleteTag, listTags, renameTag, searchTags, } from './tags.js';
61
71
  export { utf8ByteLength, validateDeclaredTagList, validateRevisionTaxonomy, validateSingleDeclaredTag, validateStoredTaxonomyRows, } from './taxonomy.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,uCAAuC;AAEvC,4EAA4E;AAC5E,OAAO,EAAsB,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACnE,oEAAoE;AACpE,OAAO,EACN,kBAAkB,EAGlB,kBAAkB,EAClB,wBAAwB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,6BAA6B,GAE7B,MAAM,2BAA2B,CAAA;AAClC,+DAA+D;AAC/D,OAAO,EAGN,SAAS,EAET,kBAAkB,EAClB,eAAe,EAEf,qBAAqB,EAErB,eAAe,EAEf,eAAe,GACf,MAAM,iBAAiB,CAAA;AACxB,gDAAgD;AAChD,OAAO,EAGN,YAAY,EACZ,aAAa,EACb,iBAAiB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,0DAA0D;AAC1D,OAAO,EAIN,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EAET,eAAe,GACf,MAAM,eAAe,CAAA;AACtB,0EAA0E;AAC1E,OAAO,EAEN,oBAAoB,EAGpB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,qEAAqE;AACrE,OAAO,EAGN,gBAAgB,EAChB,eAAe,GACf,MAAM,mBAAmB,CAAA;AAC1B,2BAA2B;AAC3B,OAAO,EAAE,mBAAmB,EAA+B,MAAM,WAAW,CAAA;AAG5E,iEAAiE;AACjE,OAAO,EACN,oBAAoB,EAGpB,iBAAiB,EAEjB,UAAU,GACV,MAAM,uBAAuB,CAAA;AAC9B,8EAA8E;AAC9E,OAAO,EACN,cAAc,EAEd,UAAU,EACV,aAAa,EACb,gBAAgB,GAChB,MAAM,qBAAqB,CAAA;AAC5B,iDAAiD;AACjD,OAAO,EAEN,YAAY,EAGZ,YAAY,EACZ,eAAe,EAEf,iBAAiB,GACjB,MAAM,cAAc,CAAA;AACrB,0EAA0E;AAC1E,OAAO,EACN,WAAW,EACX,cAAc,EAGd,YAAY,EACZ,OAAO,EAEP,kBAAkB,GAClB,MAAM,cAAc,CAAA;AACrB,uEAAuE;AACvE,OAAO,EACN,mBAAmB,EACnB,eAAe,EAGf,UAAU,GACV,MAAM,uBAAuB,CAAA;AAC9B,oEAAoE;AACpE,OAAO,EACN,eAAe,GAIf,MAAM,gBAAgB,CAAA;AACvB,uCAAuC;AACvC,OAAO,EACN,8BAA8B,EAG9B,yCAAyC,EACzC,2CAA2C,EAI3C,oBAAoB,EAEpB,8BAA8B,EAC9B,qCAAqC,EACrC,uCAAuC,EAGvC,qBAAqB,EACrB,wBAAwB,EAExB,2BAA2B,EAE3B,8BAA8B,EAK9B,kCAAkC,EAIlC,UAAU,EAKV,wBAAwB,EACxB,mBAAmB,GAEnB,MAAM,kBAAkB,CAAA;AACzB,qCAAqC;AACrC,OAAO,EACN,mBAAmB,EAGnB,0BAA0B,GAC1B,MAAM,oBAAoB,CAAA;AAC3B,uDAAuD;AACvD,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EAEzB,oBAAoB,EACpB,gCAAgC,EAChC,+BAA+B,EAC/B,mCAAmC,EAInC,yBAAyB,GAEzB,MAAM,wBAAwB,CAAA;AAC/B,oDAAoD;AACpD,OAAO,EAEN,gCAAgC,EAIhC,wBAAwB,EACxB,UAAU,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,6BAA6B,EAC7B,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EAGnB,6BAA6B,EAC7B,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,aAAa,EAEb,gBAAgB,EAChB,iBAAiB,EACjB,kCAAkC,GAElC,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,+EAA+E;AAC/E,OAAO,EAGN,oBAAoB,EACpB,kBAAkB,EAClB,+BAA+B,EAC/B,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,2BAA2B,EAC3B,+BAA+B,EAI/B,wBAAwB,EACxB,4BAA4B,EAE5B,qBAAqB,EAQrB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAIlB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GACb,MAAM,mBAAmB,CAAA;AAC1B,6DAA6D;AAC7D,OAAO,EAEN,uBAAuB,EACvB,WAAW,EACX,aAAa,EAEb,eAAe,GACf,MAAM,gBAAgB,CAAA;AACvB,sEAAsE;AACtE,OAAO,EACN,qBAAqB,EAErB,QAAQ,EACR,YAAY,EACZ,gBAAgB,GAChB,MAAM,eAAe,CAAA;AACtB,yEAAyE;AACzE,OAAO,EAA4B,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC/E,gEAAgE;AAChE,OAAO,EAIN,UAAU,GACV,MAAM,UAAU,CAAA;AACjB,gBAAgB;AAChB,OAAO,EACN,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,kBAAkB,GAClB,MAAM,WAAW,CAAA;AAClB,oCAAoC;AACpC,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,qBAAqB,CAAA;AAC5B,0FAA0F;AAC1F,OAAO,EACN,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,GACjB,MAAM,kBAAkB,CAAA;AACzB,mEAAmE;AACnE,OAAO,EACN,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,GAEV,MAAM,WAAW,CAAA;AAClB,OAAO,EAEN,cAAc,EACd,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,GAC1B,MAAM,eAAe,CAAA;AACtB,wFAAwF;AACxF,OAAO,EAAuB,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACxE,4EAA4E;AAC5E,OAAO,EAEN,WAAW,EACX,sBAAsB,EAOtB,mBAAmB,EACnB,UAAU,GACV,MAAM,sBAAsB,CAAA;AAC7B,mFAAmF;AACnF,OAAO,EACN,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,GACpB,MAAM,qBAAqB,CAAA;AAC5B,oFAAoF;AACpF,OAAO,EAEN,oBAAoB,EAEpB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,cAAc,GAId,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /** The archive-side fields a continuity run compares. */
2
+ export interface ContinuityArchiveItem {
3
+ title?: string | null;
4
+ description?: string | null;
5
+ featured?: boolean | null;
6
+ heroImageId?: string | null;
7
+ visibility?: string | null;
8
+ /** The archive's name for what the engine stores as `channel`. */
9
+ primaryCategory?: string | null;
10
+ bodyMarkdown?: string | null;
11
+ metadata?: {
12
+ originalStatus?: string | null;
13
+ } | null;
14
+ }
15
+ /** The joined `content_items` + published-revision row, as the engine stores it. */
16
+ export interface ContinuityPublishedRow {
17
+ rev_title?: string | null;
18
+ rev_description?: string | null;
19
+ rev_featured?: number | null;
20
+ rev_hero_image_id?: string | null;
21
+ rev_visibility?: string | null;
22
+ rev_channel?: string | null;
23
+ rev_body_markdown?: string | null;
24
+ }
25
+ export type ContinuityDriftField = 'title' | 'description' | 'featured' | 'heroImage' | 'visibility' | 'channel' | 'body';
26
+ export interface ContinuityDrift {
27
+ drifted: boolean;
28
+ fields: ContinuityDriftField[];
29
+ title: string;
30
+ description: string | null;
31
+ /** `content_items.featured` is INTEGER; the archive item carries a boolean. */
32
+ featured: 0 | 1;
33
+ heroImageId: string | null;
34
+ visibility: 'free' | 'premium';
35
+ channel: string | null;
36
+ body: string;
37
+ bodyDrifted: boolean;
38
+ }
39
+ /** An item the archive has taken down rather than published. */
40
+ export declare function isRetiredItem(item: ContinuityArchiveItem | null | undefined): boolean;
41
+ /**
42
+ * Compare the fields a reader actually sees against the published revision.
43
+ *
44
+ * The site renders from the published revision payload, so an edit to any field
45
+ * this does not examine is classified "already in sync", skipped, and never
46
+ * reaches a reader — while the run reports success. That has stranded real work
47
+ * twice: fourteen restored article bodies, and a `featured` flag flip, both
48
+ * merged, both reporting `failed=0`, neither ever visible.
49
+ *
50
+ * Comparison is exact rather than a length or prefix heuristic. The entire class
51
+ * of bug being prevented is a cheap test that silently misses a real edit: a
52
+ * false "stale" costs one idempotent republish, a false "in sync" loses the edit.
53
+ *
54
+ * NOT COMPARED: tags. The revision stores them canonicalized and sorted while
55
+ * the archive carries raw frontmatter strings, and the engine exports no
56
+ * canonicalizer to reuse. Detecting a field this cannot also REPAIR would be
57
+ * worse than not detecting it — tag writes go through the engine, so a tag-only
58
+ * drift would republish unchanged and stay stale on every run, forever.
59
+ */
60
+ export declare function payloadDrift(item: ContinuityArchiveItem, row: ContinuityPublishedRow): ContinuityDrift;
61
+ /**
62
+ * Whether a live probe response means the publication succeeded.
63
+ *
64
+ * LIVE → 200 only.
65
+ * RETIRED → 301/308 (redirected to a surviving twin) or 404 (gone, with no
66
+ * honest target to redirect to).
67
+ *
68
+ * The invariant: **a retired article must never answer 200.** That is the
69
+ * stale-row symptom a teardown exists to remove, and it is the only status this
70
+ * rejects for a retirement. Demanding 200 for retirements instead would fail the
71
+ * run forever on exactly the articles the archive deliberately took down.
72
+ *
73
+ * 301 and 308 are both permanent; a server may answer GET with one and other
74
+ * methods with the other, so both are accepted.
75
+ */
76
+ export declare function acceptsProbeStatus(status: number, retired: boolean): boolean;
77
+ //# sourceMappingURL=publication-continuity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publication-continuity.d.ts","sourceRoot":"","sources":["../../src/engine/publication-continuity.ts"],"names":[],"mappings":"AAUA,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAA;CACpD;AAED,oFAAoF;AACpF,MAAM,WAAW,sBAAsB;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,MAAM,oBAAoB,GAC7B,OAAO,GACP,aAAa,GACb,UAAU,GACV,WAAW,GACX,YAAY,GACZ,SAAS,GACT,MAAM,CAAA;AAET,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,oBAAoB,EAAE,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,+EAA+E;IAC/E,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;CACpB;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAErF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC3B,IAAI,EAAE,qBAAqB,EAC3B,GAAG,EAAE,sBAAsB,GACzB,eAAe,CAmCjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAG5E"}