@classytic/arc 2.7.1 → 2.7.7

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 (107) hide show
  1. package/README.md +14 -2
  2. package/dist/{HookSystem-D7lfx--K.mjs → HookSystem-BNYKnrXF.mjs} +3 -2
  3. package/dist/adapters/index.d.mts +2 -2
  4. package/dist/audit/index.d.mts +1 -1
  5. package/dist/audit/index.mjs +1 -1
  6. package/dist/audit/mongodb.d.mts +1 -1
  7. package/dist/audit/mongodb.mjs +1 -1
  8. package/dist/auth/index.d.mts +4 -4
  9. package/dist/auth/index.mjs +2 -2
  10. package/dist/auth/redis-session.d.mts +1 -1
  11. package/dist/{betterAuthOpenApi-CCw3YX0g.mjs → betterAuthOpenApi-EkPaMWNM.mjs} +1 -1
  12. package/dist/cache/index.d.mts +2 -2
  13. package/dist/cli/commands/docs.mjs +1 -1
  14. package/dist/cli/commands/generate.mjs +1 -1
  15. package/dist/core/index.d.mts +2 -2
  16. package/dist/core/index.mjs +2 -2
  17. package/dist/{core-BWekSEju.mjs → core-B_zEeA2b.mjs} +1 -1
  18. package/dist/{createApp-B_nvKNAQ.mjs → createApp-D7e77m8C.mjs} +18 -7
  19. package/dist/{defineResource-DZzyl4a4.mjs → defineResource-BW2dMCu9.mjs} +1 -6
  20. package/dist/docs/index.d.mts +2 -2
  21. package/dist/docs/index.mjs +1 -1
  22. package/dist/dynamic/index.d.mts +2 -2
  23. package/dist/dynamic/index.mjs +1 -1
  24. package/dist/{errorHandler-DXUttWEO.mjs → errorHandler-CH8wk1eD.mjs} +16 -1
  25. package/dist/{errorHandler-COa51ho_.d.mts → errorHandler-pCpEtNd7.d.mts} +46 -2
  26. package/dist/{eventPlugin-DsaNNXzZ.mjs → eventPlugin-B6U_nCFU.mjs} +3 -2
  27. package/dist/{eventPlugin-BgLxJkIB.d.mts → eventPlugin-CdvUoUna.d.mts} +1 -1
  28. package/dist/events/index.d.mts +3 -3
  29. package/dist/events/index.mjs +1 -1
  30. package/dist/events/transports/redis-stream-entry.d.mts +1 -1
  31. package/dist/events/transports/redis.d.mts +1 -1
  32. package/dist/factory/index.d.mts +1 -1
  33. package/dist/factory/index.mjs +7 -6
  34. package/dist/hooks/index.d.mts +1 -1
  35. package/dist/hooks/index.mjs +1 -1
  36. package/dist/idempotency/index.d.mts +3 -3
  37. package/dist/idempotency/mongodb.d.mts +1 -1
  38. package/dist/idempotency/mongodb.mjs +1 -3
  39. package/dist/idempotency/redis.d.mts +1 -1
  40. package/dist/{index-BYpRGXif.d.mts → index-B0extFr4.d.mts} +3 -3
  41. package/dist/{index-KXM8_JmQ.d.mts → index-BjShrzoj.d.mts} +3 -3
  42. package/dist/{index-StgFaQKD.d.mts → index-C9eYNjGR.d.mts} +1 -1
  43. package/dist/index.d.mts +8 -7
  44. package/dist/index.mjs +3 -3
  45. package/dist/integrations/event-gateway.d.mts +1 -1
  46. package/dist/integrations/event-gateway.mjs +1 -1
  47. package/dist/integrations/index.d.mts +1 -1
  48. package/dist/integrations/mcp/index.d.mts +2 -2
  49. package/dist/integrations/mcp/index.mjs +8 -5
  50. package/dist/integrations/mcp/testing.d.mts +1 -1
  51. package/dist/integrations/mcp/testing.mjs +1 -1
  52. package/dist/integrations/streamline.d.mts +39 -7
  53. package/dist/integrations/streamline.mjs +106 -4
  54. package/dist/integrations/webhooks.d.mts +58 -1
  55. package/dist/integrations/webhooks.mjs +78 -7
  56. package/dist/integrations/websocket.d.mts +7 -1
  57. package/dist/integrations/websocket.mjs +7 -1
  58. package/dist/{interface-Dwzqt4mn.d.mts → interface-B91alUzq.d.mts} +4 -4
  59. package/dist/{mongodb-Bq90j-Uj.d.mts → mongodb-B7zupyck.d.mts} +1 -1
  60. package/dist/{mongodb-DdyYlIXg.d.mts → mongodb-Cgu9F1Nd.d.mts} +1 -1
  61. package/dist/{openapi-C5UhIeWu.mjs → openapi-D7Z7VODz.mjs} +1 -1
  62. package/dist/org/index.d.mts +2 -2
  63. package/dist/permissions/index.d.mts +3 -3
  64. package/dist/plugins/index.d.mts +52 -5
  65. package/dist/plugins/index.mjs +6 -5
  66. package/dist/plugins/tracing-entry.d.mts +1 -1
  67. package/dist/plugins/tracing-entry.mjs +1 -1
  68. package/dist/policies/index.d.mts +1 -1
  69. package/dist/presets/index.d.mts +1 -1
  70. package/dist/presets/multiTenant.d.mts +1 -1
  71. package/dist/{queryCachePlugin-Bw8XyJpX.d.mts → queryCachePlugin-Ckl71mkc.d.mts} +1 -1
  72. package/dist/{redis-CyCntzTO.d.mts → redis-3TQxm2VZ.d.mts} +1 -1
  73. package/dist/{redis-stream-We_Ucl9-.d.mts → redis-stream-Dag5LFa9.d.mts} +1 -1
  74. package/dist/registry/index.d.mts +1 -1
  75. package/dist/replyHelpers-uDUIYh7u.mjs +40 -0
  76. package/dist/{resourceToTools-CkVSSzKg.mjs → resourceToTools-BJkoQoUP.mjs} +11 -5
  77. package/dist/rpc/index.d.mts +1 -1
  78. package/dist/{schemaConverter-0TyONAwM.mjs → schemaConverter-Y5EejTnJ.mjs} +1 -4
  79. package/dist/scope/index.d.mts +2 -2
  80. package/dist/testing/index.d.mts +2 -2
  81. package/dist/testing/index.mjs +1 -1
  82. package/dist/types/index.d.mts +4 -4
  83. package/dist/{types-DPsC0taJ.d.mts → types-B4BNthET.d.mts} +1 -1
  84. package/dist/{types-ClmkMDK1.d.mts → types-C5g2oRC7.d.mts} +18 -2
  85. package/dist/{types-D0qf0Mf4.d.mts → types-CKB47kiu.d.mts} +48 -9
  86. package/dist/utils/index.d.mts +3 -3
  87. package/dist/utils/index.mjs +1 -1
  88. package/package.json +9 -5
  89. package/skills/arc/SKILL.md +62 -1
  90. package/skills/arc/references/integrations.md +32 -7
  91. package/skills/arc/references/mcp.md +31 -7
  92. package/skills/arc/references/production.md +69 -0
  93. /package/dist/{EventTransport-CUpRK_Lg.d.mts → EventTransport-C4VheKeC.d.mts} +0 -0
  94. /package/dist/{circuitBreaker-DwxrljLB.d.mts → circuitBreaker-BBPDt-J_.d.mts} +0 -0
  95. /package/dist/{elevation-Dm-HTBCt.d.mts → elevation-D7WK0RXq.d.mts} +0 -0
  96. /package/dist/{errors-CCSsMpXE.d.mts → errors-BS6lZvWy.d.mts} +0 -0
  97. /package/dist/{externalPaths-Dg7OLsKo.d.mts → externalPaths-iba7jD3d.d.mts} +0 -0
  98. /package/dist/{fields-CYuLMJPD.d.mts → fields-D4nMDqnK.d.mts} +0 -0
  99. /package/dist/{interface-CnluRL4_.d.mts → interface-CG7oRZjX.d.mts} +0 -0
  100. /package/dist/{interface-B9rHWPxD.d.mts → interface-CSbZdv_3.d.mts} +0 -0
  101. /package/dist/{mongodb-mlgxkYI3.mjs → mongodb-B7X7P1P8.mjs} +0 -0
  102. /package/dist/{pluralize-COpOVar8.mjs → pluralize-Dckfq6US.mjs} +0 -0
  103. /package/dist/{sessionManager-IW4sbIea.d.mts → sessionManager-CEo9jwPI.d.mts} +0 -0
  104. /package/dist/{sse-Bp3dabF1.mjs → sse-6W0hjVS_.mjs} +0 -0
  105. /package/dist/{tracing-65B51Dw3.d.mts → tracing-DEqdGkr-.d.mts} +0 -0
  106. /package/dist/{types-CNEbix8T.d.mts → types--D3vvfdt.d.mts} +0 -0
  107. /package/dist/{versioning-aUUVziBY.mjs → versioning-CdBbFefk.mjs} +0 -0
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # @classytic/arc
2
2
 
3
- Database-agnostic resource framework for Fastify. Define resources, get CRUD routes, permissions, presets, caching, events, and OpenAPI — without boilerplate.
3
+ Database-agnostic resource framework for Fastify. Define resources, get CRUD routes, permissions, presets, caching, events, OpenAPI, and MCP tools — without boilerplate.
4
4
 
5
- **Requires:** Fastify 5+ | Node.js 22+ | ESM only
5
+ **v2.7.3** | Fastify 5+ | Node.js 22+ | ESM only | 260+ test files, 3523+ tests
6
6
 
7
7
  ## Install
8
8
 
@@ -690,9 +690,21 @@ npx @classytic/arc doctor # Health check
690
690
  | `@classytic/arc/integrations/websocket` | WebSocket |
691
691
  | `@classytic/arc/integrations/event-gateway` | Unified SSE + WebSocket gateway |
692
692
  | `@classytic/arc/integrations/streamline` | Workflow orchestration |
693
+ | `@classytic/arc/mcp` | MCP tools for AI agents |
693
694
  | `@classytic/arc/docs` | OpenAPI generation |
694
695
  | `@classytic/arc/cli` | CLI commands (programmatic) |
695
696
 
697
+ ## v2.7.3 Highlights
698
+
699
+ - **MCP Integration** — expose resources as AI agent tools (stateless by default, service scope, multi-tenancy)
700
+ - **Reply Helpers** — `reply.ok()`, `reply.fail()`, `reply.paginated()`, `reply.stream()` (opt-in)
701
+ - **Error Mappers** — class-based `instanceof` domain error → HTTP response mapping
702
+ - **Multipart Body** — `multipartBody()` middleware for file upload in CRUD routes
703
+ - **Service Scope** — `kind: "service"` RequestScope for machine-to-machine auth (MCP + WebSocket)
704
+ - **BigInt Serialization** — `serializeBigInt: true` auto-converts BigInt → Number
705
+ - **Event WAL** — skips internal `arc.*` events to prevent startup timeout with durable stores
706
+ - **Security** — `auth: false` produces null `ctx.user` (prevents anonymous bypass of `!!ctx.user` guards)
707
+
696
708
  ## License
697
709
 
698
710
  MIT
@@ -5,8 +5,9 @@ var HookSystem = class {
5
5
  warn;
6
6
  constructor(options) {
7
7
  this.hooks = /* @__PURE__ */ new Map();
8
- this.logger = options?.logger ?? { error: (...args) => console.error(...args) };
9
- this.warn = options?.logger?.warn ?? ((...args) => console.warn(...args));
8
+ const noop = () => {};
9
+ this.logger = options?.logger ?? { error: noop };
10
+ this.warn = options?.logger?.warn ?? noop;
10
11
  }
11
12
  /**
12
13
  * Generate hook key
@@ -1,3 +1,3 @@
1
- import { a as RelationMetadata, c as ValidationResult, i as FieldMetadata, o as RepositoryLike, r as DataAdapter, s as SchemaMetadata, t as AdapterFactory } from "../interface-Dwzqt4mn.mjs";
2
- import { a as PrismaQueryParserOptions, c as MongooseAdapterOptions, i as PrismaQueryParser, l as createMongooseAdapter, n as PrismaAdapterOptions, o as createPrismaAdapter, r as PrismaQueryOptions, s as MongooseAdapter, t as PrismaAdapter } from "../index-StgFaQKD.mjs";
1
+ import { a as RelationMetadata, c as ValidationResult, i as FieldMetadata, o as RepositoryLike, r as DataAdapter, s as SchemaMetadata, t as AdapterFactory } from "../interface-B91alUzq.mjs";
2
+ import { a as PrismaQueryParserOptions, c as MongooseAdapterOptions, i as PrismaQueryParser, l as createMongooseAdapter, n as PrismaAdapterOptions, o as createPrismaAdapter, r as PrismaQueryOptions, s as MongooseAdapter, t as PrismaAdapter } from "../index-C9eYNjGR.mjs";
3
3
  export { AdapterFactory, DataAdapter, FieldMetadata, MongooseAdapter, MongooseAdapterOptions, PrismaAdapter, PrismaAdapterOptions, PrismaQueryOptions, PrismaQueryParser, PrismaQueryParserOptions, RelationMetadata, RepositoryLike, SchemaMetadata, ValidationResult, createMongooseAdapter, createPrismaAdapter };
@@ -1,4 +1,4 @@
1
- import { a as AuditContext, c as AuditStore, i as AuditAction, l as AuditStoreOptions, n as MongoAuditStoreOptions, o as AuditEntry, r as MongoConnection, s as AuditQueryOptions, u as createAuditEntry } from "../mongodb-DdyYlIXg.mjs";
1
+ import { a as AuditContext, c as AuditStore, i as AuditAction, l as AuditStoreOptions, n as MongoAuditStoreOptions, o as AuditEntry, r as MongoConnection, s as AuditQueryOptions, u as createAuditEntry } from "../mongodb-Cgu9F1Nd.mjs";
2
2
  import { FastifyPluginAsync } from "fastify";
3
3
 
4
4
  //#region src/audit/auditPlugin.d.ts
@@ -1,4 +1,4 @@
1
- import { t as MongoAuditStore } from "../mongodb-mlgxkYI3.mjs";
1
+ import { t as MongoAuditStore } from "../mongodb-B7X7P1P8.mjs";
2
2
  import fp from "fastify-plugin";
3
3
  //#region src/audit/stores/interface.ts
4
4
  /**
@@ -1,2 +1,2 @@
1
- import { n as MongoAuditStoreOptions, t as MongoAuditStore } from "../mongodb-DdyYlIXg.mjs";
1
+ import { n as MongoAuditStoreOptions, t as MongoAuditStore } from "../mongodb-Cgu9F1Nd.mjs";
2
2
  export { MongoAuditStore, type MongoAuditStoreOptions };
@@ -1,2 +1,2 @@
1
- import { t as MongoAuditStore } from "../mongodb-mlgxkYI3.mjs";
1
+ import { t as MongoAuditStore } from "../mongodb-B7X7P1P8.mjs";
2
2
  export { MongoAuditStore };
@@ -1,7 +1,7 @@
1
- import { g as AuthPluginOptions, h as AuthHelpers } from "../interface-Dwzqt4mn.mjs";
2
- import { t as PermissionCheck } from "../types-DPsC0taJ.mjs";
3
- import { t as ExternalOpenApiPaths } from "../externalPaths-Dg7OLsKo.mjs";
4
- import { a as SessionManagerOptions, c as createSessionManager, i as SessionData, n as MemorySessionStoreOptions, o as SessionManagerResult, r as SessionCookieOptions, s as SessionStore, t as MemorySessionStore } from "../sessionManager-IW4sbIea.mjs";
1
+ import { g as AuthPluginOptions, h as AuthHelpers } from "../interface-B91alUzq.mjs";
2
+ import { t as PermissionCheck } from "../types-B4BNthET.mjs";
3
+ import { t as ExternalOpenApiPaths } from "../externalPaths-iba7jD3d.mjs";
4
+ import { a as SessionManagerOptions, c as createSessionManager, i as SessionData, n as MemorySessionStoreOptions, o as SessionManagerResult, r as SessionCookieOptions, s as SessionStore, t as MemorySessionStore } from "../sessionManager-CEo9jwPI.mjs";
5
5
  import { FastifyPluginAsync, FastifyReply as FastifyReply$1, FastifyRequest as FastifyRequest$1 } from "fastify";
6
6
 
7
7
  //#region src/auth/authPlugin.d.ts
@@ -1,7 +1,7 @@
1
1
  import { n as normalizeRoles, t as getUserRoles } from "../types-ZUu_h0jp.mjs";
2
2
  import { t as ArcError } from "../errors-Cg58SLNi.mjs";
3
3
  import { h as requireTeamMembership, l as requireOrgMembership, u as requireOrgRole } from "../permissions-CH4cNwJi.mjs";
4
- import { n as extractBetterAuthOpenApi } from "../betterAuthOpenApi-CCw3YX0g.mjs";
4
+ import { n as extractBetterAuthOpenApi } from "../betterAuthOpenApi-EkPaMWNM.mjs";
5
5
  import { createHmac, randomUUID, timingSafeEqual } from "node:crypto";
6
6
  import fp from "fastify-plugin";
7
7
  //#region src/auth/authPlugin.ts
@@ -677,7 +677,7 @@ function createBetterAuthAdapter(options) {
677
677
  if (!fastify.hasDecorator("authenticate")) fastify.decorate("authenticate", authenticate);
678
678
  if (!fastify.hasDecorator("optionalAuthenticate")) fastify.decorate("optionalAuthenticate", optionalAuthenticate);
679
679
  if (!extractedOpenApi && openapiOpt !== false && auth.api && typeof auth.api === "object") {
680
- const { extractBetterAuthOpenApi } = await import("../betterAuthOpenApi-CCw3YX0g.mjs").then((n) => n.t);
680
+ const { extractBetterAuthOpenApi } = await import("../betterAuthOpenApi-EkPaMWNM.mjs").then((n) => n.t);
681
681
  extractedOpenApi = extractBetterAuthOpenApi(auth.api, {
682
682
  basePath,
683
683
  userFields
@@ -1,4 +1,4 @@
1
- import { i as SessionData, s as SessionStore } from "../sessionManager-IW4sbIea.mjs";
1
+ import { i as SessionData, s as SessionStore } from "../sessionManager-CEo9jwPI.mjs";
2
2
 
3
3
  //#region src/auth/redis-session.d.ts
4
4
  /** Minimal Redis client interface — compatible with ioredis */
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./chunk-BpYLSNr0.mjs";
2
- import { a as toJsonSchema } from "./schemaConverter-0TyONAwM.mjs";
2
+ import { a as toJsonSchema } from "./schemaConverter-Y5EejTnJ.mjs";
3
3
  //#region src/auth/betterAuthOpenApi.ts
4
4
  var betterAuthOpenApi_exports = /* @__PURE__ */ __exportAll({ extractBetterAuthOpenApi: () => extractBetterAuthOpenApi });
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { i as CacheStore, n as CacheSetOptions, r as CacheStats, t as CacheLogger } from "../interface-CnluRL4_.mjs";
2
- import { a as CacheEnvelope, c as QueryCache, i as queryCachePlugin, l as QueryCacheConfig, n as QueryCacheDefaults, o as CacheResult, r as QueryCachePluginOptions, s as CacheStatus, t as CrossResourceRule } from "../queryCachePlugin-Bw8XyJpX.mjs";
1
+ import { i as CacheStore, n as CacheSetOptions, r as CacheStats, t as CacheLogger } from "../interface-CG7oRZjX.mjs";
2
+ import { a as CacheEnvelope, c as QueryCache, i as queryCachePlugin, l as QueryCacheConfig, n as QueryCacheDefaults, o as CacheResult, r as QueryCachePluginOptions, s as CacheStatus, t as CrossResourceRule } from "../queryCachePlugin-Ckl71mkc.mjs";
3
3
 
4
4
  //#region src/cache/keys.d.ts
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  import { t as ResourceRegistry } from "../../ResourceRegistry-DsHiG9cL.mjs";
2
- import { t as buildOpenApiSpec } from "../../openapi-C5UhIeWu.mjs";
2
+ import { t as buildOpenApiSpec } from "../../openapi-D7Z7VODz.mjs";
3
3
  import { dirname, resolve } from "node:path";
4
4
  import { pathToFileURL } from "node:url";
5
5
  import { mkdirSync, writeFileSync } from "node:fs";
@@ -1,4 +1,4 @@
1
- import { t as pluralize } from "../../pluralize-COpOVar8.mjs";
1
+ import { t as pluralize } from "../../pluralize-Dckfq6US.mjs";
2
2
  import { join } from "node:path";
3
3
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
4
  //#region src/cli/commands/generate.ts
@@ -1,3 +1,3 @@
1
- import { At as AccessControl, Dt as QueryResolverConfig, Et as QueryResolver, Ht as defineResource, Ot as BodySanitizer, Tt as BaseControllerOptions, Vt as ResourceDefinition, jt as AccessControlConfig, kt as BodySanitizerConfig, wt as BaseController } from "../interface-Dwzqt4mn.mjs";
2
- import { A as MutationOperation, C as HOOK_PHASES, D as MAX_REGEX_LENGTH, E as MAX_FILTER_DEPTH, M as SYSTEM_FIELDS, O as MAX_SEARCH_LENGTH, S as HOOK_OPERATIONS, T as HookPhase, _ as DEFAULT_LIMIT, a as getControllerScope, b as DEFAULT_TENANT_FIELD, c as createCrudRouter, d as ActionRouterConfig, f as IdempotencyService, g as DEFAULT_ID_FIELD, h as CrudOperation, i as getControllerContext, j as RESERVED_QUERY_PARAMS, k as MUTATION_OPERATIONS, l as createPermissionMiddleware, m as CRUD_OPERATIONS, n as createFastifyHandler, o as sendControllerResponse, p as createActionRouter, r as createRequestContext, s as defineResourceVariants, t as createCrudHandlers, u as ActionHandler, v as DEFAULT_MAX_LIMIT, w as HookOperation, x as DEFAULT_UPDATE_METHOD, y as DEFAULT_SORT } from "../index-KXM8_JmQ.mjs";
1
+ import { At as AccessControl, Dt as QueryResolverConfig, Et as QueryResolver, Ht as defineResource, Ot as BodySanitizer, Tt as BaseControllerOptions, Vt as ResourceDefinition, jt as AccessControlConfig, kt as BodySanitizerConfig, wt as BaseController } from "../interface-B91alUzq.mjs";
2
+ import { A as MutationOperation, C as HOOK_PHASES, D as MAX_REGEX_LENGTH, E as MAX_FILTER_DEPTH, M as SYSTEM_FIELDS, O as MAX_SEARCH_LENGTH, S as HOOK_OPERATIONS, T as HookPhase, _ as DEFAULT_LIMIT, a as getControllerScope, b as DEFAULT_TENANT_FIELD, c as createCrudRouter, d as ActionRouterConfig, f as IdempotencyService, g as DEFAULT_ID_FIELD, h as CrudOperation, i as getControllerContext, j as RESERVED_QUERY_PARAMS, k as MUTATION_OPERATIONS, l as createPermissionMiddleware, m as CRUD_OPERATIONS, n as createFastifyHandler, o as sendControllerResponse, p as createActionRouter, r as createRequestContext, s as defineResourceVariants, t as createCrudHandlers, u as ActionHandler, v as DEFAULT_MAX_LIMIT, w as HookOperation, x as DEFAULT_UPDATE_METHOD, y as DEFAULT_SORT } from "../index-BjShrzoj.mjs";
3
3
  export { AccessControl, AccessControlConfig, ActionHandler, ActionRouterConfig, BaseController, BaseControllerOptions, BodySanitizer, BodySanitizerConfig, CRUD_OPERATIONS, CrudOperation, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, HOOK_OPERATIONS, HOOK_PHASES, HookOperation, HookPhase, IdempotencyService, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, MutationOperation, QueryResolver, QueryResolverConfig, RESERVED_QUERY_PARAMS, ResourceDefinition, SYSTEM_FIELDS, createActionRouter, createCrudHandlers, createCrudRouter, createFastifyHandler, createPermissionMiddleware, createRequestContext, defineResource, defineResourceVariants, getControllerContext, getControllerScope, sendControllerResponse };
@@ -1,5 +1,5 @@
1
1
  import { a as DEFAULT_SORT, c as HOOK_OPERATIONS, d as MAX_REGEX_LENGTH, f as MAX_SEARCH_LENGTH, h as SYSTEM_FIELDS, i as DEFAULT_MAX_LIMIT, l as HOOK_PHASES, m as RESERVED_QUERY_PARAMS, n as DEFAULT_ID_FIELD, o as DEFAULT_TENANT_FIELD, p as MUTATION_OPERATIONS, r as DEFAULT_LIMIT, s as DEFAULT_UPDATE_METHOD, t as CRUD_OPERATIONS, u as MAX_FILTER_DEPTH } from "../constants-Cxde4rpC.mjs";
2
2
  import { i as AccessControl, n as QueryResolver, r as BodySanitizer, t as BaseController } from "../BaseController-CpMfCXdn.mjs";
3
- import { n as createActionRouter, t as defineResourceVariants } from "../core-BWekSEju.mjs";
4
- import { c as createCrudHandlers, d as getControllerContext, f as getControllerScope, l as createFastifyHandler, n as defineResource, o as createCrudRouter, p as sendControllerResponse, s as createPermissionMiddleware, t as ResourceDefinition, u as createRequestContext } from "../defineResource-DZzyl4a4.mjs";
3
+ import { n as createActionRouter, t as defineResourceVariants } from "../core-B_zEeA2b.mjs";
4
+ import { c as createCrudHandlers, d as getControllerContext, f as getControllerScope, l as createFastifyHandler, n as defineResource, o as createCrudRouter, p as sendControllerResponse, s as createPermissionMiddleware, t as ResourceDefinition, u as createRequestContext } from "../defineResource-BW2dMCu9.mjs";
5
5
  export { AccessControl, BaseController, BodySanitizer, CRUD_OPERATIONS, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, HOOK_OPERATIONS, HOOK_PHASES, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, QueryResolver, RESERVED_QUERY_PARAMS, ResourceDefinition, SYSTEM_FIELDS, createActionRouter, createCrudHandlers, createCrudRouter, createFastifyHandler, createPermissionMiddleware, createRequestContext, defineResource, defineResourceVariants, getControllerContext, getControllerScope, sendControllerResponse };
@@ -1,5 +1,5 @@
1
1
  import { n as normalizePermissionResult, t as applyPermissionResult } from "./applyPermissionResult-D6GPMsvh.mjs";
2
- import { n as defineResource } from "./defineResource-DZzyl4a4.mjs";
2
+ import { n as defineResource } from "./defineResource-BW2dMCu9.mjs";
3
3
  //#region src/core/createActionRouter.ts
4
4
  /**
5
5
  * Create action-based state transition endpoint
@@ -73,9 +73,8 @@ const productionPreset = {
73
73
  */
74
74
  function devLoggerConfig() {
75
75
  try {
76
- const req = eval("require") ?? null;
77
- if (req?.resolve) {
78
- req.resolve("pino-pretty");
76
+ if (typeof import.meta?.resolve === "function") {
77
+ import.meta.resolve("pino-pretty");
79
78
  return {
80
79
  level: "debug",
81
80
  transport: {
@@ -208,7 +207,7 @@ async function registerArcCore(fastify, config, trackPlugin) {
208
207
  await fastify.register(arcCorePlugin, { emitEvents: config.arcPlugins?.emitEvents !== false });
209
208
  trackPlugin("arc-core");
210
209
  if (config.arcPlugins?.events !== false) {
211
- const { default: eventPlugin } = await import("./eventPlugin-DsaNNXzZ.mjs").then((n) => n.n);
210
+ const { default: eventPlugin } = await import("./eventPlugin-B6U_nCFU.mjs").then((n) => n.n);
212
211
  const eventOpts = typeof config.arcPlugins?.events === "object" ? config.arcPlugins.events : {};
213
212
  await fastify.register(eventPlugin, {
214
213
  ...eventOpts,
@@ -261,7 +260,7 @@ async function registerArcPlugins(fastify, config, trackPlugin, modules) {
261
260
  }
262
261
  if (config.arcPlugins?.sse) if (config.arcPlugins?.events === false) fastify.log.warn("SSE plugin requires events plugin (arcPlugins.events). SSE disabled.");
263
262
  else {
264
- const { default: ssePlugin } = await import("./sse-Bp3dabF1.mjs").then((n) => n.r);
263
+ const { default: ssePlugin } = await import("./sse-6W0hjVS_.mjs").then((n) => n.r);
265
264
  const opts = config.arcPlugins.sse === true ? {} : config.arcPlugins.sse;
266
265
  await fastify.register(ssePlugin, opts);
267
266
  trackPlugin("arc-sse", opts);
@@ -273,7 +272,7 @@ async function registerArcPlugins(fastify, config, trackPlugin, modules) {
273
272
  trackPlugin("arc-metrics", opts);
274
273
  }
275
274
  if (config.arcPlugins?.versioning) {
276
- const { default: versioningPlugin } = await import("./versioning-aUUVziBY.mjs").then((n) => n.r);
275
+ const { default: versioningPlugin } = await import("./versioning-CdBbFefk.mjs").then((n) => n.r);
277
276
  await fastify.register(versioningPlugin, config.arcPlugins.versioning);
278
277
  trackPlugin("arc-versioning", config.arcPlugins.versioning);
279
278
  }
@@ -351,7 +350,7 @@ async function registerElevation(fastify, config, trackPlugin) {
351
350
  */
352
351
  async function registerErrorHandler(fastify, config, trackPlugin) {
353
352
  if (config.errorHandler === false) return;
354
- const { errorHandlerPlugin } = await import("./errorHandler-DXUttWEO.mjs").then((n) => n.n);
353
+ const { errorHandlerPlugin } = await import("./errorHandler-CH8wk1eD.mjs").then((n) => n.n);
355
354
  const errorOpts = typeof config.errorHandler === "object" ? config.errorHandler : { includeStack: config.preset !== "production" };
356
355
  await fastify.register(errorHandlerPlugin, errorOpts);
357
356
  trackPlugin("arc-error-handler", errorOpts);
@@ -720,6 +719,18 @@ async function createApp(options) {
720
719
  await registerElevation(fastify, config, trackPlugin);
721
720
  await registerErrorHandler(fastify, config, trackPlugin);
722
721
  await registerResources(fastify, config);
722
+ if (config.replyHelpers) {
723
+ const { replyHelpersPlugin } = await import("./replyHelpers-uDUIYh7u.mjs").then((n) => n.n);
724
+ await fastify.register(replyHelpersPlugin);
725
+ }
726
+ if (config.serializeBigInt) fastify.addHook("preSerialization", async (_request, _reply, payload) => {
727
+ if (payload === null || payload === void 0) return payload;
728
+ try {
729
+ return JSON.parse(JSON.stringify(payload, (_key, value) => typeof value === "bigint" ? Number(value) : value));
730
+ } catch {
731
+ return payload;
732
+ }
733
+ });
723
734
  const authMode = config.auth === false ? "none" : config.auth ? config.auth.type : "none";
724
735
  fastify.log.info({
725
736
  preset: config.preset ?? "custom",
@@ -7,7 +7,7 @@ import { n as normalizePermissionResult, t as applyPermissionResult } from "./ap
7
7
  import { t as requestContext } from "./requestContext-xHIKedG6.mjs";
8
8
  import { i as getDefaultCrudSchemas } from "./utils-B-l6410F.mjs";
9
9
  import { r as ForbiddenError } from "./errors-Cg58SLNi.mjs";
10
- import { n as convertRouteSchema, t as convertOpenApiSchemas } from "./schemaConverter-0TyONAwM.mjs";
10
+ import { n as convertRouteSchema, t as convertOpenApiSchemas } from "./schemaConverter-Y5EejTnJ.mjs";
11
11
  import { t as hasEvents } from "./typeGuards-CcFZXgU7.mjs";
12
12
  import { r as getAvailablePresets, t as applyPresets } from "./presets-BFrGvvjL.mjs";
13
13
  //#region src/pipeline/pipe.ts
@@ -869,11 +869,6 @@ function assertValidConfig(config, options) {
869
869
  const errorMsg = formatValidationErrors(config.name ?? "unknown", result);
870
870
  throw new Error(errorMsg);
871
871
  }
872
- if (result.warnings.length > 0 && process.env.NODE_ENV !== "production") console.warn(formatValidationErrors(config.name ?? "unknown", {
873
- valid: true,
874
- errors: [],
875
- warnings: result.warnings
876
- }));
877
872
  }
878
873
  //#endregion
879
874
  //#region src/core/defineResource.ts
@@ -1,5 +1,5 @@
1
- import { et as RegistryEntry } from "../interface-Dwzqt4mn.mjs";
2
- import { t as ExternalOpenApiPaths } from "../externalPaths-Dg7OLsKo.mjs";
1
+ import { et as RegistryEntry } from "../interface-B91alUzq.mjs";
2
+ import { t as ExternalOpenApiPaths } from "../externalPaths-iba7jD3d.mjs";
3
3
  import { FastifyPluginAsync } from "fastify";
4
4
 
5
5
  //#region src/docs/openapi.d.ts
@@ -1,5 +1,5 @@
1
1
  import { t as getUserRoles } from "../types-ZUu_h0jp.mjs";
2
- import { n as openApiPlugin, r as openapi_default, t as buildOpenApiSpec } from "../openapi-C5UhIeWu.mjs";
2
+ import { n as openApiPlugin, r as openapi_default, t as buildOpenApiSpec } from "../openapi-D7Z7VODz.mjs";
3
3
  import fp from "fastify-plugin";
4
4
  //#region src/docs/scalar.ts
5
5
  const scalarPlugin = async (fastify, opts = {}) => {
@@ -1,5 +1,5 @@
1
- import { Vt as ResourceDefinition, r as DataAdapter } from "../interface-Dwzqt4mn.mjs";
2
- import { t as PermissionCheck } from "../types-DPsC0taJ.mjs";
1
+ import { Vt as ResourceDefinition, r as DataAdapter } from "../interface-B91alUzq.mjs";
2
+ import { t as PermissionCheck } from "../types-B4BNthET.mjs";
3
3
 
4
4
  //#region src/dynamic/ArcDynamicLoader.d.ts
5
5
  interface ArcArchitectureSchema {
@@ -1,5 +1,5 @@
1
1
  import { t as ArcQueryParser } from "../queryParser-CgCtsjti.mjs";
2
- import { n as defineResource } from "../defineResource-DZzyl4a4.mjs";
2
+ import { n as defineResource } from "../defineResource-BW2dMCu9.mjs";
3
3
  import { C as publicRead, T as readOnly, b as fullPublic, v as adminOnly, w as publicReadAdminWrite, x as ownerWithAdminBypass, y as authenticated } from "../permissions-CH4cNwJi.mjs";
4
4
  //#region src/dynamic/ArcDynamicLoader.ts
5
5
  const VALID_FIELD_TYPES = new Set([
@@ -5,7 +5,7 @@ import fp from "fastify-plugin";
5
5
  var errorHandler_exports = /* @__PURE__ */ __exportAll({ errorHandlerPlugin: () => errorHandlerPlugin });
6
6
  async function errorHandlerPluginFn(fastify, options = {}) {
7
7
  const isProduction = process.env.NODE_ENV === "production";
8
- const { includeStack = !isProduction, onError, errorMap = {} } = options;
8
+ const { includeStack = !isProduction, onError, errorMap = {}, errorMappers = [] } = options;
9
9
  fastify.setErrorHandler(async (error, request, reply) => {
10
10
  if (onError) try {
11
11
  await onError(error, request);
@@ -13,6 +13,21 @@ async function errorHandlerPluginFn(fastify, options = {}) {
13
13
  request.log.error({ err: callbackError }, "Error in onError callback");
14
14
  }
15
15
  const requestId = request.id;
16
+ if (errorMappers.length > 0) {
17
+ for (const mapper of errorMappers) if (error instanceof mapper.type) {
18
+ const mapped = mapper.toResponse(error);
19
+ const response = {
20
+ success: false,
21
+ error: mapped.message ?? error.message,
22
+ code: mapped.code ?? "DOMAIN_ERROR",
23
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
24
+ ...requestId && { requestId },
25
+ ...mapped.details && { details: mapped.details },
26
+ ...includeStack && error.stack ? { stack: error.stack } : {}
27
+ };
28
+ return reply.code(mapped.status).send(response);
29
+ }
30
+ }
16
31
  const response = {
17
32
  success: false,
18
33
  error: error.message || "Internal Server Error",
@@ -1,4 +1,4 @@
1
- import { t as DomainEvent } from "./EventTransport-CUpRK_Lg.mjs";
1
+ import { t as DomainEvent } from "./EventTransport-C4VheKeC.mjs";
2
2
  import { FastifyInstance, FastifyPluginAsync, FastifyRequest } from "fastify";
3
3
 
4
4
  //#region src/plugins/caching.d.ts
@@ -115,6 +115,18 @@ declare const versioningPlugin: FastifyPluginAsync<VersioningOptions>;
115
115
  declare const _default: FastifyPluginAsync<VersioningOptions>;
116
116
  //#endregion
117
117
  //#region src/plugins/errorHandler.d.ts
118
+ /** Class-based error mapper — maps thrown error instances to HTTP responses */
119
+ interface ErrorMapper<T extends Error = Error> {
120
+ /** Error class to match (uses instanceof) */
121
+ type: new (...args: unknown[]) => T;
122
+ /** Convert the error to an HTTP response shape */
123
+ toResponse: (error: T) => {
124
+ status: number;
125
+ code?: string;
126
+ message?: string;
127
+ details?: Record<string, unknown>;
128
+ };
129
+ }
118
130
  interface ErrorHandlerOptions {
119
131
  /**
120
132
  * Include stack trace in error responses (default: false in production)
@@ -125,13 +137,45 @@ interface ErrorHandlerOptions {
125
137
  */
126
138
  onError?: (error: Error, request: FastifyRequest) => void | Promise<void>;
127
139
  /**
128
- * Map specific error types to custom responses
140
+ * Map specific error types to custom responses (by error.name string)
129
141
  */
130
142
  errorMap?: Record<string, {
131
143
  statusCode: number;
132
144
  code: string;
133
145
  message?: string;
134
146
  }>;
147
+ /**
148
+ * Class-based error mappers — checked via `instanceof`, highest priority.
149
+ *
150
+ * Register your domain error classes once; Arc auto-catches and maps them
151
+ * in every handler. Handlers just `throw` — no try/catch needed.
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * class AccountingError extends Error {
156
+ * constructor(message: string, public status: number, public code: string) {
157
+ * super(message);
158
+ * }
159
+ * }
160
+ *
161
+ * const app = await createApp({
162
+ * errorHandler: {
163
+ * errorMappers: [
164
+ * {
165
+ * type: AccountingError,
166
+ * toResponse: (err) => ({ status: err.status, code: err.code, message: err.message }),
167
+ * },
168
+ * ],
169
+ * },
170
+ * });
171
+ *
172
+ * // Now handlers just throw:
173
+ * handler: async (req) => {
174
+ * await ledger.post(id); // throws AccountingError → Arc maps to proper HTTP response
175
+ * }
176
+ * ```
177
+ */
178
+ errorMappers?: ErrorMapper[];
135
179
  }
136
180
  declare function errorHandlerPluginFn(fastify: FastifyInstance, options?: ErrorHandlerOptions): Promise<void>;
137
181
  declare const errorHandlerPlugin: typeof errorHandlerPluginFn;
@@ -165,9 +165,10 @@ const eventPlugin = async (fastify, opts = {}) => {
165
165
  }
166
166
  }
167
167
  try {
168
- if (wal) await wal.save(event);
168
+ const isInternalEvent = type.startsWith("arc.");
169
+ if (wal && !isInternalEvent) await wal.save(event);
169
170
  await transport.publish(event);
170
- if (wal?.acknowledge) await wal.acknowledge(event.meta.id);
171
+ if (wal?.acknowledge && !isInternalEvent) await wal.acknowledge(event.meta.id);
171
172
  onPublish?.(event);
172
173
  } catch (error) {
173
174
  fastify.log?.error?.({
@@ -1,4 +1,4 @@
1
- import { i as EventTransport, n as EventHandler, r as EventLogger, t as DomainEvent } from "./EventTransport-CUpRK_Lg.mjs";
1
+ import { i as EventTransport, n as EventHandler, r as EventLogger, t as DomainEvent } from "./EventTransport-C4VheKeC.mjs";
2
2
  import { FastifyPluginAsync } from "fastify";
3
3
 
4
4
  //#region src/events/defineEvent.d.ts
@@ -1,7 +1,7 @@
1
- import { a as MemoryEventTransport, i as EventTransport, n as EventHandler, o as MemoryEventTransportOptions, r as EventLogger, s as createEvent, t as DomainEvent } from "../EventTransport-CUpRK_Lg.mjs";
2
- import { a as withRetry, c as EventDefinitionOutput, d as EventSchema, f as ValidationResult, i as createDeadLetterPublisher, l as EventRegistry, m as defineEvent, n as eventPlugin, o as CustomValidator, p as createEventRegistry, r as RetryOptions, s as EventDefinitionInput, t as EventPluginOptions, u as EventRegistryOptions } from "../eventPlugin-BgLxJkIB.mjs";
1
+ import { a as MemoryEventTransport, i as EventTransport, n as EventHandler, o as MemoryEventTransportOptions, r as EventLogger, s as createEvent, t as DomainEvent } from "../EventTransport-C4VheKeC.mjs";
2
+ import { a as withRetry, c as EventDefinitionOutput, d as EventSchema, f as ValidationResult, i as createDeadLetterPublisher, l as EventRegistry, m as defineEvent, n as eventPlugin, o as CustomValidator, p as createEventRegistry, r as RetryOptions, s as EventDefinitionInput, t as EventPluginOptions, u as EventRegistryOptions } from "../eventPlugin-CdvUoUna.mjs";
3
3
  import { RedisEventTransportOptions, RedisLike } from "./transports/redis.mjs";
4
- import { r as RedisStreamTransportOptions, t as RedisStreamLike } from "../redis-stream-We_Ucl9-.mjs";
4
+ import { r as RedisStreamTransportOptions, t as RedisStreamLike } from "../redis-stream-Dag5LFa9.mjs";
5
5
 
6
6
  //#region src/events/eventTypes.d.ts
7
7
  /**
@@ -1,4 +1,4 @@
1
- import { a as MemoryEventTransport, i as withRetry, o as createEvent, r as createDeadLetterPublisher, t as eventPlugin } from "../eventPlugin-DsaNNXzZ.mjs";
1
+ import { a as MemoryEventTransport, i as withRetry, o as createEvent, r as createDeadLetterPublisher, t as eventPlugin } from "../eventPlugin-B6U_nCFU.mjs";
2
2
  //#region src/events/defineEvent.ts
3
3
  /**
4
4
  * defineEvent — Typed Event Definitions with Optional Schema Validation
@@ -1,2 +1,2 @@
1
- import { n as RedisStreamTransport, r as RedisStreamTransportOptions, t as RedisStreamLike } from "../../redis-stream-We_Ucl9-.mjs";
1
+ import { n as RedisStreamTransport, r as RedisStreamTransportOptions, t as RedisStreamLike } from "../../redis-stream-Dag5LFa9.mjs";
2
2
  export { type RedisStreamLike, RedisStreamTransport, type RedisStreamTransportOptions };
@@ -1,4 +1,4 @@
1
- import { i as EventTransport, n as EventHandler, r as EventLogger, t as DomainEvent } from "../../EventTransport-CUpRK_Lg.mjs";
1
+ import { i as EventTransport, n as EventHandler, r as EventLogger, t as DomainEvent } from "../../EventTransport-C4VheKeC.mjs";
2
2
 
3
3
  //#region src/events/transports/redis.d.ts
4
4
  interface RedisLike {
@@ -1,4 +1,4 @@
1
- import { a as CustomPluginAuthOption, c as RawBodyOptions, d as ResourceLike, f as loadResources, i as CustomAuthenticatorOption, l as UnderPressureOptions, n as BetterAuthOption, o as JwtAuthOption, r as CreateAppOptions, s as MultipartOptions, t as AuthOption, u as LoadResourcesOptions } from "../types-D0qf0Mf4.mjs";
1
+ import { a as CustomPluginAuthOption, c as RawBodyOptions, d as ResourceLike, f as loadResources, i as CustomAuthenticatorOption, l as UnderPressureOptions, n as BetterAuthOption, o as JwtAuthOption, r as CreateAppOptions, s as MultipartOptions, t as AuthOption, u as LoadResourcesOptions } from "../types-CKB47kiu.mjs";
2
2
  import { FastifyInstance } from "fastify";
3
3
 
4
4
  //#region src/factory/createApp.d.ts
@@ -1,4 +1,4 @@
1
- import { a as edgePreset, c as testingPreset, i as developmentPreset, n as createApp, o as getPreset, s as productionPreset, t as ArcFactory } from "../createApp-B_nvKNAQ.mjs";
1
+ import { a as edgePreset, c as testingPreset, i as developmentPreset, n as createApp, o as getPreset, s as productionPreset, t as ArcFactory } from "../createApp-D7e77m8C.mjs";
2
2
  import { readdir } from "node:fs/promises";
3
3
  import { dirname, join, resolve } from "node:path";
4
4
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -163,14 +163,15 @@ async function loadResources(dir, options = {}) {
163
163
  }
164
164
  resources.push(resource);
165
165
  }
166
- if (!silent) {
166
+ const log = silent ? void 0 : options?.logger;
167
+ if (log) {
167
168
  if (failed.length) {
168
- console.warn(`[arc] loadResources: ${failed.length} file(s) failed to import:`);
169
- for (const f of failed) console.warn(` - ${f}`);
169
+ log.warn(`[arc] loadResources: ${failed.length} file(s) failed to import:`);
170
+ for (const f of failed) log.warn(` - ${f}`);
170
171
  }
171
172
  if (skipped.length) {
172
- console.warn(`[arc] loadResources: ${skipped.length} file(s) skipped (no default export with toPlugin):`);
173
- for (const f of skipped) console.warn(` - ${f}`);
173
+ log.warn(`[arc] loadResources: ${skipped.length} file(s) skipped (no default export with toPlugin):`);
174
+ for (const f of skipped) log.warn(` - ${f}`);
174
175
  }
175
176
  }
176
177
  return resources;
@@ -1,2 +1,2 @@
1
- import { _n as defineHook, an as HookOperation, cn as HookSystem, dn as afterDelete, fn as afterUpdate, gn as createHookSystem, hn as beforeUpdate, in as HookHandler, ln as HookSystemOptions, mn as beforeDelete, nn as DefineHookOptions, on as HookPhase, pn as beforeCreate, rn as HookContext, sn as HookRegistration, un as afterCreate } from "../interface-Dwzqt4mn.mjs";
1
+ import { _n as defineHook, an as HookOperation, cn as HookSystem, dn as afterDelete, fn as afterUpdate, gn as createHookSystem, hn as beforeUpdate, in as HookHandler, ln as HookSystemOptions, mn as beforeDelete, nn as DefineHookOptions, on as HookPhase, pn as beforeCreate, rn as HookContext, sn as HookRegistration, un as afterCreate } from "../interface-B91alUzq.mjs";
2
2
  export { type DefineHookOptions, type HookContext, type HookHandler, type HookOperation, type HookPhase, type HookRegistration, HookSystem, type HookSystemOptions, afterCreate, afterDelete, afterUpdate, beforeCreate, beforeDelete, beforeUpdate, createHookSystem, defineHook };
@@ -1,2 +1,2 @@
1
- import { a as beforeCreate, c as createHookSystem, i as afterUpdate, l as defineHook, n as afterCreate, o as beforeDelete, r as afterDelete, s as beforeUpdate, t as HookSystem } from "../HookSystem-D7lfx--K.mjs";
1
+ import { a as beforeCreate, c as createHookSystem, i as afterUpdate, l as defineHook, n as afterCreate, o as beforeDelete, r as afterDelete, s as beforeUpdate, t as HookSystem } from "../HookSystem-BNYKnrXF.mjs";
2
2
  export { HookSystem, afterCreate, afterDelete, afterUpdate, beforeCreate, beforeDelete, beforeUpdate, createHookSystem, defineHook };
@@ -1,6 +1,6 @@
1
- import { i as createIdempotencyResult, n as IdempotencyResult, r as IdempotencyStore, t as IdempotencyLock } from "../interface-B9rHWPxD.mjs";
2
- import { n as MongoIdempotencyStoreOptions } from "../mongodb-Bq90j-Uj.mjs";
3
- import { r as RedisIdempotencyStoreOptions, t as RedisClient } from "../redis-CyCntzTO.mjs";
1
+ import { i as createIdempotencyResult, n as IdempotencyResult, r as IdempotencyStore, t as IdempotencyLock } from "../interface-CSbZdv_3.mjs";
2
+ import { n as MongoIdempotencyStoreOptions } from "../mongodb-B7zupyck.mjs";
3
+ import { r as RedisIdempotencyStoreOptions, t as RedisClient } from "../redis-3TQxm2VZ.mjs";
4
4
  import { FastifyPluginAsync } from "fastify";
5
5
 
6
6
  //#region src/idempotency/idempotencyPlugin.d.ts
@@ -1,2 +1,2 @@
1
- import { n as MongoIdempotencyStoreOptions, t as MongoIdempotencyStore } from "../mongodb-Bq90j-Uj.mjs";
1
+ import { n as MongoIdempotencyStoreOptions, t as MongoIdempotencyStore } from "../mongodb-B7zupyck.mjs";
2
2
  export { MongoIdempotencyStore, type MongoIdempotencyStoreOptions };
@@ -9,9 +9,7 @@ var MongoIdempotencyStore = class {
9
9
  this.connection = options.connection;
10
10
  this.collectionName = options.collection ?? "arc_idempotency";
11
11
  this.ttlMs = options.ttlMs ?? 864e5;
12
- if (options.createIndex !== false) this.ensureIndex().catch((err) => {
13
- console.warn("[MongoIdempotencyStore] Failed to create index:", err);
14
- });
12
+ if (options.createIndex !== false) this.ensureIndex().catch(() => {});
15
13
  }
16
14
  get collection() {
17
15
  return this.connection.db.collection(this.collectionName);
@@ -1,2 +1,2 @@
1
- import { n as RedisIdempotencyStore, r as RedisIdempotencyStoreOptions, t as RedisClient } from "../redis-CyCntzTO.mjs";
1
+ import { n as RedisIdempotencyStore, r as RedisIdempotencyStoreOptions, t as RedisClient } from "../redis-3TQxm2VZ.mjs";
2
2
  export { type RedisClient, RedisIdempotencyStore, type RedisIdempotencyStoreOptions };
@@ -1,6 +1,6 @@
1
- import { r as RequestScope } from "./types-CNEbix8T.mjs";
2
- import { n as PermissionContext, r as PermissionResult, t as PermissionCheck } from "./types-DPsC0taJ.mjs";
3
- import { i as CacheStore, t as CacheLogger } from "./interface-CnluRL4_.mjs";
1
+ import { r as RequestScope } from "./types--D3vvfdt.mjs";
2
+ import { n as PermissionContext, r as PermissionResult, t as PermissionCheck } from "./types-B4BNthET.mjs";
3
+ import { i as CacheStore, t as CacheLogger } from "./interface-CG7oRZjX.mjs";
4
4
  import { FastifyRequest } from "fastify";
5
5
 
6
6
  //#region src/permissions/applyPermissionResult.d.ts
@@ -1,6 +1,6 @@
1
- import { r as RequestScope } from "./types-CNEbix8T.mjs";
2
- import { C as CrudRouterOptions, Ft as IController, It as IControllerResponse, Lt as IRequestContext, Vt as ResourceDefinition, it as RequestWithExtras, k as FastifyWithDecorators, nt as RequestContext, ot as ResourceConfig, u as AnyRecord, x as CrudController } from "./interface-Dwzqt4mn.mjs";
3
- import { t as PermissionCheck } from "./types-DPsC0taJ.mjs";
1
+ import { r as RequestScope } from "./types--D3vvfdt.mjs";
2
+ import { C as CrudRouterOptions, Ft as IController, It as IControllerResponse, Lt as IRequestContext, Vt as ResourceDefinition, it as RequestWithExtras, k as FastifyWithDecorators, nt as RequestContext, ot as ResourceConfig, u as AnyRecord, x as CrudController } from "./interface-B91alUzq.mjs";
3
+ import { t as PermissionCheck } from "./types-B4BNthET.mjs";
4
4
  import { FastifyInstance, FastifyReply, FastifyRequest, RouteHandlerMethod } from "fastify";
5
5
 
6
6
  //#region src/constants.d.ts
@@ -1,4 +1,4 @@
1
- import { G as OpenApiSchemas, Q as QueryParserInterface, Ut as CrudRepository, c as ValidationResult, ft as RouteSchemaOptions, n as AdapterSchemaContext, o as RepositoryLike, q as ParsedQuery, r as DataAdapter, s as SchemaMetadata } from "./interface-Dwzqt4mn.mjs";
1
+ import { G as OpenApiSchemas, Q as QueryParserInterface, Ut as CrudRepository, c as ValidationResult, ft as RouteSchemaOptions, n as AdapterSchemaContext, o as RepositoryLike, q as ParsedQuery, r as DataAdapter, s as SchemaMetadata } from "./interface-B91alUzq.mjs";
2
2
  import { Model } from "mongoose";
3
3
 
4
4
  //#region src/adapters/mongoose.d.ts