@classytic/arc 2.43.0 → 2.44.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 (212) hide show
  1. package/dist/{EventTransport-tzA7CAB4.mjs → EventTransport-DZWDsaPa.mjs} +2 -2
  2. package/dist/{HookSystem-B6UaKRbF.mjs → HookSystem-yjEgn7Cm.mjs} +2 -2
  3. package/dist/{ResourceRegistry-CuCARu2B.mjs → ResourceRegistry-DJxHUpE4.mjs} +2 -2
  4. package/dist/acquire-BozJ-9yt.mjs +35 -0
  5. package/dist/{actionPermissions-BotX1YOa.mjs → actionPermissions-5N04zBL4.mjs} +13 -17
  6. package/dist/audit/index.d.mts +6 -6
  7. package/dist/audit/index.mjs +4 -4
  8. package/dist/auth/audit.d.mts +8 -8
  9. package/dist/auth/audit.mjs +1 -1
  10. package/dist/auth/index.d.mts +5 -5
  11. package/dist/auth/index.mjs +11 -8
  12. package/dist/auth/redis-session.d.mts +4 -5
  13. package/dist/auth/redis-session.mjs +1 -1
  14. package/dist/{authorizationDecision-DQYrkl5f.mjs → authorizationDecision-wX3SA9w_.mjs} +4 -4
  15. package/dist/{boundedMap-BULzfXYU.mjs → boundedMap-DWiKW7lP.mjs} +1 -1
  16. package/dist/{buildHandler-CRQ8EcX5.mjs → buildHandler-Bswu_vNb.mjs} +4 -4
  17. package/dist/cache/index.d.mts +9 -9
  18. package/dist/cache/index.mjs +4 -4
  19. package/dist/{caching-Cc2M1DwO.mjs → caching-Drp68DIS.mjs} +2 -2
  20. package/dist/{claimed-B10RTfkM.mjs → claimed-DYvQoZLv.mjs} +1 -1
  21. package/dist/cleanup/index.d.mts +14 -14
  22. package/dist/cleanup/index.mjs +4 -4
  23. package/dist/cli/commands/describe.d.mts +5 -5
  24. package/dist/cli/commands/describe.mjs +3 -3
  25. package/dist/cli/commands/docs.d.mts +2 -3
  26. package/dist/cli/commands/docs.mjs +3 -3
  27. package/dist/cli/commands/doctor.d.mts +2 -3
  28. package/dist/cli/commands/doctor.mjs +1 -1
  29. package/dist/cli/commands/generate.mjs +2 -3
  30. package/dist/cli/commands/init.mjs +2 -3
  31. package/dist/cli/commands/introspect.d.mts +2 -3
  32. package/dist/cli/commands/introspect.mjs +2 -2
  33. package/dist/cli/index.mjs +3 -3
  34. package/dist/{constants-Cu7Mx7_U.mjs → constants-B2QHb6u6.mjs} +1 -1
  35. package/dist/context/index.d.mts +9 -9
  36. package/dist/context/index.mjs +5 -5
  37. package/dist/core/index.d.mts +3 -3
  38. package/dist/core/index.mjs +8 -8
  39. package/dist/{core-Cb0LjccA.mjs → core-COcqo0Cp.mjs} +13 -4
  40. package/dist/{createActionRouter-xjqonMRO.mjs → createActionRouter-zG13rpPJ.mjs} +18 -8
  41. package/dist/{createAggregationRouter-zRYWw_5D.mjs → createAggregationRouter-CWRz96Vr.mjs} +7 -7
  42. package/dist/{createApp-D-953ZAq.mjs → createApp-BGLYtErt.mjs} +34 -32
  43. package/dist/{createMcpServer-C9cxS8zt.d.mts → createMcpServer-DSztofa9.d.mts} +1 -1
  44. package/dist/{defineAggregation-Bm8RjMbq.mjs → defineAggregation--3xguLkk.mjs} +1 -1
  45. package/dist/{defineResource-DIC7JZGU.mjs → defineResource-gUp9ug66.mjs} +7 -7
  46. package/dist/discovery/index.d.mts +6 -7
  47. package/dist/discovery/index.mjs +1 -1
  48. package/dist/docs/index.d.mts +3 -3
  49. package/dist/docs/index.mjs +3 -3
  50. package/dist/{elevation-DG8SrLN-.mjs → elevation-BG4gnMsJ.mjs} +5 -5
  51. package/dist/encryption/index.d.mts +5 -5
  52. package/dist/encryption/index.mjs +3 -3
  53. package/dist/{errorHandler-BnfDviL1.mjs → errorHandler-COHw3N1b.mjs} +3 -3
  54. package/dist/{errors-CtrywMHP.mjs → errors-CW4anJBy.mjs} +1 -1
  55. package/dist/{eventPlugin-Q6BhzHzs.mjs → eventPlugin-BweHAVws.mjs} +8 -8
  56. package/dist/{eventTypes-Cdhm6ZlV.mjs → eventTypes-N4-omQFR.mjs} +2 -2
  57. package/dist/events/index.d.mts +14 -14
  58. package/dist/events/index.mjs +7 -7
  59. package/dist/events/transports/redis-stream-entry.mjs +4 -4
  60. package/dist/events/transports/redis.d.mts +4 -5
  61. package/dist/events/transports/redis.mjs +2 -2
  62. package/dist/factory/index.d.mts +16 -16
  63. package/dist/factory/index.mjs +6 -6
  64. package/dist/{fastify-augmentation-DhUJ-mvo.d.mts → fastify-augmentation-DRlCIWE9.d.mts} +2 -2
  65. package/dist/{fields-ToPYpMqS.mjs → fields-A5crhsJb.mjs} +1 -1
  66. package/dist/{filter-merge-IpGywvym.mjs → filter-merge-DGM-GQ1J.mjs} +1 -1
  67. package/dist/{generate-DRTkLlIl.mjs → generate-BXKo2Gc8.mjs} +2 -2
  68. package/dist/{headers-BbkIF6vA.mjs → headers-DKZQKL-Z.mjs} +2 -2
  69. package/dist/{health-D-Ft6JM6.mjs → health-BYAwA6YS.mjs} +1 -1
  70. package/dist/{health-DqbsG-_w.mjs → health-CrqUp3sz.mjs} +1 -1
  71. package/dist/hooks/index.d.mts +1 -1
  72. package/dist/hooks/index.mjs +2 -3
  73. package/dist/idempotency/index.d.mts +8 -6
  74. package/dist/idempotency/index.mjs +108 -46
  75. package/dist/idempotency/redis.d.mts +1 -1
  76. package/dist/idempotency/redis.mjs +30 -2
  77. package/dist/{index-CRoPtISf.d.mts → index-Beg3aNnK.d.mts} +3 -31
  78. package/dist/{index-C8zVGYsk.d.mts → index-BkV55WlV.d.mts} +3 -3
  79. package/dist/{index-JdbZAIsm.d.mts → index-CUJvoyw3.d.mts} +1 -1
  80. package/dist/{index-mqaqZNpe.d.mts → index-WH7xgvxS.d.mts} +52 -1
  81. package/dist/index.d.mts +5 -5
  82. package/dist/index.mjs +11 -11
  83. package/dist/{init-B_oUYDXI.mjs → init-BPzK5Lnr.mjs} +1 -1
  84. package/dist/integrations/event-gateway.d.mts +3 -4
  85. package/dist/integrations/event-gateway.mjs +2 -2
  86. package/dist/integrations/index.d.mts +1 -1
  87. package/dist/integrations/index.mjs +1 -1
  88. package/dist/integrations/jobs/index.mjs +3 -3
  89. package/dist/integrations/mcp/index.d.mts +36 -36
  90. package/dist/integrations/mcp/index.mjs +2 -2
  91. package/dist/integrations/mcp/testing.d.mts +8 -9
  92. package/dist/integrations/mcp/testing.mjs +2 -2
  93. package/dist/integrations/streamline.d.mts +12 -13
  94. package/dist/integrations/streamline.mjs +18 -4
  95. package/dist/integrations/webhooks.d.mts +23 -23
  96. package/dist/integrations/webhooks.mjs +3 -3
  97. package/dist/integrations/websocket-pushref-redis.d.mts +4 -5
  98. package/dist/integrations/websocket-pushref-redis.mjs +1 -1
  99. package/dist/integrations/websocket-redis.d.mts +4 -5
  100. package/dist/integrations/websocket-redis.mjs +1 -1
  101. package/dist/integrations/websocket.mjs +2 -2
  102. package/dist/{interface-C0395yUN.d.mts → interface-JJzwH4Ro.d.mts} +22 -2
  103. package/dist/{jsonBody-B4YVGcql.mjs → jsonBody-YIq-vGLv.mjs} +2 -2
  104. package/dist/{keys-B2KtgMLJ.mjs → keys-CpoiZ8hU.mjs} +1 -1
  105. package/dist/{loadResources-Dn4lalw2.mjs → loadResources-6jO52-RR.mjs} +3 -3
  106. package/dist/{loadResourcesFromEntry-3sLYbuse.mjs → loadResourcesFromEntry-MP8xEppu.mjs} +2 -2
  107. package/dist/logger/index.d.mts +9 -10
  108. package/dist/logger/index.mjs +2 -3
  109. package/dist/{logger-DXjfIqjV.mjs → logger-D4V1zGLI.mjs} +1 -1
  110. package/dist/{mcpPlugin-C08HalN5.mjs → mcpPlugin-srPc7ItN.mjs} +42 -29
  111. package/dist/{memory-9Cp7611C.mjs → memory-CTa5pOCW.mjs} +3 -3
  112. package/dist/{metrics-CWI11eRu.mjs → metrics-DsZrvnpB.mjs} +3 -3
  113. package/dist/middleware/index.d.mts +5 -5
  114. package/dist/middleware/index.mjs +3 -3
  115. package/dist/migrations/index.d.mts +13 -13
  116. package/dist/migrations/index.mjs +2 -2
  117. package/dist/{module-BSvOQC7E.mjs → module--L0iBIZz.mjs} +1 -1
  118. package/dist/mongodb-memory-server-CHhYSq5y.mjs +35539 -0
  119. package/dist/mongoose-CYJCLyi-.mjs +67451 -0
  120. package/dist/{multiTenant-cY0FkDiA.d.mts → multiTenant-CAtYlW6H.d.mts} +1 -1
  121. package/dist/{multipartBody-CXM2a-Dy.mjs → multipartBody-Cc7eZ9cq.mjs} +1 -1
  122. package/dist/node-D8UZv_8c.mjs +41236 -0
  123. package/dist/{openapi-DT_G4VhY.mjs → openapi-CMegfsm8.mjs} +6 -6
  124. package/dist/outbox-admin/index.d.mts +2 -2
  125. package/dist/outbox-admin/index.mjs +5 -5
  126. package/dist/{outbox-module-Bjgzl6tg.mjs → outbox-module-Ryk270jd.mjs} +9 -9
  127. package/dist/permissions/index.mjs +7 -7
  128. package/dist/{permissions-Cm0uYHvd.mjs → permissions-C5ijIz5Q.mjs} +9 -9
  129. package/dist/{pipe-BqeGT6UO.mjs → pipe-D81zMtWs.mjs} +2 -2
  130. package/dist/pipeline/index.d.mts +7 -7
  131. package/dist/pipeline/index.mjs +2 -2
  132. package/dist/{plan-FVR6LP59.mjs → plan-CJGMKoui.mjs} +1 -1
  133. package/dist/{plugin-BccET1tL.mjs → plugin-DALd9dcF.mjs} +39 -27
  134. package/dist/plugins/index.d.mts +7 -7
  135. package/dist/plugins/index.mjs +17 -17
  136. package/dist/plugins/response-cache.d.mts +5 -6
  137. package/dist/plugins/response-cache.mjs +4 -4
  138. package/dist/plugins/tracing-entry.mjs +2 -2
  139. package/dist/{pluralize-CVIOcgMF.mjs → pluralize-COUNYo3d.mjs} +1 -1
  140. package/dist/presets/filesUpload.d.mts +7 -7
  141. package/dist/presets/filesUpload.mjs +5 -5
  142. package/dist/presets/index.d.mts +14 -14
  143. package/dist/presets/index.mjs +2 -2
  144. package/dist/presets/multiTenant.d.mts +1 -1
  145. package/dist/presets/multiTenant.mjs +5 -5
  146. package/dist/presets/search.d.mts +8 -9
  147. package/dist/presets/search.mjs +2 -2
  148. package/dist/{presets-Cpvj6fGO.mjs → presets-CONf2Qem.mjs} +4 -4
  149. package/dist/{projection-Ce4aQhQk.mjs → projection-wFoLqdss.mjs} +2 -2
  150. package/dist/{queryCachePlugin-CFWNH8aT.mjs → queryCachePlugin-BATECpyh.mjs} +6 -6
  151. package/dist/{rateLimitKey-C4O-kPm0.mjs → rateLimitKey-DVEZ_UpV.mjs} +1 -1
  152. package/dist/{realtime-DmPE9S54.mjs → realtime-xyubMKSB.mjs} +11 -11
  153. package/dist/{redis-vLvtcGy_.d.mts → redis-BDgv9Glw.d.mts} +5 -1
  154. package/dist/registry/index.d.mts +9 -9
  155. package/dist/registry/index.mjs +3 -3
  156. package/dist/{registry-Bcz9G1bh.mjs → registry-Bdzg-hdm.mjs} +5 -4
  157. package/dist/{renewingLease-qODa7KJQ.mjs → renewingLease-BFJxGPuh.mjs} +1 -1
  158. package/dist/{replyHelpers-CG_VtVgS.mjs → replyHelpers-Bnc6lJyy.mjs} +2 -2
  159. package/dist/{requestContext-Dsu9P1bV.mjs → requestContext-C10UeFe5.mjs} +1 -1
  160. package/dist/{requirement-KDdoRcOP.mjs → requirement-Bu50QALH.mjs} +1 -1
  161. package/dist/{resourceRateLimit-dSjVr1pk.mjs → resourceRateLimit-urWPJxrt.mjs} +2 -2
  162. package/dist/rolldown-runtime-MYrLNGnq.mjs +45 -0
  163. package/dist/{routeValidator-D36SW8qt.mjs → routeValidator-DHtpzrzk.mjs} +1 -1
  164. package/dist/{runtimeCapabilities-0tccjRlj.mjs → runtimeCapabilities-DIMKMV2G.mjs} +1 -1
  165. package/dist/{schedules-C-OpmHBq.mjs → schedules-CKTs5ys8.mjs} +5 -5
  166. package/dist/{schemaConverter-BORek3O-.mjs → schemaConverter-BVjkQ5DD.mjs} +2 -2
  167. package/dist/{schemaIR-C7Vbp71I.mjs → schemaIR-BA0Hb21Y.mjs} +2 -2
  168. package/dist/schemas/index.d.mts +10 -10
  169. package/dist/schemas/index.mjs +1 -1
  170. package/dist/scim/index.d.mts +13 -13
  171. package/dist/scim/index.mjs +2 -2
  172. package/dist/scope/index.d.mts +3 -3
  173. package/dist/scope/index.mjs +5 -5
  174. package/dist/{scope-DQthe88b.mjs → scope-DINaj7Ax.mjs} +4 -4
  175. package/dist/{shutdown-MqA81z_P.mjs → shutdown-LpLMH8T1.mjs} +1 -1
  176. package/dist/{simpleEqualityMatcher-auW8QjXN.mjs → simpleEqualityMatcher-DbwIM1f1.mjs} +1 -1
  177. package/dist/{sse-CYzQBVFe.mjs → sse-BzJFPX_1.mjs} +7 -7
  178. package/dist/{sseStream-B5_Afiqn.mjs → sseStream-DQChzGTs.mjs} +2 -2
  179. package/dist/{store-helpers-BOzk-CuX.mjs → store-helpers-Coj9RhOZ.mjs} +1 -1
  180. package/dist/{streaming-DjTQhZrN.mjs → streaming-JzB5CAga.mjs} +1 -1
  181. package/dist/{subscriberIdentity-CW39uA8G.mjs → subscriberIdentity-DeyppIif.mjs} +1 -1
  182. package/dist/{tenancy--ed9eH_z.mjs → tenancy-DxV8OuX2.mjs} +2 -2
  183. package/dist/{tenantPreparation-BKon6Yox.mjs → tenantPreparation-CBvvAcAj.mjs} +4 -4
  184. package/dist/testing/cleanupStoreContract.d.mts +4 -5
  185. package/dist/testing/cleanupStoreContract.mjs +1 -1
  186. package/dist/testing/index.d.mts +35 -35
  187. package/dist/testing/index.mjs +16 -15
  188. package/dist/testing/outboxStoreContract.d.mts +4 -5
  189. package/dist/testing/outboxStoreContract.mjs +2 -2
  190. package/dist/testing/requiredPorts.d.mts +4 -5
  191. package/dist/testing/requiredPorts.mjs +2 -2
  192. package/dist/testing/storageContract.d.mts +4 -5
  193. package/dist/testing/storageContract.mjs +1 -1
  194. package/dist/{timing-qczZ0YC-.mjs → timing-CntavTlR.mjs} +1 -1
  195. package/dist/{transactionContext-DjFkrNG6.mjs → transactionContext-orvnGu4F.mjs} +1 -1
  196. package/dist/{typeGuards-CySF12G-.mjs → typeGuards-kEaP_WmO.mjs} +1 -1
  197. package/dist/types/index.d.mts +1 -1
  198. package/dist/types/index.mjs +1 -1
  199. package/dist/types/storage.mjs +1 -1
  200. package/dist/{types-B4Aq4Sdj.d.mts → types-D3Ixsh00.d.mts} +1 -1
  201. package/dist/{types-Bk9NOgOC.mjs → types-fvO6Ovzx.mjs} +4 -4
  202. package/dist/usage/index.d.mts +4 -4
  203. package/dist/usage/index.mjs +4 -4
  204. package/dist/{userHelpers-aklawRaK.mjs → userHelpers-C76zD5pa.mjs} +1 -1
  205. package/dist/utils/index.d.mts +47 -47
  206. package/dist/utils/index.mjs +12 -12
  207. package/dist/{utils-ec1oTo1n.mjs → utils-BpkVZ8rB.mjs} +4 -4
  208. package/dist/{validate-9yzHC1e2.mjs → validate-CWp-lsrm.mjs} +3 -3
  209. package/dist/{versioning-fhhWHV74.mjs → versioning-CHhL9P3o.mjs} +3 -3
  210. package/dist/{workScope-zpPyge4t.mjs → workScope-n9a7d_lZ.mjs} +2 -2
  211. package/package.json +45 -51
  212. package/dist/rolldown-runtime-D1w9Y1VJ.mjs +0 -15
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { r as workSeedFromEvent, t as runWorkScope } from "./workScope-zpPyge4t.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { r as workSeedFromEvent, t as runWorkScope } from "./workScope-n9a7d_lZ.mjs";
3
3
  import { createEvent, createEventRouter } from "@classytic/primitives/events";
4
4
  //#region src/events/EventTransport.ts
5
5
  /**
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { t as buildRequestScopeProjection } from "./projection-Ce4aQhQk.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { t as buildRequestScopeProjection } from "./projection-wFoLqdss.mjs";
3
3
  //#region src/hooks/HookSystem.ts
4
4
  /**
5
5
  * Hook System
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import "./constants-Cu7Mx7_U.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import "./constants-B2QHb6u6.mjs";
3
3
  //#region src/registry/ResourceRegistry.ts
4
4
  /**
5
5
  * Resource Registry
@@ -0,0 +1,35 @@
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ //#region src/idempotency/acquire.ts
3
+ async function acquireIdempotencyKey(store, key, requestId, lockTtlMs) {
4
+ if (typeof store.acquire === "function") return store.acquire(key, requestId, lockTtlMs);
5
+ return acquireBySteps(store, key, requestId, lockTtlMs);
6
+ }
7
+ /** `get` → `tryLock` → `get`, for stores without an atomic `acquire`. */
8
+ async function acquireBySteps(store, key, requestId, lockTtlMs) {
9
+ const cached = await store.get(key);
10
+ if (cached) return {
11
+ status: "completed",
12
+ result: cached
13
+ };
14
+ if (!await store.tryLock(key, requestId, lockTtlMs)) return { status: "locked" };
15
+ let completed;
16
+ try {
17
+ completed = await store.get(key);
18
+ } catch (err) {
19
+ await store.unlock(key, requestId);
20
+ throw err;
21
+ }
22
+ if (!completed) return { status: "acquired" };
23
+ await store.unlock(key, requestId);
24
+ return {
25
+ status: "completed",
26
+ result: completed
27
+ };
28
+ }
29
+ /** Release a held lock — skipped after a completion that already released it. */
30
+ async function releaseIdempotencyLock(store, key, requestId, completed) {
31
+ if (completed && store.completionReleasesLock === true) return;
32
+ await store.unlock(key, requestId);
33
+ }
34
+ //#endregion
35
+ export { acquireIdempotencyKey as n, releaseIdempotencyLock as r, acquireBySteps as t };
@@ -1,16 +1,16 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { f as createError } from "./errors-CtrywMHP.mjs";
3
- import { n as getUserRoles } from "./userHelpers-aklawRaK.mjs";
4
- import { b as isElevated, n as PUBLIC_SCOPE, u as getRequestScope, x as isMember } from "./types-Bk9NOgOC.mjs";
5
- import { a as resolveEffectiveRoles, r as deriveHiddenFieldPermissions, t as applyFieldReadPermissions } from "./fields-ToPYpMqS.mjs";
6
- import { t as buildRequestScopeProjection } from "./projection-Ce4aQhQk.mjs";
7
- import { n as requestContext } from "./requestContext-Dsu9P1bV.mjs";
8
- import { n as isTenantPreparation } from "./tenantPreparation-BKon6Yox.mjs";
9
- import { n as evaluateAndApplyPermission } from "./authorizationDecision-DQYrkl5f.mjs";
10
- import { t as executePipeline } from "./pipe-BqeGT6UO.mjs";
11
- import { n as idempotencyConfigProblem, t as declaresIdempotencyFence } from "./requirement-KDdoRcOP.mjs";
12
- import { i as resolveResourceRateLimiter, r as recordUnenforcedRateLimit } from "./resourceRateLimit-dSjVr1pk.mjs";
13
- import { n as arcRouteValidatorCompiler } from "./routeValidator-D36SW8qt.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { f as createError } from "./errors-CW4anJBy.mjs";
3
+ import { n as getUserRoles } from "./userHelpers-C76zD5pa.mjs";
4
+ import { b as isElevated, n as PUBLIC_SCOPE, u as getRequestScope, x as isMember } from "./types-fvO6Ovzx.mjs";
5
+ import { a as resolveEffectiveRoles, r as deriveHiddenFieldPermissions, t as applyFieldReadPermissions } from "./fields-A5crhsJb.mjs";
6
+ import { t as buildRequestScopeProjection } from "./projection-wFoLqdss.mjs";
7
+ import { n as requestContext } from "./requestContext-C10UeFe5.mjs";
8
+ import { n as isTenantPreparation } from "./tenantPreparation-CBvvAcAj.mjs";
9
+ import { n as evaluateAndApplyPermission } from "./authorizationDecision-wX3SA9w_.mjs";
10
+ import { t as executePipeline } from "./pipe-D81zMtWs.mjs";
11
+ import { n as idempotencyConfigProblem, t as declaresIdempotencyFence } from "./requirement-Bu50QALH.mjs";
12
+ import { i as resolveResourceRateLimiter, r as recordUnenforcedRateLimit } from "./resourceRateLimit-urWPJxrt.mjs";
13
+ import { n as arcRouteValidatorCompiler } from "./routeValidator-DHtpzrzk.mjs";
14
14
  import { isPaginatedResult, toCanonicalList } from "@classytic/repo-core/pagination";
15
15
  //#region src/core/fastifyAdapter.ts
16
16
  /** Type guard for Mongoose-like documents with toObject() */
@@ -657,10 +657,6 @@ function buildRateLimitConfig(rateLimit) {
657
657
  //#endregion
658
658
  //#region src/core/middlewares/registerRoute.ts
659
659
  /**
660
- * Route registration — the one place every arc router hands a route to Fastify: arc's request
661
- * validator, the idempotency-declaration fence, and duplicate-route diagnostics.
662
- */
663
- /**
664
660
  * Register a route with friendly handling of `FST_ERR_DUPLICATED_ROUTE`.
665
661
  *
666
662
  * Boot-time `validateRouteCrudCollisions()` catches custom-route → auto-CRUD
@@ -1,6 +1,6 @@
1
1
 
2
2
  import { d as UserBase } from "../base-CZyixEQR.mjs";
3
- import "../index-mqaqZNpe.mjs";
3
+ import "../index-WH7xgvxS.mjs";
4
4
  import { FastifyPluginAsync } from "fastify";
5
5
  import { RepositoryLike } from "@classytic/repo-core/adapter";
6
6
  //#region src/audit/stores/interface.d.ts
@@ -88,7 +88,7 @@ interface AuditQueryOptions {
88
88
  /**
89
89
  * Create audit entry from context
90
90
  */
91
- declare function createAuditEntry(resource: string, documentId: string, action: AuditAction, context: AuditContext, data?: {
91
+ export declare function createAuditEntry(resource: string, documentId: string, action: AuditAction, context: AuditContext, data?: {
92
92
  before?: Record<string, unknown>;
93
93
  after?: Record<string, unknown>;
94
94
  metadata?: Record<string, unknown>;
@@ -253,7 +253,7 @@ interface AuditRequestLike {
253
253
  * The audit context of a request, from its VALIDATED scope: the actor is the scope's user
254
254
  * (or service client) and the organization is the scope's active organization.
255
255
  */
256
- declare function auditContextOf(request: AuditRequestLike): AuditContext;
256
+ export declare function auditContextOf(request: AuditRequestLike): AuditContext;
257
257
  declare const _default: FastifyPluginAsync<AuditPluginOptions>;
258
258
  //#endregion
259
259
  //#region src/audit/repository-audit-adapter.d.ts
@@ -275,14 +275,14 @@ interface RepositoryAuditStoreOptions {
275
275
  */
276
276
  readonly sessionProvider?: () => unknown;
277
277
  }
278
- declare function repositoryAsAuditStore(repository: RepositoryLike, options?: RepositoryAuditStoreOptions): AuditStore;
278
+ export declare function repositoryAsAuditStore(repository: RepositoryLike, options?: RepositoryAuditStoreOptions): AuditStore;
279
279
  //#endregion
280
280
  //#region src/audit/stores/memory.d.ts
281
281
  interface MemoryAuditStoreOptions {
282
282
  /** Maximum entries to keep (default: 1000) */
283
283
  maxEntries?: number;
284
284
  }
285
- declare class MemoryAuditStore implements AuditStore {
285
+ export declare class MemoryAuditStore implements AuditStore {
286
286
  readonly name = "memory";
287
287
  private entries;
288
288
  private maxEntries;
@@ -297,4 +297,4 @@ declare class MemoryAuditStore implements AuditStore {
297
297
  clear(): void;
298
298
  }
299
299
  //#endregion
300
- export { type AuditAction, type AuditContext, type AuditEntry, type AuditLogger, type AuditPluginOptions, type AuditQueryOptions, type AuditRequestLike, type AuditStore, type AuditStoreOptions, MemoryAuditStore, type MemoryAuditStoreOptions, type RepositoryAuditStoreOptions, type RequestAuditLogger, auditContextOf, _default as auditPlugin, createAuditEntry, repositoryAsAuditStore };
300
+ export { type AuditAction, type AuditContext, type AuditEntry, type AuditLogger, type AuditPluginOptions, type AuditQueryOptions, type AuditRequestLike, type AuditStore, type AuditStoreOptions, type MemoryAuditStoreOptions, type RepositoryAuditStoreOptions, type RequestAuditLogger, _default as auditPlugin };
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { g as getUserId, i as getClientId } from "../types-Bk9NOgOC.mjs";
3
- import { t as transactionContext } from "../transactionContext-DjFkrNG6.mjs";
4
- import { n as declareRuntimeCapability } from "../runtimeCapabilities-0tccjRlj.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { g as getUserId, i as getClientId } from "../types-fvO6Ovzx.mjs";
3
+ import { t as transactionContext } from "../transactionContext-orvnGu4F.mjs";
4
+ import { n as declareRuntimeCapability } from "../runtimeCapabilities-DIMKMV2G.mjs";
5
5
  import { and, anyOf, eq, gte, lt, lte } from "@classytic/repo-core/filter";
6
6
  import fp from "fastify-plugin";
7
7
  //#region src/audit/repository-audit-adapter.ts
@@ -9,13 +9,13 @@ import { FastifyInstance } from "fastify";
9
9
  * unknown events still flow through when matched, just with the BA-supplied
10
10
  * name verbatim. Use this list for autocomplete-friendly defaults.
11
11
  */
12
- type AuthEventName = "session.create" | "session.delete" | "session.update" | "user.create" | "user.update" | "user.delete" | "mfa.enroll" | "mfa.verify" | "mfa.failed" | "mfa.disable" | "password.reset.request" | "password.reset.complete" | "email.verify" | "org.create" | "org.delete" | "org.invite.create" | "org.invite.accept" | "org.invite.reject" | "org.member.add" | "org.member.remove" | "org.member.role.update" | "apikey.create" | "apikey.delete" | "apikey.failed" | "endpoint.before" | "endpoint.after" | "endpoint.error";
12
+ export type AuthEventName = "session.create" | "session.delete" | "session.update" | "user.create" | "user.update" | "user.delete" | "mfa.enroll" | "mfa.verify" | "mfa.failed" | "mfa.disable" | "password.reset.request" | "password.reset.complete" | "email.verify" | "org.create" | "org.delete" | "org.invite.create" | "org.invite.accept" | "org.invite.reject" | "org.member.add" | "org.member.remove" | "org.member.role.update" | "apikey.create" | "apikey.delete" | "apikey.failed" | "endpoint.before" | "endpoint.after" | "endpoint.error";
13
13
  /**
14
14
  * Resolved auth event ready for audit. The bridge constructs this from
15
15
  * BA's hook context, then forwards to `app.audit.custom('auth', subjectId,
16
16
  * event.name, event.payload)`.
17
17
  */
18
- interface AuthEvent {
18
+ export interface AuthEvent {
19
19
  /** Canonical name (see {@link AuthEventName}). */
20
20
  name: string;
21
21
  /**
@@ -34,7 +34,7 @@ interface AuthEvent {
34
34
  /**
35
35
  * Options for `wireBetterAuthAudit`.
36
36
  */
37
- interface WireBetterAuthAuditOptions {
37
+ export interface WireBetterAuthAuditOptions {
38
38
  /**
39
39
  * Glob patterns selecting which events to audit. `*` matches a single
40
40
  * segment (`session.*` matches `session.create` but not `session.create.foo`),
@@ -72,7 +72,7 @@ interface WireBetterAuthAuditOptions {
72
72
  * Result of `wireBetterAuthAudit` — duck-typed BA `hooks` + `databaseHooks`
73
73
  * config plus an `attach(app)` method to connect the live audit logger.
74
74
  */
75
- interface BetterAuthAuditBridge {
75
+ export interface BetterAuthAuditBridge {
76
76
  /**
77
77
  * Spread into `betterAuth({ hooks })`. BA's top-level `hooks.before` /
78
78
  * `hooks.after` slots take a single async function each (not an array).
@@ -157,7 +157,7 @@ interface BetterAuthAuditBridge {
157
157
  * Single BA hook entry — duck-typed to avoid pinning a BA major version.
158
158
  * The shape mirrors `better-auth`'s public `hooks.{before,after}` API.
159
159
  */
160
- interface BetterAuthHookEntry {
160
+ export interface BetterAuthHookEntry {
161
161
  matcher: (ctx: BetterAuthHookContext) => boolean;
162
162
  /**
163
163
  * Returns a (possibly empty) object so BA's `runBeforeHooks` /
@@ -169,7 +169,7 @@ interface BetterAuthHookEntry {
169
169
  handler: (ctx: BetterAuthHookContext) => Promise<Record<string, unknown>> | Record<string, unknown>;
170
170
  }
171
171
  /** Subset of BA's hook context the bridge actually reads. */
172
- interface BetterAuthHookContext {
172
+ export interface BetterAuthHookContext {
173
173
  path?: string;
174
174
  method?: string;
175
175
  body?: Record<string, unknown>;
@@ -198,6 +198,6 @@ interface SessionLike {
198
198
  userAgent?: string;
199
199
  impersonatedBy?: string;
200
200
  }
201
- declare function wireBetterAuthAudit(opts?: WireBetterAuthAuditOptions): BetterAuthAuditBridge;
201
+ export declare function wireBetterAuthAudit(opts?: WireBetterAuthAuditOptions): BetterAuthAuditBridge;
202
202
  //#endregion
203
- export { AuthEvent, AuthEventName, BetterAuthAuditBridge, BetterAuthHookContext, BetterAuthHookEntry, WireBetterAuthAuditOptions, wireBetterAuthAudit };
203
+ export {};
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
2
  //#region src/auth/audit.ts
3
3
  function compileGlobs(patterns) {
4
4
  if (patterns.length === 0) return () => false;
@@ -1,7 +1,7 @@
1
1
 
2
2
  import { i as RequestScope } from "../types-Ddl9OjmE.mjs";
3
3
  import { l as PermissionCheck } from "../base-CZyixEQR.mjs";
4
- import { At as AuthHelpers, jt as AuthPluginOptions } from "../index-mqaqZNpe.mjs";
4
+ import { At as AuthHelpers, jt as AuthPluginOptions } from "../index-WH7xgvxS.mjs";
5
5
  import { t as ExternalOpenApiPaths } from "../externalPaths-CmGOxOtD.mjs";
6
6
  import { a as SessionManagerOptions, c as createSessionManager, i as SessionData, n as MemorySessionStoreOptions, o as SessionManagerResult, r as SessionCookieOptions, s as SessionStore, t as MemorySessionStore } from "../sessionManager-qimlKV0P.mjs";
7
7
  import { FastifyPluginAsync, FastifyReply as FastifyReply$1, FastifyRequest } from "fastify";
@@ -203,7 +203,7 @@ declare module "fastify" {
203
203
  */
204
204
  /** Verifies one credential scheme's value; the scope to install, or `null` when it is not valid. */
205
205
  type CredentialVerifier = (credentials: string, request: FastifyRequest) => Promise<RequestScope | null>;
206
- declare function createBetterAuthAdapter(options: BetterAuthAdapterOptions): BetterAuthAdapterResult;
206
+ export declare function createBetterAuthAdapter(options: BetterAuthAdapterOptions): BetterAuthAdapterResult;
207
207
  //#endregion
208
208
  //#region src/auth/betterAuthOpenApi.d.ts
209
209
  interface BetterAuthOpenApiOptions {
@@ -241,7 +241,7 @@ interface BetterAuthOpenApiOptions {
241
241
  * endpoints, converts their Zod schemas to JSON Schema via `z.toJSONSchema()`,
242
242
  * and returns a complete `ExternalOpenApiPaths` object ready for Arc's spec builder.
243
243
  */
244
- declare function extractBetterAuthOpenApi(authApi: Record<string, unknown>, options?: BetterAuthOpenApiOptions): ExternalOpenApiPaths;
244
+ export declare function extractBetterAuthOpenApi(authApi: Record<string, unknown>, options?: BetterAuthOpenApiOptions): ExternalOpenApiPaths;
245
245
  //#endregion
246
246
  //#region src/auth/trustedOrigins.d.ts
247
247
  /**
@@ -318,6 +318,6 @@ interface MirrorTrustedOriginsOptions {
318
318
  * array.
319
319
  * - `[canonicalUrl]` when `corsOrigins` is `false` / `undefined`.
320
320
  */
321
- declare function mirrorTrustedOriginsFromCors(options: MirrorTrustedOriginsOptions): string[];
321
+ export declare function mirrorTrustedOriginsFromCors(options: MirrorTrustedOriginsOptions): string[];
322
322
  //#endregion
323
- export { type AuthPluginOptions, type BetterAuthAdapterOptions, type BetterAuthAdapterResult, type BetterAuthHandler, type BetterAuthOpenApiOptions, type CorsOriginsConfig, type CredentialVerifier, MemorySessionStore, type MemorySessionStoreOptions, type MirrorTrustedOriginsOptions, type SessionCookieOptions, type SessionData, type SessionManagerOptions, type SessionManagerResult, type SessionStore, _default as authPlugin, createBetterAuthAdapter, createSessionManager, extractBetterAuthOpenApi, mirrorTrustedOriginsFromCors };
323
+ export { type AuthPluginOptions, type BetterAuthAdapterOptions, type BetterAuthAdapterResult, type BetterAuthHandler, type BetterAuthOpenApiOptions, type CorsOriginsConfig, type CredentialVerifier, MemorySessionStore, type MemorySessionStoreOptions, type MirrorTrustedOriginsOptions, type SessionCookieOptions, type SessionData, type SessionManagerOptions, type SessionManagerResult, type SessionStore, _default as authPlugin, createSessionManager };
@@ -1,10 +1,10 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { d as createDomainError, l as UnauthorizedError, p as isArcError, t as ArcError } from "../errors-CtrywMHP.mjs";
3
- import { n as requireSingleHeaderValue } from "../headers-BbkIF6vA.mjs";
4
- import { n as getUserRoles, r as normalizeRoles } from "../userHelpers-aklawRaK.mjs";
5
- import { o as toJsonSchema } from "../schemaConverter-BORek3O-.mjs";
6
- import { n as declareRuntimeCapability } from "../runtimeCapabilities-0tccjRlj.mjs";
7
- import { E as requireOrgRole, T as requireOrgMembership, k as requireTeamMembership } from "../permissions-Cm0uYHvd.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { d as createDomainError, l as UnauthorizedError, p as isArcError, t as ArcError } from "../errors-CW4anJBy.mjs";
3
+ import { n as requireSingleHeaderValue } from "../headers-DKZQKL-Z.mjs";
4
+ import { n as getUserRoles, r as normalizeRoles } from "../userHelpers-C76zD5pa.mjs";
5
+ import { o as toJsonSchema } from "../schemaConverter-BVjkQ5DD.mjs";
6
+ import { n as declareRuntimeCapability } from "../runtimeCapabilities-DIMKMV2G.mjs";
7
+ import { E as requireOrgRole, T as requireOrgMembership, k as requireTeamMembership } from "../permissions-C5ijIz5Q.mjs";
8
8
  import { ARC_ERROR_CODES } from "@classytic/repo-core/errors";
9
9
  import { isProductionEnv } from "@classytic/primitives/environment";
10
10
  import { createHmac, randomUUID, timingSafeEqual } from "node:crypto";
@@ -48,7 +48,10 @@ const authPlugin = async (fastify, opts = {}) => {
48
48
  let jwtContext = null;
49
49
  if (jwtConfig?.secret) {
50
50
  if (jwtConfig.secret.length < 32) throw new Error(`JWT secret must be at least 32 characters (current: ${jwtConfig.secret.length}).\nUse a strong random secret for production.`);
51
- const jwtPlugin = await import("@fastify/jwt");
51
+ const jwtPlugin = await import("@fastify/jwt").catch((error) => {
52
+ if (error instanceof Error && "code" in error && error.code === "ERR_MODULE_NOT_FOUND" && error.message.includes("@fastify/jwt")) throw new Error("Arc JWT authentication requires @fastify/jwt. Run `npm install @fastify/jwt`. Better Auth and custom authenticators do not require this package.", { cause: error });
53
+ throw error;
54
+ });
52
55
  await fastify.register(jwtPlugin.default ?? jwtPlugin, {
53
56
  secret: jwtConfig.secret,
54
57
  sign: {
@@ -2,7 +2,7 @@
2
2
  import { i as SessionData, s as SessionStore } from "../sessionManager-qimlKV0P.mjs";
3
3
  //#region src/auth/redis-session.d.ts
4
4
  /** Minimal Redis client interface — compatible with ioredis */
5
- interface RedisLike {
5
+ export interface RedisLike {
6
6
  get(key: string): Promise<string | null>;
7
7
  set(key: string, value: string, ...args: unknown[]): Promise<unknown>;
8
8
  del(...keys: string[]): Promise<number>;
@@ -11,7 +11,7 @@ interface RedisLike {
11
11
  srem(key: string, ...members: string[]): Promise<number>;
12
12
  expire(key: string, seconds: number): Promise<number>;
13
13
  }
14
- interface RedisSessionStoreOptions {
14
+ export interface RedisSessionStoreOptions {
15
15
  /** Redis client instance (ioredis or compatible) */
16
16
  redis: RedisLike;
17
17
  /** Key prefix for session keys (default: 'arc:session:') */
@@ -28,7 +28,7 @@ interface RedisSessionStoreOptions {
28
28
  *
29
29
  * Session expiration is handled by Redis TTL — no cleanup interval needed.
30
30
  */
31
- declare class RedisSessionStore implements SessionStore {
31
+ export declare class RedisSessionStore implements SessionStore {
32
32
  private redis;
33
33
  private prefix;
34
34
  private userPrefix;
@@ -39,5 +39,4 @@ declare class RedisSessionStore implements SessionStore {
39
39
  deleteAll(userId: string): Promise<void>;
40
40
  deleteAllExcept(userId: string, currentSessionId: string): Promise<void>;
41
41
  }
42
- //#endregion
43
- export { RedisLike, RedisSessionStore, RedisSessionStoreOptions };
42
+ //#endregion
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
2
  import sjson from "secure-json-parse";
3
3
  //#region src/auth/redis-session.ts
4
4
  /**
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { t as arcLog } from "./logger-DXjfIqjV.mjs";
3
- import { t as conjoinPolicyFilters } from "./filter-merge-IpGywvym.mjs";
4
- import { t as ArcError } from "./errors-CtrywMHP.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { t as arcLog } from "./logger-D4V1zGLI.mjs";
3
+ import { t as conjoinPolicyFilters } from "./filter-merge-DGM-GQ1J.mjs";
4
+ import { t as ArcError } from "./errors-CW4anJBy.mjs";
5
5
  //#region src/permissions/authorizationDecision.ts
6
6
  const log = arcLog("permissions:enforce");
7
7
  /**
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
2
  //#region src/collections/boundedMap.ts
3
3
  /**
4
4
  * Insertion-order LRU on a plain `Map` — the two moves, written once.
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { t as conjoinPolicyFilters } from "./filter-merge-IpGywvym.mjs";
3
- import { C as toRepositoryFilter } from "./plugin-BccET1tL.mjs";
4
- import { i as compileAggRequest, t as adapterSupportsAggregate } from "./validate-9yzHC1e2.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { t as conjoinPolicyFilters } from "./filter-merge-DGM-GQ1J.mjs";
3
+ import { C as toRepositoryFilter } from "./plugin-DALd9dcF.mjs";
4
+ import { i as compileAggRequest, t as adapterSupportsAggregate } from "./validate-CWp-lsrm.mjs";
5
5
  //#region src/core/aggregation/buildHandler.ts
6
6
  /**
7
7
  * Framework-agnostic aggregation execution. Runs safety guards,
@@ -12,18 +12,18 @@ import { n as UpstashKeyValueCommands, t as IoredisKeyValueCommands } from "../r
12
12
  * to ensure multi-tenant isolation and O(1) version-based invalidation.
13
13
  */
14
14
  /** Build a deterministic cache key for a query */
15
- declare function buildQueryKey(resource: string, operation: string, resourceVersion: number, params: Record<string, unknown>, userId?: string, orgId?: string): string;
15
+ export declare function buildQueryKey(resource: string, operation: string, resourceVersion: number, params: Record<string, unknown>, userId?: string, orgId?: string): string;
16
16
  /** Resource version key — stored in CacheStore, bumped on mutations */
17
- declare function versionKey(resource: string): string;
17
+ export declare function versionKey(resource: string): string;
18
18
  /** Tag version key — stored in CacheStore, bumped on cross-resource invalidation */
19
- declare function tagVersionKey(tag: string): string;
19
+ export declare function tagVersionKey(tag: string): string;
20
20
  /**
21
21
  * Digest of the query params for a cache key — repo-core's canonical serialiser (escaped,
22
22
  * type-preserving, key-order-free) under SHA-256. Two different queries never share a key: a
23
23
  * delimiter inside a value, `1` vs `"1"`, two dates or two regexes all stay distinct, and a
24
24
  * cryptographic digest leaves no crafted collision onto another caller's cached result.
25
25
  */
26
- declare function hashParams(params: Record<string, unknown>): string;
26
+ export declare function hashParams(params: Record<string, unknown>): string;
27
27
  //#endregion
28
28
  //#region src/cache/memory.d.ts
29
29
  interface MemoryCacheStoreOptions {
@@ -61,7 +61,7 @@ interface MemoryCacheStoreOptions {
61
61
  * - Entry size guard to avoid runaway memory usage
62
62
  * - Stats tracking for observability
63
63
  */
64
- declare class MemoryCacheStore<TValue = unknown> implements CacheStore<TValue> {
64
+ export declare class MemoryCacheStore<TValue = unknown> implements CacheStore<TValue> {
65
65
  readonly name = "memory-cache";
66
66
  private readonly cache;
67
67
  private readonly defaultTtlSeconds;
@@ -149,7 +149,7 @@ interface RedisCacheStoreOptions {
149
149
  * Suitable for multi-instance and horizontally scaled deployments.
150
150
  * Uses pipeline batching when available for bulk operations.
151
151
  */
152
- declare class RedisCacheStore<TValue = unknown> implements CacheStore<TValue> {
152
+ export declare class RedisCacheStore<TValue = unknown> implements CacheStore<TValue> {
153
153
  readonly name = "redis-cache";
154
154
  private readonly client;
155
155
  private readonly prefix;
@@ -214,7 +214,7 @@ interface IoredisLike extends IoredisKeyValueCommands {
214
214
  * });
215
215
  * ```
216
216
  */
217
- declare function ioredisAsCacheClient(client: IoredisLike): RedisCacheClient;
217
+ export declare function ioredisAsCacheClient(client: IoredisLike): RedisCacheClient;
218
218
  /**
219
219
  * Minimal `@upstash/redis` REST SDK shape the cache depends on — the shared
220
220
  * key/value commands (`utils/redisShapes.ts`) plus `incrby`. HTTP-based, so it
@@ -241,6 +241,6 @@ interface UpstashRedisLike extends UpstashKeyValueCommands {
241
241
  * });
242
242
  * ```
243
243
  */
244
- declare function upstashAsCacheClient(client: UpstashRedisLike): RedisCacheClient;
244
+ export declare function upstashAsCacheClient(client: UpstashRedisLike): RedisCacheClient;
245
245
  //#endregion
246
- export { type CacheEnvelope, type CacheLogger, type CacheResult, type CacheStats, type CacheStatus, type CacheStore, type CrossResourceRule, type IoredisLike, MemoryCacheStore, type MemoryCacheStoreOptions, QueryCache, type QueryCacheConfig, type QueryCacheDefaults, type QueryCachePluginOptions, type RedisCacheClient, RedisCacheStore, type RedisCacheStoreOptions, type RedisPipeline, type UpstashRedisLike, buildQueryKey, hashParams, ioredisAsCacheClient, queryCachePlugin, tagVersionKey, upstashAsCacheClient, versionKey };
246
+ export { type CacheEnvelope, type CacheLogger, type CacheResult, type CacheStats, type CacheStatus, type CacheStore, type CrossResourceRule, type IoredisLike, type MemoryCacheStoreOptions, QueryCache, type QueryCacheConfig, type QueryCacheDefaults, type QueryCachePluginOptions, type RedisCacheClient, type RedisCacheStoreOptions, type RedisPipeline, type UpstashRedisLike, queryCachePlugin };
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { i as versionKey, n as hashParams, r as tagVersionKey, t as buildQueryKey } from "../keys-B2KtgMLJ.mjs";
3
- import { t as MemoryCacheStore } from "../memory-9Cp7611C.mjs";
4
- import { r as QueryCache, t as queryCachePlugin } from "../queryCachePlugin-CFWNH8aT.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { i as versionKey, n as hashParams, r as tagVersionKey, t as buildQueryKey } from "../keys-CpoiZ8hU.mjs";
3
+ import { t as MemoryCacheStore } from "../memory-CTa5pOCW.mjs";
4
+ import { r as QueryCache, t as queryCachePlugin } from "../queryCachePlugin-BATECpyh.mjs";
5
5
  //#region src/cache/redis.ts
6
6
  /**
7
7
  * Redis-backed cache store.
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { t as __exportAll } from "./rolldown-runtime-D1w9Y1VJ.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { r as __exportAll } from "./rolldown-runtime-MYrLNGnq.mjs";
3
3
  import fp from "fastify-plugin";
4
4
  //#region src/plugins/caching.ts
5
5
  var caching_exports = /* @__PURE__ */ __exportAll({
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
2
  //#region src/events/outbox/claimed.ts
3
3
  function claimedAttempts(claimed) {
4
4
  const value = claimed.attempts;
@@ -1,5 +1,5 @@
1
1
 
2
- import { A as RequestWithExtras } from "../index-mqaqZNpe.mjs";
2
+ import { A as RequestWithExtras } from "../index-WH7xgvxS.mjs";
3
3
  import { A as CleanupStepResult, B as VerificationResult, C as CleanupResult, D as CleanupRunStore, E as CleanupRunStatus, F as PurgeEvidence, I as PurgeResourceResult, L as PurgeStrategyKind, M as CleanupWriteFence, N as DEFAULT_CLEANUP_LIMITS, O as CleanupRunTransitionPatch, P as PurgeActor, R as PurgeVerificationSummary, S as CleanupRecipe, T as CleanupRunCreateResult, _ as CleanupPermissions, a as CleanupEvidenceStore, b as CleanupPlanItem, c as CleanupInput, d as CleanupLease, f as CleanupLimits, g as CleanupPermissionCheck, h as CleanupOutcomeStatus, i as CleanupContext, j as CleanupStepRunStatus, k as CleanupStepProgress, l as CleanupJob, m as CleanupManifest, n as CLEANUP_TERMINAL_STATUSES, o as CleanupExecutionContext, p as CleanupLogger, r as CleanupCancelRequest, s as CleanupFinalizationPayload, t as Availability, u as CleanupJobQueue, v as CleanupPlan, w as CleanupRun, x as CleanupProgressSummary, y as CleanupPlanDraft, z as VerificationCheck } from "../types-DVLddu2q.mjs";
4
4
  import { n as ArcModule } from "../types-BJ-2XqVF.mjs";
5
5
  import { PurgeStrategyKind as PurgeStrategyKind$1 } from "@classytic/primitives/retention";
@@ -38,7 +38,7 @@ interface RecipeFromStepsInput {
38
38
  /** Provider steps in EXECUTION ORDER. */
39
39
  readonly steps: readonly CleanupStep[];
40
40
  }
41
- declare function recipeFromSteps(input: RecipeFromStepsInput): CleanupRecipe;
41
+ export declare function recipeFromSteps(input: RecipeFromStepsInput): CleanupRecipe;
42
42
  //#endregion
43
43
  //#region src/cleanup/errors.d.ts
44
44
  /**
@@ -83,7 +83,7 @@ type CleanupErrorCode =
83
83
  * step 4 of its classifier — a numeric `statusCode` + a separatored domain
84
84
  * `code` maps to that exact status + code on the wire, never `arc.internal_error`).
85
85
  */
86
- declare class CleanupError extends Error {
86
+ export declare class CleanupError extends Error {
87
87
  readonly code: CleanupErrorCode;
88
88
  readonly status: number;
89
89
  /** Alias of {@link status} — the property arc's error handler classifies on. */
@@ -96,11 +96,11 @@ declare class CleanupError extends Error {
96
96
  * durable `cancelRequested` flag is set. NOT a wire error — `processRun`
97
97
  * catches it and CAS-transitions the run to `cancelled`.
98
98
  */
99
- declare class CleanupCancelled extends Error {
99
+ export declare class CleanupCancelled extends Error {
100
100
  readonly runId: string;
101
101
  constructor(runId: string);
102
102
  }
103
- declare const CleanupErrors: {
103
+ export declare const CleanupErrors: {
104
104
  readonly unknownRecipe: (id: string) => CleanupError;
105
105
  readonly duplicateRecipe: (id: string) => CleanupError;
106
106
  readonly unavailable: (id: string, reason: string) => CleanupError;
@@ -131,7 +131,7 @@ declare const CleanupErrors: {
131
131
  * In-memory {@link CleanupRunStore}. Single-process only — see the module
132
132
  * docblock for the production caveat.
133
133
  */
134
- declare class MemoryCleanupRunStore implements CleanupRunStore {
134
+ export declare class MemoryCleanupRunStore implements CleanupRunStore {
135
135
  #private;
136
136
  /** Live run state, keyed by run id. Exposed for tests/inspection. */
137
137
  readonly runs: Map<string, CleanupRun>;
@@ -148,7 +148,7 @@ declare class MemoryCleanupRunStore implements CleanupRunStore {
148
148
  * In-memory {@link CleanupEvidenceStore} — idempotent by
149
149
  * `evidence.operationId`, exactly as the port requires.
150
150
  */
151
- declare class MemoryCleanupEvidenceStore implements CleanupEvidenceStore {
151
+ export declare class MemoryCleanupEvidenceStore implements CleanupEvidenceStore {
152
152
  #private;
153
153
  readonly evidence: PurgeEvidence[];
154
154
  readonly manifests: CleanupManifest[];
@@ -166,7 +166,7 @@ declare class MemoryCleanupEvidenceStore implements CleanupEvidenceStore {
166
166
  * gives you a microtask-deferred in-process queue that DOES auto-run
167
167
  * `processRun` off the request path.
168
168
  */
169
- declare class MemoryCleanupJobQueue implements CleanupJobQueue {
169
+ export declare class MemoryCleanupJobQueue implements CleanupJobQueue {
170
170
  readonly jobs: CleanupJob[];
171
171
  enqueue(job: CleanupJob): Promise<void>;
172
172
  /** Take everything enqueued so far, clearing the buffer. */
@@ -195,7 +195,7 @@ interface CleanupRegistry {
195
195
  * construction if two recipes share an id — a boot-time failure, never a
196
196
  * silent last-wins overwrite.
197
197
  */
198
- declare function createCleanupRegistry(recipes: readonly CleanupRecipe[]): CleanupRegistry;
198
+ export declare function createCleanupRegistry(recipes: readonly CleanupRecipe[]): CleanupRegistry;
199
199
  //#endregion
200
200
  //#region src/cleanup/service.d.ts
201
201
  interface CleanupServiceDeps {
@@ -259,7 +259,7 @@ interface CleanupService {
259
259
  cancel(id: string, input?: CancelInput): Promise<CleanupRun>;
260
260
  retry(id: string): Promise<CleanupRun>;
261
261
  }
262
- declare function createCleanupService(deps: CleanupServiceDeps): CleanupService;
262
+ export declare function createCleanupService(deps: CleanupServiceDeps): CleanupService;
263
263
  //#endregion
264
264
  //#region src/cleanup/module.d.ts
265
265
  interface DataCleanupModuleDeps {
@@ -330,15 +330,15 @@ interface DataCleanupModuleDeps {
330
330
  /** Injected clock (tests). */
331
331
  now?: () => Date;
332
332
  }
333
- declare function createDataCleanupModule(deps: DataCleanupModuleDeps): ArcModule<CleanupService>;
333
+ export declare function createDataCleanupModule(deps: DataCleanupModuleDeps): ArcModule<CleanupService>;
334
334
  //#endregion
335
335
  //#region src/cleanup/plan-digest.d.ts
336
336
  /** `sha256(canonical(planMaterial))` as a hex digest. */
337
- declare function computePlanDigest(plan: Omit<CleanupPlan, "digest">): string;
337
+ export declare function computePlanDigest(plan: Omit<CleanupPlan, "digest">): string;
338
338
  /**
339
339
  * Integrity checksum of a completed manifest (§5). Excludes the digest field
340
340
  * itself. Dates (e.g. `completedAt`) participate via the strict canonicalizer.
341
341
  */
342
- declare function computeManifestDigest(manifest: Record<string, unknown>): string;
342
+ export declare function computeManifestDigest(manifest: Record<string, unknown>): string;
343
343
  //#endregion
344
- export { type Availability, CLEANUP_TERMINAL_STATUSES, type CancelInput, type CleanupCancelRequest, CleanupCancelled, type CleanupContext, CleanupError, type CleanupErrorCode, CleanupErrors, type CleanupEvidenceStore, type CleanupExecutionContext, type CleanupFinalizationPayload, type CleanupInput, type CleanupJob, type CleanupJobQueue, type CleanupLease, type CleanupLimits, type CleanupLogger, type CleanupManifest, type CleanupOutcomeStatus, type CleanupPermissionCheck, type CleanupPermissions, type CleanupPlan, type CleanupPlanDraft, type CleanupPlanItem, type CleanupProgressSummary, type CleanupRecipe, type CleanupRecipeInfo, type CleanupRegistry, type CleanupResult, type CleanupRun, type CleanupRunCreateResult, type CleanupRunStatus, type CleanupRunStore, type CleanupRunTransitionPatch, type CleanupService, type CleanupServiceDeps, type CleanupStepProgress, type CleanupStepResult, type CleanupStepRunStatus, type CleanupWriteFence, DEFAULT_CLEANUP_LIMITS, type DataCleanupModuleDeps, type ExecuteInput, MemoryCleanupEvidenceStore, MemoryCleanupJobQueue, MemoryCleanupRunStore, type PreviewInput, type PurgeActor, type PurgeEvidence, type PurgeResourceResult, type PurgeStrategyKind, type PurgeVerificationSummary, type RecipeFromStepsInput, type VerificationCheck, type VerificationResult, computeManifestDigest, computePlanDigest, createCleanupRegistry, createCleanupService, createDataCleanupModule, recipeFromSteps };
344
+ export { type Availability, CLEANUP_TERMINAL_STATUSES, type CancelInput, type CleanupCancelRequest, type CleanupContext, type CleanupErrorCode, type CleanupEvidenceStore, type CleanupExecutionContext, type CleanupFinalizationPayload, type CleanupInput, type CleanupJob, type CleanupJobQueue, type CleanupLease, type CleanupLimits, type CleanupLogger, type CleanupManifest, type CleanupOutcomeStatus, type CleanupPermissionCheck, type CleanupPermissions, type CleanupPlan, type CleanupPlanDraft, type CleanupPlanItem, type CleanupProgressSummary, type CleanupRecipe, type CleanupRecipeInfo, type CleanupRegistry, type CleanupResult, type CleanupRun, type CleanupRunCreateResult, type CleanupRunStatus, type CleanupRunStore, type CleanupRunTransitionPatch, type CleanupService, type CleanupServiceDeps, type CleanupStepProgress, type CleanupStepResult, type CleanupStepRunStatus, type CleanupWriteFence, DEFAULT_CLEANUP_LIMITS, type DataCleanupModuleDeps, type ExecuteInput, type PreviewInput, type PurgeActor, type PurgeEvidence, type PurgeResourceResult, type PurgeStrategyKind, type PurgeVerificationSummary, type RecipeFromStepsInput, type VerificationCheck, type VerificationResult };
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { g as getUserId } from "../types-Bk9NOgOC.mjs";
3
- import { t as defineResource } from "../defineResource-DIC7JZGU.mjs";
4
- import { t as defineModule } from "../module-BSvOQC7E.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { g as getUserId } from "../types-fvO6Ovzx.mjs";
3
+ import { t as defineResource } from "../defineResource-gUp9ug66.mjs";
4
+ import { t as defineModule } from "../module--L0iBIZz.mjs";
5
5
  import { createPurgeEvidence } from "@classytic/primitives/retention";
6
6
  import { canonicalJson, sha256Hex } from "@classytic/primitives/canonical";
7
7
  //#region src/cleanup/errors.ts
@@ -1,7 +1,7 @@
1
1
 
2
- import { F as ResourceDefinition, X as RouteSchemaOptions, kt as RateLimitConfig } from "../../index-mqaqZNpe.mjs";
2
+ import { F as ResourceDefinition, X as RouteSchemaOptions, kt as RateLimitConfig } from "../../index-WH7xgvxS.mjs";
3
3
  //#region src/cli/commands/describe.d.ts
4
- interface DescribedResource {
4
+ export interface DescribedResource {
5
5
  name: string;
6
6
  displayName: string;
7
7
  prefix: string;
@@ -124,7 +124,7 @@ interface EventDescription {
124
124
  * Hosts that want a JSON dump of one resource without spawning the CLI
125
125
  * can call this directly.
126
126
  */
127
- declare function describeResource(resource: ResourceDefinition<unknown>, module?: string): DescribedResource;
128
- declare function describe(args: string[]): Promise<void>;
127
+ export declare function describeResource(resource: ResourceDefinition<unknown>, module?: string): DescribedResource;
128
+ export declare function describe(args: string[]): Promise<void>;
129
129
  //#endregion
130
- export { DescribedResource, describe, describeResource };
130
+ export {};
@@ -1,6 +1,6 @@
1
- /*! @classytic/arc v2.43.0 | MIT | https://classytic.com */
2
- import { t as CRUD_OPERATIONS } from "../../constants-Cu7Mx7_U.mjs";
3
- import { n as stringifyMeasureMap } from "../../ResourceRegistry-CuCARu2B.mjs";
1
+ /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
+ import { t as CRUD_OPERATIONS } from "../../constants-B2QHb6u6.mjs";
3
+ import { n as stringifyMeasureMap } from "../../ResourceRegistry-DJxHUpE4.mjs";
4
4
  import { resolve } from "node:path";
5
5
  import { pathToFileURL } from "node:url";
6
6
  //#region src/cli/commands/describe.ts