@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@classytic/arc",
3
- "version": "2.44.0",
3
+ "version": "2.45.0",
4
4
  "description": "Resource-oriented backend framework for Fastify - clean, minimal, powerful, tree-shakable",
5
5
  "type": "module",
6
6
  "exports": {
@@ -340,6 +340,7 @@
340
340
  "smoke:mcp": "node scripts/mcp-e2e.mjs",
341
341
  "bench:memory": "node --expose-gc scripts/bench-memory.mjs",
342
342
  "bench:http": "node --expose-gc scripts/bench-http.mjs",
343
+ "bench:sse": "node scripts/bench-sse-audience.mjs",
343
344
  "push": "classytic-push",
344
345
  "release:tag": "node -e \"require('child_process').execSync('npm run push -- v'+require('./package.json').version,{stdio:'inherit'})\"",
345
346
  "release": "npm run push -- main && npm run release:tag && npm publish",
@@ -486,22 +487,22 @@
486
487
  },
487
488
  "devDependencies": {
488
489
  "@arethetypeswrong/cli": "^0.18.5",
489
- "@better-auth/drizzle-adapter": "^1.7.7",
490
- "@better-auth/mongo-adapter": "^1.7.7",
490
+ "@better-auth/drizzle-adapter": "^1.7.10",
491
+ "@better-auth/mongo-adapter": "^1.7.10",
491
492
  "@biomejs/biome": "^2.5.15",
492
493
  "@classytic/dev-tools": "^0.2.1",
493
494
  "@classytic/gitkit": ">=0.3.0",
494
- "@classytic/mongokit": "^3.41.0",
495
+ "@classytic/mongokit": "^3.43.0",
495
496
  "@classytic/pgkit": "^0.1.0",
496
- "@classytic/primitives": "^0.33.0",
497
+ "@classytic/primitives": "^0.34.0",
497
498
  "@classytic/repo-core": "^0.31.1",
498
499
  "@classytic/sqlitekit": "^0.10.0",
499
500
  "@classytic/streamline": "^2.11.0",
500
- "@electric-sql/pglite": "^0.5.9",
501
+ "@electric-sql/pglite": "^0.5.10",
501
502
  "@fastify/cors": "^11.3.1",
502
503
  "@fastify/helmet": "^13.2.0",
503
- "@fastify/jwt": "^10.2.4",
504
- "@fastify/multipart": "^10.1.3",
504
+ "@fastify/jwt": "^10.2.5",
505
+ "@fastify/multipart": "^10.1.4",
505
506
  "@fastify/rate-limit": "^11.2.1",
506
507
  "@fastify/sensible": "^6.0.7",
507
508
  "@fastify/static": "^10.1.6",
@@ -512,18 +513,18 @@
512
513
  "@modelcontextprotocol/node": "^2.1.1",
513
514
  "@modelcontextprotocol/server": "^2.3.1",
514
515
  "@opentelemetry/api": "^1.9.1",
515
- "@types/node": "^22.19.21",
516
+ "@types/node": "^26.6.5",
516
517
  "@types/qs": "^6.15.1",
517
- "@vitest/coverage-v8": "^5.0.4",
518
+ "@vitest/coverage-v8": "^5.0.5",
518
519
  "ajv": "^8.20.0",
519
- "better-auth": "^1.7.7",
520
+ "better-auth": "^1.7.10",
520
521
  "better-sqlite3": "^13.0.3",
521
- "bullmq": "^6.3.15",
522
- "dotenv": "^18.0.7",
522
+ "bullmq": "^6.3.16",
523
+ "dotenv": "^18.0.8",
523
524
  "drizzle-orm": "^0.45.4",
524
525
  "fast-check": "^4.10.2",
525
526
  "fastify": "^5.12.7",
526
- "fastify-raw-body": "^6.0.2",
527
+ "fastify-raw-body": "^6.0.3",
527
528
  "h3-js": "^4.5.0",
528
529
  "ioredis": "^6.0.0",
529
530
  "jose": "^6.2.12",
@@ -534,9 +535,9 @@
534
535
  "mongoose": "^9.11.2",
535
536
  "publint": "^0.3.25",
536
537
  "tsdown": "^0.23.1",
537
- "typebox": "^1.3.37",
538
+ "typebox": "^1.4.2",
538
539
  "typescript": "^7.0.2",
539
- "vitest": "^5.0.4",
540
+ "vitest": "^5.0.5",
540
541
  "ws": "^8.22.0",
541
542
  "zod": "^4.6.7"
542
543
  },
@@ -1,89 +0,0 @@
1
- /*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
2
- import { r as __exportAll } from "./rolldown-runtime-MYrLNGnq.mjs";
3
- import { t as arcLog } from "./logger-D4V1zGLI.mjs";
4
- import { n as PUBLIC_SCOPE } from "./types-fvO6Ovzx.mjs";
5
- import { n as isEventVisible, t as eventAudienceOf } from "./tenancy-DxV8OuX2.mjs";
6
- import { a as promoteStreamTokenToHeader } from "./streaming-JzB5CAga.mjs";
7
- import { t as openSseStream } from "./sseStream-DQChzGTs.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
- const ssePlugin = async (fastify, opts = {}) => {
16
- const { path = "/events/stream", requireAuth = true, patterns = ["*"], heartbeat = 3e4, orgScoped = true, filter: customFilter, tokenQueryParam = "token" } = opts;
17
- if (!fastify.hasDecorator("events")) {
18
- log.warn("Events plugin (arc-events) not registered. SSE plugin will not function. Register eventPlugin before ssePlugin.");
19
- return;
20
- }
21
- const activeConnections = /* @__PURE__ */ new Set();
22
- const routeOpts = {
23
- method: "GET",
24
- url: path,
25
- schema: {
26
- tags: ["Events"],
27
- summary: "SSE event stream",
28
- description: "Server-Sent Events stream for real-time domain events",
29
- response: { 200: {
30
- type: "string",
31
- description: "text/event-stream"
32
- } }
33
- },
34
- handler: async (request, reply) => {
35
- const stream = openSseStream(request, reply, { heartbeatMs: heartbeat });
36
- stream.onCleanup(() => activeConnections.delete(stream.close));
37
- const scope = request.scope ?? PUBLIC_SCOPE;
38
- const audience = eventAudienceOf(scope);
39
- for (const pattern of patterns) {
40
- const unsub = await fastify.events.subscribe(pattern, async (event) => {
41
- if (orgScoped && !isEventVisible(event.meta?.organizationId, audience)) return;
42
- if (customFilter && !customFilter(event, request)) return;
43
- const data = JSON.stringify({
44
- type: event.type,
45
- payload: event.payload,
46
- meta: {
47
- id: event.meta.id,
48
- timestamp: event.meta.timestamp
49
- }
50
- });
51
- stream.write(event.type, data);
52
- });
53
- stream.onCleanup(unsub);
54
- }
55
- activeConnections.add(stream.close);
56
- }
57
- };
58
- if (requireAuth) {
59
- routeOpts.preHandler = (request, reply) => {
60
- if (tokenQueryParam) promoteStreamTokenToHeader(request, tokenQueryParam);
61
- const authenticate = fastify.authenticate;
62
- if (typeof authenticate !== "function") {
63
- reply.code(401).send({ error: "Unauthorized" });
64
- return Promise.resolve();
65
- }
66
- return authenticate(request, reply);
67
- };
68
- fastify.addHook("onReady", async () => {
69
- 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.");
70
- });
71
- }
72
- fastify.route(routeOpts);
73
- fastify.addHook("onClose", async () => {
74
- for (const cleanup of activeConnections) cleanup();
75
- activeConnections.clear();
76
- });
77
- log.debug("Plugin registered", {
78
- path,
79
- patterns,
80
- orgScoped
81
- });
82
- };
83
- var sse_default = fp(ssePlugin, {
84
- name: "arc-sse",
85
- fastify: "5.x",
86
- dependencies: ["arc-events"]
87
- });
88
- //#endregion
89
- export { sse_exports as n, sse_default as t };