@aotter/mantle 0.2.0-alpha.4 → 0.2.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/README.md +2 -2
  2. package/dist/admin/createAdminSurface.d.ts +3 -0
  3. package/dist/admin/createAdminSurface.d.ts.map +1 -1
  4. package/dist/admin/createAdminSurface.js +51 -8
  5. package/dist/admin/createAdminSurface.js.map +1 -1
  6. package/dist/admin/extensions.d.ts +290 -0
  7. package/dist/admin/extensions.d.ts.map +1 -0
  8. package/dist/admin/extensions.js +532 -0
  9. package/dist/admin/extensions.js.map +1 -0
  10. package/dist/admin/index.d.ts +1 -0
  11. package/dist/admin/index.d.ts.map +1 -1
  12. package/dist/admin/index.js +1 -0
  13. package/dist/admin/index.js.map +1 -1
  14. package/dist/auth/buildAuth.d.ts +3 -1
  15. package/dist/auth/buildAuth.d.ts.map +1 -1
  16. package/dist/auth/buildAuth.js +3 -2
  17. package/dist/auth/buildAuth.js.map +1 -1
  18. package/dist/auth/callerResolver.d.ts +4 -0
  19. package/dist/auth/callerResolver.d.ts.map +1 -1
  20. package/dist/auth/callerResolver.js +4 -1
  21. package/dist/auth/callerResolver.js.map +1 -1
  22. package/dist/auth/createMantleAuth.d.ts.map +1 -1
  23. package/dist/auth/createMantleAuth.js +3 -2
  24. package/dist/auth/createMantleAuth.js.map +1 -1
  25. package/dist/auth/db.d.ts +1 -0
  26. package/dist/auth/db.d.ts.map +1 -1
  27. package/dist/auth/db.js +6 -3
  28. package/dist/auth/db.js.map +1 -1
  29. package/dist/bun/index.d.ts +0 -44
  30. package/dist/bun/index.d.ts.map +1 -1
  31. package/dist/bun/index.js +0 -84
  32. package/dist/bun/index.js.map +1 -1
  33. package/dist/cli/generate.js +3 -3
  34. package/dist/cli/generate.js.map +1 -1
  35. package/dist/cli/preset.d.ts.map +1 -1
  36. package/dist/cli/preset.js +80 -28
  37. package/dist/cli/preset.js.map +1 -1
  38. package/dist/cloudflare/index.d.ts +4 -0
  39. package/dist/cloudflare/index.d.ts.map +1 -1
  40. package/dist/cloudflare/index.js +2 -0
  41. package/dist/cloudflare/index.js.map +1 -1
  42. package/dist/core/dialect.d.ts +13 -1
  43. package/dist/core/dialect.d.ts.map +1 -1
  44. package/dist/core/driver.d.ts +7 -0
  45. package/dist/core/driver.d.ts.map +1 -1
  46. package/dist/core/runtime/createRuntime.js +1 -1
  47. package/dist/core/runtime/createRuntime.js.map +1 -1
  48. package/dist/core/sessionUser.d.ts +14 -0
  49. package/dist/core/sessionUser.d.ts.map +1 -0
  50. package/dist/core/sessionUser.js +4 -0
  51. package/dist/core/sessionUser.js.map +1 -0
  52. package/dist/core/sql/allowlist.d.ts +2 -0
  53. package/dist/core/sql/allowlist.d.ts.map +1 -1
  54. package/dist/core/sql/allowlist.js +43 -11
  55. package/dist/core/sql/allowlist.js.map +1 -1
  56. package/dist/core/sql/ast.js +1 -1
  57. package/dist/core/sql/ast.js.map +1 -1
  58. package/dist/core/sql/compile.js +1 -1
  59. package/dist/core/sql/compile.js.map +1 -1
  60. package/dist/core/sql/policy.d.ts +2 -0
  61. package/dist/core/sql/policy.d.ts.map +1 -1
  62. package/dist/core/sql/policy.js +25 -6
  63. package/dist/core/sql/policy.js.map +1 -1
  64. package/dist/core/sql/run.d.ts +0 -8
  65. package/dist/core/sql/run.d.ts.map +1 -1
  66. package/dist/core/sql/run.js +152 -35
  67. package/dist/core/sql/run.js.map +1 -1
  68. package/dist/d1/executor.d.ts +2 -0
  69. package/dist/d1/executor.d.ts.map +1 -1
  70. package/dist/d1/executor.js +6 -1
  71. package/dist/d1/executor.js.map +1 -1
  72. package/dist/mcp/createMcpSurface.d.ts +5 -2
  73. package/dist/mcp/createMcpSurface.d.ts.map +1 -1
  74. package/dist/mcp/createMcpSurface.js +14 -3
  75. package/dist/mcp/createMcpSurface.js.map +1 -1
  76. package/dist/mcp/media.d.ts +9 -0
  77. package/dist/mcp/media.d.ts.map +1 -0
  78. package/dist/mcp/media.js +33 -0
  79. package/dist/mcp/media.js.map +1 -0
  80. package/dist/postgres/adapter.d.ts +5 -2
  81. package/dist/postgres/adapter.d.ts.map +1 -1
  82. package/dist/postgres/adapter.js +7 -1
  83. package/dist/postgres/adapter.js.map +1 -1
  84. package/dist/postgres/compile/index.d.ts +1 -1
  85. package/dist/postgres/compile/index.js +1 -1
  86. package/dist/postgres/driver.d.ts +38 -21
  87. package/dist/postgres/driver.d.ts.map +1 -1
  88. package/dist/postgres/driver.js +100 -24
  89. package/dist/postgres/driver.js.map +1 -1
  90. package/dist/postgres/executor.d.ts +8 -0
  91. package/dist/postgres/executor.d.ts.map +1 -1
  92. package/dist/postgres/executor.js +40 -13
  93. package/dist/postgres/executor.js.map +1 -1
  94. package/dist/postgres/index.d.ts +2 -1
  95. package/dist/postgres/index.d.ts.map +1 -1
  96. package/dist/postgres/index.js +1 -0
  97. package/dist/postgres/index.js.map +1 -1
  98. package/dist/postgres/lower.d.ts.map +1 -1
  99. package/dist/postgres/lower.js +3 -8
  100. package/dist/postgres/lower.js.map +1 -1
  101. package/dist/postgres/print.d.ts.map +1 -1
  102. package/dist/postgres/print.js +2 -15
  103. package/dist/postgres/print.js.map +1 -1
  104. package/dist/postgres/session.d.ts +9 -0
  105. package/dist/postgres/session.d.ts.map +1 -0
  106. package/dist/postgres/session.js +111 -0
  107. package/dist/postgres/session.js.map +1 -0
  108. package/dist/postgres/storage.d.ts +14 -1
  109. package/dist/postgres/storage.d.ts.map +1 -1
  110. package/dist/postgres/storage.js +136 -54
  111. package/dist/postgres/storage.js.map +1 -1
  112. package/dist/postgres/validator.d.ts +4 -3
  113. package/dist/postgres/validator.d.ts.map +1 -1
  114. package/dist/postgres/validator.js +13 -6
  115. package/dist/postgres/validator.js.map +1 -1
  116. package/dist/spec/domain/model/ManifestGrammar.d.ts +4 -0
  117. package/dist/spec/domain/model/ManifestGrammar.d.ts.map +1 -1
  118. package/dist/spec/domain/model/ManifestGrammar.js +4 -0
  119. package/dist/spec/domain/model/ManifestGrammar.js.map +1 -1
  120. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +2 -0
  121. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +1 -1
  122. package/dist/spec/domain/service/SchemaAdminUiChecker.js +50 -6
  123. package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +1 -1
  124. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +1 -1
  125. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +1 -1
  126. package/dist/spec/domain/service/ViewAdminUiChecker.js +7 -2
  127. package/dist/spec/domain/service/ViewAdminUiChecker.js.map +1 -1
  128. package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +1 -1
  129. package/dist/spec/infrastructure/sql/compilePlan.js +5 -0
  130. package/dist/spec/infrastructure/sql/compilePlan.js.map +1 -1
  131. package/dist/spec/kernel/diagnostic.d.ts +1 -1
  132. package/dist/spec/kernel/diagnostic.d.ts.map +1 -1
  133. package/dist/spec/kernel/diagnostic.js +5 -0
  134. package/dist/spec/kernel/diagnostic.js.map +1 -1
  135. package/dist/testing/cases/corpus.d.ts +2 -0
  136. package/dist/testing/cases/corpus.d.ts.map +1 -1
  137. package/dist/testing/cases/corpus.js +7 -5
  138. package/dist/testing/cases/corpus.js.map +1 -1
  139. package/dist/testing/cases/policy.d.ts +14 -1
  140. package/dist/testing/cases/policy.d.ts.map +1 -1
  141. package/dist/testing/cases/policy.js +3 -2
  142. package/dist/testing/cases/policy.js.map +1 -1
  143. package/dist/testing/cases/printer.d.ts.map +1 -1
  144. package/dist/testing/cases/printer.js +3 -1
  145. package/dist/testing/cases/printer.js.map +1 -1
  146. package/dist/testing/cases/report-view.d.ts.map +1 -1
  147. package/dist/testing/cases/report-view.js +18 -0
  148. package/dist/testing/cases/report-view.js.map +1 -1
  149. package/docs/adr/0031-host-cloud-core-contract.md +62 -1
  150. package/docs/adr/0032-store-centric-core-and-service-contract.md +17 -0
  151. package/docs/adr/0037-postgresql-is-the-reference-dialect.md +2 -1
  152. package/docs/adr/0039-postgresql-is-native.md +130 -0
  153. package/docs/adr/README.md +2 -0
  154. package/docs/adr/adr-lite-1376-admin-extensions.md +330 -0
  155. package/docs/examples/commerce-inventory.md +18 -1
  156. package/docs/examples/reference-service/package.json +2 -2
  157. package/docs/handbook/cloudflare/authentication.md +3 -3
  158. package/docs/handbook/cloudflare/deploy-and-operate.md +4 -1
  159. package/docs/handbook/cloudflare/media-r2.md +59 -8
  160. package/docs/handbook/concepts/mcp-and-agents.md +12 -4
  161. package/docs/handbook/concepts/runtime-and-adapters.md +74 -33
  162. package/docs/handbook/concepts/views.md +1 -1
  163. package/docs/handbook/guides/admin-extensions.md +191 -0
  164. package/docs/handbook/guides/admin-ui.md +2 -1
  165. package/docs/handbook/navigation.json +2 -1
  166. package/docs/handbook/reference/diagnostics.md +1 -0
  167. package/docs/handbook/reference/procedure.md +2 -1
  168. package/docs/handbook/reference/schema.md +6 -3
  169. package/docs/handbook/reference/surface.md +6 -2
  170. package/docs/handbook/reference/view.md +7 -5
  171. package/docs/handbook/releases/index.md +78 -4
  172. package/docs/handbook/start/project-and-cli.md +20 -12
  173. package/docs/skills/develop/SKILL.md +8 -2
  174. package/docs/skills/provision/SKILL.md +4 -1
  175. package/docs/skills/update/SKILL.md +3 -0
  176. package/docs/upgrade-0.1-to-0.2.md +1 -1
  177. package/package.json +6 -5
  178. package/dist/postgres/textRows.d.ts +0 -10
  179. package/dist/postgres/textRows.d.ts.map +0 -1
  180. package/dist/postgres/textRows.js +0 -44
  181. package/dist/postgres/textRows.js.map +0 -1
@@ -0,0 +1,532 @@
1
+ /**
2
+ * Admin extensions (ADR-lite 1376): a declaration that is plain data, server handlers that are code, and an optional
3
+ * same-origin module with the renderers. Admin validates every declaration at construction, sends the caller the
4
+ * contributions their role reaches, and checks the session and role again on every extension route.
5
+ */
6
+ import { DiagnosticError, makeDiagnostic } from "../spec/kernel/index.js";
7
+ import { UI_EXTENSION_REF, isStaffRole, meetsRole } from "../spec/domain/index.js";
8
+ import { json, readJsonObject, wireError } from "../core/wire.js";
9
+ export const ADMIN_EXTENSION_TARGETS = {
10
+ action: ["record/v1", "list.selection/v1", "list.toolbar/v1"],
11
+ panel: ["record.sidebar/v1", "home/v1"],
12
+ field: ["field.input/v1", "field.cell/v1"],
13
+ };
14
+ const P = "admin";
15
+ const ID = /^[a-z][a-z0-9-]{0,62}$/;
16
+ const MODULE = /^\/(?![/\\])[^\s?#]*$/;
17
+ const INTEGRITY = /^sha(256|384|512)-[A-Za-z0-9+/]+={0,2}$/;
18
+ const ROLE_ORDER = ["contributor", "editor", "owner"];
19
+ const invalid = (code, path, message, value) => new DiagnosticError(makeDiagnostic({ code, phase: "boot", severity: "error", path, message, ...(value === undefined ? {} : { value }) }));
20
+ const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
21
+ const isText = (v) => (typeof v === "string" && v.length > 0) || (isObject(v) && Object.keys(v).length > 0 && Object.values(v).every((x) => typeof x === "string" && x.length > 0));
22
+ const keysWithin = (o, allowed) => Object.keys(o).find((k) => !allowed.includes(k));
23
+ // ---------- the form subset (settings schemas and field options) ----------
24
+ const FORM_TYPES = ["string", "number", "integer", "boolean"];
25
+ const FORM_PROPERTY_KEYS = ["type", "title", "description", "default", "enum", "oneOf", "minimum", "maximum", "minLength", "maxLength"];
26
+ /** Why `schema` is outside the form subset Admin renders and checks, or `null`. */
27
+ export function formSchemaProblem(schema) {
28
+ if (!isObject(schema) || schema["type"] !== "object" || !isObject(schema["properties"]))
29
+ return "an object schema with properties";
30
+ const extra = keysWithin(schema, ["type", "properties", "required", "title", "description", "additionalProperties"]);
31
+ if (extra)
32
+ return `no '${extra}' at the top level`;
33
+ if (schema["additionalProperties"] !== undefined && schema["additionalProperties"] !== false)
34
+ return "additionalProperties false or absent";
35
+ const props = schema["properties"];
36
+ const names = Object.keys(props);
37
+ if (names.length === 0 || names.length > 64)
38
+ return "1 to 64 properties";
39
+ if (names.includes("__proto__"))
40
+ return "no property named __proto__";
41
+ const required = schema["required"];
42
+ if (required !== undefined && (!Array.isArray(required) || required.some((r) => typeof r !== "string" || !names.includes(r))))
43
+ return "required naming declared properties";
44
+ for (const [name, p] of Object.entries(props)) {
45
+ if (!isObject(p) || typeof p["type"] !== "string" || !FORM_TYPES.includes(p["type"]))
46
+ return `property '${name}' typed string, number, integer or boolean`;
47
+ const bad = keysWithin(p, FORM_PROPERTY_KEYS);
48
+ if (bad)
49
+ return `property '${name}' without '${bad}'`;
50
+ if (p["title"] !== undefined && !isText(p["title"]))
51
+ return `property '${name}' with a text title`;
52
+ if (p["description"] !== undefined && !isText(p["description"]))
53
+ return `property '${name}' with a text description`;
54
+ if (p["enum"] !== undefined && (!Array.isArray(p["enum"]) || p["enum"].length === 0 || p["enum"].some((x) => !matchesType(p["type"], x))))
55
+ return `property '${name}' with an enum of its type`;
56
+ if (p["oneOf"] !== undefined && (!Array.isArray(p["oneOf"]) || p["oneOf"].length === 0 || p["oneOf"].some((o) => !isObject(o) || keysWithin(o, ["const", "title"]) || !matchesType(p["type"], o["const"]) || (o["title"] !== undefined && !isText(o["title"])))))
57
+ return `property '${name}' with a oneOf of { const, title }`;
58
+ for (const k of ["minimum", "maximum", "minLength", "maxLength"])
59
+ if (p[k] !== undefined && (typeof p[k] !== "number" || !Number.isFinite(p[k])))
60
+ return `property '${name}' with a numeric ${k}`;
61
+ if (p["default"] !== undefined && checkValue(p, p["default"]) !== null)
62
+ return `property '${name}' with a default it accepts`;
63
+ }
64
+ return null;
65
+ }
66
+ function matchesType(type, v) {
67
+ if (type === "string")
68
+ return typeof v === "string";
69
+ if (type === "boolean")
70
+ return typeof v === "boolean";
71
+ if (type === "integer")
72
+ return Number.isInteger(v);
73
+ return typeof v === "number" && Number.isFinite(v);
74
+ }
75
+ function checkValue(p, v) {
76
+ const type = p["type"];
77
+ if (!matchesType(type, v))
78
+ return type === "integer" ? "an integer" : `a ${type}`;
79
+ if (Array.isArray(p["enum"]) && !p["enum"].includes(v))
80
+ return "one of the listed values";
81
+ if (Array.isArray(p["oneOf"]) && !p["oneOf"].some((o) => o["const"] === v))
82
+ return "one of the listed values";
83
+ if (typeof v === "number") {
84
+ if (typeof p["minimum"] === "number" && v < p["minimum"])
85
+ return `at least ${p["minimum"]}`;
86
+ if (typeof p["maximum"] === "number" && v > p["maximum"])
87
+ return `at most ${p["maximum"]}`;
88
+ }
89
+ if (typeof v === "string") {
90
+ const length = [...v].length;
91
+ if (typeof p["minLength"] === "number" && length < p["minLength"])
92
+ return `at least ${p["minLength"]} characters`;
93
+ if (typeof p["maxLength"] === "number" && length > p["maxLength"])
94
+ return `at most ${p["maxLength"]} characters`;
95
+ }
96
+ return null;
97
+ }
98
+ /** Checks `value` against a form-subset `schema`: the errors by field, empty when it passes. */
99
+ export function checkFormValue(schema, value) {
100
+ if (!isObject(value))
101
+ return { "": "an object" };
102
+ const props = (schema.properties ?? {});
103
+ // own properties only, and no prototype: `constructor` or `__proto__` is a field name like any other
104
+ const errors = Object.create(null);
105
+ const has = (name) => Object.hasOwn(value, name) && value[name] !== undefined;
106
+ for (const k of Object.keys(value))
107
+ if (!Object.hasOwn(props, k))
108
+ errors[k] = "no such field";
109
+ for (const name of schema.required ?? [])
110
+ if (!has(name))
111
+ errors[name] = "required";
112
+ for (const [name, p] of Object.entries(props)) {
113
+ // null is a value, and none of the form subset's types accepts it
114
+ if (!has(name) || Object.hasOwn(errors, name))
115
+ continue;
116
+ const problem = checkValue(p, value[name]);
117
+ if (problem)
118
+ errors[name] = `expected ${problem}`;
119
+ }
120
+ return errors;
121
+ }
122
+ // ---------- declarations ----------
123
+ function checkWhen(when, path) {
124
+ if (when === undefined)
125
+ return;
126
+ if (!isObject(when) || keysWithin(when, ["schema", "field", "format"]) || Object.keys(when).length === 0)
127
+ throw invalid("UI_EXTENSION_INVALID", path, "when has schema, field or format", when);
128
+ for (const [k, v] of Object.entries(when)) {
129
+ if (!Array.isArray(v) || v.length === 0 || v.length > 64 || v.some((x) => typeof x !== "string" || x.length === 0))
130
+ throw invalid("UI_EXTENSION_INVALID", `${path}/${k}`, `when.${k} is a non-empty list of names`, v);
131
+ }
132
+ }
133
+ const CONTRIBUTION_KEYS = {
134
+ pages: ["id", "title", "role", "nav"],
135
+ settings: ["id", "title", "role", "schema"],
136
+ actions: ["id", "title", "role", "target", "presentation", "destructive", "when"],
137
+ panels: ["id", "title", "role", "target", "when"],
138
+ fields: ["id", "target", "role", "when", "optionsSchema"],
139
+ };
140
+ const KINDS = Object.keys(CONTRIBUTION_KEYS);
141
+ /** Validates every declaration and their handlers; throws `UI_EXTENSION_INVALID` naming the first problem. */
142
+ export function validateAdminExtensions(extensions) {
143
+ if (!Array.isArray(extensions))
144
+ throw invalid("UI_EXTENSION_INVALID", "admin-extensions", "extensions is a list");
145
+ const seen = new Set();
146
+ for (const ext of extensions) {
147
+ const at = `admin-extension:${isObject(ext) && typeof ext["id"] === "string" ? ext["id"] : "?"}`;
148
+ if (!isObject(ext))
149
+ throw invalid("UI_EXTENSION_INVALID", at, "an extension is an object");
150
+ const extra = keysWithin(ext, ["apiVersion", "id", "title", "module", "integrity", "source", "contributes", "handlers"]);
151
+ if (extra)
152
+ throw invalid("UI_EXTENSION_INVALID", `${at}/${extra}`, `unknown key '${extra}'`);
153
+ if (ext["apiVersion"] !== 1)
154
+ throw invalid("UI_EXTENSION_INVALID", `${at}/apiVersion`, "apiVersion 1", ext["apiVersion"]);
155
+ if (typeof ext["id"] !== "string" || !ID.test(ext["id"]))
156
+ throw invalid("UI_EXTENSION_INVALID", `${at}/id`, "a kebab-case id", ext["id"]);
157
+ if (seen.has(ext["id"]))
158
+ throw invalid("UI_EXTENSION_INVALID", `${at}/id`, `extension id '${ext["id"]}' is used twice`, ext["id"]);
159
+ seen.add(ext["id"]);
160
+ if (!isText(ext["title"]))
161
+ throw invalid("UI_EXTENSION_INVALID", `${at}/title`, "a title");
162
+ // same origin only: an absolute path, never a scheme-relative or external URL
163
+ if (ext["module"] !== undefined && (typeof ext["module"] !== "string" || !MODULE.test(ext["module"])))
164
+ throw invalid("UI_EXTENSION_INVALID", `${at}/module`, "a same-origin absolute path", ext["module"]);
165
+ if (ext["source"] !== undefined && typeof ext["source"] !== "string" && typeof ext["source"] !== "function")
166
+ throw invalid("UI_EXTENSION_INVALID", `${at}/source`, "source is the module's code or a function returning it");
167
+ if (ext["source"] !== undefined && ext["module"] !== undefined)
168
+ throw invalid("UI_EXTENSION_INVALID", `${at}/source`, "either module (served by the host) or source (served by Admin), not both");
169
+ if (ext["integrity"] !== undefined && (typeof ext["integrity"] !== "string" || !INTEGRITY.test(ext["integrity"]) || ext["module"] === undefined))
170
+ throw invalid("UI_EXTENSION_INVALID", `${at}/integrity`, "sha256-, sha384- or sha512- integrity for a module", ext["integrity"]);
171
+ const contributes = ext["contributes"];
172
+ if (!isObject(contributes))
173
+ throw invalid("UI_EXTENSION_INVALID", `${at}/contributes`, "contributes is an object");
174
+ const extraKind = keysWithin(contributes, KINDS);
175
+ if (extraKind)
176
+ throw invalid("UI_EXTENSION_INVALID", `${at}/contributes/${extraKind}`, `unknown contribution kind '${extraKind}'`);
177
+ const ids = new Set();
178
+ let count = 0;
179
+ for (const kind of KINDS) {
180
+ const list = contributes[kind];
181
+ if (list === undefined)
182
+ continue;
183
+ if (!Array.isArray(list))
184
+ throw invalid("UI_EXTENSION_INVALID", `${at}/contributes/${kind}`, `${kind} is a list`);
185
+ for (const c of list) {
186
+ const cat = `${at}/${kind}/${isObject(c) && typeof c["id"] === "string" ? c["id"] : "?"}`;
187
+ if (!isObject(c))
188
+ throw invalid("UI_EXTENSION_INVALID", cat, "a contribution is an object");
189
+ const bad = keysWithin(c, CONTRIBUTION_KEYS[kind]);
190
+ if (bad)
191
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/${bad}`, `unknown key '${bad}'`);
192
+ if (typeof c["id"] !== "string" || !ID.test(c["id"]))
193
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/id`, "a kebab-case id", c["id"]);
194
+ // one namespace per extension, so `<extension>/<contribution>` names exactly one
195
+ if (ids.has(c["id"]))
196
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/id`, `contribution id '${c["id"]}' is used twice`, c["id"]);
197
+ ids.add(c["id"]);
198
+ count++;
199
+ if (kind !== "fields" && !isText(c["title"]))
200
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/title`, "a title");
201
+ if ((kind !== "fields" || c["role"] !== undefined) && (typeof c["role"] !== "string" || !isStaffRole(c["role"])))
202
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/role`, "a staff role", c["role"]);
203
+ if (kind === "actions" || kind === "panels" || kind === "fields") {
204
+ const targets = ADMIN_EXTENSION_TARGETS[kind === "actions" ? "action" : kind === "panels" ? "panel" : "field"];
205
+ if (!targets.includes(c["target"]))
206
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/target`, `one of ${targets.join(", ")}`, c["target"]);
207
+ checkWhen(c["when"], `${cat}/when`);
208
+ }
209
+ if (kind === "pages" && c["nav"] !== undefined) {
210
+ const nav = c["nav"];
211
+ if (!isObject(nav) || keysWithin(nav, ["group", "order"]) || (nav["group"] !== "more" && nav["group"] !== "settings") || (nav["order"] !== undefined && !Number.isInteger(nav["order"])))
212
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/nav`, "nav { group: more | settings, order? }", nav);
213
+ }
214
+ if (kind === "actions") {
215
+ if (!["run", "confirm", "dialog"].includes(c["presentation"]))
216
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/presentation`, "run, confirm or dialog", c["presentation"]);
217
+ if (c["destructive"] !== undefined && typeof c["destructive"] !== "boolean")
218
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/destructive`, "a boolean", c["destructive"]);
219
+ }
220
+ const formKey = kind === "settings" ? "schema" : kind === "fields" ? "optionsSchema" : null;
221
+ if (formKey && (kind === "settings" || c[formKey] !== undefined)) {
222
+ const problem = formSchemaProblem(c[formKey]);
223
+ if (problem)
224
+ throw invalid("UI_EXTENSION_INVALID", `${cat}/${formKey}`, `the form subset: ${problem}`);
225
+ }
226
+ const rendered = kind === "pages" || kind === "panels" || kind === "fields" || (kind === "actions" && c["presentation"] === "dialog");
227
+ if (rendered && ext["module"] === undefined && ext["source"] === undefined)
228
+ throw invalid("UI_EXTENSION_INVALID", `${at}/module`, `'${c["id"]}' renders, so the extension needs a module or a source`);
229
+ }
230
+ }
231
+ if (count === 0)
232
+ throw invalid("UI_EXTENSION_INVALID", `${at}/contributes`, "at least one contribution");
233
+ checkHandlers(ext, at);
234
+ }
235
+ }
236
+ function checkHandlers(ext, at) {
237
+ const raw = ext.handlers ?? {};
238
+ if (!isObject(raw) || keysWithin(raw, ["api", "settings", "actions"]))
239
+ throw invalid("UI_EXTENSION_INVALID", `${at}/handlers`, "handlers has api, settings and actions");
240
+ const h = raw;
241
+ if (h.api !== undefined && typeof h.api !== "function")
242
+ throw invalid("UI_EXTENSION_INVALID", `${at}/handlers/api`, "a function");
243
+ const settings = ext.contributes.settings ?? [];
244
+ for (const s of settings) {
245
+ const handler = h.settings?.[s.id];
246
+ if (typeof handler?.load !== "function" || typeof handler.save !== "function")
247
+ throw invalid("UI_EXTENSION_INVALID", `${at}/handlers/settings/${s.id}`, `settings '${s.id}' needs load and save`);
248
+ }
249
+ for (const id of Object.keys(h.settings ?? {}))
250
+ if (!settings.some((s) => s.id === id))
251
+ throw invalid("UI_EXTENSION_INVALID", `${at}/handlers/settings/${id}`, `no settings contribution '${id}'`);
252
+ const server = (ext.contributes.actions ?? []).filter((a) => a.presentation !== "dialog");
253
+ for (const a of server)
254
+ if (typeof h.actions?.[a.id]?.run !== "function")
255
+ throw invalid("UI_EXTENSION_INVALID", `${at}/handlers/actions/${a.id}`, `action '${a.id}' needs run`);
256
+ for (const id of Object.keys(h.actions ?? {}))
257
+ if (!server.some((a) => a.id === id))
258
+ throw invalid("UI_EXTENSION_INVALID", `${at}/handlers/actions/${id}`, `no run or confirm action '${id}'`);
259
+ }
260
+ // ---------- uiSchema references (§1b) ----------
261
+ /** Every `<extension>/<contribution>` the plan's `uiSchema` names, with the target its key needs. */
262
+ export function planUiExtensionRefs(plan) {
263
+ const refs = [];
264
+ const fields = (owner, ui) => {
265
+ for (const [name, c] of Object.entries(isObject(ui?.["fields"]) ? ui["fields"] : {})) {
266
+ if (isObject(c) && typeof c["widget"] === "string" && UI_EXTENSION_REF.test(c["widget"]))
267
+ refs.push({ path: `${owner}/uiSchema/fields/${name}/widget`, ref: c["widget"], target: "field.input/v1", ...(c["options"] === undefined ? {} : { options: c["options"] }) });
268
+ }
269
+ };
270
+ const cells = (owner, ui) => {
271
+ const list = ui?.["list"];
272
+ for (const [name, ref] of Object.entries(isObject(list) && isObject(list["cells"]) ? list["cells"] : {}))
273
+ if (typeof ref === "string")
274
+ refs.push({ path: `${owner}/uiSchema/list/cells/${name}`, ref, target: "field.cell/v1" });
275
+ };
276
+ for (const [name, s] of Object.entries(plan.schemas)) {
277
+ const owner = `schema:${s.name ?? name}`;
278
+ const ui = s.uiSchema;
279
+ fields(owner, ui);
280
+ cells(owner, ui);
281
+ const panels = ui?.["panels"];
282
+ if (Array.isArray(panels))
283
+ for (const ref of panels)
284
+ if (typeof ref === "string")
285
+ refs.push({ path: `${owner}/uiSchema/panels`, ref, target: "record.sidebar/v1" });
286
+ }
287
+ for (const [name, p] of Object.entries(plan.procedures))
288
+ fields(`procedure:${name}`, p.uiSchema);
289
+ for (const [name, v] of Object.entries(plan.views))
290
+ cells(`view:${name}`, v.uiSchema);
291
+ return refs;
292
+ }
293
+ /** Checks that each contribution the plan names exists, has the target its key needs, and accepts its `options`. */
294
+ export function checkPlanUiExtensions(plan, extensions) {
295
+ for (const { path, ref, target, options } of planUiExtensionRefs(plan)) {
296
+ const [, extId, cId] = UI_EXTENSION_REF.exec(ref);
297
+ const ext = extensions.find((e) => e.id === extId);
298
+ const c = ext ? [...(ext.contributes.fields ?? []), ...(ext.contributes.panels ?? [])].find((x) => x.id === cId) : undefined;
299
+ if (!c)
300
+ throw invalid("UI_EXTENSION_UNKNOWN", path, `no Admin extension contribution '${ref}'`, ref);
301
+ if (c.target !== target)
302
+ throw invalid("UI_EXTENSION_TARGET", path, `'${ref}' is a ${c.target} contribution; this key needs ${target}`, ref);
303
+ if (options === undefined)
304
+ continue;
305
+ const schema = c.optionsSchema;
306
+ if (!schema)
307
+ throw invalid("UI_EXTENSION_OPTIONS", path, `'${ref}' takes no options`, options);
308
+ const errors = checkFormValue(schema, options);
309
+ const first = Object.entries(errors)[0];
310
+ if (first)
311
+ throw invalid("UI_EXTENSION_OPTIONS", `${path}/${first[0]}`, `options for '${ref}': ${first[0] || "options"} ${first[1]}`, options);
312
+ }
313
+ }
314
+ // ---------- what a caller sees ----------
315
+ const fieldRole = (f) => f.role ?? "contributor";
316
+ /** The declarations (never handlers or integrity) of the contributions `role` reaches; extensions with none are left out. */
317
+ export function adminExtensionsFor(extensions, role, basePath = "/admin") {
318
+ return extensions.flatMap((e) => {
319
+ const reach = (xs, roleOf) => (xs ?? []).filter((x) => meetsRole(role, roleOf(x)));
320
+ const contributes = {
321
+ pages: reach(e.contributes.pages, (x) => x.role),
322
+ settings: reach(e.contributes.settings, (x) => x.role),
323
+ actions: reach(e.contributes.actions, (x) => x.role),
324
+ panels: reach(e.contributes.panels, (x) => x.role),
325
+ fields: reach(e.contributes.fields, fieldRole),
326
+ };
327
+ if (Object.values(contributes).every((xs) => xs.length === 0))
328
+ return [];
329
+ const module = e.module ?? (e.source !== undefined ? extensionSourcePath(basePath, e.id) : undefined);
330
+ return [{ id: e.id, title: e.title, ...(module ? { module } : {}), contributes }];
331
+ });
332
+ }
333
+ export const extensionSourcePath = (basePath, id) => `${basePath}/extensions/${id}.js`;
334
+ const sources = new WeakMap();
335
+ /** The code Admin serves for a `source` extension and its sha384 integrity, read once. */
336
+ export function extensionSource(e) {
337
+ if (e.source === undefined)
338
+ return null;
339
+ let found = sources.get(e);
340
+ if (!found) {
341
+ found = (async () => {
342
+ const code = typeof e.source === "function" ? await e.source() : e.source;
343
+ if (typeof code !== "string" || code.length === 0)
344
+ throw invalid("UI_EXTENSION_INVALID", `admin-extension:${e.id}/source`, "source returned no code");
345
+ const digest = new Uint8Array(await crypto.subtle.digest("SHA-384", new TextEncoder().encode(code)));
346
+ return { code, integrity: `sha384-${btoa(String.fromCharCode(...digest))}` };
347
+ })();
348
+ // a failed read may succeed later (a deploy, a transient store error): do not keep the failure
349
+ found.catch(() => sources.delete(e));
350
+ sources.set(e, found);
351
+ }
352
+ return found;
353
+ }
354
+ /** `{basePath}/extensions/{id}.js`: a `source` extension's module, for staff whose role reaches one of its contributions. */
355
+ export async function adminExtensionModule(extensions, id, caller) {
356
+ const ext = extensions.find((e) => e.id === id && e.source !== undefined);
357
+ if (!ext)
358
+ throw wireError("NOT_FOUND", "no such route", P);
359
+ const role = apiRole(ext);
360
+ if (!meetsRole(caller.role, role))
361
+ throw denied(role);
362
+ const { code } = await extensionSource(ext);
363
+ return new Response(code, { headers: { "content-type": "text/javascript; charset=utf-8", "cache-control": "private, no-cache", "x-content-type-options": "nosniff" } });
364
+ }
365
+ /** The lowest role any of the extension's contributions needs: whoever sees one of them may call its API. */
366
+ function apiRole(e) {
367
+ const roles = [
368
+ ...KINDS.filter((k) => k !== "fields").flatMap((k) => (e.contributes[k] ?? []).map((c) => c.role)),
369
+ ...(e.contributes.fields ?? []).map(fieldRole),
370
+ ];
371
+ return ROLE_ORDER.find((r) => roles.includes(r)) ?? "owner";
372
+ }
373
+ const denied = (role) => wireError("AUTH_DENIED", `This needs the ${role} role.`, P);
374
+ const noStore = (out) => {
375
+ // like every Admin API answer, staff data is not cached unless the extension says otherwise
376
+ if (out.headers.has("cache-control"))
377
+ return out;
378
+ const headers = new Headers(out.headers);
379
+ headers.set("cache-control", "no-store");
380
+ return new Response(out.body, { status: out.status, statusText: out.statusText, headers });
381
+ };
382
+ function readRef(v, path) {
383
+ if (!isObject(v) || typeof v["schema"] !== "string" || typeof v["id"] !== "string" || !v["id"] || (v["version"] !== undefined && !Number.isInteger(v["version"])))
384
+ throw wireError("INPUT_VALIDATION_FAILED", `${path} is { schema, id, version? }`, P);
385
+ return { schema: v["schema"], id: v["id"], ...(v["version"] === undefined ? {} : { version: v["version"] }) };
386
+ }
387
+ /**
388
+ * Answers `{basePath}/api/x/{extension}/...` after Admin's session checks: `settings/{id}` (GET loads, PATCH saves),
389
+ * `actions/{id}` (POST runs) and `api/{path}` (the extension's own API). `null` when the path is not an extension's.
390
+ */
391
+ export async function adminExtensionRoute(extensions, request, rest, caller) {
392
+ const m = /^([^/]+)\/(settings|actions|api)(?:\/(.*))?$/.exec(rest);
393
+ const ext = m ? extensions.find((e) => e.id === m[1]) : undefined;
394
+ if (!m || !ext)
395
+ throw wireError("NOT_FOUND", "no such route", P);
396
+ const [, , kind, tail = ""] = m;
397
+ const NO_STORE = { "cache-control": "no-store" };
398
+ if (kind === "api") {
399
+ const role = apiRole(ext);
400
+ if (!meetsRole(caller.role, role))
401
+ throw denied(role);
402
+ const out = ext.handlers?.api ? await ext.handlers.api(request, { caller, extension: ext.id, path: tail }) : null;
403
+ if (!out)
404
+ throw wireError("NOT_FOUND", "no such route", P);
405
+ return noStore(out);
406
+ }
407
+ if (kind === "settings") {
408
+ const s = ext.contributes.settings?.find((x) => x.id === tail);
409
+ const handler = s && ext.handlers?.settings?.[s.id];
410
+ if (!s || !handler)
411
+ throw wireError("NOT_FOUND", "no such route", P);
412
+ if (!meetsRole(caller.role, s.role))
413
+ throw denied(s.role);
414
+ if (request.method === "GET")
415
+ return json({ value: (await handler.load(caller)) ?? null }, 200, NO_STORE);
416
+ // PATCH, as Admin's own site settings: the body is the whole value, checked against the schema
417
+ if (request.method !== "PATCH")
418
+ throw wireError("METHOD_NOT_ALLOWED", "settings take GET or PATCH", P);
419
+ const value = (await readJsonObject(request, P))["value"];
420
+ const errors = checkFormValue(s.schema, value);
421
+ if (Object.keys(errors).length > 0)
422
+ return json({ error: { code: "INPUT_VALIDATION_FAILED", message: "The settings do not match their schema.", fields: errors } }, 400, NO_STORE);
423
+ const saved = await handler.save(caller, value);
424
+ return json({ value: saved ?? value }, 200, NO_STORE);
425
+ }
426
+ const a = ext.contributes.actions?.find((x) => x.id === tail && x.presentation !== "dialog");
427
+ const handler = a && ext.handlers?.actions?.[a.id];
428
+ if (!a || !handler)
429
+ throw wireError("NOT_FOUND", "no such route", P);
430
+ if (request.method !== "POST")
431
+ throw wireError("METHOD_NOT_ALLOWED", "actions take POST", P);
432
+ if (!meetsRole(caller.role, a.role))
433
+ throw denied(a.role);
434
+ const body = await readJsonObject(request, P);
435
+ let input;
436
+ if (a.target === "record/v1") {
437
+ input = { record: readRef(body["record"], "record") };
438
+ }
439
+ else if (a.target === "list.selection/v1") {
440
+ const sel = body["selection"];
441
+ if (!isObject(sel) || typeof sel["schema"] !== "string" || !Array.isArray(sel["ids"]) || sel["ids"].length === 0 || sel["ids"].length > 1000 || sel["ids"].some((x) => typeof x !== "string" || !x))
442
+ throw wireError("INPUT_VALIDATION_FAILED", "selection is { schema, ids } with 1 to 1000 ids", P);
443
+ input = { selection: { schema: sel["schema"], ids: sel["ids"] } };
444
+ }
445
+ else {
446
+ if (typeof body["schema"] !== "string")
447
+ throw wireError("INPUT_VALIDATION_FAILED", "schema names the list", P);
448
+ input = { schema: body["schema"] };
449
+ }
450
+ // `when` is checked here as well as in the console, so a crafted request cannot run an action somewhere it was not offered
451
+ const schema = input.record?.schema ?? input.selection?.schema ?? input.schema;
452
+ if (a.when?.schema && !a.when.schema.includes(schema))
453
+ throw wireError("NOT_FOUND", "no such route", P);
454
+ const result = await handler.run(caller, input);
455
+ return json({ ok: true, result: result ?? null }, 200, NO_STORE);
456
+ }
457
+ const declaration = (e) => ({ id: e.id, title: e.title, module: e.module, integrity: e.integrity });
458
+ /** What changed between two sets of declarations, for review screens. Handlers are code and are not compared. */
459
+ export function diffAdminExtensions(previous, next) {
460
+ const out = [];
461
+ const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
462
+ const changedKeys = (a, b) => [...new Set([...Object.keys(a), ...Object.keys(b)])].filter((k) => !same(a[k], b[k])).sort();
463
+ const contributions = (e) => new Map(KINDS.flatMap((k) => (e.contributes[k] ?? []).map((c) => [c.id, { kind: k, ...c }])));
464
+ for (const p of previous)
465
+ if (!next.some((n) => n.id === p.id))
466
+ out.push({ change: "removed", ref: p.id });
467
+ for (const n of next) {
468
+ const p = previous.find((x) => x.id === n.id);
469
+ if (!p) {
470
+ out.push({ change: "added", ref: n.id });
471
+ for (const id of contributions(n).keys())
472
+ out.push({ change: "added", ref: `${n.id}/${id}` });
473
+ continue;
474
+ }
475
+ const keys = changedKeys(declaration(p), declaration(n));
476
+ if (keys.length)
477
+ out.push({ change: "changed", ref: n.id, keys });
478
+ const before = contributions(p);
479
+ const after = contributions(n);
480
+ for (const [id] of before)
481
+ if (!after.has(id))
482
+ out.push({ change: "removed", ref: `${n.id}/${id}` });
483
+ for (const [id, c] of after) {
484
+ const b = before.get(id);
485
+ if (!b)
486
+ out.push({ change: "added", ref: `${n.id}/${id}` });
487
+ else {
488
+ const k = changedKeys(b, c);
489
+ if (k.length)
490
+ out.push({ change: "changed", ref: `${n.id}/${id}`, keys: k });
491
+ }
492
+ }
493
+ }
494
+ return out;
495
+ }
496
+ const text = { anyOf: [{ type: "string", minLength: 1 }, { type: "object", additionalProperties: { type: "string", minLength: 1 }, minProperties: 1 }] };
497
+ const id = { type: "string", pattern: ID.source };
498
+ const role = { enum: ["owner", "editor", "contributor"] };
499
+ const names = { type: "array", items: { type: "string", minLength: 1 }, minItems: 1, maxItems: 64 };
500
+ const when = { type: "object", additionalProperties: false, minProperties: 1, properties: { schema: names, field: names, format: names } };
501
+ const form = { type: "object", description: "The form subset: an object schema whose properties are string, number, integer or boolean with title, description, default, enum, oneOf, minimum, maximum, minLength and maxLength." };
502
+ const contribution = (props, required) => ({ type: "object", additionalProperties: false, required: ["id", ...required], properties: { id, ...props } });
503
+ /** JSON Schema of one extension's declaration (handlers excluded), for tooling and agents. */
504
+ export const ADMIN_EXTENSION_JSON_SCHEMA = {
505
+ $schema: "https://json-schema.org/draft/2020-12/schema",
506
+ title: "Mantle Admin extension declaration",
507
+ type: "object",
508
+ additionalProperties: false,
509
+ required: ["apiVersion", "id", "title", "contributes"],
510
+ properties: {
511
+ apiVersion: { const: 1 },
512
+ id,
513
+ title: text,
514
+ module: { type: "string", pattern: MODULE.source },
515
+ integrity: { type: "string", pattern: INTEGRITY.source },
516
+ // the module's code as a string; a function returning it is code, like the handlers, and is not described here
517
+ source: { type: "string", minLength: 1 },
518
+ contributes: {
519
+ type: "object",
520
+ additionalProperties: false,
521
+ minProperties: 1,
522
+ properties: {
523
+ pages: { type: "array", items: contribution({ title: text, role, nav: { type: "object", additionalProperties: false, required: ["group"], properties: { group: { enum: ["more", "settings"] }, order: { type: "integer" } } } }, ["title", "role"]) },
524
+ settings: { type: "array", items: contribution({ title: text, role, schema: form }, ["title", "role", "schema"]) },
525
+ actions: { type: "array", items: contribution({ title: text, role, target: { enum: ADMIN_EXTENSION_TARGETS.action }, presentation: { enum: ["run", "confirm", "dialog"] }, destructive: { type: "boolean" }, when }, ["title", "role", "target", "presentation"]) },
526
+ panels: { type: "array", items: contribution({ title: text, role, target: { enum: ADMIN_EXTENSION_TARGETS.panel }, when }, ["title", "role", "target"]) },
527
+ fields: { type: "array", items: contribution({ target: { enum: ADMIN_EXTENSION_TARGETS.field }, role, when, optionsSchema: form }, ["target"]) },
528
+ },
529
+ },
530
+ },
531
+ };
532
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/admin/extensions.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export * from "./consent.js";
2
2
  export * from "./createAdminSurface.js";
3
3
  export * from "./identity.js";
4
+ export * from "./extensions.js";
4
5
  export { developerConsole, type DeveloperConsoleSnapshot } from "./developerConsole.js";
5
6
  export * from "./design.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACxF,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACxF,cAAc,aAAa,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from "./consent.js";
2
2
  export * from "./createAdminSurface.js";
3
3
  export * from "./identity.js";
4
+ export * from "./extensions.js";
4
5
  export { developerConsole } from "./developerConsole.js";
5
6
  export * from "./design.js";
6
7
  //# sourceMappingURL=index.js.map