@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.
- package/dist/engine/content-insights.d.ts +27 -11
- package/dist/engine/content-insights.d.ts.map +1 -1
- package/dist/engine/content-insights.js +102 -53
- package/dist/engine/content-insights.js.map +1 -1
- package/dist/lib/publish-timezone.d.ts +38 -0
- package/dist/lib/publish-timezone.d.ts.map +1 -0
- package/dist/lib/publish-timezone.js +135 -0
- package/dist/lib/publish-timezone.js.map +1 -0
- package/dist/routes/content-insights.d.ts.map +1 -1
- package/dist/routes/content-insights.js +5 -2
- package/dist/routes/content-insights.js.map +1 -1
- package/dist/routes/content.d.ts.map +1 -1
- package/dist/routes/content.js +2 -102
- package/dist/routes/content.js.map +1 -1
- package/dist/schema/migrations.d.ts.map +1 -1
- package/dist/schema/migrations.js +7 -0
- package/dist/schema/migrations.js.map +1 -1
- package/dist/schema/types.d.ts +4 -1
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js.map +1 -1
- package/dist/ui/inspector/PublishTab.d.ts +7 -1
- package/dist/ui/inspector/PublishTab.d.ts.map +1 -1
- package/dist/ui/inspector/PublishTab.js +24 -26
- package/dist/ui/inspector/PublishTab.js.map +1 -1
- package/migrations/0032_content_insight_publication_identity.sql +3 -0
- package/package.json +1 -1
- package/src/engine/content-insights.ts +142 -63
- package/src/lib/publish-timezone.ts +154 -0
- package/src/routes/content-insights.ts +6 -1
- package/src/routes/content.ts +5 -116
- package/src/schema/migrations.ts +7 -0
- package/src/schema/types.ts +4 -1
- 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
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
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
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
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;
|
|
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
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
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
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
96
|
-
.bind(meta.
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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":"
|
|
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":"
|
|
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 (
|
|
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":"
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/routes/content.ts"],"names":[],"mappings":"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"}
|