@aeptus/aexeo-emdash 0.8.17 → 0.8.18
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/CHANGELOG.md +31 -0
- package/INSTALL.md +9 -10
- package/LICENSE +0 -0
- package/README.md +6 -3
- package/dist/adapter.d.ts +32 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/admin/Absorbability.d.ts +0 -0
- package/dist/admin/Absorbability.d.ts.map +0 -0
- package/dist/admin/Accessibility.d.ts +0 -0
- package/dist/admin/Accessibility.d.ts.map +0 -0
- package/dist/admin/Citability.d.ts +0 -0
- package/dist/admin/Citability.d.ts.map +0 -0
- package/dist/admin/EntityLegitimacy.d.ts +0 -0
- package/dist/admin/EntityLegitimacy.d.ts.map +0 -0
- package/dist/admin/EntityPresence.d.ts +0 -0
- package/dist/admin/EntityPresence.d.ts.map +0 -0
- package/dist/admin/Facts.d.ts +0 -0
- package/dist/admin/Facts.d.ts.map +0 -0
- package/dist/admin/Findings.d.ts +0 -0
- package/dist/admin/Findings.d.ts.map +0 -0
- package/dist/admin/PillarView.d.ts +0 -0
- package/dist/admin/PillarView.d.ts.map +0 -0
- package/dist/admin/Retrievability.d.ts +0 -0
- package/dist/admin/Retrievability.d.ts.map +0 -0
- package/dist/admin.d.ts +0 -0
- package/dist/admin.d.ts.map +0 -0
- package/dist/admin.js +0 -0
- package/dist/configured.d.ts +0 -0
- package/dist/configured.d.ts.map +1 -1
- package/dist/configured.js +217 -59
- package/dist/data-route.d.ts +0 -0
- package/dist/data-route.d.ts.map +1 -1
- package/dist/evaluator-sandbox.d.ts +0 -0
- package/dist/evaluator-sandbox.d.ts.map +0 -0
- package/dist/evaluator.d.ts +0 -0
- package/dist/evaluator.d.ts.map +0 -0
- package/dist/facts-route.d.ts +0 -0
- package/dist/facts-route.d.ts.map +0 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -22
- package/dist/indexnow.d.ts +0 -0
- package/dist/indexnow.d.ts.map +0 -0
- package/dist/mcp.d.ts +0 -0
- package/dist/mcp.d.ts.map +0 -0
- package/dist/plugin.d.ts +3 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/presence-check.d.ts +0 -0
- package/dist/presence-check.d.ts.map +0 -0
- package/dist/presence-route.d.ts +0 -0
- package/dist/presence-route.d.ts.map +0 -0
- package/dist/sandbox-entry.d.ts +0 -0
- package/dist/sandbox-entry.d.ts.map +1 -1
- package/dist/sandbox-entry.js +323 -115
- package/dist/sandbox.d.ts +0 -0
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sidecar.d.ts +0 -0
- package/dist/sidecar.d.ts.map +1 -1
- package/dist/suppressions.d.ts +0 -0
- package/dist/suppressions.d.ts.map +0 -0
- package/dist/types.d.ts +0 -0
- package/dist/types.d.ts.map +0 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +0 -0
- package/dist/wasm-init.d.ts +0 -0
- package/dist/wasm-init.d.ts.map +0 -0
- package/package.json +8 -4
- package/wasm/aexeo_emdash_bridge.d.ts +0 -0
- package/wasm/aexeo_emdash_bridge.js +0 -0
- package/wasm/aexeo_emdash_bridge_bg.d.ts +0 -0
- package/wasm/aexeo_emdash_bridge_bg.js +0 -0
- package/wasm/aexeo_emdash_bridge_bg.wasm +0 -0
- package/wasm/aexeo_emdash_bridge_bg.wasm.d.ts +0 -0
package/dist/index.js
CHANGED
|
@@ -1,29 +1,23 @@
|
|
|
1
1
|
// src/plugin.ts
|
|
2
|
-
var baseCapabilities = [
|
|
3
|
-
"read:content",
|
|
4
|
-
"read:schema",
|
|
5
|
-
"write:artifacts:public/llms.txt",
|
|
6
|
-
"write:artifacts:public/llms-full.txt",
|
|
7
|
-
"write:artifacts:public/facts.json",
|
|
8
|
-
"write:artifacts:public/*.md.txt",
|
|
9
|
-
"kv:aexeo-baselines"
|
|
10
|
-
];
|
|
2
|
+
var baseCapabilities = ["content:read"];
|
|
11
3
|
function buildCapabilities(evaluatorHost) {
|
|
12
|
-
|
|
4
|
+
const host = normalizeHost(evaluatorHost);
|
|
5
|
+
if (host === null) {
|
|
13
6
|
return baseCapabilities;
|
|
14
7
|
}
|
|
15
|
-
return [...baseCapabilities, "network:
|
|
8
|
+
return [...baseCapabilities, "network:request"];
|
|
16
9
|
}
|
|
17
10
|
function buildAllowedHosts(evaluatorHost) {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
11
|
+
const host = normalizeHost(evaluatorHost);
|
|
12
|
+
return host === null ? [] : [host];
|
|
13
|
+
}
|
|
14
|
+
function normalizeHost(evaluatorHost) {
|
|
15
|
+
const host = evaluatorHost?.trim() ?? "";
|
|
16
|
+
return host.length === 0 ? null : host;
|
|
23
17
|
}
|
|
24
18
|
|
|
25
19
|
// src/version.ts
|
|
26
|
-
var PACKAGE_VERSION = "0.8.
|
|
20
|
+
var PACKAGE_VERSION = "0.8.18";
|
|
27
21
|
|
|
28
22
|
// src/sandbox.ts
|
|
29
23
|
function aexeoPluginSandboxed(options = {}) {
|
|
@@ -87,11 +81,7 @@ function aexeoPlugin(options = {}) {
|
|
|
87
81
|
}))
|
|
88
82
|
}
|
|
89
83
|
},
|
|
90
|
-
capabilities: [
|
|
91
|
-
"read:content",
|
|
92
|
-
"read:schema",
|
|
93
|
-
"kv:aexeo-baselines"
|
|
94
|
-
],
|
|
84
|
+
capabilities: ["content:read"],
|
|
95
85
|
// adminPages drives the admin sidebar — one nav entry per item.
|
|
96
86
|
// Don't list "/" alongside "/findings": both would render as
|
|
97
87
|
// duplicate "SEO findings" links in the sidebar (0.1.0 / 0.1.1
|
package/dist/indexnow.d.ts
CHANGED
|
File without changes
|
package/dist/indexnow.d.ts.map
CHANGED
|
File without changes
|
package/dist/mcp.d.ts
CHANGED
|
File without changes
|
package/dist/mcp.d.ts.map
CHANGED
|
File without changes
|
package/dist/plugin.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export interface SandboxContentApi {
|
|
|
37
37
|
limit?: number;
|
|
38
38
|
cursor?: string;
|
|
39
39
|
}): Promise<ContentList>;
|
|
40
|
+
getPublicUrl(collection: string, id: string): Promise<string | null>;
|
|
41
|
+
getTranslations: import("./adapter.js").ContentUrlApi["getTranslations"];
|
|
40
42
|
}
|
|
41
43
|
export interface SandboxCtx {
|
|
42
44
|
kv: KvNamespace;
|
|
@@ -58,7 +60,7 @@ export interface ContentAfterSaveEvent {
|
|
|
58
60
|
collection: string;
|
|
59
61
|
isNew: boolean;
|
|
60
62
|
}
|
|
61
|
-
export declare function handleAfterSave(
|
|
63
|
+
export declare function handleAfterSave(event: ContentAfterSaveEvent, ctx: SandboxCtx): Promise<void>;
|
|
62
64
|
export declare function handleAfterSaveConfigured(event: ContentAfterSaveEvent, ctx: SandboxCtx, evaluator: EvaluatorFn, suppressionFilter?: SuppressionFilter): Promise<void>;
|
|
63
65
|
export declare const DEFAULT_COLLECTIONS: readonly ["posts", "pages"];
|
|
64
66
|
export interface RefreshSummary {
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/presence-check.d.ts
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/presence-route.d.ts
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/sandbox-entry.d.ts
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-entry.d.ts","sourceRoot":"","sources":["../src/sandbox-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EAEX,UAAU,EAEX,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,eAAe,EAKhB,MAAM,aAAa,CAAC;AAiBrB,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAYN,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqDD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,WAAW,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;KAAE,CAAC;CACjE;AAMD,iBAAe,gBAAgB,CAC7B,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,aAAa,CAAC,CAwBxB;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"sandbox-entry.d.ts","sourceRoot":"","sources":["../src/sandbox-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EAEX,UAAU,EAEX,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,eAAe,EAKhB,MAAM,aAAa,CAAC;AAiBrB,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAYN,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqDD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,WAAW,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;KAAE,CAAC;CACjE;AAMD,iBAAe,gBAAgB,CAC7B,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,aAAa,CAAC,CAwBxB;;;;;;;;;;;;AA8gBD,wBAWG"}
|
package/dist/sandbox-entry.js
CHANGED
|
@@ -1,13 +1,40 @@
|
|
|
1
1
|
// src/adapter.ts
|
|
2
|
-
function
|
|
3
|
-
const
|
|
2
|
+
async function adaptContentItemWithContext(content, contentApi, defaultLocale) {
|
|
3
|
+
const publicUrl = content.status === "published" ? await contentApi.getPublicUrl(content.type, content.id) : null;
|
|
4
|
+
const route = publicUrl === null ? deriveRoute(content) : routeFromPublicUrl(publicUrl);
|
|
5
|
+
const adapted = adaptContentItem(content, {
|
|
6
|
+
route,
|
|
7
|
+
publicUrl,
|
|
8
|
+
...defaultLocale === void 0 ? {} : { defaultLocale }
|
|
9
|
+
});
|
|
10
|
+
const translationSet = await contentApi.getTranslations(
|
|
11
|
+
content.type,
|
|
12
|
+
content.id
|
|
13
|
+
);
|
|
14
|
+
const alternates = await Promise.all(
|
|
15
|
+
translationSet.translations.filter(
|
|
16
|
+
(translation) => translation.status === "published" && typeof translation.locale === "string" && translation.locale.length > 0
|
|
17
|
+
).map(async (translation) => {
|
|
18
|
+
const href = translation.id === content.id ? publicUrl : await contentApi.getPublicUrl(content.type, translation.id);
|
|
19
|
+
if (href === null) return null;
|
|
20
|
+
return { lang: translation.locale, href };
|
|
21
|
+
})
|
|
22
|
+
);
|
|
23
|
+
const uniqueAlternates = /* @__PURE__ */ new Map();
|
|
24
|
+
for (const alternate of alternates) {
|
|
25
|
+
if (alternate !== null) uniqueAlternates.set(alternate.lang, alternate);
|
|
26
|
+
}
|
|
27
|
+
if (uniqueAlternates.size > 0) {
|
|
28
|
+
adapted.document.alternates = [...uniqueAlternates.values()];
|
|
29
|
+
}
|
|
30
|
+
return adapted;
|
|
31
|
+
}
|
|
32
|
+
function adaptContentItem(content, options = {}) {
|
|
33
|
+
const route = options.route ?? deriveRoute(content);
|
|
4
34
|
const title = stringOrEmpty(
|
|
5
35
|
content.seo?.title ?? content.data["title"] ?? content.slug ?? content.id
|
|
6
36
|
);
|
|
7
|
-
const document = {
|
|
8
|
-
route,
|
|
9
|
-
title
|
|
10
|
-
};
|
|
37
|
+
const document = { route, title };
|
|
11
38
|
const description = content.seo?.description ?? content.data["description"];
|
|
12
39
|
if (typeof description === "string" && description.length > 0) {
|
|
13
40
|
document.description = description;
|
|
@@ -16,13 +43,12 @@ function adaptContentItem(content) {
|
|
|
16
43
|
if (typeof canonical === "string" && canonical.length > 0) {
|
|
17
44
|
document.canonical = canonical;
|
|
18
45
|
}
|
|
19
|
-
|
|
20
|
-
|
|
46
|
+
const locale = content.locale || options.defaultLocale;
|
|
47
|
+
if (typeof locale === "string" && locale.length > 0) {
|
|
48
|
+
document.lang = locale;
|
|
21
49
|
}
|
|
22
50
|
const body = extractPortableText(content.data);
|
|
23
|
-
if (body !== null)
|
|
24
|
-
document.body = body;
|
|
25
|
-
}
|
|
51
|
+
if (body !== null) document.body = body;
|
|
26
52
|
return {
|
|
27
53
|
document,
|
|
28
54
|
meta: {
|
|
@@ -30,40 +56,202 @@ function adaptContentItem(content) {
|
|
|
30
56
|
collection: content.type,
|
|
31
57
|
slug: content.slug,
|
|
32
58
|
status: content.status,
|
|
33
|
-
title
|
|
59
|
+
title,
|
|
60
|
+
publicUrl: options.publicUrl ?? null
|
|
34
61
|
}
|
|
35
62
|
};
|
|
36
63
|
}
|
|
37
64
|
function deriveRoute(content) {
|
|
38
|
-
|
|
39
|
-
|
|
65
|
+
return `/${encodeURIComponent(content.type)}/${encodeURIComponent(content.id)}`;
|
|
66
|
+
}
|
|
67
|
+
function routeFromPublicUrl(publicUrl) {
|
|
68
|
+
try {
|
|
69
|
+
return new URL(publicUrl).pathname || "/";
|
|
70
|
+
} catch (cause) {
|
|
71
|
+
throw new Error(`EmDash returned an invalid public URL: ${publicUrl}`, {
|
|
72
|
+
cause
|
|
73
|
+
});
|
|
40
74
|
}
|
|
41
|
-
return `/${content.type}/${content.id}`;
|
|
42
75
|
}
|
|
43
76
|
function stringOrEmpty(value) {
|
|
44
77
|
return typeof value === "string" ? value : "";
|
|
45
78
|
}
|
|
46
79
|
function extractPortableText(data) {
|
|
47
|
-
const
|
|
48
|
-
for (const slug of candidates) {
|
|
80
|
+
for (const slug of ["body", "content"]) {
|
|
49
81
|
const value = data[slug];
|
|
50
|
-
if (isPortableTextArray(value))
|
|
51
|
-
|
|
82
|
+
if (isPortableTextArray(value)) return value;
|
|
83
|
+
if (isEmdashBlocksArray(value, slug)) return blocksToPortableText(value);
|
|
84
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
85
|
+
return [portableTextBlock(value.trim(), `${slug}-text`)];
|
|
52
86
|
}
|
|
53
87
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
88
|
+
const blocks = data["blocks"];
|
|
89
|
+
if (isPortableTextArray(blocks)) return blocks;
|
|
90
|
+
if (isEmdashBlocksArray(blocks, "blocks")) return blocksToPortableText(blocks);
|
|
91
|
+
for (const [field, value] of Object.entries(data)) {
|
|
92
|
+
if (field === "body" || field === "content" || field === "blocks") continue;
|
|
93
|
+
if (isPortableTextArray(value)) return value;
|
|
94
|
+
if (isEmdashBlocksArray(value, field)) return blocksToPortableText(value);
|
|
58
95
|
}
|
|
59
96
|
return null;
|
|
60
97
|
}
|
|
61
98
|
function isPortableTextArray(value) {
|
|
62
|
-
|
|
63
|
-
|
|
99
|
+
return Array.isArray(value) && value.length > 0 && value.every(
|
|
100
|
+
(item) => isRecord(item) && item["_type"] === "block" && Array.isArray(item["children"]) && item["children"].every(
|
|
101
|
+
(child) => isRecord(child) && typeof child["text"] === "string"
|
|
102
|
+
)
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
function isEmdashBlocksArray(value, field) {
|
|
106
|
+
if (!Array.isArray(value) || value.length === 0) return false;
|
|
107
|
+
return value.every(
|
|
108
|
+
(item) => isRecord(item) && typeof item["_type"] === "string" && typeof item["_key"] === "string" && (typeof item["_version"] === "number" || field === "blocks")
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
function blocksToPortableText(blocks) {
|
|
112
|
+
const paragraphs = [];
|
|
113
|
+
for (const block of blocks) {
|
|
114
|
+
const segments = [];
|
|
115
|
+
collectText(block, "", segments);
|
|
116
|
+
const text = segments.map((segment) => segment.trim()).filter(Boolean).join(" ");
|
|
117
|
+
if (text.length > 0) {
|
|
118
|
+
paragraphs.push(portableTextBlock(text, stringOrEmpty(block["_key"])));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return paragraphs;
|
|
122
|
+
}
|
|
123
|
+
function collectText(value, key, out) {
|
|
124
|
+
if (typeof value === "string") {
|
|
125
|
+
if (!isStructuralField(key) && value.trim().length > 0) out.push(value);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (Array.isArray(value)) {
|
|
129
|
+
for (const item of value) collectText(item, key, out);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (!isRecord(value)) return;
|
|
133
|
+
for (const [childKey, childValue] of Object.entries(value)) {
|
|
134
|
+
if (isStructuralField(childKey)) continue;
|
|
135
|
+
collectText(childValue, childKey, out);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
var STRUCTURAL_FIELDS = /* @__PURE__ */ new Set([
|
|
139
|
+
"_key",
|
|
140
|
+
"_ref",
|
|
141
|
+
"_type",
|
|
142
|
+
"_version",
|
|
143
|
+
"asset",
|
|
144
|
+
"align",
|
|
145
|
+
"alignment",
|
|
146
|
+
"autoplay",
|
|
147
|
+
"color",
|
|
148
|
+
"controls",
|
|
149
|
+
"focalpoint",
|
|
150
|
+
"height",
|
|
151
|
+
"href",
|
|
152
|
+
"id",
|
|
153
|
+
"layout",
|
|
154
|
+
"level",
|
|
155
|
+
"loop",
|
|
156
|
+
"markdefs",
|
|
157
|
+
"marks",
|
|
158
|
+
"mime_type",
|
|
159
|
+
"mimetype",
|
|
160
|
+
"position",
|
|
161
|
+
"rel",
|
|
162
|
+
"size",
|
|
163
|
+
"src",
|
|
164
|
+
"style",
|
|
165
|
+
"target",
|
|
166
|
+
"theme",
|
|
167
|
+
"tone",
|
|
168
|
+
"url",
|
|
169
|
+
"variant",
|
|
170
|
+
"width"
|
|
171
|
+
]);
|
|
172
|
+
function isStructuralField(key) {
|
|
173
|
+
const normalized = key.toLowerCase();
|
|
174
|
+
return normalized.startsWith("_") || STRUCTURAL_FIELDS.has(normalized);
|
|
175
|
+
}
|
|
176
|
+
function portableTextBlock(text, key) {
|
|
177
|
+
return {
|
|
178
|
+
_type: "block",
|
|
179
|
+
...key.length === 0 ? {} : { _key: key },
|
|
180
|
+
children: [
|
|
181
|
+
{
|
|
182
|
+
_type: "span",
|
|
183
|
+
...key.length === 0 ? {} : { _key: `${key}-text` },
|
|
184
|
+
text,
|
|
185
|
+
marks: []
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function isRecord(value) {
|
|
191
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// src/sidecar.ts
|
|
195
|
+
async function evaluateViaSidecar(http, config, documents) {
|
|
196
|
+
const body = {
|
|
197
|
+
documents
|
|
198
|
+
};
|
|
199
|
+
if (config.configJson !== void 0) {
|
|
200
|
+
body.configJson = config.configJson;
|
|
201
|
+
}
|
|
202
|
+
let response;
|
|
203
|
+
try {
|
|
204
|
+
response = await http.fetch(`${trimTrailingSlash(config.url)}/evaluate`, {
|
|
205
|
+
method: "POST",
|
|
206
|
+
headers: {
|
|
207
|
+
authorization: `Bearer ${config.authToken}`,
|
|
208
|
+
"content-type": "application/json"
|
|
209
|
+
},
|
|
210
|
+
body: JSON.stringify(body)
|
|
211
|
+
});
|
|
212
|
+
} catch (err) {
|
|
213
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
214
|
+
return { ok: false, reason: "network_error", detail };
|
|
215
|
+
}
|
|
216
|
+
if (response.status === 401 || response.status === 403) {
|
|
217
|
+
return {
|
|
218
|
+
ok: false,
|
|
219
|
+
reason: "auth_error",
|
|
220
|
+
detail: `sidecar rejected token (HTTP ${response.status})`
|
|
221
|
+
};
|
|
64
222
|
}
|
|
65
|
-
|
|
66
|
-
|
|
223
|
+
if (!response.ok) {
|
|
224
|
+
let detail = `sidecar HTTP ${response.status}`;
|
|
225
|
+
try {
|
|
226
|
+
detail = `${detail}: ${await response.text()}`;
|
|
227
|
+
} catch {
|
|
228
|
+
}
|
|
229
|
+
return { ok: false, reason: "server_error", detail };
|
|
230
|
+
}
|
|
231
|
+
let raw;
|
|
232
|
+
try {
|
|
233
|
+
raw = await response.text();
|
|
234
|
+
} catch (err) {
|
|
235
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
236
|
+
return { ok: false, reason: "invalid_response", detail };
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
const findings = JSON.parse(raw);
|
|
240
|
+
if (!Array.isArray(findings)) {
|
|
241
|
+
return {
|
|
242
|
+
ok: false,
|
|
243
|
+
reason: "invalid_response",
|
|
244
|
+
detail: "sidecar returned non-array body"
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
return { ok: true, findings };
|
|
248
|
+
} catch (err) {
|
|
249
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
250
|
+
return { ok: false, reason: "invalid_response", detail };
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function trimTrailingSlash(url) {
|
|
254
|
+
return url.endsWith("/") ? url.slice(0, -1) : url;
|
|
67
255
|
}
|
|
68
256
|
|
|
69
257
|
// src/plugin.ts
|
|
@@ -84,7 +272,56 @@ async function writeSidecarConfig(kv, config) {
|
|
|
84
272
|
await kv.set(CONFIG_URL_KEY, config.url);
|
|
85
273
|
await kv.set(CONFIG_TOKEN_KEY, config.token);
|
|
86
274
|
}
|
|
87
|
-
async function handleAfterSave(
|
|
275
|
+
async function handleAfterSave(event, ctx) {
|
|
276
|
+
const runtime = await readSidecarConfig(ctx.kv);
|
|
277
|
+
if (runtime === null) {
|
|
278
|
+
ctx.log?.warn?.(
|
|
279
|
+
"Aexeo afterSave skipped: configure the evaluator URL and token on the Setup page"
|
|
280
|
+
);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
await handleAfterSaveConfigured(
|
|
284
|
+
event,
|
|
285
|
+
ctx,
|
|
286
|
+
(documents) => evaluateViaSidecar(
|
|
287
|
+
ctx.http,
|
|
288
|
+
{ url: runtime.url, authToken: runtime.token },
|
|
289
|
+
documents
|
|
290
|
+
)
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
async function handleAfterSaveConfigured(event, ctx, evaluator, suppressionFilter) {
|
|
294
|
+
const adapted = await adaptContentItemWithContext(
|
|
295
|
+
event.content,
|
|
296
|
+
ctx.content,
|
|
297
|
+
ctx.site?.locale
|
|
298
|
+
);
|
|
299
|
+
const document = adapted.document;
|
|
300
|
+
const { kv, log } = ctx;
|
|
301
|
+
const stored = { document, meta: adapted.meta };
|
|
302
|
+
await persistDocument(ctx, stored);
|
|
303
|
+
const result = await evaluator([document]);
|
|
304
|
+
if (!result.ok) {
|
|
305
|
+
log?.error?.(`afterSave evaluator failure (${result.reason})`, {
|
|
306
|
+
detail: result.detail
|
|
307
|
+
});
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
const pageFindings = result.findings.filter(
|
|
311
|
+
(finding) => finding.scope === "page"
|
|
312
|
+
);
|
|
313
|
+
const filtered = suppressionFilter === void 0 ? pageFindings : suppressionFilter.apply(
|
|
314
|
+
{
|
|
315
|
+
route: document.route,
|
|
316
|
+
collection: adapted.meta.collection,
|
|
317
|
+
status: adapted.meta.status
|
|
318
|
+
},
|
|
319
|
+
pageFindings
|
|
320
|
+
);
|
|
321
|
+
await kv.set(findingsKey(document.route), {
|
|
322
|
+
route: document.route,
|
|
323
|
+
findings: filtered
|
|
324
|
+
});
|
|
88
325
|
}
|
|
89
326
|
var DEFAULT_COLLECTIONS = ["posts", "pages"];
|
|
90
327
|
async function evaluateAndPersistAll(ctx, options) {
|
|
@@ -109,7 +346,11 @@ async function evaluateAndPersistAll(ctx, options) {
|
|
|
109
346
|
...cursor === void 0 ? {} : { cursor }
|
|
110
347
|
});
|
|
111
348
|
for (const item of page.items) {
|
|
112
|
-
const adapted =
|
|
349
|
+
const adapted = await adaptContentItemWithContext(
|
|
350
|
+
item,
|
|
351
|
+
ctx.content,
|
|
352
|
+
ctx.site?.locale
|
|
353
|
+
);
|
|
113
354
|
documents.push(adapted.document);
|
|
114
355
|
documentRoutes.add(adapted.document.route);
|
|
115
356
|
adaptedByRoute.set(adapted.document.route, {
|
|
@@ -161,8 +402,57 @@ async function evaluateAndPersistAll(ctx, options) {
|
|
|
161
402
|
totalAfterSuppression += filtered.length;
|
|
162
403
|
}
|
|
163
404
|
summary.totalFindings = totalAfterSuppression;
|
|
405
|
+
if (summary.errors.length === 0) {
|
|
406
|
+
await removeStaleDocuments(ctx, collections, documentRoutes);
|
|
407
|
+
}
|
|
164
408
|
return summary;
|
|
165
409
|
}
|
|
410
|
+
async function persistDocument(ctx, stored) {
|
|
411
|
+
const route = stored.document.route;
|
|
412
|
+
const entries = await ctx.kv.list("document:");
|
|
413
|
+
for (const entry of entries) {
|
|
414
|
+
const previous = toStoredDocument(entry.value);
|
|
415
|
+
if (previous === null || previous.document.route === route || previous.meta.id !== stored.meta.id || previous.meta.collection !== stored.meta.collection) {
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
await ctx.kv.delete(entry.key);
|
|
419
|
+
await ctx.kv.delete(findingsKey(previous.document.route));
|
|
420
|
+
}
|
|
421
|
+
await ctx.kv.set(documentKey(route), stored);
|
|
422
|
+
}
|
|
423
|
+
async function removeStaleDocuments(ctx, collections, currentRoutes) {
|
|
424
|
+
const scannedCollections = new Set(collections);
|
|
425
|
+
const entries = await ctx.kv.list("document:");
|
|
426
|
+
for (const entry of entries) {
|
|
427
|
+
const stored = toStoredDocument(entry.value);
|
|
428
|
+
if (stored === null || !scannedCollections.has(stored.meta.collection) || currentRoutes.has(stored.document.route)) {
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
await ctx.kv.delete(entry.key);
|
|
432
|
+
await ctx.kv.delete(findingsKey(stored.document.route));
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
function toStoredDocument(value) {
|
|
436
|
+
if (value === null || typeof value !== "object") return null;
|
|
437
|
+
if ("document" in value && "meta" in value && value.document !== null && typeof value.document === "object" && "route" in value.document && typeof value.document.route === "string" && value.meta !== null && typeof value.meta === "object") {
|
|
438
|
+
return value;
|
|
439
|
+
}
|
|
440
|
+
if ("route" in value && typeof value.route === "string") {
|
|
441
|
+
const document = value;
|
|
442
|
+
return {
|
|
443
|
+
document,
|
|
444
|
+
meta: {
|
|
445
|
+
id: document.route,
|
|
446
|
+
collection: "",
|
|
447
|
+
slug: null,
|
|
448
|
+
status: "",
|
|
449
|
+
title: document.title ?? "",
|
|
450
|
+
publicUrl: null
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
166
456
|
function findingsKey(route) {
|
|
167
457
|
const normalized = route === "" || route === "/" ? "/" : route;
|
|
168
458
|
return `findings:${normalized}`;
|
|
@@ -178,25 +468,8 @@ async function readAllStoredDocuments(kv) {
|
|
|
178
468
|
const entries = await kv.list("document:");
|
|
179
469
|
const out = [];
|
|
180
470
|
for (const entry of entries) {
|
|
181
|
-
const
|
|
182
|
-
if (
|
|
183
|
-
if ("document" in value && "meta" in value) {
|
|
184
|
-
out.push(value);
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
if ("route" in value) {
|
|
188
|
-
const document = value;
|
|
189
|
-
out.push({
|
|
190
|
-
document,
|
|
191
|
-
meta: {
|
|
192
|
-
id: document.route,
|
|
193
|
-
collection: "",
|
|
194
|
-
slug: null,
|
|
195
|
-
status: "",
|
|
196
|
-
title: document.title ?? ""
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
}
|
|
471
|
+
const stored = toStoredDocument(entry.value);
|
|
472
|
+
if (stored !== null) out.push(stored);
|
|
200
473
|
}
|
|
201
474
|
return out;
|
|
202
475
|
}
|
|
@@ -208,69 +481,6 @@ async function readFindings(kv, route) {
|
|
|
208
481
|
return stored.findings;
|
|
209
482
|
}
|
|
210
483
|
|
|
211
|
-
// src/sidecar.ts
|
|
212
|
-
async function evaluateViaSidecar(http, config, documents) {
|
|
213
|
-
const body = {
|
|
214
|
-
documents
|
|
215
|
-
};
|
|
216
|
-
if (config.configJson !== void 0) {
|
|
217
|
-
body.configJson = config.configJson;
|
|
218
|
-
}
|
|
219
|
-
let response;
|
|
220
|
-
try {
|
|
221
|
-
response = await http.fetch(`${trimTrailingSlash(config.url)}/evaluate`, {
|
|
222
|
-
method: "POST",
|
|
223
|
-
headers: {
|
|
224
|
-
authorization: `Bearer ${config.authToken}`,
|
|
225
|
-
"content-type": "application/json"
|
|
226
|
-
},
|
|
227
|
-
body: JSON.stringify(body)
|
|
228
|
-
});
|
|
229
|
-
} catch (err) {
|
|
230
|
-
const detail = err instanceof Error ? err.message : String(err);
|
|
231
|
-
return { ok: false, reason: "network_error", detail };
|
|
232
|
-
}
|
|
233
|
-
if (response.status === 401 || response.status === 403) {
|
|
234
|
-
return {
|
|
235
|
-
ok: false,
|
|
236
|
-
reason: "auth_error",
|
|
237
|
-
detail: `sidecar rejected token (HTTP ${response.status})`
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
if (!response.ok) {
|
|
241
|
-
let detail = `sidecar HTTP ${response.status}`;
|
|
242
|
-
try {
|
|
243
|
-
detail = `${detail}: ${await response.text()}`;
|
|
244
|
-
} catch {
|
|
245
|
-
}
|
|
246
|
-
return { ok: false, reason: "server_error", detail };
|
|
247
|
-
}
|
|
248
|
-
let raw;
|
|
249
|
-
try {
|
|
250
|
-
raw = await response.text();
|
|
251
|
-
} catch (err) {
|
|
252
|
-
const detail = err instanceof Error ? err.message : String(err);
|
|
253
|
-
return { ok: false, reason: "invalid_response", detail };
|
|
254
|
-
}
|
|
255
|
-
try {
|
|
256
|
-
const findings = JSON.parse(raw);
|
|
257
|
-
if (!Array.isArray(findings)) {
|
|
258
|
-
return {
|
|
259
|
-
ok: false,
|
|
260
|
-
reason: "invalid_response",
|
|
261
|
-
detail: "sidecar returned non-array body"
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
return { ok: true, findings };
|
|
265
|
-
} catch (err) {
|
|
266
|
-
const detail = err instanceof Error ? err.message : String(err);
|
|
267
|
-
return { ok: false, reason: "invalid_response", detail };
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
function trimTrailingSlash(url) {
|
|
271
|
-
return url.endsWith("/") ? url.slice(0, -1) : url;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
484
|
// src/evaluator-sandbox.ts
|
|
275
485
|
async function evaluate(_documents) {
|
|
276
486
|
return [];
|
|
@@ -601,10 +811,8 @@ async function renderFindingsPage(ctx) {
|
|
|
601
811
|
{
|
|
602
812
|
type: "actions",
|
|
603
813
|
elements: [
|
|
604
|
-
// Refresh
|
|
605
|
-
//
|
|
606
|
-
// re-evaluation is admin-triggered rather than save-triggered.
|
|
607
|
-
// Pressing this lists all content via the live in-request bridge,
|
|
814
|
+
// Refresh evaluates every configured entry. Pressing it lists
|
|
815
|
+
// content via the live in-request bridge,
|
|
608
816
|
// calls the sidecar /evaluate, and writes findings back to KV.
|
|
609
817
|
{
|
|
610
818
|
type: "button",
|
package/dist/sandbox.d.ts
CHANGED
|
File without changes
|
package/dist/sandbox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAGnB,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAGxC,YAAY,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC5C,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAeD,MAAM,WAAW,qBAAqB;IAgBpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,qBAA0B,GAClC,yBAAyB,CAwB3B"}
|
package/dist/sidecar.d.ts
CHANGED
|
File without changes
|
package/dist/sidecar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAiB1D,MAAM,WAAW,WAAW;IAC1B,KAAK,CACH,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GACA,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAIlB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,GACjC;IACE,EAAE,EAAE,KAAK,CAAC;IAGV,MAAM,EACF,eAAe,GACf,YAAY,GACZ,cAAc,GACd,kBAAkB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,cAAc,EAAE,GACnC,OAAO,CAAC,aAAa,CAAC,CA+DxB"}
|
package/dist/suppressions.d.ts
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/types.d.ts
CHANGED
|
File without changes
|
package/dist/types.d.ts.map
CHANGED
|
File without changes
|