@jini-ai/cms 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +84 -0
  3. package/dist/content-types/agent-tools.d.ts +65 -0
  4. package/dist/content-types/agent-tools.d.ts.map +1 -0
  5. package/dist/content-types/agent-tools.js +172 -0
  6. package/dist/content-types/agent-tools.js.map +1 -0
  7. package/dist/content-types/cleanup.d.ts +118 -0
  8. package/dist/content-types/cleanup.d.ts.map +1 -0
  9. package/dist/content-types/cleanup.js +65 -0
  10. package/dist/content-types/cleanup.js.map +1 -0
  11. package/dist/content-types/errors.d.ts +90 -0
  12. package/dist/content-types/errors.d.ts.map +1 -0
  13. package/dist/content-types/errors.js +119 -0
  14. package/dist/content-types/errors.js.map +1 -0
  15. package/dist/content-types/field-defs.d.ts +25 -0
  16. package/dist/content-types/field-defs.d.ts.map +1 -0
  17. package/dist/content-types/field-defs.js +155 -0
  18. package/dist/content-types/field-defs.js.map +1 -0
  19. package/dist/content-types/index-provisioning.d.ts +94 -0
  20. package/dist/content-types/index-provisioning.d.ts.map +1 -0
  21. package/dist/content-types/index-provisioning.js +133 -0
  22. package/dist/content-types/index-provisioning.js.map +1 -0
  23. package/dist/content-types/index.d.ts +63 -0
  24. package/dist/content-types/index.d.ts.map +1 -0
  25. package/dist/content-types/index.js +36 -0
  26. package/dist/content-types/index.js.map +1 -0
  27. package/dist/content-types/lifecycle-dispatch.d.ts +38 -0
  28. package/dist/content-types/lifecycle-dispatch.d.ts.map +1 -0
  29. package/dist/content-types/lifecycle-dispatch.js +28 -0
  30. package/dist/content-types/lifecycle-dispatch.js.map +1 -0
  31. package/dist/content-types/lifecycle.d.ts +104 -0
  32. package/dist/content-types/lifecycle.d.ts.map +1 -0
  33. package/dist/content-types/lifecycle.js +143 -0
  34. package/dist/content-types/lifecycle.js.map +1 -0
  35. package/dist/content-types/list.d.ts +44 -0
  36. package/dist/content-types/list.d.ts.map +1 -0
  37. package/dist/content-types/list.js +13 -0
  38. package/dist/content-types/list.js.map +1 -0
  39. package/dist/content-types/repo.memory.d.ts +72 -0
  40. package/dist/content-types/repo.memory.d.ts.map +1 -0
  41. package/dist/content-types/repo.memory.js +71 -0
  42. package/dist/content-types/repo.memory.js.map +1 -0
  43. package/dist/content-types/tool-registrations.d.ts +65 -0
  44. package/dist/content-types/tool-registrations.d.ts.map +1 -0
  45. package/dist/content-types/tool-registrations.js +180 -0
  46. package/dist/content-types/tool-registrations.js.map +1 -0
  47. package/dist/content-types/types.d.ts +78 -0
  48. package/dist/content-types/types.d.ts.map +1 -0
  49. package/dist/content-types/types.js +32 -0
  50. package/dist/content-types/types.js.map +1 -0
  51. package/dist/content-types/write-service.d.ts +141 -0
  52. package/dist/content-types/write-service.d.ts.map +1 -0
  53. package/dist/content-types/write-service.js +180 -0
  54. package/dist/content-types/write-service.js.map +1 -0
  55. package/dist/core/commands/change-set.d.ts +98 -0
  56. package/dist/core/commands/change-set.d.ts.map +1 -0
  57. package/dist/core/commands/change-set.js +2 -0
  58. package/dist/core/commands/change-set.js.map +1 -0
  59. package/dist/core/commands/command.d.ts +168 -0
  60. package/dist/core/commands/command.d.ts.map +1 -0
  61. package/dist/core/commands/command.js +173 -0
  62. package/dist/core/commands/command.js.map +1 -0
  63. package/dist/core/index.d.ts +45 -0
  64. package/dist/core/index.d.ts.map +1 -0
  65. package/dist/core/index.js +43 -0
  66. package/dist/core/index.js.map +1 -0
  67. package/dist/core/ports.d.ts +139 -0
  68. package/dist/core/ports.d.ts.map +1 -0
  69. package/dist/core/ports.js +2 -0
  70. package/dist/core/ports.js.map +1 -0
  71. package/dist/core/tools/registration-kit.d.ts +308 -0
  72. package/dist/core/tools/registration-kit.d.ts.map +1 -0
  73. package/dist/core/tools/registration-kit.js +381 -0
  74. package/dist/core/tools/registration-kit.js.map +1 -0
  75. package/dist/entries/agent-tools.d.ts +78 -0
  76. package/dist/entries/agent-tools.d.ts.map +1 -0
  77. package/dist/entries/agent-tools.js +158 -0
  78. package/dist/entries/agent-tools.js.map +1 -0
  79. package/dist/entries/errors.d.ts +43 -0
  80. package/dist/entries/errors.d.ts.map +1 -0
  81. package/dist/entries/errors.js +59 -0
  82. package/dist/entries/errors.js.map +1 -0
  83. package/dist/entries/field-validation.d.ts +70 -0
  84. package/dist/entries/field-validation.d.ts.map +1 -0
  85. package/dist/entries/field-validation.js +87 -0
  86. package/dist/entries/field-validation.js.map +1 -0
  87. package/dist/entries/index.d.ts +55 -0
  88. package/dist/entries/index.d.ts.map +1 -0
  89. package/dist/entries/index.js +38 -0
  90. package/dist/entries/index.js.map +1 -0
  91. package/dist/entries/lifecycle-dispatch.d.ts +15 -0
  92. package/dist/entries/lifecycle-dispatch.d.ts.map +1 -0
  93. package/dist/entries/lifecycle-dispatch.js +16 -0
  94. package/dist/entries/lifecycle-dispatch.js.map +1 -0
  95. package/dist/entries/list.d.ts +47 -0
  96. package/dist/entries/list.d.ts.map +1 -0
  97. package/dist/entries/list.js +12 -0
  98. package/dist/entries/list.js.map +1 -0
  99. package/dist/entries/repo.memory.d.ts +64 -0
  100. package/dist/entries/repo.memory.d.ts.map +1 -0
  101. package/dist/entries/repo.memory.js +73 -0
  102. package/dist/entries/repo.memory.js.map +1 -0
  103. package/dist/entries/tool-registrations.d.ts +52 -0
  104. package/dist/entries/tool-registrations.d.ts.map +1 -0
  105. package/dist/entries/tool-registrations.js +141 -0
  106. package/dist/entries/tool-registrations.js.map +1 -0
  107. package/dist/entries/types.d.ts +55 -0
  108. package/dist/entries/types.d.ts.map +1 -0
  109. package/dist/entries/types.js +2 -0
  110. package/dist/entries/types.js.map +1 -0
  111. package/dist/entries/write-service.d.ts +202 -0
  112. package/dist/entries/write-service.d.ts.map +1 -0
  113. package/dist/entries/write-service.js +204 -0
  114. package/dist/entries/write-service.js.map +1 -0
  115. package/dist/identity/admin-crud-service.d.ts +252 -0
  116. package/dist/identity/admin-crud-service.d.ts.map +1 -0
  117. package/dist/identity/admin-crud-service.js +437 -0
  118. package/dist/identity/admin-crud-service.js.map +1 -0
  119. package/dist/identity/agent-tool-input.d.ts +58 -0
  120. package/dist/identity/agent-tool-input.d.ts.map +1 -0
  121. package/dist/identity/agent-tool-input.js +126 -0
  122. package/dist/identity/agent-tool-input.js.map +1 -0
  123. package/dist/identity/agent-tools.d.ts +101 -0
  124. package/dist/identity/agent-tools.d.ts.map +1 -0
  125. package/dist/identity/agent-tools.js +290 -0
  126. package/dist/identity/agent-tools.js.map +1 -0
  127. package/dist/identity/auth-service.d.ts +87 -0
  128. package/dist/identity/auth-service.d.ts.map +1 -0
  129. package/dist/identity/auth-service.js +141 -0
  130. package/dist/identity/auth-service.js.map +1 -0
  131. package/dist/identity/authorize.d.ts +90 -0
  132. package/dist/identity/authorize.d.ts.map +1 -0
  133. package/dist/identity/authorize.js +94 -0
  134. package/dist/identity/authorize.js.map +1 -0
  135. package/dist/identity/grant-service.d.ts +198 -0
  136. package/dist/identity/grant-service.d.ts.map +1 -0
  137. package/dist/identity/grant-service.js +361 -0
  138. package/dist/identity/grant-service.js.map +1 -0
  139. package/dist/identity/hasher.d.ts +39 -0
  140. package/dist/identity/hasher.d.ts.map +1 -0
  141. package/dist/identity/hasher.js +39 -0
  142. package/dist/identity/hasher.js.map +1 -0
  143. package/dist/identity/index.d.ts +59 -0
  144. package/dist/identity/index.d.ts.map +1 -0
  145. package/dist/identity/index.js +51 -0
  146. package/dist/identity/index.js.map +1 -0
  147. package/dist/identity/password-policy.d.ts +58 -0
  148. package/dist/identity/password-policy.d.ts.map +1 -0
  149. package/dist/identity/password-policy.js +67 -0
  150. package/dist/identity/password-policy.js.map +1 -0
  151. package/dist/identity/permission-migrations.d.ts +86 -0
  152. package/dist/identity/permission-migrations.d.ts.map +1 -0
  153. package/dist/identity/permission-migrations.js +67 -0
  154. package/dist/identity/permission-migrations.js.map +1 -0
  155. package/dist/identity/permissions.d.ts +35 -0
  156. package/dist/identity/permissions.d.ts.map +1 -0
  157. package/dist/identity/permissions.js +603 -0
  158. package/dist/identity/permissions.js.map +1 -0
  159. package/dist/identity/ports.d.ts +201 -0
  160. package/dist/identity/ports.d.ts.map +1 -0
  161. package/dist/identity/ports.js +2 -0
  162. package/dist/identity/ports.js.map +1 -0
  163. package/dist/identity/repo.memory.d.ts +164 -0
  164. package/dist/identity/repo.memory.d.ts.map +1 -0
  165. package/dist/identity/repo.memory.js +224 -0
  166. package/dist/identity/repo.memory.js.map +1 -0
  167. package/dist/identity/seed.d.ts +42 -0
  168. package/dist/identity/seed.d.ts.map +1 -0
  169. package/dist/identity/seed.js +277 -0
  170. package/dist/identity/seed.js.map +1 -0
  171. package/dist/identity/tool-registrations.d.ts +50 -0
  172. package/dist/identity/tool-registrations.d.ts.map +1 -0
  173. package/dist/identity/tool-registrations.js +419 -0
  174. package/dist/identity/tool-registrations.js.map +1 -0
  175. package/dist/identity/types.d.ts +185 -0
  176. package/dist/identity/types.d.ts.map +1 -0
  177. package/dist/identity/types.js +64 -0
  178. package/dist/identity/types.js.map +1 -0
  179. package/dist/identity/username.d.ts +12 -0
  180. package/dist/identity/username.d.ts.map +1 -0
  181. package/dist/identity/username.js +14 -0
  182. package/dist/identity/username.js.map +1 -0
  183. package/dist/media/agent-tools.d.ts +66 -0
  184. package/dist/media/agent-tools.d.ts.map +1 -0
  185. package/dist/media/agent-tools.js +131 -0
  186. package/dist/media/agent-tools.js.map +1 -0
  187. package/dist/media/blob-gc-lock.d.ts +37 -0
  188. package/dist/media/blob-gc-lock.d.ts.map +1 -0
  189. package/dist/media/blob-gc-lock.js +55 -0
  190. package/dist/media/blob-gc-lock.js.map +1 -0
  191. package/dist/media/blob-gc.d.ts +246 -0
  192. package/dist/media/blob-gc.d.ts.map +1 -0
  193. package/dist/media/blob-gc.js +254 -0
  194. package/dist/media/blob-gc.js.map +1 -0
  195. package/dist/media/blob-key.d.ts +28 -0
  196. package/dist/media/blob-key.d.ts.map +1 -0
  197. package/dist/media/blob-key.js +11 -0
  198. package/dist/media/blob-key.js.map +1 -0
  199. package/dist/media/blob-store.fs.d.ts +23 -0
  200. package/dist/media/blob-store.fs.d.ts.map +1 -0
  201. package/dist/media/blob-store.fs.js +48 -0
  202. package/dist/media/blob-store.fs.js.map +1 -0
  203. package/dist/media/blob-store.memory.d.ts +22 -0
  204. package/dist/media/blob-store.memory.d.ts.map +1 -0
  205. package/dist/media/blob-store.memory.js +23 -0
  206. package/dist/media/blob-store.memory.js.map +1 -0
  207. package/dist/media/content-type-sniffer.d.ts +49 -0
  208. package/dist/media/content-type-sniffer.d.ts.map +1 -0
  209. package/dist/media/content-type-sniffer.js +141 -0
  210. package/dist/media/content-type-sniffer.js.map +1 -0
  211. package/dist/media/image-transformer.d.ts +45 -0
  212. package/dist/media/image-transformer.d.ts.map +1 -0
  213. package/dist/media/image-transformer.js +23 -0
  214. package/dist/media/image-transformer.js.map +1 -0
  215. package/dist/media/image-transformer.sharp.d.ts +26 -0
  216. package/dist/media/image-transformer.sharp.d.ts.map +1 -0
  217. package/dist/media/image-transformer.sharp.js +91 -0
  218. package/dist/media/image-transformer.sharp.js.map +1 -0
  219. package/dist/media/index.d.ts +43 -0
  220. package/dist/media/index.d.ts.map +1 -0
  221. package/dist/media/index.js +31 -0
  222. package/dist/media/index.js.map +1 -0
  223. package/dist/media/media-service.d.ts +244 -0
  224. package/dist/media/media-service.d.ts.map +1 -0
  225. package/dist/media/media-service.js +345 -0
  226. package/dist/media/media-service.js.map +1 -0
  227. package/dist/media/ports.d.ts +142 -0
  228. package/dist/media/ports.d.ts.map +1 -0
  229. package/dist/media/ports.js +2 -0
  230. package/dist/media/ports.js.map +1 -0
  231. package/dist/media/rendition-service.d.ts +66 -0
  232. package/dist/media/rendition-service.d.ts.map +1 -0
  233. package/dist/media/rendition-service.js +135 -0
  234. package/dist/media/rendition-service.js.map +1 -0
  235. package/dist/media/repo.memory.d.ts +107 -0
  236. package/dist/media/repo.memory.d.ts.map +1 -0
  237. package/dist/media/repo.memory.js +131 -0
  238. package/dist/media/repo.memory.js.map +1 -0
  239. package/dist/media/tool-registrations.d.ts +42 -0
  240. package/dist/media/tool-registrations.d.ts.map +1 -0
  241. package/dist/media/tool-registrations.js +121 -0
  242. package/dist/media/tool-registrations.js.map +1 -0
  243. package/dist/media/transform-lock.d.ts +36 -0
  244. package/dist/media/transform-lock.d.ts.map +1 -0
  245. package/dist/media/transform-lock.js +50 -0
  246. package/dist/media/transform-lock.js.map +1 -0
  247. package/dist/media/transform-registry.d.ts +103 -0
  248. package/dist/media/transform-registry.d.ts.map +1 -0
  249. package/dist/media/transform-registry.js +87 -0
  250. package/dist/media/transform-registry.js.map +1 -0
  251. package/dist/media/transform-types.d.ts +82 -0
  252. package/dist/media/transform-types.d.ts.map +1 -0
  253. package/dist/media/transform-types.js +47 -0
  254. package/dist/media/transform-types.js.map +1 -0
  255. package/dist/media/types.d.ts +150 -0
  256. package/dist/media/types.d.ts.map +1 -0
  257. package/dist/media/types.js +26 -0
  258. package/dist/media/types.js.map +1 -0
  259. package/dist/navigation/agent-tools.d.ts +90 -0
  260. package/dist/navigation/agent-tools.d.ts.map +1 -0
  261. package/dist/navigation/agent-tools.js +225 -0
  262. package/dist/navigation/agent-tools.js.map +1 -0
  263. package/dist/navigation/contracts.d.ts +98 -0
  264. package/dist/navigation/contracts.d.ts.map +1 -0
  265. package/dist/navigation/contracts.js +70 -0
  266. package/dist/navigation/contracts.js.map +1 -0
  267. package/dist/navigation/index.d.ts +39 -0
  268. package/dist/navigation/index.d.ts.map +1 -0
  269. package/dist/navigation/index.js +30 -0
  270. package/dist/navigation/index.js.map +1 -0
  271. package/dist/navigation/menu-service.d.ts +256 -0
  272. package/dist/navigation/menu-service.d.ts.map +1 -0
  273. package/dist/navigation/menu-service.js +382 -0
  274. package/dist/navigation/menu-service.js.map +1 -0
  275. package/dist/navigation/ports.d.ts +147 -0
  276. package/dist/navigation/ports.d.ts.map +1 -0
  277. package/dist/navigation/ports.js +2 -0
  278. package/dist/navigation/ports.js.map +1 -0
  279. package/dist/navigation/read-model.d.ts +11 -0
  280. package/dist/navigation/read-model.d.ts.map +1 -0
  281. package/dist/navigation/read-model.js +27 -0
  282. package/dist/navigation/read-model.js.map +1 -0
  283. package/dist/navigation/reconcile.d.ts +57 -0
  284. package/dist/navigation/reconcile.d.ts.map +1 -0
  285. package/dist/navigation/reconcile.js +33 -0
  286. package/dist/navigation/reconcile.js.map +1 -0
  287. package/dist/navigation/repo.memory.d.ts +137 -0
  288. package/dist/navigation/repo.memory.d.ts.map +1 -0
  289. package/dist/navigation/repo.memory.js +95 -0
  290. package/dist/navigation/repo.memory.js.map +1 -0
  291. package/dist/navigation/resolver.d.ts +110 -0
  292. package/dist/navigation/resolver.d.ts.map +1 -0
  293. package/dist/navigation/resolver.js +131 -0
  294. package/dist/navigation/resolver.js.map +1 -0
  295. package/dist/navigation/tool-registrations.d.ts +43 -0
  296. package/dist/navigation/tool-registrations.d.ts.map +1 -0
  297. package/dist/navigation/tool-registrations.js +126 -0
  298. package/dist/navigation/tool-registrations.js.map +1 -0
  299. package/dist/navigation/types.d.ts +207 -0
  300. package/dist/navigation/types.d.ts.map +1 -0
  301. package/dist/navigation/types.js +14 -0
  302. package/dist/navigation/types.js.map +1 -0
  303. package/dist/presentation/index.d.ts +15 -0
  304. package/dist/presentation/index.d.ts.map +1 -0
  305. package/dist/presentation/index.js +15 -0
  306. package/dist/presentation/index.js.map +1 -0
  307. package/dist/presentation/presentation.d.ts +72 -0
  308. package/dist/presentation/presentation.d.ts.map +1 -0
  309. package/dist/presentation/presentation.js +51 -0
  310. package/dist/presentation/presentation.js.map +1 -0
  311. package/dist/presentation/repo.memory.d.ts +9 -0
  312. package/dist/presentation/repo.memory.d.ts.map +1 -0
  313. package/dist/presentation/repo.memory.js +21 -0
  314. package/dist/presentation/repo.memory.js.map +1 -0
  315. package/dist/server/index.d.ts +28 -0
  316. package/dist/server/index.d.ts.map +1 -0
  317. package/dist/server/index.js +28 -0
  318. package/dist/server/index.js.map +1 -0
  319. package/dist/settings/agent-tools.d.ts +83 -0
  320. package/dist/settings/agent-tools.d.ts.map +1 -0
  321. package/dist/settings/agent-tools.js +200 -0
  322. package/dist/settings/agent-tools.js.map +1 -0
  323. package/dist/settings/agent-writable-preferences.d.ts +67 -0
  324. package/dist/settings/agent-writable-preferences.d.ts.map +1 -0
  325. package/dist/settings/agent-writable-preferences.js +144 -0
  326. package/dist/settings/agent-writable-preferences.js.map +1 -0
  327. package/dist/settings/change-feed.d.ts +74 -0
  328. package/dist/settings/change-feed.d.ts.map +1 -0
  329. package/dist/settings/change-feed.js +61 -0
  330. package/dist/settings/change-feed.js.map +1 -0
  331. package/dist/settings/definitions-dispatch.d.ts +51 -0
  332. package/dist/settings/definitions-dispatch.d.ts.map +1 -0
  333. package/dist/settings/definitions-dispatch.js +86 -0
  334. package/dist/settings/definitions-dispatch.js.map +1 -0
  335. package/dist/settings/dictionaries/index.d.ts +45 -0
  336. package/dist/settings/dictionaries/index.d.ts.map +1 -0
  337. package/dist/settings/dictionaries/index.js +69 -0
  338. package/dist/settings/dictionaries/index.js.map +1 -0
  339. package/dist/settings/dictionaries/settings-dialog.ar.d.ts +3 -0
  340. package/dist/settings/dictionaries/settings-dialog.ar.d.ts.map +1 -0
  341. package/dist/settings/dictionaries/settings-dialog.ar.js +28 -0
  342. package/dist/settings/dictionaries/settings-dialog.ar.js.map +1 -0
  343. package/dist/settings/dictionaries/settings-dialog.bn.d.ts +3 -0
  344. package/dist/settings/dictionaries/settings-dialog.bn.d.ts.map +1 -0
  345. package/dist/settings/dictionaries/settings-dialog.bn.js +28 -0
  346. package/dist/settings/dictionaries/settings-dialog.bn.js.map +1 -0
  347. package/dist/settings/dictionaries/settings-dialog.de.d.ts +3 -0
  348. package/dist/settings/dictionaries/settings-dialog.de.d.ts.map +1 -0
  349. package/dist/settings/dictionaries/settings-dialog.de.js +28 -0
  350. package/dist/settings/dictionaries/settings-dialog.de.js.map +1 -0
  351. package/dist/settings/dictionaries/settings-dialog.es.d.ts +3 -0
  352. package/dist/settings/dictionaries/settings-dialog.es.d.ts.map +1 -0
  353. package/dist/settings/dictionaries/settings-dialog.es.js +28 -0
  354. package/dist/settings/dictionaries/settings-dialog.es.js.map +1 -0
  355. package/dist/settings/dictionaries/settings-dialog.fa.d.ts +3 -0
  356. package/dist/settings/dictionaries/settings-dialog.fa.d.ts.map +1 -0
  357. package/dist/settings/dictionaries/settings-dialog.fa.js +28 -0
  358. package/dist/settings/dictionaries/settings-dialog.fa.js.map +1 -0
  359. package/dist/settings/dictionaries/settings-dialog.fr.d.ts +3 -0
  360. package/dist/settings/dictionaries/settings-dialog.fr.d.ts.map +1 -0
  361. package/dist/settings/dictionaries/settings-dialog.fr.js +28 -0
  362. package/dist/settings/dictionaries/settings-dialog.fr.js.map +1 -0
  363. package/dist/settings/dictionaries/settings-dialog.hi.d.ts +3 -0
  364. package/dist/settings/dictionaries/settings-dialog.hi.d.ts.map +1 -0
  365. package/dist/settings/dictionaries/settings-dialog.hi.js +28 -0
  366. package/dist/settings/dictionaries/settings-dialog.hi.js.map +1 -0
  367. package/dist/settings/dictionaries/settings-dialog.hu.d.ts +3 -0
  368. package/dist/settings/dictionaries/settings-dialog.hu.d.ts.map +1 -0
  369. package/dist/settings/dictionaries/settings-dialog.hu.js +28 -0
  370. package/dist/settings/dictionaries/settings-dialog.hu.js.map +1 -0
  371. package/dist/settings/dictionaries/settings-dialog.id.d.ts +3 -0
  372. package/dist/settings/dictionaries/settings-dialog.id.d.ts.map +1 -0
  373. package/dist/settings/dictionaries/settings-dialog.id.js +28 -0
  374. package/dist/settings/dictionaries/settings-dialog.id.js.map +1 -0
  375. package/dist/settings/dictionaries/settings-dialog.it.d.ts +3 -0
  376. package/dist/settings/dictionaries/settings-dialog.it.d.ts.map +1 -0
  377. package/dist/settings/dictionaries/settings-dialog.it.js +28 -0
  378. package/dist/settings/dictionaries/settings-dialog.it.js.map +1 -0
  379. package/dist/settings/dictionaries/settings-dialog.ja.d.ts +3 -0
  380. package/dist/settings/dictionaries/settings-dialog.ja.d.ts.map +1 -0
  381. package/dist/settings/dictionaries/settings-dialog.ja.js +28 -0
  382. package/dist/settings/dictionaries/settings-dialog.ja.js.map +1 -0
  383. package/dist/settings/dictionaries/settings-dialog.ko.d.ts +3 -0
  384. package/dist/settings/dictionaries/settings-dialog.ko.d.ts.map +1 -0
  385. package/dist/settings/dictionaries/settings-dialog.ko.js +28 -0
  386. package/dist/settings/dictionaries/settings-dialog.ko.js.map +1 -0
  387. package/dist/settings/dictionaries/settings-dialog.pl.d.ts +3 -0
  388. package/dist/settings/dictionaries/settings-dialog.pl.d.ts.map +1 -0
  389. package/dist/settings/dictionaries/settings-dialog.pl.js +28 -0
  390. package/dist/settings/dictionaries/settings-dialog.pl.js.map +1 -0
  391. package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts +3 -0
  392. package/dist/settings/dictionaries/settings-dialog.pt-BR.d.ts.map +1 -0
  393. package/dist/settings/dictionaries/settings-dialog.pt-BR.js +28 -0
  394. package/dist/settings/dictionaries/settings-dialog.pt-BR.js.map +1 -0
  395. package/dist/settings/dictionaries/settings-dialog.ru.d.ts +3 -0
  396. package/dist/settings/dictionaries/settings-dialog.ru.d.ts.map +1 -0
  397. package/dist/settings/dictionaries/settings-dialog.ru.js +28 -0
  398. package/dist/settings/dictionaries/settings-dialog.ru.js.map +1 -0
  399. package/dist/settings/dictionaries/settings-dialog.th.d.ts +3 -0
  400. package/dist/settings/dictionaries/settings-dialog.th.d.ts.map +1 -0
  401. package/dist/settings/dictionaries/settings-dialog.th.js +28 -0
  402. package/dist/settings/dictionaries/settings-dialog.th.js.map +1 -0
  403. package/dist/settings/dictionaries/settings-dialog.tr.d.ts +3 -0
  404. package/dist/settings/dictionaries/settings-dialog.tr.d.ts.map +1 -0
  405. package/dist/settings/dictionaries/settings-dialog.tr.js +28 -0
  406. package/dist/settings/dictionaries/settings-dialog.tr.js.map +1 -0
  407. package/dist/settings/dictionaries/settings-dialog.uk.d.ts +3 -0
  408. package/dist/settings/dictionaries/settings-dialog.uk.d.ts.map +1 -0
  409. package/dist/settings/dictionaries/settings-dialog.uk.js +28 -0
  410. package/dist/settings/dictionaries/settings-dialog.uk.js.map +1 -0
  411. package/dist/settings/dictionaries/settings-dialog.ur.d.ts +3 -0
  412. package/dist/settings/dictionaries/settings-dialog.ur.d.ts.map +1 -0
  413. package/dist/settings/dictionaries/settings-dialog.ur.js +28 -0
  414. package/dist/settings/dictionaries/settings-dialog.ur.js.map +1 -0
  415. package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts +3 -0
  416. package/dist/settings/dictionaries/settings-dialog.zh-CN.d.ts.map +1 -0
  417. package/dist/settings/dictionaries/settings-dialog.zh-CN.js +28 -0
  418. package/dist/settings/dictionaries/settings-dialog.zh-CN.js.map +1 -0
  419. package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts +3 -0
  420. package/dist/settings/dictionaries/settings-dialog.zh-TW.d.ts.map +1 -0
  421. package/dist/settings/dictionaries/settings-dialog.zh-TW.js +28 -0
  422. package/dist/settings/dictionaries/settings-dialog.zh-TW.js.map +1 -0
  423. package/dist/settings/ensure-definitions.d.ts +88 -0
  424. package/dist/settings/ensure-definitions.d.ts.map +1 -0
  425. package/dist/settings/ensure-definitions.js +91 -0
  426. package/dist/settings/ensure-definitions.js.map +1 -0
  427. package/dist/settings/errors.d.ts +36 -0
  428. package/dist/settings/errors.d.ts.map +1 -0
  429. package/dist/settings/errors.js +40 -0
  430. package/dist/settings/errors.js.map +1 -0
  431. package/dist/settings/index.d.ts +37 -0
  432. package/dist/settings/index.d.ts.map +1 -0
  433. package/dist/settings/index.js +36 -0
  434. package/dist/settings/index.js.map +1 -0
  435. package/dist/settings/ports.d.ts +117 -0
  436. package/dist/settings/ports.d.ts.map +1 -0
  437. package/dist/settings/ports.js +2 -0
  438. package/dist/settings/ports.js.map +1 -0
  439. package/dist/settings/purge-service.d.ts +53 -0
  440. package/dist/settings/purge-service.d.ts.map +1 -0
  441. package/dist/settings/purge-service.js +105 -0
  442. package/dist/settings/purge-service.js.map +1 -0
  443. package/dist/settings/repo.memory.d.ts +119 -0
  444. package/dist/settings/repo.memory.d.ts.map +1 -0
  445. package/dist/settings/repo.memory.js +199 -0
  446. package/dist/settings/repo.memory.js.map +1 -0
  447. package/dist/settings/settings.d.ts +124 -0
  448. package/dist/settings/settings.d.ts.map +1 -0
  449. package/dist/settings/settings.js +238 -0
  450. package/dist/settings/settings.js.map +1 -0
  451. package/dist/settings/tool-registrations.d.ts +56 -0
  452. package/dist/settings/tool-registrations.d.ts.map +1 -0
  453. package/dist/settings/tool-registrations.js +240 -0
  454. package/dist/settings/tool-registrations.js.map +1 -0
  455. package/dist/settings/types.d.ts +125 -0
  456. package/dist/settings/types.d.ts.map +1 -0
  457. package/dist/settings/types.js +3 -0
  458. package/dist/settings/types.js.map +1 -0
  459. package/dist/settings/ui-tab-definitions.d.ts +41 -0
  460. package/dist/settings/ui-tab-definitions.d.ts.map +1 -0
  461. package/dist/settings/ui-tab-definitions.js +148 -0
  462. package/dist/settings/ui-tab-definitions.js.map +1 -0
  463. package/dist/settings/write-service.d.ts +314 -0
  464. package/dist/settings/write-service.d.ts.map +1 -0
  465. package/dist/settings/write-service.js +677 -0
  466. package/dist/settings/write-service.js.map +1 -0
  467. package/dist/taxonomy/agent-tools.d.ts +76 -0
  468. package/dist/taxonomy/agent-tools.d.ts.map +1 -0
  469. package/dist/taxonomy/agent-tools.js +178 -0
  470. package/dist/taxonomy/agent-tools.js.map +1 -0
  471. package/dist/taxonomy/content-lookup.d.ts +45 -0
  472. package/dist/taxonomy/content-lookup.d.ts.map +1 -0
  473. package/dist/taxonomy/content-lookup.js +9 -0
  474. package/dist/taxonomy/content-lookup.js.map +1 -0
  475. package/dist/taxonomy/index.d.ts +38 -0
  476. package/dist/taxonomy/index.d.ts.map +1 -0
  477. package/dist/taxonomy/index.js +38 -0
  478. package/dist/taxonomy/index.js.map +1 -0
  479. package/dist/taxonomy/list.d.ts +39 -0
  480. package/dist/taxonomy/list.d.ts.map +1 -0
  481. package/dist/taxonomy/list.js +19 -0
  482. package/dist/taxonomy/list.js.map +1 -0
  483. package/dist/taxonomy/merge-term.d.ts +94 -0
  484. package/dist/taxonomy/merge-term.d.ts.map +1 -0
  485. package/dist/taxonomy/merge-term.js +65 -0
  486. package/dist/taxonomy/merge-term.js.map +1 -0
  487. package/dist/taxonomy/repo.memory.d.ts +160 -0
  488. package/dist/taxonomy/repo.memory.d.ts.map +1 -0
  489. package/dist/taxonomy/repo.memory.js +171 -0
  490. package/dist/taxonomy/repo.memory.js.map +1 -0
  491. package/dist/taxonomy/validation-chain.d.ts +114 -0
  492. package/dist/taxonomy/validation-chain.d.ts.map +1 -0
  493. package/dist/taxonomy/validation-chain.js +152 -0
  494. package/dist/taxonomy/validation-chain.js.map +1 -0
  495. package/dist/taxonomy/write-service.d.ts +387 -0
  496. package/dist/taxonomy/write-service.d.ts.map +1 -0
  497. package/dist/taxonomy/write-service.js +350 -0
  498. package/dist/taxonomy/write-service.js.map +1 -0
  499. package/dist/workspace/agent-tools.d.ts +67 -0
  500. package/dist/workspace/agent-tools.d.ts.map +1 -0
  501. package/dist/workspace/agent-tools.js +103 -0
  502. package/dist/workspace/agent-tools.js.map +1 -0
  503. package/dist/workspace/create.d.ts +116 -0
  504. package/dist/workspace/create.d.ts.map +1 -0
  505. package/dist/workspace/create.js +69 -0
  506. package/dist/workspace/create.js.map +1 -0
  507. package/dist/workspace/delete.d.ts +50 -0
  508. package/dist/workspace/delete.d.ts.map +1 -0
  509. package/dist/workspace/delete.js +24 -0
  510. package/dist/workspace/delete.js.map +1 -0
  511. package/dist/workspace/index.d.ts +27 -0
  512. package/dist/workspace/index.d.ts.map +1 -0
  513. package/dist/workspace/index.js +27 -0
  514. package/dist/workspace/index.js.map +1 -0
  515. package/dist/workspace/repo.memory.d.ts +34 -0
  516. package/dist/workspace/repo.memory.d.ts.map +1 -0
  517. package/dist/workspace/repo.memory.js +50 -0
  518. package/dist/workspace/repo.memory.js.map +1 -0
  519. package/dist/workspace/tool-registrations.d.ts +38 -0
  520. package/dist/workspace/tool-registrations.d.ts.map +1 -0
  521. package/dist/workspace/tool-registrations.js +71 -0
  522. package/dist/workspace/tool-registrations.js.map +1 -0
  523. package/dist/workspace/update.d.ts +52 -0
  524. package/dist/workspace/update.d.ts.map +1 -0
  525. package/dist/workspace/update.js +41 -0
  526. package/dist/workspace/update.js.map +1 -0
  527. package/package.json +149 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @file Typed error surface for the `entries` package.
3
+ *
4
+ * `class X extends Error {}` does NOT give an instance a `.name` of `"X"` on this runtime unless
5
+ * the constructor sets `this.name` explicitly — every class below sets it, matching the
6
+ * `content-types` package's own convention.
7
+ *
8
+ * Architectural role:
9
+ * `features/entries` domain logic. No dependencies.
10
+ */
11
+ export declare class ForbiddenError extends Error {
12
+ constructor(message: string);
13
+ }
14
+ export declare class EntryNotFoundError extends Error {
15
+ constructor(message: string);
16
+ }
17
+ /** REQ-29/AC-29 — the owning content type does not exist, or (INV-01) exists only in a different workspace. */
18
+ export declare class ContentTypeNotFoundError extends Error {
19
+ constructor(message: string);
20
+ }
21
+ /** REQ-10 (create) / REQ-28 (update/publish/unpublish) — the owning content type's status forbids this write. */
22
+ export declare class ContentTypeNotActiveError extends Error {
23
+ constructor(message: string);
24
+ }
25
+ /** AC-21 — a second entry submitted with an identical `(workspaceId, type, slug)`. */
26
+ export declare class EntrySlugConflictError extends Error {
27
+ constructor(message: string);
28
+ }
29
+ export declare class VersionConflictError extends Error {
30
+ constructor(message: string);
31
+ }
32
+ /** REQ-14/15 — `fieldsJson` failed `validateFieldsAgainstSchema` against the owning type's current schema. */
33
+ export declare class EntryFieldValidationError extends Error {
34
+ readonly fieldErrors: Array<{
35
+ field: string;
36
+ reason: string;
37
+ }>;
38
+ constructor(fieldErrors: Array<{
39
+ field: string;
40
+ reason: string;
41
+ }>);
42
+ }
43
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/entries/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,+GAA+G;AAC/G,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,iHAAiH;AACjH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,sFAAsF;AACtF,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,8GAA8G;AAC9G,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;gBAEnD,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAKlE"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @file Typed error surface for the `entries` package.
3
+ *
4
+ * `class X extends Error {}` does NOT give an instance a `.name` of `"X"` on this runtime unless
5
+ * the constructor sets `this.name` explicitly — every class below sets it, matching the
6
+ * `content-types` package's own convention.
7
+ *
8
+ * Architectural role:
9
+ * `features/entries` domain logic. No dependencies.
10
+ */
11
+ export class ForbiddenError extends Error {
12
+ constructor(message) {
13
+ super(message);
14
+ this.name = "ForbiddenError";
15
+ }
16
+ }
17
+ export class EntryNotFoundError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = "ENTRY_NOT_FOUND";
21
+ }
22
+ }
23
+ /** REQ-29/AC-29 — the owning content type does not exist, or (INV-01) exists only in a different workspace. */
24
+ export class ContentTypeNotFoundError extends Error {
25
+ constructor(message) {
26
+ super(message);
27
+ this.name = "CONTENT_TYPE_NOT_FOUND";
28
+ }
29
+ }
30
+ /** REQ-10 (create) / REQ-28 (update/publish/unpublish) — the owning content type's status forbids this write. */
31
+ export class ContentTypeNotActiveError extends Error {
32
+ constructor(message) {
33
+ super(message);
34
+ this.name = "ContentTypeNotActiveError";
35
+ }
36
+ }
37
+ /** AC-21 — a second entry submitted with an identical `(workspaceId, type, slug)`. */
38
+ export class EntrySlugConflictError extends Error {
39
+ constructor(message) {
40
+ super(message);
41
+ this.name = "ENTRY_SLUG_CONFLICT";
42
+ }
43
+ }
44
+ export class VersionConflictError extends Error {
45
+ constructor(message) {
46
+ super(message);
47
+ this.name = "VersionConflictError";
48
+ }
49
+ }
50
+ /** REQ-14/15 — `fieldsJson` failed `validateFieldsAgainstSchema` against the owning type's current schema. */
51
+ export class EntryFieldValidationError extends Error {
52
+ fieldErrors;
53
+ constructor(fieldErrors) {
54
+ super(`fieldsJson failed schema validation: ${fieldErrors.map((e) => `${e.field}: ${e.reason}`).join("; ")}`);
55
+ this.name = "EntryFieldValidationError";
56
+ this.fieldErrors = fieldErrors;
57
+ }
58
+ }
59
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/entries/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,+GAA+G;AAC/G,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,iHAAiH;AACjH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,sFAAsF;AACtF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,8GAA8G;AAC9G,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,WAAW,CAA2C;IAE/D,YAAY,WAAqD;QAC/D,KAAK,CAAC,wCAAwC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9G,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,70 @@
1
+ import type { ContentTypeFieldDef } from "../content-types/types.js";
2
+ /**
3
+ * @file `validateFieldsAgainstSchema`'s envelope-shape-first ordering and
4
+ * `selectVisibleEntryFields`'s orphaned-field read tolerance ("Failure modes",
5
+ * schema drift / dangling fields: "validation is strict on write, tolerant on read").
6
+ *
7
+ * Purpose:
8
+ * The single pure-logic implementation of "does this `fieldsJson` conform to this content type's
9
+ * current schema" — reused identically by `write-service.ts`'s `createEntry`/`updateEntry` and by
10
+ * any future validate-only route, so there is exactly one place this rule can drift.
11
+ * `fieldsJson` must already be wrapped in the `{ ext: { <owner>: {...} } }` namespaced envelope
12
+ * — a flat/unwrapped payload is rejected as a distinct envelope-shape violation
13
+ * BEFORE any per-field check runs, never conflated with a per-field error for a key
14
+ * that happens to share a field's name.
15
+ *
16
+ * Owner namespace (2026-07-21): `validateFieldsAgainstSchema` takes an optional `owner`, defaulting
17
+ * to `"site"` — every caller that omits it keeps the originally-shipped, single-namespace
18
+ * behavior byte-for-byte (same envelope, same error message, same certified test suite).
19
+ * This is the fix for a real, confirmed gap: this module previously hardcoded the literal `site`
20
+ * namespace with no way for a content type to declare its own, contradicting this engine's
21
+ * documented `fields.ext.{owner}.*` promise (first surfaced by a widgets feature, which needs
22
+ * `ext.widget`/`ext.widgets`, not `ext.site`, for data that structurally belongs to a different
23
+ * feature).
24
+ * `selectVisibleEntryFields` is intentionally left untouched — it has no production caller anywhere
25
+ * in this codebase today, so widening it now would be speculative; extend it the same way once a
26
+ * real caller needs a non-`site` read projection.
27
+ *
28
+ * Architectural role:
29
+ * `features/entries` domain logic. Type-only dependency on `features/content-types/types`.
30
+ */
31
+ export interface FieldValidationError {
32
+ field: string;
33
+ reason: string;
34
+ }
35
+ export interface ValidateFieldsResult {
36
+ valid: boolean;
37
+ fieldErrors: FieldValidationError[];
38
+ }
39
+ /**
40
+ * REQ-14/15 — validates a candidate `fieldsJson` payload against a content type's current field
41
+ * schema: envelope shape first (AC-50), then per-key unrecognized-field rejection (AC-22) and
42
+ * kind-conformance (AC-49), then a required-field-missing pass (AC-23).
43
+ *
44
+ * @complexity O(f) in the number of schema fields plus O(k) in the number of submitted keys.
45
+ * @overallScore 100
46
+ */
47
+ export declare function validateFieldsAgainstSchema(required: {
48
+ schema: ContentTypeFieldDef[];
49
+ fieldsJson: unknown;
50
+ /** The `ext` sub-key this content type's fields live under. Defaults to `"site"` — every existing caller keeps identical behavior unless it opts into a different owner namespace. */
51
+ owner?: string | undefined;
52
+ }): ValidateFieldsResult;
53
+ /**
54
+ * Projects an entry's `fieldsJson.ext.site` down to only the keys still present in
55
+ * the content type's CURRENT schema, silently dropping orphaned keys left behind by a prior field
56
+ * removal rather than erroring ("Failure modes": "validation is strict on write, tolerant
57
+ * on read").
58
+ *
59
+ * @complexity O(k) in the number of keys present on the entry's stored fields bag.
60
+ * @overallScore 100
61
+ */
62
+ export declare function selectVisibleEntryFields(required: {
63
+ entry: {
64
+ fieldsJson: unknown;
65
+ };
66
+ contentType: {
67
+ fields: ContentTypeFieldDef[];
68
+ };
69
+ }): Record<string, unknown>;
70
+ //# sourceMappingURL=field-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-validation.d.ts","sourceRoot":"","sources":["../../src/entries/field-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAwB,MAAM,2BAA2B,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AA8BD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE;IACpD,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,sLAAsL;IACtL,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,GAAG,oBAAoB,CAiCvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE;IACjD,KAAK,EAAE;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/B,WAAW,EAAE;QAAE,MAAM,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;CAChD,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAY1B"}
@@ -0,0 +1,87 @@
1
+ function isPlainObject(value) {
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3
+ }
4
+ /**
5
+ * Runtime-conformance check for one field's value against its declared kind. Loose by design
6
+ * (e.g. `datetime` accepts any string) — kind-conformance here is about JS runtime shape, not
7
+ * full ISO-8601/format validation, which is out of this package's scope.
8
+ *
9
+ * @complexity O(1).
10
+ * @overallScore 100
11
+ */
12
+ function conformsToKind(value, kind) {
13
+ switch (kind) {
14
+ case "text":
15
+ case "datetime":
16
+ return typeof value === "string";
17
+ case "integer":
18
+ return typeof value === "number" && Number.isInteger(value);
19
+ case "real":
20
+ return typeof value === "number";
21
+ case "boolean":
22
+ return typeof value === "boolean";
23
+ default:
24
+ return false;
25
+ }
26
+ }
27
+ /**
28
+ * REQ-14/15 — validates a candidate `fieldsJson` payload against a content type's current field
29
+ * schema: envelope shape first (AC-50), then per-key unrecognized-field rejection (AC-22) and
30
+ * kind-conformance (AC-49), then a required-field-missing pass (AC-23).
31
+ *
32
+ * @complexity O(f) in the number of schema fields plus O(k) in the number of submitted keys.
33
+ * @overallScore 100
34
+ */
35
+ export function validateFieldsAgainstSchema(required) {
36
+ const { schema, fieldsJson, owner = "site" } = required;
37
+ const ext = isPlainObject(fieldsJson) ? fieldsJson.ext : undefined;
38
+ const ownerBag = isPlainObject(ext) ? ext[owner] : undefined;
39
+ if (!isPlainObject(fieldsJson) || !isPlainObject(ext) || !isPlainObject(ownerBag)) {
40
+ return {
41
+ valid: false,
42
+ fieldErrors: [{ field: "__envelope__", reason: `fieldsJson must be wrapped in the { ext: { ${owner}: {...} } } envelope shape` }],
43
+ };
44
+ }
45
+ const schemaByName = new Map(schema.map((f) => [f.name, f]));
46
+ const fieldErrors = [];
47
+ for (const [key, value] of Object.entries(ownerBag)) {
48
+ const def = schemaByName.get(key);
49
+ if (!def) {
50
+ fieldErrors.push({ field: key, reason: "unrecognized field: not present in the current content-type schema" });
51
+ continue;
52
+ }
53
+ if (!conformsToKind(value, def.kind)) {
54
+ fieldErrors.push({ field: key, reason: `value does not conform to the declared kind '${def.kind}'` });
55
+ }
56
+ }
57
+ for (const def of schema) {
58
+ if (def.required && !Object.prototype.hasOwnProperty.call(ownerBag, def.name)) {
59
+ fieldErrors.push({ field: def.name, reason: "required field is missing" });
60
+ }
61
+ }
62
+ return { valid: fieldErrors.length === 0, fieldErrors };
63
+ }
64
+ /**
65
+ * Projects an entry's `fieldsJson.ext.site` down to only the keys still present in
66
+ * the content type's CURRENT schema, silently dropping orphaned keys left behind by a prior field
67
+ * removal rather than erroring ("Failure modes": "validation is strict on write, tolerant
68
+ * on read").
69
+ *
70
+ * @complexity O(k) in the number of keys present on the entry's stored fields bag.
71
+ * @overallScore 100
72
+ */
73
+ export function selectVisibleEntryFields(required) {
74
+ const fieldsJson = required.entry.fieldsJson;
75
+ const ext = isPlainObject(fieldsJson) ? fieldsJson.ext : undefined;
76
+ const site = isPlainObject(ext) ? ext.site : undefined;
77
+ const allowedNames = new Set(required.contentType.fields.map((f) => f.name));
78
+ const visible = {};
79
+ if (!isPlainObject(site))
80
+ return visible;
81
+ for (const [key, value] of Object.entries(site)) {
82
+ if (allowedNames.has(key))
83
+ visible[key] = value;
84
+ }
85
+ return visible;
86
+ }
87
+ //# sourceMappingURL=field-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-validation.js","sourceRoot":"","sources":["../../src/entries/field-validation.ts"],"names":[],"mappings":"AA0CA,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,KAAc,EAAE,IAA0B;IAChE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU;YACb,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9D,KAAK,MAAM;YACT,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;QACpC;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAK3C;IACC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC;IAExD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,8CAA8C,KAAK,4BAA4B,EAAE,CAAC;SAClI,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,oEAAoE,EAAE,CAAC,CAAC;YAC/G,SAAS;QACX,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,gDAAgD,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9E,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAGxC;IACC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;IAC7C,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7E,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @file Public surface (barrel) for the `entries` library.
3
+ *
4
+ * A module's public contract is its `index.ts` — deep imports from outside this
5
+ * directory should go through here.
6
+ *
7
+ * `entries` and `content-types` ship as two subpaths rather than one because they are two
8
+ * contracts: an entry's write path needs only a *read-only slice* of its owning content type
9
+ * (`OwningContentType` in `types.ts`), never that type's write authority. The dependency between
10
+ * them is type-only and one-directional, and keeping the entry points separate is what makes that
11
+ * checkable rather than merely intended.
12
+ */
13
+ export type { EntryStatus, EntryFieldsJson, EntryRecord, OwningContentType, ActorIdentityInput, Result, } from "./types.js";
14
+ export type { EntryListPort } from "./list.js";
15
+ export { listEntries } from "./list.js";
16
+ export type { FieldValidationError, ValidateFieldsResult, } from "./field-validation.js";
17
+ export { validateFieldsAgainstSchema, selectVisibleEntryFields } from "./field-validation.js";
18
+ /**
19
+ * These are exported as **values**, not types: callers catch them with `instanceof`. Because this
20
+ * barrel re-exports rather than redeclares, there is exactly one class object per error across
21
+ * every consumer.
22
+ *
23
+ * `ForbiddenError` and `VersionConflictError` are this module's own, deliberately distinct from the
24
+ * same-named classes on `../core/commands/command.js` and on `../content-types/index.js`. That
25
+ * separation is inherited from the source this was ported from; a consumer catching across the
26
+ * boundary must catch the one it actually called into.
27
+ */
28
+ export { ForbiddenError, EntryNotFoundError, ContentTypeNotFoundError, ContentTypeNotActiveError, EntrySlugConflictError, VersionConflictError, EntryFieldValidationError, } from "./errors.js";
29
+ export type { EntryLifecycleOp, EntryLifecycleHandler } from "./lifecycle-dispatch.js";
30
+ export { ENTRY_LIFECYCLE_OP_NAMES, ENTRY_LIFECYCLE_OPS, parseEntryLifecycleOp, } from "./lifecycle-dispatch.js";
31
+ export type { AuthorizeFn, EntryRevisionInput, EntryRepoPort, ContentTypeLookupPort, OutboxPort, WatermarkPort, CreateEntryRequired, UpdateEntryRequired, PublishUnpublishEntryRequired, } from "./write-service.js";
32
+ export { createEntry, updateEntry, publishEntry, unpublishEntry } from "./write-service.js";
33
+ /**
34
+ * The in-memory repository. Exported for the same reason `navigation` exports its own: a host's
35
+ * concrete adapter implements the port directly, and the in-memory implementation is the reference
36
+ * a consumer tests against before it has one.
37
+ */
38
+ export { InMemoryEntryRepo, toEntryOutbox } from "./repo.memory.js";
39
+ /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
40
+ export { entriesAgentToolCatalog, type AgentToolDefinition as EntriesAgentToolDefinition, type AgentToolSideEffect as EntriesAgentToolSideEffect, } from "./agent-tools.js";
41
+ /**
42
+ * The agent-tool wiring for this domain.
43
+ *
44
+ * `EntriesToolDeps` is declared structurally rather than derived from any host's request-scoped
45
+ * dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
46
+ * the shape is the contract, so no host type needs to be named here.
47
+ */
48
+ export { buildEntriesRegistrations, entriesDerivedRisk, type EntriesToolDeps, } from "./tool-registrations.js";
49
+ /**
50
+ * There is no SQLite adapter export here, deliberately. A concrete `EntryRepoPort` over a specific
51
+ * database handle would put one host's persistence choice on this library's public contract and
52
+ * drag that host's schema into every consumer's dependency closure. Hosts compose their own; this
53
+ * entry point exports the ports they compose against.
54
+ */
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entries/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,YAAY,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,GACP,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,YAAY,EACV,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAE9F;;;;;;;;;GASG;AACH,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEpE,sGAAsG;AACtG,OAAO,EACL,uBAAuB,EACvB,KAAK,mBAAmB,IAAI,0BAA0B,EACtD,KAAK,mBAAmB,IAAI,0BAA0B,GACvD,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG"}
@@ -0,0 +1,38 @@
1
+ export { listEntries } from "./list.js";
2
+ export { validateFieldsAgainstSchema, selectVisibleEntryFields } from "./field-validation.js";
3
+ /**
4
+ * These are exported as **values**, not types: callers catch them with `instanceof`. Because this
5
+ * barrel re-exports rather than redeclares, there is exactly one class object per error across
6
+ * every consumer.
7
+ *
8
+ * `ForbiddenError` and `VersionConflictError` are this module's own, deliberately distinct from the
9
+ * same-named classes on `../core/commands/command.js` and on `../content-types/index.js`. That
10
+ * separation is inherited from the source this was ported from; a consumer catching across the
11
+ * boundary must catch the one it actually called into.
12
+ */
13
+ export { ForbiddenError, EntryNotFoundError, ContentTypeNotFoundError, ContentTypeNotActiveError, EntrySlugConflictError, VersionConflictError, EntryFieldValidationError, } from "./errors.js";
14
+ export { ENTRY_LIFECYCLE_OP_NAMES, ENTRY_LIFECYCLE_OPS, parseEntryLifecycleOp, } from "./lifecycle-dispatch.js";
15
+ export { createEntry, updateEntry, publishEntry, unpublishEntry } from "./write-service.js";
16
+ /**
17
+ * The in-memory repository. Exported for the same reason `navigation` exports its own: a host's
18
+ * concrete adapter implements the port directly, and the in-memory implementation is the reference
19
+ * a consumer tests against before it has one.
20
+ */
21
+ export { InMemoryEntryRepo, toEntryOutbox } from "./repo.memory.js";
22
+ /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
23
+ export { entriesAgentToolCatalog, } from "./agent-tools.js";
24
+ /**
25
+ * The agent-tool wiring for this domain.
26
+ *
27
+ * `EntriesToolDeps` is declared structurally rather than derived from any host's request-scoped
28
+ * dependency bag, which is what lets a host satisfy it by passing whatever object it already has —
29
+ * the shape is the contract, so no host type needs to be named here.
30
+ */
31
+ export { buildEntriesRegistrations, entriesDerivedRisk, } from "./tool-registrations.js";
32
+ /**
33
+ * There is no SQLite adapter export here, deliberately. A concrete `EntryRepoPort` over a specific
34
+ * database handle would put one host's persistence choice on this library's public contract and
35
+ * drag that host's schema into every consumer's dependency closure. Hosts compose their own; this
36
+ * entry point exports the ports they compose against.
37
+ */
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entries/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAMxC,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAE9F;;;;;;;;;GASG;AACH,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAajC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEpE,sGAAsG;AACtG,OAAO,EACL,uBAAuB,GAGxB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG"}
@@ -0,0 +1,15 @@
1
+ import { type PublishUnpublishEntryRequired } from "./write-service.js";
2
+ import type { EntryRecord, Result } from "./types.js";
3
+ /**
4
+ * @file Entry publish/unpublish `op` dispatch (the closed-union-dispatch convention, same
5
+ * shape as `features/content-types/lifecycle-dispatch.ts`).
6
+ */
7
+ export declare const ENTRY_LIFECYCLE_OP_NAMES: readonly ["publish", "unpublish"];
8
+ export type EntryLifecycleOp = (typeof ENTRY_LIFECYCLE_OP_NAMES)[number];
9
+ /** Narrows an untrusted `op` string to {@link EntryLifecycleOp}, or `null` if it isn't one. */
10
+ export declare function parseEntryLifecycleOp(op: unknown): EntryLifecycleOp | null;
11
+ export type EntryLifecycleHandler = (required: PublishUnpublishEntryRequired) => Promise<Result<{
12
+ entry: EntryRecord;
13
+ }, Error>>;
14
+ export declare const ENTRY_LIFECYCLE_OPS: Record<EntryLifecycleOp, EntryLifecycleHandler>;
15
+ //# sourceMappingURL=lifecycle-dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-dispatch.d.ts","sourceRoot":"","sources":["../../src/entries/lifecycle-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD;;;GAGG;AAEH,eAAO,MAAM,wBAAwB,mCAAoC,CAAC;AAC1E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAE1E;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,6BAA6B,KAAK,OAAO,CAAC,MAAM,CAAC;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAOhI,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAG/E,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { publishEntry, unpublishEntry } from "./write-service.js";
2
+ /**
3
+ * @file Entry publish/unpublish `op` dispatch (the closed-union-dispatch convention, same
4
+ * shape as `features/content-types/lifecycle-dispatch.ts`).
5
+ */
6
+ export const ENTRY_LIFECYCLE_OP_NAMES = ["publish", "unpublish"];
7
+ /** Narrows an untrusted `op` string to {@link EntryLifecycleOp}, or `null` if it isn't one. */
8
+ export function parseEntryLifecycleOp(op) {
9
+ return typeof op === "string" && ENTRY_LIFECYCLE_OP_NAMES.includes(op) ? op : null;
10
+ }
11
+ const entryLifecycleOps = {
12
+ publish: (required) => publishEntry(required),
13
+ unpublish: (required) => unpublishEntry(required),
14
+ };
15
+ export const ENTRY_LIFECYCLE_OPS = Object.assign(Object.create(null), entryLifecycleOps);
16
+ //# sourceMappingURL=lifecycle-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-dispatch.js","sourceRoot":"","sources":["../../src/entries/lifecycle-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAsC,MAAM,oBAAoB,CAAC;AAGtG;;;GAGG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,WAAW,CAAU,CAAC;AAG1E,+FAA+F;AAC/F,MAAM,UAAU,qBAAqB,CAAC,EAAW;IAC/C,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAK,wBAA8C,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAuB,CAAC,CAAC,CAAC,IAAI,CAAC;AAClI,CAAC;AAID,MAAM,iBAAiB,GAAG;IACxB,OAAO,EAAE,CAAC,QAAuC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC5E,SAAS,EAAE,CAAC,QAAuC,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;CACvB,CAAC;AAE5D,MAAM,CAAC,MAAM,mBAAmB,GAAoD,MAAM,CAAC,MAAM,CAC/F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAoD,EACtE,iBAAiB,CAClB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { EntryRecord, EntryStatus } from "./types.js";
2
+ /**
3
+ * @file Admin-UI backend-gap closure (design-spec.md §1.9) — the `entries` package's missing read
4
+ * side. Mirrors `features/content-types/list.ts`'s shape exactly: a thin pass-through over an
5
+ * injected read port, no authorization of its own (the caller route checks `admin.collections.read`
6
+ * first).
7
+ *
8
+ * `status`/`orderBy`/`limit` (2026-07-21) — added to close a real, audit-confirmed gap
9
+ * (`widgets/resolvers/recent-entries.ts` was loading every entry in the workspace into memory with
10
+ * no filter/bound at all, then sorting/slicing in JS, violating this engine's "one bounded
11
+ * query, no unbounded scans" resolver contract). All three are optional and additive — every
12
+ * existing caller that omits them keeps identical behavior.
13
+ *
14
+ * Architectural role:
15
+ * `features/entries` domain logic. Depends only on this package's own `types.ts`.
16
+ */
17
+ export interface EntryListPort {
18
+ /** Every entry of `type` in `workspaceId`, in no particular guaranteed order (the route layer
19
+ * sorts for display) unless `orderBy` is supplied. `type` is optional so a caller can list across
20
+ * every content type at once (design-spec.md doesn't require this today, but the port stays
21
+ * general rather than baking in the one call shape the current screen needs). `status`/`orderBy`/
22
+ * `limit` are pushed down into the query itself (not applied client-side after a full scan) by
23
+ * every real adapter — a caller needing a bounded, sorted read (e.g. a resolver's cost clamp)
24
+ * must supply them rather than fetching everything and truncating in memory. */
25
+ listByWorkspace(params: {
26
+ workspaceId: string;
27
+ type?: string | undefined;
28
+ status?: EntryStatus | undefined;
29
+ orderBy?: "updatedAt" | undefined;
30
+ orderDirection?: "asc" | "desc" | undefined;
31
+ limit?: number | undefined;
32
+ }): Promise<EntryRecord[]>;
33
+ }
34
+ /**
35
+ * Lists entries for `workspaceId`, optionally narrowed to one content `type`.
36
+ *
37
+ * @complexity O(1) plus one `EntryListPort.listByWorkspace()` call.
38
+ * @overallScore 100
39
+ */
40
+ export declare function listEntries(required: {
41
+ repo: EntryListPort;
42
+ workspaceId: string;
43
+ type?: string | undefined;
44
+ }, _optional?: Record<string, never>): Promise<{
45
+ items: EntryRecord[];
46
+ }>;
47
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/entries/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,aAAa;IAC5B;;;;;;oFAMgF;IAChF,eAAe,CAAC,MAAM,EAAE;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;QAClC,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;QAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC5B,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACjF,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GACpC,OAAO,CAAC;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAInC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Lists entries for `workspaceId`, optionally narrowed to one content `type`.
3
+ *
4
+ * @complexity O(1) plus one `EntryListPort.listByWorkspace()` call.
5
+ * @overallScore 100
6
+ */
7
+ export async function listEntries(required, _optional = {}) {
8
+ const { repo, workspaceId, type } = required;
9
+ const items = await repo.listByWorkspace({ workspaceId, type });
10
+ return { items };
11
+ }
12
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/entries/list.ts"],"names":[],"mappings":"AAoCA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAiF,EACjF,YAAmC,EAAE;IAErC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { EntryRepoPort, EntryRevisionInput, OutboxPort } from "./write-service.js";
2
+ import type { EntryListPort } from "./list.js";
3
+ import type { EntryRecord, EntryStatus } from "./types.js";
4
+ /**
5
+ * @file In-memory `EntryRepoPort` + `EntryListPort` double (same disclosed rule-of-two-until-a-
6
+ * real-adapter-exists precedent as `features/content-types/repo.memory.ts` — see that file's
7
+ * header for the full disclosure, which applies identically here).
8
+ */
9
+ export declare class InMemoryEntryRepo implements EntryRepoPort, EntryListPort {
10
+ private readonly byId;
11
+ private readonly revisions;
12
+ private static slugKey;
13
+ findBySlug(params: {
14
+ workspaceId: string;
15
+ type: string;
16
+ slug: string;
17
+ }): Promise<EntryRecord | null>;
18
+ findById(params: {
19
+ workspaceId: string;
20
+ id: string;
21
+ }): Promise<EntryRecord | null>;
22
+ save(row: EntryRecord): Promise<void>;
23
+ appendRevision(revision: EntryRevisionInput): Promise<void>;
24
+ transaction<T>(fn: () => Promise<T>): Promise<T>;
25
+ listByWorkspace(params: {
26
+ workspaceId: string;
27
+ type?: string;
28
+ status?: EntryStatus;
29
+ orderBy?: "updatedAt";
30
+ orderDirection?: "asc" | "desc";
31
+ limit?: number;
32
+ }): Promise<EntryRecord[]>;
33
+ }
34
+ /** Adapts a real `core/ports` `OutboxPort` into the narrower `{enqueue({name,payload})}` shape
35
+ * `entries/write-service.ts` declares locally — same pattern as
36
+ * `features/content-types/repo.memory.ts`'s `toContentTypeOutbox`.
37
+ *
38
+ * `workspaceId` is REQUIRED and is declared on the wrapped port's event type on purpose. A real
39
+ * `core/ports` `DomainEvent` carries `workspaceId` as a non-optional tenant boundary, and
40
+ * persistent adapters store it in a NOT NULL column. This wrapper previously under-declared the
41
+ * wrapped port as `{id,name,occurredAt,payload}` and constructed an event without `workspaceId`, so
42
+ * a host binding a SQLite outbox typechecked cleanly and then threw
43
+ * `NOT NULL constraint failed: outbox_events.workspace_id` on every write. Sourcing it from `deps`
44
+ * rather than from `event.payload` is deliberate: the narrow local port carries only `{name,payload}`
45
+ * and payload contents are per-event convention, not a contract. */
46
+ export declare function toEntryOutbox(deps: {
47
+ outbox: {
48
+ enqueue(event: {
49
+ id: string;
50
+ workspaceId: string;
51
+ name: string;
52
+ occurredAt: string;
53
+ payload: Record<string, unknown>;
54
+ }): Promise<void>;
55
+ };
56
+ clock: {
57
+ nowIso(): string;
58
+ };
59
+ idGen: {
60
+ newId(): string;
61
+ };
62
+ workspaceId: string;
63
+ }): OutboxPort;
64
+ //# sourceMappingURL=repo.memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/entries/repo.memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,aAAa,EAAE,aAAa;IACpE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IAEtD,OAAO,CAAC,MAAM,CAAC,OAAO;IAIhB,UAAU,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQpG,QAAQ,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKlF,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD,eAAe,CAAC,MAAM,EAAE;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,OAAO,CAAC,EAAE,WAAW,CAAC;QACtB,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAe3B;AAED;;;;;;;;;;;oEAWoE;AACpE,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE;QACN,OAAO,CAAC,KAAK,EAAE;YACb,EAAE,EAAE,MAAM,CAAC;YACX,WAAW,EAAE,MAAM,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAClC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnB,CAAC;IACF,KAAK,EAAE;QAAE,MAAM,IAAI,MAAM,CAAA;KAAE,CAAC;IAC5B,KAAK,EAAE;QAAE,KAAK,IAAI,MAAM,CAAA;KAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,UAAU,CAYb"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @file In-memory `EntryRepoPort` + `EntryListPort` double (same disclosed rule-of-two-until-a-
3
+ * real-adapter-exists precedent as `features/content-types/repo.memory.ts` — see that file's
4
+ * header for the full disclosure, which applies identically here).
5
+ */
6
+ export class InMemoryEntryRepo {
7
+ byId = new Map();
8
+ revisions = [];
9
+ static slugKey(workspaceId, type, slug) {
10
+ return `${workspaceId}::${type}::${slug}`;
11
+ }
12
+ async findBySlug(params) {
13
+ const target = InMemoryEntryRepo.slugKey(params.workspaceId, params.type, params.slug);
14
+ for (const row of this.byId.values()) {
15
+ if (InMemoryEntryRepo.slugKey(row.workspaceId, row.type, row.slug) === target)
16
+ return { ...row };
17
+ }
18
+ return null;
19
+ }
20
+ async findById(params) {
21
+ const row = this.byId.get(params.id);
22
+ return row && row.workspaceId === params.workspaceId ? { ...row } : null;
23
+ }
24
+ async save(row) {
25
+ this.byId.set(row.id, { ...row });
26
+ }
27
+ async appendRevision(revision) {
28
+ this.revisions.push(revision);
29
+ }
30
+ async transaction(fn) {
31
+ return fn();
32
+ }
33
+ async listByWorkspace(params) {
34
+ let rows = [...this.byId.values()]
35
+ .filter((row) => row.workspaceId === params.workspaceId)
36
+ .filter((row) => !params.type || row.type === params.type)
37
+ .filter((row) => !params.status || row.status === params.status);
38
+ if (params.orderBy === "updatedAt") {
39
+ const dir = params.orderDirection === "asc" ? 1 : -1;
40
+ rows = rows.sort((a, b) => (a.updatedAt < b.updatedAt ? -dir : a.updatedAt > b.updatedAt ? dir : 0));
41
+ }
42
+ if (typeof params.limit === "number") {
43
+ rows = rows.slice(0, params.limit);
44
+ }
45
+ return rows.map((row) => ({ ...row }));
46
+ }
47
+ }
48
+ /** Adapts a real `core/ports` `OutboxPort` into the narrower `{enqueue({name,payload})}` shape
49
+ * `entries/write-service.ts` declares locally — same pattern as
50
+ * `features/content-types/repo.memory.ts`'s `toContentTypeOutbox`.
51
+ *
52
+ * `workspaceId` is REQUIRED and is declared on the wrapped port's event type on purpose. A real
53
+ * `core/ports` `DomainEvent` carries `workspaceId` as a non-optional tenant boundary, and
54
+ * persistent adapters store it in a NOT NULL column. This wrapper previously under-declared the
55
+ * wrapped port as `{id,name,occurredAt,payload}` and constructed an event without `workspaceId`, so
56
+ * a host binding a SQLite outbox typechecked cleanly and then threw
57
+ * `NOT NULL constraint failed: outbox_events.workspace_id` on every write. Sourcing it from `deps`
58
+ * rather than from `event.payload` is deliberate: the narrow local port carries only `{name,payload}`
59
+ * and payload contents are per-event convention, not a contract. */
60
+ export function toEntryOutbox(deps) {
61
+ return {
62
+ enqueue: async (event) => {
63
+ await deps.outbox.enqueue({
64
+ id: deps.idGen.newId(),
65
+ workspaceId: deps.workspaceId,
66
+ name: event.name,
67
+ occurredAt: deps.clock.nowIso(),
68
+ payload: event.payload,
69
+ });
70
+ },
71
+ };
72
+ }
73
+ //# sourceMappingURL=repo.memory.js.map