@astro-live-cms/core 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/auth/session.d.ts +14 -0
- package/dist/runtime/auth/session.d.ts.map +1 -0
- package/dist/runtime/auth/session.js +77 -0
- package/dist/runtime/auth/session.js.map +1 -0
- package/dist/runtime/bind.d.ts +14 -0
- package/dist/runtime/bind.d.ts.map +1 -0
- package/dist/runtime/bind.js +11 -0
- package/dist/runtime/bind.js.map +1 -0
- package/dist/runtime/config.d.ts +6 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +18 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/content.d.ts +30 -0
- package/dist/runtime/content.d.ts.map +1 -0
- package/dist/runtime/content.js +48 -0
- package/dist/runtime/content.js.map +1 -0
- package/dist/runtime/index.d.ts +10 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +12 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/markers.d.ts +17 -0
- package/dist/runtime/markers.d.ts.map +1 -0
- package/dist/runtime/markers.js +17 -0
- package/dist/runtime/markers.js.map +1 -0
- package/dist/runtime/middleware.d.ts +12 -0
- package/dist/runtime/middleware.d.ts.map +1 -0
- package/dist/runtime/middleware.js +37 -0
- package/dist/runtime/middleware.js.map +1 -0
- package/dist/runtime/mutations/contracts.d.ts +57 -0
- package/dist/runtime/mutations/contracts.d.ts.map +1 -0
- package/dist/runtime/mutations/contracts.js +242 -0
- package/dist/runtime/mutations/contracts.js.map +1 -0
- package/dist/runtime/mutations/engine.d.ts +23 -0
- package/dist/runtime/mutations/engine.d.ts.map +1 -0
- package/dist/runtime/mutations/engine.js +161 -0
- package/dist/runtime/mutations/engine.js.map +1 -0
- package/dist/runtime/routes/_helpers.d.ts +6 -0
- package/dist/runtime/routes/_helpers.d.ts.map +1 -0
- package/dist/runtime/routes/_helpers.js +23 -0
- package/dist/runtime/routes/_helpers.js.map +1 -0
- package/dist/runtime/routes/admin.d.ts +3 -0
- package/dist/runtime/routes/admin.d.ts.map +1 -0
- package/dist/runtime/routes/admin.js +110 -0
- package/dist/runtime/routes/admin.js.map +1 -0
- package/dist/runtime/routes/auth-login.d.ts +4 -0
- package/dist/runtime/routes/auth-login.d.ts.map +1 -0
- package/dist/runtime/routes/auth-login.js +66 -0
- package/dist/runtime/routes/auth-login.js.map +1 -0
- package/dist/runtime/routes/auth-logout.d.ts +4 -0
- package/dist/runtime/routes/auth-logout.d.ts.map +1 -0
- package/dist/runtime/routes/auth-logout.js +51 -0
- package/dist/runtime/routes/auth-logout.js.map +1 -0
- package/dist/runtime/routes/editor-assets.d.ts +3 -0
- package/dist/runtime/routes/editor-assets.d.ts.map +1 -0
- package/dist/runtime/routes/editor-assets.js +47 -0
- package/dist/runtime/routes/editor-assets.js.map +1 -0
- package/dist/runtime/routes/entries.d.ts +3 -0
- package/dist/runtime/routes/entries.d.ts.map +1 -0
- package/dist/runtime/routes/entries.js +89 -0
- package/dist/runtime/routes/entries.js.map +1 -0
- package/dist/runtime/routes/history.d.ts +4 -0
- package/dist/runtime/routes/history.d.ts.map +1 -0
- package/dist/runtime/routes/history.js +56 -0
- package/dist/runtime/routes/history.js.map +1 -0
- package/dist/runtime/routes/mutate.d.ts +4 -0
- package/dist/runtime/routes/mutate.d.ts.map +1 -0
- package/dist/runtime/routes/mutate.js +35 -0
- package/dist/runtime/routes/mutate.js.map +1 -0
- package/dist/runtime/routes/schema.d.ts +3 -0
- package/dist/runtime/routes/schema.d.ts.map +1 -0
- package/dist/runtime/routes/schema.js +27 -0
- package/dist/runtime/routes/schema.js.map +1 -0
- package/dist/runtime/routes/studio-home.d.ts +3 -0
- package/dist/runtime/routes/studio-home.d.ts.map +1 -0
- package/dist/runtime/routes/studio-home.js +174 -0
- package/dist/runtime/routes/studio-home.js.map +1 -0
- package/dist/runtime/routes/theme-bootstrap.d.ts +4 -0
- package/dist/runtime/routes/theme-bootstrap.d.ts.map +1 -0
- package/dist/runtime/routes/theme-bootstrap.js +65 -0
- package/dist/runtime/routes/theme-bootstrap.js.map +1 -0
- package/dist/runtime/routes/theme-factory.d.ts +3 -0
- package/dist/runtime/routes/theme-factory.d.ts.map +1 -0
- package/dist/runtime/routes/theme-factory.js +142 -0
- package/dist/runtime/routes/theme-factory.js.map +1 -0
- package/dist/runtime/routes/upload.d.ts +3 -0
- package/dist/runtime/routes/upload.d.ts.map +1 -0
- package/dist/runtime/routes/upload.js +29 -0
- package/dist/runtime/routes/upload.js.map +1 -0
- package/dist/runtime/schema/infer-json-schema.d.ts +12 -0
- package/dist/runtime/schema/infer-json-schema.d.ts.map +1 -0
- package/dist/runtime/schema/infer-json-schema.js +75 -0
- package/dist/runtime/schema/infer-json-schema.js.map +1 -0
- package/dist/runtime/storage/filesystem-adapter.d.ts +29 -0
- package/dist/runtime/storage/filesystem-adapter.d.ts.map +1 -0
- package/dist/runtime/storage/filesystem-adapter.js +182 -0
- package/dist/runtime/storage/filesystem-adapter.js.map +1 -0
- package/dist/runtime/storage/filesystem-upload-handler.d.ts +11 -0
- package/dist/runtime/storage/filesystem-upload-handler.d.ts.map +1 -0
- package/dist/runtime/storage/filesystem-upload-handler.js +37 -0
- package/dist/runtime/storage/filesystem-upload-handler.js.map +1 -0
- package/dist/runtime/storage/in-memory-adapter.d.ts +24 -0
- package/dist/runtime/storage/in-memory-adapter.d.ts.map +1 -0
- package/dist/runtime/storage/in-memory-adapter.js +78 -0
- package/dist/runtime/storage/in-memory-adapter.js.map +1 -0
- package/dist/runtime/themes/preset-catalog.d.ts +9 -0
- package/dist/runtime/themes/preset-catalog.d.ts.map +1 -0
- package/dist/runtime/themes/preset-catalog.js +47 -0
- package/dist/runtime/themes/preset-catalog.js.map +1 -0
- package/dist/runtime/utils.d.ts +6 -0
- package/dist/runtime/utils.d.ts.map +1 -0
- package/dist/runtime/utils.js +29 -0
- package/dist/runtime/utils.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/vite/virtual-config-plugin.d.ts +7 -0
- package/dist/vite/virtual-config-plugin.d.ts.map +1 -0
- package/dist/vite/virtual-config-plugin.js +25 -0
- package/dist/vite/virtual-config-plugin.js.map +1 -0
- package/package.json +35 -0
- package/static/cms/editor/config.js +6 -0
- package/static/cms/editor/guards.js +68 -0
- package/static/cms/editor/helpers.js +16 -0
- package/static/cms/editor/image-edit.js +148 -0
- package/static/cms/editor/image-utils.js +84 -0
- package/static/cms/editor/image.css +133 -0
- package/static/cms/editor/link-ui.css +143 -0
- package/static/cms/editor/linkify.js +55 -0
- package/static/cms/editor/panel.css +91 -0
- package/static/cms/editor/panel.js +64 -0
- package/static/cms/editor/save-queue.js +167 -0
- package/static/cms/editor/section-controls/activation.js +10 -0
- package/static/cms/editor/section-controls/api.js +88 -0
- package/static/cms/editor/section-controls/constants.js +24 -0
- package/static/cms/editor/section-controls/index.js +622 -0
- package/static/cms/editor/section-controls/model.js +76 -0
- package/static/cms/editor/section-controls/mutations.js +112 -0
- package/static/cms/editor/section-controls/page-context.js +34 -0
- package/static/cms/editor/section-controls/pickers.js +196 -0
- package/static/cms/editor/section-controls/reorder.js +92 -0
- package/static/cms/editor/section-controls/selection.js +54 -0
- package/static/cms/editor/section-controls/spacing-drag.js +83 -0
- package/static/cms/editor/section-controls/ui-elements.js +54 -0
- package/static/cms/editor/section-controls/utils.js +35 -0
- package/static/cms/editor/section-controls.css +349 -0
- package/static/cms/editor/section-controls.js +1 -0
- package/static/cms/editor/security.js +23 -0
- package/static/cms/editor/sync.js +64 -0
- package/static/cms/editor/text-edit.js +129 -0
- package/static/cms/editor/text-link-interactions.js +191 -0
- package/static/cms/editor/toast.css +50 -0
- package/static/cms/editor/toast.js +29 -0
- package/static/cms/editor/tokens-and-text.css +94 -0
- package/static/cms/editor/toolbar.css +261 -0
- package/static/cms/editor/toolbar.js +110 -0
- package/static/cms/editor.css +10 -0
- package/static/cms/editor.js +101 -0
- package/static/cms/studio.css +312 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AstroIntegration } from "astro";
|
|
2
|
+
export type { StorageAdapter, UploadHandler, EntryData, HistoryEntry } from "./types.js";
|
|
3
|
+
export { FilesystemAdapter } from "./runtime/storage/filesystem-adapter.js";
|
|
4
|
+
export { InMemoryAdapter } from "./runtime/storage/in-memory-adapter.js";
|
|
5
|
+
export { FilesystemUploadHandler } from "./runtime/storage/filesystem-upload-handler.js";
|
|
6
|
+
export { bindEntry } from "./runtime/bind.js";
|
|
7
|
+
export interface LiveCmsOptions {
|
|
8
|
+
mountPath?: string;
|
|
9
|
+
apiBasePath?: string;
|
|
10
|
+
adapterType?: string;
|
|
11
|
+
enableAdmin?: boolean;
|
|
12
|
+
enableInlineEditor?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export default function liveCms(options?: LiveCmsOptions): AstroIntegration;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAG9C,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAkCD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,gBAAgB,CA0G9E"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
export { FilesystemAdapter } from "./runtime/storage/filesystem-adapter.js";
|
|
2
|
+
export { InMemoryAdapter } from "./runtime/storage/in-memory-adapter.js";
|
|
3
|
+
export { FilesystemUploadHandler } from "./runtime/storage/filesystem-upload-handler.js";
|
|
4
|
+
export { bindEntry } from "./runtime/bind.js";
|
|
5
|
+
function normalizeMountPath(input) {
|
|
6
|
+
if (!input)
|
|
7
|
+
return "/admin";
|
|
8
|
+
const trimmed = input.trim();
|
|
9
|
+
if (!trimmed)
|
|
10
|
+
return "/admin";
|
|
11
|
+
const withLeadingSlash = trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
|
|
12
|
+
if (withLeadingSlash.length > 1 && withLeadingSlash.endsWith("/")) {
|
|
13
|
+
return withLeadingSlash.slice(0, -1);
|
|
14
|
+
}
|
|
15
|
+
return withLeadingSlash;
|
|
16
|
+
}
|
|
17
|
+
function resolveLiveCmsOptions(options = {}) {
|
|
18
|
+
const mountPath = normalizeMountPath(options.mountPath);
|
|
19
|
+
const apiBasePath = normalizeMountPath(options.apiBasePath ?? "/api/cms");
|
|
20
|
+
return {
|
|
21
|
+
mountPath,
|
|
22
|
+
apiBasePath,
|
|
23
|
+
adapterType: options.adapterType ?? "filesystem",
|
|
24
|
+
enableAdmin: options.enableAdmin ?? true,
|
|
25
|
+
enableInlineEditor: options.enableInlineEditor ?? true,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export default function liveCms(options = {}) {
|
|
29
|
+
const resolved = resolveLiveCmsOptions(options);
|
|
30
|
+
return {
|
|
31
|
+
name: "astro-live-cms",
|
|
32
|
+
hooks: {
|
|
33
|
+
"astro:config:setup": ({ logger, addMiddleware, injectRoute, injectScript, updateConfig }) => {
|
|
34
|
+
updateConfig({
|
|
35
|
+
vite: {
|
|
36
|
+
define: {
|
|
37
|
+
__ASTRO_LIVE_CMS_MOUNT_PATH__: JSON.stringify(resolved.mountPath),
|
|
38
|
+
__ASTRO_LIVE_CMS_API_BASE_PATH__: JSON.stringify(resolved.apiBasePath),
|
|
39
|
+
__ASTRO_LIVE_CMS_ADAPTER_TYPE__: JSON.stringify(resolved.adapterType),
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
// Middleware: sets locals.cmsAdapter, locals.cmsUploadHandler, locals.isEditor
|
|
44
|
+
addMiddleware({
|
|
45
|
+
order: "pre",
|
|
46
|
+
entrypoint: new URL("./runtime/middleware.js", import.meta.url).pathname,
|
|
47
|
+
});
|
|
48
|
+
// --- Admin UI routes ---
|
|
49
|
+
if (resolved.enableAdmin) {
|
|
50
|
+
injectRoute({
|
|
51
|
+
pattern: `${resolved.mountPath}/index`,
|
|
52
|
+
entrypoint: new URL("./runtime/routes/admin.js", import.meta.url),
|
|
53
|
+
});
|
|
54
|
+
injectRoute({
|
|
55
|
+
pattern: `${resolved.mountPath}/cms`,
|
|
56
|
+
entrypoint: new URL("./runtime/routes/studio-home.js", import.meta.url),
|
|
57
|
+
});
|
|
58
|
+
injectRoute({
|
|
59
|
+
pattern: `${resolved.mountPath}/themes`,
|
|
60
|
+
entrypoint: new URL("./runtime/routes/theme-factory.js", import.meta.url),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// --- API routes ---
|
|
64
|
+
injectRoute({
|
|
65
|
+
pattern: `${resolved.apiBasePath}/entries`,
|
|
66
|
+
entrypoint: new URL("./runtime/routes/entries.js", import.meta.url),
|
|
67
|
+
});
|
|
68
|
+
injectRoute({
|
|
69
|
+
pattern: `${resolved.apiBasePath}/mutate`,
|
|
70
|
+
entrypoint: new URL("./runtime/routes/mutate.js", import.meta.url),
|
|
71
|
+
});
|
|
72
|
+
injectRoute({
|
|
73
|
+
pattern: `${resolved.apiBasePath}/schema`,
|
|
74
|
+
entrypoint: new URL("./runtime/routes/schema.js", import.meta.url),
|
|
75
|
+
});
|
|
76
|
+
injectRoute({
|
|
77
|
+
pattern: `${resolved.apiBasePath}/auth/login`,
|
|
78
|
+
entrypoint: new URL("./runtime/routes/auth-login.js", import.meta.url),
|
|
79
|
+
});
|
|
80
|
+
injectRoute({
|
|
81
|
+
pattern: `${resolved.apiBasePath}/auth/logout`,
|
|
82
|
+
entrypoint: new URL("./runtime/routes/auth-logout.js", import.meta.url),
|
|
83
|
+
});
|
|
84
|
+
injectRoute({
|
|
85
|
+
pattern: `${resolved.apiBasePath}/themes/bootstrap`,
|
|
86
|
+
entrypoint: new URL("./runtime/routes/theme-bootstrap.js", import.meta.url),
|
|
87
|
+
});
|
|
88
|
+
injectRoute({
|
|
89
|
+
pattern: `${resolved.apiBasePath}/history`,
|
|
90
|
+
entrypoint: new URL("./runtime/routes/history.js", import.meta.url),
|
|
91
|
+
});
|
|
92
|
+
injectRoute({
|
|
93
|
+
pattern: `${resolved.apiBasePath}/upload`,
|
|
94
|
+
entrypoint: new URL("./runtime/routes/upload.js", import.meta.url),
|
|
95
|
+
});
|
|
96
|
+
// --- Inline editor ---
|
|
97
|
+
if (resolved.enableInlineEditor) {
|
|
98
|
+
// Serve editor static assets from the package
|
|
99
|
+
injectRoute({
|
|
100
|
+
pattern: "/__live-cms/[...path]",
|
|
101
|
+
entrypoint: new URL("./runtime/routes/editor-assets.js", import.meta.url),
|
|
102
|
+
});
|
|
103
|
+
// Bootstrap script injected into every page.
|
|
104
|
+
// Checks for the session cookie client-side; if present, loads the
|
|
105
|
+
// editor CSS + JS. Actual auth is enforced server-side on every API call.
|
|
106
|
+
const config = JSON.stringify({
|
|
107
|
+
mountPath: resolved.mountPath,
|
|
108
|
+
apiBasePath: resolved.apiBasePath,
|
|
109
|
+
});
|
|
110
|
+
injectScript("page", `(function(){
|
|
111
|
+
if(!document.cookie.split(';').some(function(c){return c.trim().startsWith('live_cms_session=')}))return;
|
|
112
|
+
var l=document.createElement('link');l.rel='stylesheet';l.href='/__live-cms/editor.css';document.head.appendChild(l);
|
|
113
|
+
var c=document.createElement('script');c.textContent='window.__LIVE_CMS__='+${JSON.stringify(config)};document.head.appendChild(c);
|
|
114
|
+
var s=document.createElement('script');s.type='module';s.src='/__live-cms/editor.js?v='+Date.now();document.head.appendChild(s);
|
|
115
|
+
})();`);
|
|
116
|
+
}
|
|
117
|
+
logger.info(`[astro-live-cms] core loaded (mountPath=${resolved.mountPath}, apiBasePath=${resolved.apiBasePath}, adapter=${resolved.adapterType}, enableAdmin=${resolved.enableAdmin}, inlineEditor=${resolved.enableInlineEditor})`);
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function isEditorPasswordValid(candidate: string): boolean;
|
|
2
|
+
export declare function issueEditorSessionCookie(path?: string): string;
|
|
3
|
+
export declare function clearEditorSessionCookie(path?: string): string;
|
|
4
|
+
export declare function hasConfiguredEditorPassword(): boolean;
|
|
5
|
+
type CookieBagLike = {
|
|
6
|
+
cookies?: {
|
|
7
|
+
get: (name: string) => {
|
|
8
|
+
value: string;
|
|
9
|
+
} | undefined;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare function isEditorAuthenticated(context: CookieBagLike): boolean;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/runtime/auth/session.ts"],"names":[],"mappings":"AA6DA,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAQhE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,2BAA2B,IAAI,OAAO,CAErD;AAED,KAAK,aAAa,GAAG;IACnB,OAAO,CAAC,EAAE;QACR,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;KACtD,CAAC;CACH,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAIrE"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
2
|
+
const SESSION_COOKIE_NAME = "live_cms_session";
|
|
3
|
+
const SESSION_TTL_SECONDS = 60 * 60 * 12;
|
|
4
|
+
function getSessionSecret() {
|
|
5
|
+
return (process.env.LIVE_CMS_SESSION_SECRET ??
|
|
6
|
+
process.env.LIVE_CMS_EDIT_PASSWORD ??
|
|
7
|
+
process.env.EDIT_PASSWORD ??
|
|
8
|
+
"astro-live-cms-dev-secret");
|
|
9
|
+
}
|
|
10
|
+
function getEditorPassword() {
|
|
11
|
+
const value = process.env.LIVE_CMS_EDIT_PASSWORD ?? process.env.EDIT_PASSWORD ?? "";
|
|
12
|
+
return value.trim().length > 0 ? value : null;
|
|
13
|
+
}
|
|
14
|
+
function signPayload(payloadB64) {
|
|
15
|
+
return createHmac("sha256", getSessionSecret()).update(payloadB64).digest("base64url");
|
|
16
|
+
}
|
|
17
|
+
function buildToken(payload) {
|
|
18
|
+
const payloadB64 = Buffer.from(JSON.stringify(payload), "utf8").toString("base64url");
|
|
19
|
+
const sig = signPayload(payloadB64);
|
|
20
|
+
return `${payloadB64}.${sig}`;
|
|
21
|
+
}
|
|
22
|
+
function parseToken(token) {
|
|
23
|
+
const [payloadB64, signature] = token.split(".");
|
|
24
|
+
if (!payloadB64 || !signature)
|
|
25
|
+
return null;
|
|
26
|
+
const expected = signPayload(payloadB64);
|
|
27
|
+
const sigBuf = Buffer.from(signature);
|
|
28
|
+
const expectedBuf = Buffer.from(expected);
|
|
29
|
+
if (sigBuf.length !== expectedBuf.length)
|
|
30
|
+
return null;
|
|
31
|
+
if (!timingSafeEqual(sigBuf, expectedBuf))
|
|
32
|
+
return null;
|
|
33
|
+
try {
|
|
34
|
+
const parsed = JSON.parse(Buffer.from(payloadB64, "base64url").toString("utf8"));
|
|
35
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
36
|
+
return null;
|
|
37
|
+
const payload = parsed;
|
|
38
|
+
if (payload.editor !== true)
|
|
39
|
+
return null;
|
|
40
|
+
if (typeof payload.exp !== "number" || !Number.isFinite(payload.exp))
|
|
41
|
+
return null;
|
|
42
|
+
if (payload.exp <= Date.now())
|
|
43
|
+
return null;
|
|
44
|
+
return payload;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function isEditorPasswordValid(candidate) {
|
|
51
|
+
const expected = getEditorPassword();
|
|
52
|
+
if (!expected)
|
|
53
|
+
return false;
|
|
54
|
+
if (!candidate || candidate.length !== expected.length)
|
|
55
|
+
return false;
|
|
56
|
+
const a = Buffer.from(candidate, "utf8");
|
|
57
|
+
const b = Buffer.from(expected, "utf8");
|
|
58
|
+
return timingSafeEqual(a, b);
|
|
59
|
+
}
|
|
60
|
+
export function issueEditorSessionCookie(path = "/") {
|
|
61
|
+
const exp = Date.now() + SESSION_TTL_SECONDS * 1000;
|
|
62
|
+
const token = buildToken({ editor: true, exp });
|
|
63
|
+
return `${SESSION_COOKIE_NAME}=${encodeURIComponent(token)}; Path=${path}; SameSite=Lax; Max-Age=${SESSION_TTL_SECONDS}`;
|
|
64
|
+
}
|
|
65
|
+
export function clearEditorSessionCookie(path = "/") {
|
|
66
|
+
return `${SESSION_COOKIE_NAME}=; Path=${path}; SameSite=Lax; Max-Age=0`;
|
|
67
|
+
}
|
|
68
|
+
export function hasConfiguredEditorPassword() {
|
|
69
|
+
return getEditorPassword() !== null;
|
|
70
|
+
}
|
|
71
|
+
export function isEditorAuthenticated(context) {
|
|
72
|
+
const token = context.cookies?.get(SESSION_COOKIE_NAME)?.value;
|
|
73
|
+
if (!token)
|
|
74
|
+
return false;
|
|
75
|
+
return parseToken(token) !== null;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/runtime/auth/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Explicit inline binding per ADR-004.
|
|
3
|
+
*
|
|
4
|
+
* Usage in .astro:
|
|
5
|
+
* const e = bindEntry({ collection: 'pages', id: 'home' })
|
|
6
|
+
* <h1 {...e('hero.title')}>{hero.title}</h1>
|
|
7
|
+
*/
|
|
8
|
+
export declare function bindEntry(entry: {
|
|
9
|
+
collection: string;
|
|
10
|
+
id: string;
|
|
11
|
+
}): (field: string) => {
|
|
12
|
+
"data-lcms": string;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=bind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/runtime/bind.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,IACzD,OAAO,MAAM;;EACtB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Explicit inline binding per ADR-004.
|
|
3
|
+
*
|
|
4
|
+
* Usage in .astro:
|
|
5
|
+
* const e = bindEntry({ collection: 'pages', id: 'home' })
|
|
6
|
+
* <h1 {...e('hero.title')}>{hero.title}</h1>
|
|
7
|
+
*/
|
|
8
|
+
export function bindEntry(entry) {
|
|
9
|
+
return (field) => ({ "data-lcms": `${entry.collection}::${entry.id}::${field}` });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=bind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../../src/runtime/bind.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,KAAyC;IACjE,OAAO,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,EAAE,KAAK,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAaF,wBAAgB,gBAAgB,IAAI,oBAAoB,CAKvD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function normalizePath(input, fallback) {
|
|
2
|
+
if (!input)
|
|
3
|
+
return fallback;
|
|
4
|
+
const trimmed = input.trim();
|
|
5
|
+
if (!trimmed)
|
|
6
|
+
return fallback;
|
|
7
|
+
const withLeadingSlash = trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
|
|
8
|
+
if (withLeadingSlash.length > 1 && withLeadingSlash.endsWith("/")) {
|
|
9
|
+
return withLeadingSlash.slice(0, -1);
|
|
10
|
+
}
|
|
11
|
+
return withLeadingSlash;
|
|
12
|
+
}
|
|
13
|
+
export function getRuntimeConfig() {
|
|
14
|
+
const mountPath = normalizePath(__ASTRO_LIVE_CMS_MOUNT_PATH__, "/admin");
|
|
15
|
+
const apiBasePath = normalizePath(__ASTRO_LIVE_CMS_API_BASE_PATH__, "/api/cms");
|
|
16
|
+
return { mountPath, apiBasePath };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/runtime/config.ts"],"names":[],"mappings":"AAQA,SAAS,aAAa,CAAC,KAAyB,EAAE,QAAgB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IAC3E,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,SAAS,GAAG,aAAa,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,aAAa,CAAC,gCAAgC,EAAE,UAAU,CAAC,CAAC;IAEhF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public content loading API for Astro pages.
|
|
3
|
+
*
|
|
4
|
+
* Use these in your .astro frontmatter to read seed data:
|
|
5
|
+
*
|
|
6
|
+
* import { loadEntry, loadCollection } from '@astro-live-cms/core/runtime'
|
|
7
|
+
*
|
|
8
|
+
* const home = await loadEntry('pages', 'home')
|
|
9
|
+
* const posts = await loadCollection('posts')
|
|
10
|
+
*/
|
|
11
|
+
import type { EntryData, StorageAdapter } from "../types.js";
|
|
12
|
+
/** Called by middleware to inject the adapter before pages render. */
|
|
13
|
+
export declare function setContentAdapter(adapter: StorageAdapter): void;
|
|
14
|
+
export type { EntryData };
|
|
15
|
+
/**
|
|
16
|
+
* Load a single entry by collection and id.
|
|
17
|
+
* Returns the entry data, or null if not found.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadEntry(collection: string, id: string): Promise<Record<string, unknown> | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Load all entries in a collection.
|
|
22
|
+
* Returns an array of { id, data } objects.
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadCollection(collection: string): Promise<EntryData[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Discover all collection names.
|
|
27
|
+
* Returns sorted collection names.
|
|
28
|
+
*/
|
|
29
|
+
export declare function listCollections(): Promise<string[]>;
|
|
30
|
+
//# sourceMappingURL=content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/runtime/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7D,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE/D;AAYD,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAIzC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CAGtB;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGzD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public content loading API for Astro pages.
|
|
3
|
+
*
|
|
4
|
+
* Use these in your .astro frontmatter to read seed data:
|
|
5
|
+
*
|
|
6
|
+
* import { loadEntry, loadCollection } from '@astro-live-cms/core/runtime'
|
|
7
|
+
*
|
|
8
|
+
* const home = await loadEntry('pages', 'home')
|
|
9
|
+
* const posts = await loadCollection('posts')
|
|
10
|
+
*/
|
|
11
|
+
let _adapter = null;
|
|
12
|
+
/** Called by middleware to inject the adapter before pages render. */
|
|
13
|
+
export function setContentAdapter(adapter) {
|
|
14
|
+
_adapter = adapter;
|
|
15
|
+
}
|
|
16
|
+
function requireAdapter() {
|
|
17
|
+
if (!_adapter) {
|
|
18
|
+
throw new Error("[astro-live-cms] Content adapter not initialized. " +
|
|
19
|
+
"Ensure the CMS middleware runs before page rendering (addMiddleware order: 'pre').");
|
|
20
|
+
}
|
|
21
|
+
return _adapter;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Load a single entry by collection and id.
|
|
25
|
+
* Returns the entry data, or null if not found.
|
|
26
|
+
*/
|
|
27
|
+
export async function loadEntry(collection, id) {
|
|
28
|
+
const adapter = requireAdapter();
|
|
29
|
+
const entry = await adapter.getEntry(collection, id);
|
|
30
|
+
return entry?.data ?? null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load all entries in a collection.
|
|
34
|
+
* Returns an array of { id, data } objects.
|
|
35
|
+
*/
|
|
36
|
+
export async function loadCollection(collection) {
|
|
37
|
+
const adapter = requireAdapter();
|
|
38
|
+
return adapter.listEntries(collection);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Discover all collection names.
|
|
42
|
+
* Returns sorted collection names.
|
|
43
|
+
*/
|
|
44
|
+
export async function listCollections() {
|
|
45
|
+
const adapter = requireAdapter();
|
|
46
|
+
return adapter.discoverCollections();
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/runtime/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,IAAI,QAAQ,GAA0B,IAAI,CAAC;AAE3C,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAAC,OAAuB;IACvD,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,oDAAoD;YAClD,oFAAoF,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAID;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,UAAkB,EAClB,EAAU;IAEV,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB;IAElB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,OAAO,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,OAAO,OAAO,CAAC,mBAAmB,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime exports for use in Astro pages.
|
|
3
|
+
*
|
|
4
|
+
* import { bindEntry, loadEntry, loadCollection, mark, markImg } from '@astro-live-cms/core/runtime'
|
|
5
|
+
*/
|
|
6
|
+
export { bindEntry } from "./bind.js";
|
|
7
|
+
export { mark, markImg } from "./markers.js";
|
|
8
|
+
export { loadEntry, loadCollection, listCollections } from "./content.js";
|
|
9
|
+
export type { EntryData } from "./content.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime exports for use in Astro pages.
|
|
3
|
+
*
|
|
4
|
+
* import { bindEntry, loadEntry, loadCollection, mark, markImg } from '@astro-live-cms/core/runtime'
|
|
5
|
+
*/
|
|
6
|
+
// Binding — ADR-004 explicit inline binding
|
|
7
|
+
export { bindEntry } from "./bind.js";
|
|
8
|
+
// Markers — spread onto elements to make them CMS-editable (legacy compat)
|
|
9
|
+
export { mark, markImg } from "./markers.js";
|
|
10
|
+
// Content loading — read seed data in .astro frontmatter
|
|
11
|
+
export { loadEntry, loadCollection, listCollections } from "./content.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4CAA4C;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,2EAA2E;AAC3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE7C,yDAAyD;AACzD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribute markers for editable elements.
|
|
3
|
+
*
|
|
4
|
+
* Spread onto any HTML element to make it editable via Astro Live CMS:
|
|
5
|
+
*
|
|
6
|
+
* <h1 {...mark('pages', 'home', 'hero.headline')}>{home.hero.headline}</h1>
|
|
7
|
+
* <img {...markImg('pages', 'home', 'hero.image')} src={home.hero.image} />
|
|
8
|
+
*/
|
|
9
|
+
/** Spread onto a text element to mark it as CMS-editable. */
|
|
10
|
+
export declare function mark(collection: string, id: string, field: string): {
|
|
11
|
+
readonly "data-cms": `${string}.${string}.${string}`;
|
|
12
|
+
};
|
|
13
|
+
/** Spread onto an <img> element to mark its src as CMS-editable. */
|
|
14
|
+
export declare function markImg(collection: string, id: string, field: string): {
|
|
15
|
+
readonly "data-cms-img": `${string}.${string}.${string}`;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=markers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markers.d.ts","sourceRoot":"","sources":["../../src/runtime/markers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6DAA6D;AAC7D,wBAAgB,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;EAEjE;AAED,oEAAoE;AACpE,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;;EAEpE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribute markers for editable elements.
|
|
3
|
+
*
|
|
4
|
+
* Spread onto any HTML element to make it editable via Astro Live CMS:
|
|
5
|
+
*
|
|
6
|
+
* <h1 {...mark('pages', 'home', 'hero.headline')}>{home.hero.headline}</h1>
|
|
7
|
+
* <img {...markImg('pages', 'home', 'hero.image')} src={home.hero.image} />
|
|
8
|
+
*/
|
|
9
|
+
/** Spread onto a text element to mark it as CMS-editable. */
|
|
10
|
+
export function mark(collection, id, field) {
|
|
11
|
+
return { "data-cms": `${collection}.${id}.${field}` };
|
|
12
|
+
}
|
|
13
|
+
/** Spread onto an <img> element to mark its src as CMS-editable. */
|
|
14
|
+
export function markImg(collection, id, field) {
|
|
15
|
+
return { "data-cms-img": `${collection}.${id}.${field}` };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=markers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../src/runtime/markers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6DAA6D;AAC7D,MAAM,UAAU,IAAI,CAAC,UAAkB,EAAE,EAAU,EAAE,KAAa;IAChE,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,IAAI,EAAE,IAAI,KAAK,EAAE,EAAW,CAAC;AACjE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,OAAO,CAAC,UAAkB,EAAE,EAAU,EAAE,KAAa;IACnE,OAAO,EAAE,cAAc,EAAE,GAAG,UAAU,IAAI,EAAE,IAAI,KAAK,EAAE,EAAW,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type MiddlewareContext = {
|
|
2
|
+
locals: Record<string, unknown>;
|
|
3
|
+
cookies?: {
|
|
4
|
+
get: (name: string) => {
|
|
5
|
+
value: string;
|
|
6
|
+
} | undefined;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
type MiddlewareNext = () => Promise<Response>;
|
|
10
|
+
export declare function onRequest(context: MiddlewareContext, next: MiddlewareNext): Promise<Response>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/runtime/middleware.ts"],"names":[],"mappings":"AAmCA,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE;QACR,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;KACtD,CAAC;CACH,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE9C,wBAAsB,SAAS,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,QAAQ,CAAC,CAYnB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isEditorAuthenticated } from "./auth/session.js";
|
|
2
|
+
import { setContentAdapter } from "./content.js";
|
|
3
|
+
import { FilesystemAdapter } from "./storage/filesystem-adapter.js";
|
|
4
|
+
import { FilesystemUploadHandler } from "./storage/filesystem-upload-handler.js";
|
|
5
|
+
let _adapterSingleton = null;
|
|
6
|
+
let _uploadHandlerSingleton = null;
|
|
7
|
+
function getOrCreateAdapter() {
|
|
8
|
+
if (_adapterSingleton)
|
|
9
|
+
return _adapterSingleton;
|
|
10
|
+
const adapterType = typeof __ASTRO_LIVE_CMS_ADAPTER_TYPE__ === "string"
|
|
11
|
+
? __ASTRO_LIVE_CMS_ADAPTER_TYPE__
|
|
12
|
+
: "filesystem";
|
|
13
|
+
switch (adapterType) {
|
|
14
|
+
case "filesystem":
|
|
15
|
+
default:
|
|
16
|
+
_adapterSingleton = new FilesystemAdapter();
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
return _adapterSingleton;
|
|
20
|
+
}
|
|
21
|
+
function getOrCreateUploadHandler() {
|
|
22
|
+
if (_uploadHandlerSingleton)
|
|
23
|
+
return _uploadHandlerSingleton;
|
|
24
|
+
_uploadHandlerSingleton = new FilesystemUploadHandler();
|
|
25
|
+
return _uploadHandlerSingleton;
|
|
26
|
+
}
|
|
27
|
+
export async function onRequest(context, next) {
|
|
28
|
+
const adapter = getOrCreateAdapter();
|
|
29
|
+
const uploadHandler = getOrCreateUploadHandler();
|
|
30
|
+
context.locals.cmsAdapter = adapter;
|
|
31
|
+
context.locals.cmsUploadHandler = uploadHandler;
|
|
32
|
+
context.locals.isEditor = isEditorAuthenticated(context);
|
|
33
|
+
// Set the content module singleton so loadEntry/loadCollection work in pages
|
|
34
|
+
setContentAdapter(adapter);
|
|
35
|
+
return next();
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/runtime/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAKjF,IAAI,iBAAiB,GAA0B,IAAI,CAAC;AACpD,IAAI,uBAAuB,GAAyB,IAAI,CAAC;AAEzD,SAAS,kBAAkB;IACzB,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAEhD,MAAM,WAAW,GACf,OAAO,+BAA+B,KAAK,QAAQ;QACjD,CAAC,CAAC,+BAA+B;QACjC,CAAC,CAAC,YAAY,CAAC;IAEnB,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,YAAY,CAAC;QAClB;YACE,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAC5C,MAAM;IACV,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,wBAAwB;IAC/B,IAAI,uBAAuB;QAAE,OAAO,uBAAuB,CAAC;IAC5D,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC;IACxD,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAA0B,EAC1B,IAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;IACpC,OAAO,CAAC,MAAM,CAAC,gBAAgB,GAAG,aAAa,CAAC;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,qBAAqB,CAAC,OAAsD,CAAC,CAAC;IAExG,6EAA6E;IAC7E,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { StorageAdapter } from "../../types.js";
|
|
2
|
+
export type MutationIssue = {
|
|
3
|
+
path: string;
|
|
4
|
+
code: string;
|
|
5
|
+
message: string;
|
|
6
|
+
};
|
|
7
|
+
export type SaveFieldCommand = {
|
|
8
|
+
type: "save_field";
|
|
9
|
+
collection: string;
|
|
10
|
+
id: string;
|
|
11
|
+
field: string;
|
|
12
|
+
value: string;
|
|
13
|
+
expectedRevision?: number;
|
|
14
|
+
};
|
|
15
|
+
export type PutEntryCommand = {
|
|
16
|
+
type: "put_entry";
|
|
17
|
+
collection: string;
|
|
18
|
+
id: string;
|
|
19
|
+
data: Record<string, unknown>;
|
|
20
|
+
expectedRevision?: number;
|
|
21
|
+
};
|
|
22
|
+
export type DeleteEntryCommand = {
|
|
23
|
+
type: "delete_entry";
|
|
24
|
+
collection: string;
|
|
25
|
+
id: string;
|
|
26
|
+
expectedRevision?: number;
|
|
27
|
+
};
|
|
28
|
+
export type ReorderEntriesCommand = {
|
|
29
|
+
type: "reorder_entries";
|
|
30
|
+
collection: string;
|
|
31
|
+
items: Array<{
|
|
32
|
+
id: string;
|
|
33
|
+
order: number;
|
|
34
|
+
expectedRevision?: number;
|
|
35
|
+
}>;
|
|
36
|
+
};
|
|
37
|
+
export type UpdatePageLayoutCommand = {
|
|
38
|
+
type: "update_page_layout";
|
|
39
|
+
collection: string;
|
|
40
|
+
id: string;
|
|
41
|
+
sections: Array<{
|
|
42
|
+
id: string;
|
|
43
|
+
key: string;
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
spacing_y?: string;
|
|
46
|
+
}>;
|
|
47
|
+
expectedRevision?: number;
|
|
48
|
+
};
|
|
49
|
+
export type CmsMutationCommand = SaveFieldCommand | PutEntryCommand | DeleteEntryCommand | ReorderEntriesCommand | UpdatePageLayoutCommand;
|
|
50
|
+
export declare function parseMutationCommand(adapter: StorageAdapter, input: unknown): Promise<{
|
|
51
|
+
ok: true;
|
|
52
|
+
command: CmsMutationCommand;
|
|
53
|
+
} | {
|
|
54
|
+
ok: false;
|
|
55
|
+
issues: MutationIssue[];
|
|
56
|
+
}>;
|
|
57
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/runtime/mutations/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,GAChB,eAAe,GACf,kBAAkB,GAClB,qBAAqB,GACrB,uBAAuB,CAAC;AA0O5B,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAiC7F"}
|