@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,53 @@
1
+ import type { ClockPort, UUID } from "../core/ports.js";
2
+ import type { SettingsRepoPort } from "./ports.js";
3
+ import type { AuthorizeFn } from "./write-service.js";
4
+ /**
5
+ * @file `purgeTenantSettings` — the ledgered tenant/principal purge chokepoint.
6
+ *
7
+ * Purpose:
8
+ * A host's value-table FKs (`setting_values_workspace`/`_user` -> `workspaces`)
9
+ * are typically `ON DELETE RESTRICT`, not `CASCADE` — a raw workspace delete
10
+ * cannot silently drop value rows without a ledgered revision. This module is
11
+ * the explicit, ledgered alternative that requires: `authorize()` once
12
+ * -> enumerate every affected row -> append a redacted `op='purge'` revision
13
+ * per row -> delete the row, all in ONE transaction. The `setting_revisions`
14
+ * ledger itself is NEVER touched by a purge — only value rows are removed,
15
+ * with their purge revision left behind. Repo write methods stay
16
+ * package-private to this file and `write-service.ts`.
17
+ *
18
+ * Deviation from the outline's `SettingsWriteServiceDeps`: purge needs
19
+ * neither `ids` (no new definition/value rows are created) nor `principals`
20
+ * (REQ-13's target-principal check is a write-time guard; purge only removes
21
+ * pre-existing rows, it never writes a new user-scope row for an unverified
22
+ * principal) — so it declares its own smaller `PurgeServiceDeps`.
23
+ */
24
+ export interface PurgeServiceDeps {
25
+ repo: SettingsRepoPort;
26
+ clock: ClockPort;
27
+ authorize: AuthorizeFn;
28
+ }
29
+ export interface PurgeTenantSettingsRequired {
30
+ deps: PurgeServiceDeps;
31
+ input: {
32
+ workspaceId: UUID;
33
+ /**
34
+ * Omitted -> full tenant teardown: every `setting_values_workspace` row
35
+ * for the workspace AND every `setting_values_user` row for every
36
+ * principal in the workspace.
37
+ * Present -> scope the purge to one principal's `setting_values_user`
38
+ * rows only (GDPR single-subject erasure) — workspace-scope values and
39
+ * every other principal's rows are left untouched.
40
+ */
41
+ principalId?: UUID;
42
+ callerPrincipalId: UUID;
43
+ };
44
+ }
45
+ /**
46
+ * The purge chokepoint: authorize `settings.definitions.manage` once ->
47
+ * enumerate the affected rows -> append a redacted `op='purge'` revision +
48
+ * delete, per row, all in one transaction.
49
+ */
50
+ export declare function purgeTenantSettings(required: PurgeTenantSettingsRequired): Promise<{
51
+ purgedCount: number;
52
+ }>;
53
+ //# sourceMappingURL=purge-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-service.d.ts","sourceRoot":"","sources":["../../src/settings/purge-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE;QACL,WAAW,EAAE,IAAI,CAAC;QAClB;;;;;;;WAOG;QACH,WAAW,CAAC,EAAE,IAAI,CAAC;QACnB,iBAAiB,EAAE,IAAI,CAAC;KACzB,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,2BAA2B,GACpC,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAwGlC"}
@@ -0,0 +1,105 @@
1
+ import { ForbiddenError } from "./errors.js";
2
+ import { invalidateWorkspaceSettingsCache } from "./settings.js";
3
+ /**
4
+ * The purge chokepoint: authorize `settings.definitions.manage` once ->
5
+ * enumerate the affected rows -> append a redacted `op='purge'` revision +
6
+ * delete, per row, all in one transaction.
7
+ */
8
+ export async function purgeTenantSettings(required) {
9
+ const { deps, input } = required;
10
+ const authResult = await deps.authorize({
11
+ principalId: input.callerPrincipalId,
12
+ permission: "settings.definitions.manage",
13
+ workspaceId: input.workspaceId,
14
+ entityType: "setting-workspace",
15
+ entityId: input.workspaceId,
16
+ });
17
+ if (!authResult.allowed) {
18
+ throw new ForbiddenError(`principal '${input.callerPrincipalId}' is not authorized for 'settings.definitions.manage' (${authResult.reason})`);
19
+ }
20
+ const result = await deps.repo.transaction(async () => {
21
+ const now = deps.clock.nowIso();
22
+ let purgedCount = 0;
23
+ if (input.principalId) {
24
+ const userValues = await deps.repo.listUserValues({
25
+ workspaceId: input.workspaceId,
26
+ principalId: input.principalId,
27
+ });
28
+ for (const value of userValues) {
29
+ await deps.repo.appendRevision({
30
+ entityKind: "value",
31
+ settingId: value.settingId,
32
+ scope: "user",
33
+ workspaceId: input.workspaceId,
34
+ principalId: input.principalId,
35
+ op: "purge",
36
+ beforeJson: null,
37
+ afterJson: null,
38
+ defVersion: value.defVersion,
39
+ actor: input.callerPrincipalId,
40
+ originPluginId: null,
41
+ changeSetId: null,
42
+ createdAt: now,
43
+ });
44
+ await deps.repo.deleteUserValue({
45
+ workspaceId: input.workspaceId,
46
+ principalId: input.principalId,
47
+ settingId: value.settingId,
48
+ });
49
+ purgedCount++;
50
+ }
51
+ return { purgedCount };
52
+ }
53
+ const workspaceValues = await deps.repo.listWorkspaceValues({ workspaceId: input.workspaceId });
54
+ for (const value of workspaceValues) {
55
+ await deps.repo.appendRevision({
56
+ entityKind: "value",
57
+ settingId: value.settingId,
58
+ scope: "workspace",
59
+ workspaceId: input.workspaceId,
60
+ principalId: null,
61
+ op: "purge",
62
+ beforeJson: null,
63
+ afterJson: null,
64
+ defVersion: value.defVersion,
65
+ actor: input.callerPrincipalId,
66
+ originPluginId: null,
67
+ changeSetId: null,
68
+ createdAt: now,
69
+ });
70
+ await deps.repo.deleteWorkspaceValue({ workspaceId: input.workspaceId, settingId: value.settingId });
71
+ purgedCount++;
72
+ }
73
+ const userValues = await deps.repo.listUserValuesByWorkspace({ workspaceId: input.workspaceId });
74
+ for (const value of userValues) {
75
+ const targetPrincipalId = value.principalId;
76
+ if (!targetPrincipalId)
77
+ continue; // defensive: every setting_values_user row carries a principal_id
78
+ await deps.repo.appendRevision({
79
+ entityKind: "value",
80
+ settingId: value.settingId,
81
+ scope: "user",
82
+ workspaceId: input.workspaceId,
83
+ principalId: targetPrincipalId,
84
+ op: "purge",
85
+ beforeJson: null,
86
+ afterJson: null,
87
+ defVersion: value.defVersion,
88
+ actor: input.callerPrincipalId,
89
+ originPluginId: null,
90
+ changeSetId: null,
91
+ createdAt: now,
92
+ });
93
+ await deps.repo.deleteUserValue({
94
+ workspaceId: input.workspaceId,
95
+ principalId: targetPrincipalId,
96
+ settingId: value.settingId,
97
+ });
98
+ purgedCount++;
99
+ }
100
+ return { purgedCount };
101
+ });
102
+ invalidateWorkspaceSettingsCache(deps.repo, input.workspaceId, input.principalId);
103
+ return result;
104
+ }
105
+ //# sourceMappingURL=purge-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-service.js","sourceRoot":"","sources":["../../src/settings/purge-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import type { SettingsRepoPort } from "./ports.js";
2
+ import type { SettingDefinitionRecord, SettingRevisionRecord, SettingValueRecord } from "./types.js";
3
+ /**
4
+ * @file In-memory adapter for `SettingsRepoPort` (the rule-of-two: in-memory + production adapters).
5
+ *
6
+ * Purpose:
7
+ * Test/dev implementation. Mirrors the exact style of `identity/repo.memory.ts`:
8
+ * constructor takes seed rows, methods filter/mutate internal arrays.
9
+ *
10
+ * `transaction` is a real snapshot/restore journal, not a no-op wrapper. It
11
+ * used to be `async (fn) => fn()` on the reasoning that each individual
12
+ * mutation is already synchronous and atomic in-process — true, but the
13
+ * guarantee `SettingsRepoPort.transaction` actually sells is that a COMPOSITE
14
+ * of several mutations is all-or-nothing. `resetNamespace` clears a whole
15
+ * namespace inside one transaction; under a no-op wrapper a failure partway
16
+ * through left the namespace half reset while the caller saw an error. This
17
+ * adapter is a common wired default for dev/test composition, so that was
18
+ * live in dev, and the contract suite could not see it because the rollback
19
+ * assertion only ran against the SQLite adapter.
20
+ */
21
+ export declare class InMemorySettingsRepo implements SettingsRepoPort {
22
+ private definitions;
23
+ private globalValues;
24
+ private workspaceValues;
25
+ private userValues;
26
+ private revisions;
27
+ private nextSeq;
28
+ /** True while `transaction` is open — see its doc for why this refuses
29
+ * rather than nests. */
30
+ private inTransaction;
31
+ constructor(seed?: {
32
+ definitions?: SettingDefinitionRecord[];
33
+ globalValues?: SettingValueRecord[];
34
+ workspaceValues?: SettingValueRecord[];
35
+ userValues?: SettingValueRecord[];
36
+ revisions?: SettingRevisionRecord[];
37
+ });
38
+ findActiveDefinition(required: {
39
+ namespace: string;
40
+ key: string;
41
+ workspaceId: string | null;
42
+ }): Promise<SettingDefinitionRecord | null>;
43
+ findDefinitionBySettingId(required: {
44
+ settingId: string;
45
+ version?: number;
46
+ }): Promise<SettingDefinitionRecord | null>;
47
+ listActiveDefinitions(required: {
48
+ workspaceId: string | null;
49
+ }): Promise<SettingDefinitionRecord[]>;
50
+ saveDefinition(record: SettingDefinitionRecord): Promise<void>;
51
+ getGlobalValue(settingId: string): Promise<SettingValueRecord | null>;
52
+ getWorkspaceValue(required: {
53
+ workspaceId: string;
54
+ settingId: string;
55
+ }): Promise<SettingValueRecord | null>;
56
+ getUserValue(required: {
57
+ workspaceId: string;
58
+ principalId: string;
59
+ settingId: string;
60
+ }): Promise<SettingValueRecord | null>;
61
+ saveGlobalValue(record: SettingValueRecord): Promise<void>;
62
+ saveWorkspaceValue(record: SettingValueRecord): Promise<void>;
63
+ saveUserValue(record: SettingValueRecord): Promise<void>;
64
+ listWorkspaceValues(required: {
65
+ workspaceId: string;
66
+ }): Promise<SettingValueRecord[]>;
67
+ listUserValues(required: {
68
+ workspaceId: string;
69
+ principalId: string;
70
+ }): Promise<SettingValueRecord[]>;
71
+ listUserValuesByWorkspace(required: {
72
+ workspaceId: string;
73
+ }): Promise<SettingValueRecord[]>;
74
+ deleteWorkspaceValue(required: {
75
+ workspaceId: string;
76
+ settingId: string;
77
+ }): Promise<void>;
78
+ deleteUserValue(required: {
79
+ workspaceId: string;
80
+ principalId: string;
81
+ settingId: string;
82
+ }): Promise<void>;
83
+ appendRevision(record: Omit<SettingRevisionRecord, "seq">): Promise<number>;
84
+ listRevisions(required: {
85
+ settingId: string;
86
+ }): Promise<SettingRevisionRecord[]>;
87
+ listRevisionsSince(required: {
88
+ sinceSeq: number;
89
+ limit: number;
90
+ workspaceId: string;
91
+ }): Promise<SettingRevisionRecord[]>;
92
+ maxRevisionSeq(): Promise<number>;
93
+ /**
94
+ * Runs `fn` atomically: every mutation it makes is discarded if it throws.
95
+ *
96
+ * A shallow copy of each array is enough because no method here mutates a
97
+ * record in place — `save*` REPLACES the element at its index, `delete*`
98
+ * reassigns a filtered array, `appendRevision` pushes. Restoring the arrays
99
+ * therefore restores the rows too. If a future method starts editing a
100
+ * record object in place, this must deep-copy instead.
101
+ *
102
+ * `nextSeq` is rolled back with the rest, matching SQLite: `sqlite_sequence`
103
+ * is an ordinary table, so an AUTOINCREMENT counter bumped inside a
104
+ * transaction is undone by its ROLLBACK. A seq handed out by a failed
105
+ * transaction is safe to reuse precisely because that revision no longer
106
+ * exists.
107
+ *
108
+ * **Deliberately NOT reentrant**, matching a SQLite adapter's `transaction`,
109
+ * where `BEGIN IMMEDIATE` inside an open transaction is an error. Refusing
110
+ * loudly is the point: an instance-level flag cannot tell "nested inside my
111
+ * caller's transaction" from "an unrelated transaction that started while
112
+ * mine was awaiting". Silently joining a stranger's transaction — and
113
+ * inheriting its rollback — is a worse defect than refusing. A caller that
114
+ * needs several writes to commit together opens ONE transaction and passes
115
+ * `skipTransaction` to the inner writes, as `resetNamespace` does.
116
+ */
117
+ transaction<T>(fn: () => Promise<T>): Promise<T>;
118
+ }
119
+ //# sourceMappingURL=repo.memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.d.ts","sourceRoot":"","sources":["../../src/settings/repo.memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * @file In-memory adapter for `SettingsRepoPort` (the rule-of-two: in-memory + production adapters).
3
+ *
4
+ * Purpose:
5
+ * Test/dev implementation. Mirrors the exact style of `identity/repo.memory.ts`:
6
+ * constructor takes seed rows, methods filter/mutate internal arrays.
7
+ *
8
+ * `transaction` is a real snapshot/restore journal, not a no-op wrapper. It
9
+ * used to be `async (fn) => fn()` on the reasoning that each individual
10
+ * mutation is already synchronous and atomic in-process — true, but the
11
+ * guarantee `SettingsRepoPort.transaction` actually sells is that a COMPOSITE
12
+ * of several mutations is all-or-nothing. `resetNamespace` clears a whole
13
+ * namespace inside one transaction; under a no-op wrapper a failure partway
14
+ * through left the namespace half reset while the caller saw an error. This
15
+ * adapter is a common wired default for dev/test composition, so that was
16
+ * live in dev, and the contract suite could not see it because the rollback
17
+ * assertion only ran against the SQLite adapter.
18
+ */
19
+ export class InMemorySettingsRepo {
20
+ definitions;
21
+ globalValues;
22
+ workspaceValues;
23
+ userValues;
24
+ revisions;
25
+ nextSeq;
26
+ /** True while `transaction` is open — see its doc for why this refuses
27
+ * rather than nests. */
28
+ inTransaction = false;
29
+ constructor(seed = {}) {
30
+ this.definitions = [...(seed.definitions ?? [])];
31
+ this.globalValues = [...(seed.globalValues ?? [])];
32
+ this.workspaceValues = [...(seed.workspaceValues ?? [])];
33
+ this.userValues = [...(seed.userValues ?? [])];
34
+ this.revisions = [...(seed.revisions ?? [])];
35
+ this.nextSeq = (seed.revisions?.reduce((max, r) => Math.max(max, r.seq), 0) ?? 0) + 1;
36
+ }
37
+ async findActiveDefinition(required) {
38
+ // Matches active/alias/tombstone (the "current" row for this (ns,key,ws)
39
+ // slot — callers decide how to react to each status, e.g. settings.ts
40
+ // treats tombstone as read-absent but write-service.ts reports it
41
+ // distinctly as DEFINITION_TOMBSTONED). Deliberately excludes
42
+ // `deprecated`: those are stale prior-version rows superseded by a newer
43
+ // active row at the same (ns,key,ws) slot (the retype mechanism), so
44
+ // including them would make this lookup ambiguous.
45
+ return (this.definitions.find((d) => d.namespace === required.namespace &&
46
+ d.key === required.key &&
47
+ d.workspaceId === required.workspaceId &&
48
+ (d.status === "active" || d.status === "alias" || d.status === "tombstone")) ?? null);
49
+ }
50
+ async findDefinitionBySettingId(required) {
51
+ const candidates = this.definitions.filter((d) => d.settingId === required.settingId);
52
+ if (required.version != null) {
53
+ return candidates.find((d) => d.version === required.version) ?? null;
54
+ }
55
+ return (candidates.find((d) => d.status === "active") ??
56
+ candidates.sort((a, b) => b.version - a.version)[0] ??
57
+ null);
58
+ }
59
+ async listActiveDefinitions(required) {
60
+ return this.definitions.filter((d) => d.workspaceId === required.workspaceId && (d.status === "active" || d.status === "alias"));
61
+ }
62
+ async saveDefinition(record) {
63
+ const index = this.definitions.findIndex((d) => d.settingId === record.settingId && d.version === record.version);
64
+ if (index === -1) {
65
+ this.definitions.push(record);
66
+ return;
67
+ }
68
+ this.definitions[index] = record;
69
+ }
70
+ async getGlobalValue(settingId) {
71
+ return this.globalValues.find((v) => v.settingId === settingId) ?? null;
72
+ }
73
+ async getWorkspaceValue(required) {
74
+ return (this.workspaceValues.find((v) => v.workspaceId === required.workspaceId && v.settingId === required.settingId) ?? null);
75
+ }
76
+ async getUserValue(required) {
77
+ return (this.userValues.find((v) => v.workspaceId === required.workspaceId &&
78
+ v.principalId === required.principalId &&
79
+ v.settingId === required.settingId) ?? null);
80
+ }
81
+ async saveGlobalValue(record) {
82
+ const index = this.globalValues.findIndex((v) => v.settingId === record.settingId);
83
+ if (index === -1) {
84
+ this.globalValues.push(record);
85
+ return;
86
+ }
87
+ this.globalValues[index] = record;
88
+ }
89
+ async saveWorkspaceValue(record) {
90
+ const index = this.workspaceValues.findIndex((v) => v.workspaceId === record.workspaceId && v.settingId === record.settingId);
91
+ if (index === -1) {
92
+ this.workspaceValues.push(record);
93
+ return;
94
+ }
95
+ this.workspaceValues[index] = record;
96
+ }
97
+ async saveUserValue(record) {
98
+ const index = this.userValues.findIndex((v) => v.workspaceId === record.workspaceId &&
99
+ v.principalId === record.principalId &&
100
+ v.settingId === record.settingId);
101
+ if (index === -1) {
102
+ this.userValues.push(record);
103
+ return;
104
+ }
105
+ this.userValues[index] = record;
106
+ }
107
+ async listWorkspaceValues(required) {
108
+ return this.workspaceValues.filter((v) => v.workspaceId === required.workspaceId);
109
+ }
110
+ async listUserValues(required) {
111
+ return this.userValues.filter((v) => v.workspaceId === required.workspaceId && v.principalId === required.principalId);
112
+ }
113
+ async listUserValuesByWorkspace(required) {
114
+ return this.userValues.filter((v) => v.workspaceId === required.workspaceId);
115
+ }
116
+ async deleteWorkspaceValue(required) {
117
+ this.workspaceValues = this.workspaceValues.filter((v) => !(v.workspaceId === required.workspaceId && v.settingId === required.settingId));
118
+ }
119
+ async deleteUserValue(required) {
120
+ this.userValues = this.userValues.filter((v) => !(v.workspaceId === required.workspaceId &&
121
+ v.principalId === required.principalId &&
122
+ v.settingId === required.settingId));
123
+ }
124
+ async appendRevision(record) {
125
+ const seq = this.nextSeq++;
126
+ this.revisions.push({ ...record, seq });
127
+ return seq;
128
+ }
129
+ async listRevisions(required) {
130
+ return this.revisions.filter((r) => r.settingId === required.settingId).sort((a, b) => a.seq - b.seq);
131
+ }
132
+ async listRevisionsSince(required) {
133
+ return this.revisions
134
+ .filter((r) => r.seq > required.sinceSeq &&
135
+ // Mirrors the SQL predicate exactly — see the port's doc. `null` means
136
+ // platform-wide (every workspace resolves through it); anything else is one tenant's.
137
+ (r.workspaceId === null || r.workspaceId === required.workspaceId))
138
+ .sort((a, b) => a.seq - b.seq)
139
+ .slice(0, required.limit);
140
+ }
141
+ async maxRevisionSeq() {
142
+ return this.revisions.reduce((max, r) => (r.seq > max ? r.seq : max), 0);
143
+ }
144
+ /**
145
+ * Runs `fn` atomically: every mutation it makes is discarded if it throws.
146
+ *
147
+ * A shallow copy of each array is enough because no method here mutates a
148
+ * record in place — `save*` REPLACES the element at its index, `delete*`
149
+ * reassigns a filtered array, `appendRevision` pushes. Restoring the arrays
150
+ * therefore restores the rows too. If a future method starts editing a
151
+ * record object in place, this must deep-copy instead.
152
+ *
153
+ * `nextSeq` is rolled back with the rest, matching SQLite: `sqlite_sequence`
154
+ * is an ordinary table, so an AUTOINCREMENT counter bumped inside a
155
+ * transaction is undone by its ROLLBACK. A seq handed out by a failed
156
+ * transaction is safe to reuse precisely because that revision no longer
157
+ * exists.
158
+ *
159
+ * **Deliberately NOT reentrant**, matching a SQLite adapter's `transaction`,
160
+ * where `BEGIN IMMEDIATE` inside an open transaction is an error. Refusing
161
+ * loudly is the point: an instance-level flag cannot tell "nested inside my
162
+ * caller's transaction" from "an unrelated transaction that started while
163
+ * mine was awaiting". Silently joining a stranger's transaction — and
164
+ * inheriting its rollback — is a worse defect than refusing. A caller that
165
+ * needs several writes to commit together opens ONE transaction and passes
166
+ * `skipTransaction` to the inner writes, as `resetNamespace` does.
167
+ */
168
+ async transaction(fn) {
169
+ if (this.inTransaction) {
170
+ throw new Error("InMemorySettingsRepo.transaction is not reentrant, and cannot host a second overlapping transaction. " +
171
+ "Open one transaction and pass `skipTransaction` to the inner writes (see resetNamespace).");
172
+ }
173
+ const snapshot = {
174
+ definitions: [...this.definitions],
175
+ globalValues: [...this.globalValues],
176
+ workspaceValues: [...this.workspaceValues],
177
+ userValues: [...this.userValues],
178
+ revisions: [...this.revisions],
179
+ nextSeq: this.nextSeq,
180
+ };
181
+ this.inTransaction = true;
182
+ try {
183
+ return await fn();
184
+ }
185
+ catch (error) {
186
+ this.definitions = snapshot.definitions;
187
+ this.globalValues = snapshot.globalValues;
188
+ this.workspaceValues = snapshot.workspaceValues;
189
+ this.userValues = snapshot.userValues;
190
+ this.revisions = snapshot.revisions;
191
+ this.nextSeq = snapshot.nextSeq;
192
+ throw error;
193
+ }
194
+ finally {
195
+ this.inTransaction = false;
196
+ }
197
+ }
198
+ }
199
+ //# sourceMappingURL=repo.memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.memory.js","sourceRoot":"","sources":["../../src/settings/repo.memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import type { JsonValue } from "../core/ports.js";
2
+ import { DefinitionInvalidError, SecretNotSupportedError } from "./errors.js";
3
+ import type { SettingsRepoPort } from "./ports.js";
4
+ import { type SettingDefinitionRecord, type SettingOwnerKind, type SettingScopeContext, type SettingValueSchema } from "./types.js";
5
+ /**
6
+ * @file The settings resolver + pure definition-registration validation
7
+ * (REQ-02, REQ-03, REQ-09; "one evaluator").
8
+ *
9
+ * Purpose:
10
+ * `validateDefinitionInput` is pure (no I/O) — the write-side chokepoint in
11
+ * `write-service.ts` calls it before persisting. `getEffective`/`getLayer`/
12
+ * `resolveDefinition` are read-only against `SettingsRepoPort`. Neither
13
+ * mutates anything; every mutation goes through `write-service.ts`.
14
+ */
15
+ export interface DefinitionInput {
16
+ namespace: string;
17
+ key: string;
18
+ ownerKind: SettingOwnerKind;
19
+ workspaceId: string | null;
20
+ ownerId?: string | null | undefined;
21
+ schema: SettingValueSchema;
22
+ defaultValue: JsonValue | null;
23
+ scopes: number;
24
+ secret: boolean;
25
+ }
26
+ /**
27
+ * REQ-02/REQ-09/INV-05/INV-08 — the pure half of `registerDefinitions`.
28
+ * Never throws; returns a discriminated result so the chokepoint decides how
29
+ * to surface the failure (matches `ValueValidationFailedError`'s pattern of
30
+ * keeping I/O out of validation).
31
+ *
32
+ * @complexity O(1) per definition.
33
+ * @overallScore 100
34
+ */
35
+ export declare function validateDefinitionInput(input: DefinitionInput): {
36
+ valid: true;
37
+ } | {
38
+ valid: false;
39
+ error: DefinitionInvalidError | SecretNotSupportedError;
40
+ };
41
+ export declare function validateValueAgainstSchema(schema: SettingValueSchema, value: JsonValue): boolean;
42
+ export declare function registerCoercer(tag: string, fn: (value: JsonValue) => JsonValue): void;
43
+ /**
44
+ * Bumps the namespace's definition-cache epoch (lazy invalidation) — every
45
+ * previously-cached definition-cache entry for this
46
+ * namespace (across every workspace) becomes unreachable on the next read,
47
+ * without needing to enumerate tenants. Call after any write that changes a
48
+ * definition's identity/shape/status in this namespace: register, rename
49
+ * (both the old and new namespace), retype, deprecate, tombstone.
50
+ */
51
+ export declare function invalidateDefinitionNamespaceCache(repo: SettingsRepoPort, namespace: string): void;
52
+ /**
53
+ * Purge support — now a no-op, deliberately kept rather than deleted.
54
+ *
55
+ * This cleared the workspace- and user-scope layer-cache entries a tenant/principal teardown
56
+ * invalidated, because a purge deletes an unbounded number of value rows across an unknown set of
57
+ * namespaces and per-namespace single-key invalidation was not practical for it. With the layer
58
+ * cache gone (see this module's cache header) there is nothing left to clear: the rows are deleted,
59
+ * and the next read goes to the repo and sees them gone.
60
+ *
61
+ * Kept as an explicit no-op instead of removed because of what it guards. `purge-service.ts` calls
62
+ * it as the last step of deleting a tenant's settings, and its correctness question — "can a purged
63
+ * value still be read back?" — is exactly the kind that must be answered again if anyone
64
+ * reintroduces caching. Deleting the call site would remove the place that question is asked. A
65
+ * cache added without restoring a purge hook is a tenant-teardown leak, so this stays as the seam.
66
+ */
67
+ export declare function invalidateWorkspaceSettingsCache(_repo: SettingsRepoPort, _workspaceId: string, _principalId?: string): void;
68
+ /**
69
+ * Follows an alias marker (depth <=1) to the current row and returns it as
70
+ * stored — status intact, including `tombstone`. `resolveDefinition` (below)
71
+ * is the read-path wrapper that collapses tombstone to typed-absent (EC-10);
72
+ * `write-service.ts` uses this raw form directly so it can report
73
+ * `DEFINITION_TOMBSTONED` distinctly from "not found".
74
+ */
75
+ export declare function resolveDefinitionRaw(deps: {
76
+ repo: SettingsRepoPort;
77
+ }, input: {
78
+ namespace: string;
79
+ key: string;
80
+ workspaceId: string | null;
81
+ }): Promise<SettingDefinitionRecord | null>;
82
+ /**
83
+ * The read-path resolver: typed-absent (`null`) for a tombstoned or
84
+ * missing key. Cached — keyed by
85
+ * `(workspaceId, namespace, key, namespace-epoch)`, so it is workspace-
86
+ * qualified by construction and invalidated wholesale by
87
+ * `invalidateDefinitionNamespaceCache` on any definition-lifecycle write
88
+ * (register/rename/retype/deprecate/tombstone). `resolveDefinitionRaw`
89
+ * itself stays uncached — the write chokepoint (`write-service.ts`) calls it
90
+ * directly so authorization/validation decisions are always made against
91
+ * live data, never a cached read.
92
+ */
93
+ export declare function resolveDefinition(deps: {
94
+ repo: SettingsRepoPort;
95
+ }, input: {
96
+ namespace: string;
97
+ key: string;
98
+ workspaceId: string | null;
99
+ }): Promise<SettingDefinitionRecord | null>;
100
+ export interface ResolvedSetting {
101
+ value: JsonValue | null;
102
+ sourceLayer: "user" | "workspace" | "global" | "default";
103
+ defVersion: number;
104
+ }
105
+ /**
106
+ * REQ-03/INV-02 — total for a live key: never throws, never returns
107
+ * undefined. Precedence `user ?? workspace ?? global ?? default`. A
108
+ * `cleared` row is treated as absent at that layer (behavior.spec §1.2).
109
+ *
110
+ * Per-layer reads go straight to the repo (see this module's cache header for
111
+ * why the per-layer value cache that used to wrap these three calls does not
112
+ * exist here).
113
+ *
114
+ * @complexity O(1) — up to 3 layer reads + 1 definition read.
115
+ * @overallScore 100
116
+ */
117
+ export declare function getEffective(deps: {
118
+ repo: SettingsRepoPort;
119
+ }, input: {
120
+ namespace: string;
121
+ key: string;
122
+ scopeContext: SettingScopeContext;
123
+ }): Promise<ResolvedSetting | null>;
124
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/settings/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAExB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;GASG;AAEH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,gBAAgB,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAQD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,GACrB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,sBAAsB,GAAG,uBAAuB,CAAA;CAAE,CAgD7F;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAiBhG;AAKD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,GAAG,IAAI,CAEtF;AAoED;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAGlG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAE3H;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,EAChC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACpE,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAqBzC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,EAChC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACpE,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAUzC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,EAChC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAE,GAC3E,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmDjC"}