@classytic/arc 2.10.3 → 2.10.8

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 (135) hide show
  1. package/README.md +1 -1
  2. package/dist/{BaseController-CbKKIflT.mjs → BaseController-DVNKvoX4.mjs} +151 -131
  3. package/dist/actionPermissions-TUVR3uiZ.mjs +22 -0
  4. package/dist/adapters/index.d.mts +2 -2
  5. package/dist/audit/index.d.mts +2 -2
  6. package/dist/audit/index.mjs +15 -17
  7. package/dist/auth/index.d.mts +4 -4
  8. package/dist/auth/index.mjs +5 -5
  9. package/dist/auth/redis-session.d.mts +1 -1
  10. package/dist/cache/index.d.mts +2 -2
  11. package/dist/cache/index.mjs +3 -3
  12. package/dist/cli/commands/docs.mjs +2 -2
  13. package/dist/cli/commands/generate.mjs +1 -1
  14. package/dist/cli/commands/init.mjs +1 -1
  15. package/dist/cli/commands/introspect.mjs +1 -1
  16. package/dist/context/index.d.mts +58 -0
  17. package/dist/context/index.mjs +2 -0
  18. package/dist/core/index.d.mts +2 -2
  19. package/dist/core/index.mjs +2 -2
  20. package/dist/{core-CcR01lup.mjs → core-3MWJosCH.mjs} +139 -91
  21. package/dist/{createApp-BuvPma24.mjs → createApp-BwnEAO2h.mjs} +54 -20
  22. package/dist/docs/index.d.mts +2 -2
  23. package/dist/docs/index.mjs +2 -2
  24. package/dist/{elevation-C7hgL_aI.mjs → elevation-Dci0AYLT.mjs} +2 -2
  25. package/dist/errorHandler-2ii4RIYr.d.mts +114 -0
  26. package/dist/{errorHandler-Bb49BvPD.mjs → errorHandler-CSxe7KIM.mjs} +1 -1
  27. package/dist/{eventPlugin-DCUjuiQT.mjs → eventPlugin-ByU4Cv0e.mjs} +1 -1
  28. package/dist/{eventPlugin-CxWgpd6K.d.mts → eventPlugin-D1ThQ1Pp.d.mts} +1 -1
  29. package/dist/events/index.d.mts +4 -4
  30. package/dist/events/index.mjs +69 -51
  31. package/dist/events/transports/redis-stream-entry.d.mts +1 -1
  32. package/dist/events/transports/redis.d.mts +1 -1
  33. package/dist/factory/index.d.mts +1 -1
  34. package/dist/factory/index.mjs +2 -2
  35. package/dist/{fields-Lo1VUDpt.d.mts → fields-C8Y0XLAu.d.mts} +1 -1
  36. package/dist/hooks/index.d.mts +1 -1
  37. package/dist/hooks/index.mjs +1 -1
  38. package/dist/idempotency/index.d.mts +3 -3
  39. package/dist/idempotency/index.mjs +38 -27
  40. package/dist/idempotency/redis.d.mts +1 -1
  41. package/dist/{index-Cl0uoKd5.d.mts → index-BGbpGVyM.d.mts} +2362 -2155
  42. package/dist/{index-DStwgFUK.d.mts → index-BziRPS4H.d.mts} +1 -1
  43. package/dist/{index-ChIw3776.d.mts → index-C_Noptz-.d.mts} +3 -3
  44. package/dist/{index-8qw4y6ff.d.mts → index-EqQN6p0W.d.mts} +3 -3
  45. package/dist/index.d.mts +7 -219
  46. package/dist/index.mjs +8 -128
  47. package/dist/integrations/event-gateway.d.mts +1 -1
  48. package/dist/integrations/event-gateway.mjs +1 -1
  49. package/dist/integrations/index.d.mts +1 -1
  50. package/dist/integrations/mcp/index.d.mts +2 -2
  51. package/dist/integrations/mcp/index.mjs +1 -1
  52. package/dist/integrations/mcp/testing.d.mts +1 -1
  53. package/dist/integrations/mcp/testing.mjs +1 -1
  54. package/dist/logger/index.d.mts +81 -0
  55. package/dist/{logger-DLg8-Ueg.mjs → logger/index.mjs} +1 -6
  56. package/dist/middleware/index.d.mts +109 -0
  57. package/dist/middleware/index.mjs +70 -0
  58. package/dist/multipartBody-CUQGVlM_.mjs +123 -0
  59. package/dist/{openapi-B5F8AddX.mjs → openapi-DpNpqBmo.mjs} +9 -7
  60. package/dist/org/index.d.mts +2 -2
  61. package/dist/permissions/index.d.mts +2 -2
  62. package/dist/permissions/index.mjs +3 -3
  63. package/dist/{permissions-Dk6mshja.mjs → permissions-wkqRwicB.mjs} +2 -2
  64. package/dist/pipe-CGJxqDGx.mjs +62 -0
  65. package/dist/pipeline/index.d.mts +62 -0
  66. package/dist/pipeline/index.mjs +53 -0
  67. package/dist/plugins/index.d.mts +25 -5
  68. package/dist/plugins/index.mjs +9 -9
  69. package/dist/plugins/tracing-entry.d.mts +1 -1
  70. package/dist/plugins/tracing-entry.mjs +1 -1
  71. package/dist/presets/filesUpload.d.mts +4 -4
  72. package/dist/presets/filesUpload.mjs +255 -1
  73. package/dist/presets/index.d.mts +1 -1
  74. package/dist/presets/index.mjs +2 -2
  75. package/dist/presets/multiTenant.d.mts +1 -1
  76. package/dist/presets/multiTenant.mjs +42 -8
  77. package/dist/presets/search.d.mts +2 -2
  78. package/dist/presets/search.mjs +1 -1
  79. package/dist/{presets-fLJVXdVn.mjs → presets-CrwOvuXI.mjs} +1 -1
  80. package/dist/{queryCachePlugin-DQCEfJis.mjs → queryCachePlugin-ChLNZvFT.mjs} +2 -2
  81. package/dist/{queryCachePlugin-BKbWjgDG.d.mts → queryCachePlugin-Dumka73q.d.mts} +1 -1
  82. package/dist/{queryParser-DBqBB6AC.mjs → queryParser-NR__Qiju.mjs} +68 -1
  83. package/dist/{redis-DqyeggCa.d.mts → redis-MXLp1oOf.d.mts} +1 -1
  84. package/dist/{redis-stream-CakIQmwR.d.mts → redis-stream-bkO88VHx.d.mts} +1 -1
  85. package/dist/registry/index.d.mts +1 -1
  86. package/dist/registry/index.mjs +2 -2
  87. package/dist/{requestContext-xHIKedG6.mjs → requestContext-C38GskNt.mjs} +1 -1
  88. package/dist/{resourceToTools-BElv3xPT.mjs → resourceToTools-BhF3JV5p.mjs} +8 -3
  89. package/dist/scope/index.d.mts +2 -2
  90. package/dist/scope/index.mjs +2 -2
  91. package/dist/{sse-yBCgOLGu.mjs → sse-D8UeDwis.mjs} +1 -1
  92. package/dist/{store-helpers-ZCSMJJAX.mjs → store-helpers-DYYUQbQN.mjs} +4 -0
  93. package/dist/testing/index.d.mts +2 -2
  94. package/dist/testing/index.mjs +11 -2
  95. package/dist/testing/storageContract.d.mts +1 -1
  96. package/dist/types/index.d.mts +4 -4
  97. package/dist/types/index.mjs +1 -1
  98. package/dist/types/storage.d.mts +1 -1
  99. package/dist/{types-Btdda02s.d.mts → types-CVKBssX5.d.mts} +1 -1
  100. package/dist/{types-Co8k3NyS.d.mts → types-CVdgPXBW.d.mts} +22 -9
  101. package/dist/utils/index.d.mts +73 -3
  102. package/dist/utils/index.mjs +4 -4
  103. package/dist/{utils-B2fNOD_i.mjs → utils-LMwVidKy.mjs} +20 -2
  104. package/dist/versioning-CeUXHfjw.d.mts +117 -0
  105. package/package.json +22 -6
  106. package/skills/arc/SKILL.md +1 -1
  107. package/dist/errorHandler-DRQ3EqfL.d.mts +0 -218
  108. package/dist/filesUpload-t21LS-py.mjs +0 -377
  109. /package/dist/{EventTransport-CUw5NNWe.d.mts → EventTransport-CfVEGaEl.d.mts} +0 -0
  110. /package/dist/{HookSystem-BNYKnrXF.mjs → HookSystem-BjFu7zf1.mjs} +0 -0
  111. /package/dist/{ResourceRegistry-BPd6NQDm.mjs → ResourceRegistry-CcN2LVrc.mjs} +0 -0
  112. /package/dist/{betterAuthOpenApi-BBRVhjQN.mjs → betterAuthOpenApi--rdY15Ld.mjs} +0 -0
  113. /package/dist/{caching-CBpK_SCM.mjs → caching-3h93rkJM.mjs} +0 -0
  114. /package/dist/{createActionRouter-Bp_5c_2b.mjs → createActionRouter-C8UUB3Px.mjs} +0 -0
  115. /package/dist/{elevation-C5SwtkAn.d.mts → elevation-s5ykdNHr.d.mts} +0 -0
  116. /package/dist/{errors-CCSsMpXE.d.mts → errors-BI8kEKsO.d.mts} +0 -0
  117. /package/dist/{errors-D5c-5BJL.mjs → errors-BqdUDja_.mjs} +0 -0
  118. /package/dist/{externalPaths-BQ8QijNH.d.mts → externalPaths-Bapitwvd.d.mts} +0 -0
  119. /package/dist/{fields-bxkeltzz.mjs → fields-CTMWOUDt.mjs} +0 -0
  120. /package/dist/{interface-CSbZdv_3.d.mts → interface-B-pe8fhj.d.mts} +0 -0
  121. /package/dist/{interface-D218ikEo.d.mts → interface-yhyb_pLY.d.mts} +0 -0
  122. /package/dist/{keys-qcD-TVJl.mjs → keys-nWQGUTu1.mjs} +0 -0
  123. /package/dist/{loadResources-BAzJItAJ.mjs → loadResources-Bksk8ydA.mjs} +0 -0
  124. /package/dist/{memory-B5Amv9A1.mjs → memory-DqI-449b.mjs} +0 -0
  125. /package/dist/{metrics-DuhiSEZI.mjs → metrics-TuOmguhi.mjs} +0 -0
  126. /package/dist/{pluralize-A0tWEl1K.mjs → pluralize-CWP6MB39.mjs} +0 -0
  127. /package/dist/{registry-B3lRFBWo.mjs → registry-B0Wl7uVV.mjs} +0 -0
  128. /package/dist/{replyHelpers-CXtJDAZ0.mjs → replyHelpers-BLojtuvR.mjs} +0 -0
  129. /package/dist/{sessionManager-BkzVU8h2.d.mts → sessionManager-D-oNWHz3.d.mts} +0 -0
  130. /package/dist/{storage-CVk_SEn2.d.mts → storage-BwGQXUpd.d.mts} +0 -0
  131. /package/dist/{tracing-65B51Dw3.d.mts → tracing-xqXzWeaf.d.mts} +0 -0
  132. /package/dist/{types-Csi3FLfq.mjs → types-CDnTEpga.mjs} +0 -0
  133. /package/dist/{types-DV9WDfeg.mjs → types-D57iXYb8.mjs} +0 -0
  134. /package/dist/{types-BD85MlEK.d.mts → types-tgR4Pt8F.d.mts} +0 -0
  135. /package/dist/{versioning-C2U_bLY0.mjs → versioning-B6mimogM.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { At as SchemaMetadata, Et as DataAdapter, Kt as QueryParserInterface, Tt as AdapterSchemaContext, Wt as ParsedQuery, gt as RouteSchemaOptions, jt as ValidationResult, kt as RepositoryLike, rt as OpenApiSchemas } from "./index-Cl0uoKd5.mjs";
1
+ import { Dt as RouteSchemaOptions, S as QueryParserInterface, _n as RepositoryLike, b as ParsedQuery, mn as DataAdapter, mt as OpenApiSchemas, pn as AdapterSchemaContext, vn as SchemaMetadata, yn as ValidationResult } from "./index-BGbpGVyM.mjs";
2
2
  import { Model } from "mongoose";
3
3
  import { StandardRepo } from "@classytic/repo-core/repository";
4
4
 
@@ -1,6 +1,6 @@
1
- import { r as RequestScope } from "./types-BD85MlEK.mjs";
2
- import { c as PermissionCheck, l as PermissionContext, u as PermissionResult } from "./fields-Lo1VUDpt.mjs";
3
- import { r as CacheStore, t as CacheLogger } from "./interface-D218ikEo.mjs";
1
+ import { r as RequestScope } from "./types-tgR4Pt8F.mjs";
2
+ import { c as PermissionCheck, l as PermissionContext, u as PermissionResult } from "./fields-C8Y0XLAu.mjs";
3
+ import { r as CacheStore, t as CacheLogger } from "./interface-yhyb_pLY.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-BD85MlEK.mjs";
2
- import { c as PermissionCheck } from "./fields-Lo1VUDpt.mjs";
3
- import { B as FastifyWithDecorators, G as ResourceDefinition, St as IRequestContext, Z as CrudController, bt as IController, dn as AnyRecord, lt as ResourceConfig, qt as RequestContext, w as CrudRouterOptions, xt as IControllerResponse } from "./index-Cl0uoKd5.mjs";
1
+ import { B as ResourceDefinition, C as RequestContext, F as FastifyWithDecorators, Mt as IControllerResponse, Nt as IRequestContext, T as CrudRouterOptions, Yt as AnyRecord, bt as ResourceConfig, ct as CrudController, jt as IController } from "./index-BGbpGVyM.mjs";
2
+ import { r as RequestScope } from "./types-tgR4Pt8F.mjs";
3
+ import { c as PermissionCheck } from "./fields-C8Y0XLAu.mjs";
4
4
  import { FastifyReply, FastifyRequest, RouteHandlerMethod } from "fastify";
5
5
 
6
6
  //#region src/constants.d.ts
package/dist/index.d.mts CHANGED
@@ -1,67 +1,10 @@
1
- import { a as applyFieldWritePermissions, c as PermissionCheck, d as UserBase, i as applyFieldReadPermissions, l as PermissionContext, n as FieldPermissionMap, o as fields, t as FieldPermission, u as PermissionResult } from "./fields-Lo1VUDpt.mjs";
2
- import { $ as CrudSchemas, At as SchemaMetadata, B as FastifyWithDecorators, Bt as ArcInternalMetadata, C as ResourceMetadata, Ct as RouteHandler, D as HealthOptions, Dt as FieldMetadata, E as HealthCheck, Et as DataAdapter, Ft as OperationFilter, G as ResourceDefinition, H as RequestWithExtras, It as PipelineConfig, Jt as ServiceContext, K as defineResource, Lt as PipelineContext, Mt as Guard, Nt as Interceptor, O as IntrospectionPluginOptions, Ot as RelationMetadata, Pt as NextFunction, Q as CrudRouteKey, R as FastifyRequestExtras, Rt as PipelineStep, S as RegistryStats, St as IRequestContext, T as GracefulShutdownOptions, Ut as OwnershipCheck, V as MiddlewareHandler, Z as CrudController, _ as ConfigError, _n as UserOrganization, b as IntrospectionData, bt as IController, d as InferAdapterDoc, dn as AnyRecord, et as EventDefinition, f as InferDocType, fn as ApiResponse, g as TypedResourceConfig, gt as RouteSchemaOptions, h as TypedRepository, it as PresetFunction, j as AuthPluginOptions, jt as ValidationResult, k as RequestIdOptions, kt as RepositoryLike, lt as ResourceConfig, m as TypedController, mn as JWTPayload, n as BaseController, nt as MiddlewareConfig, ot as PresetResult, p as InferResourceDoc, pn as ArcRequest, qt as RequestContext, r as BaseControllerOptions, st as RateLimitConfig, t as RouteHandlerMethod, tt as FieldRule, u as PaginationResult, v as ValidateOptions, vn as envelope, vt as ControllerLike, w as CrudRouterOptions, x as RegistryEntry, xt as IControllerResponse, y as ValidationResult$1, z as FastifyWithAuth, zt as Transform } from "./index-Cl0uoKd5.mjs";
3
- import { l as createMongooseAdapter, o as createPrismaAdapter, s as MongooseAdapter, t as PrismaAdapter } from "./index-DStwgFUK.mjs";
4
- import { C as MAX_REGEX_LENGTH, D as RESERVED_QUERY_PARAMS, E as MutationOperation, O as SYSTEM_FIELDS, S as MAX_FILTER_DEPTH, T as MUTATION_OPERATIONS, _ as DEFAULT_UPDATE_METHOD, a as getControllerScope, b as HookOperation, d as CrudOperation, f as DEFAULT_ID_FIELD, g as DEFAULT_TENANT_FIELD, h as DEFAULT_SORT, m as DEFAULT_MAX_LIMIT, p as DEFAULT_LIMIT, s as defineResourceVariants, u as CRUD_OPERATIONS, v as HOOK_OPERATIONS, w as MAX_SEARCH_LENGTH, x as HookPhase, y as HOOK_PHASES } from "./index-8qw4y6ff.mjs";
5
- import { A as requireRoles, C as allOf, E as denyAll, M as when, O as requireAuth, S as createOrgPermissions, T as anyOf, a as presets_d_exports, c as readOnly, d as requireOrgRole, f as requireScopeContext, i as ownerWithAdminBypass, k as requireOwnership, l as requireOrgInScope, m as requireTeamMembership, n as authenticated, o as publicRead, p as requireServiceScope, r as fullPublic, s as publicReadAdminWrite, t as adminOnly, u as requireOrgMembership, v as DynamicPermissionMatrix, w as allowPublic, x as createDynamicPermissionMatrix, y as DynamicPermissionMatrixConfig } from "./index-ChIw3776.mjs";
6
- import { a as NotFoundError, d as ValidationError, f as createDomainError, i as ForbiddenError, t as ArcError, u as UnauthorizedError } from "./errors-CCSsMpXE.mjs";
7
- import { AsyncLocalStorage } from "node:async_hooks";
8
- import { RouteHandlerMethod as RouteHandlerMethod$1 } from "fastify";
1
+ import { A as RequestIdOptions, B as ResourceDefinition, C as RequestContext, D as HealthCheck, Dt as RouteSchemaOptions, E as GracefulShutdownOptions, F as FastifyWithDecorators, L as RequestWithExtras, Mt as IControllerResponse, N as FastifyRequestExtras, Nt as IRequestContext, O as HealthOptions, P as FastifyWithAuth, Pt as RouteHandler, Qt as JWTPayload, T as CrudRouterOptions, V as defineResource, Wt as AuthPluginOptions, Xt as ApiResponse, Yt as AnyRecord, Zt as ArcRequest, _n as RepositoryLike, _t as PresetResult, a as InferAdapterDoc, an as BaseControllerOptions, bt as ResourceConfig, c as TypedController, ct as CrudController, d as PaginationResult, dt as EventDefinition, f as IntrospectionData, ft as FieldRule, g as ArcInternalMetadata, gn as RelationMetadata, h as ResourceMetadata, hn as FieldMetadata, ht as PresetFunction, i as ValidationResult$1, in as BaseController, jt as IController, k as IntrospectionPluginOptions, kt as ControllerLike, l as TypedRepository, lt as CrudRouteKey, m as RegistryStats, mn as DataAdapter, n as ConfigError, nn as envelope, o as InferDocType, p as RegistryEntry, pt as MiddlewareConfig, r as ValidateOptions, s as InferResourceDoc, t as RouteHandlerMethod, tn as UserOrganization, u as TypedResourceConfig, ut as CrudSchemas, vn as SchemaMetadata, vt as RateLimitConfig, w as ServiceContext, y as OwnershipCheck, yn as ValidationResult } from "./index-BGbpGVyM.mjs";
2
+ import { a as applyFieldWritePermissions, c as PermissionCheck, d as UserBase, i as applyFieldReadPermissions, l as PermissionContext, n as FieldPermissionMap, o as fields, t as FieldPermission, u as PermissionResult } from "./fields-C8Y0XLAu.mjs";
3
+ import { l as createMongooseAdapter, o as createPrismaAdapter, s as MongooseAdapter, t as PrismaAdapter } from "./index-BziRPS4H.mjs";
4
+ import { C as MAX_REGEX_LENGTH, D as RESERVED_QUERY_PARAMS, E as MutationOperation, O as SYSTEM_FIELDS, S as MAX_FILTER_DEPTH, T as MUTATION_OPERATIONS, _ as DEFAULT_UPDATE_METHOD, a as getControllerScope, b as HookOperation, d as CrudOperation, f as DEFAULT_ID_FIELD, g as DEFAULT_TENANT_FIELD, h as DEFAULT_SORT, m as DEFAULT_MAX_LIMIT, p as DEFAULT_LIMIT, s as defineResourceVariants, u as CRUD_OPERATIONS, v as HOOK_OPERATIONS, w as MAX_SEARCH_LENGTH, x as HookPhase, y as HOOK_PHASES } from "./index-EqQN6p0W.mjs";
5
+ import { A as requireRoles, C as allOf, E as denyAll, M as when, O as requireAuth, S as createOrgPermissions, T as anyOf, a as presets_d_exports, c as readOnly, d as requireOrgRole, f as requireScopeContext, i as ownerWithAdminBypass, k as requireOwnership, l as requireOrgInScope, m as requireTeamMembership, n as authenticated, o as publicRead, p as requireServiceScope, r as fullPublic, s as publicReadAdminWrite, t as adminOnly, u as requireOrgMembership, v as DynamicPermissionMatrix, w as allowPublic, x as createDynamicPermissionMatrix, y as DynamicPermissionMatrixConfig } from "./index-C_Noptz-.mjs";
6
+ import { a as NotFoundError, d as ValidationError, f as createDomainError, i as ForbiddenError, t as ArcError, u as UnauthorizedError } from "./errors-BI8kEKsO.mjs";
9
7
 
10
- //#region src/context/requestContext.d.ts
11
- /**
12
- * Shape of the request-scoped context store.
13
- * Populated by Arc's onRequest hook in arcCorePlugin.
14
- */
15
- interface RequestStore {
16
- /** Unique request identifier */
17
- requestId?: string;
18
- /** Authenticated user (if any) */
19
- user?: {
20
- id?: string;
21
- _id?: string;
22
- roles?: string[];
23
- [key: string]: unknown;
24
- } | null;
25
- /** Active organization ID (multi-tenant) */
26
- organizationId?: string;
27
- /** Active team ID (team-scoped resources) */
28
- teamId?: string;
29
- /** Current resource name (set by arcDecorator in CRUD routes) */
30
- resourceName?: string;
31
- /** Request start time (for timing) */
32
- startTime: number;
33
- /** Additional context — extensible by app */
34
- [key: string]: unknown;
35
- }
36
- /**
37
- * Request context API.
38
- *
39
- * - `get()` — returns current store or undefined if outside request scope
40
- * - `run(store, fn)` — run a function with a specific store (used by Arc internals)
41
- * - `getStore()` — alias for get() (matches Node.js API naming)
42
- */
43
- declare const requestContext: {
44
- /**
45
- * Get the current request context.
46
- * Returns undefined if called outside a request lifecycle.
47
- */
48
- get(): RequestStore | undefined;
49
- /**
50
- * Alias for get() — matches Node.js AsyncLocalStorage API naming.
51
- */
52
- getStore(): RequestStore | undefined;
53
- /**
54
- * Run a function within a specific request context.
55
- * Used internally by Arc's onRequest hook.
56
- */
57
- run<T>(store: RequestStore, fn: () => T): T;
58
- /**
59
- * The underlying AsyncLocalStorage instance.
60
- * Exposed for advanced use cases (testing, custom integrations).
61
- */
62
- storage: AsyncLocalStorage<RequestStore>;
63
- };
64
- //#endregion
65
8
  //#region src/core/validateResourceConfig.d.ts
66
9
  interface ConfigError$1 {
67
10
  field: string;
@@ -94,162 +37,7 @@ declare function formatValidationErrors(resourceName: string, result: Validation
94
37
  */
95
38
  declare function assertValidConfig(config: ResourceConfig, options?: ValidateOptions$1): void;
96
39
  //#endregion
97
- //#region src/middleware/middleware.d.ts
98
- interface NamedMiddleware {
99
- /** Unique name for debugging/introspection */
100
- readonly name: string;
101
- /** Operations this middleware applies to (default: all) */
102
- readonly operations?: Array<"list" | "get" | "create" | "update" | "delete" | string>;
103
- /** Priority — lower numbers run first (default: 10) */
104
- readonly priority: number;
105
- /** Conditional execution — return true to run, false to skip */
106
- readonly when?: (request: RequestWithExtras) => boolean | Promise<boolean>;
107
- /** The middleware handler */
108
- readonly handler: MiddlewareHandler;
109
- }
110
- interface MiddlewareOptions {
111
- operations?: NamedMiddleware["operations"];
112
- priority?: number;
113
- when?: NamedMiddleware["when"];
114
- handler: MiddlewareHandler;
115
- }
116
- /**
117
- * Create a named middleware with priority and conditions.
118
- */
119
- declare function middleware(name: string, options: MiddlewareOptions): NamedMiddleware;
120
- /**
121
- * Sort named middlewares by priority (ascending — lower runs first).
122
- * Returns a MiddlewareConfig map keyed by operation, ready to pass to `defineResource()`.
123
- */
124
- declare function sortMiddlewares(middlewares: NamedMiddleware[]): MiddlewareConfig;
125
- //#endregion
126
- //#region src/pipeline/guard.d.ts
127
- interface GuardOptions {
128
- operations?: OperationFilter;
129
- handler: (ctx: PipelineContext) => boolean | Promise<boolean>;
130
- }
131
- /**
132
- * Create a named guard.
133
- *
134
- * @param name - Guard name (for debugging/introspection)
135
- * @param handlerOrOptions - Handler function or options object
136
- */
137
- declare function guard(name: string, handlerOrOptions: ((ctx: PipelineContext) => boolean | Promise<boolean>) | GuardOptions): Guard;
138
- //#endregion
139
- //#region src/pipeline/intercept.d.ts
140
- interface InterceptOptions {
141
- operations?: OperationFilter;
142
- handler: (ctx: PipelineContext, next: NextFunction) => Promise<IControllerResponse<unknown>>;
143
- }
144
- /**
145
- * Create a named interceptor.
146
- *
147
- * @param name - Interceptor name (for debugging/introspection)
148
- * @param handlerOrOptions - Handler function or options object
149
- */
150
- declare function intercept(name: string, handlerOrOptions: ((ctx: PipelineContext, next: NextFunction) => Promise<IControllerResponse<unknown>>) | InterceptOptions): Interceptor;
151
- //#endregion
152
- //#region src/pipeline/pipe.d.ts
153
- /**
154
- * Compose pipeline steps into an ordered array.
155
- * Accepts guards, transforms, and interceptors in any order.
156
- */
157
- declare function pipe(...steps: PipelineStep[]): PipelineStep[];
158
- //#endregion
159
- //#region src/pipeline/transform.d.ts
160
- interface TransformOptions {
161
- operations?: OperationFilter;
162
- handler: (ctx: PipelineContext) => PipelineContext | undefined | Promise<PipelineContext | undefined>;
163
- }
164
- /**
165
- * Create a named transform.
166
- *
167
- * @param name - Transform name (for debugging/introspection)
168
- * @param handlerOrOptions - Handler function or options object
169
- */
170
- declare function transform(name: string, handlerOrOptions: ((ctx: PipelineContext) => PipelineContext | undefined | Promise<PipelineContext | undefined>) | TransformOptions): Transform;
171
- //#endregion
172
- //#region src/logger/index.d.ts
173
- /**
174
- * Arc Logger — Centralized debug & warning system
175
- *
176
- * Lightweight, zero-dependency logger for Arc framework internals.
177
- * Inspired by the `debug` npm package — disabled by default, opt-in via
178
- * environment variable or `createApp({ debug })` option.
179
- *
180
- * @example
181
- * ```typescript
182
- * // Enable via env var
183
- * ARC_DEBUG=1 node server.js // all modules
184
- * ARC_DEBUG=scope,elevation node server.js // specific modules
185
- *
186
- * // Enable via createApp
187
- * const app = await createApp({ debug: true });
188
- * const app = await createApp({ debug: 'scope,elevation' });
189
- *
190
- * // Suppress warnings (not recommended)
191
- * ARC_SUPPRESS_WARNINGS=1 node server.js
192
- *
193
- * // Framework internals use:
194
- * import { arcLog } from '../logger/index.js';
195
- * const log = arcLog('elevation');
196
- * log.debug('Elevation applied', { userId });
197
- * log.warn('Something unexpected');
198
- * ```
199
- */
200
- interface ArcLoggerOptions {
201
- /**
202
- * Enable debug output.
203
- * - `true` or `'*'` — all modules
204
- * - `string` — comma-separated module names (e.g., `'scope,elevation'`)
205
- * - `false` — disabled (default)
206
- */
207
- debug?: boolean | string;
208
- /**
209
- * Custom log writer. Defaults to `console`.
210
- * Useful for routing Arc logs into Fastify's pino logger or test fixtures.
211
- */
212
- writer?: ArcLogWriter;
213
- }
214
- interface ArcLogWriter {
215
- debug: (...args: unknown[]) => void;
216
- info: (...args: unknown[]) => void;
217
- warn: (...args: unknown[]) => void;
218
- error: (...args: unknown[]) => void;
219
- }
220
- interface ArcLogger {
221
- debug: (...args: unknown[]) => void;
222
- info: (...args: unknown[]) => void;
223
- warn: (...args: unknown[]) => void;
224
- error: (...args: unknown[]) => void;
225
- }
226
- /**
227
- * Configure the Arc logger globally.
228
- *
229
- * Called automatically by `createApp({ debug })`, but can also be
230
- * called manually for standalone usage outside of `createApp`.
231
- */
232
- declare function configureArcLogger(options: ArcLoggerOptions): void;
233
- /**
234
- * Create a module-scoped logger.
235
- *
236
- * Debug and info messages are gated by the `ARC_DEBUG` env var or
237
- * `createApp({ debug })` option. Warnings always show (unless
238
- * `ARC_SUPPRESS_WARNINGS=1`). Errors always show.
239
- *
240
- * @param module - Module name (e.g., 'scope', 'elevation', 'sse', 'preset')
241
- * @returns Logger instance for that module
242
- *
243
- * @example
244
- * ```typescript
245
- * const log = arcLog('elevation');
246
- * log.debug('Checking elevation header');
247
- * log.warn('No authenticate decorator found');
248
- * ```
249
- */
250
- declare function arcLog(module: string): ArcLogger;
251
- //#endregion
252
40
  //#region src/index.d.ts
253
41
  declare const version: string;
254
42
  //#endregion
255
- export { type ValidationResult as AdapterValidationResult, type AnyRecord, type ApiResponse, ArcError, type ArcInternalMetadata, type ArcLogWriter, type ArcLogger, type ArcLoggerOptions, type ArcRequest, type AuthPluginOptions, BaseController, type BaseControllerOptions, CRUD_OPERATIONS, type ConfigError, type ControllerLike, type CrudController, CrudOperation, type CrudRouteKey, type CrudRouterOptions, type CrudSchemas, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, type DataAdapter, type DynamicPermissionMatrix, type DynamicPermissionMatrixConfig, type EventDefinition, type FastifyRequestExtras, type FastifyWithAuth, type FastifyWithDecorators, type FieldMetadata, type FieldPermission, type FieldPermissionMap, type FieldRule, ForbiddenError, type GracefulShutdownOptions, type Guard, HOOK_OPERATIONS, HOOK_PHASES, type HealthCheck, type HealthOptions, HookOperation, HookPhase, type IController, type IControllerResponse, type IRequestContext, type InferAdapterDoc, type InferDocType, type InferResourceDoc, type Interceptor, type IntrospectionData, type IntrospectionPluginOptions, type JWTPayload, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, type MiddlewareConfig, MongooseAdapter, MutationOperation, type NamedMiddleware, NotFoundError, type OwnershipCheck, type PaginationResult, type PermissionCheck, type PermissionContext, type PermissionResult, type PipelineConfig, type PipelineContext, type PipelineStep, type PresetFunction, type PresetResult, PrismaAdapter, RESERVED_QUERY_PARAMS, type RateLimitConfig, type RegistryEntry, type RegistryStats, type RelationMetadata, type RepositoryLike, type RequestContext, type RequestIdOptions, type RequestStore, type RequestWithExtras, type ResourceConfig, ResourceDefinition, type ResourceMetadata, type RouteHandler, type RouteHandlerMethod, type RouteSchemaOptions, SYSTEM_FIELDS, type SchemaMetadata, type ServiceContext, type Transform, type TypedController, type TypedRepository, type TypedResourceConfig, UnauthorizedError, type UserBase, type UserOrganization, type ValidateOptions, ValidationError, type ValidationResult$1 as ValidationResult, adminOnly, allOf, allowPublic, anyOf, applyFieldReadPermissions, applyFieldWritePermissions, arcLog, assertValidConfig, authenticated, configureArcLogger, createDomainError, createDynamicPermissionMatrix, createMongooseAdapter, createOrgPermissions, createPrismaAdapter, defineResource, defineResourceVariants, denyAll, envelope, fields, formatValidationErrors, fullPublic, getControllerScope, guard, intercept, middleware, ownerWithAdminBypass, presets_d_exports as permissions, pipe, publicRead, publicReadAdminWrite, readOnly, requestContext, requireAuth, requireOrgInScope, requireOrgMembership, requireOrgRole, requireOwnership, requireRoles, requireScopeContext, requireServiceScope, requireTeamMembership, sortMiddlewares, transform, validateResourceConfig, version, when };
43
+ export { type ValidationResult as AdapterValidationResult, type AnyRecord, type ApiResponse, ArcError, type ArcInternalMetadata, type ArcRequest, type AuthPluginOptions, BaseController, type BaseControllerOptions, CRUD_OPERATIONS, type ConfigError, type ControllerLike, type CrudController, CrudOperation, type CrudRouteKey, type CrudRouterOptions, type CrudSchemas, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, type DataAdapter, type DynamicPermissionMatrix, type DynamicPermissionMatrixConfig, type EventDefinition, type FastifyRequestExtras, type FastifyWithAuth, type FastifyWithDecorators, type FieldMetadata, type FieldPermission, type FieldPermissionMap, type FieldRule, ForbiddenError, type GracefulShutdownOptions, HOOK_OPERATIONS, HOOK_PHASES, type HealthCheck, type HealthOptions, HookOperation, HookPhase, type IController, type IControllerResponse, type IRequestContext, type InferAdapterDoc, type InferDocType, type InferResourceDoc, type IntrospectionData, type IntrospectionPluginOptions, type JWTPayload, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, type MiddlewareConfig, MongooseAdapter, MutationOperation, NotFoundError, type OwnershipCheck, type PaginationResult, type PermissionCheck, type PermissionContext, type PermissionResult, type PresetFunction, type PresetResult, PrismaAdapter, RESERVED_QUERY_PARAMS, type RateLimitConfig, type RegistryEntry, type RegistryStats, type RelationMetadata, type RepositoryLike, type RequestContext, type RequestIdOptions, type RequestWithExtras, type ResourceConfig, ResourceDefinition, type ResourceMetadata, type RouteHandler, type RouteHandlerMethod, type RouteSchemaOptions, SYSTEM_FIELDS, type SchemaMetadata, type ServiceContext, type TypedController, type TypedRepository, type TypedResourceConfig, UnauthorizedError, type UserBase, type UserOrganization, type ValidateOptions, ValidationError, type ValidationResult$1 as ValidationResult, adminOnly, allOf, allowPublic, anyOf, applyFieldReadPermissions, applyFieldWritePermissions, assertValidConfig, authenticated, createDomainError, createDynamicPermissionMatrix, createMongooseAdapter, createOrgPermissions, createPrismaAdapter, defineResource, defineResourceVariants, denyAll, envelope, fields, formatValidationErrors, fullPublic, getControllerScope, ownerWithAdminBypass, presets_d_exports as permissions, publicRead, publicReadAdminWrite, readOnly, requireAuth, requireOrgInScope, requireOrgMembership, requireOrgRole, requireOwnership, requireRoles, requireScopeContext, requireServiceScope, requireTeamMembership, validateResourceConfig, version, when };
package/dist/index.mjs CHANGED
@@ -1,132 +1,12 @@
1
1
  import { a as createMongooseAdapter, i as MongooseAdapter, r as createPrismaAdapter, t as PrismaAdapter } from "./adapters-BXY4i-hw.mjs";
2
2
  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-BhY1OHoH.mjs";
3
- import { t as BaseController } from "./BaseController-CbKKIflT.mjs";
4
- import { t as envelope } from "./types-Csi3FLfq.mjs";
5
- import { n as applyFieldWritePermissions, r as fields, t as applyFieldReadPermissions } from "./fields-bxkeltzz.mjs";
6
- import { d as createDomainError, i as NotFoundError, l as UnauthorizedError, r as ForbiddenError, t as ArcError, u as ValidationError } from "./errors-D5c-5BJL.mjs";
7
- import { t as requestContext } from "./requestContext-xHIKedG6.mjs";
8
- import { a as formatValidationErrors, h as pipe, i as assertValidConfig, n as ResourceDefinition, o as validateResourceConfig, p as getControllerScope, r as defineResource, t as defineResourceVariants } from "./core-CcR01lup.mjs";
9
- import { C as requireAuth, D as when, T as requireRoles, _ as requireTeamMembership, a as presets_exports, b as anyOf, c as readOnly, d as createOrgPermissions, f as requireOrgInScope, g as requireServiceScope, h as requireScopeContext, i as ownerWithAdminBypass, m as requireOrgRole, n as authenticated, o as publicRead, p as requireOrgMembership, r as fullPublic, s as publicReadAdminWrite, t as adminOnly, u as createDynamicPermissionMatrix, v as allOf, w as requireOwnership, x as denyAll, y as allowPublic } from "./permissions-Dk6mshja.mjs";
10
- import { n as configureArcLogger, t as arcLog } from "./logger-DLg8-Ueg.mjs";
11
- //#region src/middleware/middleware.ts
12
- /**
13
- * Named Middleware — Priority-based, conditional middleware execution.
14
- *
15
- * Named middleware replaces flat arrays with structured, inspectable middleware
16
- * that runs in priority order and supports conditional execution.
17
- *
18
- * @example
19
- * ```typescript
20
- * import { middleware } from '@classytic/arc';
21
- *
22
- * const verifyEmail = middleware('verifyEmail', {
23
- * operations: ['create', 'update'],
24
- * priority: 5,
25
- * when: (req) => !req.user?.emailVerified,
26
- * handler: async (req, reply) => {
27
- * reply.code(403).send({ error: 'Email verification required' });
28
- * },
29
- * });
30
- *
31
- * const rateLimit = middleware('rateLimit', {
32
- * priority: 1,
33
- * handler: async (req, reply) => {
34
- * // rate limit logic
35
- * },
36
- * });
37
- *
38
- * const productResource = defineResource({
39
- * name: 'product',
40
- * adapter,
41
- * middlewares: sortMiddlewares([verifyEmail, rateLimit]),
42
- * });
43
- * ```
44
- */
45
- /**
46
- * Create a named middleware with priority and conditions.
47
- */
48
- function middleware(name, options) {
49
- return {
50
- name,
51
- operations: options.operations,
52
- priority: options.priority ?? 10,
53
- when: options.when,
54
- handler: options.handler
55
- };
56
- }
57
- /**
58
- * Sort named middlewares by priority (ascending — lower runs first).
59
- * Returns a MiddlewareConfig map keyed by operation, ready to pass to `defineResource()`.
60
- */
61
- function sortMiddlewares(middlewares) {
62
- const sorted = [...middlewares].sort((a, b) => a.priority - b.priority);
63
- const operations = CRUD_OPERATIONS;
64
- const result = {};
65
- for (const op of operations) {
66
- const applicable = sorted.filter((m) => !m.operations || m.operations.length === 0 || m.operations.includes(op));
67
- if (applicable.length > 0) result[op] = applicable.map((m) => {
68
- if (!m.when) return m.handler;
69
- const wrapped = async (request, reply) => {
70
- if (await m.when?.(request)) return m.handler(request, reply);
71
- };
72
- return wrapped;
73
- });
74
- }
75
- return result;
76
- }
77
- //#endregion
78
- //#region src/pipeline/guard.ts
79
- /**
80
- * Create a named guard.
81
- *
82
- * @param name - Guard name (for debugging/introspection)
83
- * @param handlerOrOptions - Handler function or options object
84
- */
85
- function guard(name, handlerOrOptions) {
86
- const opts = typeof handlerOrOptions === "function" ? { handler: handlerOrOptions } : handlerOrOptions;
87
- return {
88
- _type: "guard",
89
- name,
90
- operations: opts.operations,
91
- handler: opts.handler
92
- };
93
- }
94
- //#endregion
95
- //#region src/pipeline/intercept.ts
96
- /**
97
- * Create a named interceptor.
98
- *
99
- * @param name - Interceptor name (for debugging/introspection)
100
- * @param handlerOrOptions - Handler function or options object
101
- */
102
- function intercept(name, handlerOrOptions) {
103
- const opts = typeof handlerOrOptions === "function" ? { handler: handlerOrOptions } : handlerOrOptions;
104
- return {
105
- _type: "interceptor",
106
- name,
107
- operations: opts.operations,
108
- handler: opts.handler
109
- };
110
- }
111
- //#endregion
112
- //#region src/pipeline/transform.ts
113
- /**
114
- * Create a named transform.
115
- *
116
- * @param name - Transform name (for debugging/introspection)
117
- * @param handlerOrOptions - Handler function or options object
118
- */
119
- function transform(name, handlerOrOptions) {
120
- const opts = typeof handlerOrOptions === "function" ? { handler: handlerOrOptions } : handlerOrOptions;
121
- return {
122
- _type: "transform",
123
- name,
124
- operations: opts.operations,
125
- handler: opts.handler
126
- };
127
- }
128
- //#endregion
3
+ import { t as BaseController } from "./BaseController-DVNKvoX4.mjs";
4
+ import { t as envelope } from "./types-CDnTEpga.mjs";
5
+ import { n as applyFieldWritePermissions, r as fields, t as applyFieldReadPermissions } from "./fields-CTMWOUDt.mjs";
6
+ import { d as createDomainError, i as NotFoundError, l as UnauthorizedError, r as ForbiddenError, t as ArcError, u as ValidationError } from "./errors-BqdUDja_.mjs";
7
+ import { a as formatValidationErrors, i as assertValidConfig, n as ResourceDefinition, o as validateResourceConfig, p as getControllerScope, r as defineResource, t as defineResourceVariants } from "./core-3MWJosCH.mjs";
8
+ import { C as requireAuth, D as when, T as requireRoles, _ as requireTeamMembership, a as presets_exports, b as anyOf, c as readOnly, d as createOrgPermissions, f as requireOrgInScope, g as requireServiceScope, h as requireScopeContext, i as ownerWithAdminBypass, m as requireOrgRole, n as authenticated, o as publicRead, p as requireOrgMembership, r as fullPublic, s as publicReadAdminWrite, t as adminOnly, u as createDynamicPermissionMatrix, v as allOf, w as requireOwnership, x as denyAll, y as allowPublic } from "./permissions-wkqRwicB.mjs";
129
9
  //#region src/index.ts
130
- const version = "2.10.3";
10
+ const version = "2.10.8";
131
11
  //#endregion
132
- export { ArcError, BaseController, CRUD_OPERATIONS, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, ForbiddenError, HOOK_OPERATIONS, HOOK_PHASES, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, MongooseAdapter, NotFoundError, PrismaAdapter, RESERVED_QUERY_PARAMS, ResourceDefinition, SYSTEM_FIELDS, UnauthorizedError, ValidationError, adminOnly, allOf, allowPublic, anyOf, applyFieldReadPermissions, applyFieldWritePermissions, arcLog, assertValidConfig, authenticated, configureArcLogger, createDomainError, createDynamicPermissionMatrix, createMongooseAdapter, createOrgPermissions, createPrismaAdapter, defineResource, defineResourceVariants, denyAll, envelope, fields, formatValidationErrors, fullPublic, getControllerScope, guard, intercept, middleware, ownerWithAdminBypass, presets_exports as permissions, pipe, publicRead, publicReadAdminWrite, readOnly, requestContext, requireAuth, requireOrgInScope, requireOrgMembership, requireOrgRole, requireOwnership, requireRoles, requireScopeContext, requireServiceScope, requireTeamMembership, sortMiddlewares, transform, validateResourceConfig, version, when };
12
+ export { ArcError, BaseController, CRUD_OPERATIONS, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, ForbiddenError, HOOK_OPERATIONS, HOOK_PHASES, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, MongooseAdapter, NotFoundError, PrismaAdapter, RESERVED_QUERY_PARAMS, ResourceDefinition, SYSTEM_FIELDS, UnauthorizedError, ValidationError, adminOnly, allOf, allowPublic, anyOf, applyFieldReadPermissions, applyFieldWritePermissions, assertValidConfig, authenticated, createDomainError, createDynamicPermissionMatrix, createMongooseAdapter, createOrgPermissions, createPrismaAdapter, defineResource, defineResourceVariants, denyAll, envelope, fields, formatValidationErrors, fullPublic, getControllerScope, ownerWithAdminBypass, presets_exports as permissions, publicRead, publicReadAdminWrite, readOnly, requireAuth, requireOrgInScope, requireOrgMembership, requireOrgRole, requireOwnership, requireRoles, requireScopeContext, requireServiceScope, requireTeamMembership, validateResourceConfig, version, when };
@@ -1,4 +1,4 @@
1
- import { n as DomainEvent } from "../EventTransport-CUw5NNWe.mjs";
1
+ import { n as DomainEvent } from "../EventTransport-CfVEGaEl.mjs";
2
2
  import { WebSocketClient, WebSocketMessage } from "./websocket.mjs";
3
3
  import { FastifyPluginAsync, FastifyRequest } from "fastify";
4
4
 
@@ -4,7 +4,7 @@ const eventGatewayPluginImpl = async (fastify, opts = {}) => {
4
4
  const { auth = true, orgScoped = false, roomPolicy, maxMessageBytes, maxSubscriptionsPerClient, authenticate } = opts;
5
5
  if (auth && !authenticate && !fastify.hasDecorator("authenticate")) throw new Error("[arc-event-gateway] auth is true but fastify.authenticate is not registered. Register an auth plugin first, provide a custom authenticate function, or set auth: false.");
6
6
  if (opts.sse !== false) {
7
- const { default: ssePlugin } = await import("../sse-yBCgOLGu.mjs").then((n) => n.r);
7
+ const { default: ssePlugin } = await import("../sse-D8UeDwis.mjs").then((n) => n.r);
8
8
  await fastify.register(ssePlugin, {
9
9
  path: opts.sse?.path ?? "/events/stream",
10
10
  requireAuth: auth,
@@ -1,7 +1,7 @@
1
1
  import { WebSocketClient, WebSocketMessage, WebSocketPluginOptions } from "./websocket.mjs";
2
2
  import { EventGatewayOptions } from "./event-gateway.mjs";
3
3
  import { JobDefinition, JobDispatchOptions, JobDispatcher, JobMeta, JobsPluginOptions, QueueStats } from "./jobs.mjs";
4
- import { c as McpResourceConfig, f as ToolAnnotations, i as CrudOperation, l as PromptDefinition, m as ToolDefinition, n as CallToolResult, o as McpAuthResult, p as ToolContext, r as CreateMcpServerConfig, s as McpPluginOptions, t as BetterAuthHandler } from "../types-Btdda02s.mjs";
4
+ import { c as McpResourceConfig, f as ToolAnnotations, i as CrudOperation, l as PromptDefinition, m as ToolDefinition, n as CallToolResult, o as McpAuthResult, p as ToolContext, r as CreateMcpServerConfig, s as McpPluginOptions, t as BetterAuthHandler } from "../types-CVKBssX5.mjs";
5
5
  import { StreamlinePluginOptions, WorkflowLike, WorkflowRunLike } from "./streamline.mjs";
6
6
  import { WebhookDeliveryRecord, WebhookManager, WebhookPluginOptions, WebhookStore, WebhookSubscription } from "./webhooks.mjs";
7
7
  export { type BetterAuthHandler, type CallToolResult, type CreateMcpServerConfig, type CrudOperation, type EventGatewayOptions, type JobDefinition, type JobDispatchOptions, type JobDispatcher, type JobMeta, type JobsPluginOptions, type McpAuthResult, type McpPluginOptions, type McpResourceConfig, type PromptDefinition, type QueueStats, type StreamlinePluginOptions, type ToolAnnotations, type ToolContext, type ToolDefinition, type WebSocketClient, type WebSocketMessage, type WebSocketPluginOptions, type WebhookDeliveryRecord, type WebhookManager, type WebhookPluginOptions, type WebhookStore, type WebhookSubscription, type WorkflowLike, type WorkflowRunLike };
@@ -1,5 +1,5 @@
1
- import { G as ResourceDefinition } from "../../index-Cl0uoKd5.mjs";
2
- import { a as McpAuthResolver, c as McpResourceConfig, d as SessionEntry, f as ToolAnnotations, i as CrudOperation, l as PromptDefinition, m as ToolDefinition, n as CallToolResult, o as McpAuthResult, p as ToolContext, r as CreateMcpServerConfig, s as McpPluginOptions, t as BetterAuthHandler, u as PromptResult } from "../../types-Btdda02s.mjs";
1
+ import { B as ResourceDefinition } from "../../index-BGbpGVyM.mjs";
2
+ import { a as McpAuthResolver, c as McpResourceConfig, d as SessionEntry, f as ToolAnnotations, i as CrudOperation, l as PromptDefinition, m as ToolDefinition, n as CallToolResult, o as McpAuthResult, p as ToolContext, r as CreateMcpServerConfig, s as McpPluginOptions, t as BetterAuthHandler, u as PromptResult } from "../../types-CVKBssX5.mjs";
3
3
  import { FastifyPluginAsync } from "fastify";
4
4
  import { z } from "zod";
5
5
 
@@ -1,4 +1,4 @@
1
- import { n as fieldRulesToZod, r as createMcpServer, t as resourceToTools } from "../../resourceToTools-BElv3xPT.mjs";
1
+ import { n as fieldRulesToZod, r as createMcpServer, t as resourceToTools } from "../../resourceToTools-BhF3JV5p.mjs";
2
2
  import { createHash, randomUUID } from "node:crypto";
3
3
  import fp from "fastify-plugin";
4
4
  //#region src/integrations/mcp/defineTool.ts
@@ -1,4 +1,4 @@
1
- import { o as McpAuthResult, s as McpPluginOptions } from "../../types-Btdda02s.mjs";
1
+ import { o as McpAuthResult, s as McpPluginOptions } from "../../types-CVKBssX5.mjs";
2
2
 
3
3
  //#region src/integrations/mcp/testing.d.ts
4
4
  interface TestMcpClientOptions {
@@ -1,4 +1,4 @@
1
- import { r as createMcpServer, t as resourceToTools } from "../../resourceToTools-BElv3xPT.mjs";
1
+ import { r as createMcpServer, t as resourceToTools } from "../../resourceToTools-BhF3JV5p.mjs";
2
2
  //#region src/integrations/mcp/testing.ts
3
3
  /**
4
4
  * @classytic/arc/mcp/testing — MCP Test Utilities
@@ -0,0 +1,81 @@
1
+ //#region src/logger/index.d.ts
2
+ /**
3
+ * Arc Logger — Centralized debug & warning system
4
+ *
5
+ * Lightweight, zero-dependency logger for Arc framework internals.
6
+ * Inspired by the `debug` npm package — disabled by default, opt-in via
7
+ * environment variable or `createApp({ debug })` option.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // Enable via env var
12
+ * ARC_DEBUG=1 node server.js // all modules
13
+ * ARC_DEBUG=scope,elevation node server.js // specific modules
14
+ *
15
+ * // Enable via createApp
16
+ * const app = await createApp({ debug: true });
17
+ * const app = await createApp({ debug: 'scope,elevation' });
18
+ *
19
+ * // Suppress warnings (not recommended)
20
+ * ARC_SUPPRESS_WARNINGS=1 node server.js
21
+ *
22
+ * // Framework internals use:
23
+ * import { arcLog } from '../logger/index.js';
24
+ * const log = arcLog('elevation');
25
+ * log.debug('Elevation applied', { userId });
26
+ * log.warn('Something unexpected');
27
+ * ```
28
+ */
29
+ interface ArcLoggerOptions {
30
+ /**
31
+ * Enable debug output.
32
+ * - `true` or `'*'` — all modules
33
+ * - `string` — comma-separated module names (e.g., `'scope,elevation'`)
34
+ * - `false` — disabled (default)
35
+ */
36
+ debug?: boolean | string;
37
+ /**
38
+ * Custom log writer. Defaults to `console`.
39
+ * Useful for routing Arc logs into Fastify's pino logger or test fixtures.
40
+ */
41
+ writer?: ArcLogWriter;
42
+ }
43
+ interface ArcLogWriter {
44
+ debug: (...args: unknown[]) => void;
45
+ info: (...args: unknown[]) => void;
46
+ warn: (...args: unknown[]) => void;
47
+ error: (...args: unknown[]) => void;
48
+ }
49
+ interface ArcLogger {
50
+ debug: (...args: unknown[]) => void;
51
+ info: (...args: unknown[]) => void;
52
+ warn: (...args: unknown[]) => void;
53
+ error: (...args: unknown[]) => void;
54
+ }
55
+ /**
56
+ * Configure the Arc logger globally.
57
+ *
58
+ * Called automatically by `createApp({ debug })`, but can also be
59
+ * called manually for standalone usage outside of `createApp`.
60
+ */
61
+ declare function configureArcLogger(options: ArcLoggerOptions): void;
62
+ /**
63
+ * Create a module-scoped logger.
64
+ *
65
+ * Debug and info messages are gated by the `ARC_DEBUG` env var or
66
+ * `createApp({ debug })` option. Warnings always show (unless
67
+ * `ARC_SUPPRESS_WARNINGS=1`). Errors always show.
68
+ *
69
+ * @param module - Module name (e.g., 'scope', 'elevation', 'sse', 'preset')
70
+ * @returns Logger instance for that module
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * const log = arcLog('elevation');
75
+ * log.debug('Checking elevation header');
76
+ * log.warn('No authenticate decorator found');
77
+ * ```
78
+ */
79
+ declare function arcLog(module: string): ArcLogger;
80
+ //#endregion
81
+ export { ArcLogWriter, ArcLogger, ArcLoggerOptions, arcLog, configureArcLogger };
@@ -1,9 +1,4 @@
1
- import { t as __exportAll } from "./chunk-BpYLSNr0.mjs";
2
1
  //#region src/logger/index.ts
3
- var logger_exports = /* @__PURE__ */ __exportAll({
4
- arcLog: () => arcLog,
5
- configureArcLogger: () => configureArcLogger
6
- });
7
2
  let globalOptions = {};
8
3
  /**
9
4
  * Configure the Arc logger globally.
@@ -73,4 +68,4 @@ function isSuppressed() {
73
68
  return env === "1" || env === "true";
74
69
  }
75
70
  //#endregion
76
- export { configureArcLogger as n, logger_exports as r, arcLog as t };
71
+ export { arcLog, configureArcLogger };