@adminiumjs/add-on-contracts 0.2.9 → 0.3.0-rc.1

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 (76) hide show
  1. package/dist/add-on-block.d.ts +134 -6
  2. package/dist/add-on-block.d.ts.map +1 -1
  3. package/dist/add-on-block.js +173 -7
  4. package/dist/add-on-block.js.map +1 -1
  5. package/dist/artwork-source.d.ts +2 -2
  6. package/dist/artwork-source.js +2 -2
  7. package/dist/contracts.d.ts +3 -3
  8. package/dist/contracts.js +16 -16
  9. package/dist/document-render.d.ts +17 -17
  10. package/dist/document-render.d.ts.map +1 -1
  11. package/dist/document-render.js +11 -11
  12. package/dist/index.d.ts +4 -4
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +4 -4
  15. package/dist/index.js.map +1 -1
  16. package/dist/nav-groups.d.ts +28 -0
  17. package/dist/nav-groups.d.ts.map +1 -0
  18. package/dist/nav-groups.js +28 -0
  19. package/dist/nav-groups.js.map +1 -0
  20. package/dist/product-personalizer.d.ts +3 -3
  21. package/dist/product-personalizer.js +3 -3
  22. package/dist/runtime/app-types.d.ts +165 -0
  23. package/dist/runtime/app-types.d.ts.map +1 -0
  24. package/dist/runtime/app-types.js +2 -0
  25. package/dist/runtime/app-types.js.map +1 -0
  26. package/dist/runtime/app.d.ts +31 -0
  27. package/dist/runtime/app.d.ts.map +1 -0
  28. package/dist/runtime/app.js +29 -0
  29. package/dist/runtime/app.js.map +1 -0
  30. package/dist/runtime/compiler-runtime.d.ts +7 -0
  31. package/dist/runtime/compiler-runtime.d.ts.map +1 -0
  32. package/dist/runtime/compiler-runtime.js +10 -0
  33. package/dist/runtime/compiler-runtime.js.map +1 -0
  34. package/dist/runtime/i18n.d.ts +15 -0
  35. package/dist/runtime/i18n.d.ts.map +1 -0
  36. package/dist/runtime/i18n.js +17 -0
  37. package/dist/runtime/i18n.js.map +1 -0
  38. package/dist/runtime/index.d.ts +189 -0
  39. package/dist/runtime/index.d.ts.map +1 -0
  40. package/dist/runtime/index.js +272 -0
  41. package/dist/runtime/index.js.map +1 -0
  42. package/dist/runtime/jsx-runtime.d.ts +12 -0
  43. package/dist/runtime/jsx-runtime.d.ts.map +1 -0
  44. package/dist/runtime/jsx-runtime.js +15 -0
  45. package/dist/runtime/jsx-runtime.js.map +1 -0
  46. package/dist/runtime/query.d.ts +19 -0
  47. package/dist/runtime/query.d.ts.map +1 -0
  48. package/dist/runtime/query.js +21 -0
  49. package/dist/runtime/query.js.map +1 -0
  50. package/dist/runtime/react-dom.d.ts +22 -0
  51. package/dist/runtime/react-dom.d.ts.map +1 -0
  52. package/dist/runtime/react-dom.js +28 -0
  53. package/dist/runtime/react-dom.js.map +1 -0
  54. package/dist/runtime/react.d.ts +56 -0
  55. package/dist/runtime/react.d.ts.map +1 -0
  56. package/dist/runtime/react.js +58 -0
  57. package/dist/runtime/react.js.map +1 -0
  58. package/dist/runtime/router.d.ts +18 -0
  59. package/dist/runtime/router.d.ts.map +1 -0
  60. package/dist/runtime/router.js +20 -0
  61. package/dist/runtime/router.js.map +1 -0
  62. package/dist/runtime/ui.d.ts +36 -0
  63. package/dist/runtime/ui.d.ts.map +1 -0
  64. package/dist/runtime/ui.js +38 -0
  65. package/dist/runtime/ui.js.map +1 -0
  66. package/dist/shipping-carrier.d.ts +2 -2
  67. package/dist/shipping-carrier.js +2 -2
  68. package/dist/slots.d.ts +2 -3
  69. package/dist/slots.d.ts.map +1 -1
  70. package/dist/slots.js +13 -15
  71. package/dist/slots.js.map +1 -1
  72. package/dist/testing/index.d.ts +6 -6
  73. package/dist/testing/index.d.ts.map +1 -1
  74. package/dist/testing/index.js +8 -8
  75. package/dist/testing/index.js.map +1 -1
  76. package/package.json +45 -1
@@ -1,13 +1,14 @@
1
1
  /**
2
- * The `addOn` manifest block (24-marketplace-wave-4.md §5.3) and its validation
3
- * rules. Lives here rather than in `@adminium/manifest` because the rules are
4
- * assertions ABOUT the registries in this package — a slot id or a contract id
5
- * is only meaningful against the closed lists in `slots.ts` / `contracts.ts`.
2
+ * The `addOn` manifest block and its validation rules. Lives here rather than
3
+ * in `@adminium/manifest` because the rules are assertions ABOUT the registries
4
+ * in this package — a slot id or a contract id is only meaningful against the
5
+ * closed lists in `slots.ts` / `contracts.ts`.
6
6
  *
7
7
  * `@adminium/manifest` imports this to build the `kind: "add-on"` branch of its
8
8
  * discriminated union.
9
9
  */
10
10
  import { z } from 'zod';
11
+ import { type BuiltinNavGroupKey } from './nav-groups.js';
11
12
  /**
12
13
  * Add-ons get their OWN closed category vocabulary (D2), because an add-on is
13
14
  * not a vertical and forcing it into the app facet set would make a carrier a
@@ -23,7 +24,7 @@ export declare const addOnCategorySchema: z.ZodEnum<{
23
24
  data: "data";
24
25
  }>;
25
26
  export type AddOnCategory = (typeof ADD_ON_CATEGORIES)[number];
26
- /** How the shop supplies credentials, if at all (§5.6). */
27
+ /** How the shop supplies credentials, if at all. */
27
28
  export declare const CONNECT_KINDS: readonly ["none", "api-key", "oauth2"];
28
29
  export declare const connectKindSchema: z.ZodEnum<{
29
30
  none: "none";
@@ -91,6 +92,109 @@ export declare const addOnConnectSchema: z.ZodObject<{
91
92
  export declare const addOnNetworkSchema: z.ZodObject<{
92
93
  allow: z.ZodArray<z.ZodString>;
93
94
  }, z.core.$strict>;
95
+ /**
96
+ * An i18n message: a catalog key plus the English fallback rendered when the
97
+ * key is absent.
98
+ *
99
+ * MOVED HERE FROM `@adminium/manifest` by 51a, which now re-exports it under
100
+ * the same name. One definition rather than two, because both ends need it: a
101
+ * page title and a nav-group label are written in a manifest and validated
102
+ * there, and read back by a host through the schemas in THIS package. Two
103
+ * four-line copies of the same shape are exactly the duplicate that drifts in a
104
+ * field nobody reads — `max(400)` here and `max(200)` there — and then the
105
+ * stricter copy refuses first, for a reason no message names.
106
+ */
107
+ export declare const i18nMessageSchema: z.ZodObject<{
108
+ key: z.ZodString;
109
+ fallback: z.ZodString;
110
+ }, z.core.$strict>;
111
+ export type I18nMessage = z.infer<typeof i18nMessageSchema>;
112
+ /**
113
+ * THE RAIL'S BUILT-IN GROUPS now live in `nav-groups.ts`, re-exported here so
114
+ * this module's public surface is unchanged. They moved so that a host needing
115
+ * only the five keys — the dashboard's entry-chunk `app/bootstrap.ts` — can
116
+ * import them without making this whole module, and everything the barrel
117
+ * reaches from it, statically reachable. See that file's note.
118
+ */
119
+ export { BUILTIN_NAV_GROUP_KEYS, type BuiltinNavGroupKey } from './nav-groups.js';
120
+ /**
121
+ * Where a page goes when its manifest asks for no group (the owner's ruling,
122
+ * 51 D-nav). Applied at PARSE, so what a host reads is already resolved and the
123
+ * rail never has to guess.
124
+ *
125
+ * The alternative is what generated pages do today, and it is worse: an app
126
+ * page whose `navGroup` is not in the closed set is dropped into `hidden` at
127
+ * `bootstrap/handlers.ts:146` — the page exists, nothing links to it, and
128
+ * nothing says why. An add-on that omits a group has not made a mistake, so it
129
+ * gets a home rather than a silence.
130
+ */
131
+ export declare const DEFAULT_NAV_GROUP: BuiltinNavGroupKey;
132
+ /**
133
+ * A group key, built-in or declared. Kebab-case, because it appears in no URL
134
+ * but is compared against the built-in five, which are kebab.
135
+ */
136
+ export declare const navGroupKeySchema: z.ZodString;
137
+ /**
138
+ * The host API an add-on's client code is written against.
139
+ *
140
+ * A version rather than a boolean because publishing `Modal` and `useNavigate`
141
+ * to code the engine did not build makes them public API: the day that surface
142
+ * changes shape, an add-on built against the old one must be REFUSED with its
143
+ * version named, not mounted into a blank screen. `z.literal(1)` becomes a
144
+ * union the first time there is a 2 — and there is deliberately no `"*"`.
145
+ */
146
+ export declare const hostApiVersionSchema: z.ZodLiteral<1>;
147
+ export declare const HOST_API_VERSION = 1;
148
+ /**
149
+ * A rail row. Omit `nav` entirely and the page is routable but unlisted —
150
+ * a detail screen an add-on links to itself.
151
+ */
152
+ export declare const addOnPageNavSchema: z.ZodObject<{
153
+ group: z.ZodDefault<z.ZodString>;
154
+ order: z.ZodNumber;
155
+ adminOnly: z.ZodOptional<z.ZodBoolean>;
156
+ }, z.core.$strict>;
157
+ /**
158
+ * A page an add-on renders from its OWN bundle.
159
+ *
160
+ * NOT `pageSchema` in `@adminium/manifest`, which is a generated page: a
161
+ * `template` the engine renders with `bindings` and `config`. This is code. The
162
+ * two deliberately do not share a name in the same document — an add-on's live
163
+ * under `addOn.pages` — because "page" meaning both a template row and a
164
+ * JavaScript module in one manifest is how a reader ends up writing `template`
165
+ * here and waiting for a screen that never comes.
166
+ */
167
+ export declare const addOnPageSchema: z.ZodObject<{
168
+ ref: z.ZodString;
169
+ title: z.ZodObject<{
170
+ key: z.ZodString;
171
+ fallback: z.ZodString;
172
+ }, z.core.$strict>;
173
+ icon: z.ZodString;
174
+ client: z.ZodString;
175
+ nav: z.ZodOptional<z.ZodObject<{
176
+ group: z.ZodDefault<z.ZodString>;
177
+ order: z.ZodNumber;
178
+ adminOnly: z.ZodOptional<z.ZodBoolean>;
179
+ }, z.core.$strict>>;
180
+ detail: z.ZodOptional<z.ZodBoolean>;
181
+ }, z.core.$strict>;
182
+ export type AddOnPage = z.infer<typeof addOnPageSchema>;
183
+ /**
184
+ * A group this add-on brings with it. Its label travels WITH the add-on — a key
185
+ * plus an English fallback, resolved against the add-on's own translations —
186
+ * which is the whole reason the engine does not have to own
187
+ * `nav.group.<whatever>` in eight locales to let somebody name a group.
188
+ */
189
+ export declare const addOnNavGroupSchema: z.ZodObject<{
190
+ key: z.ZodString;
191
+ label: z.ZodObject<{
192
+ key: z.ZodString;
193
+ fallback: z.ZodString;
194
+ }, z.core.$strict>;
195
+ order: z.ZodNumber;
196
+ }, z.core.$strict>;
197
+ export type AddOnNavGroup = z.infer<typeof addOnNavGroupSchema>;
94
198
  export declare const addOnBlockSchema: z.ZodObject<{
95
199
  attaches: z.ZodArray<z.ZodObject<{
96
200
  app: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodString]>;
@@ -155,9 +259,33 @@ export declare const addOnBlockSchema: z.ZodObject<{
155
259
  }, z.core.$strict>>;
156
260
  publicSettings: z.ZodOptional<z.ZodArray<z.ZodString>>;
157
261
  demoTransport: z.ZodOptional<z.ZodString>;
262
+ pages: z.ZodOptional<z.ZodArray<z.ZodObject<{
263
+ ref: z.ZodString;
264
+ title: z.ZodObject<{
265
+ key: z.ZodString;
266
+ fallback: z.ZodString;
267
+ }, z.core.$strict>;
268
+ icon: z.ZodString;
269
+ client: z.ZodString;
270
+ nav: z.ZodOptional<z.ZodObject<{
271
+ group: z.ZodDefault<z.ZodString>;
272
+ order: z.ZodNumber;
273
+ adminOnly: z.ZodOptional<z.ZodBoolean>;
274
+ }, z.core.$strict>>;
275
+ detail: z.ZodOptional<z.ZodBoolean>;
276
+ }, z.core.$strict>>>;
277
+ navGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
278
+ key: z.ZodString;
279
+ label: z.ZodObject<{
280
+ key: z.ZodString;
281
+ fallback: z.ZodString;
282
+ }, z.core.$strict>;
283
+ order: z.ZodNumber;
284
+ }, z.core.$strict>>>;
285
+ hostApi: z.ZodOptional<z.ZodLiteral<1>>;
158
286
  }, z.core.$strict>;
159
287
  export type AddOnBlock = z.infer<typeof addOnBlockSchema>;
160
- /** Issue codes the validators emit (13 §3.2 convention, extended by 24 §5.3). */
288
+ /** Issue codes the validators emit. */
161
289
  export declare const ADD_ON_ISSUE_CODES: readonly ["ATTACH_TARGET_UNKNOWN", "SLOT_UNKNOWN", "CONTRACT_UNKNOWN", "SCOPE_OUT_OF_RANGE", "NETWORK_ALLOW_REQUIRED", "CAPABILITY_CONFLICT", "FRONTEND_SECRET_LEAK", "SLOT_CONFLICT"];
162
290
  export type AddOnIssueCode = (typeof ADD_ON_ISSUE_CODES)[number];
163
291
  //# sourceMappingURL=add-on-block.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-on-block.d.ts","sourceRoot":"","sources":["../src/add-on-block.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,+DAAgE,CAAC;AAC/F,eAAO,MAAM,mBAAmB;;;;;;EAA4B,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,2DAA2D;AAC3D,eAAO,MAAM,aAAa,wCAAyC,CAAC;AACpE,eAAO,MAAM,iBAAiB;;;;EAAwB,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAazD,eAAO,MAAM,kBAAkB;;;;kBAQpB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;;kBAMhB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;kBAKhB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;kBAMhB,CAAC;AAEZ,eAAO,MAAM,gBAAgB;;;kBAKlB,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;;;;;;;;kBAOpB,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;kBAIpB,CAAC;AAEZ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmC1B,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,wLASrB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"add-on-block.d.ts","sourceRoot":"","sources":["../src/add-on-block.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAElF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,+DAAgE,CAAC;AAC/F,eAAO,MAAM,mBAAmB;;;;;;EAA4B,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,oDAAoD;AACpD,eAAO,MAAM,aAAa,wCAAyC,CAAC;AACpE,eAAO,MAAM,iBAAiB;;;;EAAwB,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAazD,eAAO,MAAM,kBAAkB;;;;kBAQpB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;;kBAMhB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;kBAKhB,CAAC;AAEZ,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;kBAMhB,CAAC;AAEZ,eAAO,MAAM,gBAAgB;;;kBAKlB,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;;;;;;;;kBAOpB,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;kBAIpB,CAAC;AAIZ;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB;;;kBAKnB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,OAAO,EAAE,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAElF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAA8B,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAE2D,CAAC;AAE1F;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,iBAAe,CAAC;AACjD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;kBAOpB,CAAC;AAEZ;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;kBAYjB,CAAC;AACZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;;;kBAOrB,CAAC;AACZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwG1B,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,wLAgBrB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -1,9 +1,9 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  /**
3
- * The `addOn` manifest block (24-marketplace-wave-4.md §5.3) and its validation
4
- * rules. Lives here rather than in `@adminium/manifest` because the rules are
5
- * assertions ABOUT the registries in this package — a slot id or a contract id
6
- * is only meaningful against the closed lists in `slots.ts` / `contracts.ts`.
3
+ * The `addOn` manifest block and its validation rules. Lives here rather than
4
+ * in `@adminium/manifest` because the rules are assertions ABOUT the registries
5
+ * in this package — a slot id or a contract id is only meaningful against the
6
+ * closed lists in `slots.ts` / `contracts.ts`.
7
7
  *
8
8
  * `@adminium/manifest` imports this to build the `kind: "add-on"` branch of its
9
9
  * discriminated union.
@@ -11,6 +11,7 @@
11
11
  import { z } from 'zod';
12
12
  import { contractIdSchema, hasContractVersion } from './contracts.js';
13
13
  import { slotIdSchema } from './slots.js';
14
+ import { BUILTIN_NAV_GROUP_KEYS } from './nav-groups.js';
14
15
  /**
15
16
  * Add-ons get their OWN closed category vocabulary (D2), because an add-on is
16
17
  * not a vertical and forcing it into the app facet set would make a carrier a
@@ -19,7 +20,7 @@ import { slotIdSchema } from './slots.js';
19
20
  */
20
21
  export const ADD_ON_CATEGORIES = ['artwork', 'delivery', 'payments', 'email', 'data'];
21
22
  export const addOnCategorySchema = z.enum(ADD_ON_CATEGORIES);
22
- /** How the shop supplies credentials, if at all (§5.6). */
23
+ /** How the shop supplies credentials, if at all. */
23
24
  export const CONNECT_KINDS = ['none', 'api-key', 'oauth2'];
24
25
  export const connectKindSchema = z.enum(CONNECT_KINDS);
25
26
  const SEMVER_RANGE = /^[\^~]?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$|^\*$/;
@@ -79,6 +80,112 @@ export const addOnNetworkSchema = z
79
80
  allow: z.array(z.string().regex(HOSTNAME, 'must be an exact https hostname')),
80
81
  })
81
82
  .strict();
83
+ // ── pages and navigation ─────────────────────────────────────────────────────
84
+ /**
85
+ * An i18n message: a catalog key plus the English fallback rendered when the
86
+ * key is absent.
87
+ *
88
+ * MOVED HERE FROM `@adminium/manifest` by 51a, which now re-exports it under
89
+ * the same name. One definition rather than two, because both ends need it: a
90
+ * page title and a nav-group label are written in a manifest and validated
91
+ * there, and read back by a host through the schemas in THIS package. Two
92
+ * four-line copies of the same shape are exactly the duplicate that drifts in a
93
+ * field nobody reads — `max(400)` here and `max(200)` there — and then the
94
+ * stricter copy refuses first, for a reason no message names.
95
+ */
96
+ export const i18nMessageSchema = z
97
+ .object({
98
+ key: z.string().min(1).max(120),
99
+ fallback: z.string().min(1).max(400),
100
+ })
101
+ .strict();
102
+ /**
103
+ * THE RAIL'S BUILT-IN GROUPS now live in `nav-groups.ts`, re-exported here so
104
+ * this module's public surface is unchanged. They moved so that a host needing
105
+ * only the five keys — the dashboard's entry-chunk `app/bootstrap.ts` — can
106
+ * import them without making this whole module, and everything the barrel
107
+ * reaches from it, statically reachable. See that file's note.
108
+ */
109
+ export { BUILTIN_NAV_GROUP_KEYS } from './nav-groups.js';
110
+ /**
111
+ * Where a page goes when its manifest asks for no group (the owner's ruling,
112
+ * 51 D-nav). Applied at PARSE, so what a host reads is already resolved and the
113
+ * rail never has to guess.
114
+ *
115
+ * The alternative is what generated pages do today, and it is worse: an app
116
+ * page whose `navGroup` is not in the closed set is dropped into `hidden` at
117
+ * `bootstrap/handlers.ts:146` — the page exists, nothing links to it, and
118
+ * nothing says why. An add-on that omits a group has not made a mistake, so it
119
+ * gets a home rather than a silence.
120
+ */
121
+ export const DEFAULT_NAV_GROUP = 'library';
122
+ /**
123
+ * A group key, built-in or declared. Kebab-case, because it appears in no URL
124
+ * but is compared against the built-in five, which are kebab.
125
+ */
126
+ export const navGroupKeySchema = z
127
+ .string()
128
+ .regex(/^[a-z][a-z0-9-]{0,39}$/, 'a nav group key must be kebab-case, 1–40 characters');
129
+ /**
130
+ * The host API an add-on's client code is written against.
131
+ *
132
+ * A version rather than a boolean because publishing `Modal` and `useNavigate`
133
+ * to code the engine did not build makes them public API: the day that surface
134
+ * changes shape, an add-on built against the old one must be REFUSED with its
135
+ * version named, not mounted into a blank screen. `z.literal(1)` becomes a
136
+ * union the first time there is a 2 — and there is deliberately no `"*"`.
137
+ */
138
+ export const hostApiVersionSchema = z.literal(1);
139
+ export const HOST_API_VERSION = 1;
140
+ /**
141
+ * A rail row. Omit `nav` entirely and the page is routable but unlisted —
142
+ * a detail screen an add-on links to itself.
143
+ */
144
+ export const addOnPageNavSchema = z
145
+ .object({
146
+ group: navGroupKeySchema.default(DEFAULT_NAV_GROUP),
147
+ order: z.number().int(),
148
+ /** Same audience the engine's own admin-only rail rows have. */
149
+ adminOnly: z.boolean().optional(),
150
+ })
151
+ .strict();
152
+ /**
153
+ * A page an add-on renders from its OWN bundle.
154
+ *
155
+ * NOT `pageSchema` in `@adminium/manifest`, which is a generated page: a
156
+ * `template` the engine renders with `bindings` and `config`. This is code. The
157
+ * two deliberately do not share a name in the same document — an add-on's live
158
+ * under `addOn.pages` — because "page" meaning both a template row and a
159
+ * JavaScript module in one manifest is how a reader ends up writing `template`
160
+ * here and waiting for a screen that never comes.
161
+ */
162
+ export const addOnPageSchema = z
163
+ .object({
164
+ /** The last segment of `/add-ons/<key>/<ref>`. */
165
+ ref: z.string().regex(/^[a-z][a-z0-9-]*$/, 'page ref must be a kebab-case identifier'),
166
+ title: i18nMessageSchema,
167
+ icon: z.string().min(1).max(60),
168
+ /** A path the bundle route will serve; its default export is the page. */
169
+ client: z.string().min(1),
170
+ nav: addOnPageNavSchema.optional(),
171
+ /** Reserve `/add-ons/<key>/<ref>/*` for the page's own sub-routes. */
172
+ detail: z.boolean().optional(),
173
+ })
174
+ .strict();
175
+ /**
176
+ * A group this add-on brings with it. Its label travels WITH the add-on — a key
177
+ * plus an English fallback, resolved against the add-on's own translations —
178
+ * which is the whole reason the engine does not have to own
179
+ * `nav.group.<whatever>` in eight locales to let somebody name a group.
180
+ */
181
+ export const addOnNavGroupSchema = z
182
+ .object({
183
+ key: navGroupKeySchema,
184
+ label: i18nMessageSchema,
185
+ /** Orders the trailing add-on band only; built-in groups do not move. */
186
+ order: z.number().int(),
187
+ })
188
+ .strict();
82
189
  export const addOnBlockSchema = z
83
190
  .object({
84
191
  attaches: z.array(attachTargetSchema).min(1),
@@ -94,8 +201,60 @@ export const addOnBlockSchema = z
94
201
  publicSettings: z.array(z.string().min(1)).optional(),
95
202
  /** D11 — required to ship a demo that makes no real third-party call. */
96
203
  demoTransport: z.string().min(1).optional(),
204
+ /**
205
+ * Dashboard pages this add-on renders itself, and the groups it brings for
206
+ * them. Both optional and additive: every manifest written before this
207
+ * validates unchanged, which is the same promise `kind` kept when the
208
+ * add-on branch itself was added.
209
+ */
210
+ pages: z.array(addOnPageSchema).min(1).optional(),
211
+ navGroups: z.array(addOnNavGroupSchema).min(1).optional(),
212
+ /** Required once `pages` is present; see {@link hostApiVersionSchema}. */
213
+ hostApi: hostApiVersionSchema.optional(),
97
214
  })
98
215
  .strict()
216
+ // A ref is a URL segment, so two pages sharing one is two screens at one
217
+ // address — and the loser is whichever the host's lookup happens to find.
218
+ .refine((b) => new Set((b.pages ?? []).map((p) => p.ref)).size === (b.pages ?? []).length, {
219
+ message: 'duplicate page ref',
220
+ path: ['pages'],
221
+ })
222
+ .refine((b) => new Set((b.navGroups ?? []).map((g) => g.key)).size === (b.navGroups ?? []).length, {
223
+ message: 'duplicate nav group key',
224
+ path: ['navGroups'],
225
+ })
226
+ // A declared group may not shadow a built-in one: the built-in label comes
227
+ // from the engine's catalogue and the declared one from the add-on, so a
228
+ // collision is two labels for one heading with no rule about which wins.
229
+ .refine((b) => !(b.navGroups ?? []).some((g) => BUILTIN_NAV_GROUP_KEYS.includes(g.key)), {
230
+ message: `a nav group key may not be one of the built-in groups (${BUILTIN_NAV_GROUP_KEYS.join(', ')})`,
231
+ path: ['navGroups'],
232
+ })
233
+ // NAV_GROUP_UNKNOWN, refused at parse rather than resolved at render. A group
234
+ // nobody defines is the one failure this whole block exists to prevent: the
235
+ // rail would draw a raw key as a heading, or drop the row into `hidden` the
236
+ // way an unknown app group is dropped today, and both look like the add-on
237
+ // simply not working.
238
+ .refine((b) => (b.pages ?? []).every((p) => p.nav === undefined ||
239
+ BUILTIN_NAV_GROUP_KEYS.includes(p.nav.group) ||
240
+ (b.navGroups ?? []).some((g) => g.key === p.nav?.group)), {
241
+ message: 'a page names a nav group that is neither built in nor declared in navGroups',
242
+ path: ['pages'],
243
+ })
244
+ // The mirror of the rule above. A declared group no page uses renders as
245
+ // nothing, so it is a typo in one of the two places — and refusing here names
246
+ // it, where a silent empty heading would not.
247
+ .refine((b) => (b.navGroups ?? []).every((g) => (b.pages ?? []).some((p) => p.nav?.group === g.key)), {
248
+ message: 'a declared nav group is used by none of this add-on’s pages',
249
+ path: ['navGroups'],
250
+ })
251
+ // Pages are code the host runs against a published API surface. An add-on
252
+ // that does not say which version it was built against cannot be refused
253
+ // later on version grounds, which is the entire point of having a version.
254
+ .refine((b) => b.pages === undefined || b.hostApi !== undefined, {
255
+ message: 'an add-on that declares pages must declare the hostApi version it is built against',
256
+ path: ['hostApi'],
257
+ })
99
258
  // Every `provides[].contract` must be in the registry AT the declared version.
100
259
  .refine((b) => (b.provides ?? []).every((p) => hasContractVersion(p.contract, p.version)), {
101
260
  message: 'CONTRACT_UNKNOWN: a provided contract is not in the registry at that version',
@@ -105,13 +264,13 @@ export const addOnBlockSchema = z
105
264
  message: 'CONTRACT_UNKNOWN: a consumed contract is not in the registry at that version',
106
265
  path: ['consumes'],
107
266
  })
108
- // §5.6 — an oauth2 connect must name where it authorizes.
267
+ // An oauth2 connect must name where it authorizes.
109
268
  .refine((b) => b.connect.kind !== 'oauth2' ||
110
269
  (b.connect.authorizeUrl !== undefined && b.connect.tokenUrl !== undefined), {
111
270
  message: 'an oauth2 connect must declare authorizeUrl and tokenUrl',
112
271
  path: ['connect'],
113
272
  });
114
- /** Issue codes the validators emit (13 §3.2 convention, extended by 24 §5.3). */
273
+ /** Issue codes the validators emit. */
115
274
  export const ADD_ON_ISSUE_CODES = [
116
275
  'ATTACH_TARGET_UNKNOWN',
117
276
  'SLOT_UNKNOWN',
@@ -121,5 +280,12 @@ export const ADD_ON_ISSUE_CODES = [
121
280
  'CAPABILITY_CONFLICT',
122
281
  'FRONTEND_SECRET_LEAK',
123
282
  'SLOT_CONFLICT',
283
+ /*
284
+ * 51a adds no code for a bad nav group on purpose. `addOnBlockSchema` refuses
285
+ * an undeclared group itself, and the cross-block rules in
286
+ * `@adminium/manifest` run only after that schema has parsed — so a code here
287
+ * would name a state no manifest can be in. The refusal is a schema issue
288
+ * carrying the message, which is what a reader gets either way.
289
+ */
124
290
  ];
125
291
  //# sourceMappingURL=add-on-block.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-on-block.js","sourceRoot":"","sources":["../src/add-on-block.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-on-block.js","sourceRoot":"","sources":["../src/add-on-block.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * `artwork-source@1` (24 §5.5) — a way for a customer to supply artwork that is
3
- * not a plain upload.
2
+ * `artwork-source@1` — a way for a customer to supply artwork that is not a
3
+ * plain upload.
4
4
  *
5
5
  * The asymmetry that makes this contract worth having: the HOST, not the
6
6
  * add-on, runs the artwork checks on the returned `ArtworkRef`. Design Studio's
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  /**
3
- * `artwork-source@1` (24 §5.5) — a way for a customer to supply artwork that is
4
- * not a plain upload.
3
+ * `artwork-source@1` — a way for a customer to supply artwork that is not a
4
+ * plain upload.
5
5
  *
6
6
  * The asymmetry that makes this contract worth having: the HOST, not the
7
7
  * add-on, runs the artwork checks on the returned `ArtworkRef`. Design Studio's
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Provider contract registry v1 — CLOSED (24-marketplace-wave-4.md §5.5).
2
+ * Provider contract registry v1 — CLOSED.
3
3
  *
4
4
  * Four, not eight. A contract that has no implementation is a guess about a
5
5
  * future add-on; the only way a contract gets in is alongside the add-on that
6
- * implements it. The fourth was bought on a seven-exhibit dossier
7
- * (34-invoices-add-on.md Appendix A), not on a shape somebody liked.
6
+ * implements it. The fourth was bought on a seven-exhibit dossier, not on a
7
+ * shape somebody liked.
8
8
  */
9
9
  import { z } from 'zod';
10
10
  export interface ContractDefinition {
package/dist/contracts.js CHANGED
@@ -1,11 +1,11 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  /**
3
- * Provider contract registry v1 — CLOSED (24-marketplace-wave-4.md §5.5).
3
+ * Provider contract registry v1 — CLOSED.
4
4
  *
5
5
  * Four, not eight. A contract that has no implementation is a guess about a
6
6
  * future add-on; the only way a contract gets in is alongside the add-on that
7
- * implements it. The fourth was bought on a seven-exhibit dossier
8
- * (34-invoices-add-on.md Appendix A), not on a shape somebody liked.
7
+ * implements it. The fourth was bought on a seven-exhibit dossier, not on a
8
+ * shape somebody liked.
9
9
  */
10
10
  import { z } from 'zod';
11
11
  export const CONTRACT_REGISTRY = [
@@ -29,19 +29,19 @@ export const CONTRACT_REGISTRY = [
29
29
  },
30
30
  {
31
31
  /*
32
- * THE FOURTH, BOUGHT 2026-09-10 (34-invoices-add-on.md O1/O11). 25 §5 drew
33
- * this interface twice and never built it; zero occurrences in either repo
34
- * until now. Its dossier is 34 Appendix A — seven exhibits, two
35
- * implementers in the same sub-wave (invoices; barcode-labels wrapping
36
- * renderLabelSheet), which meets 25 D4's count — and, by 34 O11's ruling,
37
- * relaxes its "different means" clause for a contract Adminium ITSELF
38
- * consumes. It PROVIDES kinds of document an add-on can describe and
39
- * render, as an outline of slots (labels in all eight locales) and bytes
40
- * (each kind declares its own formats and glyph coverage); it is CONSUMED
41
- * BY the engine document pipeline (profiles, triggers, the document.render
42
- * job, the /documents routes) — the first production read of
43
- * runtime.providers, selected by add-on key, never by resolveProvider's
44
- * lowest-key choice. "Add-ons compose" runs for real here.
32
+ * THE FOURTH, BOUGHT 2026-09-10. This interface had been drawn twice and
33
+ * never built; zero occurrences in either repo until now. Its dossier is
34
+ * seven exhibits and two implementers in the same sub-wave (invoices;
35
+ * barcode-labels wrapping renderLabelSheet), which meets the count a new
36
+ * contract has to clear — and, by the owner's ruling, relaxes the
37
+ * "different means" clause for a contract Adminium ITSELF consumes. It PROVIDES kinds of document an add-on can
38
+ * describe and render, as an outline of slots (labels in all eight
39
+ * locales) and bytes (each kind declares its own formats and glyph
40
+ * coverage); it is CONSUMED BY the engine document pipeline (profiles,
41
+ * triggers, the document.render job, the /documents routes) — the first
42
+ * production read of runtime.providers, selected by add-on key, never by
43
+ * resolveProvider's lowest-key choice. "Add-ons compose" runs for real
44
+ * here.
45
45
  */
46
46
  id: 'document-render',
47
47
  version: 1,
@@ -1,6 +1,6 @@
1
1
  /**
2
- * `document-render@1` (34-invoices-add-on.md §4, Appendices A and B) — the
3
- * fourth contract, and the first one Adminium ITSELF consumes.
2
+ * `document-render@1` (Appendices A and B) — the fourth contract, and the
3
+ * first one Adminium ITSELF consumes.
4
4
  *
5
5
  * It provides KINDS OF DOCUMENT an add-on can describe — an outline of slots,
6
6
  * every label written in all eight compiled locales — and render to BYTES. The
@@ -13,9 +13,9 @@
13
13
  *
14
14
  * A provider receives VALUES and returns BYTES. It gets no database handle, no
15
15
  * network, and — the one that gets forgotten — no clock: `subject.now` is the
16
- * only time it may read, which is what makes 25 D12's byte-identical claim
17
- * testable rather than aspirational. `describeDocumentRenderer` renders twice
18
- * and compares every byte.
16
+ * only time it may read, which is what makes byte-identical claim testable
17
+ * rather than aspirational. `describeDocumentRenderer` renders twice and
18
+ * compares every byte.
19
19
  *
20
20
  * ── BYTES, NOT A `FileRef` ─────────────────────────────────────────────────
21
21
  *
@@ -32,11 +32,11 @@
32
32
  * cannot draw Arabic or Han — so a kind declares the glyphs it covers and
33
33
  * REFUSES what it cannot draw, typed, as {@link DocumentError} `LATIN_ONLY`
34
34
  * carrying the offending glyphs. A silent drop would ship an invoice with a
35
- * customer's name missing letters (34 D6, O11, O12).
35
+ * customer's name missing letters.
36
36
  *
37
37
  * ── THE `body` CHANNEL IS A ONE-WAY DOOR, AND IT IS OPEN ───────────────────
38
38
  *
39
- * §4.3 ships this module verbatim into eighteen repos before the first
39
+ * This module ships verbatim into eighteen repos before the first
40
40
  * provider exists, so a field added later is a second eighteen-repo ceremony
41
41
  * plus a second contract release. {@link RenderInput.body} is therefore here in
42
42
  * the first release. Its shape is O28(a2) — ruled 2026-09-07 as **D54**: an
@@ -73,7 +73,7 @@ export type DocumentLocaleId = (typeof DOCUMENT_LOCALE_IDS)[number];
73
73
  * (0.3 trap 19), because the Studio profile editor renders these labels
74
74
  * directly and a hole in one language becomes a raw slot id on somebody's
75
75
  * screen. The server half of an add-on carries its own strings — the engine
76
- * needs no bundle from it (34 D14).
76
+ * needs no bundle from it.
77
77
  */
78
78
  export type LocalizedText = Readonly<Record<DocumentLocaleId, string>>;
79
79
  export declare const localizedTextSchema: z.ZodObject<{
@@ -146,10 +146,10 @@ export type OutlineSlotType = (typeof OUTLINE_SLOT_TYPES)[number];
146
146
  /**
147
147
  * Where an unmapped slot's value comes from, if anywhere.
148
148
  *
149
- * `sequence` — the engine's CAS document number, minted after render (34 D11).
150
- * `connection` — the connection's currency.
151
- * `setting` — one of the add-on's own non-secret settings.
152
- * `now` — `subject.now.iso`, never the provider's own clock.
149
+ * `sequence` — the engine's CAS document number, minted after render.
150
+ * `connection` — the connection's currency. `setting` — one of the add-on's
151
+ * own non-secret settings. `now` — `subject.now.iso`, never the provider's own
152
+ * clock.
153
153
  */
154
154
  export declare const OUTLINE_SLOT_DEFAULTS: readonly ["sequence", "connection", "setting", "now"];
155
155
  export type OutlineSlotDefault = (typeof OUTLINE_SLOT_DEFAULTS)[number];
@@ -391,7 +391,7 @@ export declare const documentOutlineSchema: z.ZodObject<{
391
391
  * Structurally the same object as `@adminium/meta`'s `recordRefSchema`
392
392
  * (`json-payloads.ts:17-25`), which is the AUTHORITY for the shape; it is
393
393
  * restated here because this package has no `node:` and no meta dependency by
394
- * design (01 §3). A file that imports both should alias one — they are two
394
+ * design. A file that imports both should alias one — they are two
395
395
  * declarations of one shape, not two shapes.
396
396
  */
397
397
  export interface RecordRef {
@@ -404,9 +404,9 @@ export interface RecordRef {
404
404
  label: string;
405
405
  }
406
406
  /**
407
- * What a PUBLIC caller may send (34 D15): values, and nothing that decides
408
- * anything. The server stamps `business`, `now`, `currency`, `entity: null`
409
- * and `number: null` itself — a request that carries one of them is refused
407
+ * What a PUBLIC caller may send: values, and nothing that decides anything.
408
+ * The server stamps `business`, `now`, `currency`, `entity: null` and
409
+ * `number: null` itself — a request that carries one of them is refused
410
410
  * `INVALID_REQUEST` rather than quietly overwritten, so a customer cannot
411
411
  * post a document that claims to come from a different business or to have
412
412
  * been issued last year.
@@ -443,7 +443,7 @@ export interface DocumentSubject {
443
443
  lines: readonly string[];
444
444
  logoDataUrl?: string;
445
445
  };
446
- /** `null` for request-shaped intents (34 D15). */
446
+ /** `null` for request-shaped intents. */
447
447
  entity: RecordRef | null;
448
448
  /** `null` until minted; a re-render carries the number it already has. */
449
449
  number: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"document-render.d.ts","sourceRoot":"","sources":["../src/document-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-render.d.ts","sourceRoot":"","sources":["../src/document-render.ts"],"names":[],"mappings":"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"}