@jini-ai/cms 0.3.4 → 0.3.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 (104) hide show
  1. package/README.md +22 -17
  2. package/dist/content-types/agent-tools.d.ts.map +1 -1
  3. package/dist/content-types/agent-tools.js +1 -1
  4. package/dist/content-types/agent-tools.js.map +1 -1
  5. package/dist/content-types/errors.d.ts +19 -1
  6. package/dist/content-types/errors.d.ts.map +1 -1
  7. package/dist/content-types/errors.js +22 -1
  8. package/dist/content-types/errors.js.map +1 -1
  9. package/dist/content-types/index-provisioning.d.ts +56 -10
  10. package/dist/content-types/index-provisioning.d.ts.map +1 -1
  11. package/dist/content-types/index-provisioning.js +86 -13
  12. package/dist/content-types/index-provisioning.js.map +1 -1
  13. package/dist/content-types/index.d.ts +15 -3
  14. package/dist/content-types/index.d.ts.map +1 -1
  15. package/dist/content-types/index.js +14 -2
  16. package/dist/content-types/index.js.map +1 -1
  17. package/dist/content-types/lifecycle.js +3 -3
  18. package/dist/content-types/lifecycle.js.map +1 -1
  19. package/dist/content-types/types.d.ts +64 -3
  20. package/dist/content-types/types.d.ts.map +1 -1
  21. package/dist/content-types/types.js +67 -3
  22. package/dist/content-types/types.js.map +1 -1
  23. package/dist/content-types/write-service.d.ts +18 -3
  24. package/dist/content-types/write-service.d.ts.map +1 -1
  25. package/dist/content-types/write-service.js +28 -2
  26. package/dist/content-types/write-service.js.map +1 -1
  27. package/dist/core/ports.d.ts +12 -2
  28. package/dist/core/ports.d.ts.map +1 -1
  29. package/dist/entries/field-validation.d.ts.map +1 -1
  30. package/dist/entries/field-validation.js +96 -1
  31. package/dist/entries/field-validation.js.map +1 -1
  32. package/dist/entries/write-service.d.ts +14 -0
  33. package/dist/entries/write-service.d.ts.map +1 -1
  34. package/dist/entries/write-service.js +2 -2
  35. package/dist/entries/write-service.js.map +1 -1
  36. package/dist/identity/admin-crud-service.d.ts +28 -0
  37. package/dist/identity/admin-crud-service.d.ts.map +1 -1
  38. package/dist/identity/admin-crud-service.js +30 -0
  39. package/dist/identity/admin-crud-service.js.map +1 -1
  40. package/dist/identity/auth-service.d.ts +32 -1
  41. package/dist/identity/auth-service.d.ts.map +1 -1
  42. package/dist/identity/auth-service.js +44 -15
  43. package/dist/identity/auth-service.js.map +1 -1
  44. package/dist/identity/index.d.ts +4 -1
  45. package/dist/identity/index.d.ts.map +1 -1
  46. package/dist/identity/index.js +4 -1
  47. package/dist/identity/index.js.map +1 -1
  48. package/dist/identity/seed.d.ts +14 -2
  49. package/dist/identity/seed.d.ts.map +1 -1
  50. package/dist/identity/seed.js +197 -45
  51. package/dist/identity/seed.js.map +1 -1
  52. package/dist/media/blob-store.fs.d.ts +7 -0
  53. package/dist/media/blob-store.fs.d.ts.map +1 -1
  54. package/dist/media/blob-store.fs.js +12 -2
  55. package/dist/media/blob-store.fs.js.map +1 -1
  56. package/dist/media/content-type-sniffer.d.ts +1 -1
  57. package/dist/media/content-type-sniffer.d.ts.map +1 -1
  58. package/dist/media/content-type-sniffer.js +52 -4
  59. package/dist/media/content-type-sniffer.js.map +1 -1
  60. package/dist/media/html-attributes.d.ts +90 -0
  61. package/dist/media/html-attributes.d.ts.map +1 -0
  62. package/dist/media/html-attributes.js +161 -0
  63. package/dist/media/html-attributes.js.map +1 -0
  64. package/dist/media/image-transformer.sharp.d.ts +35 -1
  65. package/dist/media/image-transformer.sharp.d.ts.map +1 -1
  66. package/dist/media/image-transformer.sharp.js +44 -2
  67. package/dist/media/image-transformer.sharp.js.map +1 -1
  68. package/dist/media/index.d.ts +2 -1
  69. package/dist/media/index.d.ts.map +1 -1
  70. package/dist/media/index.js +2 -1
  71. package/dist/media/index.js.map +1 -1
  72. package/dist/media/media-service.d.ts +93 -1
  73. package/dist/media/media-service.d.ts.map +1 -1
  74. package/dist/media/media-service.js +254 -7
  75. package/dist/media/media-service.js.map +1 -1
  76. package/dist/media/ports.d.ts +8 -1
  77. package/dist/media/ports.d.ts.map +1 -1
  78. package/dist/media/rendition-service.d.ts +7 -1
  79. package/dist/media/rendition-service.d.ts.map +1 -1
  80. package/dist/media/rendition-service.js +10 -4
  81. package/dist/media/rendition-service.js.map +1 -1
  82. package/dist/media/repo.memory.d.ts +4 -0
  83. package/dist/media/repo.memory.d.ts.map +1 -1
  84. package/dist/media/repo.memory.js +3 -0
  85. package/dist/media/repo.memory.js.map +1 -1
  86. package/dist/media/tool-registrations.d.ts +6 -2
  87. package/dist/media/tool-registrations.d.ts.map +1 -1
  88. package/dist/media/tool-registrations.js +19 -2
  89. package/dist/media/tool-registrations.js.map +1 -1
  90. package/dist/media/types.d.ts +26 -0
  91. package/dist/media/types.d.ts.map +1 -1
  92. package/dist/media/types.js.map +1 -1
  93. package/dist/navigation/agent-tools.d.ts.map +1 -1
  94. package/dist/navigation/agent-tools.js +8 -1
  95. package/dist/navigation/agent-tools.js.map +1 -1
  96. package/dist/navigation/index.d.ts +10 -1
  97. package/dist/navigation/index.d.ts.map +1 -1
  98. package/dist/navigation/index.js +10 -1
  99. package/dist/navigation/index.js.map +1 -1
  100. package/dist/navigation/menu-service.d.ts +60 -4
  101. package/dist/navigation/menu-service.d.ts.map +1 -1
  102. package/dist/navigation/menu-service.js +106 -8
  103. package/dist/navigation/menu-service.js.map +1 -1
  104. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registrations.d.ts","sourceRoot":"","sources":["../../src/media/tool-registrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAQL,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,MAAM,IAAI,MAAM,CAAA;KAAE,CAAC;IAC5B,KAAK,EAAE;QAAE,KAAK,IAAI,MAAM,CAAA;KAAE,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,iBAAiB,CAAC;IACjC,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,SAAS,EAAE,aAAa,CAAC;IACzB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACpG;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChG;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,mBAU7B,CAAC;AA0DH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAsFpF"}
1
+ {"version":3,"file":"tool-registrations.d.ts","sourceRoot":"","sources":["../../src/media/tool-registrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAQL,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,MAAM,IAAI,MAAM,CAAA;KAAE,CAAC;IAC5B,KAAK,EAAE;QAAE,KAAK,IAAI,MAAM,CAAA;KAAE,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,iBAAiB,CAAC;IACjC,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,SAAS,EAAE,aAAa,CAAC;IACzB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACpG;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChG;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,mBAU7B,CAAC;AA0DH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAsGpF"}
@@ -1,6 +1,6 @@
1
1
  import { buildDomainRegistrations, indexCatalogById, requireInputRecord, requireString, requireToolPermission, withSchemaOnRejection, } from "../core/tools/registration-kit.js";
2
2
  import { mediaAgentToolCatalog } from "./agent-tools.js";
3
- import { listMedia, MediaValidationError, trashMedia, updateMediaMetadata, uploadMedia } from "./media-service.js";
3
+ import { listMedia, MediaValidationError, rollbackUploadedMedia, trashMedia, updateMediaMetadata, uploadMedia } from "./media-service.js";
4
4
  const CATALOG_BY_ID = indexCatalogById(mediaAgentToolCatalog);
5
5
  /**
6
6
  * This wiring layer's OWN risk classification, authored from what each handler below actually
@@ -94,7 +94,24 @@ export function buildMediaRegistrations(routeDeps) {
94
94
  },
95
95
  });
96
96
  if (routeDeps.recordUploadContentType) {
97
- await routeDeps.recordUploadContentType({ media, bytes });
97
+ try {
98
+ await routeDeps.recordUploadContentType({ media, bytes });
99
+ }
100
+ catch (err) {
101
+ // The blob/media/rendition rows uploadMedia() just wrote must not survive as orphans
102
+ // when the caller is about to see this whole upload as failed (the fix for that gap —
103
+ // see rollbackUploadedMedia's own doc). The original hook error is rethrown unchanged.
104
+ await rollbackUploadedMedia({
105
+ deps: {
106
+ mediaRepo: routeDeps.mediaRepo,
107
+ blobRepo: routeDeps.assetBlobRepo,
108
+ renditionRepo: routeDeps.assetRenditionRepo,
109
+ clock: routeDeps.clock,
110
+ },
111
+ input: { workspaceId: routeDeps.workspaceId, media },
112
+ });
113
+ throw err;
114
+ }
98
115
  }
99
116
  const [view] = await toMediaToolViewsWithPublicUrls(routeDeps, [media]);
100
117
  return { media: view };
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registrations.js","sourceRoot":"","sources":["../../src/media/tool-registrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-registrations.js","sourceRoot":"","sources":["../../src/media/tool-registrations.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,20 @@ export interface MediaRecord {
42
42
  id: UUID;
43
43
  workspaceId: UUID;
44
44
  title: string;
45
+ /**
46
+ * Human-memorable, unique-per-workspace lookup key (owner-directed, 2026-09-07) — an ADDITIONAL
47
+ * key alongside `id`, never a replacement: `id` stays the canonical primary key every existing
48
+ * embed/reference resolves by, and this column only gives a second, human-typeable way to reach
49
+ * the same row (`findMediaByIdOrSlug` in `media-service.ts` tries this first, `id` second).
50
+ *
51
+ * Derived from `title` at upload time (`deriveMediaSlug`), then independently editable afterward
52
+ * — renaming `title` does NOT recompute this field; it changes only on an explicit `slug` write.
53
+ * Unique per `(workspaceId, slug)`, enforced by the host's own DB index (see Tovu's
54
+ * `idx_media_workspace_slug`) — `updateMediaMetadata`'s own `findBySlug` check is a friendly-error
55
+ * courtesy on top of that, not the enforcement itself, the same split `posts_workspace_slug_unique`
56
+ * already establishes for `post`'s identical `slug` field.
57
+ */
58
+ slug: string;
45
59
  alt: string;
46
60
  caption: string;
47
61
  credit: string;
@@ -63,6 +77,18 @@ export interface MediaRecord {
63
77
  width: number | null;
64
78
  height: number | null;
65
79
  cssClass: string | null;
80
+ /**
81
+ * Owner-directed (2026-09-07) free-text HTML attributes threaded onto this asset's public
82
+ * `<img>`/`<video>` tag (stated uses: animations, custom WebMCP hooks) — raw, ALREADY-VALIDATED
83
+ * source text (e.g. `data-motion="fade-in" loading="lazy"`), the same "one string column, `null`
84
+ * means not set" shape {@link cssClass} already establishes; `null` by default. This is a stored-
85
+ * XSS boundary: `updateMediaMetadata` validates it against `html-attributes.ts`'s allowlist before
86
+ * ever writing it (`on*` handlers, `javascript:` values, and any name not on the allowlist are
87
+ * rejected outright, never sanitized), and a host's render path must re-validate before emitting
88
+ * it onto a real tag rather than trusting a stored value was never written by an older code path
89
+ * or a direct DB edit.
90
+ */
91
+ htmlAttributes: string | null;
66
92
  }
67
93
  /**
68
94
  * Blob-GC lifecycle status (INV-1's two-phase journaled protocol,
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE1D,yEAAyE;AACzE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,WAAW,CAAC;IACvB,iFAAiF;IACjF,MAAM,EAAE,eAAe,CAAC;IACxB,kFAAkF;IAClF,YAAY,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,IAAI,CAAC;IAClB,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAChD,qBAAa,oBAAqB,SAAQ,KAAK;CAAG;AAClD,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAEhD;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB;CAAG;AAEtE;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,kBAAkB;IAC/D,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE;CAI5D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE1D,yEAAyE;AACzE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;;;OAYG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;;;;;;;OAUG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,WAAW,CAAC;IACvB,iFAAiF;IACjF,MAAM,EAAE,eAAe,CAAC;IACxB,kFAAkF;IAClF,YAAY,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,IAAI,CAAC;IAClB,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAChD,qBAAa,oBAAqB,SAAQ,KAAK;CAAG;AAClD,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAEhD;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,oBAAoB;CAAG;AAEtE;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,kBAAkB;IAC/D,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE;CAI5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"AAuIA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAChD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;CAAG;AAClD,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAEhD;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,oBAAoB;CAAG;AAEtE;;;;;GAKG;AACH,MAAM,OAAO,yBAA0B,SAAQ,kBAAkB;IACtD,WAAW,CAAoB;IAExC,YAAY,OAAe,EAAE,WAA8B;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/media/types.ts"],"names":[],"mappings":"AAiKA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAChD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;CAAG;AAClD,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAEhD;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,oBAAoB;CAAG;AAEtE;;;;;GAKG;AACH,MAAM,OAAO,yBAA0B,SAAQ,kBAAkB;IACtD,WAAW,CAAoB;IAExC,YAAY,OAAe,EAAE,WAA8B;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tools.d.ts","sourceRoot":"","sources":["../../src/navigation/agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAEH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,uBAAuB,GAAG,aAAa,CAAC;AAEnF,MAAM,MAAM,uBAAuB,GAAG,sCAAsC,GAAG,WAAW,GAAG,MAAM,CAAC;AAEpG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,mBAAmB,CAAC;IACjC,aAAa,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACjD;AAqFD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EAkFtD,CAAC"}
1
+ {"version":3,"file":"agent-tools.d.ts","sourceRoot":"","sources":["../../src/navigation/agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAIH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,uBAAuB,GAAG,aAAa,CAAC;AAEnF,MAAM,MAAM,uBAAuB,GAAG,sCAAsC,GAAG,WAAW,GAAG,MAAM,CAAC;AAEpG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,mBAAmB,CAAC;IACjC,aAAa,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACjD;AA2FD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EAkFtD,CAAC"}
@@ -55,6 +55,7 @@
55
55
  * published, there), so the target schema below is hand-authored against `types.ts`'s `NavTarget`
56
56
  * union and cross-checked by this catalog's own contract test rather than imported.
57
57
  */
58
+ import { ALLOWED_HREF_SHAPES_DESCRIPTION } from "./menu-service.js";
58
59
  const MENU_ID_SCHEMA = {
59
60
  type: "string",
60
61
  description: "The menu's id, as returned by menus_list_menus, menus_get_menu, or menus_create_menu.",
@@ -90,7 +91,13 @@ const NAV_TARGET_SCHEMA = {
90
91
  required: ["kind", "href"],
91
92
  properties: {
92
93
  kind: { const: "url" },
93
- href: { type: "string", description: "An absolute or site-relative URL. 'javascript:', 'data:', and 'vbscript:' schemes are rejected." },
94
+ href: {
95
+ type: "string",
96
+ // Derived from `menu-service.ts`'s own `ALLOWED_HREF_SHAPES_DESCRIPTION` (the single
97
+ // source of truth `isAllowedHref`'s rejection message also draws from) rather than
98
+ // hand-copied, so this schema description cannot drift out of sync with the real check.
99
+ description: `Accepted shapes: ${ALLOWED_HREF_SHAPES_DESCRIPTION}. Anything else — including 'javascript:', 'data:', 'vbscript:', 'file:', 'blob:', 'about:', a protocol-relative '//...' URL, or a bare relative path with no leading '/' — is rejected.`,
100
+ },
94
101
  },
95
102
  },
96
103
  {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tools.js","sourceRoot":"","sources":["../../src/navigation/agent-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AA0BH,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,uFAAuF;CAC5F,CAAC;AAEX;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,sEAAsE;IACnF,KAAK,EAAE;QACL;YACE,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;YAC7B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE,EAAE;SAChI;QACD;YACE,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;YACxC,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBACnE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;aAC/E;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YAC1B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;gBACtB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iGAAiG,EAAE;aACzI;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;YAC3B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;gBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;gBACrF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE;aAChG;SACF;KACF;CACO,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG;IAC3B,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC1B,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,+FAA+F,EAAE;QAClJ,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iGAAiG,EAAE;QACzI,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mIAAmI;SACjJ;QACD,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,WAAW,EAAE,sGAAsG,EAAE;KACrL;CACO,CAAC;AAEX,4FAA4F;AAC5F,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAClC,WAAW,EAAE,yIAAyI;IACtJ,KAAK,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;CAChC,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,wGAAwG;QACrH,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE;QACjD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,yEAAyE;QACtF,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE;QACjD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,UAAU,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;SACvC;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,+GAA+G;YAC/G,0FAA0F;QAC5F,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE;QACnD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAC3B,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,qEAAqE,EAAE;gBACrI,KAAK,EAAE,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,mEAAmE,EAAE;aAClH;SACF;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,4GAA4G;YAC5G,+GAA+G;YAC/G,sBAAsB;QACxB,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE;QACnD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,CAAC;YAChD,UAAU,EAAE;gBACV,MAAM,EAAE,cAAc;gBACtB,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mLAAmL,EAAE;gBACtO,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;gBAC7E,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,+EAA+E,EAAE;gBAC/I,KAAK,EAAE,iBAAiB;aACzB;SACF;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,8GAA8G;YAC9G,iHAAiH;YACjH,wEAAwE;QAC1E,WAAW,EAAE,uBAAuB;QACpC,aAAa,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE;QACnD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;YACnC,UAAU,EAAE;gBACV,MAAM,EAAE,cAAc;gBACtB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,mJAAmJ,EAAE;aAChN;SACF;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"agent-tools.js","sourceRoot":"","sources":["../../src/navigation/agent-tools.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,16 @@ export { createNavMenuReadModel, type NavMenuReadModelDeps } from "./read-model.
16
16
  * adapter implements it directly, the same way it implements `NavLocationBindingRepoPort`.
17
17
  */
18
18
  export { InMemoryMenuRepo, InMemoryNavLocationBindingRepo, type MenuRepoPort, } from "./repo.memory.js";
19
- export { createMenu, updateMenuTree, assignLocation, deleteMenu, validateAndCloneTree, MenuNotFoundError, MenuValidationError, MenuConflictError, MenuLocationBoundError, DEFAULT_MAX_TREE_DEPTH, DEFAULT_MAX_ITEM_COUNT, type TreeValidationLimits, type CreateMenuDeps, type CreateMenuServiceInput, type CreateMenuRequired, type CreateMenuOptional, type UpdateMenuTreeDeps, type UpdateMenuTreeServiceInput, type UpdateMenuTreeRequired, type UpdateMenuTreeOptional, type AssignLocationDeps, type AssignLocationServiceInput, type AssignLocationRequired, type AssignLocationOptional, type DeleteMenuDeps, type DeleteMenuServiceInput, type DeleteMenuRequired, type DeleteMenuOptional, } from "./menu-service.js";
19
+ /**
20
+ * `isAllowedHref`/`ALLOWED_HREF_SHAPES_DESCRIPTION` (2026-09-03): the canonical author-link
21
+ * allowlist, promoted here specifically so a HOST can import it rather than hand-copy it — the
22
+ * dependency direction a host -> `@jini-ai/cms` is the one that is actually legal (the reverse is
23
+ * not). Tovu's own render-time `safeHref` (`server/inbound/public-http/http/site/render.ts` and its
24
+ * `features/theme/static-render.ts` duplicate) have not yet been migrated to import this — see
25
+ * `menu-service.ts`'s own doc comment on `isAllowedHref` for the retirement plan and why nothing in
26
+ * `check:boundaries` blocks either Tovu call site from doing so.
27
+ */
28
+ export { createMenu, updateMenuTree, assignLocation, deleteMenu, validateAndCloneTree, isAllowedHref, ALLOWED_HREF_SHAPES_DESCRIPTION, MenuNotFoundError, MenuValidationError, MenuConflictError, MenuLocationBoundError, DEFAULT_MAX_TREE_DEPTH, DEFAULT_MAX_ITEM_COUNT, type TreeValidationLimits, type CreateMenuDeps, type CreateMenuServiceInput, type CreateMenuRequired, type CreateMenuOptional, type UpdateMenuTreeDeps, type UpdateMenuTreeServiceInput, type UpdateMenuTreeRequired, type UpdateMenuTreeOptional, type AssignLocationDeps, type AssignLocationServiceInput, type AssignLocationRequired, type AssignLocationOptional, type DeleteMenuDeps, type DeleteMenuServiceInput, type DeleteMenuRequired, type DeleteMenuOptional, } from "./menu-service.js";
20
29
  export { resolveForLocation, resolveMenuDoc, type ResolveTargetHrefFn, type ResolvedTargetHref, type ResolveForLocationDeps, type ResolveForLocationServiceInput, type ResolveForLocationRequired, type ResolveForLocationOptional, } from "./resolver.js";
21
30
  export { rebuildNavLocationBindings, type RebuildNavLocationBindingsDeps, type RebuildNavLocationBindingsResult, } from "./reconcile.js";
22
31
  /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EACV,aAAa,EACb,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtF,YAAY,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpF;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,GAChC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,EAC1B,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,GACtC,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,OAAO,EACL,qBAAqB,EACrB,KAAK,mBAAmB,IAAI,6BAA6B,EACzD,KAAK,mBAAmB,IAAI,6BAA6B,EACzD,KAAK,uBAAuB,IAAI,iCAAiC,GAClE,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EACV,aAAa,EACb,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtF,YAAY,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpF;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,8BAA8B,EAC9B,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;GAQG;AACH,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,+BAA+B,EAC/B,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,GAChC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,EAC1B,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,GACtC,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,OAAO,EACL,qBAAqB,EACrB,KAAK,mBAAmB,IAAI,6BAA6B,EACzD,KAAK,mBAAmB,IAAI,6BAA6B,EACzD,KAAK,uBAAuB,IAAI,iCAAiC,GAClE,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG"}
@@ -7,7 +7,16 @@ export { createNavMenuReadModel } from "./read-model.js";
7
7
  * adapter implements it directly, the same way it implements `NavLocationBindingRepoPort`.
8
8
  */
9
9
  export { InMemoryMenuRepo, InMemoryNavLocationBindingRepo, } from "./repo.memory.js";
10
- export { createMenu, updateMenuTree, assignLocation, deleteMenu, validateAndCloneTree, MenuNotFoundError, MenuValidationError, MenuConflictError, MenuLocationBoundError, DEFAULT_MAX_TREE_DEPTH, DEFAULT_MAX_ITEM_COUNT, } from "./menu-service.js";
10
+ /**
11
+ * `isAllowedHref`/`ALLOWED_HREF_SHAPES_DESCRIPTION` (2026-09-03): the canonical author-link
12
+ * allowlist, promoted here specifically so a HOST can import it rather than hand-copy it — the
13
+ * dependency direction a host -> `@jini-ai/cms` is the one that is actually legal (the reverse is
14
+ * not). Tovu's own render-time `safeHref` (`server/inbound/public-http/http/site/render.ts` and its
15
+ * `features/theme/static-render.ts` duplicate) have not yet been migrated to import this — see
16
+ * `menu-service.ts`'s own doc comment on `isAllowedHref` for the retirement plan and why nothing in
17
+ * `check:boundaries` blocks either Tovu call site from doing so.
18
+ */
19
+ export { createMenu, updateMenuTree, assignLocation, deleteMenu, validateAndCloneTree, isAllowedHref, ALLOWED_HREF_SHAPES_DESCRIPTION, MenuNotFoundError, MenuValidationError, MenuConflictError, MenuLocationBoundError, DEFAULT_MAX_TREE_DEPTH, DEFAULT_MAX_ITEM_COUNT, } from "./menu-service.js";
11
20
  export { resolveForLocation, resolveMenuDoc, } from "./resolver.js";
12
21
  export { rebuildNavLocationBindings, } from "./reconcile.js";
13
22
  /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAyBtF,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAA6B,MAAM,iBAAiB,CAAC;AAEpF;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,8BAA8B,GAE/B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GAkBvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,cAAc,GAOf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,GAG3B,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,OAAO,EACL,qBAAqB,GAItB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAyBtF,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAA6B,MAAM,iBAAiB,CAAC;AAEpF;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,8BAA8B,GAE/B,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;GAQG;AACH,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,+BAA+B,EAC/B,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GAkBvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,cAAc,GAOf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,0BAA0B,GAG3B,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,OAAO,EACL,qBAAqB,GAItB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG"}
@@ -46,6 +46,55 @@ export declare class MenuLocationBoundError extends MenuConflictError {
46
46
  export declare const DEFAULT_MAX_TREE_DEPTH = 5;
47
47
  /** Default max total item count across the whole tree. */
48
48
  export declare const DEFAULT_MAX_ITEM_COUNT = 500;
49
+ /**
50
+ * The CANONICAL href allowlist for an author-authored link — same accepted shapes (`#…`, same-origin
51
+ * `/…`, `http(s)://`, `mailto:`) as Tovu's render-time `safeHref` in `render.ts` and its
52
+ * `features/theme/static-render.ts` duplicate. **This is now the single source of truth**: exported
53
+ * from this package's public surface (`navigation/index.ts` -> `@jini-ai/cms/navigation`) so the
54
+ * dependency runs the direction that is actually legal — Tovu already depends on `@jini-ai/cms`, not
55
+ * the reverse — rather than each consumer hand-copying the predicate.
56
+ *
57
+ * The two Tovu copies (`render.ts:252`, `features/theme/static-render.ts:210`, both a coercing
58
+ * `value => passes ? value : "#"` wrapper around the identical predicate below) have **not yet been
59
+ * retired to import this** — that edit is intentionally out of this change's scope (a
60
+ * `check:boundaries` no-deep-import concern is NOT what blocks it: `render.ts` already imports
61
+ * `@jini-ai/cms/core` today, and `features/theme` already imports `@jini-ai/cms/core` too, so both
62
+ * call sites may legally import `@jini-ai/cms/navigation` directly — verified by grep, not assumed).
63
+ * Until that follow-up lands, `apps/website/development/scripts/check-menu-href-allowlist-sync.ts`
64
+ * behaviorally gates the three copies against the same adversarial table so a divergence fails CI
65
+ * instead of drifting silently.
66
+ *
67
+ * Replaced (this change) a `URL_SCHEME_DENYLIST` (`startsWith` on a lowercased, `.trim()`ed string)
68
+ * that failed open: the WHATWG `URL` parser strips TAB/LF/CR from ANYWHERE in the input and folds a
69
+ * leading backslash to `/` for `http(s)`, so `"java\tscript:alert(1)"`, `" javascript:alert(1)"`,
70
+ * `"file:///etc/passwd"`, `"blob:…"`, `"about:blank"`, `"//evil.example"` (protocol-relative), and
71
+ * `"/\evil.example"` all resolved to a dangerous or off-origin target while never matching any
72
+ * `startsWith` prefix in the old list. An allowlist closes the whole bypass class at once (case,
73
+ * embedded control characters, and scheme are all irrelevant to an allowlist the same way) rather
74
+ * than needing a new prefix bolted on per newly-discovered shape.
75
+ *
76
+ * `validateTarget`'s caller REJECTS on a `false` result (`MenuValidationError`, surfaced as HTTP 400)
77
+ * rather than silently coercing the way `safeHref`'s render-time callers degrade to `"#"` — a
78
+ * write-time author-facing path should say so, not quietly rewrite the input. Verified against the
79
+ * workspace's stored menu data (`content.db`, `content.seed.db`) before this change: every existing
80
+ * `url`-kind href already starts with `#` or `/`, so this tightening rejects nothing that exists
81
+ * today — it governs `createMenu` too, so it also reaches the Jini MCP agent-tool path, not just
82
+ * hrefs written through Tovu's admin editor.
83
+ *
84
+ * @param rawHref - The href to check, already confirmed non-empty by `validateTarget`. Any string is
85
+ * otherwise a valid input — this function performs no other precondition checks.
86
+ * @returns `true` when `rawHref` passes the allowlist, `false` otherwise.
87
+ * @complexity O(1) — a handful of string checks plus one `URL` construction on the `/…` branch.
88
+ */
89
+ export declare function isAllowedHref(rawHref: string): boolean;
90
+ /**
91
+ * Human-readable description of {@link isAllowedHref}'s accepted shapes — the single source of truth
92
+ * for both `validateTarget`'s rejection message below and `agent-tools.ts`'s published JSON Schema
93
+ * `href` description, so an author-facing 400 and an LLM-facing tool description can never drift out
94
+ * of sync with each other the way three independent copies of the URL-checking LOGIC itself did
95
+ * before this change.
96
+ */
97
+ export declare const ALLOWED_HREF_SHAPES_DESCRIPTION = "an in-page anchor ('#...'), a same-origin relative path ('/...'), an 'http://' or 'https://' URL, or a 'mailto:' address";
49
98
  export interface TreeValidationLimits {
50
99
  maxDepth?: number | undefined;
51
100
  maxItemCount?: number | undefined;
@@ -54,15 +103,22 @@ export interface TreeValidationLimits {
54
103
  * Validates a candidate item tree and returns a defensively-cloned copy.
55
104
  *
56
105
  * Checks (total/bounded validation + target integrity):
106
+ * - `items` (and every `children` array) is actually an array, and every node
107
+ * in it is a non-null object — untrusted JSON bodies can carry `null`
108
+ * entries or a non-array `items`/`children`, which must reject as a
109
+ * `MenuValidationError`, not throw an uncaught `TypeError`;
57
110
  * - every node has a non-empty `id`, unique across the whole tree (id
58
111
  * stability is a caller responsibility — see `updateMenuTree` doc for the
59
112
  * simplification this build accepts);
60
113
  * - nesting depth stays within `maxDepth`;
61
114
  * - total item count stays within `maxItemCount`;
62
- * - every target's `kind` is one of the four v1 kinds — reserved kinds
63
- * (`dynamicQuery`, `content`) are rejected with a clear "not yet" error
64
- * rather than silently accepted;
65
- * - `url` targets reject a scheme denylist (`javascript:`, `data:`, `vbscript:`).
115
+ * - every node has a `target` object (a missing/`null` `target` rejects
116
+ * rather than crashing) whose `kind` is one of the four v1 kinds — reserved
117
+ * kinds (`dynamicQuery`, `content`) are rejected with a clear "not yet"
118
+ * error rather than silently accepted;
119
+ * - `url` targets require a non-empty string `href` and pass an origin/scheme
120
+ * ALLOWLIST (`#…`, same-origin `/…`, `http(s)://`, `mailto:` — see
121
+ * {@link isAllowedHref}), not a scheme denylist.
66
122
  *
67
123
  * @complexity O(n) over total node count for one full walk; no per-node
68
124
  * backtracking. Space is O(n) for the cloned tree plus O(n) for the id set.
@@ -1 +1 @@
1
- {"version":3,"file":"menu-service.d.ts","sourceRoot":"","sources":["../../src/navigation/menu-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"menu-service.d.ts","sourceRoot":"","sources":["../../src/navigation/menu-service.ts"],"names":[],"mappings":"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"}
@@ -55,20 +55,100 @@ export const DEFAULT_MAX_ITEM_COUNT = 500;
55
55
  const VALID_TARGET_KINDS = new Set(["entryRef", "termRef", "url", "route"]);
56
56
  /** Named deferred seams — recognized, rejected until their resolver ships. */
57
57
  const RESERVED_TARGET_KINDS = new Set(["dynamicQuery", "content"]);
58
- const URL_SCHEME_DENYLIST = ["javascript:", "data:", "vbscript:"];
58
+ /**
59
+ * Fixed placeholder origin {@link isAllowedHref} resolves a claimed same-origin-relative href
60
+ * against, to compare the RESOLVED origin rather than the raw string shape. Mirrors
61
+ * `apps/website/src/server/inbound/public-http/http/site/render.ts`'s identically-named constant
62
+ * byte-for-byte — see that file's own header for why a fixed placeholder origin is sufficient (only
63
+ * the relationship between the resolved URL's origin and this one is ever inspected, never the
64
+ * placeholder value itself).
65
+ */
66
+ const SAFE_HREF_RESOLUTION_BASE = "http://tovu-safehref.invalid/";
67
+ const SAFE_HREF_RESOLUTION_ORIGIN = new URL(SAFE_HREF_RESOLUTION_BASE).origin;
68
+ /**
69
+ * The CANONICAL href allowlist for an author-authored link — same accepted shapes (`#…`, same-origin
70
+ * `/…`, `http(s)://`, `mailto:`) as Tovu's render-time `safeHref` in `render.ts` and its
71
+ * `features/theme/static-render.ts` duplicate. **This is now the single source of truth**: exported
72
+ * from this package's public surface (`navigation/index.ts` -> `@jini-ai/cms/navigation`) so the
73
+ * dependency runs the direction that is actually legal — Tovu already depends on `@jini-ai/cms`, not
74
+ * the reverse — rather than each consumer hand-copying the predicate.
75
+ *
76
+ * The two Tovu copies (`render.ts:252`, `features/theme/static-render.ts:210`, both a coercing
77
+ * `value => passes ? value : "#"` wrapper around the identical predicate below) have **not yet been
78
+ * retired to import this** — that edit is intentionally out of this change's scope (a
79
+ * `check:boundaries` no-deep-import concern is NOT what blocks it: `render.ts` already imports
80
+ * `@jini-ai/cms/core` today, and `features/theme` already imports `@jini-ai/cms/core` too, so both
81
+ * call sites may legally import `@jini-ai/cms/navigation` directly — verified by grep, not assumed).
82
+ * Until that follow-up lands, `apps/website/development/scripts/check-menu-href-allowlist-sync.ts`
83
+ * behaviorally gates the three copies against the same adversarial table so a divergence fails CI
84
+ * instead of drifting silently.
85
+ *
86
+ * Replaced (this change) a `URL_SCHEME_DENYLIST` (`startsWith` on a lowercased, `.trim()`ed string)
87
+ * that failed open: the WHATWG `URL` parser strips TAB/LF/CR from ANYWHERE in the input and folds a
88
+ * leading backslash to `/` for `http(s)`, so `"java\tscript:alert(1)"`, `" javascript:alert(1)"`,
89
+ * `"file:///etc/passwd"`, `"blob:…"`, `"about:blank"`, `"//evil.example"` (protocol-relative), and
90
+ * `"/\evil.example"` all resolved to a dangerous or off-origin target while never matching any
91
+ * `startsWith` prefix in the old list. An allowlist closes the whole bypass class at once (case,
92
+ * embedded control characters, and scheme are all irrelevant to an allowlist the same way) rather
93
+ * than needing a new prefix bolted on per newly-discovered shape.
94
+ *
95
+ * `validateTarget`'s caller REJECTS on a `false` result (`MenuValidationError`, surfaced as HTTP 400)
96
+ * rather than silently coercing the way `safeHref`'s render-time callers degrade to `"#"` — a
97
+ * write-time author-facing path should say so, not quietly rewrite the input. Verified against the
98
+ * workspace's stored menu data (`content.db`, `content.seed.db`) before this change: every existing
99
+ * `url`-kind href already starts with `#` or `/`, so this tightening rejects nothing that exists
100
+ * today — it governs `createMenu` too, so it also reaches the Jini MCP agent-tool path, not just
101
+ * hrefs written through Tovu's admin editor.
102
+ *
103
+ * @param rawHref - The href to check, already confirmed non-empty by `validateTarget`. Any string is
104
+ * otherwise a valid input — this function performs no other precondition checks.
105
+ * @returns `true` when `rawHref` passes the allowlist, `false` otherwise.
106
+ * @complexity O(1) — a handful of string checks plus one `URL` construction on the `/…` branch.
107
+ */
108
+ export function isAllowedHref(rawHref) {
109
+ const href = rawHref.trim();
110
+ if (href.startsWith("#"))
111
+ return true;
112
+ if (/^https?:\/\//i.test(href) || /^mailto:/i.test(href))
113
+ return true;
114
+ if (href.startsWith("/")) {
115
+ try {
116
+ return new URL(href, SAFE_HREF_RESOLUTION_BASE).origin === SAFE_HREF_RESOLUTION_ORIGIN;
117
+ }
118
+ catch {
119
+ return false;
120
+ }
121
+ }
122
+ return false;
123
+ }
124
+ /**
125
+ * Human-readable description of {@link isAllowedHref}'s accepted shapes — the single source of truth
126
+ * for both `validateTarget`'s rejection message below and `agent-tools.ts`'s published JSON Schema
127
+ * `href` description, so an author-facing 400 and an LLM-facing tool description can never drift out
128
+ * of sync with each other the way three independent copies of the URL-checking LOGIC itself did
129
+ * before this change.
130
+ */
131
+ export const ALLOWED_HREF_SHAPES_DESCRIPTION = "an in-page anchor ('#...'), a same-origin relative path ('/...'), an 'http://' or 'https://' URL, or a 'mailto:' address";
59
132
  /**
60
133
  * Validates a candidate item tree and returns a defensively-cloned copy.
61
134
  *
62
135
  * Checks (total/bounded validation + target integrity):
136
+ * - `items` (and every `children` array) is actually an array, and every node
137
+ * in it is a non-null object — untrusted JSON bodies can carry `null`
138
+ * entries or a non-array `items`/`children`, which must reject as a
139
+ * `MenuValidationError`, not throw an uncaught `TypeError`;
63
140
  * - every node has a non-empty `id`, unique across the whole tree (id
64
141
  * stability is a caller responsibility — see `updateMenuTree` doc for the
65
142
  * simplification this build accepts);
66
143
  * - nesting depth stays within `maxDepth`;
67
144
  * - total item count stays within `maxItemCount`;
68
- * - every target's `kind` is one of the four v1 kinds — reserved kinds
69
- * (`dynamicQuery`, `content`) are rejected with a clear "not yet" error
70
- * rather than silently accepted;
71
- * - `url` targets reject a scheme denylist (`javascript:`, `data:`, `vbscript:`).
145
+ * - every node has a `target` object (a missing/`null` `target` rejects
146
+ * rather than crashing) whose `kind` is one of the four v1 kinds — reserved
147
+ * kinds (`dynamicQuery`, `content`) are rejected with a clear "not yet"
148
+ * error rather than silently accepted;
149
+ * - `url` targets require a non-empty string `href` and pass an origin/scheme
150
+ * ALLOWLIST (`#…`, same-origin `/…`, `http(s)://`, `mailto:` — see
151
+ * {@link isAllowedHref}), not a scheme denylist.
72
152
  *
73
153
  * @complexity O(n) over total node count for one full walk; no per-node
74
154
  * backtracking. Space is O(n) for the cloned tree plus O(n) for the id set.
@@ -80,6 +160,9 @@ export function validateAndCloneTree(items, limits = {}) {
80
160
  const seenIds = new Set();
81
161
  let count = 0;
82
162
  function walk(nodes, depth) {
163
+ if (!Array.isArray(nodes)) {
164
+ throw new MenuValidationError("menu items must be an array");
165
+ }
83
166
  if (depth > maxDepth) {
84
167
  throw new MenuValidationError(`menu tree exceeds max nesting depth of ${maxDepth}`);
85
168
  }
@@ -88,6 +171,9 @@ export function validateAndCloneTree(items, limits = {}) {
88
171
  if (count > maxItemCount) {
89
172
  throw new MenuValidationError(`menu tree exceeds max item count of ${maxItemCount}`);
90
173
  }
174
+ if (!node || typeof node !== "object") {
175
+ throw new MenuValidationError("every menu item must be an object");
176
+ }
91
177
  if (!node.id || !node.id.trim()) {
92
178
  throw new MenuValidationError("every menu item requires a non-empty id");
93
179
  }
@@ -102,7 +188,16 @@ export function validateAndCloneTree(items, limits = {}) {
102
188
  }
103
189
  return walk(items, 1);
104
190
  }
191
+ /**
192
+ * Guards every field this function reads off an untrusted `target` before reading it — a `target`
193
+ * arriving `null`/`undefined` (missing from the request body) or a `url` target missing `href`
194
+ * previously threw an uncaught `TypeError` here, which the host's route handler had no case for and
195
+ * surfaced as a 500 instead of the intended 400 `MenuValidationError` path.
196
+ */
105
197
  function validateTarget(target) {
198
+ if (!target || typeof target !== "object") {
199
+ throw new MenuValidationError("every menu item requires a target");
200
+ }
106
201
  const kind = target.kind;
107
202
  if (RESERVED_TARGET_KINDS.has(kind)) {
108
203
  throw new MenuValidationError(`target kind '${kind}' is a reserved seam and is not supported yet`);
@@ -111,9 +206,12 @@ function validateTarget(target) {
111
206
  throw new MenuValidationError(`unknown target kind '${kind}'`);
112
207
  }
113
208
  if (kind === "url") {
114
- const href = target.href.trim().toLowerCase();
115
- if (URL_SCHEME_DENYLIST.some((scheme) => href.startsWith(scheme))) {
116
- throw new MenuValidationError(`url target uses a disallowed scheme: '${target.href}'`);
209
+ const rawHref = target.href;
210
+ if (typeof rawHref !== "string" || !rawHref.trim()) {
211
+ throw new MenuValidationError("url target requires a non-empty href");
212
+ }
213
+ if (!isAllowedHref(rawHref)) {
214
+ throw new MenuValidationError(`url target href is not allowed: '${rawHref}'. Accepted shapes: ${ALLOWED_HREF_SHAPES_DESCRIPTION}.`);
117
215
  }
118
216
  }
119
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"menu-service.js","sourceRoot":"","sources":["../../src/navigation/menu-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"menu-service.js","sourceRoot":"","sources":["../../src/navigation/menu-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jini-ai/cms",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "Content-model capability for Jini-hosted products: framework-free contracts, ports, and domain services in `/core` and per-domain subpaths; Node-bound persistence adapters in `/server`.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {