@aphexcms/cms-core 9.8.0 → 9.9.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 (236) hide show
  1. package/dist/api/organizations.d.ts +2 -1
  2. package/dist/api/organizations.d.ts.map +1 -1
  3. package/dist/api/organizations.js +2 -1
  4. package/dist/api/schemas/jobs.d.ts +15 -0
  5. package/dist/api/schemas/jobs.d.ts.map +1 -0
  6. package/dist/api/schemas/jobs.js +17 -0
  7. package/dist/api/schemas/user.d.ts.map +1 -1
  8. package/dist/api/schemas/user.js +6 -2
  9. package/dist/auth/account-deletion.d.ts +35 -0
  10. package/dist/auth/account-deletion.d.ts.map +1 -0
  11. package/dist/auth/account-deletion.js +65 -0
  12. package/dist/auth/bootstrap.d.ts +104 -0
  13. package/dist/auth/bootstrap.d.ts.map +1 -0
  14. package/dist/auth/bootstrap.js +164 -0
  15. package/dist/auth/instance-state.d.ts +13 -0
  16. package/dist/auth/instance-state.d.ts.map +1 -0
  17. package/dist/auth/instance-state.js +30 -0
  18. package/dist/auth/invitation-status.d.ts +25 -0
  19. package/dist/auth/invitation-status.d.ts.map +1 -0
  20. package/dist/auth/invitation-status.js +41 -0
  21. package/dist/auth/sign-up-policy.d.ts +62 -0
  22. package/dist/auth/sign-up-policy.d.ts.map +1 -0
  23. package/dist/auth/sign-up-policy.js +120 -0
  24. package/dist/components/admin/ActivityView.svelte +263 -13
  25. package/dist/components/admin/ActivityView.svelte.d.ts +10 -1
  26. package/dist/components/admin/ActivityView.svelte.d.ts.map +1 -1
  27. package/dist/db/interfaces/events.d.ts +29 -2
  28. package/dist/db/interfaces/events.d.ts.map +1 -1
  29. package/dist/db/interfaces/index.d.ts +1 -0
  30. package/dist/db/interfaces/index.d.ts.map +1 -1
  31. package/dist/db/interfaces/index.js +1 -0
  32. package/dist/db/interfaces/instance.d.ts +29 -0
  33. package/dist/db/interfaces/instance.d.ts.map +1 -1
  34. package/dist/db/interfaces/instance.js +8 -1
  35. package/dist/events/built-in-consumers.d.ts +20 -0
  36. package/dist/events/built-in-consumers.d.ts.map +1 -0
  37. package/dist/events/built-in-consumers.js +49 -0
  38. package/dist/events/catalog.d.ts +16 -0
  39. package/dist/events/catalog.d.ts.map +1 -1
  40. package/dist/events/catalog.js +17 -0
  41. package/dist/events/consumer.d.ts +14 -0
  42. package/dist/events/consumer.d.ts.map +1 -1
  43. package/dist/events/consumer.js +1 -0
  44. package/dist/events/emit.d.ts +23 -0
  45. package/dist/events/emit.d.ts.map +1 -1
  46. package/dist/events/emit.js +32 -1
  47. package/dist/events/index.d.ts +2 -0
  48. package/dist/events/index.d.ts.map +1 -1
  49. package/dist/events/index.js +2 -0
  50. package/dist/field-validation/utils.d.ts +27 -4
  51. package/dist/field-validation/utils.d.ts.map +1 -1
  52. package/dist/field-validation/utils.js +78 -10
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3 -0
  56. package/dist/jobs/run-batch.d.ts +7 -1
  57. package/dist/jobs/run-batch.d.ts.map +1 -1
  58. package/dist/jobs/run-batch.js +3 -1
  59. package/dist/lib/api/organizations.d.ts +2 -1
  60. package/dist/lib/api/organizations.d.ts.map +1 -1
  61. package/dist/lib/api/organizations.js +2 -1
  62. package/dist/lib/api/organizations.js.map +1 -1
  63. package/dist/lib/api/schemas/api-keys.d.ts +4 -4
  64. package/dist/lib/api/schemas/jobs.d.ts +15 -0
  65. package/dist/lib/api/schemas/jobs.d.ts.map +1 -0
  66. package/dist/lib/api/schemas/jobs.js +18 -0
  67. package/dist/lib/api/schemas/jobs.js.map +1 -0
  68. package/dist/lib/api/schemas/user.d.ts.map +1 -1
  69. package/dist/lib/api/schemas/user.js +6 -2
  70. package/dist/lib/api/schemas/user.js.map +1 -1
  71. package/dist/lib/auth/account-deletion.d.ts +35 -0
  72. package/dist/lib/auth/account-deletion.d.ts.map +1 -0
  73. package/dist/lib/auth/account-deletion.js +66 -0
  74. package/dist/lib/auth/account-deletion.js.map +1 -0
  75. package/dist/lib/auth/bootstrap.d.ts +104 -0
  76. package/dist/lib/auth/bootstrap.d.ts.map +1 -0
  77. package/dist/lib/auth/bootstrap.js +165 -0
  78. package/dist/lib/auth/bootstrap.js.map +1 -0
  79. package/dist/lib/auth/instance-state.d.ts +13 -0
  80. package/dist/lib/auth/instance-state.d.ts.map +1 -0
  81. package/dist/lib/auth/instance-state.js +31 -0
  82. package/dist/lib/auth/instance-state.js.map +1 -0
  83. package/dist/lib/auth/invitation-status.d.ts +25 -0
  84. package/dist/lib/auth/invitation-status.d.ts.map +1 -0
  85. package/dist/lib/auth/invitation-status.js +42 -0
  86. package/dist/lib/auth/invitation-status.js.map +1 -0
  87. package/dist/lib/auth/sign-up-policy.d.ts +62 -0
  88. package/dist/lib/auth/sign-up-policy.d.ts.map +1 -0
  89. package/dist/lib/auth/sign-up-policy.js +121 -0
  90. package/dist/lib/auth/sign-up-policy.js.map +1 -0
  91. package/dist/lib/db/interfaces/events.d.ts +29 -2
  92. package/dist/lib/db/interfaces/events.d.ts.map +1 -1
  93. package/dist/lib/db/interfaces/index.d.ts +1 -0
  94. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  95. package/dist/lib/db/interfaces/index.js +1 -0
  96. package/dist/lib/db/interfaces/index.js.map +1 -1
  97. package/dist/lib/db/interfaces/instance.d.ts +29 -0
  98. package/dist/lib/db/interfaces/instance.d.ts.map +1 -1
  99. package/dist/lib/db/interfaces/instance.js +8 -1
  100. package/dist/lib/db/interfaces/instance.js.map +1 -1
  101. package/dist/lib/events/built-in-consumers.d.ts +20 -0
  102. package/dist/lib/events/built-in-consumers.d.ts.map +1 -0
  103. package/dist/lib/events/built-in-consumers.js +50 -0
  104. package/dist/lib/events/built-in-consumers.js.map +1 -0
  105. package/dist/lib/events/catalog.d.ts +16 -0
  106. package/dist/lib/events/catalog.d.ts.map +1 -1
  107. package/dist/lib/events/catalog.js +17 -0
  108. package/dist/lib/events/catalog.js.map +1 -1
  109. package/dist/lib/events/consumer.d.ts +14 -0
  110. package/dist/lib/events/consumer.d.ts.map +1 -1
  111. package/dist/lib/events/consumer.js +1 -0
  112. package/dist/lib/events/consumer.js.map +1 -1
  113. package/dist/lib/events/emit.d.ts +23 -0
  114. package/dist/lib/events/emit.d.ts.map +1 -1
  115. package/dist/lib/events/emit.js +32 -1
  116. package/dist/lib/events/emit.js.map +1 -1
  117. package/dist/lib/events/index.d.ts +2 -0
  118. package/dist/lib/events/index.d.ts.map +1 -1
  119. package/dist/lib/events/index.js +2 -0
  120. package/dist/lib/events/index.js.map +1 -1
  121. package/dist/lib/field-validation/utils.d.ts +27 -4
  122. package/dist/lib/field-validation/utils.d.ts.map +1 -1
  123. package/dist/lib/field-validation/utils.js +78 -10
  124. package/dist/lib/field-validation/utils.js.map +1 -1
  125. package/dist/lib/index.d.ts +1 -0
  126. package/dist/lib/index.d.ts.map +1 -1
  127. package/dist/lib/index.js +3 -0
  128. package/dist/lib/index.js.map +1 -1
  129. package/dist/lib/jobs/run-batch.d.ts +7 -1
  130. package/dist/lib/jobs/run-batch.d.ts.map +1 -1
  131. package/dist/lib/jobs/run-batch.js +3 -1
  132. package/dist/lib/jobs/run-batch.js.map +1 -1
  133. package/dist/lib/local-api/collection-api.d.ts +42 -1
  134. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  135. package/dist/lib/local-api/collection-api.js +68 -8
  136. package/dist/lib/local-api/collection-api.js.map +1 -1
  137. package/dist/lib/local-api/index.d.ts +1 -1
  138. package/dist/lib/local-api/index.d.ts.map +1 -1
  139. package/dist/lib/local-api/index.js +1 -1
  140. package/dist/lib/local-api/index.js.map +1 -1
  141. package/dist/lib/plugins/resolver.d.ts.map +1 -1
  142. package/dist/lib/plugins/resolver.js +7 -1
  143. package/dist/lib/plugins/resolver.js.map +1 -1
  144. package/dist/lib/server/api/rate-limit.d.ts +38 -0
  145. package/dist/lib/server/api/rate-limit.d.ts.map +1 -0
  146. package/dist/lib/server/api/rate-limit.js +71 -0
  147. package/dist/lib/server/api/rate-limit.js.map +1 -0
  148. package/dist/lib/server/api/routes/agent-change-sets.js +1 -1
  149. package/dist/lib/server/api/routes/agent-change-sets.js.map +1 -1
  150. package/dist/lib/server/api/routes/document-versions.js +1 -1
  151. package/dist/lib/server/api/routes/document-versions.js.map +1 -1
  152. package/dist/lib/server/api/routes/documents-by-id.d.ts.map +1 -1
  153. package/dist/lib/server/api/routes/documents-by-id.js +11 -2
  154. package/dist/lib/server/api/routes/documents-by-id.js.map +1 -1
  155. package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -1
  156. package/dist/lib/server/api/routes/documents-publish.js +11 -1
  157. package/dist/lib/server/api/routes/documents-publish.js.map +1 -1
  158. package/dist/lib/server/api/routes/documents.d.ts.map +1 -1
  159. package/dist/lib/server/api/routes/documents.js +10 -0
  160. package/dist/lib/server/api/routes/documents.js.map +1 -1
  161. package/dist/lib/server/api/routes/jobs.d.ts.map +1 -1
  162. package/dist/lib/server/api/routes/jobs.js +174 -20
  163. package/dist/lib/server/api/routes/jobs.js.map +1 -1
  164. package/dist/lib/server/api/routes/organizations-by-id.d.ts.map +1 -1
  165. package/dist/lib/server/api/routes/organizations-by-id.js +61 -3
  166. package/dist/lib/server/api/routes/organizations-by-id.js.map +1 -1
  167. package/dist/lib/server/api/routes/organizations-invitations.d.ts.map +1 -1
  168. package/dist/lib/server/api/routes/organizations-invitations.js +31 -2
  169. package/dist/lib/server/api/routes/organizations-invitations.js.map +1 -1
  170. package/dist/lib/server/api/routes/resolve-organization-names.d.ts +17 -0
  171. package/dist/lib/server/api/routes/resolve-organization-names.d.ts.map +1 -0
  172. package/dist/lib/server/api/routes/resolve-organization-names.js +26 -0
  173. package/dist/lib/server/api/routes/resolve-organization-names.js.map +1 -0
  174. package/dist/lib/server/api/routes/user.d.ts +0 -8
  175. package/dist/lib/server/api/routes/user.d.ts.map +1 -1
  176. package/dist/lib/server/api/routes/user.js +144 -0
  177. package/dist/lib/server/api/routes/user.js.map +1 -1
  178. package/dist/lib/server/index.d.ts +6 -1
  179. package/dist/lib/server/index.d.ts.map +1 -1
  180. package/dist/lib/server/index.js +9 -1
  181. package/dist/lib/server/index.js.map +1 -1
  182. package/dist/lib/services/references-service.d.ts +1 -1
  183. package/dist/lib/services/references-service.d.ts.map +1 -1
  184. package/dist/lib/types/capabilities.d.ts +14 -0
  185. package/dist/lib/types/capabilities.d.ts.map +1 -1
  186. package/dist/lib/types/capabilities.js +37 -18
  187. package/dist/lib/types/capabilities.js.map +1 -1
  188. package/dist/lib/types/events.d.ts +27 -4
  189. package/dist/lib/types/events.d.ts.map +1 -1
  190. package/dist/lib/utils/fetch-remote-file.d.ts.map +1 -1
  191. package/dist/lib/utils/fetch-remote-file.js +32 -3
  192. package/dist/lib/utils/fetch-remote-file.js.map +1 -1
  193. package/dist/local-api/collection-api.d.ts +42 -1
  194. package/dist/local-api/collection-api.d.ts.map +1 -1
  195. package/dist/local-api/collection-api.js +68 -8
  196. package/dist/local-api/index.d.ts +1 -1
  197. package/dist/local-api/index.d.ts.map +1 -1
  198. package/dist/local-api/index.js +1 -1
  199. package/dist/plugins/resolver.d.ts.map +1 -1
  200. package/dist/plugins/resolver.js +7 -1
  201. package/dist/server/api/rate-limit.d.ts +38 -0
  202. package/dist/server/api/rate-limit.d.ts.map +1 -0
  203. package/dist/server/api/rate-limit.js +70 -0
  204. package/dist/server/api/routes/agent-change-sets.js +1 -1
  205. package/dist/server/api/routes/document-versions.js +1 -1
  206. package/dist/server/api/routes/documents-by-id.d.ts.map +1 -1
  207. package/dist/server/api/routes/documents-by-id.js +11 -2
  208. package/dist/server/api/routes/documents-publish.d.ts.map +1 -1
  209. package/dist/server/api/routes/documents-publish.js +11 -1
  210. package/dist/server/api/routes/documents.d.ts.map +1 -1
  211. package/dist/server/api/routes/documents.js +10 -0
  212. package/dist/server/api/routes/jobs.d.ts.map +1 -1
  213. package/dist/server/api/routes/jobs.js +174 -20
  214. package/dist/server/api/routes/organizations-by-id.d.ts.map +1 -1
  215. package/dist/server/api/routes/organizations-by-id.js +61 -3
  216. package/dist/server/api/routes/organizations-invitations.d.ts.map +1 -1
  217. package/dist/server/api/routes/organizations-invitations.js +31 -2
  218. package/dist/server/api/routes/resolve-organization-names.d.ts +17 -0
  219. package/dist/server/api/routes/resolve-organization-names.d.ts.map +1 -0
  220. package/dist/server/api/routes/resolve-organization-names.js +25 -0
  221. package/dist/server/api/routes/user.d.ts +0 -8
  222. package/dist/server/api/routes/user.d.ts.map +1 -1
  223. package/dist/server/api/routes/user.js +144 -0
  224. package/dist/server/index.d.ts +6 -1
  225. package/dist/server/index.d.ts.map +1 -1
  226. package/dist/server/index.js +9 -1
  227. package/dist/services/references-service.d.ts +1 -1
  228. package/dist/services/references-service.d.ts.map +1 -1
  229. package/dist/types/capabilities.d.ts +14 -0
  230. package/dist/types/capabilities.d.ts.map +1 -1
  231. package/dist/types/capabilities.js +37 -18
  232. package/dist/types/events.d.ts +27 -4
  233. package/dist/types/events.d.ts.map +1 -1
  234. package/dist/utils/fetch-remote-file.d.ts.map +1 -1
  235. package/dist/utils/fetch-remote-file.js +32 -3
  236. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/lib/types/capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/lib/types/capabilities.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,sEAAsE;AAgCtE,sEAAsE;AACtE,+EAA+E;AAC/E,8EAA8E;AAC9E,uEAAuE;AAEvE;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA0B;IACtD,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,YAAY;IACZ,cAAc;IACd,cAAc;IACd,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,aAAa;IACb,cAAc;IACd,wBAAwB;CACf,CAAC;AAmBX;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC/B,EAAU,EACV,OAAkD,EAAE;IAEpD,OAAO;QACN,EAAE;QACF,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC,EAAE,CAAC;QAC7C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;KACjB,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAoC;IACvE;QACC,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,mCAAmC;KAChD;IACD;QACC,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,uBAAuB;KACpC;IACD;QACC,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,0BAA0B;KACvC;IACD;QACC,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,mBAAmB;KAChC;IACD;QACC,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,mBAAmB;QAC1B,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,kCAAkC;KAC/C;IACD;QACC,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,qBAAqB;QAC5B,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,sCAAsC;KACnD;IACD;QACC,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,2BAA2B;KACxC;IACD;QACC,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,oCAAoC;KACjD;IACD;QACC,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,sCAAsC;KACnD;IACD;QACC,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,oCAAoC;KACjD;IACD;QACC,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,sCAAsC;KACnD;IACD;QACC,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,qBAAqB;QAC5B,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,yBAAyB;KACtC;IACD;QACC,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,iBAAiB;QACxB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,6BAA6B;KAC1C;IACD;QACC,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,cAAc;QACrB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,+BAA+B;KAC5C;IACD;QACC,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,+BAA+B;KAC5C;IACD;QACC,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,gEAAgE;KAC7E;CACD,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACrC,QAAyC,EAAE;IAE3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAgC,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,uBAAuB,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC9D,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;CACR,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAG1B;IACH,MAAM,EAAE;QACP,WAAW,EAAE,2CAA2C;QACxD,YAAY,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC;KAC7C;IACD,MAAM,EAAE;QACP,WAAW,EAAE,oCAAoC;QACjD,YAAY,EAAE;YACb,eAAe;YACf,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,kBAAkB;YAClB,oBAAoB;YACpB,YAAY;YACZ,cAAc;YACd,cAAc;SACd;KACD;IACD,KAAK,EAAE;QACN,WAAW,EAAE,8DAA8D;QAC3E,YAAY,EAAE;YACb,eAAe;YACf,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,kBAAkB;YAClB,oBAAoB;YACpB,YAAY;YACZ,cAAc;YACd,cAAc;YACd,eAAe;YACf,eAAe;YACf,mBAAmB;YACnB,eAAe;YACf,aAAa;YACb,cAAc;YACd,wBAAwB;SACxB;KACD;IACD,KAAK,EAAE;QACN,WAAW,EAAE,8CAA8C;QAC3D,YAAY,EAAE,gBAAgB;KAC9B;CACD,CAAC;AAEF;;;GAGG;AACH,MAAM,mBAAmB,GAA0B;IAClD,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;CACpB,CAAC;AACF,MAAM,gBAAgB,GAA0B,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,CAAC;IAClC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1E,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AA2BD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,cAAsB;IAC1D,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxC,cAAc;QACd,IAAI;QACJ,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,WAAW;QAChD,YAAY,EAAE,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;QACvD,SAAS,EAAE,IAAI;KACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AAElE,MAAM,UAAU,cAAc,CAAC,IAAU;IACxC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,UAAsC;IAC/E,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAClD,CAAC;AAED,+CAA+C;AAC/C,MAAM,yBAAyB,GAAG,CAAC,eAAe,EAAE,YAAY,CAAU,CAAC;AAE3E,iDAAiD;AACjD,MAAM,0BAA0B,GAAG;IAClC,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,cAAc;IACd,cAAc;CACL,CAAC;AAEX;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAA8B;IACtE,MAAM,IAAI,GAAa,CAAC,GAAG,yBAAyB,CAAC,CAAC;IACtD,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAU;IAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAElD,uDAAuD;IACvD,IAAI,cAAc,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,GAAG,CAAS,gBAAgB,CAAC,CAAC;IAC1C,CAAC;IAED,4EAA4E;IAC5E,wEAAwE;IACxE,uEAAuE;IACvE,6EAA6E;IAC7E,qBAAqB;IACrB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,6DAA6D;IAC7D,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,gBAAoC,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAS,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAU;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAChE,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,KAAK,GAA4B,IAAI,GAAG,EAAc,CAAC"}
@@ -113,17 +113,23 @@ export interface Page<T> {
113
113
  limit: number;
114
114
  offset: number;
115
115
  }
116
- /** Query for the read-only event history. Newest first. */
116
+ /**
117
+ * Query for the read-only event history. Newest first.
118
+ *
119
+ * Omit `organizationId` to read across every organization — the instance-wide view.
120
+ * Only two callers may do that: the worker (which has override access by construction)
121
+ * and a super admin in the admin history view. Anything request-scoped must pass an id.
122
+ */
117
123
  export interface ListEventsOptions {
118
- organizationId: string;
124
+ organizationId?: string;
119
125
  /** Filter by exact event type (e.g. `document.published`). */
120
126
  type?: string;
121
127
  limit?: number;
122
128
  offset?: number;
123
129
  }
124
- /** Query for the read-only job history. Newest first. */
130
+ /** Query for the read-only job history. Newest first. Omitting `organizationId` reads instance-wide — see `ListEventsOptions`. */
125
131
  export interface ListJobsOptions {
126
- organizationId: string;
132
+ organizationId?: string;
127
133
  /** Filter by one status or several (e.g. only `failed`). */
128
134
  status?: JobStatus | JobStatus[];
129
135
  /** Filter by exact job type. */
@@ -131,4 +137,21 @@ export interface ListJobsOptions {
131
137
  limit?: number;
132
138
  offset?: number;
133
139
  }
140
+ /**
141
+ * The relay's backlog, as a health signal.
142
+ *
143
+ * This is the one number that distinguishes "nothing happened" from "nothing is being
144
+ * processed". Jobs and events both look quiet-but-healthy when no worker is calling
145
+ * `POST /api/internal/workers/run`; a growing outbox backlog is the only place that
146
+ * shows up, because emission still writes rows that nobody is draining.
147
+ *
148
+ * `oldestPendingAt` matters more than `pending`: a big count that is seconds old is a
149
+ * busy instance, while a single row an hour old means the relay has stopped.
150
+ */
151
+ export interface OutboxHealth {
152
+ /** Rows with `processedAt IS NULL`. */
153
+ pending: number;
154
+ /** `createdAt` of the oldest unprocessed row, or null when the backlog is empty. */
155
+ oldestPendingAt: Date | null;
156
+ }
134
157
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/lib/types/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/lib/types/events.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-remote-file.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/fetch-remote-file.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AA6EtD,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;sBAGsB;AACtB,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAuEtE"}
1
+ {"version":3,"file":"fetch-remote-file.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/fetch-remote-file.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AA6EtD,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;sBAGsB;AACtB,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA0EtE"}
@@ -11,7 +11,35 @@
11
11
  // that gets validated and the address that gets connected to must be the exact same one.
12
12
  import { lookup } from 'node:dns/promises';
13
13
  import net from 'node:net';
14
- import { Agent, fetch as undiciFetch } from 'undici';
14
+ // Loading `undici` is deferred, and Node's own dispatcher is forced into place first. That
15
+ // ordering is the whole point of this function, and getting it wrong breaks something far away:
16
+ //
17
+ // Node's built-in fetch and the userland `undici` package share one slot —
18
+ // `globalThis[Symbol.for('undici.globalDispatcher.1')]` — and whoever writes it first wins.
19
+ // Importing `undici` claims that slot if it's still empty, and on Node 24+ the *built-in* fetch
20
+ // then routes through this bundled userland copy (as a `Dispatcher1Wrapper`). Its stricter
21
+ // `processHeader` rejects an explicit `content-length`, which the S3 client sets on every PUT — so
22
+ // merely importing this module killed every S3/R2 upload in the process with "invalid
23
+ // content-length header".
24
+ //
25
+ // The slot is non-configurable once set, and Node caches its wrapper internally, so this can't be
26
+ // undone after the fact: writing the symbol back (even to `undefined`) leaves fetch broken. The
27
+ // only fix is to not lose the race. A `data:` fetch resolves entirely in-process — no socket, no
28
+ // DNS — and is enough to make Node install its dispatcher, after which undici's import leaves the
29
+ // slot alone and both work.
30
+ //
31
+ // This module hangs off the `/server` barrel (server/index.ts → mcp/tools → here), so with a
32
+ // static `import` every Aphex app broke its own uploads at boot. It only showed in production:
33
+ // `vite dev` loads SSR modules lazily, so a real request usually primed Node's dispatcher first,
34
+ // while a production build imports the graph eagerly at startup and undici gets there first.
35
+ let undiciPromise;
36
+ function loadUndici() {
37
+ undiciPromise ??= (async () => {
38
+ await fetch('data:text/plain,0').catch(() => undefined);
39
+ return import('undici');
40
+ })();
41
+ return undiciPromise;
42
+ }
15
43
  export const MAX_REMOTE_FILE_BYTES = 10 * 1024 * 1024; // matches the API's global JSON body cap
16
44
  const FETCH_TIMEOUT_MS = 10_000;
17
45
  const MAX_REDIRECTS = 5;
@@ -79,7 +107,7 @@ async function resolvePinnedHost(hostname) {
79
107
  * whatever hostname undici asks it to resolve, it hands back this exact IP, so the socket that
80
108
  * actually opens is guaranteed to be the one that passed `isPrivateOrReservedIp`. The hostname
81
109
  * itself still flows through normally for the Host header and TLS SNI/cert validation. */
82
- function pinnedDispatcher(host) {
110
+ function pinnedDispatcher(Agent, host) {
83
111
  return new Agent({
84
112
  connect: {
85
113
  lookup: (_hostname, options, callback) => {
@@ -94,6 +122,7 @@ function pinnedDispatcher(host) {
94
122
  * hop), a request timeout, and a streamed size cap (not just a Content-Length check, since that
95
123
  * header can lie). */
96
124
  export async function fetchRemoteFile(url) {
125
+ const { Agent, fetch: undiciFetch } = await loadUndici();
97
126
  let current = url;
98
127
  for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {
99
128
  const parsed = new URL(current);
@@ -112,7 +141,7 @@ export async function fetchRemoteFile(url) {
112
141
  res = await undiciFetch(current, {
113
142
  redirect: 'manual',
114
143
  signal: controller.signal,
115
- dispatcher: pinnedDispatcher(pinnedHost),
144
+ dispatcher: pinnedDispatcher(Agent, pinnedHost),
116
145
  headers: REQUEST_HEADERS
117
146
  });
118
147
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-remote-file.js","sourceRoot":"","sources":["../../../src/lib/utils/fetch-remote-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-remote-file.js","sourceRoot":"","sources":["../../../src/lib/utils/fetch-remote-file.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import type { Document } from '../types/document.js';
8
8
  import type { LocalAPIContext } from './types.js';
9
9
  import type { SchemaType } from '../types/schemas.js';
10
10
  import { PermissionChecker } from './permissions.js';
11
- import { type DocumentValidationResult } from '../field-validation/utils.js';
11
+ import { type DocumentValidationResult, type FieldErrors } from '../field-validation/utils.js';
12
12
  import type { Job } from '../types/events.js';
13
13
  /**
14
14
  * Result from create/update operations that includes validation
@@ -25,6 +25,22 @@ export interface DocumentResult<T> {
25
25
  export declare class SingletonOperationError extends Error {
26
26
  constructor(message: string);
27
27
  }
28
+ /**
29
+ * Thrown when a write is rejected as *malformed* — a field the schema never
30
+ * declared, or a value of the wrong shape. The caller sent bad data, so this is
31
+ * a 400, not a 500.
32
+ *
33
+ * It exists as a type because the alternative was route handlers sniffing
34
+ * `error.message.includes('validation errors')`, which the structural message
35
+ * ("Invalid document data - …") doesn't match — so every rejected payload was
36
+ * reported to HTTP and MCP clients as a server error. Carries the structured
37
+ * `errors` so a handler (or an agent) can name the offending fields without
38
+ * parsing prose.
39
+ */
40
+ export declare class DocumentValidationError extends Error {
41
+ readonly errors: FieldErrors[];
42
+ constructor(message: string, errors: FieldErrors[]);
43
+ }
28
44
  /**
29
45
  * Subset of CollectionAPI methods that are valid on a singleton schema.
30
46
  * Codegen emits this type for singleton entries in the Collections interface
@@ -92,6 +108,31 @@ export declare class CollectionAPI<T = Document> {
92
108
  find(context: LocalAPIContext, options?: FindOptions<T>): Promise<FindResult<T>>;
93
109
  private resolveHiddenReadFields;
94
110
  private resolveHiddenWriteFields;
111
+ /**
112
+ * Fetch a document by ID, scoped to this collection.
113
+ *
114
+ * Every permission check here is evaluated against `this.collectionName`, but
115
+ * document IDs are globally unique — so a lookup that matched on ID alone let a
116
+ * caller authorised for one collection read or mutate a known ID belonging to a
117
+ * restricted one, through the Local API, GraphQL, or MCP alike.
118
+ *
119
+ * A type mismatch is reported as "not found" rather than "forbidden" on purpose:
120
+ * the caller has no permission to learn that the ID exists elsewhere.
121
+ *
122
+ * Deliberately *not* used for reference lookups in `publish`, which resolve
123
+ * documents of arbitrary types by design.
124
+ */
125
+ /**
126
+ * Reject a write whose payload is malformed, draft or not.
127
+ *
128
+ * Drafts skip *content* validation on purpose — you must be able to save
129
+ * half-finished work. But "incomplete" and "malformed" are different
130
+ * questions: a missing title is a draft, a string where an array belongs (or a
131
+ * field the schema never declared) is corruption, and letting it through means
132
+ * it's already in storage by the time anyone validates at publish.
133
+ */
134
+ private assertStructurallyValid;
135
+ private findOwnDocById;
95
136
  /**
96
137
  * Find a single document by ID
97
138
  *
@@ -1 +1 @@
1
- {"version":3,"file":"collection-api.d.ts","sourceRoot":"","sources":["../../src/lib/local-api/collection-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collection-api.d.ts","sourceRoot":"","sources":["../../src/lib/local-api/collection-api.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,26 @@ export class SingletonOperationError extends Error {
75
75
  this.name = 'SingletonOperationError';
76
76
  }
77
77
  }
78
+ /**
79
+ * Thrown when a write is rejected as *malformed* — a field the schema never
80
+ * declared, or a value of the wrong shape. The caller sent bad data, so this is
81
+ * a 400, not a 500.
82
+ *
83
+ * It exists as a type because the alternative was route handlers sniffing
84
+ * `error.message.includes('validation errors')`, which the structural message
85
+ * ("Invalid document data - …") doesn't match — so every rejected payload was
86
+ * reported to HTTP and MCP clients as a server error. Carries the structured
87
+ * `errors` so a handler (or an agent) can name the offending fields without
88
+ * parsing prose.
89
+ */
90
+ export class DocumentValidationError extends Error {
91
+ errors;
92
+ constructor(message, errors) {
93
+ super(message);
94
+ this.errors = errors;
95
+ this.name = 'DocumentValidationError';
96
+ }
97
+ }
78
98
  /**
79
99
  * Collection API - provides type-safe operations for a single collection
80
100
  * Generic type T represents the document type for this collection
@@ -229,6 +249,43 @@ export class CollectionAPI {
229
249
  return EMPTY_SET;
230
250
  return hiddenWriteFields(this._schema, context.auth);
231
251
  }
252
+ /**
253
+ * Fetch a document by ID, scoped to this collection.
254
+ *
255
+ * Every permission check here is evaluated against `this.collectionName`, but
256
+ * document IDs are globally unique — so a lookup that matched on ID alone let a
257
+ * caller authorised for one collection read or mutate a known ID belonging to a
258
+ * restricted one, through the Local API, GraphQL, or MCP alike.
259
+ *
260
+ * A type mismatch is reported as "not found" rather than "forbidden" on purpose:
261
+ * the caller has no permission to learn that the ID exists elsewhere.
262
+ *
263
+ * Deliberately *not* used for reference lookups in `publish`, which resolve
264
+ * documents of arbitrary types by design.
265
+ */
266
+ /**
267
+ * Reject a write whose payload is malformed, draft or not.
268
+ *
269
+ * Drafts skip *content* validation on purpose — you must be able to save
270
+ * half-finished work. But "incomplete" and "malformed" are different
271
+ * questions: a missing title is a draft, a string where an array belongs (or a
272
+ * field the schema never declared) is corruption, and letting it through means
273
+ * it's already in storage by the time anyone validates at publish.
274
+ */
275
+ assertStructurallyValid(result) {
276
+ if (result.structuralErrors.length === 0)
277
+ return;
278
+ const detail = result.structuralErrors
279
+ .map((e) => `${e.field}: ${e.errors.join(', ')}`)
280
+ .join('; ');
281
+ throw new DocumentValidationError(`Invalid document data - ${detail}`, result.structuralErrors);
282
+ }
283
+ async findOwnDocById(organizationId, id, options) {
284
+ const doc = await this.databaseAdapter.findByDocIdAdvanced(organizationId, id, options);
285
+ if (!doc || doc.type !== this.collectionName)
286
+ return null;
287
+ return doc;
288
+ }
232
289
  /**
233
290
  * Find a single document by ID
234
291
  *
@@ -259,7 +316,7 @@ export class CollectionAPI {
259
316
  const orgIds = await this.hierarchyService.getOrgIdsWithChildren(context.organizationId);
260
317
  findOptions.filterOrganizationIds = orgIds;
261
318
  }
262
- const result = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id, findOptions);
319
+ const result = await this.findOwnDocById(context.organizationId, id, findOptions);
263
320
  if (!result) {
264
321
  return null;
265
322
  }
@@ -318,6 +375,7 @@ export class CollectionAPI {
318
375
  validation: {
319
376
  isValid: true,
320
377
  errors: [],
378
+ structuralErrors: [],
321
379
  normalizedData: existing
322
380
  }
323
381
  };
@@ -342,6 +400,7 @@ export class CollectionAPI {
342
400
  // Validate and normalize data (dates converted to ISO). The document context
343
401
  // for cross-field validators is built inside validateDocumentData.
344
402
  const validationResult = await validateDocumentData(this._schema, hookedData);
403
+ this.assertStructurallyValid(validationResult);
345
404
  if (options?.publish) {
346
405
  await this.permissions.canPublish(context, this.collectionName);
347
406
  // Block publish if validation fails
@@ -450,7 +509,7 @@ export class CollectionAPI {
450
509
  // Fetch the doc first so ownership policies have access to the target.
451
510
  // A missing doc still returns null below; capability/role rules stay
452
511
  // unaffected by the reorder.
453
- const existingDoc = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
512
+ const existingDoc = await this.findOwnDocById(context.organizationId, id);
454
513
  if (!existingDoc) {
455
514
  return null;
456
515
  }
@@ -482,6 +541,7 @@ export class CollectionAPI {
482
541
  });
483
542
  // Validate and normalize the merged data
484
543
  const validationResult = await validateDocumentData(this._schema, hookedData);
544
+ this.assertStructurallyValid(validationResult);
485
545
  // Update draft with normalized data (dates in ISO format)
486
546
  // Use VersionService for atomic save + version creation if available
487
547
  // RevisionConflictError propagates un-swallowed — a stale caller (a second
@@ -544,7 +604,7 @@ export class CollectionAPI {
544
604
  // Fetch the target so ownership policies have a doc to inspect. For
545
605
  // role/capability rules this extra read is a small cost; ergonomic
546
606
  // wins outweigh it for operations that are rare by nature.
547
- const existing = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
607
+ const existing = await this.findOwnDocById(context.organizationId, id);
548
608
  if (!existing)
549
609
  return false;
550
610
  await this.permissions.canDelete(context, this.collectionName, existing);
@@ -584,7 +644,7 @@ export class CollectionAPI {
584
644
  async publish(context, id, options) {
585
645
  // Fetch first so policies can inspect the target. Order matters here:
586
646
  // 404s beat 403s for missing docs.
587
- const document = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
647
+ const document = await this.findOwnDocById(context.organizationId, id);
588
648
  if (!document || !document.draftData) {
589
649
  throw new Error('Document not found or has no draft content to publish');
590
650
  }
@@ -646,7 +706,7 @@ export class CollectionAPI {
646
706
  */
647
707
  async unpublish(context, id, options) {
648
708
  // Fetch target for policy inspection before mutating.
649
- const existing = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
709
+ const existing = await this.findOwnDocById(context.organizationId, id);
650
710
  if (!existing)
651
711
  return null;
652
712
  await this.permissions.canUnpublish(context, this.collectionName, existing);
@@ -708,7 +768,7 @@ export class CollectionAPI {
708
768
  * so a document has at most one pending schedule (rescheduling can't double-publish).
709
769
  */
710
770
  async schedulePublish(context, id, runAt) {
711
- const document = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
771
+ const document = await this.findOwnDocById(context.organizationId, id);
712
772
  if (!document)
713
773
  throw new Error('Document not found');
714
774
  await this.permissions.canPublish(context, this.collectionName, document);
@@ -725,7 +785,7 @@ export class CollectionAPI {
725
785
  }
726
786
  /** Schedule an unpublish for a future `runAt`. Permission-checked now; replaces any existing pending schedule. */
727
787
  async scheduleUnpublish(context, id, runAt) {
728
- const document = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
788
+ const document = await this.findOwnDocById(context.organizationId, id);
729
789
  if (!document)
730
790
  throw new Error('Document not found');
731
791
  await this.permissions.canUnpublish(context, this.collectionName, document);
@@ -747,7 +807,7 @@ export class CollectionAPI {
747
807
  }
748
808
  /** Cancel all pending scheduled publish/unpublish jobs for a document. Returns how many were cancelled. */
749
809
  async cancelScheduled(context, id) {
750
- const document = await this.databaseAdapter.findByDocIdAdvanced(context.organizationId, id);
810
+ const document = await this.findOwnDocById(context.organizationId, id);
751
811
  if (!document)
752
812
  throw new Error('Document not found');
753
813
  await this.permissions.canPublish(context, this.collectionName, document);
@@ -149,7 +149,7 @@ export declare function createLocalAPI(config: CMSConfig, userAdapter: DatabaseA
149
149
  * ```
150
150
  */
151
151
  export declare function getLocalAPI(): LocalAPI;
152
- export { CollectionAPI, SingletonOperationError, type DocumentResult, type SingletonCollection } from './collection-api.js';
152
+ export { CollectionAPI, SingletonOperationError, DocumentValidationError, type DocumentResult, type SingletonCollection } from './collection-api.js';
153
153
  export { PermissionChecker, PermissionError } from './permissions.js';
154
154
  export type { LocalAPIContext, CreateOptions, UpdateOptions } from './types.js';
155
155
  export { authToContext, requireAuth, systemContext } from './auth-helpers.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/local-api/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/local-api/index.ts"],"names":[],"mappings":"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"}
@@ -270,6 +270,6 @@ export function getLocalAPI() {
270
270
  return localAPIInstance;
271
271
  }
272
272
  // Re-export types and classes for convenience
273
- export { CollectionAPI, SingletonOperationError } from './collection-api.js';
273
+ export { CollectionAPI, SingletonOperationError, DocumentValidationError } from './collection-api.js';
274
274
  export { PermissionChecker, PermissionError } from './permissions.js';
275
275
  export { authToContext, requireAuth, systemContext } from './auth-helpers.js';
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,YAAY,EACZ,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAGN,KAAK,oBAAoB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,KAAK,MAAM,CAAC,CAAC,SAAS,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,yEAAyE;IACzE,WAAW,IAAI,UAAU,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;IAC3D,gDAAgD;IAChD,YAAY,IAAI,eAAe,EAAE,CAAC;IAClC,8DAA8D;IAC9D,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB;oEACgE;IAChE,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;IAC5C,sFAAsF;IACtF,eAAe,CAAC,IAAI,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,cAAc,CAAC,EAAE,OAAO,CAAC;KACzB,GAAG,kBAAkB,EAAE,CAAC;IACzB,mDAAmD;IACnD,UAAU,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,EAAE,CAAC;IAC1F,sEAAsE;IACtE,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC9D,+DAA+D;IAC/D,oBAAoB,IAAI,YAAY,EAAE,CAAC;IACvC,8DAA8D;IAC9D,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAChE;;;;OAIG;IACH,WAAW,IAAI,aAAa,CAAC;IAC7B,gHAAgH;IAChH,cAAc,IAAI,iBAAiB,EAAE,CAAC;IACtC,mFAAmF;IACnF,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAC1D;;;;;OAKG;IACH,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,aAAa,EAAE,CAAC;CAC7F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,SAAS,EAAO,GAAG,YAAY,CA0G1E"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/plugins/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,YAAY,EACZ,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAGN,KAAK,oBAAoB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,KAAK,MAAM,CAAC,CAAC,SAAS,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,yEAAyE;IACzE,WAAW,IAAI,UAAU,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;IAC3D,gDAAgD;IAChD,YAAY,IAAI,eAAe,EAAE,CAAC;IAClC,8DAA8D;IAC9D,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB;oEACgE;IAChE,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;IAC5C,sFAAsF;IACtF,eAAe,CAAC,IAAI,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,cAAc,CAAC,EAAE,OAAO,CAAC;KACzB,GAAG,kBAAkB,EAAE,CAAC;IACzB,mDAAmD;IACnD,UAAU,CAAC,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,EAAE,CAAC;IAC1F,sEAAsE;IACtE,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC9D,+DAA+D;IAC/D,oBAAoB,IAAI,YAAY,EAAE,CAAC;IACvC,8DAA8D;IAC9D,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAChE;;;;OAIG;IACH,WAAW,IAAI,aAAa,CAAC;IAC7B,gHAAgH;IAChH,cAAc,IAAI,iBAAiB,EAAE,CAAC;IACtC,mFAAmF;IACnF,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAC1D;;;;;OAKG;IACH,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,aAAa,EAAE,CAAC;CAC7F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,SAAS,EAAO,GAAG,YAAY,CA+G1E"}
@@ -1,6 +1,12 @@
1
1
  import { defineCapability, mergeCapabilityCatalog } from '../types/capabilities.js';
2
+ import { BUILT_IN_EVENT_CONSUMERS } from '../events/built-in-consumers.js';
2
3
  export function createPartResolver(plugins = []) {
3
- const allParts = plugins.flatMap((p) => p.parts ?? []);
4
+ // Core's own consumers come first, so a plugin declaring the same id collides in the
5
+ // duplicate check below rather than silently shadowing erasure.
6
+ const allParts = [
7
+ ...BUILT_IN_EVENT_CONSUMERS,
8
+ ...plugins.flatMap((p) => p.parts ?? [])
9
+ ];
4
10
  // Duplicate-id validation, per extension point. Parts without an id (schema,
5
11
  // capabilities, field-component) are exempt.
6
12
  const seen = new Map();
@@ -0,0 +1,38 @@
1
+ export interface RateLimitRule {
2
+ /** Window length in milliseconds. */
3
+ windowMs: number;
4
+ /** Requests allowed per window. */
5
+ max: number;
6
+ }
7
+ export interface RateLimitResult {
8
+ allowed: boolean;
9
+ /** Seconds until the current window rolls over — for a `Retry-After` header. */
10
+ retryAfterSeconds: number;
11
+ }
12
+ /**
13
+ * A named bucket of windows.
14
+ *
15
+ * Entries are swept lazily on write rather than on a timer: an interval would keep a
16
+ * reference alive for the process's whole life (and in a test run, past the end of the
17
+ * suite), and the map only grows when requests are arriving anyway.
18
+ */
19
+ export declare class RateLimiter {
20
+ private rule;
21
+ private windows;
22
+ private lastSweep;
23
+ constructor(rule: RateLimitRule);
24
+ /** Count one request against `key`, and say whether it may proceed. */
25
+ check(key: string): RateLimitResult;
26
+ /** Drop windows that have already rolled over. Runs at most once per window length. */
27
+ private sweep;
28
+ }
29
+ /**
30
+ * Best-effort client address for rate-limit keying.
31
+ *
32
+ * `x-forwarded-for` is caller-supplied and trivially spoofed unless a trusted proxy sets it,
33
+ * so an IP bucket alone is not a control — it's the half that stops casual abuse. Pair it
34
+ * with a bucket on something the attacker can't rotate freely (the target email address) so
35
+ * the limit still bites when the address is forged.
36
+ */
37
+ export declare function clientAddress(headers: Headers): string;
38
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/lib/server/api/rate-limit.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,aAAa;IAC7B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,qBAAa,WAAW;IAIX,OAAO,CAAC,IAAI;IAHxB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAK;gBAEF,IAAI,EAAE,aAAa;IAEvC,uEAAuE;IACvE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAkBnC,uFAAuF;IACvF,OAAO,CAAC,KAAK;CAOb;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAKtD"}
@@ -0,0 +1,70 @@
1
+ // A small fixed-window rate limiter for the unauthenticated endpoints cms-core exposes.
2
+ //
3
+ // Why this exists at all: the auth provider rate-limits its *own* HTTP endpoints, but the
4
+ // CMS facades (`POST /api/user/request-password-reset`, `/reset-password`) call the provider
5
+ // server-side. Better Auth's limiter — like its other request-shaped guards — only engages
6
+ // for calls that arrived over HTTP with a `ctx.request`, so an in-process call sails past it.
7
+ // The facades were therefore completely unthrottled: an email-sending endpoint and a
8
+ // token-checking endpoint, both reachable by anyone.
9
+ //
10
+ // Scope, stated plainly: this is per-process memory. Behind N app instances the effective
11
+ // limit is N× what's configured, and a restart forgets every window. That is a real
12
+ // weakening, and a deployment that needs a hard guarantee should put a limiter in front of
13
+ // the app or back this with the shared cache. It is still worth having — it turns "unlimited"
14
+ // into "bounded per instance", which is the difference between an email bomb and a nuisance.
15
+ /**
16
+ * A named bucket of windows.
17
+ *
18
+ * Entries are swept lazily on write rather than on a timer: an interval would keep a
19
+ * reference alive for the process's whole life (and in a test run, past the end of the
20
+ * suite), and the map only grows when requests are arriving anyway.
21
+ */
22
+ export class RateLimiter {
23
+ rule;
24
+ windows = new Map();
25
+ lastSweep = 0;
26
+ constructor(rule) {
27
+ this.rule = rule;
28
+ }
29
+ /** Count one request against `key`, and say whether it may proceed. */
30
+ check(key) {
31
+ const now = Date.now();
32
+ this.sweep(now);
33
+ const existing = this.windows.get(key);
34
+ if (!existing || now - existing.startedAt >= this.rule.windowMs) {
35
+ this.windows.set(key, { startedAt: now, count: 1 });
36
+ return { allowed: true, retryAfterSeconds: 0 };
37
+ }
38
+ existing.count += 1;
39
+ if (existing.count <= this.rule.max) {
40
+ return { allowed: true, retryAfterSeconds: 0 };
41
+ }
42
+ const remaining = this.rule.windowMs - (now - existing.startedAt);
43
+ return { allowed: false, retryAfterSeconds: Math.max(1, Math.ceil(remaining / 1000)) };
44
+ }
45
+ /** Drop windows that have already rolled over. Runs at most once per window length. */
46
+ sweep(now) {
47
+ if (now - this.lastSweep < this.rule.windowMs)
48
+ return;
49
+ this.lastSweep = now;
50
+ for (const [key, window] of this.windows) {
51
+ if (now - window.startedAt >= this.rule.windowMs)
52
+ this.windows.delete(key);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Best-effort client address for rate-limit keying.
58
+ *
59
+ * `x-forwarded-for` is caller-supplied and trivially spoofed unless a trusted proxy sets it,
60
+ * so an IP bucket alone is not a control — it's the half that stops casual abuse. Pair it
61
+ * with a bucket on something the attacker can't rotate freely (the target email address) so
62
+ * the limit still bites when the address is forged.
63
+ */
64
+ export function clientAddress(headers) {
65
+ const forwarded = headers.get('x-forwarded-for');
66
+ // Left-most entry is the original client; the rest are proxies that appended themselves.
67
+ if (forwarded)
68
+ return forwarded.split(',')[0]?.trim() || 'unknown';
69
+ return headers.get('x-real-ip')?.trim() || 'unknown';
70
+ }