@classytic/arc 2.28.0 → 2.30.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 (83) hide show
  1. package/dist/{BaseController-B65zbz9m.mjs → BaseController-B5DwufbB.mjs} +12 -10
  2. package/dist/EventTransport-C6YA8xY9.mjs +103 -0
  3. package/dist/{HookSystem-C1vB_Gc9.mjs → HookSystem-WkIougo6.mjs} +15 -35
  4. package/dist/applyPermissionResult-Cf6zUCvb.mjs +257 -0
  5. package/dist/audit/index.d.mts +2 -2
  6. package/dist/audit/index.mjs +1 -1
  7. package/dist/auth/index.d.mts +2 -2
  8. package/dist/auth/index.mjs +1 -1
  9. package/dist/{buildHandler-Dtwd8fdz.mjs → buildHandler-BYS3Vkfz.mjs} +32 -6
  10. package/dist/cleanup/index.d.mts +2 -2
  11. package/dist/cleanup/index.mjs +1 -1
  12. package/dist/cli/commands/describe.d.mts +1 -1
  13. package/dist/cli/commands/docs.mjs +1 -1
  14. package/dist/core/index.d.mts +2 -2
  15. package/dist/core/index.mjs +5 -4
  16. package/dist/{core-BGa8TXJR.mjs → core-poalJLvp.mjs} +2 -48
  17. package/dist/{createActionRouter-C-N7z2EL.mjs → createActionRouter-BxuywVRB.mjs} +2 -2
  18. package/dist/{createAggregationRouter-wzwFa_dW.mjs → createAggregationRouter-BiY-lGdY.mjs} +7 -20
  19. package/dist/{createApp-Du5G54TM.mjs → createApp-CXrKFciH.mjs} +24 -3
  20. package/dist/defineAggregation-ufWjUwml.mjs +47 -0
  21. package/dist/{defineResource-2zvVVpxg.mjs → defineResource-CxWqDCAy.mjs} +35 -42
  22. package/dist/docs/index.d.mts +1 -1
  23. package/dist/docs/index.mjs +1 -1
  24. package/dist/{eventPlugin-DrQ_FesK.mjs → eventPlugin-D2NNR4py.mjs} +2 -103
  25. package/dist/events/index.mjs +4 -339
  26. package/dist/factory/index.d.mts +4 -4
  27. package/dist/factory/index.mjs +1 -1
  28. package/dist/{fastify-augmentation-OzYGIiU1.d.mts → fastify-augmentation-0WhPnUH7.d.mts} +3 -3
  29. package/dist/{applyPermissionResult-BnyVE9eD.mjs → fields-CQ_7KQWw.mjs} +1 -107
  30. package/dist/hooks/index.d.mts +1 -1
  31. package/dist/hooks/index.mjs +1 -1
  32. package/dist/idempotency/index.mjs +1 -1
  33. package/dist/{index-CZY4EGga.d.mts → index-CCzVR-N3.d.mts} +1 -1
  34. package/dist/{index-BMnbzvtO.d.mts → index-Ch16aAah.d.mts} +201 -21
  35. package/dist/{index-CjVg-Epg.d.mts → index-Cx7bro4R.d.mts} +4 -4
  36. package/dist/{index-DPRH0Cme.d.mts → index-Q5gzEIWY.d.mts} +97 -66
  37. package/dist/index.d.mts +6 -6
  38. package/dist/index.mjs +8 -7
  39. package/dist/integrations/index.d.mts +1 -1
  40. package/dist/integrations/mcp/index.d.mts +6 -6
  41. package/dist/integrations/mcp/index.mjs +1 -1
  42. package/dist/integrations/mcp/testing.d.mts +1 -1
  43. package/dist/integrations/mcp/testing.mjs +1 -1
  44. package/dist/{mcpPlugin-Cs6nRGCt.mjs → mcpPlugin-nRzm5g2s.mjs} +36 -43
  45. package/dist/middleware/index.d.mts +1 -1
  46. package/dist/migrations/index.d.mts +0 -3
  47. package/dist/migrations/index.mjs +0 -3
  48. package/dist/{openapi-BLV4OMXb.mjs → openapi-B8Vkbxbn.mjs} +1 -1
  49. package/dist/permissions/index.d.mts +3 -3
  50. package/dist/permissions/index.mjs +4 -3
  51. package/dist/{permissions-BrtiBKGs.mjs → permissions-Bfu_8y1U.mjs} +318 -289
  52. package/dist/pipeline/index.d.mts +1 -1
  53. package/dist/{pipeline-BGRnV-To.mjs → pipeline-BJnpkY9i.mjs} +4 -18
  54. package/dist/plugins/index.d.mts +4 -4
  55. package/dist/plugins/index.mjs +2 -2
  56. package/dist/plugins/tracing-entry.mjs +1 -1
  57. package/dist/{preloadResources-CM4uUaFv.d.mts → preloadResources-DCfa2egz.d.mts} +3 -3
  58. package/dist/presets/filesUpload.d.mts +2 -2
  59. package/dist/presets/filesUpload.mjs +1 -1
  60. package/dist/presets/index.d.mts +14 -2
  61. package/dist/presets/index.mjs +1 -1
  62. package/dist/presets/multiTenant.d.mts +1 -1
  63. package/dist/presets/search.d.mts +2 -2
  64. package/dist/presets/search.mjs +1 -1
  65. package/dist/{presets-DwFDVKP0.mjs → presets-CJOEXLuk.mjs} +25 -9
  66. package/dist/projection-UBDgfMwu.mjs +17 -0
  67. package/dist/{realtime-DEuDu9io.mjs → realtime-B9nmIY5V.mjs} +2 -1
  68. package/dist/{registerRoute-DTp18Ah_.mjs → registerRoute-JkxIEBJq.mjs} +3 -1
  69. package/dist/registry/index.d.mts +2 -2
  70. package/dist/registry/index.mjs +1 -1
  71. package/dist/{registry-9km_w1aP.mjs → registry-BYXUUg21.mjs} +1 -1
  72. package/dist/repositoryFilter-Dz8k3S4P.mjs +44 -0
  73. package/dist/subscribe-helpers-DfzsivM6.mjs +339 -0
  74. package/dist/testing/index.d.mts +34 -6
  75. package/dist/testing/index.mjs +314 -211
  76. package/dist/types/index.d.mts +3 -3
  77. package/dist/{types-QFGc3Cjv.d.mts → types-Bmmn-fO0.d.mts} +1 -1
  78. package/dist/{types-Dmw-6Qeo.d.mts → types-ChvvVNP8.d.mts} +93 -88
  79. package/dist/{types-Cu6vVJmh.d.mts → types-D_n8L6VY.d.mts} +32 -1
  80. package/dist/usage/index.d.mts +1 -1
  81. package/dist/usage/index.mjs +0 -0
  82. package/dist/utils/index.d.mts +2 -5
  83. package/package.json +539 -539
package/package.json CHANGED
@@ -1,541 +1,541 @@
1
1
  {
2
- "name": "@classytic/arc",
3
- "version": "2.28.0",
4
- "description": "Resource-oriented backend framework for Fastify - clean, minimal, powerful, tree-shakable",
5
- "type": "module",
6
- "exports": {
7
- ".": {
8
- "types": "./dist/index.d.mts",
9
- "default": "./dist/index.mjs"
10
- },
11
- "./permissions": {
12
- "types": "./dist/permissions/index.d.mts",
13
- "default": "./dist/permissions/index.mjs"
14
- },
15
- "./cache": {
16
- "types": "./dist/cache/index.d.mts",
17
- "default": "./dist/cache/index.mjs"
18
- },
19
- "./types": {
20
- "types": "./dist/types/index.d.mts",
21
- "default": "./dist/types/index.mjs"
22
- },
23
- "./types/storage": {
24
- "types": "./dist/types/storage.d.mts",
25
- "default": "./dist/types/storage.mjs"
26
- },
27
- "./core": {
28
- "types": "./dist/core/index.d.mts",
29
- "default": "./dist/core/index.mjs"
30
- },
31
- "./presets": {
32
- "types": "./dist/presets/index.d.mts",
33
- "default": "./dist/presets/index.mjs"
34
- },
35
- "./presets/tenant": {
36
- "types": "./dist/presets/multiTenant.d.mts",
37
- "default": "./dist/presets/multiTenant.mjs"
38
- },
39
- "./presets/files-upload": {
40
- "types": "./dist/presets/filesUpload.d.mts",
41
- "default": "./dist/presets/filesUpload.mjs"
42
- },
43
- "./presets/search": {
44
- "types": "./dist/presets/search.d.mts",
45
- "default": "./dist/presets/search.mjs"
46
- },
47
- "./auth": {
48
- "types": "./dist/auth/index.d.mts",
49
- "default": "./dist/auth/index.mjs"
50
- },
51
- "./hooks": {
52
- "types": "./dist/hooks/index.d.mts",
53
- "default": "./dist/hooks/index.mjs"
54
- },
55
- "./middleware": {
56
- "types": "./dist/middleware/index.d.mts",
57
- "default": "./dist/middleware/index.mjs"
58
- },
59
- "./pipeline": {
60
- "types": "./dist/pipeline/index.d.mts",
61
- "default": "./dist/pipeline/index.mjs"
62
- },
63
- "./context": {
64
- "types": "./dist/context/index.d.mts",
65
- "default": "./dist/context/index.mjs"
66
- },
67
- "./logger": {
68
- "types": "./dist/logger/index.d.mts",
69
- "default": "./dist/logger/index.mjs"
70
- },
71
- "./registry": {
72
- "types": "./dist/registry/index.d.mts",
73
- "default": "./dist/registry/index.mjs"
74
- },
75
- "./utils": {
76
- "types": "./dist/utils/index.d.mts",
77
- "default": "./dist/utils/index.mjs"
78
- },
79
- "./cli": {
80
- "types": "./dist/cli/index.d.mts",
81
- "default": "./dist/cli/index.mjs"
82
- },
83
- "./plugins": {
84
- "types": "./dist/plugins/index.d.mts",
85
- "default": "./dist/plugins/index.mjs"
86
- },
87
- "./plugins/tracing": {
88
- "types": "./dist/plugins/tracing-entry.d.mts",
89
- "default": "./dist/plugins/tracing-entry.mjs"
90
- },
91
- "./audit": {
92
- "types": "./dist/audit/index.d.mts",
93
- "default": "./dist/audit/index.mjs"
94
- },
95
- "./docs": {
96
- "types": "./dist/docs/index.d.mts",
97
- "default": "./dist/docs/index.mjs"
98
- },
99
- "./encryption": {
100
- "types": "./dist/encryption/index.d.mts",
101
- "default": "./dist/encryption/index.mjs"
102
- },
103
- "./idempotency": {
104
- "types": "./dist/idempotency/index.d.mts",
105
- "default": "./dist/idempotency/index.mjs"
106
- },
107
- "./idempotency/redis": {
108
- "types": "./dist/idempotency/redis.d.mts",
109
- "default": "./dist/idempotency/redis.mjs"
110
- },
111
- "./events": {
112
- "types": "./dist/events/index.d.mts",
113
- "default": "./dist/events/index.mjs"
114
- },
115
- "./events/redis": {
116
- "types": "./dist/events/transports/redis.d.mts",
117
- "default": "./dist/events/transports/redis.mjs"
118
- },
119
- "./events/redis-stream": {
120
- "types": "./dist/events/transports/redis-stream-entry.d.mts",
121
- "default": "./dist/events/transports/redis-stream-entry.mjs"
122
- },
123
- "./testing": {
124
- "types": "./dist/testing/index.d.mts",
125
- "default": "./dist/testing/index.mjs"
126
- },
127
- "./testing/storage": {
128
- "types": "./dist/testing/storageContract.d.mts",
129
- "default": "./dist/testing/storageContract.mjs"
130
- },
131
- "./testing/cleanup": {
132
- "types": "./dist/testing/cleanupStoreContract.d.mts",
133
- "default": "./dist/testing/cleanupStoreContract.mjs"
134
- },
135
- "./factory": {
136
- "types": "./dist/factory/index.d.mts",
137
- "default": "./dist/factory/index.mjs"
138
- },
139
- "./schemas": {
140
- "types": "./dist/schemas/index.d.mts",
141
- "default": "./dist/schemas/index.mjs"
142
- },
143
- "./migrations": {
144
- "types": "./dist/migrations/index.d.mts",
145
- "default": "./dist/migrations/index.mjs"
146
- },
147
- "./discovery": {
148
- "types": "./dist/discovery/index.d.mts",
149
- "default": "./dist/discovery/index.mjs"
150
- },
151
- "./integrations": {
152
- "types": "./dist/integrations/index.d.mts",
153
- "default": "./dist/integrations/index.mjs"
154
- },
155
- "./integrations/streamline": {
156
- "types": "./dist/integrations/streamline.d.mts",
157
- "default": "./dist/integrations/streamline.mjs"
158
- },
159
- "./integrations/websocket": {
160
- "types": "./dist/integrations/websocket.d.mts",
161
- "default": "./dist/integrations/websocket.mjs"
162
- },
163
- "./integrations/websocket-redis": {
164
- "types": "./dist/integrations/websocket-redis.d.mts",
165
- "default": "./dist/integrations/websocket-redis.mjs"
166
- },
167
- "./integrations/websocket-pushref-redis": {
168
- "types": "./dist/integrations/websocket-pushref-redis.d.mts",
169
- "default": "./dist/integrations/websocket-pushref-redis.mjs"
170
- },
171
- "./integrations/jobs": {
172
- "types": "./dist/integrations/jobs/index.d.mts",
173
- "default": "./dist/integrations/jobs/index.mjs"
174
- },
175
- "./integrations/event-gateway": {
176
- "types": "./dist/integrations/event-gateway.d.mts",
177
- "default": "./dist/integrations/event-gateway.mjs"
178
- },
179
- "./integrations/webhooks": {
180
- "types": "./dist/integrations/webhooks.d.mts",
181
- "default": "./dist/integrations/webhooks.mjs"
182
- },
183
- "./auth/redis": {
184
- "types": "./dist/auth/redis-session.d.mts",
185
- "default": "./dist/auth/redis-session.mjs"
186
- },
187
- "./plugins/response-cache": {
188
- "types": "./dist/plugins/response-cache.d.mts",
189
- "default": "./dist/plugins/response-cache.mjs"
190
- },
191
- "./scope": {
192
- "types": "./dist/scope/index.d.mts",
193
- "default": "./dist/scope/index.mjs"
194
- },
195
- "./mcp": {
196
- "types": "./dist/integrations/mcp/index.d.mts",
197
- "default": "./dist/integrations/mcp/index.mjs"
198
- },
199
- "./mcp/testing": {
200
- "types": "./dist/integrations/mcp/testing.d.mts",
201
- "default": "./dist/integrations/mcp/testing.mjs"
202
- },
203
- "./scim": {
204
- "types": "./dist/scim/index.d.mts",
205
- "default": "./dist/scim/index.mjs"
206
- },
207
- "./auth/audit": {
208
- "types": "./dist/auth/audit.d.mts",
209
- "default": "./dist/auth/audit.mjs"
210
- },
211
- "./sync": {
212
- "types": "./dist/sync/changelog.d.mts",
213
- "default": "./dist/sync/changelog.mjs"
214
- },
215
- "./usage": {
216
- "types": "./dist/usage/index.d.mts",
217
- "default": "./dist/usage/index.mjs"
218
- },
219
- "./cleanup": {
220
- "types": "./dist/cleanup/index.d.mts",
221
- "default": "./dist/cleanup/index.mjs"
222
- },
223
- "./testing/outbox": {
224
- "types": "./dist/testing/outboxStoreContract.d.mts",
225
- "default": "./dist/testing/outboxStoreContract.mjs"
226
- }
227
- },
228
- "main": "./dist/index.mjs",
229
- "types": "./dist/index.d.mts",
230
- "bin": {
231
- "arc": "./bin/arc.js"
232
- },
233
- "publishConfig": {
234
- "access": "public"
235
- },
236
- "sideEffects": false,
237
- "arc": {
238
- "subpathStability": {
239
- ".": "stable",
240
- "./permissions": "stable",
241
- "./cache": "stable",
242
- "./cleanup": "stable",
243
- "./types": "stable",
244
- "./types/storage": "stable",
245
- "./core": "stable",
246
- "./presets": "stable",
247
- "./presets/tenant": "stable",
248
- "./presets/files-upload": "stable",
249
- "./presets/search": "stable",
250
- "./auth": "stable",
251
- "./hooks": "stable",
252
- "./middleware": "stable",
253
- "./pipeline": "stable",
254
- "./context": "stable",
255
- "./logger": "stable",
256
- "./registry": "stable",
257
- "./utils": "stable",
258
- "./cli": "stable",
259
- "./plugins": "stable",
260
- "./plugins/tracing": "stable",
261
- "./audit": "stable",
262
- "./docs": "stable",
263
- "./encryption": "stable",
264
- "./idempotency": "stable",
265
- "./idempotency/redis": "stable",
266
- "./events": "stable",
267
- "./events/redis": "stable",
268
- "./events/redis-stream": "stable",
269
- "./testing": "stable",
270
- "./testing/storage": "stable",
271
- "./testing/cleanup": "stable",
272
- "./factory": "stable",
273
- "./schemas": "stable",
274
- "./migrations": "stable",
275
- "./discovery": "stable",
276
- "./integrations": "stable",
277
- "./integrations/streamline": "stable",
278
- "./integrations/websocket": "stable",
279
- "./integrations/websocket-redis": "stable",
280
- "./integrations/websocket-pushref-redis": "stable",
281
- "./integrations/jobs": "stable",
282
- "./integrations/event-gateway": "experimental",
283
- "./integrations/webhooks": "stable",
284
- "./auth/redis": "stable",
285
- "./plugins/response-cache": "stable",
286
- "./scope": "stable",
287
- "./mcp": "stable",
288
- "./mcp/testing": "stable",
289
- "./scim": "stable",
290
- "./auth/audit": "stable",
291
- "./sync": "experimental",
292
- "./usage": "experimental",
293
- "./testing/outbox": "stable"
294
- }
295
- },
296
- "files": [
297
- "dist",
298
- "bin",
299
- "skills",
300
- "llms.txt"
301
- ],
302
- "scripts": {
303
- "build": "tsdown",
304
- "dev": "tsdown --watch",
305
- "typecheck": "npm run typecheck:src && npm run typecheck:types && npm run check:type-lane",
306
- "typecheck:src": "tsc --noEmit",
307
- "check:type-lane": "node scripts/check-type-lane.mjs",
308
- "lint": "biome check src/",
309
- "lint:fix": "biome check --fix src/",
310
- "lint:all": "biome check src/ tests/",
311
- "test": "vitest run",
312
- "test:main": "vitest run",
313
- "test:main:serial": "vitest run --no-file-parallelism",
314
- "test:perf": "node --expose-gc ./node_modules/vitest/vitest.mjs run --config vitest.perf.config.ts --no-file-parallelism",
315
- "test:ci": "npm run test:main && npm run test:perf",
316
- "test:watch": "vitest",
317
- "test:ui": "vitest --ui",
318
- "typecheck:types": "tsc -p tsconfig.types.json",
319
- "api:surface": "node scripts/check-api-surface.mjs --update",
320
- "check:api-surface": "node scripts/check-api-surface.mjs",
321
- "check:package": "publint && attw --pack . --profile esm-only",
322
- "test:coverage": "vitest run --coverage",
323
- "test:fast": "vitest run tests/core tests/hooks tests/utils tests/plugins tests/cache tests/events",
324
- "test:contract": "vitest run tests/contract tests/adapters tests/types",
325
- "test:integration": "vitest run tests/integrations tests/factory tests/auth",
326
- "test:e2e": "vitest run tests/e2e tests/scenarios tests/smoke",
327
- "test:changed": "vitest run --changed",
328
- "test:reliability": "vitest run tests/cache tests/events tests/migrations tests/plugins/schedules.test.ts tests/plugins/health.test.ts tests/utils/circuit-breaker.test.ts tests/utils/compensation-hooks.test.ts tests/integrations/jobs-timeout.test.ts",
329
- "test:smoke:ws": "vitest run tests/integrations/websocket/smoke.test.ts",
330
- "test:smoke:redis": "node scripts/smoke-ws-redis.mjs",
331
- "smoke": "node scripts/smoke-test.mjs",
332
- "smoke:consumer": "node scripts/smoke-test.mjs --consumer",
333
- "push": "classytic-push",
334
- "release:tag": "node -e \"require('child_process').execSync('npm run push -- v'+require('./package.json').version,{stdio:'inherit'})\"",
335
- "release": "npm run push -- main && npm run release:tag && npm publish",
336
- "check:peer-skew": "node scripts/check-peer-skew.mjs",
337
- "check:docs-drift": "node scripts/check-docs-drift.mjs",
338
- "check:boundaries": "node scripts/check-boundaries.mjs",
339
- "prepublishOnly": "npm run check:peer-skew && npm run check:docs-drift && npm run check:boundaries && npm run typecheck && npm run lint && npm run build && npm run check:api-surface && npm run check:package && npm run test:ci && npm run smoke:consumer"
340
- },
341
- "engines": {
342
- "node": ">=22"
343
- },
344
- "peerDependencies": {
345
- "@classytic/primitives": ">=0.15.0",
346
- "@classytic/repo-core": ">=0.17.0",
347
- "@classytic/streamline": ">=2.8.0",
348
- "@fastify/cors": ">=11.0.0",
349
- "@fastify/helmet": ">=13.0.0",
350
- "@fastify/jwt": ">=10.0.0",
351
- "@fastify/multipart": ">=9.0.0",
352
- "@fastify/rate-limit": ">=10.0.0",
353
- "@fastify/sensible": ">=6.0.0",
354
- "@fastify/type-provider-typebox": ">=6.0.0",
355
- "@fastify/under-pressure": ">=9.0.0",
356
- "@fastify/websocket": ">=11.0.0",
357
- "@modelcontextprotocol/sdk": ">=1.28.0",
358
- "@opentelemetry/api": ">=1.9.0",
359
- "@opentelemetry/auto-instrumentations-node": ">=0.40.0",
360
- "@opentelemetry/exporter-trace-otlp-http": ">=0.50.0",
361
- "@opentelemetry/instrumentation-http": ">=0.50.0",
362
- "@opentelemetry/instrumentation-mongodb": ">=0.40.0",
363
- "@opentelemetry/sdk-node": ">=0.50.0",
364
- "better-auth": ">=1.6.2",
365
- "bullmq": ">=5.0.0",
366
- "fastify": "^5.8.5",
367
- "fastify-raw-body": ">=5.0.0",
368
- "h3-js": ">=4.0.0",
369
- "ioredis": ">=5.0.0",
370
- "jose": ">=5.0.0",
371
- "pino-pretty": ">=13.0.0",
372
- "typebox": ">=1.0.0",
373
- "zod": ">=4.0.0"
374
- },
375
- "peerDependenciesMeta": {
376
- "better-auth": {
377
- "optional": true
378
- },
379
- "@fastify/cors": {
380
- "optional": true
381
- },
382
- "@fastify/helmet": {
383
- "optional": true
384
- },
385
- "@fastify/jwt": {
386
- "optional": true
387
- },
388
- "@fastify/rate-limit": {
389
- "optional": true
390
- },
391
- "@fastify/sensible": {
392
- "optional": true
393
- },
394
- "@fastify/under-pressure": {
395
- "optional": true
396
- },
397
- "@fastify/multipart": {
398
- "optional": true
399
- },
400
- "@fastify/websocket": {
401
- "optional": true
402
- },
403
- "fastify-raw-body": {
404
- "optional": true
405
- },
406
- "h3-js": {
407
- "optional": true
408
- },
409
- "pino-pretty": {
410
- "optional": true
411
- },
412
- "@opentelemetry/api": {
413
- "optional": true
414
- },
415
- "@opentelemetry/sdk-node": {
416
- "optional": true
417
- },
418
- "@opentelemetry/exporter-trace-otlp-http": {
419
- "optional": true
420
- },
421
- "@opentelemetry/instrumentation-http": {
422
- "optional": true
423
- },
424
- "@opentelemetry/instrumentation-mongodb": {
425
- "optional": true
426
- },
427
- "@opentelemetry/auto-instrumentations-node": {
428
- "optional": true
429
- },
430
- "ioredis": {
431
- "optional": true
432
- },
433
- "jose": {
434
- "optional": true
435
- },
436
- "typebox": {
437
- "optional": true
438
- },
439
- "@fastify/type-provider-typebox": {
440
- "optional": true
441
- },
442
- "bullmq": {
443
- "optional": true
444
- },
445
- "@classytic/streamline": {
446
- "optional": true
447
- },
448
- "zod": {
449
- "optional": true
450
- },
451
- "@modelcontextprotocol/sdk": {
452
- "optional": true
453
- }
454
- },
455
- "dependencies": {
456
- "fastify-plugin": "^6.0.0",
457
- "qs": "^6.15.2",
458
- "secure-json-parse": "^4.1.0"
459
- },
460
- "devDependencies": {
461
- "@arethetypeswrong/cli": "^0.18.5",
462
- "@better-auth/drizzle-adapter": "^1.6.19",
463
- "@better-auth/mongo-adapter": "^1.6.19",
464
- "@biomejs/biome": "^2.5.5",
465
- "@classytic/dev-tools": "^0.2.0",
466
- "@classytic/gitkit": ">=0.1.0",
467
- "@classytic/mongokit": "^3.28.0",
468
- "@classytic/pgkit": "^0.1.0",
469
- "@classytic/primitives": "^0.15.0",
470
- "@classytic/repo-core": "^0.17.0",
471
- "@classytic/sqlitekit": "^0.6.0",
472
- "@classytic/streamline": "^2.8.2",
473
- "@electric-sql/pglite": "^0.5.4",
474
- "@fastify/cors": "^11.2.0",
475
- "@fastify/helmet": "^13.0.2",
476
- "@fastify/jwt": "^10.1.0",
477
- "@fastify/multipart": "^10.0.0",
478
- "@fastify/rate-limit": "^11.0.0",
479
- "@fastify/sensible": "^6.0.4",
480
- "@fastify/type-provider-typebox": "^6.1.0",
481
- "@fastify/under-pressure": "^9.0.3",
482
- "@fastify/websocket": "^11.2.0",
483
- "@modelcontextprotocol/sdk": "^1.29.0",
484
- "@opentelemetry/api": "^1.9.1",
485
- "@types/node": "^22.19.21",
486
- "@types/qs": "^6.15.1",
487
- "@vitest/coverage-v8": "^4.1.9",
488
- "ajv": "^8.20.0",
489
- "better-auth": "^1.6.25",
490
- "better-sqlite3": "^12.11.1",
491
- "bullmq": "^5.81.2",
492
- "dotenv": "^17.4.2",
493
- "drizzle-orm": "^0.45.2",
494
- "fast-check": "^4.8.0",
495
- "fastify": "^5.10.0",
496
- "fastify-raw-body": "^5.0.0",
497
- "h3-js": "^4.4.0",
498
- "ioredis": "^5.11.1",
499
- "jose": "^6.2.3",
500
- "jsonwebtoken": "^9.0.3",
501
- "knip": "^6.17.1",
502
- "mongodb": "^7.3.0",
503
- "mongodb-memory-server": "^11.2.0",
504
- "mongoose": "^9.7.1",
505
- "publint": "^0.3.21",
506
- "tsdown": "^0.22.14",
507
- "typebox": "^1.3.6",
508
- "typescript": "^7.0.2",
509
- "vitest": "^4.1.10",
510
- "ws": "^8.21.0",
511
- "zod": "^4.4.3"
512
- },
513
- "config": {
514
- "mongodbMemoryServer": {
515
- "disablePostinstall": "1"
516
- }
517
- },
518
- "keywords": [
519
- "fastify",
520
- "mongodb",
521
- "mongoose",
522
- "crud",
523
- "rest",
524
- "api",
525
- "framework",
526
- "resource",
527
- "multi-tenant",
528
- "typescript",
529
- "tree-shakable",
530
- "serverless",
531
- "websocket",
532
- "jobs",
533
- "workflow"
534
- ],
535
- "author": "Classytic",
536
- "license": "MIT",
537
- "repository": {
538
- "type": "git",
539
- "url": "git+https://github.com/classytic/arc.git"
540
- }
2
+ "name": "@classytic/arc",
3
+ "version": "2.30.0",
4
+ "description": "Resource-oriented backend framework for Fastify - clean, minimal, powerful, tree-shakable",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.mts",
9
+ "default": "./dist/index.mjs"
10
+ },
11
+ "./permissions": {
12
+ "types": "./dist/permissions/index.d.mts",
13
+ "default": "./dist/permissions/index.mjs"
14
+ },
15
+ "./cache": {
16
+ "types": "./dist/cache/index.d.mts",
17
+ "default": "./dist/cache/index.mjs"
18
+ },
19
+ "./types": {
20
+ "types": "./dist/types/index.d.mts",
21
+ "default": "./dist/types/index.mjs"
22
+ },
23
+ "./types/storage": {
24
+ "types": "./dist/types/storage.d.mts",
25
+ "default": "./dist/types/storage.mjs"
26
+ },
27
+ "./core": {
28
+ "types": "./dist/core/index.d.mts",
29
+ "default": "./dist/core/index.mjs"
30
+ },
31
+ "./presets": {
32
+ "types": "./dist/presets/index.d.mts",
33
+ "default": "./dist/presets/index.mjs"
34
+ },
35
+ "./presets/tenant": {
36
+ "types": "./dist/presets/multiTenant.d.mts",
37
+ "default": "./dist/presets/multiTenant.mjs"
38
+ },
39
+ "./presets/files-upload": {
40
+ "types": "./dist/presets/filesUpload.d.mts",
41
+ "default": "./dist/presets/filesUpload.mjs"
42
+ },
43
+ "./presets/search": {
44
+ "types": "./dist/presets/search.d.mts",
45
+ "default": "./dist/presets/search.mjs"
46
+ },
47
+ "./auth": {
48
+ "types": "./dist/auth/index.d.mts",
49
+ "default": "./dist/auth/index.mjs"
50
+ },
51
+ "./hooks": {
52
+ "types": "./dist/hooks/index.d.mts",
53
+ "default": "./dist/hooks/index.mjs"
54
+ },
55
+ "./middleware": {
56
+ "types": "./dist/middleware/index.d.mts",
57
+ "default": "./dist/middleware/index.mjs"
58
+ },
59
+ "./pipeline": {
60
+ "types": "./dist/pipeline/index.d.mts",
61
+ "default": "./dist/pipeline/index.mjs"
62
+ },
63
+ "./context": {
64
+ "types": "./dist/context/index.d.mts",
65
+ "default": "./dist/context/index.mjs"
66
+ },
67
+ "./logger": {
68
+ "types": "./dist/logger/index.d.mts",
69
+ "default": "./dist/logger/index.mjs"
70
+ },
71
+ "./registry": {
72
+ "types": "./dist/registry/index.d.mts",
73
+ "default": "./dist/registry/index.mjs"
74
+ },
75
+ "./utils": {
76
+ "types": "./dist/utils/index.d.mts",
77
+ "default": "./dist/utils/index.mjs"
78
+ },
79
+ "./cli": {
80
+ "types": "./dist/cli/index.d.mts",
81
+ "default": "./dist/cli/index.mjs"
82
+ },
83
+ "./plugins": {
84
+ "types": "./dist/plugins/index.d.mts",
85
+ "default": "./dist/plugins/index.mjs"
86
+ },
87
+ "./plugins/tracing": {
88
+ "types": "./dist/plugins/tracing-entry.d.mts",
89
+ "default": "./dist/plugins/tracing-entry.mjs"
90
+ },
91
+ "./audit": {
92
+ "types": "./dist/audit/index.d.mts",
93
+ "default": "./dist/audit/index.mjs"
94
+ },
95
+ "./docs": {
96
+ "types": "./dist/docs/index.d.mts",
97
+ "default": "./dist/docs/index.mjs"
98
+ },
99
+ "./encryption": {
100
+ "types": "./dist/encryption/index.d.mts",
101
+ "default": "./dist/encryption/index.mjs"
102
+ },
103
+ "./idempotency": {
104
+ "types": "./dist/idempotency/index.d.mts",
105
+ "default": "./dist/idempotency/index.mjs"
106
+ },
107
+ "./idempotency/redis": {
108
+ "types": "./dist/idempotency/redis.d.mts",
109
+ "default": "./dist/idempotency/redis.mjs"
110
+ },
111
+ "./events": {
112
+ "types": "./dist/events/index.d.mts",
113
+ "default": "./dist/events/index.mjs"
114
+ },
115
+ "./events/redis": {
116
+ "types": "./dist/events/transports/redis.d.mts",
117
+ "default": "./dist/events/transports/redis.mjs"
118
+ },
119
+ "./events/redis-stream": {
120
+ "types": "./dist/events/transports/redis-stream-entry.d.mts",
121
+ "default": "./dist/events/transports/redis-stream-entry.mjs"
122
+ },
123
+ "./testing": {
124
+ "types": "./dist/testing/index.d.mts",
125
+ "default": "./dist/testing/index.mjs"
126
+ },
127
+ "./testing/storage": {
128
+ "types": "./dist/testing/storageContract.d.mts",
129
+ "default": "./dist/testing/storageContract.mjs"
130
+ },
131
+ "./testing/cleanup": {
132
+ "types": "./dist/testing/cleanupStoreContract.d.mts",
133
+ "default": "./dist/testing/cleanupStoreContract.mjs"
134
+ },
135
+ "./factory": {
136
+ "types": "./dist/factory/index.d.mts",
137
+ "default": "./dist/factory/index.mjs"
138
+ },
139
+ "./schemas": {
140
+ "types": "./dist/schemas/index.d.mts",
141
+ "default": "./dist/schemas/index.mjs"
142
+ },
143
+ "./migrations": {
144
+ "types": "./dist/migrations/index.d.mts",
145
+ "default": "./dist/migrations/index.mjs"
146
+ },
147
+ "./discovery": {
148
+ "types": "./dist/discovery/index.d.mts",
149
+ "default": "./dist/discovery/index.mjs"
150
+ },
151
+ "./integrations": {
152
+ "types": "./dist/integrations/index.d.mts",
153
+ "default": "./dist/integrations/index.mjs"
154
+ },
155
+ "./integrations/streamline": {
156
+ "types": "./dist/integrations/streamline.d.mts",
157
+ "default": "./dist/integrations/streamline.mjs"
158
+ },
159
+ "./integrations/websocket": {
160
+ "types": "./dist/integrations/websocket.d.mts",
161
+ "default": "./dist/integrations/websocket.mjs"
162
+ },
163
+ "./integrations/websocket-redis": {
164
+ "types": "./dist/integrations/websocket-redis.d.mts",
165
+ "default": "./dist/integrations/websocket-redis.mjs"
166
+ },
167
+ "./integrations/websocket-pushref-redis": {
168
+ "types": "./dist/integrations/websocket-pushref-redis.d.mts",
169
+ "default": "./dist/integrations/websocket-pushref-redis.mjs"
170
+ },
171
+ "./integrations/jobs": {
172
+ "types": "./dist/integrations/jobs/index.d.mts",
173
+ "default": "./dist/integrations/jobs/index.mjs"
174
+ },
175
+ "./integrations/event-gateway": {
176
+ "types": "./dist/integrations/event-gateway.d.mts",
177
+ "default": "./dist/integrations/event-gateway.mjs"
178
+ },
179
+ "./integrations/webhooks": {
180
+ "types": "./dist/integrations/webhooks.d.mts",
181
+ "default": "./dist/integrations/webhooks.mjs"
182
+ },
183
+ "./auth/redis": {
184
+ "types": "./dist/auth/redis-session.d.mts",
185
+ "default": "./dist/auth/redis-session.mjs"
186
+ },
187
+ "./plugins/response-cache": {
188
+ "types": "./dist/plugins/response-cache.d.mts",
189
+ "default": "./dist/plugins/response-cache.mjs"
190
+ },
191
+ "./scope": {
192
+ "types": "./dist/scope/index.d.mts",
193
+ "default": "./dist/scope/index.mjs"
194
+ },
195
+ "./mcp": {
196
+ "types": "./dist/integrations/mcp/index.d.mts",
197
+ "default": "./dist/integrations/mcp/index.mjs"
198
+ },
199
+ "./mcp/testing": {
200
+ "types": "./dist/integrations/mcp/testing.d.mts",
201
+ "default": "./dist/integrations/mcp/testing.mjs"
202
+ },
203
+ "./scim": {
204
+ "types": "./dist/scim/index.d.mts",
205
+ "default": "./dist/scim/index.mjs"
206
+ },
207
+ "./auth/audit": {
208
+ "types": "./dist/auth/audit.d.mts",
209
+ "default": "./dist/auth/audit.mjs"
210
+ },
211
+ "./sync": {
212
+ "types": "./dist/sync/changelog.d.mts",
213
+ "default": "./dist/sync/changelog.mjs"
214
+ },
215
+ "./usage": {
216
+ "types": "./dist/usage/index.d.mts",
217
+ "default": "./dist/usage/index.mjs"
218
+ },
219
+ "./cleanup": {
220
+ "types": "./dist/cleanup/index.d.mts",
221
+ "default": "./dist/cleanup/index.mjs"
222
+ },
223
+ "./testing/outbox": {
224
+ "types": "./dist/testing/outboxStoreContract.d.mts",
225
+ "default": "./dist/testing/outboxStoreContract.mjs"
226
+ }
227
+ },
228
+ "main": "./dist/index.mjs",
229
+ "types": "./dist/index.d.mts",
230
+ "bin": {
231
+ "arc": "./bin/arc.js"
232
+ },
233
+ "publishConfig": {
234
+ "access": "public"
235
+ },
236
+ "sideEffects": false,
237
+ "arc": {
238
+ "subpathStability": {
239
+ ".": "stable",
240
+ "./permissions": "stable",
241
+ "./cache": "stable",
242
+ "./cleanup": "stable",
243
+ "./types": "stable",
244
+ "./types/storage": "stable",
245
+ "./core": "stable",
246
+ "./presets": "stable",
247
+ "./presets/tenant": "stable",
248
+ "./presets/files-upload": "stable",
249
+ "./presets/search": "stable",
250
+ "./auth": "stable",
251
+ "./hooks": "stable",
252
+ "./middleware": "stable",
253
+ "./pipeline": "stable",
254
+ "./context": "stable",
255
+ "./logger": "stable",
256
+ "./registry": "stable",
257
+ "./utils": "stable",
258
+ "./cli": "stable",
259
+ "./plugins": "stable",
260
+ "./plugins/tracing": "stable",
261
+ "./audit": "stable",
262
+ "./docs": "stable",
263
+ "./encryption": "stable",
264
+ "./idempotency": "stable",
265
+ "./idempotency/redis": "stable",
266
+ "./events": "stable",
267
+ "./events/redis": "stable",
268
+ "./events/redis-stream": "stable",
269
+ "./testing": "stable",
270
+ "./testing/storage": "stable",
271
+ "./testing/cleanup": "stable",
272
+ "./factory": "stable",
273
+ "./schemas": "stable",
274
+ "./migrations": "stable",
275
+ "./discovery": "stable",
276
+ "./integrations": "stable",
277
+ "./integrations/streamline": "stable",
278
+ "./integrations/websocket": "stable",
279
+ "./integrations/websocket-redis": "stable",
280
+ "./integrations/websocket-pushref-redis": "stable",
281
+ "./integrations/jobs": "stable",
282
+ "./integrations/event-gateway": "experimental",
283
+ "./integrations/webhooks": "stable",
284
+ "./auth/redis": "stable",
285
+ "./plugins/response-cache": "stable",
286
+ "./scope": "stable",
287
+ "./mcp": "stable",
288
+ "./mcp/testing": "stable",
289
+ "./scim": "stable",
290
+ "./auth/audit": "stable",
291
+ "./sync": "experimental",
292
+ "./usage": "experimental",
293
+ "./testing/outbox": "stable"
294
+ }
295
+ },
296
+ "files": [
297
+ "dist",
298
+ "bin",
299
+ "skills",
300
+ "llms.txt"
301
+ ],
302
+ "scripts": {
303
+ "build": "tsdown",
304
+ "dev": "tsdown --watch",
305
+ "typecheck": "npm run typecheck:src && npm run typecheck:types && npm run check:type-lane",
306
+ "typecheck:src": "tsc --noEmit",
307
+ "check:type-lane": "node scripts/check-type-lane.mjs",
308
+ "lint": "biome check src/",
309
+ "lint:fix": "biome check --fix src/",
310
+ "lint:all": "biome check src/ tests/",
311
+ "test": "vitest run",
312
+ "test:main": "vitest run",
313
+ "test:main:serial": "vitest run --no-file-parallelism",
314
+ "test:perf": "node --expose-gc ./node_modules/vitest/vitest.mjs run --config vitest.perf.config.ts --no-file-parallelism",
315
+ "test:ci": "npm run test:main && npm run test:perf",
316
+ "test:watch": "vitest",
317
+ "test:ui": "vitest --ui",
318
+ "typecheck:types": "tsc -p tsconfig.types.json",
319
+ "api:surface": "node scripts/check-api-surface.mjs --update",
320
+ "check:api-surface": "node scripts/check-api-surface.mjs",
321
+ "check:package": "publint && attw --pack . --profile esm-only",
322
+ "test:coverage": "vitest run --coverage",
323
+ "test:fast": "vitest run tests/core tests/hooks tests/utils tests/plugins tests/cache tests/events",
324
+ "test:contract": "vitest run tests/contract tests/adapters tests/types",
325
+ "test:integration": "vitest run tests/integrations tests/factory tests/auth",
326
+ "test:e2e": "vitest run tests/e2e tests/scenarios tests/smoke",
327
+ "test:changed": "vitest run --changed",
328
+ "test:reliability": "vitest run tests/cache tests/events tests/migrations tests/plugins/schedules.test.ts tests/plugins/health.test.ts tests/utils/circuit-breaker.test.ts tests/utils/compensation-hooks.test.ts tests/integrations/jobs-timeout.test.ts",
329
+ "test:smoke:ws": "vitest run tests/integrations/websocket/smoke.test.ts",
330
+ "test:smoke:redis": "node scripts/smoke-ws-redis.mjs",
331
+ "smoke": "node scripts/smoke-test.mjs",
332
+ "smoke:consumer": "node scripts/smoke-test.mjs --consumer",
333
+ "push": "classytic-push",
334
+ "release:tag": "node -e \"require('child_process').execSync('npm run push -- v'+require('./package.json').version,{stdio:'inherit'})\"",
335
+ "release": "npm run push -- main && npm run release:tag && npm publish",
336
+ "check:peer-skew": "node scripts/check-peer-skew.mjs",
337
+ "check:docs-drift": "node scripts/check-docs-drift.mjs",
338
+ "check:boundaries": "node scripts/check-boundaries.mjs",
339
+ "prepublishOnly": "npm run check:peer-skew && npm run check:docs-drift && npm run check:boundaries && npm run typecheck && npm run lint && npm run build && npm run check:api-surface && npm run check:package && npm run test:ci && npm run smoke:consumer"
340
+ },
341
+ "engines": {
342
+ "node": ">=22"
343
+ },
344
+ "peerDependencies": {
345
+ "@classytic/primitives": ">=0.15.0",
346
+ "@classytic/repo-core": ">=0.17.0",
347
+ "@classytic/streamline": ">=2.8.0",
348
+ "@fastify/cors": ">=11.0.0",
349
+ "@fastify/helmet": ">=13.0.0",
350
+ "@fastify/jwt": ">=10.0.0",
351
+ "@fastify/multipart": ">=9.0.0",
352
+ "@fastify/rate-limit": ">=10.0.0",
353
+ "@fastify/sensible": ">=6.0.0",
354
+ "@fastify/type-provider-typebox": ">=6.0.0",
355
+ "@fastify/under-pressure": ">=9.0.0",
356
+ "@fastify/websocket": ">=11.0.0",
357
+ "@modelcontextprotocol/sdk": ">=1.28.0",
358
+ "@opentelemetry/api": ">=1.9.0",
359
+ "@opentelemetry/auto-instrumentations-node": ">=0.40.0",
360
+ "@opentelemetry/exporter-trace-otlp-http": ">=0.50.0",
361
+ "@opentelemetry/instrumentation-http": ">=0.50.0",
362
+ "@opentelemetry/instrumentation-mongodb": ">=0.40.0",
363
+ "@opentelemetry/sdk-node": ">=0.50.0",
364
+ "better-auth": ">=1.6.2",
365
+ "bullmq": ">=5.0.0",
366
+ "fastify": ">=5.8.5",
367
+ "fastify-raw-body": ">=5.0.0",
368
+ "h3-js": ">=4.0.0",
369
+ "ioredis": ">=5.0.0",
370
+ "jose": ">=5.0.0",
371
+ "pino-pretty": ">=13.0.0",
372
+ "typebox": ">=1.0.0",
373
+ "zod": ">=4.0.0"
374
+ },
375
+ "peerDependenciesMeta": {
376
+ "better-auth": {
377
+ "optional": true
378
+ },
379
+ "@fastify/cors": {
380
+ "optional": true
381
+ },
382
+ "@fastify/helmet": {
383
+ "optional": true
384
+ },
385
+ "@fastify/jwt": {
386
+ "optional": true
387
+ },
388
+ "@fastify/rate-limit": {
389
+ "optional": true
390
+ },
391
+ "@fastify/sensible": {
392
+ "optional": true
393
+ },
394
+ "@fastify/under-pressure": {
395
+ "optional": true
396
+ },
397
+ "@fastify/multipart": {
398
+ "optional": true
399
+ },
400
+ "@fastify/websocket": {
401
+ "optional": true
402
+ },
403
+ "fastify-raw-body": {
404
+ "optional": true
405
+ },
406
+ "h3-js": {
407
+ "optional": true
408
+ },
409
+ "pino-pretty": {
410
+ "optional": true
411
+ },
412
+ "@opentelemetry/api": {
413
+ "optional": true
414
+ },
415
+ "@opentelemetry/sdk-node": {
416
+ "optional": true
417
+ },
418
+ "@opentelemetry/exporter-trace-otlp-http": {
419
+ "optional": true
420
+ },
421
+ "@opentelemetry/instrumentation-http": {
422
+ "optional": true
423
+ },
424
+ "@opentelemetry/instrumentation-mongodb": {
425
+ "optional": true
426
+ },
427
+ "@opentelemetry/auto-instrumentations-node": {
428
+ "optional": true
429
+ },
430
+ "ioredis": {
431
+ "optional": true
432
+ },
433
+ "jose": {
434
+ "optional": true
435
+ },
436
+ "typebox": {
437
+ "optional": true
438
+ },
439
+ "@fastify/type-provider-typebox": {
440
+ "optional": true
441
+ },
442
+ "bullmq": {
443
+ "optional": true
444
+ },
445
+ "@classytic/streamline": {
446
+ "optional": true
447
+ },
448
+ "zod": {
449
+ "optional": true
450
+ },
451
+ "@modelcontextprotocol/sdk": {
452
+ "optional": true
453
+ }
454
+ },
455
+ "dependencies": {
456
+ "fastify-plugin": "^6.0.0",
457
+ "qs": "^6.15.2",
458
+ "secure-json-parse": "^4.1.0"
459
+ },
460
+ "devDependencies": {
461
+ "@arethetypeswrong/cli": "^0.18.5",
462
+ "@better-auth/drizzle-adapter": "^1.6.19",
463
+ "@better-auth/mongo-adapter": "^1.6.19",
464
+ "@biomejs/biome": "^2.5.5",
465
+ "@classytic/dev-tools": "^0.2.0",
466
+ "@classytic/gitkit": ">=0.1.0",
467
+ "@classytic/mongokit": "^3.28.0",
468
+ "@classytic/pgkit": "^0.1.0",
469
+ "@classytic/primitives": "^0.15.0",
470
+ "@classytic/repo-core": "^0.17.0",
471
+ "@classytic/sqlitekit": "^0.6.0",
472
+ "@classytic/streamline": "^2.8.2",
473
+ "@electric-sql/pglite": "^0.5.4",
474
+ "@fastify/cors": "^11.2.0",
475
+ "@fastify/helmet": "^13.0.2",
476
+ "@fastify/jwt": "^10.1.0",
477
+ "@fastify/multipart": "^10.0.0",
478
+ "@fastify/rate-limit": "^11.0.0",
479
+ "@fastify/sensible": "^6.0.4",
480
+ "@fastify/type-provider-typebox": "^6.1.0",
481
+ "@fastify/under-pressure": "^9.0.3",
482
+ "@fastify/websocket": "^11.2.0",
483
+ "@modelcontextprotocol/sdk": "^1.29.0",
484
+ "@opentelemetry/api": "^1.9.1",
485
+ "@types/node": "^22.19.21",
486
+ "@types/qs": "^6.15.1",
487
+ "@vitest/coverage-v8": "^4.1.9",
488
+ "ajv": "^8.20.0",
489
+ "better-auth": "^1.6.25",
490
+ "better-sqlite3": "^12.11.1",
491
+ "bullmq": "^5.81.2",
492
+ "dotenv": "^17.4.2",
493
+ "drizzle-orm": "^0.45.2",
494
+ "fast-check": "^4.8.0",
495
+ "fastify": "^5.10.0",
496
+ "fastify-raw-body": "^5.0.0",
497
+ "h3-js": "^4.4.0",
498
+ "ioredis": "^5.11.1",
499
+ "jose": "^6.2.3",
500
+ "jsonwebtoken": "^9.0.3",
501
+ "knip": "^6.17.1",
502
+ "mongodb": "^7.3.0",
503
+ "mongodb-memory-server": "^11.2.0",
504
+ "mongoose": "^9.7.1",
505
+ "publint": "^0.3.21",
506
+ "tsdown": "^0.22.14",
507
+ "typebox": "^1.3.6",
508
+ "typescript": "^7.0.2",
509
+ "vitest": "^4.1.10",
510
+ "ws": "^8.21.0",
511
+ "zod": "^4.4.3"
512
+ },
513
+ "config": {
514
+ "mongodbMemoryServer": {
515
+ "disablePostinstall": "1"
516
+ }
517
+ },
518
+ "keywords": [
519
+ "fastify",
520
+ "mongodb",
521
+ "mongoose",
522
+ "crud",
523
+ "rest",
524
+ "api",
525
+ "framework",
526
+ "resource",
527
+ "multi-tenant",
528
+ "typescript",
529
+ "tree-shakable",
530
+ "serverless",
531
+ "websocket",
532
+ "jobs",
533
+ "workflow"
534
+ ],
535
+ "author": "Classytic",
536
+ "license": "MIT",
537
+ "repository": {
538
+ "type": "git",
539
+ "url": "git+https://github.com/classytic/arc.git"
540
+ }
541
541
  }