@growth-labs/cms 0.8.38 → 0.8.40
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/fronts-publish.d.ts +29 -0
- package/dist/engine/fronts-publish.d.ts.map +1 -1
- package/dist/engine/fronts-publish.js +58 -0
- package/dist/engine/fronts-publish.js.map +1 -1
- package/dist/engine/publication-current-guard.d.ts +19 -0
- package/dist/engine/publication-current-guard.d.ts.map +1 -1
- package/dist/engine/publication-current-guard.js +75 -0
- package/dist/engine/publication-current-guard.js.map +1 -1
- package/dist/engine/publisher.d.ts +3 -0
- package/dist/engine/publisher.d.ts.map +1 -1
- package/dist/engine/publisher.js +15 -2
- package/dist/engine/publisher.js.map +1 -1
- package/dist/foundry-emit.d.ts +59 -6
- package/dist/foundry-emit.d.ts.map +1 -1
- package/dist/foundry-emit.js +16 -1
- package/dist/foundry-emit.js.map +1 -1
- package/dist/routes/content-insights.d.ts.map +1 -1
- package/dist/routes/content-insights.js +6 -0
- package/dist/routes/content-insights.js.map +1 -1
- package/dist/routes/content.d.ts +3 -0
- package/dist/routes/content.d.ts.map +1 -1
- package/dist/routes/content.js +1 -0
- package/dist/routes/content.js.map +1 -1
- package/dist/routes/foundry-publish.d.ts.map +1 -1
- package/dist/routes/foundry-publish.js +101 -12
- package/dist/routes/foundry-publish.js.map +1 -1
- package/dist/routes/fronts-publish.d.ts +2 -0
- package/dist/routes/fronts-publish.d.ts.map +1 -1
- package/dist/routes/fronts-publish.js +47 -1
- package/dist/routes/fronts-publish.js.map +1 -1
- package/dist/routes/media-lib.d.ts +2 -0
- package/dist/routes/media-lib.d.ts.map +1 -1
- package/dist/routes/media-lib.js +6 -0
- package/dist/routes/media-lib.js.map +1 -1
- package/dist/schema/insights-ingest.d.ts +88 -88
- package/dist/ui/api/fronts/publish-callback.d.ts +1 -0
- package/dist/ui/api/fronts/publish-callback.d.ts.map +1 -1
- package/dist/ui/api/fronts/publish-callback.js +1 -0
- package/dist/ui/api/fronts/publish-callback.js.map +1 -1
- package/dist/ui/editor/extensions.d.ts +1 -1
- package/dist/ui/editor/extensions.d.ts.map +1 -1
- package/dist/ui/editor/extensions.js +15 -1
- package/dist/ui/editor/extensions.js.map +1 -1
- package/dist/ui/editor/heading-level.d.ts +4 -0
- package/dist/ui/editor/heading-level.d.ts.map +1 -0
- package/dist/ui/editor/heading-level.js +13 -0
- package/dist/ui/editor/heading-level.js.map +1 -0
- package/dist/ui/editor/portable-text.d.ts.map +1 -1
- package/dist/ui/editor/portable-text.js +3 -2
- package/dist/ui/editor/portable-text.js.map +1 -1
- package/dist/ui/editor/serialize.d.ts.map +1 -1
- package/dist/ui/editor/serialize.js +4 -3
- package/dist/ui/editor/serialize.js.map +1 -1
- package/dist/ui/preview/SitePreviewFrame.d.ts +11 -0
- package/dist/ui/preview/SitePreviewFrame.d.ts.map +1 -0
- package/dist/ui/preview/SitePreviewFrame.js +86 -0
- package/dist/ui/preview/SitePreviewFrame.js.map +1 -0
- package/dist/ui/preview/preview-layout.d.ts +6 -0
- package/dist/ui/preview/preview-layout.d.ts.map +1 -1
- package/dist/ui/preview/preview-layout.js +15 -0
- package/dist/ui/preview/preview-layout.js.map +1 -1
- package/dist/ui/screens/EditorScreen.d.ts.map +1 -1
- package/dist/ui/screens/EditorScreen.js +61 -25
- package/dist/ui/screens/EditorScreen.js.map +1 -1
- package/dist/ui/screens/public-url.d.ts +12 -0
- package/dist/ui/screens/public-url.d.ts.map +1 -1
- package/dist/ui/screens/public-url.js +30 -0
- package/dist/ui/screens/public-url.js.map +1 -1
- package/package.json +1 -1
- package/src/engine/fronts-publish.ts +88 -0
- package/src/engine/publication-current-guard.ts +103 -0
- package/src/engine/publisher.ts +22 -3
- package/src/foundry-emit.ts +17 -0
- package/src/routes/content-insights.ts +6 -0
- package/src/routes/content.ts +4 -0
- package/src/routes/foundry-publish.ts +134 -12
- package/src/routes/fronts-publish.ts +57 -0
- package/src/routes/media-lib.ts +6 -0
- package/src/ui/api/fronts/publish-callback.ts +3 -0
- package/src/ui/editor/extensions.ts +16 -1
- package/src/ui/editor/heading-level.ts +14 -0
- package/src/ui/editor/portable-text.ts +3 -2
- package/src/ui/editor/serialize.ts +4 -3
- package/src/ui/preview/SitePreviewFrame.tsx +111 -0
- package/src/ui/preview/preview-layout.ts +17 -0
- package/src/ui/screens/EditorScreen.tsx +76 -27
- package/src/ui/screens/public-url.ts +36 -0
|
@@ -3,25 +3,27 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
//
|
|
4
4
|
// Ported from editor.jsx:
|
|
5
5
|
// - Header: back-to-Content, type icon, status pill, autosaved indicator,
|
|
6
|
-
// preview-position segment (right/bottom/off), Preview (
|
|
7
|
-
// Publish action
|
|
6
|
+
// preview-position segment (right/bottom/off), Preview (real-site draft in
|
|
7
|
+
// a new tab), Publish action
|
|
8
8
|
// - Work area: <ContentForm/> in the main column + 340px empty P3 inspector slot
|
|
9
|
-
// - Live-preview pane:
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
9
|
+
// - Live-preview pane: the real site's draft render (<SitePreviewFrame/>,
|
|
10
|
+
// `previewUrlFor`) at true device widths, reloaded after every save; types
|
|
11
|
+
// the site cannot render as a draft keep the approximate <DraftPage/>
|
|
12
|
+
// - "Preview" saves, then opens the same real-site draft render in a new tab
|
|
13
13
|
// - New docs (docRef.id === null) create on first save via ContentForm; the
|
|
14
14
|
// onDocCreated callback swaps to update mode
|
|
15
15
|
//
|
|
16
16
|
// Compile-gated (tsc, jsx: react-jsx). No vitest tests needed for this file —
|
|
17
17
|
// ContentForm/DraftPage/preview-layout are tested separately; the Tiptap Rte
|
|
18
18
|
// is Playwright-smoked only.
|
|
19
|
-
import { useCallback, useState } from 'react';
|
|
19
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
20
20
|
import { buildSharePrefill, ShareModal } from '../components/ShareModal.js';
|
|
21
21
|
import { ContentForm, } from '../editor/ContentForm.js';
|
|
22
22
|
import { Icon } from '../icons.js';
|
|
23
23
|
import { Inspector } from '../inspector/Inspector.js';
|
|
24
24
|
import { DraftPage } from '../preview/draft-page.js';
|
|
25
|
+
import { SitePreviewFrame } from '../preview/SitePreviewFrame.js';
|
|
26
|
+
import { hasSitePreview, previewUrlFor } from './public-url.js';
|
|
25
27
|
const CONTENT_TYPE_LABELS = {
|
|
26
28
|
article: 'Article',
|
|
27
29
|
video: 'Video',
|
|
@@ -103,24 +105,51 @@ export function EditorScreen({ docRef, onClose, allowInlineAuthorCreation = true
|
|
|
103
105
|
const [headerTitle, setHeaderTitle] = useState('');
|
|
104
106
|
// Share modal — true when the Share button is clicked in the editor header
|
|
105
107
|
const [shareOpen, setShareOpen] = useState(false);
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return;
|
|
115
|
-
const body = (await res.json());
|
|
116
|
-
const url = body.url ?? body.token;
|
|
117
|
-
if (url)
|
|
118
|
-
window.open(url, '_blank');
|
|
108
|
+
// The real-site preview follows the slug as last SAVED, so typing a new slug
|
|
109
|
+
// does not point the frame at a URL the draft does not answer to yet.
|
|
110
|
+
const latestSlug = useRef(previewDoc.slug);
|
|
111
|
+
latestSlug.current = previewDoc.slug;
|
|
112
|
+
const [savedSlug, setSavedSlug] = useState('');
|
|
113
|
+
useEffect(() => {
|
|
114
|
+
if (!savedSlug && previewDoc.slug && saveState.lastSavedAt === null) {
|
|
115
|
+
setSavedSlug(previewDoc.slug);
|
|
119
116
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
117
|
+
}, [previewDoc.slug, savedSlug, saveState.lastSavedAt]);
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
if (saveState.lastSavedAt !== null)
|
|
120
|
+
setSavedSlug(latestSlug.current);
|
|
121
|
+
}, [saveState.lastSavedAt]);
|
|
122
|
+
const sitePreviewUrl = docId
|
|
123
|
+
? previewUrlFor({ type: contentType, slug: savedSlug, id: docId }, siteBase)
|
|
124
|
+
: null;
|
|
125
|
+
// Preview in a new tab: open the tab inside the click (popup blockers allow
|
|
126
|
+
// that), save, then point it at the real-site draft render once the save
|
|
127
|
+
// settles so the tab shows the latest edits.
|
|
128
|
+
const pendingPreviewTab = useRef(null);
|
|
129
|
+
const handlePreviewInTab = useCallback(() => {
|
|
130
|
+
if (!docId)
|
|
131
|
+
return;
|
|
132
|
+
const tab = window.open('about:blank', '_blank');
|
|
133
|
+
if (!tab)
|
|
134
|
+
return;
|
|
135
|
+
pendingPreviewTab.current = { tab, since: saveState.lastSavedAt };
|
|
136
|
+
setSaveRequest((value) => value + 1);
|
|
137
|
+
}, [docId, saveState.lastSavedAt]);
|
|
138
|
+
useEffect(() => {
|
|
139
|
+
const pending = pendingPreviewTab.current;
|
|
140
|
+
if (!pending || saveState.saving)
|
|
141
|
+
return;
|
|
142
|
+
if (saveState.lastSavedAt === pending.since && !saveState.saveError)
|
|
143
|
+
return;
|
|
144
|
+
pendingPreviewTab.current = null;
|
|
145
|
+
const url = docId
|
|
146
|
+
? previewUrlFor({ type: contentType, slug: latestSlug.current, id: docId }, siteBase)
|
|
147
|
+
: null;
|
|
148
|
+
if (url)
|
|
149
|
+
pending.tab.location.href = url;
|
|
150
|
+
else
|
|
151
|
+
pending.tab.close();
|
|
152
|
+
}, [saveState, docId, contentType, siteBase]);
|
|
124
153
|
const handleOpenAnalytics = useCallback(() => {
|
|
125
154
|
if (!previewDoc.slug)
|
|
126
155
|
return;
|
|
@@ -194,7 +223,7 @@ export function EditorScreen({ docRef, onClose, allowInlineAuthorCreation = true
|
|
|
194
223
|
// -------------------------------------------------------------------------
|
|
195
224
|
// Render
|
|
196
225
|
// -------------------------------------------------------------------------
|
|
197
|
-
return (_jsxs("div", { style: editorOuter, children: [_jsxs("header", { style: headerBar, children: [_jsxs("div", { style: headerLeft, children: [_jsxs("button", { type: "button", onClick: onClose, style: backBtn, "aria-label": "Back to content library", children: [_jsx(Icon, { name: "chevLeft", size: 16 }), _jsx("span", { children: "Content" })] }), _jsx("div", { style: headerDivider }), _jsx(Icon, { name: contentTypeIcon(contentType), size: 15, style: { color: 'var(--ink-muted)', flexShrink: 0 } }), _jsx("span", { style: headerTitleText, title: headerTitle || 'Untitled', children: headerTitle || 'Untitled' }), _jsx("span", { style: statusPill(status), children: status }), frontsPublishStatus != null && (_jsxs("span", { style: frontsPublishStatusPill(frontsPublishStatus), title: "Fronts publish status (Go path)", children: ["Go: ", frontsPublishStatus] }))] }), _jsxs("div", { style: headerRight, children: [_jsxs("fieldset", { style: fieldsetReset, children: [_jsx("legend", { style: legendHidden, children: "Preview position" }), _jsx("div", { style: segmentGroup, children: ['off', 'right', 'bottom'].map((pos) => (_jsx("button", { type: "button", onClick: () => setPreviewPos(pos), style: segmentBtn(previewPos === pos), "aria-pressed": previewPos === pos, title: `Preview ${pos}`, children: _jsx(Icon, { name: previewPosIcon(pos), size: 14 }) }, pos))) })] }), previewPos !== 'off' && (_jsxs("fieldset", { style: fieldsetReset, children: [_jsx("legend", { style: legendHidden, children: "Preview device" }), _jsx("div", { style: segmentGroup, children: ['desktop', 'tablet', 'mobile'].map((dev) => (_jsx("button", { type: "button", onClick: () => setDevice(dev), style: segmentBtn(device === dev), "aria-pressed": device === dev, title: `${dev} preview`, children: _jsx(Icon, { name: dev, size: 14 }) }, dev))) })] })),
|
|
226
|
+
return (_jsxs("div", { style: editorOuter, children: [_jsxs("header", { style: headerBar, children: [_jsxs("div", { style: headerLeft, children: [_jsxs("button", { type: "button", onClick: onClose, style: backBtn, "aria-label": "Back to content library", children: [_jsx(Icon, { name: "chevLeft", size: 16 }), _jsx("span", { children: "Content" })] }), _jsx("div", { style: headerDivider }), _jsx(Icon, { name: contentTypeIcon(contentType), size: 15, style: { color: 'var(--ink-muted)', flexShrink: 0 } }), _jsx("span", { style: headerTitleText, title: headerTitle || 'Untitled', children: headerTitle || 'Untitled' }), _jsx("span", { style: statusPill(status), children: status }), frontsPublishStatus != null && (_jsxs("span", { style: frontsPublishStatusPill(frontsPublishStatus), title: "Fronts publish status (Go path)", children: ["Go: ", frontsPublishStatus] }))] }), _jsxs("div", { style: headerRight, children: [_jsxs("fieldset", { style: fieldsetReset, children: [_jsx("legend", { style: legendHidden, children: "Preview position" }), _jsx("div", { style: segmentGroup, children: ['off', 'right', 'bottom'].map((pos) => (_jsx("button", { type: "button", onClick: () => setPreviewPos(pos), style: segmentBtn(previewPos === pos), "aria-pressed": previewPos === pos, title: `Preview ${pos}`, children: _jsx(Icon, { name: previewPosIcon(pos), size: 14 }) }, pos))) })] }), previewPos !== 'off' && (_jsxs("fieldset", { style: fieldsetReset, children: [_jsx("legend", { style: legendHidden, children: "Preview device" }), _jsx("div", { style: segmentGroup, children: ['desktop', 'tablet', 'mobile'].map((dev) => (_jsx("button", { type: "button", onClick: () => setDevice(dev), style: segmentBtn(device === dev), "aria-pressed": device === dev, title: `${dev} preview`, children: _jsx(Icon, { name: dev, size: 14 }) }, dev))) })] })), sitePreviewUrl && (_jsxs("button", { type: "button", onClick: handlePreviewInTab, style: saveBtn, title: "Save and open this draft on the live site template in a new tab", children: [_jsx(Icon, { name: "eye", size: 14 }), "Preview"] })), contentType === 'article' && docId && previewDoc.slug && (_jsx("button", { type: "button", onClick: handleOpenAnalytics, style: actionBtn, title: "Open article analytics", children: _jsx(Icon, { name: "chart", size: 14 }) })), _jsx("button", { type: "button", onClick: () => setShareOpen(true), style: actionBtn, title: "Share", children: _jsx(Icon, { name: "share", size: 14 }) }), _jsxs("button", { type: "button", onClick: handleSaveDraft, style: saveBtn, disabled: saveState.saving, title: saveState.saving ? 'Saving draft' : 'Save draft changes', children: [_jsx(Icon, { name: "check", size: 14 }), saveState.saving ? 'Saving...' : status === 'draft' ? 'Save draft' : 'Save'] }), _jsxs("button", { type: "button", onClick: () => void handlePublish(), style: publishBtn, disabled: !docId, title: docId ? 'Publish' : 'Save first to publish', children: [_jsx(Icon, { name: "bolt", size: 14 }), "Publish"] })] })] }), _jsxs("div", { style: grid.container, children: [_jsx("div", { style: grid.formColumn, children: _jsxs("div", { style: formAndInspector, children: [_jsx("div", { style: formArea, children: _jsx(ContentForm, { docId: docId, contentType: contentType, onDocCreated: handleDocCreated, onTitleChange: handleTitleChange, onDraftChange: handleDraftChange, saveRequest: saveRequest, onStatusChange: setStatus, onFrontsPublishStatusChange: setFrontsPublishStatus, onSaveStateChange: handleSaveStateChange, primaryCategories: primaryCategories, primaryTopic: primaryTopic, contentMetadataSelects: contentMetadataSelects }) }), _jsx("aside", { style: inspectorSlot, "aria-label": "Inspector", children: _jsx(Inspector, { docId: docId, contentType: contentType, onStatusChange: setStatus, onAuthorChange: handleAuthorChange }) })] }) }), previewPos !== 'off' && (_jsx("div", { style: grid.previewPane, children: sitePreviewUrl ? (_jsx(SitePreviewFrame, { url: sitePreviewUrl, device: device, version: saveState.lastSavedAt, title: previewDoc.title })) : hasSitePreview(contentType) ? (_jsx("p", { style: previewEmptyNote, children: "Save the draft with a title to see it on the live site template." })) : (_jsx(DraftPage, { doc: previewDoc, device: device })) }))] }), shareOpen && (_jsx(ShareModal, { prefill: buildSharePrefill({
|
|
198
227
|
type: previewDoc.type,
|
|
199
228
|
slug: previewDoc.slug,
|
|
200
229
|
authorId: previewDoc.authorId,
|
|
@@ -462,6 +491,13 @@ const fieldsetReset = {
|
|
|
462
491
|
const legendHidden = {
|
|
463
492
|
display: 'none',
|
|
464
493
|
};
|
|
494
|
+
const previewEmptyNote = {
|
|
495
|
+
margin: 'auto',
|
|
496
|
+
padding: 24,
|
|
497
|
+
fontSize: 13,
|
|
498
|
+
color: 'var(--ink-muted)',
|
|
499
|
+
textAlign: 'center',
|
|
500
|
+
};
|
|
465
501
|
// Void the unused variable warning by referencing the label map in a subtle
|
|
466
502
|
// way (it's used implicitly via the type system; keep for completeness).
|
|
467
503
|
void CONTENT_TYPE_LABELS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorScreen.js","sourceRoot":"","sources":["../../../src/ui/screens/EditorScreen.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditorScreen.js","sourceRoot":"","sources":["../../../src/ui/screens/EditorScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -21,4 +21,16 @@ export declare function publicUrlFor(row: {
|
|
|
21
21
|
type: ContentType;
|
|
22
22
|
slug: string;
|
|
23
23
|
}, siteBase?: string): string;
|
|
24
|
+
/** Whether the site renders this content type as a draft (see SITE_PREVIEW_PATH). */
|
|
25
|
+
export declare function hasSitePreview(type: ContentType): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* The draft preview URL on the real site: the public page for the item's
|
|
28
|
+
* saved slug, rendered from the current row with the live template and CSS.
|
|
29
|
+
* Returns `null` for a type the site cannot render as a draft.
|
|
30
|
+
*/
|
|
31
|
+
export declare function previewUrlFor(row: {
|
|
32
|
+
type: ContentType;
|
|
33
|
+
slug: string;
|
|
34
|
+
id: string;
|
|
35
|
+
}, siteBase?: string): string | null;
|
|
24
36
|
//# sourceMappingURL=public-url.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-url.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/public-url.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AA8BxD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAUhG"}
|
|
1
|
+
{"version":3,"file":"public-url.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/public-url.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AA8BxD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAUhG;AAiBD,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,GAAG,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EACpD,QAAQ,CAAC,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAMf"}
|
|
@@ -73,4 +73,34 @@ export function publicUrlFor(row, siteBase) {
|
|
|
73
73
|
const base = siteBase.replace(/\/+$/, '');
|
|
74
74
|
return `${base}${path}`;
|
|
75
75
|
}
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// previewUrlFor
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
/**
|
|
80
|
+
* Public routes that render an unpublished draft for a signed-in publisher via
|
|
81
|
+
* `?preview=<id>` (apps/web publication-routes/article/[slug].astro and
|
|
82
|
+
* videos/[slug].astro). Video uses `/videos/` directly: `/video/<slug>` 301s
|
|
83
|
+
* there and drops the query. The other types have no draft render on the site.
|
|
84
|
+
*/
|
|
85
|
+
const SITE_PREVIEW_PATH = {
|
|
86
|
+
article: (slug) => `/article/${slug}/`,
|
|
87
|
+
video: (slug) => `/videos/${slug}/`,
|
|
88
|
+
};
|
|
89
|
+
/** Whether the site renders this content type as a draft (see SITE_PREVIEW_PATH). */
|
|
90
|
+
export function hasSitePreview(type) {
|
|
91
|
+
return SITE_PREVIEW_PATH[type] !== undefined;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The draft preview URL on the real site: the public page for the item's
|
|
95
|
+
* saved slug, rendered from the current row with the live template and CSS.
|
|
96
|
+
* Returns `null` for a type the site cannot render as a draft.
|
|
97
|
+
*/
|
|
98
|
+
export function previewUrlFor(row, siteBase) {
|
|
99
|
+
const path = SITE_PREVIEW_PATH[row.type];
|
|
100
|
+
const cleanSlug = row.slug.replace(/^\/+/, '');
|
|
101
|
+
if (!path || !cleanSlug || !row.id)
|
|
102
|
+
return null;
|
|
103
|
+
const base = siteBase ? siteBase.replace(/\/+$/, '') : '';
|
|
104
|
+
return `${base}${path(cleanSlug)}?preview=${encodeURIComponent(row.id)}`;
|
|
105
|
+
}
|
|
76
106
|
//# sourceMappingURL=public-url.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-url.js","sourceRoot":"","sources":["../../../src/ui/screens/public-url.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,yDAAyD;AACzD,EAAE;AACF,oEAAoE;AACpE,wEAAwE;AACxE,wEAAwE;AACxE,sEAAsE;AACtE,0CAA0C;AAC1C,iFAAiF;AACjF,yBAAyB;AACzB,EAAE;AACF,yEAAyE;AACzE,0DAA0D;AAC1D,0EAA0E;AAC1E,uEAAuE;AACvE,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,sBAAsB;AAItB,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAkD;IAC1E,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;IACrC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE;IACjC,kEAAkE;IAClE,yDAAyD;IACzD,0CAA0C;IAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,IAAI,EAAE;IACjD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;CAC9C,CAAA;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,GAAwC,EAAE,QAAiB;IACvF,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC9C,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAA;IAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACzC,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAA;AACxB,CAAC"}
|
|
1
|
+
{"version":3,"file":"public-url.js","sourceRoot":"","sources":["../../../src/ui/screens/public-url.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,yDAAyD;AACzD,EAAE;AACF,oEAAoE;AACpE,wEAAwE;AACxE,wEAAwE;AACxE,sEAAsE;AACtE,0CAA0C;AAC1C,iFAAiF;AACjF,yBAAyB;AACzB,EAAE;AACF,yEAAyE;AACzE,0DAA0D;AAC1D,0EAA0E;AAC1E,uEAAuE;AACvE,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,sBAAsB;AAItB,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAkD;IAC1E,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;IACrC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE;IACjC,kEAAkE;IAClE,yDAAyD;IACzD,0CAA0C;IAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,IAAI,EAAE;IACjD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;CAC9C,CAAA;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,GAAwC,EAAE,QAAiB;IACvF,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC9C,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAA;IAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACzC,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAA;AACxB,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,iBAAiB,GAA2D;IACjF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,GAAG;IACtC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,GAAG;CACnC,CAAA;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC/C,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,SAAS,CAAA;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC5B,GAAoD,EACpD,QAAiB;IAEjB,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC9C,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzD,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAA;AACzE,CAAC"}
|
package/package.json
CHANGED
|
@@ -199,6 +199,94 @@ export interface FrontsPublishCallbackResult {
|
|
|
199
199
|
publishedItem?: { id: string; type: ContentType; title: string } | null
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
+
export interface FrontsPublishObservationInput {
|
|
203
|
+
eventId: string
|
|
204
|
+
intentId: string
|
|
205
|
+
contentId: string
|
|
206
|
+
version: number
|
|
207
|
+
publishAt: number
|
|
208
|
+
status: 'publishing' | 'live'
|
|
209
|
+
receiptSHA256: string
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** Read the existing receiver/commit ledgers. Missing rows remain UNKNOWN:
|
|
213
|
+
* events are recorded after processing, so absence never licenses replay. */
|
|
214
|
+
export async function readFrontsPublishObservation(
|
|
215
|
+
db: D1Database,
|
|
216
|
+
input: FrontsPublishObservationInput,
|
|
217
|
+
) {
|
|
218
|
+
const unknown = { version: 1, state: 'unknown' as const }
|
|
219
|
+
const conflict = { version: 1, state: 'conflict' as const }
|
|
220
|
+
const row = await db
|
|
221
|
+
.prepare(`SELECT event_id, intent_id, content_id, version, status,
|
|
222
|
+
receipt_json, published, attempt_id, error FROM fronts_publish_events WHERE event_id = ? LIMIT 1`)
|
|
223
|
+
.bind(input.eventId)
|
|
224
|
+
.first<{
|
|
225
|
+
event_id: string
|
|
226
|
+
intent_id: string | null
|
|
227
|
+
content_id: string
|
|
228
|
+
version: number | null
|
|
229
|
+
status: string
|
|
230
|
+
receipt_json: string | null
|
|
231
|
+
published: number
|
|
232
|
+
attempt_id: string | null
|
|
233
|
+
error: string | null
|
|
234
|
+
}>()
|
|
235
|
+
if (!row) return unknown
|
|
236
|
+
if (
|
|
237
|
+
row.intent_id !== input.intentId ||
|
|
238
|
+
row.content_id !== input.contentId ||
|
|
239
|
+
row.version !== input.version ||
|
|
240
|
+
row.status !== input.status
|
|
241
|
+
)
|
|
242
|
+
return conflict
|
|
243
|
+
if (row.error) return unknown
|
|
244
|
+
let receipt: FrontsPublishReceipt | null = null
|
|
245
|
+
if (row.receipt_json) {
|
|
246
|
+
try {
|
|
247
|
+
receipt = JSON.parse(row.receipt_json) as FrontsPublishReceipt
|
|
248
|
+
} catch {
|
|
249
|
+
return unknown
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (input.status === 'live') {
|
|
253
|
+
if (!row.published || !row.attempt_id || !receipt || receipt.sha256 !== input.receiptSHA256)
|
|
254
|
+
return unknown
|
|
255
|
+
const committed = await db
|
|
256
|
+
.prepare(`SELECT a.id FROM content_publication_attempts a
|
|
257
|
+
JOIN content_items c ON c.id = a.content_id AND c.published_revision_id = a.revision_id
|
|
258
|
+
WHERE a.id = ? AND a.content_id = ? AND a.operation = 'publish' AND a.state = 'committed'
|
|
259
|
+
AND c.status = 'published' AND c.deleted_at IS NULL LIMIT 1`)
|
|
260
|
+
.bind(row.attempt_id, input.contentId)
|
|
261
|
+
.first<{ id: string }>()
|
|
262
|
+
if (!committed) return unknown
|
|
263
|
+
const current = await getContentSnapshot(db, input.contentId)
|
|
264
|
+
if (
|
|
265
|
+
!current ||
|
|
266
|
+
!(await matchesCommittedCallback(
|
|
267
|
+
db,
|
|
268
|
+
input.contentId,
|
|
269
|
+
current,
|
|
270
|
+
await hashReceiptIdentity(receipt),
|
|
271
|
+
input,
|
|
272
|
+
))
|
|
273
|
+
)
|
|
274
|
+
return unknown
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
version: 1,
|
|
278
|
+
state: 'confirmed' as const,
|
|
279
|
+
event_id: row.event_id,
|
|
280
|
+
intent_id: row.intent_id,
|
|
281
|
+
content_id: row.content_id,
|
|
282
|
+
content_version: row.version,
|
|
283
|
+
status: row.status,
|
|
284
|
+
published: row.published === 1,
|
|
285
|
+
attempt_id: row.attempt_id,
|
|
286
|
+
receipt,
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
202
290
|
function hasReceipt(receipt: FrontsPublishReceipt | null | undefined): boolean {
|
|
203
291
|
if (!receipt) return false
|
|
204
292
|
const urls = Array.isArray(receipt.published_urls) && receipt.published_urls.length > 0
|
|
@@ -42,6 +42,109 @@ export class PublicationCurrentSnapshotError extends Error {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
/** The existing native binding and exact current draft captured for preparation. */
|
|
46
|
+
export interface NativeArticleDraftSnapshot {
|
|
47
|
+
snapshot: Record<string, unknown>
|
|
48
|
+
binding: {
|
|
49
|
+
externalId: string
|
|
50
|
+
contentId: string
|
|
51
|
+
receiptId: string
|
|
52
|
+
requestSHA256: string
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Capture the source in History inside the native writer's D1 transaction.
|
|
58
|
+
* Every dependent write requires this revision, so same-version mutations of
|
|
59
|
+
* metadata, body, taxonomy, relations or native binding cannot pass the CAS.
|
|
60
|
+
*/
|
|
61
|
+
export function nativeArticleDraftCapture(
|
|
62
|
+
id: string,
|
|
63
|
+
revisionId: string,
|
|
64
|
+
expected: NativeArticleDraftSnapshot,
|
|
65
|
+
): { sql: string; bindings: unknown[] } {
|
|
66
|
+
const item = snapshotRecord(expected.snapshot.item)
|
|
67
|
+
const content = snapshotRecord(expected.snapshot.content)
|
|
68
|
+
const binding = expected.binding
|
|
69
|
+
const tags = expected.snapshot.tags
|
|
70
|
+
const labels = expected.snapshot.tagLabels
|
|
71
|
+
const related = expected.snapshot.related
|
|
72
|
+
if (
|
|
73
|
+
item.id !== id ||
|
|
74
|
+
item.type !== 'article' ||
|
|
75
|
+
item.status !== 'draft' ||
|
|
76
|
+
item.deleted_at != null ||
|
|
77
|
+
item.source_id !== `foundry:${binding.externalId}` ||
|
|
78
|
+
binding.contentId !== id ||
|
|
79
|
+
content.content_id !== id ||
|
|
80
|
+
!Array.isArray(tags) ||
|
|
81
|
+
!Array.isArray(labels) ||
|
|
82
|
+
tags.length !== labels.length ||
|
|
83
|
+
!Array.isArray(related)
|
|
84
|
+
)
|
|
85
|
+
throw new TypeError('Native draft capture needs its exact current article snapshot and binding')
|
|
86
|
+
const bindings: unknown[] = [
|
|
87
|
+
revisionId,
|
|
88
|
+
id,
|
|
89
|
+
JSON.stringify({ ...expected.snapshot, native_binding: binding }),
|
|
90
|
+
`foundry.prepare-source:${revisionId}`,
|
|
91
|
+
id,
|
|
92
|
+
]
|
|
93
|
+
const rowMatches = (alias: string, row: Record<string, unknown>): string =>
|
|
94
|
+
Object.entries(row)
|
|
95
|
+
.map(([key, value]) => {
|
|
96
|
+
if (
|
|
97
|
+
!/^[a-z_][a-z0-9_]*$/.test(key) ||
|
|
98
|
+
(value !== null && typeof value !== 'string' && typeof value !== 'number')
|
|
99
|
+
)
|
|
100
|
+
throw new TypeError('Native draft snapshot has an invalid SQL field')
|
|
101
|
+
bindings.push(value)
|
|
102
|
+
return `${alias}."${key}" IS ?`
|
|
103
|
+
})
|
|
104
|
+
.join(' AND ')
|
|
105
|
+
const predicates = [
|
|
106
|
+
rowMatches('content_items', item),
|
|
107
|
+
`EXISTS (SELECT 1 FROM article_content source_body WHERE source_body.content_id=content_items.id AND ${rowMatches('source_body', content)})`,
|
|
108
|
+
'EXISTS (SELECT 1 FROM cms_foundry_articles source_binding WHERE source_binding.content_id=content_items.id AND source_binding.external_id=? AND source_binding.receipt_id=? AND source_binding.request_sha256=?)',
|
|
109
|
+
]
|
|
110
|
+
bindings.push(binding.externalId, binding.receiptId, binding.requestSHA256)
|
|
111
|
+
const hero = expected.snapshot.hero_asset
|
|
112
|
+
if (hero === null) {
|
|
113
|
+
predicates.push(
|
|
114
|
+
'NOT EXISTS (SELECT 1 FROM media_assets source_hero WHERE source_hero.id=content_items.hero_image_id)',
|
|
115
|
+
)
|
|
116
|
+
} else {
|
|
117
|
+
const asset = snapshotRecord(hero)
|
|
118
|
+
if (!asset.id || asset.id !== item.hero_image_id)
|
|
119
|
+
throw new TypeError('Native draft hero snapshot has no exact selected identity')
|
|
120
|
+
predicates.push(
|
|
121
|
+
`EXISTS (SELECT 1 FROM media_assets source_hero WHERE source_hero.id=content_items.hero_image_id AND ${rowMatches('source_hero', asset)})`,
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
predicates.push('(SELECT count(*) FROM content_tag_links WHERE content_id=content_items.id)=?')
|
|
125
|
+
bindings.push(tags.length)
|
|
126
|
+
for (let index = 0; index < tags.length; index++) {
|
|
127
|
+
predicates.push(
|
|
128
|
+
'EXISTS (SELECT 1 FROM content_tag_links l JOIN content_tags t ON t.id=l.tag_id WHERE l.content_id=content_items.id AND t.slug IS ? AND COALESCE(l.label,t.label) IS ?)',
|
|
129
|
+
)
|
|
130
|
+
bindings.push(tags[index], labels[index])
|
|
131
|
+
}
|
|
132
|
+
predicates.push('(SELECT count(*) FROM content_relations WHERE content_id=content_items.id)=?')
|
|
133
|
+
bindings.push(related.length)
|
|
134
|
+
for (const relation of related) {
|
|
135
|
+
const row = snapshotRecord(relation)
|
|
136
|
+
predicates.push(
|
|
137
|
+
'EXISTS (SELECT 1 FROM content_relations source_relation WHERE source_relation.content_id=content_items.id AND source_relation.related_id IS ? AND source_relation.rank IS ? AND source_relation.reason IS ?)',
|
|
138
|
+
)
|
|
139
|
+
bindings.push(row.related_id, row.rank, row.reason)
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
sql: `INSERT INTO content_revisions (id,content_id,payload_json,created_at,created_by,tag)
|
|
143
|
+
SELECT ?,?,?,unixepoch(),'foundry',? FROM content_items WHERE id=? AND ${predicates.join(' AND ')}`,
|
|
144
|
+
bindings,
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
45
148
|
export function snapshotRecord(value: unknown): Record<string, unknown> {
|
|
46
149
|
return value && typeof value === 'object' && !Array.isArray(value)
|
|
47
150
|
? (value as Record<string, unknown>)
|
package/src/engine/publisher.ts
CHANGED
|
@@ -22,6 +22,10 @@
|
|
|
22
22
|
import type { ContentStatus, ContentType, FrontsPublishStatus } from '../schema/types.js'
|
|
23
23
|
import { type ContentMetadata, serializeContentMetadata } from './content-metadata.js'
|
|
24
24
|
import type { D1Database } from './d1.js'
|
|
25
|
+
import {
|
|
26
|
+
type NativeArticleDraftSnapshot,
|
|
27
|
+
nativeArticleDraftCapture,
|
|
28
|
+
} from './publication-current-guard.js'
|
|
25
29
|
import { evaluateArticleBody, type PublishGuardOutcome } from './publish-guard.js'
|
|
26
30
|
import { slugify } from './slug.js'
|
|
27
31
|
import {
|
|
@@ -345,6 +349,8 @@ export interface UpdateContentOptions {
|
|
|
345
349
|
requiredStatus?: ContentStatus
|
|
346
350
|
/** Pin a machine body update to the canonical version it inspected. Requires requiredStatus. */
|
|
347
351
|
expectedCanonicalVersion?: number
|
|
352
|
+
/** Exact native draft source; captured in History in the same mutation batch. */
|
|
353
|
+
expectedNativeDraftSnapshot?: NativeArticleDraftSnapshot
|
|
348
354
|
/** Apply a resolved media source only while this exact source identity is still stored. */
|
|
349
355
|
expectedMediaSource?: {
|
|
350
356
|
sourceUrl: string | null
|
|
@@ -823,6 +829,11 @@ export async function updateContentItem(
|
|
|
823
829
|
) {
|
|
824
830
|
throw new TypeError('Canonical-version updates require a valid version and status constraint')
|
|
825
831
|
}
|
|
832
|
+
if (
|
|
833
|
+
options.expectedNativeDraftSnapshot &&
|
|
834
|
+
(options.requiredStatus !== 'draft' || options.expectedCanonicalVersion === undefined)
|
|
835
|
+
)
|
|
836
|
+
throw new TypeError('Native draft source requires the draft/version constraints')
|
|
826
837
|
const tagPairs = input.tags === undefined ? null : validateDeclaredTagList(input.tags)
|
|
827
838
|
const existing = await getContentItem(db, id)
|
|
828
839
|
if (!existing) return null
|
|
@@ -1059,10 +1070,17 @@ export async function updateContentItem(
|
|
|
1059
1070
|
// D1 batch is a transaction: the status predicate and every content-table
|
|
1060
1071
|
// write linearize together, so a native publish/schedule cannot interleave
|
|
1061
1072
|
// between the base row and its body row.
|
|
1073
|
+
const captureId = options.expectedNativeDraftSnapshot ? crypto.randomUUID() : null
|
|
1074
|
+
const capture =
|
|
1075
|
+
options.expectedNativeDraftSnapshot && captureId
|
|
1076
|
+
? nativeArticleDraftCapture(id, captureId, options.expectedNativeDraftSnapshot)
|
|
1077
|
+
: null
|
|
1062
1078
|
const versionPredicate =
|
|
1063
|
-
options.expectedCanonicalVersion === undefined ? '' : ' AND canonical_version = ?'
|
|
1064
|
-
|
|
1079
|
+
(options.expectedCanonicalVersion === undefined ? '' : ' AND canonical_version = ?') +
|
|
1080
|
+
(captureId ? ' AND EXISTS (SELECT 1 FROM content_revisions WHERE id=?)' : '')
|
|
1081
|
+
const versionBindings: unknown[] =
|
|
1065
1082
|
options.expectedCanonicalVersion === undefined ? [] : [options.expectedCanonicalVersion]
|
|
1083
|
+
if (captureId) versionBindings.push(captureId)
|
|
1066
1084
|
const statements = [
|
|
1067
1085
|
db
|
|
1068
1086
|
.prepare(
|
|
@@ -1217,8 +1235,9 @@ export async function updateContentItem(
|
|
|
1217
1235
|
// D1 batch is atomic. Keep the base row's version unchanged while every
|
|
1218
1236
|
// dependent body/tag write checks it; advance it only as the final write.
|
|
1219
1237
|
const baseStatement = statements.shift()!
|
|
1220
|
-
const baseResultIndex = statements.length
|
|
1238
|
+
const baseResultIndex = statements.length + (capture ? 1 : 0)
|
|
1221
1239
|
statements.push(baseStatement)
|
|
1240
|
+
if (capture) statements.unshift(db.prepare(capture.sql).bind(...capture.bindings))
|
|
1222
1241
|
const statusResultIndex = statements.length
|
|
1223
1242
|
statements.push(
|
|
1224
1243
|
db
|
package/src/foundry-emit.ts
CHANGED
|
@@ -44,6 +44,16 @@ export const FoundryArticleV2Schema = z
|
|
|
44
44
|
.regex(/^[a-f0-9]{64}$/)
|
|
45
45
|
.optional(),
|
|
46
46
|
expectedCanonicalVersion: z.number().int().positive().optional(),
|
|
47
|
+
/** Prepare an existing native draft only from the exact authenticated snapshot read. */
|
|
48
|
+
expectedDraftSnapshot: z
|
|
49
|
+
.object({
|
|
50
|
+
contentId: z.string().min(1),
|
|
51
|
+
canonicalVersion: z.number().int().positive(),
|
|
52
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
53
|
+
priorRequestSHA256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
54
|
+
})
|
|
55
|
+
.strict()
|
|
56
|
+
.optional(),
|
|
47
57
|
slug: z.string().refine(isCanonicalSlug, {
|
|
48
58
|
message: 'slug must already be canonical: lowercase a-z, 0-9 and single hyphens, 3-512 chars',
|
|
49
59
|
}),
|
|
@@ -86,6 +96,13 @@ export const FoundryArticleV2Schema = z
|
|
|
86
96
|
!(
|
|
87
97
|
body.expectedRequestSHA256 &&
|
|
88
98
|
(body.createOnly || body.expectedRevisionId || body.adoptSourceId)
|
|
99
|
+
) &&
|
|
100
|
+
!(
|
|
101
|
+
body.expectedDraftSnapshot &&
|
|
102
|
+
(body.createOnly ||
|
|
103
|
+
body.expectedRevisionId ||
|
|
104
|
+
body.adoptSourceId ||
|
|
105
|
+
body.expectedRequestSHA256)
|
|
89
106
|
),
|
|
90
107
|
{
|
|
91
108
|
message: 'own working update requires both pins and cannot create or adopt',
|
|
@@ -68,6 +68,10 @@ const PublishedArticleSourceSchema = z
|
|
|
68
68
|
site: z.string().min(1),
|
|
69
69
|
observed_at: z.string().datetime(),
|
|
70
70
|
article: PublishedArticleStateSchema.extend({
|
|
71
|
+
publication_receipt_identity: z
|
|
72
|
+
.string()
|
|
73
|
+
.regex(/^[a-f0-9]{64}$/)
|
|
74
|
+
.nullable(),
|
|
71
75
|
hero_image_url: z.string().url().nullable(),
|
|
72
76
|
body_markdown: z.string().min(1).max(1_000_000),
|
|
73
77
|
description: z.string().nullable(),
|
|
@@ -112,6 +116,7 @@ async function publishedInputs(ctx: RouteContext, url: URL, siteId: string): Pro
|
|
|
112
116
|
if (!content || content.type !== 'article')
|
|
113
117
|
return json({ error: 'published_article_missing' }, 404)
|
|
114
118
|
const item = content.payload.item
|
|
119
|
+
const snapshot = content.payload as unknown as Record<string, unknown>
|
|
115
120
|
const heroImageUrl = await readReadyImagePublicUrl(ctx.db, item.hero_image_id)
|
|
116
121
|
const result = PublishedArticleSourceSchema.safeParse({
|
|
117
122
|
ok: true,
|
|
@@ -121,6 +126,7 @@ async function publishedInputs(ctx: RouteContext, url: URL, siteId: string): Pro
|
|
|
121
126
|
article: {
|
|
122
127
|
content_id: content.contentId,
|
|
123
128
|
revision_id: content.revisionId,
|
|
129
|
+
publication_receipt_identity: snapshot.publication_receipt_identity ?? null,
|
|
124
130
|
slug: content.slug,
|
|
125
131
|
title: item.title,
|
|
126
132
|
canonical_url: item.canonical_url ?? null,
|