@classytic/arc 2.44.0 → 2.45.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 (154) hide show
  1. package/dist/{EventTransport-DZWDsaPa.mjs → EventTransport-Ci6hGO1Y.mjs} +2 -2
  2. package/dist/{HookSystem-yjEgn7Cm.mjs → HookSystem-CtnnYHME.mjs} +2 -2
  3. package/dist/{ResourceRegistry-DJxHUpE4.mjs → ResourceRegistry-BNoHOx-D.mjs} +2 -2
  4. package/dist/{acquire-BozJ-9yt.mjs → acquire-BW_2Dt60.mjs} +1 -1
  5. package/dist/{actionPermissions-5N04zBL4.mjs → actionPermissions-TAc_6LCw.mjs} +13 -13
  6. package/dist/audit/index.mjs +4 -4
  7. package/dist/auth/audit.mjs +1 -1
  8. package/dist/auth/index.mjs +10 -11
  9. package/dist/auth/redis-session.mjs +1 -1
  10. package/dist/{authorizationDecision-wX3SA9w_.mjs → authorizationDecision-BixzgirP.mjs} +4 -4
  11. package/dist/{boundedMap-DWiKW7lP.mjs → boundedMap-DQfXgxMo.mjs} +1 -1
  12. package/dist/{buildHandler-Bswu_vNb.mjs → buildHandler-mEUmO2_u.mjs} +4 -4
  13. package/dist/cache/index.mjs +4 -4
  14. package/dist/{caching-Drp68DIS.mjs → caching-TQfW2QX7.mjs} +2 -2
  15. package/dist/{claimed-DYvQoZLv.mjs → claimed-CnEEOHuL.mjs} +1 -1
  16. package/dist/cleanup/index.mjs +4 -4
  17. package/dist/cli/commands/describe.mjs +3 -3
  18. package/dist/cli/commands/docs.mjs +3 -3
  19. package/dist/cli/commands/doctor.mjs +1 -1
  20. package/dist/cli/commands/generate.mjs +2 -2
  21. package/dist/cli/commands/init.mjs +2 -2
  22. package/dist/cli/commands/introspect.mjs +2 -2
  23. package/dist/cli/index.mjs +3 -3
  24. package/dist/{constants-B2QHb6u6.mjs → constants-B90SnSQn.mjs} +1 -1
  25. package/dist/context/index.mjs +5 -5
  26. package/dist/core/index.mjs +7 -7
  27. package/dist/{core-COcqo0Cp.mjs → core-DV9PSXtr.mjs} +3 -3
  28. package/dist/{createActionRouter-zG13rpPJ.mjs → createActionRouter-BgPCYU2U.mjs} +6 -6
  29. package/dist/{createAggregationRouter-CWRz96Vr.mjs → createAggregationRouter-lNCkDwKe.mjs} +7 -7
  30. package/dist/{createApp-BGLYtErt.mjs → createApp-BSBPntOQ.mjs} +28 -28
  31. package/dist/{defineAggregation--3xguLkk.mjs → defineAggregation-CwD8_XNd.mjs} +1 -1
  32. package/dist/{defineResource-gUp9ug66.mjs → defineResource-CRkhRRSj.mjs} +7 -7
  33. package/dist/discovery/index.mjs +1 -1
  34. package/dist/docs/index.mjs +3 -3
  35. package/dist/{elevation-BG4gnMsJ.mjs → elevation-BAfsnnO0.mjs} +5 -5
  36. package/dist/encryption/index.mjs +3 -3
  37. package/dist/{errorHandler-COHw3N1b.mjs → errorHandler-DbHGwrQM.mjs} +3 -3
  38. package/dist/{errors-CW4anJBy.mjs → errors-C9G4A8cN.mjs} +1 -1
  39. package/dist/{eventPlugin-BweHAVws.mjs → eventPlugin-Dghr7iL5.mjs} +8 -8
  40. package/dist/{eventTypes-N4-omQFR.mjs → eventTypes-DDy7BMAn.mjs} +2 -2
  41. package/dist/events/index.mjs +7 -7
  42. package/dist/events/transports/redis-stream-entry.mjs +4 -4
  43. package/dist/events/transports/redis.mjs +2 -2
  44. package/dist/factory/index.d.mts +1 -1
  45. package/dist/factory/index.mjs +6 -6
  46. package/dist/{fields-A5crhsJb.mjs → fields-Da--1DNS.mjs} +1 -1
  47. package/dist/{filter-merge-DGM-GQ1J.mjs → filter-merge-BYKBa9b2.mjs} +1 -1
  48. package/dist/{generate-BXKo2Gc8.mjs → generate-Cm5Ct81v.mjs} +2 -2
  49. package/dist/{headers-DKZQKL-Z.mjs → headers-B6DRXXzT.mjs} +2 -2
  50. package/dist/{health-BYAwA6YS.mjs → health-hRGgxnOC.mjs} +1 -1
  51. package/dist/{health-CrqUp3sz.mjs → health-pLbfckGB.mjs} +1 -1
  52. package/dist/hooks/index.mjs +2 -2
  53. package/dist/idempotency/index.mjs +7 -7
  54. package/dist/idempotency/redis.mjs +2 -2
  55. package/dist/{index-BkV55WlV.d.mts → index-uhkUA5-U.d.mts} +1 -1
  56. package/dist/index.mjs +11 -11
  57. package/dist/{init-BPzK5Lnr.mjs → init-lpaUB-Ph.mjs} +1 -1
  58. package/dist/integrations/event-gateway.mjs +2 -2
  59. package/dist/integrations/index.mjs +1 -1
  60. package/dist/integrations/jobs/index.mjs +3 -3
  61. package/dist/integrations/mcp/index.mjs +2 -2
  62. package/dist/integrations/mcp/testing.mjs +2 -2
  63. package/dist/integrations/streamline.mjs +3 -3
  64. package/dist/integrations/webhooks.mjs +3 -3
  65. package/dist/integrations/websocket-pushref-redis.mjs +1 -1
  66. package/dist/integrations/websocket-redis.mjs +1 -1
  67. package/dist/integrations/websocket.mjs +2 -2
  68. package/dist/{jsonBody-YIq-vGLv.mjs → jsonBody-CzKHE-Fg.mjs} +2 -2
  69. package/dist/{keys-CpoiZ8hU.mjs → keys-BoZKnBel.mjs} +1 -1
  70. package/dist/{loadResources-6jO52-RR.mjs → loadResources-BEKG6bP9.mjs} +3 -3
  71. package/dist/{loadResourcesFromEntry-MP8xEppu.mjs → loadResourcesFromEntry-BEPA0ptL.mjs} +2 -2
  72. package/dist/logger/index.mjs +2 -2
  73. package/dist/{logger-D4V1zGLI.mjs → logger-vxu0DXf_.mjs} +1 -1
  74. package/dist/{mcpPlugin-srPc7ItN.mjs → mcpPlugin-DP_UB0LK.mjs} +22 -22
  75. package/dist/{memory-CTa5pOCW.mjs → memory-DJN6kyC8.mjs} +3 -3
  76. package/dist/{metrics-DsZrvnpB.mjs → metrics-wfr7XFE7.mjs} +3 -3
  77. package/dist/middleware/index.mjs +3 -3
  78. package/dist/migrations/index.mjs +2 -2
  79. package/dist/{module--L0iBIZz.mjs → module-BtdcGn_E.mjs} +1 -1
  80. package/dist/{mongodb-memory-server-CHhYSq5y.mjs → mongodb-memory-server-Cn57YIsc.mjs} +3 -3
  81. package/dist/{mongoose-CYJCLyi-.mjs → mongoose-DzFjTtBN.mjs} +3 -3
  82. package/dist/{multipartBody-Cc7eZ9cq.mjs → multipartBody-NHGOuUnG.mjs} +1 -1
  83. package/dist/{node-D8UZv_8c.mjs → node-C0HB_V6E.mjs} +2 -2
  84. package/dist/{openapi-CMegfsm8.mjs → openapi-BCOaGAgE.mjs} +6 -6
  85. package/dist/outbox-admin/index.mjs +5 -5
  86. package/dist/{outbox-module-Ryk270jd.mjs → outbox-module-BVDiMwXb.mjs} +9 -9
  87. package/dist/permissions/index.mjs +7 -7
  88. package/dist/{permissions-C5ijIz5Q.mjs → permissions-IdHJ0_5V.mjs} +9 -9
  89. package/dist/{pipe-D81zMtWs.mjs → pipe-BPJPifhi.mjs} +2 -2
  90. package/dist/pipeline/index.mjs +2 -2
  91. package/dist/{plan-CJGMKoui.mjs → plan-CEedaMlr.mjs} +1 -1
  92. package/dist/{plugin-DALd9dcF.mjs → plugin-BDBOS3-c.mjs} +22 -22
  93. package/dist/plugins/index.d.mts +2 -2
  94. package/dist/plugins/index.mjs +17 -17
  95. package/dist/plugins/response-cache.mjs +4 -4
  96. package/dist/plugins/tracing-entry.mjs +2 -2
  97. package/dist/{pluralize-COUNYo3d.mjs → pluralize-B4FcZEyI.mjs} +1 -1
  98. package/dist/presets/filesUpload.mjs +5 -5
  99. package/dist/presets/index.mjs +2 -2
  100. package/dist/presets/multiTenant.mjs +5 -5
  101. package/dist/presets/search.mjs +2 -2
  102. package/dist/{presets-CONf2Qem.mjs → presets-BPjNc-Np.mjs} +4 -4
  103. package/dist/{projection-wFoLqdss.mjs → projection-BXUOYosj.mjs} +2 -2
  104. package/dist/{queryCachePlugin-BATECpyh.mjs → queryCachePlugin-s4pBvjFF.mjs} +6 -6
  105. package/dist/{rateLimitKey-DVEZ_UpV.mjs → rateLimitKey-C4mkCwQ-.mjs} +1 -1
  106. package/dist/{realtime-xyubMKSB.mjs → realtime-MPj6eIoV.mjs} +11 -11
  107. package/dist/registry/index.mjs +3 -3
  108. package/dist/{registry-Bdzg-hdm.mjs → registry-DIdh6mWE.mjs} +2 -2
  109. package/dist/{renewingLease-BFJxGPuh.mjs → renewingLease-boGRXWCr.mjs} +1 -1
  110. package/dist/{replyHelpers-Bnc6lJyy.mjs → replyHelpers-BW_p67QD.mjs} +2 -2
  111. package/dist/{requestContext-C10UeFe5.mjs → requestContext-B8JKbeb7.mjs} +1 -1
  112. package/dist/{requirement-Bu50QALH.mjs → requirement-tXpcD56f.mjs} +1 -1
  113. package/dist/{resourceRateLimit-urWPJxrt.mjs → resourceRateLimit-DWob9nQ8.mjs} +2 -2
  114. package/dist/{rolldown-runtime-MYrLNGnq.mjs → rolldown-runtime-AD16t29l.mjs} +1 -1
  115. package/dist/{routeValidator-DHtpzrzk.mjs → routeValidator-CnmenC4Y.mjs} +1 -1
  116. package/dist/{runtimeCapabilities-DIMKMV2G.mjs → runtimeCapabilities-C7gAbIxC.mjs} +1 -1
  117. package/dist/{schedules-CKTs5ys8.mjs → schedules-Dr9gNFzx.mjs} +5 -5
  118. package/dist/{schemaConverter-BVjkQ5DD.mjs → schemaConverter-rzBovk00.mjs} +2 -2
  119. package/dist/{schemaIR-BA0Hb21Y.mjs → schemaIR-GrOK1JO4.mjs} +2 -2
  120. package/dist/schemas/index.mjs +1 -1
  121. package/dist/scim/index.mjs +2 -2
  122. package/dist/scope/index.mjs +5 -5
  123. package/dist/{scope-DINaj7Ax.mjs → scope-DpOpxyHT.mjs} +4 -4
  124. package/dist/{shutdown-LpLMH8T1.mjs → shutdown-BW8qwgpx.mjs} +1 -1
  125. package/dist/{simpleEqualityMatcher-DbwIM1f1.mjs → simpleEqualityMatcher-WdZw6GOt.mjs} +1 -1
  126. package/dist/sse-D8AgoUN3.mjs +212 -0
  127. package/dist/{sseStream-DQChzGTs.mjs → sseStream-B7rPhIQw.mjs} +2 -2
  128. package/dist/{store-helpers-Coj9RhOZ.mjs → store-helpers-Bxk7TDgG.mjs} +1 -1
  129. package/dist/{streaming-JzB5CAga.mjs → streaming-BLg1buwL.mjs} +1 -1
  130. package/dist/{subscriberIdentity-DeyppIif.mjs → subscriberIdentity-Cxp19Ked.mjs} +1 -1
  131. package/dist/{tenancy-DxV8OuX2.mjs → tenancy-D7jo78AP.mjs} +2 -2
  132. package/dist/{tenantPreparation-CBvvAcAj.mjs → tenantPreparation-DqJnokDW.mjs} +4 -4
  133. package/dist/testing/cleanupStoreContract.mjs +1 -1
  134. package/dist/testing/index.d.mts +1 -1
  135. package/dist/testing/index.mjs +16 -16
  136. package/dist/testing/outboxStoreContract.mjs +2 -2
  137. package/dist/testing/requiredPorts.mjs +2 -2
  138. package/dist/testing/storageContract.mjs +1 -1
  139. package/dist/{timing-CntavTlR.mjs → timing-Y6_ZpoYG.mjs} +1 -1
  140. package/dist/{transactionContext-orvnGu4F.mjs → transactionContext-BWp0MBGL.mjs} +1 -1
  141. package/dist/{typeGuards-kEaP_WmO.mjs → typeGuards-CtZJypJO.mjs} +1 -1
  142. package/dist/types/index.mjs +1 -1
  143. package/dist/types/storage.mjs +1 -1
  144. package/dist/{types-fvO6Ovzx.mjs → types-4JKkSvds.mjs} +4 -4
  145. package/dist/usage/index.mjs +4 -4
  146. package/dist/{userHelpers-C76zD5pa.mjs → userHelpers-Nc5ePCsf.mjs} +1 -1
  147. package/dist/utils/index.mjs +12 -12
  148. package/dist/{utils-BpkVZ8rB.mjs → utils-QWSIKqAk.mjs} +4 -4
  149. package/dist/{validate-CWp-lsrm.mjs → validate-CT4umNhp.mjs} +3 -3
  150. package/dist/{versioning-Bsb51gGT.d.mts → versioning-Bqm_57Qt.d.mts} +23 -1
  151. package/dist/{versioning-CHhL9P3o.mjs → versioning-JIqxO64K.mjs} +3 -3
  152. package/dist/{workScope-n9a7d_lZ.mjs → workScope-BDjGXwU9.mjs} +2 -2
  153. package/package.json +17 -16
  154. package/dist/sse-BzJFPX_1.mjs +0 -89
@@ -0,0 +1,212 @@
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { r as __exportAll } from "./rolldown-runtime-AD16t29l.mjs";
3
+ import { t as arcLog } from "./logger-vxu0DXf_.mjs";
4
+ import { g as getUserId, n as PUBLIC_SCOPE } from "./types-4JKkSvds.mjs";
5
+ import { n as isEventVisible, t as eventAudienceOf } from "./tenancy-D7jo78AP.mjs";
6
+ import { a as promoteStreamTokenToHeader } from "./streaming-BLg1buwL.mjs";
7
+ import { t as openSseStream } from "./sseStream-B7rPhIQw.mjs";
8
+ import fp from "fastify-plugin";
9
+ //#region src/plugins/sse.ts
10
+ var sse_exports = /* @__PURE__ */ __exportAll({
11
+ default: () => sse_default,
12
+ ssePlugin: () => ssePlugin
13
+ });
14
+ const log = arcLog("sse");
15
+ /** Per-registration stats providers behind one `sseStats` decorator. */
16
+ const statsProviders = /* @__PURE__ */ new WeakMap();
17
+ function registerStats(fastify, provider) {
18
+ if (fastify.hasDecorator("sseStats")) {
19
+ statsProviders.get(fastify.sseStats)?.add(provider);
20
+ return;
21
+ }
22
+ const providers = /* @__PURE__ */ new Set([provider]);
23
+ const sseStats = () => {
24
+ const total = {
25
+ connections: 0,
26
+ keys: 0
27
+ };
28
+ for (const p of providers) {
29
+ const s = p();
30
+ total.connections += s.connections;
31
+ total.keys += s.keys;
32
+ }
33
+ return total;
34
+ };
35
+ statsProviders.set(sseStats, providers);
36
+ fastify.decorate("sseStats", sseStats);
37
+ }
38
+ const serializeEvent = (event) => JSON.stringify({
39
+ type: event.type,
40
+ payload: event.payload,
41
+ meta: {
42
+ id: event.meta.id,
43
+ timestamp: event.meta.timestamp
44
+ }
45
+ });
46
+ const ssePlugin = async (fastify, opts = {}) => {
47
+ const { path = "/events/stream", requireAuth = true, patterns = ["*"], heartbeat = 3e4, orgScoped = true, filter: customFilter, tokenQueryParam = "token", audience: resolveAudience, connectionKey = (request) => getUserId(request.scope ?? PUBLIC_SCOPE) } = opts;
48
+ if (!fastify.hasDecorator("events")) {
49
+ log.warn("Events plugin (arc-events) not registered. SSE plugin will not function. Register eventPlugin before ssePlugin.");
50
+ return;
51
+ }
52
+ const activeConnections = /* @__PURE__ */ new Set();
53
+ const connections = /* @__PURE__ */ new Set();
54
+ const byKey = /* @__PURE__ */ new Map();
55
+ const sharedUnsubs = [];
56
+ let sharedSubscription;
57
+ const visibleTo = (conn, event) => (!orgScoped || isEventVisible(event.meta?.organizationId, conn.orgAudience)) && (!customFilter || customFilter(event, conn.request));
58
+ const dispatch = (event) => {
59
+ let keys;
60
+ try {
61
+ keys = resolveAudience?.(event);
62
+ if (keys != null && !Array.isArray(keys)) throw new TypeError("audience must return an array");
63
+ } catch (error) {
64
+ log.error(`audience resolver failed for '${event.type}'; event not delivered`, error);
65
+ return;
66
+ }
67
+ let data;
68
+ let filterFailed = false;
69
+ const deliver = (conn) => {
70
+ try {
71
+ if (!visibleTo(conn, event)) return;
72
+ } catch (error) {
73
+ if (!filterFailed) log.error(`filter threw for '${event.type}'`, error);
74
+ filterFailed = true;
75
+ return;
76
+ }
77
+ data ??= serializeEvent(event);
78
+ conn.stream.write(event.type, data);
79
+ };
80
+ if (keys == null) {
81
+ for (const conn of connections) deliver(conn);
82
+ return;
83
+ }
84
+ for (const key of new Set(keys)) {
85
+ const set = byKey.get(key);
86
+ if (set) for (const conn of set) deliver(conn);
87
+ }
88
+ };
89
+ const ensureSharedSubscription = () => {
90
+ sharedSubscription ??= (async () => {
91
+ for (const pattern of patterns) sharedUnsubs.push(await fastify.events.subscribe(pattern, dispatch));
92
+ })().catch((error) => {
93
+ for (const unsub of sharedUnsubs.splice(0)) unsub();
94
+ sharedSubscription = void 0;
95
+ throw error;
96
+ });
97
+ return sharedSubscription;
98
+ };
99
+ registerStats(fastify, () => resolveAudience ? {
100
+ connections: connections.size,
101
+ keys: byKey.size
102
+ } : {
103
+ connections: activeConnections.size,
104
+ keys: 0
105
+ });
106
+ const routeOpts = {
107
+ method: "GET",
108
+ url: path,
109
+ schema: {
110
+ tags: ["Events"],
111
+ summary: "SSE event stream",
112
+ description: "Server-Sent Events stream for real-time domain events",
113
+ response: { 200: {
114
+ type: "string",
115
+ description: "text/event-stream"
116
+ } }
117
+ },
118
+ handler: async (request, reply) => {
119
+ const stream = openSseStream(request, reply, { heartbeatMs: heartbeat });
120
+ stream.onCleanup(() => activeConnections.delete(stream.close));
121
+ const scope = request.scope ?? PUBLIC_SCOPE;
122
+ const audience = eventAudienceOf(scope);
123
+ if (resolveAudience) {
124
+ const key = connectionKey(request) || void 0;
125
+ const conn = {
126
+ request,
127
+ stream,
128
+ orgAudience: audience,
129
+ key
130
+ };
131
+ let closed = false;
132
+ stream.onCleanup(() => {
133
+ closed = true;
134
+ activeConnections.delete(stream.close);
135
+ connections.delete(conn);
136
+ const set = key === void 0 ? void 0 : byKey.get(key);
137
+ if (set?.delete(conn) && set.size === 0) byKey.delete(key);
138
+ });
139
+ await ensureSharedSubscription();
140
+ if (closed) return;
141
+ connections.add(conn);
142
+ if (key !== void 0) {
143
+ const set = byKey.get(key) ?? /* @__PURE__ */ new Set();
144
+ set.add(conn);
145
+ byKey.set(key, set);
146
+ }
147
+ activeConnections.add(stream.close);
148
+ return;
149
+ }
150
+ let closed = false;
151
+ const unsubs = [];
152
+ stream.onCleanup(() => {
153
+ closed = true;
154
+ for (const unsub of unsubs.splice(0)) unsub();
155
+ });
156
+ for (const pattern of patterns) {
157
+ const unsub = await fastify.events.subscribe(pattern, async (event) => {
158
+ if (orgScoped && !isEventVisible(event.meta?.organizationId, audience)) return;
159
+ if (customFilter && !customFilter(event, request)) return;
160
+ const data = JSON.stringify({
161
+ type: event.type,
162
+ payload: event.payload,
163
+ meta: {
164
+ id: event.meta.id,
165
+ timestamp: event.meta.timestamp
166
+ }
167
+ });
168
+ stream.write(event.type, data);
169
+ });
170
+ if (closed) {
171
+ unsub();
172
+ return;
173
+ }
174
+ unsubs.push(unsub);
175
+ }
176
+ activeConnections.add(stream.close);
177
+ }
178
+ };
179
+ if (requireAuth) {
180
+ routeOpts.preHandler = (request, reply) => {
181
+ if (tokenQueryParam) promoteStreamTokenToHeader(request, tokenQueryParam);
182
+ const authenticate = fastify.authenticate;
183
+ if (typeof authenticate !== "function") {
184
+ reply.code(401).send({ error: "Unauthorized" });
185
+ return Promise.resolve();
186
+ }
187
+ return authenticate(request, reply);
188
+ };
189
+ fastify.addHook("onReady", async () => {
190
+ if (!fastify.hasDecorator("authenticate")) throw new Error("[arc-sse] requireAuth is true but no `authenticate` decorator was registered by the time the app was ready. Register an auth plugin, or set requireAuth: false.");
191
+ });
192
+ }
193
+ fastify.route(routeOpts);
194
+ fastify.addHook("onClose", async () => {
195
+ for (const cleanup of activeConnections) cleanup();
196
+ activeConnections.clear();
197
+ for (const unsub of sharedUnsubs.splice(0)) unsub();
198
+ });
199
+ log.debug("Plugin registered", {
200
+ path,
201
+ patterns,
202
+ orgScoped,
203
+ keyed: Boolean(resolveAudience)
204
+ });
205
+ };
206
+ var sse_default = fp(ssePlugin, {
207
+ name: "arc-sse",
208
+ fastify: "5.x",
209
+ dependencies: ["arc-events"]
210
+ });
211
+ //#endregion
212
+ export { sse_exports as n, sse_default as t };
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { n as forwardedStreamHeaders } from "./streaming-JzB5CAga.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { n as forwardedStreamHeaders } from "./streaming-BLg1buwL.mjs";
3
3
  //#region src/utils/sseStream.ts
4
4
  /**
5
5
  * Take over the reply socket and open an SSE stream. Call ONLY after every
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  //#region src/utils/store-helpers.ts
3
3
  /**
4
4
  * Classify an error thrown by `getOne` / `getById` / `update` as a
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  import { Readable } from "node:stream";
3
3
  //#region src/utils/streaming.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  //#region src/events/subscriberIdentity.ts
3
3
  const SUBSCRIBER_ID = Symbol.for("@classytic/arc/subscriber-id");
4
4
  /** Assign a deployment-stable identity for durable per-handler progress; never use an index. */
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { b as isElevated, c as getOrgId } from "./types-fvO6Ovzx.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { b as isElevated, c as getOrgId } from "./types-4JKkSvds.mjs";
3
3
  //#region src/core/tenancy.ts
4
4
  function eventAudienceOf(scope) {
5
5
  const tenancy = resolveTenancy({ _scope: scope }, "organizationId");
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { t as conjoinPolicyFilters } from "./filter-merge-DGM-GQ1J.mjs";
3
- import { d as createDomainError } from "./errors-CW4anJBy.mjs";
4
- import { b as isElevated, c as getOrgId, d as getScopeContext, m as getTeamId, v as hasOrgAccess } from "./types-fvO6Ovzx.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { t as conjoinPolicyFilters } from "./filter-merge-BYKBa9b2.mjs";
3
+ import { d as createDomainError } from "./errors-C9G4A8cN.mjs";
4
+ import { b as isElevated, c as getOrgId, d as getScopeContext, m as getTeamId, v as hasOrgAccess } from "./types-4JKkSvds.mjs";
5
5
  //#region src/permissions/tenantPreparation.ts
6
6
  /** Tenant preparation shared by HTTP middleware and direct transport invocation. */
7
7
  const PREPARATION = Symbol.for("arc.tenantPreparation");
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
3
3
  //#region src/testing/cleanupStoreContract.ts
4
4
  /**
@@ -4,7 +4,7 @@ import { l as PermissionCheck, t as AnyRecord } from "../base-CZyixEQR.mjs";
4
4
  import { F as ResourceDefinition } from "../index-WH7xgvxS.mjs";
5
5
  import { h as ModuleSetupContext, m as ModuleDisposer, o as ArcPorts, p as PortName, r as ArcModuleInput, u as ModuleName } from "../types-BJ-2XqVF.mjs";
6
6
  import "../index-CUJvoyw3.mjs";
7
- import { n as CreateAppOptions } from "../index-BkV55WlV.mjs";
7
+ import { n as CreateAppOptions } from "../index-uhkUA5-U.mjs";
8
8
  import { StorageContractSetup, StorageContractSetupResult, runStorageContract } from "./storageContract.mjs";
9
9
  import { StandardRepo } from "@classytic/repo-core/repository";
10
10
  import { FastifyInstance, FastifyServerOptions } from "fastify";
@@ -1,14 +1,14 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { o as __toESM } from "../rolldown-runtime-MYrLNGnq.mjs";
3
- import { t as CRUD_OPERATIONS } from "../constants-B2QHb6u6.mjs";
4
- import { c as BaseController } from "../plugin-DALd9dcF.mjs";
5
- import { g as getUserId } from "../types-fvO6Ovzx.mjs";
6
- import { t as defineAggregation } from "../defineAggregation--3xguLkk.mjs";
7
- import { t as defineResource } from "../defineResource-gUp9ug66.mjs";
8
- import { E as requireOrgRole } from "../permissions-C5ijIz5Q.mjs";
9
- import { h as asModulePorts, r as createApp } from "../createApp-BGLYtErt.mjs";
10
- import { d as resolveModule, l as isLazyBridge, o as resolveModuleClosure } from "../plan-CJGMKoui.mjs";
11
- import { n as getModuleExports } from "../module--L0iBIZz.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { o as __toESM } from "../rolldown-runtime-AD16t29l.mjs";
3
+ import { t as CRUD_OPERATIONS } from "../constants-B90SnSQn.mjs";
4
+ import { c as BaseController } from "../plugin-BDBOS3-c.mjs";
5
+ import { g as getUserId } from "../types-4JKkSvds.mjs";
6
+ import { t as defineAggregation } from "../defineAggregation-CwD8_XNd.mjs";
7
+ import { t as defineResource } from "../defineResource-CRkhRRSj.mjs";
8
+ import { E as requireOrgRole } from "../permissions-IdHJ0_5V.mjs";
9
+ import { h as asModulePorts, r as createApp } from "../createApp-BSBPntOQ.mjs";
10
+ import { d as resolveModule, l as isLazyBridge, o as resolveModuleClosure } from "../plan-CEedaMlr.mjs";
11
+ import { n as getModuleExports } from "../module-BtdcGn_E.mjs";
12
12
  import { runStorageContract } from "./storageContract.mjs";
13
13
  import Fastify from "fastify";
14
14
  import { afterAll, describe, expect, it, vi } from "vitest";
@@ -266,13 +266,13 @@ function testActorAuth(defaultActor) {
266
266
  async function mongoMemoryDatabase(opts) {
267
267
  let mms;
268
268
  try {
269
- mms = await import("../mongodb-memory-server-CHhYSq5y.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
269
+ mms = await import("../mongodb-memory-server-Cn57YIsc.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
270
270
  } catch {
271
271
  throw new Error("[arc-testing] bootModuleApp's default database is in-memory MongoDB — install 'mongodb-memory-server' + 'mongoose' as devDependencies, or inject your own `database` factory for a different store");
272
272
  }
273
273
  const server = opts.replset ? await mms.MongoMemoryReplSet.create({ replSet: { count: 1 } }) : await mms.MongoMemoryServer.create();
274
274
  const uri = server.getUri();
275
- const mongoose = (await import("../mongoose-CYJCLyi-.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1))).default;
275
+ const mongoose = (await import("../mongoose-DzFjTtBN.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1))).default;
276
276
  if (mongoose.connection.readyState !== 0) await mongoose.disconnect();
277
277
  await mongoose.connect(uri);
278
278
  mongoose.connection.deleteModel(/.*/);
@@ -1548,7 +1548,7 @@ function scopeRoleGate(...allowed) {
1548
1548
  */
1549
1549
  async function startInMemoryMongo() {
1550
1550
  try {
1551
- const { MongoMemoryServer } = await import("../mongodb-memory-server-CHhYSq5y.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
1551
+ const { MongoMemoryServer } = await import("../mongodb-memory-server-Cn57YIsc.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
1552
1552
  const mongod = await MongoMemoryServer.create();
1553
1553
  return {
1554
1554
  uri: mongod.getUri(),
@@ -1562,7 +1562,7 @@ async function startInMemoryMongo() {
1562
1562
  }
1563
1563
  async function connectMongooseToUri(uri) {
1564
1564
  try {
1565
- const mongoose = (await import("../mongoose-CYJCLyi-.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1))).default;
1565
+ const mongoose = (await import("../mongoose-DzFjTtBN.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1))).default;
1566
1566
  await mongoose.connect(uri);
1567
1567
  return { async disconnect() {
1568
1568
  await mongoose.disconnect();
@@ -1579,7 +1579,7 @@ function pickDefaultAuth(authMode, callerAuth) {
1579
1579
  };
1580
1580
  }
1581
1581
  async function createTestApp(options = {}) {
1582
- const { createApp } = await import("../createApp-BGLYtErt.mjs").then((n) => n.i);
1582
+ const { createApp } = await import("../createApp-BSBPntOQ.mjs").then((n) => n.i);
1583
1583
  const { resources = [], db = "in-memory", connectMongoose = false, authMode = "jwt", defaultOrgId, plugins, auth: callerAuth, ...appOptions } = options;
1584
1584
  let dbHandle;
1585
1585
  let dbUri;
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { t as claimedAttempts } from "../claimed-DYvQoZLv.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { t as claimedAttempts } from "../claimed-CnEEOHuL.mjs";
3
3
  import { OutboxConflictError, OutboxOwnershipError } from "@classytic/primitives/outbox";
4
4
  import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
5
5
  //#region src/testing/outboxStoreContract.ts
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { c as declareModules, d as resolveModule, i as planModules, r as compositionProblems } from "../plan-CJGMKoui.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { c as declareModules, d as resolveModule, i as planModules, r as compositionProblems } from "../plan-CEedaMlr.mjs";
3
3
  //#region src/testing/requiredPorts.ts
4
4
  /**
5
5
  * Assert a module declares EXACTLY `ports` as required, and that composing it without any one of
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
3
3
  //#region src/testing/storageContract.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  import { createHash } from "node:crypto";
3
3
  //#region src/utils/operationIdentity.ts
4
4
  /** Security context included in idempotency identities across transports. */
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
3
  //#region src/context/transactionContext.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  //#region src/utils/typeGuards.ts
3
3
  /** Check if fastify has the events plugin registered */
4
4
  function hasEvents(instance) {
@@ -1,2 +1,2 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  export {};
@@ -1,2 +1,2 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  export {};
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { l as UnauthorizedError, o as OrgRequiredError } from "./errors-CW4anJBy.mjs";
3
- import { n as requireSingleHeaderValue } from "./headers-DKZQKL-Z.mjs";
4
- import { t as getUserId$1 } from "./userHelpers-C76zD5pa.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { l as UnauthorizedError, o as OrgRequiredError } from "./errors-C9G4A8cN.mjs";
3
+ import { n as requireSingleHeaderValue } from "./headers-B6DRXXzT.mjs";
4
+ import { t as getUserId$1 } from "./userHelpers-Nc5ePCsf.mjs";
5
5
  //#region src/scope/types.ts
6
6
  /**
7
7
  * Request Scope — The One Standard
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { t as ArcError } from "../errors-CW4anJBy.mjs";
3
- import { c as getOrgId, g as getUserId, i as getClientId } from "../types-fvO6Ovzx.mjs";
4
- import { n as declareRuntimeCapability } from "../runtimeCapabilities-DIMKMV2G.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { t as ArcError } from "../errors-C9G4A8cN.mjs";
3
+ import { c as getOrgId, g as getUserId, i as getClientId } from "../types-4JKkSvds.mjs";
4
+ import { n as declareRuntimeCapability } from "../runtimeCapabilities-C7gAbIxC.mjs";
5
5
  import { usagePeriod } from "@classytic/repo-core/usage";
6
6
  import fp from "fastify-plugin";
7
7
  //#region src/usage/requireQuota.ts
@@ -1,4 +1,4 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
2
  //#region src/utils/userHelpers.ts
3
3
  /**
4
4
  * Extract a user ID from a user object. Accepts `id` or `_id` — returns
@@ -1,13 +1,13 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { a as OrgAccessDeniedError, c as ServiceUnavailableError, d as createDomainError, f as createError, i as NotFoundError, l as UnauthorizedError, n as ConflictError, o as OrgRequiredError, p as isArcError, r as ForbiddenError, s as RateLimitError, t as ArcError, u as ValidationError } from "../errors-CW4anJBy.mjs";
3
- import { t as simpleEqualityMatcher } from "../simpleEqualityMatcher-DbwIM1f1.mjs";
4
- import { n as requireSingleHeaderValue, t as getHeader } from "../headers-DKZQKL-Z.mjs";
5
- import { n as getUserRoles, r as normalizeRoles, t as getUserId } from "../userHelpers-C76zD5pa.mjs";
6
- import { C as paginationSchema, D as createQueryParser, E as ArcQueryParser, O as MONGO_DIALECT, S as offsetListResponse, T as responses, _ as errorContractSchema, a as defineCompensation, b as keysetListResponse, c as CircuitBreaker, d as CircuitState, f as createCircuitBreaker, g as deleteResponse, h as bareListResponse, i as defineErrorMapper, k as NEUTRAL_DIALECT, l as CircuitBreakerError, m as aggregateListResponse, n as handleRaw, o as withCompensation, p as createCircuitBreakerRegistry, r as defineGuard, s as RedisCircuitBreakerState, t as createStateMachine, u as CircuitBreakerRegistry, v as getDefaultCrudSchemas, w as queryParams, x as listResponse, y as getListQueryParams } from "../utils-BpkVZ8rB.mjs";
7
- import { a as isZodSchema, i as isJsonSchema, n as convertRouteSchema, o as toJsonSchema, t as convertOpenApiSchemas } from "../schemaConverter-BVjkQ5DD.mjs";
8
- import { a as promoteStreamTokenToHeader, i as pipeUIMessageStreamToReply, n as forwardedStreamHeaders, r as isReadableStream, t as UI_MESSAGE_STREAM_HEADERS } from "../streaming-JzB5CAga.mjs";
9
- import { n as declareRuntimeCapability } from "../runtimeCapabilities-DIMKMV2G.mjs";
10
- import { i as runAdmittedWork, r as registerShutdownParticipant } from "../shutdown-LpLMH8T1.mjs";
11
- import { t as openSseStream } from "../sseStream-DQChzGTs.mjs";
12
- import { t as hasEvents } from "../typeGuards-kEaP_WmO.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { a as OrgAccessDeniedError, c as ServiceUnavailableError, d as createDomainError, f as createError, i as NotFoundError, l as UnauthorizedError, n as ConflictError, o as OrgRequiredError, p as isArcError, r as ForbiddenError, s as RateLimitError, t as ArcError, u as ValidationError } from "../errors-C9G4A8cN.mjs";
3
+ import { t as simpleEqualityMatcher } from "../simpleEqualityMatcher-WdZw6GOt.mjs";
4
+ import { n as requireSingleHeaderValue, t as getHeader } from "../headers-B6DRXXzT.mjs";
5
+ import { n as getUserRoles, r as normalizeRoles, t as getUserId } from "../userHelpers-Nc5ePCsf.mjs";
6
+ import { C as paginationSchema, D as createQueryParser, E as ArcQueryParser, O as MONGO_DIALECT, S as offsetListResponse, T as responses, _ as errorContractSchema, a as defineCompensation, b as keysetListResponse, c as CircuitBreaker, d as CircuitState, f as createCircuitBreaker, g as deleteResponse, h as bareListResponse, i as defineErrorMapper, k as NEUTRAL_DIALECT, l as CircuitBreakerError, m as aggregateListResponse, n as handleRaw, o as withCompensation, p as createCircuitBreakerRegistry, r as defineGuard, s as RedisCircuitBreakerState, t as createStateMachine, u as CircuitBreakerRegistry, v as getDefaultCrudSchemas, w as queryParams, x as listResponse, y as getListQueryParams } from "../utils-QWSIKqAk.mjs";
7
+ import { a as isZodSchema, i as isJsonSchema, n as convertRouteSchema, o as toJsonSchema, t as convertOpenApiSchemas } from "../schemaConverter-rzBovk00.mjs";
8
+ import { a as promoteStreamTokenToHeader, i as pipeUIMessageStreamToReply, n as forwardedStreamHeaders, r as isReadableStream, t as UI_MESSAGE_STREAM_HEADERS } from "../streaming-BLg1buwL.mjs";
9
+ import { n as declareRuntimeCapability } from "../runtimeCapabilities-C7gAbIxC.mjs";
10
+ import { i as runAdmittedWork, r as registerShutdownParticipant } from "../shutdown-BW8qwgpx.mjs";
11
+ import { t as openSseStream } from "../sseStream-B7rPhIQw.mjs";
12
+ import { t as hasEvents } from "../typeGuards-CtZJypJO.mjs";
13
13
  export { ArcError, ArcQueryParser, CircuitBreaker, CircuitBreakerError, CircuitBreakerRegistry, CircuitState, ConflictError, ForbiddenError, MONGO_DIALECT, NEUTRAL_DIALECT, NotFoundError, OrgAccessDeniedError, OrgRequiredError, RateLimitError, RedisCircuitBreakerState, ServiceUnavailableError, UI_MESSAGE_STREAM_HEADERS, UnauthorizedError, ValidationError, aggregateListResponse, bareListResponse, convertOpenApiSchemas, convertRouteSchema, createCircuitBreaker, createCircuitBreakerRegistry, createDomainError, createError, createQueryParser, createStateMachine, declareRuntimeCapability, defineCompensation, defineErrorMapper, defineGuard, deleteResponse, errorContractSchema, forwardedStreamHeaders, getDefaultCrudSchemas, getHeader, getListQueryParams, getUserId, getUserRoles, handleRaw, hasEvents, isArcError, isJsonSchema, isReadableStream, isZodSchema, keysetListResponse, listResponse, normalizeRoles, offsetListResponse, openSseStream, paginationSchema, pipeUIMessageStreamToReply, promoteStreamTokenToHeader, queryParams, registerShutdownParticipant, requireSingleHeaderValue, responses, runAdmittedWork, simpleEqualityMatcher, toJsonSchema, withCompensation };
@@ -1,7 +1,7 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { h as RESERVED_QUERY_PARAMS } from "./constants-B2QHb6u6.mjs";
3
- import { t as arcLog } from "./logger-D4V1zGLI.mjs";
4
- import { t as ArcError, u as ValidationError } from "./errors-CW4anJBy.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { h as RESERVED_QUERY_PARAMS } from "./constants-B90SnSQn.mjs";
3
+ import { t as arcLog } from "./logger-vxu0DXf_.mjs";
4
+ import { t as ArcError, u as ValidationError } from "./errors-C9G4A8cN.mjs";
5
5
  import { errorContractSchema as errorContractSchema$1 } from "@classytic/repo-core/errors";
6
6
  import { readEnv } from "@classytic/primitives/environment";
7
7
  import { OPERATOR_DESCRIPTIONS, URL_OPERATORS, escapeRegex, isQueryGrammarError, readFilterClauses, readPageRequest, readSearch, readSelect, readSort } from "@classytic/repo-core/query-parser";
@@ -1,6 +1,6 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { r as __exportAll } from "./rolldown-runtime-MYrLNGnq.mjs";
3
- import { _ as pathTouchesBlocked } from "./plugin-DALd9dcF.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { r as __exportAll } from "./rolldown-runtime-AD16t29l.mjs";
3
+ import { _ as pathTouchesBlocked } from "./plugin-BDBOS3-c.mjs";
4
4
  //#region src/core/aggregation/normalize.ts
5
5
  /**
6
6
  * Framework cap on URL-driven aggregation limits when the host opts
@@ -119,6 +119,28 @@ interface SSEOptions {
119
119
  * Set `null` to disable promotion (e.g. cookie-only auth).
120
120
  */
121
121
  tokenQueryParam?: string | null;
122
+ /**
123
+ * Keyed delivery: the connection keys (user ids by default) an event is for.
124
+ * Delivery becomes one map lookup per key, and org-scoping + `filter` still run
125
+ * on those connections only. `null`/`undefined` = broadcast through the filter.
126
+ * Each replica resolves it against its own connections. Setting it switches the
127
+ * plugin to one shared subscription per pattern. See wiki/plugins.md.
128
+ */
129
+ audience?: (event: DomainEvent<unknown>) => readonly string[] | null | undefined;
130
+ /** Key a connection is indexed under for `audience` (default: scope user id; none = broadcasts only). */
131
+ connectionKey?: (request: FastifyRequest) => string | null | undefined;
132
+ }
133
+ /** Live connection gauge, summed across every `ssePlugin` registration on the instance. */
134
+ interface SSEStats {
135
+ /** Open SSE connections. */
136
+ connections: number;
137
+ /** Distinct `connectionKey`s indexed (0 without `audience`). */
138
+ keys: number;
139
+ }
140
+ declare module "fastify" {
141
+ interface FastifyInstance {
142
+ sseStats: () => SSEStats;
143
+ }
122
144
  }
123
145
  declare const _default$3: FastifyPluginAsync<SSEOptions>;
124
146
  //#endregion
@@ -243,4 +265,4 @@ declare module "fastify" {
243
265
  }
244
266
  declare const _default: FastifyPluginAsync<VersioningOptions>;
245
267
  //#endregion
246
- export { _default$5 as _, MetricsOptions as a, RealtimeOptions as c, _default$3 as d, CachingOptions as f, ShutdownState as g, GracefulShutdownOptions as h, MetricsCollector as i, _default$2 as l, _default$4 as m, _default as n, _default$1 as o, CachingRule as p, MetricEntry as r, ChangeOperation as s, VersioningOptions as t, SSEOptions as u };
268
+ export { ShutdownState as _, MetricsOptions as a, RealtimeOptions as c, SSEStats as d, _default$3 as f, GracefulShutdownOptions as g, _default$4 as h, MetricsCollector as i, _default$2 as l, CachingRule as m, _default as n, _default$1 as o, CachingOptions as p, MetricEntry as r, ChangeOperation as s, VersioningOptions as t, SSEOptions as u, _default$5 as v };
@@ -1,6 +1,6 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { r as __exportAll } from "./rolldown-runtime-MYrLNGnq.mjs";
3
- import { d as createDomainError } from "./errors-CW4anJBy.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { r as __exportAll } from "./rolldown-runtime-AD16t29l.mjs";
3
+ import { d as createDomainError } from "./errors-C9G4A8cN.mjs";
4
4
  import fp from "fastify-plugin";
5
5
  //#region src/plugins/versioning.ts
6
6
  var versioning_exports = /* @__PURE__ */ __exportAll({
@@ -1,5 +1,5 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { n as requestContext } from "./requestContext-C10UeFe5.mjs";
1
+ /*! @classytic/arc v2.45.0 | MIT | https://classytic.com */
2
+ import { n as requestContext } from "./requestContext-B8JKbeb7.mjs";
3
3
  //#region src/context/workScope.ts
4
4
  /** Enter a scope for `fn`, or run it inside the active one. */
5
5
  function runWorkScope(seed, fn) {