@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,133 @@
1
+ import { createHash } from "node:crypto";
2
+ import { InvalidFieldKindError, InvalidFieldNameGrammarError, InvalidKeyGrammarError } from "./errors.js";
3
+ import { CONTENT_TYPE_FIELD_KINDS, isContentTypeFieldKind } from "./types.js";
4
+ /**
5
+ * @file CIC U-001 — the `kind`->`CAST` fixed lookup table, the identifier grammar
6
+ * gate, the workspace-scoped queryable-index naming scheme, and the before/after index-transition
7
+ * resolver (grammar-and-workspace-scoping folds).
8
+ *
9
+ * Purpose:
10
+ * THIS IS THE HIGHEST-SECURITY-SEVERITY MODULE IN THE 5-PACKAGE PIPELINE — every value that ends
11
+ * up inside a `CREATE INDEX ... CAST(json_extract(fields,'$.ext.{ns}.{field}') AS {type})`
12
+ * statement is produced here, and only here:
13
+ * - `mapFieldKindToCast` never interpolates an operator-supplied string — it is a fixed,
14
+ * hardcoded 5-entry table (U-001-B1).
15
+ * - `validateIdentifierGrammar`/`buildQueryableFieldIndexName` gate every `key`/field name
16
+ * through `^[a-z][a-z0-9_]{0,63}$` before it can reach an index-name segment or JSON-path
17
+ * literal (U-001-B2), and join grammar-gated segments with `/` — a delimiter outside the
18
+ * grammar's own alphabet `[a-z0-9_]`, closing the namespace-injectivity collision class
19
+ * (U-001-B3) — and fold in a workspace-derived segment so two workspaces defining the same
20
+ * `(key, field)` pair never collide on index identity.
21
+ *
22
+ * How it relates to the project:
23
+ * `write-service.ts`'s `registerContentType`/`updateContentTypeFields` call
24
+ * `resolveFieldIndexTransition` once per field (never two independent kind/queryable branches —
25
+ * CIC U-003-B1) and hand the result to the injected `indexProvisioner` port, which is the only
26
+ * thing that ever issues the real `CREATE INDEX`/`DROP INDEX` DDL (this module only decides what
27
+ * to build, never executes DDL itself).
28
+ *
29
+ * Architectural role:
30
+ * `features/content-types` domain logic. No dependencies beyond `node:crypto` (workspace-segment
31
+ * hashing) and this package's own `errors.ts`/`types.ts`.
32
+ */
33
+ /**
34
+ * U-001-B2 — the closed identifier grammar every `content_types.key` and field name must satisfy,
35
+ * as a pattern string so the agent-facing JSON Schemas in `agent-tools.ts` can publish the very
36
+ * same grammar instead of restating it. A cross-cutting single-source-of-truth governance rule makes this grammar load-bearing for DDL
37
+ * safety, so it must have exactly one definition; {@link IDENTIFIER_GRAMMAR} is compiled from this
38
+ * string rather than written twice.
39
+ */
40
+ export const IDENTIFIER_GRAMMAR_PATTERN = "^[a-z][a-z0-9_]{0,63}$";
41
+ /** U-001-B2 — the closed identifier grammar every `content_types.key` and field name must satisfy. */
42
+ const IDENTIFIER_GRAMMAR = new RegExp(IDENTIFIER_GRAMMAR_PATTERN);
43
+ /**
44
+ * Structural grammar gate for a `content_types.key` or field name (U-001-B2).
45
+ *
46
+ * @complexity O(n) in the string's length (regex match), bounded at 64 chars.
47
+ * @overallScore 100
48
+ */
49
+ export function validateIdentifierGrammar(value) {
50
+ return IDENTIFIER_GRAMMAR.test(value);
51
+ }
52
+ /**
53
+ * U-001-B1 — the fixed, hardcoded `kind` -> SQL `CAST` type-token table. Every value here is a
54
+ * plain uppercase SQL type token with no quotes/parens/whitespace; never built by concatenation.
55
+ */
56
+ const KIND_TO_CAST_LITERAL = {
57
+ text: "TEXT",
58
+ integer: "INTEGER",
59
+ real: "REAL",
60
+ boolean: "BOOLEAN",
61
+ datetime: "TEXT",
62
+ };
63
+ /**
64
+ * Maps a closed-enum field `kind` to its fixed `CAST(... AS {type})` type token. Throws
65
+ * {@link InvalidFieldKindError} for anything not exactly one of the 5 enum values — this is a
66
+ * lookup, never a template, so an adversarial payload can never reach the returned string
67
+ * (U-001-B1).
68
+ *
69
+ * @complexity O(1) — a fixed-size object lookup.
70
+ * @overallScore 100
71
+ */
72
+ export function mapFieldKindToCast(kind) {
73
+ if (!isContentTypeFieldKind(kind)) {
74
+ throw new InvalidFieldKindError(`'${String(kind)}' is not one of the closed field-kind enum (${CONTENT_TYPE_FIELD_KINDS.join("|")}) — U-001-B1`);
75
+ }
76
+ return KIND_TO_CAST_LITERAL[kind];
77
+ }
78
+ /**
79
+ * Derives a grammar-safe, workspace-scoped index-name segment from an arbitrary `workspaceId`
80
+ * (which itself is not grammar-constrained — e.g. `"ws-1"` contains a hyphen). Hashing collapses
81
+ * it to a fixed `[0-9a-f]` alphabet (a strict subset of the identifier grammar's `[a-z0-9_]`)
82
+ * prefixed with a letter so the segment independently satisfies {@link validateIdentifierGrammar}.
83
+ *
84
+ * @complexity O(1) — a fixed-length SHA-256 digest.
85
+ * @overallScore 100
86
+ */
87
+ function workspaceIndexSegment(workspaceId) {
88
+ const digest = createHash("sha256").update(workspaceId).digest("hex").slice(0, 16);
89
+ return `w${digest}`;
90
+ }
91
+ /**
92
+ * Builds the workspace-scoped queryable-field index identity for `(workspaceId, contentTypeKey,
93
+ * fieldName)`. Both `contentTypeKey` and `fieldName` are grammar-gated first — a failure throws
94
+ * before any index name is produced (U-001-B2). Segments are joined with `/`, a delimiter outside
95
+ * the grammar's own alphabet `[a-z0-9_]`, so distinct `(key, name)` pairs can never collide by
96
+ * boundary-shifting (U-001-B3, e.g. `("a_b","c")` vs `("a","b_c")`).
97
+ *
98
+ * @complexity O(1) plus two grammar checks and one SHA-256 hash.
99
+ * @overallScore 100
100
+ */
101
+ export function buildQueryableFieldIndexName(params) {
102
+ if (!validateIdentifierGrammar(params.contentTypeKey)) {
103
+ throw new InvalidKeyGrammarError(`content-type key '${params.contentTypeKey}' fails the identifier grammar gate ^[a-z][a-z0-9_]{0,63}$ (U-001-B2)`);
104
+ }
105
+ if (!validateIdentifierGrammar(params.fieldName)) {
106
+ throw new InvalidFieldNameGrammarError(`field name '${params.fieldName}' fails the identifier grammar gate ^[a-z][a-z0-9_]{0,63}$ (U-001-B2)`);
107
+ }
108
+ return `q/${workspaceIndexSegment(params.workspaceId)}/${params.contentTypeKey}/${params.fieldName}`;
109
+ }
110
+ /**
111
+ * CIC U-003-B1 — resolves a single field's index transition from ONE before/after comparison of
112
+ * its `(kind, queryable)` pair, never from two independent branches that each assume the other
113
+ * property is unchanged (the bug class this closes: a field whose `kind` AND `queryable` both
114
+ * change in the same call must still resolve correctly — REQ-30(b)).
115
+ *
116
+ * @complexity O(1) — four comparisons, one of four fixed outcomes.
117
+ * @overallScore 100
118
+ */
119
+ export function resolveFieldIndexTransition(params) {
120
+ const beforeQueryable = params.before?.queryable ?? false;
121
+ const afterQueryable = params.after?.queryable ?? false;
122
+ if (!beforeQueryable && !afterQueryable)
123
+ return { action: "none" };
124
+ if (beforeQueryable && !afterQueryable)
125
+ return { action: "teardown" };
126
+ if (!beforeQueryable && afterQueryable)
127
+ return { action: "provision", newKind: params.after.kind };
128
+ if (params.before.kind !== params.after.kind) {
129
+ return { action: "reprovision", newKind: params.after.kind };
130
+ }
131
+ return { action: "none" };
132
+ }
133
+ //# sourceMappingURL=index-provisioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-provisioning.js","sourceRoot":"","sources":["../../src/content-types/index-provisioning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,wBAAwB,EAA6B,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzG;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,wBAAwB,CAAC;AAEnE,sGAAsG;AACtG,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,oBAAoB,GAAyC;IACjE,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA0B;IAC3D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,qBAAqB,CAC7B,IAAI,MAAM,CAAC,IAAI,CAAC,+CAA+C,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAChH,CAAC;IACJ,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAAC,WAAmB;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnF,OAAO,IAAI,MAAM,EAAE,CAAC;AACtB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAI5C;IACC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,sBAAsB,CAC9B,qBAAqB,MAAM,CAAC,cAAc,uEAAuE,CAClH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,4BAA4B,CACpC,eAAe,MAAM,CAAC,SAAS,uEAAuE,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;AACvG,CAAC;AAWD;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAG3C;IACC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC;IAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC;IAExD,IAAI,CAAC,eAAe,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACnE,IAAI,eAAe,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACtE,IAAI,CAAC,eAAe,IAAI,cAAc;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,KAAM,CAAC,IAAI,EAAE,CAAC;IACpG,IAAI,MAAM,CAAC,MAAO,CAAC,IAAI,KAAK,MAAM,CAAC,KAAM,CAAC,IAAI,EAAE,CAAC;QAC/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,KAAM,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @file Public surface (barrel) for the `content-types` 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
+ * See `../entries/index.js`'s header for why these two ship as separate subpaths rather than one.
8
+ */
9
+ export type { ContentTypeFieldKind, ContentTypeFieldDef, ContentTypeStatus, ContentTypeRecord, ActorPrincipalKind, ActorIdentityInput, Result, } from "./types.js";
10
+ export { CONTENT_TYPE_FIELD_KINDS, isContentTypeFieldKind } from "./types.js";
11
+ export type { ContentTypeListPort } from "./list.js";
12
+ export { listContentTypes } from "./list.js";
13
+ export { parseContentTypeFieldDefs } from "./field-defs.js";
14
+ /**
15
+ * These are exported as **values**, not types: callers catch them with `instanceof`. Because this
16
+ * barrel re-exports rather than redeclares, there is exactly one class object per error across
17
+ * every consumer. `ForbiddenError`/`VersionConflictError`/`ContentTypeNotFoundError` are this
18
+ * module's own and are deliberately distinct from the same-named classes on `../entries/index.js`
19
+ * and `../core/commands/command.js` — a consumer must catch the one it actually called into.
20
+ */
21
+ export { ForbiddenError, InvalidKeyGrammarError, ReservedContentTypeKeyError, InvalidFieldNameGrammarError, InvalidFieldKindError, InvalidFieldShapeError, QueryableFieldCapExceededError, VersionConflictError, ContentTypeNotFoundError, ValidationError, ContentTypeLifecycleError, CleanupNotEligibleError, } from "./errors.js";
22
+ /**
23
+ * The queryable-field index machinery. `IDENTIFIER_GRAMMAR_PATTERN` is exported because it is the
24
+ * single definition of the identifier grammar — the published agent-tool schemas reference it
25
+ * rather than restating it, and a consumer validating input ahead of a call must reach the same
26
+ * one. `mapFieldKindToCast`/`buildQueryableFieldIndexName` are what a host's own DDL provisioner
27
+ * needs in order to generate the same index names this module expects to find.
28
+ */
29
+ export type { FieldIndexState, FieldIndexTransition } from "./index-provisioning.js";
30
+ export { IDENTIFIER_GRAMMAR_PATTERN, validateIdentifierGrammar, mapFieldKindToCast, buildQueryableFieldIndexName, resolveFieldIndexTransition, } from "./index-provisioning.js";
31
+ export type { AuthorizeFn, ContentTypeRevisionInput, ContentTypeRepoPort, IndexProvisionerPort, OutboxPort, WatermarkPort, ContentTypeWriteServiceDeps, RegisterContentTypeRequired, UpdateContentTypeFieldsRequired, } from "./write-service.js";
32
+ export { registerContentType, updateContentTypeFields } from "./write-service.js";
33
+ export type { LifecycleTransitionInput, DeprecateContentTypeRequired, ReactivateContentTypeRequired, TeardownIndexProvisionerPort, TombstoneContentTypeRequired, } from "./lifecycle.js";
34
+ export { deprecateContentType, reactivateContentType, tombstoneContentType, } from "./lifecycle.js";
35
+ export type { ContentTypeLifecycleOp, ContentTypeLifecycleHandler, LifecycleDispatchDeps, LifecycleDispatchInput, } from "./lifecycle-dispatch.js";
36
+ export { CONTENT_TYPE_LIFECYCLE_OP_NAMES, CONTENT_TYPE_LIFECYCLE_OPS, parseContentTypeLifecycleOp, } from "./lifecycle-dispatch.js";
37
+ /**
38
+ * Cleanup is the permanent-removal path for a tombstoned type. Both halves are gateway-mediated:
39
+ * this module never performs the destructive removal on its own authority, it plans and then
40
+ * forwards a redeemed confirmation token.
41
+ */
42
+ export type { CleanupEligibilityCheckRepoPort, PlanCleanupGatewayPort, PlanCleanupRequired, ExecuteCleanupGatewayPort, CleanupRemovalRepoPort, ExecuteCleanupRequired, } from "./cleanup.js";
43
+ export { planCleanup, executeCleanup } from "./cleanup.js";
44
+ /**
45
+ * The in-memory repository and the no-op index provisioner. The latter is the correct
46
+ * `IndexProvisionerPort` for any store with no DDL to run (an in-memory or document backend), not
47
+ * merely a test double.
48
+ */
49
+ export { InMemoryContentTypeRepo, NoopContentTypeIndexProvisioner, toContentTypeOutbox, } from "./repo.memory.js";
50
+ /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
51
+ export { contentTypesAgentToolCatalog, type AgentToolDefinition as ContentTypesAgentToolDefinition, type AgentToolSideEffect as ContentTypesAgentToolSideEffect, type AgentToolActorClassRule as ContentTypesAgentToolActorClassRule, } from "./agent-tools.js";
52
+ /**
53
+ * The agent-tool wiring for this domain.
54
+ *
55
+ * `ContentTypesToolDeps` is declared structurally rather than derived from any host's
56
+ * request-scoped dependency bag, which is what lets a host satisfy it by passing whatever object it
57
+ * already has — the shape is the contract, so no host type needs to be named here.
58
+ */
59
+ export { buildContentTypesRegistrations, contentTypesDerivedRisk, type ContentTypesToolDeps, } from "./tool-registrations.js";
60
+ /**
61
+ * There is no SQLite adapter export here, deliberately — same reason as `../entries/index.js`.
62
+ */
63
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content-types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,MAAM,GACP,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE9E,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;;;;;GAMG;AACH,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,8BAA8B,EAC9B,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB;;;;;;GAMG;AACH,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,WAAW,EACX,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElF,YAAY,EACV,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,YAAY,EACV,+BAA+B,EAC/B,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE3D;;;;GAIG;AACH,OAAO,EACL,uBAAuB,EACvB,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,sGAAsG;AACtG,OAAO,EACL,4BAA4B,EAC5B,KAAK,mBAAmB,IAAI,+BAA+B,EAC3D,KAAK,mBAAmB,IAAI,+BAA+B,EAC3D,KAAK,uBAAuB,IAAI,mCAAmC,GACpE,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,8BAA8B,EAC9B,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AAEjC;;GAEG"}
@@ -0,0 +1,36 @@
1
+ export { CONTENT_TYPE_FIELD_KINDS, isContentTypeFieldKind } from "./types.js";
2
+ export { listContentTypes } from "./list.js";
3
+ export { parseContentTypeFieldDefs } from "./field-defs.js";
4
+ /**
5
+ * These are exported as **values**, not types: callers catch them with `instanceof`. Because this
6
+ * barrel re-exports rather than redeclares, there is exactly one class object per error across
7
+ * every consumer. `ForbiddenError`/`VersionConflictError`/`ContentTypeNotFoundError` are this
8
+ * module's own and are deliberately distinct from the same-named classes on `../entries/index.js`
9
+ * and `../core/commands/command.js` — a consumer must catch the one it actually called into.
10
+ */
11
+ export { ForbiddenError, InvalidKeyGrammarError, ReservedContentTypeKeyError, InvalidFieldNameGrammarError, InvalidFieldKindError, InvalidFieldShapeError, QueryableFieldCapExceededError, VersionConflictError, ContentTypeNotFoundError, ValidationError, ContentTypeLifecycleError, CleanupNotEligibleError, } from "./errors.js";
12
+ export { IDENTIFIER_GRAMMAR_PATTERN, validateIdentifierGrammar, mapFieldKindToCast, buildQueryableFieldIndexName, resolveFieldIndexTransition, } from "./index-provisioning.js";
13
+ export { registerContentType, updateContentTypeFields } from "./write-service.js";
14
+ export { deprecateContentType, reactivateContentType, tombstoneContentType, } from "./lifecycle.js";
15
+ export { CONTENT_TYPE_LIFECYCLE_OP_NAMES, CONTENT_TYPE_LIFECYCLE_OPS, parseContentTypeLifecycleOp, } from "./lifecycle-dispatch.js";
16
+ export { planCleanup, executeCleanup } from "./cleanup.js";
17
+ /**
18
+ * The in-memory repository and the no-op index provisioner. The latter is the correct
19
+ * `IndexProvisionerPort` for any store with no DDL to run (an in-memory or document backend), not
20
+ * merely a test double.
21
+ */
22
+ export { InMemoryContentTypeRepo, NoopContentTypeIndexProvisioner, toContentTypeOutbox, } from "./repo.memory.js";
23
+ /** The agent-tool surface for this domain (see `agent-tools.ts` for what is deliberately omitted). */
24
+ export { contentTypesAgentToolCatalog, } from "./agent-tools.js";
25
+ /**
26
+ * The agent-tool wiring for this domain.
27
+ *
28
+ * `ContentTypesToolDeps` is declared structurally rather than derived from any host's
29
+ * request-scoped dependency bag, which is what lets a host satisfy it by passing whatever object it
30
+ * already has — the shape is the contract, so no host type needs to be named here.
31
+ */
32
+ export { buildContentTypesRegistrations, contentTypesDerivedRisk, } from "./tool-registrations.js";
33
+ /**
34
+ * There is no SQLite adapter export here, deliberately — same reason as `../entries/index.js`.
35
+ */
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content-types/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;;;;;GAMG;AACH,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,EACtB,8BAA8B,EAC9B,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAUrB,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAajC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AASlF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAejC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE3D;;;;GAIG;AACH,OAAO,EACL,uBAAuB,EACvB,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,sGAAsG;AACtG,OAAO,EACL,4BAA4B,GAI7B,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,OAAO,EACL,8BAA8B,EAC9B,uBAAuB,GAExB,MAAM,yBAAyB,CAAC;AAEjC;;GAEG"}
@@ -0,0 +1,38 @@
1
+ import type { ClockPort } from "../core/ports.js";
2
+ import type { AuthorizeFn, ContentTypeRepoPort, OutboxPort } from "./write-service.js";
3
+ import type { TeardownIndexProvisionerPort } from "./lifecycle.js";
4
+ import type { ActorPrincipalKind, ContentTypeRecord, Result } from "./types.js";
5
+ /**
6
+ * @file Content-type lifecycle `op` dispatch (the closed-union-dispatch convention,
7
+ * `features/settings/definitions-dispatch.ts`'s pattern reused verbatim for this domain).
8
+ *
9
+ * Purpose:
10
+ * The admin lifecycle route (`routes/admin/content-types/lifecycle.ts`) accepts an untrusted `op`
11
+ * string in the request body. Per the binding rule that any such string is narrowed to this
12
+ * closed 3-entry union at the parse boundary (`parseContentTypeLifecycleOp`) BEFORE any dispatch
13
+ * table lookup — never a raw `Record<string, Handler>` keyed by the unparsed value.
14
+ */
15
+ export declare const CONTENT_TYPE_LIFECYCLE_OP_NAMES: readonly ["deprecate", "reactivate", "tombstone"];
16
+ export type ContentTypeLifecycleOp = (typeof CONTENT_TYPE_LIFECYCLE_OP_NAMES)[number];
17
+ /** Narrows an untrusted `op` string to {@link ContentTypeLifecycleOp}, or `null` if it isn't one. */
18
+ export declare function parseContentTypeLifecycleOp(op: unknown): ContentTypeLifecycleOp | null;
19
+ export interface LifecycleDispatchDeps {
20
+ repo: ContentTypeRepoPort;
21
+ clock: ClockPort;
22
+ authorize: AuthorizeFn;
23
+ outbox: OutboxPort;
24
+ indexProvisioner: TeardownIndexProvisionerPort;
25
+ }
26
+ export interface LifecycleDispatchInput {
27
+ workspaceId: string;
28
+ actorId: string;
29
+ key: string;
30
+ expectedVersion: number;
31
+ /** Threaded straight through to {@link LifecycleTransitionInput.principalKind} — the audit provenance stamped on the revision row. */
32
+ principalKind?: ActorPrincipalKind;
33
+ }
34
+ export type ContentTypeLifecycleHandler = (deps: LifecycleDispatchDeps, input: LifecycleDispatchInput) => Promise<Result<{
35
+ contentType: ContentTypeRecord;
36
+ }, Error>>;
37
+ export declare const CONTENT_TYPE_LIFECYCLE_OPS: Record<ContentTypeLifecycleOp, ContentTypeLifecycleHandler>;
38
+ //# sourceMappingURL=lifecycle-dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-dispatch.d.ts","sourceRoot":"","sources":["../../src/content-types/lifecycle-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhF;;;;;;;;;GASG;AAEH,eAAO,MAAM,+BAA+B,mDAAoD,CAAC;AACjG,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtF,qGAAqG;AACrG,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAItF;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,gBAAgB,EAAE,4BAA4B,CAAC;CAChD;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,sIAAsI;IACtI,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,MAAM,2BAA2B,GAAG,CACxC,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,sBAAsB,KAC1B,OAAO,CAAC,MAAM,CAAC;IAAE,WAAW,EAAE,iBAAiB,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAWhE,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,CAGlG,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { deprecateContentType, reactivateContentType, tombstoneContentType } from "./lifecycle.js";
2
+ /**
3
+ * @file Content-type lifecycle `op` dispatch (the closed-union-dispatch convention,
4
+ * `features/settings/definitions-dispatch.ts`'s pattern reused verbatim for this domain).
5
+ *
6
+ * Purpose:
7
+ * The admin lifecycle route (`routes/admin/content-types/lifecycle.ts`) accepts an untrusted `op`
8
+ * string in the request body. Per the binding rule that any such string is narrowed to this
9
+ * closed 3-entry union at the parse boundary (`parseContentTypeLifecycleOp`) BEFORE any dispatch
10
+ * table lookup — never a raw `Record<string, Handler>` keyed by the unparsed value.
11
+ */
12
+ export const CONTENT_TYPE_LIFECYCLE_OP_NAMES = ["deprecate", "reactivate", "tombstone"];
13
+ /** Narrows an untrusted `op` string to {@link ContentTypeLifecycleOp}, or `null` if it isn't one. */
14
+ export function parseContentTypeLifecycleOp(op) {
15
+ return typeof op === "string" && CONTENT_TYPE_LIFECYCLE_OP_NAMES.includes(op)
16
+ ? op
17
+ : null;
18
+ }
19
+ /** Op name -> handler, keyed only by {@link ContentTypeLifecycleOp}, `Object.create(null)`-based
20
+ * (defense-in-depth against a prototype-chain key ever resolving, matching the settings
21
+ * dispatch table's own convention). */
22
+ const contentTypeLifecycleOps = {
23
+ deprecate: (deps, input) => deprecateContentType({ deps, input }),
24
+ reactivate: (deps, input) => reactivateContentType({ deps: { repo: deps.repo, clock: deps.clock, authorize: deps.authorize }, input }),
25
+ tombstone: (deps, input) => tombstoneContentType({ deps, input }),
26
+ };
27
+ export const CONTENT_TYPE_LIFECYCLE_OPS = Object.assign(Object.create(null), contentTypeLifecycleOps);
28
+ //# sourceMappingURL=lifecycle-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-dispatch.js","sourceRoot":"","sources":["../../src/content-types/lifecycle-dispatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAKnG;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,CAAU,CAAC;AAGjG,qGAAqG;AACrG,MAAM,UAAU,2BAA2B,CAAC,EAAW;IACrD,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAK,+BAAqD,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClG,CAAC,CAAE,EAA6B;QAChC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAwBD;;uCAEuC;AACvC,MAAM,uBAAuB,GAAG;IAC9B,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACjE,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC;IACtI,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;CACI,CAAC;AAExE,MAAM,CAAC,MAAM,0BAA0B,GAAgE,MAAM,CAAC,MAAM,CAClH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAgE,EAClF,uBAAuB,CACxB,CAAC"}
@@ -0,0 +1,104 @@
1
+ import type { ClockPort } from "../core/ports.js";
2
+ import type { AuthorizeFn, ContentTypeRepoPort, OutboxPort } from "./write-service.js";
3
+ import type { ActorPrincipalKind, ContentTypeRecord, Result } from "./types.js";
4
+ /**
5
+ * @file REQ-09..12 — the content-type lifecycle state machine `active ⇄ deprecated ->
6
+ * tombstone` (INV-06).
7
+ *
8
+ * Purpose:
9
+ * `deprecateContentType`/`reactivateContentType` are the reversible `active <-> deprecated` pair
10
+ * (deprecate blocks new-entry creation only, per REQ-10/REQ-28's asymmetry — existing entries stay
11
+ * fully readable/writable). `tombstoneContentType` is the one-way terminal transition: it MUST be
12
+ * entered from `deprecated` (EC-09, "must deprecate first") and never left (INV-06) — both
13
+ * `reactivateContentType` and `deprecateContentType` reject unconditionally against a tombstoned
14
+ * row (the property `operationTests INV-06` case). Tombstoning tears down every queryable-field
15
+ * index the type ever provisioned (AC-17) and enqueues the same-call outbox event
16
+ * required for `content_type.deprecated`/`content_type.tombstoned`.
17
+ *
18
+ * How it relates to the project:
19
+ * `reactivateContentType` deliberately does not accept `outbox`/`indexProvisioner` deps — no
20
+ * certified test requires a reactivation event or index reprovisioning on this transition, and
21
+ * REQ-09..12 name only deprecate/tombstone as outbox-obligated.
22
+ *
23
+ * Architectural role:
24
+ * `features/content-types` domain logic, composing `write-service.ts`'s repo/outbox/index-
25
+ * provisioner port shapes rather than redeclaring them.
26
+ */
27
+ export interface LifecycleTransitionInput {
28
+ workspaceId: string;
29
+ actorId: string;
30
+ key: string;
31
+ expectedVersion: number;
32
+ /** Audit provenance stamped onto this transition's revision row — see `types.ts`'s `ActorIdentityInput.principalKind`. */
33
+ principalKind?: ActorPrincipalKind;
34
+ }
35
+ export interface DeprecateContentTypeRequired {
36
+ deps: {
37
+ repo: ContentTypeRepoPort;
38
+ clock: ClockPort;
39
+ authorize: AuthorizeFn;
40
+ outbox: OutboxPort;
41
+ };
42
+ input: LifecycleTransitionInput;
43
+ }
44
+ /**
45
+ * AC-13/AC-19 — flips an active type to `deprecated` (blocks only NEW entry creation, REQ-10) and
46
+ * enqueues `content_type.deprecated` in the same call. Rejected unconditionally (INV-06) if the
47
+ * type is already `tombstone` — deprecate can never be used to "step back" out of tombstone.
48
+ *
49
+ * @complexity O(1) plus one repo read, one same-tx write pair, and one outbox enqueue.
50
+ * @overallScore 100
51
+ */
52
+ export declare function deprecateContentType(required: DeprecateContentTypeRequired): Promise<Result<{
53
+ contentType: ContentTypeRecord;
54
+ }, Error>>;
55
+ export interface ReactivateContentTypeRequired {
56
+ deps: {
57
+ repo: ContentTypeRepoPort;
58
+ clock: ClockPort;
59
+ authorize: AuthorizeFn;
60
+ };
61
+ input: LifecycleTransitionInput;
62
+ }
63
+ /**
64
+ * AC-13 — flips a `deprecated` (or already-`active`, a no-op-shaped success) type back to
65
+ * `active`. Rejected unconditionally (AC-14/INV-06) against a tombstoned row.
66
+ *
67
+ * @complexity O(1) plus one repo read and one same-tx write pair.
68
+ * @overallScore 100
69
+ */
70
+ export declare function reactivateContentType(required: ReactivateContentTypeRequired): Promise<Result<{
71
+ contentType: ContentTypeRecord;
72
+ }, Error>>;
73
+ /** The one index-provisioner method the tombstone transition needs — a narrower port than `write-service.ts`'s registration-time `IndexProvisionerPort`. */
74
+ export interface TeardownIndexProvisionerPort {
75
+ tearDownAllIndexesForContentType(input: {
76
+ workspaceId: string;
77
+ contentTypeKey: string;
78
+ }): Promise<void>;
79
+ }
80
+ export interface TombstoneContentTypeRequired {
81
+ deps: {
82
+ repo: ContentTypeRepoPort;
83
+ clock: ClockPort;
84
+ authorize: AuthorizeFn;
85
+ outbox: OutboxPort;
86
+ indexProvisioner: TeardownIndexProvisionerPort;
87
+ };
88
+ input: LifecycleTransitionInput;
89
+ }
90
+ /**
91
+ * AC-17/AC-20/EC-09 — the one-way terminal transition into `tombstone`. Must be entered from
92
+ * `deprecated` (any other status, including an already-tombstoned row, is rejected with the same
93
+ * "must deprecate first" guard — EC-09/INV-06 collapse to one check). Tears down every queryable-
94
+ * field index the type ever provisioned BEFORE persisting the status flip, and enqueues
95
+ * `content_type.tombstoned` in the same call.
96
+ *
97
+ * @complexity O(1) plus one repo read, one index-teardown call, one same-tx write pair, and one
98
+ * outbox enqueue.
99
+ * @overallScore 100
100
+ */
101
+ export declare function tombstoneContentType(required: TombstoneContentTypeRequired): Promise<Result<{
102
+ contentType: ContentTypeRecord;
103
+ }, Error>>;
104
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/content-types/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,0HAA0H;IAC1H,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAcD,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE;QAAE,IAAI,EAAE,mBAAmB,CAAC;QAAC,KAAK,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IAClG,KAAK,EAAE,wBAAwB,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,4BAA4B,GACrC,OAAO,CAAC,MAAM,CAAC;IAAE,WAAW,EAAE,iBAAiB,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,CAwC5D;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE;QAAE,IAAI,EAAE,mBAAmB,CAAC;QAAC,KAAK,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,WAAW,CAAA;KAAE,CAAC;IAC9E,KAAK,EAAE,wBAAwB,CAAC;CACjC;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,6BAA6B,GACtC,OAAO,CAAC,MAAM,CAAC;IAAE,WAAW,EAAE,iBAAiB,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,CAsC5D;AAED,4JAA4J;AAC5J,MAAM,WAAW,4BAA4B;IAC3C,gCAAgC,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzG;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE;QAAE,IAAI,EAAE,mBAAmB,CAAC;QAAC,KAAK,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,gBAAgB,EAAE,4BAA4B,CAAA;KAAE,CAAC;IAClJ,KAAK,EAAE,wBAAwB,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,4BAA4B,GACrC,OAAO,CAAC,MAAM,CAAC;IAAE,WAAW,EAAE,iBAAiB,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,CA+C5D"}
@@ -0,0 +1,143 @@
1
+ import { ContentTypeLifecycleError, ContentTypeNotFoundError, ForbiddenError, VersionConflictError } from "./errors.js";
2
+ async function resolveActiveOrDeprecated(repo, workspaceId, key) {
3
+ const current = await repo.findByKey({ workspaceId, key });
4
+ if (!current) {
5
+ return { ok: false, error: new ContentTypeNotFoundError(`content type '${key}' was not found in workspace '${workspaceId}'`) };
6
+ }
7
+ return { ok: true, value: current };
8
+ }
9
+ /**
10
+ * AC-13/AC-19 — flips an active type to `deprecated` (blocks only NEW entry creation, REQ-10) and
11
+ * enqueues `content_type.deprecated` in the same call. Rejected unconditionally (INV-06) if the
12
+ * type is already `tombstone` — deprecate can never be used to "step back" out of tombstone.
13
+ *
14
+ * @complexity O(1) plus one repo read, one same-tx write pair, and one outbox enqueue.
15
+ * @overallScore 100
16
+ */
17
+ export async function deprecateContentType(required) {
18
+ const { deps, input } = required;
19
+ const authResult = await deps.authorize({ principalId: input.actorId, permission: "admin.collections.manage", workspaceId: input.workspaceId });
20
+ if (!authResult.allowed) {
21
+ return { ok: false, error: new ForbiddenError(`principal '${input.actorId}' cannot deprecate content type '${input.key}' (${authResult.reason})`) };
22
+ }
23
+ const resolved = await resolveActiveOrDeprecated(deps.repo, input.workspaceId, input.key);
24
+ if (!resolved.ok)
25
+ return resolved;
26
+ const current = resolved.value;
27
+ if (current.status === "tombstone") {
28
+ return { ok: false, error: new ContentTypeLifecycleError(`content type '${input.key}' is tombstoned; INV-06 forbids any transition out of tombstone`) };
29
+ }
30
+ if (input.expectedVersion !== current.version) {
31
+ return { ok: false, error: new VersionConflictError(`expected version ${input.expectedVersion} for content type '${input.key}', found ${current.version}`) };
32
+ }
33
+ const now = deps.clock.nowIso();
34
+ const updated = { ...current, status: "deprecated", version: current.version + 1 };
35
+ await deps.repo.transaction(async () => {
36
+ await deps.repo.save(updated);
37
+ await deps.repo.appendRevision({
38
+ contentTypeKey: input.key,
39
+ workspaceId: input.workspaceId,
40
+ op: "field-change",
41
+ stateJson: updated,
42
+ actorId: input.actorId,
43
+ principalKind: input.principalKind ?? null,
44
+ delegatedByWorkspaceId: null,
45
+ delegatedById: null,
46
+ recordedAt: now,
47
+ });
48
+ });
49
+ await deps.outbox.enqueue({ name: "content_type.deprecated", payload: { workspaceId: input.workspaceId, key: input.key } });
50
+ return { ok: true, value: { contentType: updated } };
51
+ }
52
+ /**
53
+ * AC-13 — flips a `deprecated` (or already-`active`, a no-op-shaped success) type back to
54
+ * `active`. Rejected unconditionally (AC-14/INV-06) against a tombstoned row.
55
+ *
56
+ * @complexity O(1) plus one repo read and one same-tx write pair.
57
+ * @overallScore 100
58
+ */
59
+ export async function reactivateContentType(required) {
60
+ const { deps, input } = required;
61
+ const authResult = await deps.authorize({ principalId: input.actorId, permission: "admin.collections.manage", workspaceId: input.workspaceId });
62
+ if (!authResult.allowed) {
63
+ return { ok: false, error: new ForbiddenError(`principal '${input.actorId}' cannot reactivate content type '${input.key}' (${authResult.reason})`) };
64
+ }
65
+ const resolved = await resolveActiveOrDeprecated(deps.repo, input.workspaceId, input.key);
66
+ if (!resolved.ok)
67
+ return resolved;
68
+ const current = resolved.value;
69
+ if (current.status === "tombstone") {
70
+ return { ok: false, error: new ContentTypeLifecycleError(`content type '${input.key}' is tombstoned; INV-06 forbids any transition out of tombstone`) };
71
+ }
72
+ if (input.expectedVersion !== current.version) {
73
+ return { ok: false, error: new VersionConflictError(`expected version ${input.expectedVersion} for content type '${input.key}', found ${current.version}`) };
74
+ }
75
+ const now = deps.clock.nowIso();
76
+ const updated = { ...current, status: "active", version: current.version + 1 };
77
+ await deps.repo.transaction(async () => {
78
+ await deps.repo.save(updated);
79
+ await deps.repo.appendRevision({
80
+ contentTypeKey: input.key,
81
+ workspaceId: input.workspaceId,
82
+ op: "field-change",
83
+ stateJson: updated,
84
+ actorId: input.actorId,
85
+ principalKind: input.principalKind ?? null,
86
+ delegatedByWorkspaceId: null,
87
+ delegatedById: null,
88
+ recordedAt: now,
89
+ });
90
+ });
91
+ return { ok: true, value: { contentType: updated } };
92
+ }
93
+ /**
94
+ * AC-17/AC-20/EC-09 — the one-way terminal transition into `tombstone`. Must be entered from
95
+ * `deprecated` (any other status, including an already-tombstoned row, is rejected with the same
96
+ * "must deprecate first" guard — EC-09/INV-06 collapse to one check). Tears down every queryable-
97
+ * field index the type ever provisioned BEFORE persisting the status flip, and enqueues
98
+ * `content_type.tombstoned` in the same call.
99
+ *
100
+ * @complexity O(1) plus one repo read, one index-teardown call, one same-tx write pair, and one
101
+ * outbox enqueue.
102
+ * @overallScore 100
103
+ */
104
+ export async function tombstoneContentType(required) {
105
+ const { deps, input } = required;
106
+ const authResult = await deps.authorize({ principalId: input.actorId, permission: "admin.collections.manage", workspaceId: input.workspaceId });
107
+ if (!authResult.allowed) {
108
+ return { ok: false, error: new ForbiddenError(`principal '${input.actorId}' cannot tombstone content type '${input.key}' (${authResult.reason})`) };
109
+ }
110
+ const resolved = await resolveActiveOrDeprecated(deps.repo, input.workspaceId, input.key);
111
+ if (!resolved.ok)
112
+ return resolved;
113
+ const current = resolved.value;
114
+ if (current.status !== "deprecated") {
115
+ return {
116
+ ok: false,
117
+ error: new ContentTypeLifecycleError(`content type '${input.key}' must be 'deprecated' before it can be tombstoned (EC-09); current status is '${current.status}'`),
118
+ };
119
+ }
120
+ if (input.expectedVersion !== current.version) {
121
+ return { ok: false, error: new VersionConflictError(`expected version ${input.expectedVersion} for content type '${input.key}', found ${current.version}`) };
122
+ }
123
+ const now = deps.clock.nowIso();
124
+ const updated = { ...current, status: "tombstone", tombstonedAt: now, version: current.version + 1 };
125
+ await deps.indexProvisioner.tearDownAllIndexesForContentType({ workspaceId: input.workspaceId, contentTypeKey: input.key });
126
+ await deps.repo.transaction(async () => {
127
+ await deps.repo.save(updated);
128
+ await deps.repo.appendRevision({
129
+ contentTypeKey: input.key,
130
+ workspaceId: input.workspaceId,
131
+ op: "field-change",
132
+ stateJson: updated,
133
+ actorId: input.actorId,
134
+ principalKind: input.principalKind ?? null,
135
+ delegatedByWorkspaceId: null,
136
+ delegatedById: null,
137
+ recordedAt: now,
138
+ });
139
+ });
140
+ await deps.outbox.enqueue({ name: "content_type.tombstoned", payload: { workspaceId: input.workspaceId, key: input.key } });
141
+ return { ok: true, value: { contentType: updated } };
142
+ }
143
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/content-types/lifecycle.ts"],"names":[],"mappings":"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"}