@growth-labs/cms 0.8.18 → 0.8.20

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 (33) hide show
  1. package/dist/engine/content-insights.d.ts +27 -11
  2. package/dist/engine/content-insights.d.ts.map +1 -1
  3. package/dist/engine/content-insights.js +102 -53
  4. package/dist/engine/content-insights.js.map +1 -1
  5. package/dist/lib/publish-timezone.d.ts +38 -0
  6. package/dist/lib/publish-timezone.d.ts.map +1 -0
  7. package/dist/lib/publish-timezone.js +135 -0
  8. package/dist/lib/publish-timezone.js.map +1 -0
  9. package/dist/routes/content-insights.d.ts.map +1 -1
  10. package/dist/routes/content-insights.js +5 -2
  11. package/dist/routes/content-insights.js.map +1 -1
  12. package/dist/routes/content.d.ts.map +1 -1
  13. package/dist/routes/content.js +2 -102
  14. package/dist/routes/content.js.map +1 -1
  15. package/dist/schema/migrations.d.ts.map +1 -1
  16. package/dist/schema/migrations.js +7 -0
  17. package/dist/schema/migrations.js.map +1 -1
  18. package/dist/schema/types.d.ts +4 -1
  19. package/dist/schema/types.d.ts.map +1 -1
  20. package/dist/schema/types.js.map +1 -1
  21. package/dist/ui/inspector/PublishTab.d.ts +7 -1
  22. package/dist/ui/inspector/PublishTab.d.ts.map +1 -1
  23. package/dist/ui/inspector/PublishTab.js +24 -26
  24. package/dist/ui/inspector/PublishTab.js.map +1 -1
  25. package/migrations/0032_content_insight_publication_identity.sql +3 -0
  26. package/package.json +1 -1
  27. package/src/engine/content-insights.ts +142 -63
  28. package/src/lib/publish-timezone.ts +154 -0
  29. package/src/routes/content-insights.ts +6 -1
  30. package/src/routes/content.ts +5 -116
  31. package/src/schema/migrations.ts +7 -0
  32. package/src/schema/types.ts +4 -1
  33. package/src/ui/inspector/PublishTab.tsx +33 -25
@@ -21,23 +21,39 @@ export declare function dismissInsight(db: D1Database, siteId: string, intentKey
21
21
  /** Clear a dismissal so the intent reappears on the next board read. */
22
22
  export declare function undismissInsight(db: D1Database, siteId: string, intentKey: string): Promise<void>;
23
23
  export type ReplaceOutcome = 'applied' | 'duplicate' | 'stale';
24
+ /** Identity read from the committed run row, never echoed from the incoming request. */
25
+ export interface InsightPublicationIdentity {
26
+ eventId: string;
27
+ siteId: string;
28
+ runDate: string;
29
+ runAttempt: number;
30
+ runId: string | null;
31
+ contentHash: string;
32
+ /** RFC 8785 SHA-256 of the full validated {meta, rows}, including actual row content. */
33
+ payloadSha256: string | null;
34
+ /** Legacy rows have no digest/run identity and cannot confirm a duplicate. */
35
+ verified: boolean;
36
+ }
24
37
  export interface ReplaceResult {
25
38
  outcome: ReplaceOutcome;
26
39
  landedRunAttempt: number;
40
+ publication: InsightPublicationIdentity;
41
+ }
42
+ export declare class InsightPublicationError extends Error {
43
+ readonly code: 'publication_identity_conflict' | 'publication_identity_unverified';
44
+ constructor(code: 'publication_identity_conflict' | 'publication_identity_unverified');
27
45
  }
46
+ /** Only ingest references these columns; do not mask unrelated missing-column failures. */
47
+ export declare function isMissingInsightPublicationSchema(error: unknown): boolean;
28
48
  /**
29
- * Replay-safe replace of the board for (meta.site_id, meta.run_date).
30
- * - 'duplicate': meta.event_id already present in content_insight_runs.event_id → no-op.
31
- * - 'stale': an equal-or-higher run_attempt already landed for (site_id, run_date) → no-op
32
- * (HMAC authenticates the sender; run_attempt is the monotonic replay guard).
33
- * - 'applied': DELETE the existing board scoped by (site_id, run_date), bulk-insert rows
34
- * (mint id, run_id = meta.run_id, beat from payload, created_at = unixepoch()),
35
- * upsert the run row.
36
- * Dismissals are untouched — they live in their own table keyed (site_id, intent_key).
49
+ * Every eligibility read, guarded write and identity read executes in ONE D1 batch.
50
+ * The run table stays unchanged until the final mutation, so every DELETE/INSERT
51
+ * evaluates the same predicate against the same transaction state. D1 rolls back
52
+ * the entire batch on any failure. Dismissals are never touched.
37
53
  *
38
- * The INSERT carries 16 columns (id, site_id, run_id, run_date, desk, suggestion_type,
39
- * signal_type, is_best_bet, best_bet_rank, desk_rank, headline, evidence, brief,
40
- * intent_key, beat, created_at) matching migration 0016 column order.
54
+ * Current event IDs are immutable: exact replay is a no-op; divergent or legacy
55
+ * unverified reuse fails without writes. Once superseded, an old event has no
56
+ * historical dedupe promise; its original attempt remains stale.
41
57
  */
42
58
  export declare function replaceInsightsBoard(db: D1Database, payload: InsightsIngestPayload): Promise<ReplaceResult>;
43
59
  //# sourceMappingURL=content-insights.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-insights.d.ts","sourceRoot":"","sources":["../../src/engine/content-insights.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,KAAK,EACX,iBAAiB,EAEjB,0BAA0B,EAE1B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK9D;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvE;AAeD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAc9B;AAED,uGAAuG;AACvG,wBAAsB,cAAc,CACnC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,UAAU,EAAE,0BAA0B,EACtC,IAAI,EAAE,MAAM,GAAG,IAAI,GACjB,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wEAAwE;AACxE,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;AAC9D,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,cAAc,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACzC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,qBAAqB,GAC5B,OAAO,CAAC,aAAa,CAAC,CAmGxB"}
1
+ {"version":3,"file":"content-insights.d.ts","sourceRoot":"","sources":["../../src/engine/content-insights.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,KAAK,EACX,iBAAiB,EAEjB,0BAA0B,EAE1B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGzC,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK9D;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvE;AAeD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAc9B;AAED,uGAAuG;AACvG,wBAAsB,cAAc,CACnC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,UAAU,EAAE,0BAA0B,EACtC,IAAI,EAAE,MAAM,GAAG,IAAI,GACjB,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wEAAwE;AACxE,wBAAsB,gBAAgB,CACrC,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;AAE9D,wFAAwF;AACxF,MAAM,WAAW,0BAA0B;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,yFAAyF;IACzF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,cAAc,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,0BAA0B,CAAA;CACvC;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,+BAA+B,GAAG,iCAAiC;gBAAzE,IAAI,EAAE,+BAA+B,GAAG,iCAAiC;CAI9F;AAED,2FAA2F;AAC3F,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQzE;AAeD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACzC,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,qBAAqB,GAC5B,OAAO,CAAC,aAAa,CAAC,CAsIxB"}
@@ -1,3 +1,4 @@
1
+ import { canonicalJsonSha256 } from './publication-receipt/canonical-json.js';
1
2
  /** True when an Insights read/write depends on a table missing from an older schema. */
2
3
  export function isMissingInsightsTable(error) {
3
4
  return (error instanceof Error &&
@@ -57,73 +58,121 @@ export async function undismissInsight(db, siteId, intentKey) {
57
58
  .bind(siteId, intentKey)
58
59
  .run();
59
60
  }
61
+ export class InsightPublicationError extends Error {
62
+ code;
63
+ constructor(code) {
64
+ super(code);
65
+ this.code = code;
66
+ this.name = 'InsightPublicationError';
67
+ }
68
+ }
69
+ /** Only ingest references these columns; do not mask unrelated missing-column failures. */
70
+ export function isMissingInsightPublicationSchema(error) {
71
+ return (isMissingInsightsTable(error) ||
72
+ (error instanceof Error &&
73
+ /(?:no such table: content_insight_runs\b|no such column:\s*(?:publication_run_id|payload_sha256)\b|table\s+content_insight_runs\s+has no column named\s+(?:publication_run_id|payload_sha256)\b)/i.test(error.message)));
74
+ }
75
+ const publicationColumns = `event_id, site_id, run_date, run_attempt,
76
+ publication_run_id, content_hash, payload_sha256`;
60
77
  /**
61
- * Replay-safe replace of the board for (meta.site_id, meta.run_date).
62
- * - 'duplicate': meta.event_id already present in content_insight_runs.event_id → no-op.
63
- * - 'stale': an equal-or-higher run_attempt already landed for (site_id, run_date) → no-op
64
- * (HMAC authenticates the sender; run_attempt is the monotonic replay guard).
65
- * - 'applied': DELETE the existing board scoped by (site_id, run_date), bulk-insert rows
66
- * (mint id, run_id = meta.run_id, beat from payload, created_at = unixepoch()),
67
- * upsert the run row.
68
- * Dismissals are untouched — they live in their own table keyed (site_id, intent_key).
78
+ * Every eligibility read, guarded write and identity read executes in ONE D1 batch.
79
+ * The run table stays unchanged until the final mutation, so every DELETE/INSERT
80
+ * evaluates the same predicate against the same transaction state. D1 rolls back
81
+ * the entire batch on any failure. Dismissals are never touched.
69
82
  *
70
- * The INSERT carries 16 columns (id, site_id, run_id, run_date, desk, suggestion_type,
71
- * signal_type, is_best_bet, best_bet_rank, desk_rank, headline, evidence, brief,
72
- * intent_key, beat, created_at) matching migration 0016 column order.
83
+ * Current event IDs are immutable: exact replay is a no-op; divergent or legacy
84
+ * unverified reuse fails without writes. Once superseded, an old event has no
85
+ * historical dedupe promise; its original attempt remains stale.
73
86
  */
74
87
  export async function replaceInsightsBoard(db, payload) {
75
88
  const { meta, rows } = payload;
76
- // 1) event_id dedupe (mirrors foundry_callback_events).
77
- const dupEvent = await db
78
- .prepare('SELECT id FROM content_insight_runs WHERE event_id = ? LIMIT 1')
79
- .bind(meta.event_id)
80
- .first();
81
- if (dupEvent)
82
- return { outcome: 'duplicate', landedRunAttempt: meta.run_attempt };
83
- // 2) stale-replay guard: reject equal-or-lower run_attempt for (site_id, run_date).
84
- const existing = await db
85
- .prepare('SELECT id, run_attempt FROM content_insight_runs WHERE site_id = ? AND run_date = ? LIMIT 1')
86
- .bind(meta.site_id, meta.run_date)
87
- .first();
88
- if (existing && meta.run_attempt <= existing.run_attempt) {
89
- return { outcome: 'stale', landedRunAttempt: existing.run_attempt };
90
- }
89
+ const payloadSha256 = await canonicalJsonSha256(payload);
91
90
  const now = Math.floor(Date.now() / 1000);
92
- // 3) Scoped replace + bulk insert + run upsert in one D1 batch.
91
+ const eligible = `NOT EXISTS (SELECT 1 FROM content_insight_runs WHERE event_id = ?)
92
+ AND NOT EXISTS (SELECT 1 FROM content_insight_runs
93
+ WHERE site_id = ? AND run_date = ? AND run_attempt >= ?)`;
94
+ const eligibilityBindings = [meta.event_id, meta.site_id, meta.run_date, meta.run_attempt];
95
+ const currentPublication = db
96
+ .prepare(`SELECT ${publicationColumns} FROM content_insight_runs
97
+ WHERE site_id = ? AND run_date = ?`)
98
+ .bind(meta.site_id, meta.run_date);
93
99
  const statements = [
94
100
  db
95
- .prepare('DELETE FROM content_insights WHERE site_id = ? AND run_date = ?')
96
- .bind(meta.site_id, meta.run_date),
101
+ .prepare(`SELECT ${publicationColumns} FROM content_insight_runs WHERE event_id = ? LIMIT 2`)
102
+ .bind(meta.event_id),
103
+ currentPublication,
104
+ db
105
+ .prepare(`DELETE FROM content_insights WHERE site_id = ? AND run_date = ? AND ${eligible}`)
106
+ .bind(meta.site_id, meta.run_date, ...eligibilityBindings),
97
107
  ];
98
108
  for (const row of rows) {
99
- // 16 columns: id, site_id, run_id, run_date, desk, suggestion_type, signal_type,
100
- // is_best_bet, best_bet_rank, desk_rank, headline, evidence, brief,
101
- // intent_key, beat, created_at
102
109
  statements.push(db
103
110
  .prepare(`INSERT INTO content_insights
104
- (id, site_id, run_id, run_date, desk, suggestion_type, signal_type, is_best_bet,
105
- best_bet_rank, desk_rank, headline, evidence, brief, intent_key, beat, created_at)
106
- VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`)
107
- .bind(crypto.randomUUID(), row.site_id, meta.run_id, row.run_date, row.desk, row.suggestion_type, row.signal_type, row.is_best_bet, row.best_bet_rank, row.desk_rank, row.headline, JSON.stringify(row.evidence), JSON.stringify(row.brief), row.intent_key, row.beat, now));
111
+ (id, site_id, run_id, run_date, desk, suggestion_type, signal_type, is_best_bet,
112
+ best_bet_rank, desk_rank, headline, evidence, brief, intent_key, beat, created_at)
113
+ SELECT ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? WHERE ${eligible}`)
114
+ .bind(crypto.randomUUID(), row.site_id, meta.run_id, row.run_date, row.desk, row.suggestion_type, row.signal_type, row.is_best_bet, row.best_bet_rank, row.desk_rank, row.headline, JSON.stringify(row.evidence), JSON.stringify(row.brief), row.intent_key, row.beat, now, ...eligibilityBindings));
108
115
  }
109
- // Upsert the run row keyed on UNIQUE (site_id, run_date).
116
+ // This MUST be the final mutation: preceding row writes share its eligibility.
110
117
  statements.push(db
111
118
  .prepare(`INSERT INTO content_insight_runs
112
- (id, site_id, run_date, status, event_id, run_attempt, generated_at, content_hash,
113
- demand_count, opportunity_count, started_at, completed_at, error)
114
- VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
115
- ON CONFLICT(site_id, run_date) DO UPDATE SET
116
- status = excluded.status,
117
- event_id = excluded.event_id,
118
- run_attempt = excluded.run_attempt,
119
- generated_at = excluded.generated_at,
120
- content_hash = excluded.content_hash,
121
- demand_count = excluded.demand_count,
122
- opportunity_count = excluded.opportunity_count,
123
- completed_at = excluded.completed_at,
124
- error = excluded.error`)
125
- .bind(existing?.id ?? crypto.randomUUID(), meta.site_id, meta.run_date, meta.status, meta.event_id, meta.run_attempt, meta.generated_at, meta.content_hash, meta.counts.demand_count, meta.counts.opportunity_count, now, meta.status === 'completed' || meta.status === 'partial' ? now : null, meta.error ?? null));
126
- await db.batch(statements);
127
- return { outcome: 'applied', landedRunAttempt: meta.run_attempt };
119
+ (id, site_id, run_date, status, event_id, run_attempt, generated_at, content_hash,
120
+ demand_count, opportunity_count, started_at, completed_at, error,
121
+ publication_run_id, payload_sha256)
122
+ SELECT ?,?,?,?,?,?,?,?,?,?,?,?,?,?,? WHERE ${eligible}
123
+ ON CONFLICT(site_id, run_date) DO UPDATE SET
124
+ status = excluded.status,
125
+ event_id = excluded.event_id,
126
+ run_attempt = excluded.run_attempt,
127
+ generated_at = excluded.generated_at,
128
+ content_hash = excluded.content_hash,
129
+ demand_count = excluded.demand_count,
130
+ opportunity_count = excluded.opportunity_count,
131
+ completed_at = excluded.completed_at,
132
+ error = excluded.error,
133
+ publication_run_id = excluded.publication_run_id,
134
+ payload_sha256 = excluded.payload_sha256`)
135
+ .bind(crypto.randomUUID(), meta.site_id, meta.run_date, meta.status, meta.event_id, meta.run_attempt, meta.generated_at, meta.content_hash, meta.counts.demand_count, meta.counts.opportunity_count, now, meta.status === 'completed' || meta.status === 'partial' ? now : null, meta.error ?? null, meta.run_id, payloadSha256, ...eligibilityBindings), currentPublication);
136
+ const results = await db.batch(statements);
137
+ const events = (results[0].results ?? []);
138
+ const previous = results[1].results?.[0];
139
+ if (events.length > 0) {
140
+ const event = events[0];
141
+ if (events.length !== 1 ||
142
+ event.site_id !== meta.site_id ||
143
+ event.run_date !== meta.run_date ||
144
+ event.run_attempt !== meta.run_attempt ||
145
+ event.content_hash !== meta.content_hash ||
146
+ (event.publication_run_id !== null && event.publication_run_id !== meta.run_id)) {
147
+ throw new InsightPublicationError('publication_identity_conflict');
148
+ }
149
+ if (event.payload_sha256 === null || event.publication_run_id === null) {
150
+ throw new InsightPublicationError('publication_identity_unverified');
151
+ }
152
+ if (event.payload_sha256 !== payloadSha256) {
153
+ throw new InsightPublicationError('publication_identity_conflict');
154
+ }
155
+ }
156
+ const committed = results[results.length - 1].results?.[0];
157
+ if (!committed)
158
+ throw new Error('Missing committed insight publication');
159
+ return {
160
+ outcome: events.length
161
+ ? 'duplicate'
162
+ : previous && previous.run_attempt >= meta.run_attempt
163
+ ? 'stale'
164
+ : 'applied',
165
+ landedRunAttempt: committed.run_attempt,
166
+ publication: {
167
+ eventId: committed.event_id,
168
+ siteId: committed.site_id,
169
+ runDate: committed.run_date,
170
+ runAttempt: committed.run_attempt,
171
+ runId: committed.publication_run_id,
172
+ contentHash: committed.content_hash,
173
+ payloadSha256: committed.payload_sha256,
174
+ verified: committed.payload_sha256 !== null && committed.publication_run_id !== null,
175
+ },
176
+ };
128
177
  }
129
178
  //# sourceMappingURL=content-insights.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-insights.js","sourceRoot":"","sources":["../../src/engine/content-insights.ts"],"names":[],"mappings":"AASA,wFAAwF;AACxF,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACpD,OAAO,CACN,KAAK,YAAY,KAAK;QACtB,mEAAmE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CACvF,CAAA;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAAC,KAAc;IAC7D,IAAI,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9C,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3C,OAAO,iIAAiI,CAAC,IAAI,CAC5I,KAAK,CAAC,OAAO,CACb,CAAA;AACF,CAAC;AAOD,SAAS,SAAS,CAAC,GAAkB;IACpC,OAAO;QACN,GAAG,GAAG;QACN,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAoB;QACrD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAiB;KAC5C,CAAA;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,EAAc,EACd,MAAc,EACd,OAAe;IAEf,MAAM,MAAM,GAAG,MAAM,EAAE;SACrB,OAAO,CACP;;;;;;kFAM+E,CAC/E;SACA,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;SACrB,GAAG,EAAiB,CAAA;IACtB,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAC7C,CAAC;AAED,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,EAAc,EACd,MAAc,EACd,SAAiB,EACjB,WAA0B,EAC1B,UAAsC,EACtC,IAAmB;IAEnB,MAAM,EAAE;SACN,OAAO,CACP;;wCAEqC,CACrC;SACA,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC;SACtD,GAAG,EAAE,CAAA;AACR,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,EAAc,EACd,MAAc,EACd,SAAiB;IAEjB,MAAM,EAAE;SACN,OAAO,CAAC,6EAA6E,CAAC;SACtF,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;SACvB,GAAG,EAAE,CAAA;AACR,CAAC;AAQD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,EAAc,EACd,OAA8B;IAE9B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAE9B,wDAAwD;IACxD,MAAM,QAAQ,GAAG,MAAM,EAAE;SACvB,OAAO,CAAC,gEAAgE,CAAC;SACzE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;SACnB,KAAK,EAAkB,CAAA;IACzB,IAAI,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,CAAA;IAEjF,oFAAoF;IACpF,MAAM,QAAQ,GAAG,MAAM,EAAE;SACvB,OAAO,CACP,6FAA6F,CAC7F;SACA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;SACjC,KAAK,EAAuC,CAAA;IAC9C,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAA;IACpE,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAEzC,gEAAgE;IAChE,MAAM,UAAU,GAAG;QAClB,EAAE;aACA,OAAO,CAAC,iEAAiE,CAAC;aAC1E,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;KACnC,CAAA;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,iFAAiF;QACjF,oEAAoE;QACpE,+BAA+B;QAC/B,UAAU,CAAC,IAAI,CACd,EAAE;aACA,OAAO,CACP;;;+CAG0C,CAC1C;aACA,IAAI,CACJ,MAAM,CAAC,UAAU,EAAE,EACnB,GAAG,CAAC,OAAO,EACX,IAAI,CAAC,MAAM,EACX,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,eAAe,EACnB,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,QAAQ,EACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EACzB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,IAAI,EACR,GAAG,CACH,CACF,CAAA;IACF,CAAC;IACD,0DAA0D;IAC1D,UAAU,CAAC,IAAI,CACd,EAAE;SACA,OAAO,CACP;;;;;;;;;;;;;8BAa0B,CAC1B;SACA,IAAI,CACJ,QAAQ,EAAE,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,EACnC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAC7B,GAAG,EACH,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EACrE,IAAI,CAAC,KAAK,IAAI,IAAI,CAClB,CACF,CAAA;IAED,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,CAAA;AAClE,CAAC"}
1
+ {"version":3,"file":"content-insights.js","sourceRoot":"","sources":["../../src/engine/content-insights.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Publication-timezone helpers — ONE implementation, shared by the schedule
3
+ * route and the Publish tab.
4
+ *
5
+ * Why this module exists: the editor types a wall-clock time and expects the
6
+ * post to go out at that time in the publication's timezone. That only holds
7
+ * if the digits the UI DISPLAYS and the zone it SAVES agree. When they
8
+ * disagreed, every resave shifted `publish_at` by the zone offset — including
9
+ * an incidental resave that never touched the field (the 2026-09-08 P0). So
10
+ * display and entry must use the same converter as the server, not a second
11
+ * copy of the arithmetic.
12
+ */
13
+ /** Fronts default; the server falls back to this when no zone is configured. */
14
+ export declare const PUBLISH_TIMEZONE_FALLBACK = "Europe/Paris";
15
+ type LocalDateTimeParts = {
16
+ year: number;
17
+ month: number;
18
+ day: number;
19
+ hour: number;
20
+ minute: number;
21
+ };
22
+ export declare function parseLocalDateTime(value: string): LocalDateTimeParts | null;
23
+ export declare function getZonedParts(instantMs: number, timeZone: string): LocalDateTimeParts | null;
24
+ export declare function isValidTimeZone(timeZone: string): boolean;
25
+ export declare function getTimeZoneOffsetMs(instantMs: number, timeZone: string): number | null;
26
+ export declare function parseLocalDateTimeInZoneToUnixSeconds(value: string, timeZone: string): number | null;
27
+ /**
28
+ * Inverse of `parseLocalDateTimeInZoneToUnixSeconds`: render an instant as the
29
+ * wall-clock digits an editor in `timeZone` would read, split for the date and
30
+ * time inputs. Returns null when the zone is unusable, so callers can fall back
31
+ * rather than silently display a wrong hour.
32
+ */
33
+ export declare function formatInstantInZone(instantMs: number, timeZone: string): {
34
+ date: string;
35
+ time: string;
36
+ } | null;
37
+ export {};
38
+ //# sourceMappingURL=publish-timezone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-timezone.d.ts","sourceRoot":"","sources":["../../src/lib/publish-timezone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,iBAAiB,CAAA;AAKvD,KAAK,kBAAkB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAiC3E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAuB5F;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOzD;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKtF;AAED,wBAAgB,qCAAqC,CACpD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAkCf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQvC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Publication-timezone helpers — ONE implementation, shared by the schedule
3
+ * route and the Publish tab.
4
+ *
5
+ * Why this module exists: the editor types a wall-clock time and expects the
6
+ * post to go out at that time in the publication's timezone. That only holds
7
+ * if the digits the UI DISPLAYS and the zone it SAVES agree. When they
8
+ * disagreed, every resave shifted `publish_at` by the zone offset — including
9
+ * an incidental resave that never touched the field (the 2026-09-08 P0). So
10
+ * display and entry must use the same converter as the server, not a second
11
+ * copy of the arithmetic.
12
+ */
13
+ /** Fronts default; the server falls back to this when no zone is configured. */
14
+ export const PUBLISH_TIMEZONE_FALLBACK = 'Europe/Paris';
15
+ /** `YYYY-MM-DDTHH:MM` exactly — the shape the date and time inputs produce. */
16
+ const LOCAL_DATE_TIME_RE = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})$/;
17
+ export function parseLocalDateTime(value) {
18
+ const match = LOCAL_DATE_TIME_RE.exec(value);
19
+ if (!match)
20
+ return null;
21
+ const [, y, m, d, h, min] = match;
22
+ const parts = {
23
+ year: Number.parseInt(y, 10),
24
+ month: Number.parseInt(m, 10),
25
+ day: Number.parseInt(d, 10),
26
+ hour: Number.parseInt(h, 10),
27
+ minute: Number.parseInt(min, 10),
28
+ };
29
+ if (!Number.isInteger(parts.year) ||
30
+ parts.month < 1 ||
31
+ parts.month > 12 ||
32
+ parts.day < 1 ||
33
+ parts.day > 31 ||
34
+ parts.hour < 0 ||
35
+ parts.hour > 23 ||
36
+ parts.minute < 0 ||
37
+ parts.minute > 59) {
38
+ return null;
39
+ }
40
+ const dateCheck = new Date(Date.UTC(parts.year, parts.month - 1, parts.day));
41
+ if (dateCheck.getUTCFullYear() !== parts.year ||
42
+ dateCheck.getUTCMonth() + 1 !== parts.month ||
43
+ dateCheck.getUTCDate() !== parts.day) {
44
+ return null;
45
+ }
46
+ return parts;
47
+ }
48
+ export function getZonedParts(instantMs, timeZone) {
49
+ if (!isValidTimeZone(timeZone))
50
+ return null;
51
+ const formatter = new Intl.DateTimeFormat('en-US', {
52
+ timeZone,
53
+ hour12: false,
54
+ year: 'numeric',
55
+ month: '2-digit',
56
+ day: '2-digit',
57
+ hour: '2-digit',
58
+ minute: '2-digit',
59
+ second: '2-digit',
60
+ });
61
+ const values = { year: '', month: '', day: '', hour: '', minute: '', second: '' };
62
+ for (const part of formatter.formatToParts(new Date(instantMs))) {
63
+ if (part.type in values)
64
+ values[part.type] = part.value;
65
+ }
66
+ const year = Number.parseInt(values.year, 10);
67
+ const month = Number.parseInt(values.month, 10);
68
+ const day = Number.parseInt(values.day, 10);
69
+ const hour = Number.parseInt(values.hour, 10);
70
+ const minute = Number.parseInt(values.minute, 10);
71
+ if (![year, month, day, hour, minute].every(Number.isFinite))
72
+ return null;
73
+ return { year, month, day, hour, minute };
74
+ }
75
+ export function isValidTimeZone(timeZone) {
76
+ try {
77
+ new Intl.DateTimeFormat('en-US', { timeZone }).format(new Date());
78
+ return true;
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ }
84
+ export function getTimeZoneOffsetMs(instantMs, timeZone) {
85
+ const zoned = getZonedParts(instantMs, timeZone);
86
+ if (!zoned)
87
+ return null;
88
+ const asUtc = Date.UTC(zoned.year, zoned.month - 1, zoned.day, zoned.hour, zoned.minute, 0);
89
+ return asUtc - instantMs;
90
+ }
91
+ export function parseLocalDateTimeInZoneToUnixSeconds(value, timeZone) {
92
+ const target = parseLocalDateTime(value);
93
+ if (!target)
94
+ return null;
95
+ const targetUtcMs = Date.UTC(target.year, target.month - 1, target.day, target.hour, target.minute, 0);
96
+ let candidateMs = targetUtcMs;
97
+ for (let i = 0; i < 5; i += 1) {
98
+ const offsetMs = getTimeZoneOffsetMs(candidateMs, timeZone);
99
+ if (offsetMs === null)
100
+ return null;
101
+ const next = targetUtcMs - offsetMs;
102
+ if (Math.abs(next - candidateMs) < 1000) {
103
+ candidateMs = next;
104
+ break;
105
+ }
106
+ candidateMs = next;
107
+ }
108
+ const resolved = getZonedParts(candidateMs, timeZone);
109
+ if (!resolved ||
110
+ resolved.year !== target.year ||
111
+ resolved.month !== target.month ||
112
+ resolved.day !== target.day ||
113
+ resolved.hour !== target.hour ||
114
+ resolved.minute !== target.minute) {
115
+ return null;
116
+ }
117
+ return Math.floor(candidateMs / 1000);
118
+ }
119
+ /**
120
+ * Inverse of `parseLocalDateTimeInZoneToUnixSeconds`: render an instant as the
121
+ * wall-clock digits an editor in `timeZone` would read, split for the date and
122
+ * time inputs. Returns null when the zone is unusable, so callers can fall back
123
+ * rather than silently display a wrong hour.
124
+ */
125
+ export function formatInstantInZone(instantMs, timeZone) {
126
+ const parts = getZonedParts(instantMs, timeZone);
127
+ if (!parts)
128
+ return null;
129
+ const pad = (n, width = 2) => String(n).padStart(width, '0');
130
+ return {
131
+ date: `${pad(parts.year, 4)}-${pad(parts.month)}-${pad(parts.day)}`,
132
+ time: `${pad(parts.hour)}:${pad(parts.minute)}`,
133
+ };
134
+ }
135
+ //# sourceMappingURL=publish-timezone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-timezone.js","sourceRoot":"","sources":["../../src/lib/publish-timezone.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"content-insights.d.ts","sourceRoot":"","sources":["../../src/routes/content-insights.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAQ,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAkDtD,MAAM,WAAW,0BAA2B,SAAQ,cAAc;IACjE,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC5C,0FAA0F;IAC1F,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3C,6FAA6F;IAC7F,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7C,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/C,iFAAiF;IACjF,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC5C;;;;;;;OAOG;IACH,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACpD;AAiBD,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,0BAA0B,GAChC,4BAA4B,CA2I9B"}
1
+ {"version":3,"file":"content-insights.d.ts","sourceRoot":"","sources":["../../src/routes/content-insights.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAQ,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAkDtD,MAAM,WAAW,0BAA2B,SAAQ,cAAc;IACjE,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC5C,0FAA0F;IAC1F,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3C,6FAA6F;IAC7F,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC7C,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC/C,iFAAiF;IACjF,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC5C;;;;;;;OAOG;IACH,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACpD;AAiBD,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,0BAA0B,GAChC,4BAA4B,CA8I9B"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { dismissInsight, isMissingInsightDismissalSchema, isMissingInsightsTable, listInsightBoard, replaceInsightsBoard, undismissInsight, } from '../engine/content-insights.js';
2
+ import { dismissInsight, InsightPublicationError, isMissingInsightDismissalSchema, isMissingInsightPublicationSchema, isMissingInsightsTable, listInsightBoard, replaceInsightsBoard, undismissInsight, } from '../engine/content-insights.js';
3
3
  import { verifyHmac } from '../engine/foundry-dispatch.js';
4
4
  import { InsightsIngestPayloadSchema } from '../schema/insights-ingest.js';
5
5
  import { InsightDismissalReasonCodeSchema } from '../schema/types.js';
@@ -153,11 +153,14 @@ export function createContentInsightsRoutes(config) {
153
153
  ok: true,
154
154
  outcome: result.outcome,
155
155
  landedRunAttempt: result.landedRunAttempt,
156
+ publication: result.publication,
156
157
  });
157
158
  }
158
159
  catch (error) {
159
- if (isMissingInsightsTable(error))
160
+ if (isMissingInsightPublicationSchema(error))
160
161
  return json({ error: 'schema_not_ready' }, 409);
162
+ if (error instanceof InsightPublicationError)
163
+ return json({ error: error.code }, 409);
161
164
  throw error;
162
165
  }
163
166
  },
@@ -1 +1 @@
1
- {"version":3,"file":"content-insights.js","sourceRoot":"","sources":["../../src/routes/content-insights.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-insights.js","sourceRoot":"","sources":["../../src/routes/content-insights.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/routes/content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/routes/content.ts"],"names":[],"mappings":"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"}