@classytic/arc 2.7.7 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +2 -2
  2. package/dist/adapters/index.d.mts +2 -2
  3. package/dist/audit/index.d.mts +1 -1
  4. package/dist/audit/index.mjs +1 -1
  5. package/dist/audit/mongodb.d.mts +1 -1
  6. package/dist/audit/mongodb.mjs +1 -1
  7. package/dist/auth/index.d.mts +4 -4
  8. package/dist/auth/index.mjs +2 -2
  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 +1 -1
  12. package/dist/cli/commands/docs.mjs +2 -2
  13. package/dist/cli/commands/generate.mjs +1 -1
  14. package/dist/cli/commands/introspect.mjs +1 -1
  15. package/dist/core/index.d.mts +2 -2
  16. package/dist/core/index.mjs +3 -2
  17. package/dist/core-BfrfxNqO.mjs +34 -0
  18. package/dist/{core-B_zEeA2b.mjs → createActionRouter-CbkIAaGh.mjs} +6 -36
  19. package/dist/{createApp-D7e77m8C.mjs → createApp-Cy8eUNKQ.mjs} +10 -10
  20. package/dist/{defineResource-BW2dMCu9.mjs → defineResource-CovBXvTB.mjs} +74 -3
  21. package/dist/docs/index.d.mts +2 -2
  22. package/dist/docs/index.mjs +1 -1
  23. package/dist/dynamic/index.d.mts +2 -2
  24. package/dist/dynamic/index.mjs +1 -1
  25. package/dist/{elevation-By_p2lnn.mjs → elevation-BBGFjzIP.mjs} +1 -1
  26. package/dist/{errorHandler-pCpEtNd7.d.mts → errorHandler-BeN-ERN7.d.mts} +1 -1
  27. package/dist/{eventPlugin-CdvUoUna.d.mts → eventPlugin-CAOWMQS8.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 +1 -1
  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/redis.d.mts +1 -1
  39. package/dist/{index-C9eYNjGR.d.mts → index-BpMhrFgn.d.mts} +1 -1
  40. package/dist/{index-B0extFr4.d.mts → index-CBru2y5Y.d.mts} +3 -3
  41. package/dist/{index-BjShrzoj.d.mts → index-qct60lnl.d.mts} +14 -14
  42. package/dist/index.d.mts +7 -7
  43. package/dist/index.mjs +4 -4
  44. package/dist/integrations/event-gateway.d.mts +1 -1
  45. package/dist/integrations/event-gateway.mjs +1 -1
  46. package/dist/integrations/index.d.mts +1 -1
  47. package/dist/integrations/mcp/index.d.mts +2 -2
  48. package/dist/integrations/mcp/index.mjs +1 -1
  49. package/dist/integrations/mcp/testing.d.mts +1 -1
  50. package/dist/integrations/mcp/testing.mjs +1 -1
  51. package/dist/{interface-B91alUzq.d.mts → interface-IJqN3pXK.d.mts} +145 -4
  52. package/dist/{mongodb-Cgu9F1Nd.d.mts → mongodb-B1eVtFhw.d.mts} +1 -1
  53. package/dist/{mongodb-B7zupyck.d.mts → mongodb-NShVZDMr.d.mts} +1 -1
  54. package/dist/org/index.d.mts +2 -2
  55. package/dist/permissions/index.d.mts +3 -3
  56. package/dist/plugins/index.d.mts +4 -4
  57. package/dist/plugins/index.mjs +8 -8
  58. package/dist/plugins/tracing-entry.d.mts +1 -1
  59. package/dist/plugins/tracing-entry.mjs +1 -1
  60. package/dist/policies/index.d.mts +1 -1
  61. package/dist/presets/index.d.mts +1 -1
  62. package/dist/presets/multiTenant.d.mts +1 -1
  63. package/dist/{queryCachePlugin-Ckl71mkc.d.mts → queryCachePlugin-BCFVXnxK.d.mts} +1 -1
  64. package/dist/{redis-3TQxm2VZ.d.mts → redis-Bunu3qWg.d.mts} +1 -1
  65. package/dist/{redis-stream-Dag5LFa9.d.mts → redis-stream-CF1lrKVk.d.mts} +1 -1
  66. package/dist/registry/index.d.mts +1 -1
  67. package/dist/registry/index.mjs +2 -2
  68. package/dist/{resourceToTools-BJkoQoUP.mjs → resourceToTools-C_1SMiCz.mjs} +1 -1
  69. package/dist/rpc/index.d.mts +1 -1
  70. package/dist/scope/index.d.mts +2 -2
  71. package/dist/scope/index.mjs +1 -1
  72. package/dist/{sse-6W0hjVS_.mjs → sse-CD5Hghpu.mjs} +1 -1
  73. package/dist/testing/index.d.mts +2 -2
  74. package/dist/testing/index.mjs +1 -1
  75. package/dist/types/index.d.mts +5 -5
  76. package/dist/{types-B4BNthET.d.mts → types-BoaZHr-2.d.mts} +1 -1
  77. package/dist/{types-C5g2oRC7.d.mts → types-Ct0PUUSp.d.mts} +1 -1
  78. package/dist/{types-CKB47kiu.d.mts → types-gUxAIZHp.d.mts} +9 -9
  79. package/dist/utils/index.d.mts +3 -3
  80. package/package.json +3 -3
  81. package/skills/arc/SKILL.md +23 -4
  82. package/skills/arc/references/integrations.md +1 -1
  83. package/skills/arc/references/mcp.md +2 -0
  84. /package/dist/{EventTransport-C4VheKeC.d.mts → EventTransport-n1KBxC_N.d.mts} +0 -0
  85. /package/dist/{HookSystem-BNYKnrXF.mjs → HookSystem-BjFu7zf1.mjs} +0 -0
  86. /package/dist/{ResourceRegistry-DsHiG9cL.mjs → ResourceRegistry-BOtJuRCs.mjs} +0 -0
  87. /package/dist/{betterAuthOpenApi-EkPaMWNM.mjs → betterAuthOpenApi-CHCIuA-p.mjs} +0 -0
  88. /package/dist/{caching-5DtLwIqb.mjs → caching-CHH-iHs3.mjs} +0 -0
  89. /package/dist/{circuitBreaker-BBPDt-J_.d.mts → circuitBreaker-BGVoB1hD.d.mts} +0 -0
  90. /package/dist/{elevation-D7WK0RXq.d.mts → elevation-UJO3-NvX.d.mts} +0 -0
  91. /package/dist/{errorHandler-CH8wk1eD.mjs → errorHandler-BW08lEiy.mjs} +0 -0
  92. /package/dist/{errors-BS6lZvWy.d.mts → errors-BI8kEKsO.d.mts} +0 -0
  93. /package/dist/{eventPlugin-B6U_nCFU.mjs → eventPlugin-x4jo3sG0.mjs} +0 -0
  94. /package/dist/{externalPaths-iba7jD3d.d.mts → externalPaths-BQ8QijNH.d.mts} +0 -0
  95. /package/dist/{fields-D4nMDqnK.d.mts → fields-DoeDgh2b.d.mts} +0 -0
  96. /package/dist/{interface-CSbZdv_3.d.mts → interface-CkkWm5uR.d.mts} +0 -0
  97. /package/dist/{interface-CG7oRZjX.d.mts → interface-bpoLKKqx.d.mts} +0 -0
  98. /package/dist/{logger-DLg8-Ueg.mjs → logger-CDjpjySd.mjs} +0 -0
  99. /package/dist/{metrics-Qnvwc-LQ.mjs → metrics-DuhiSEZI.mjs} +0 -0
  100. /package/dist/{mongodb-B7X7P1P8.mjs → mongodb-5Ff3w8jy.mjs} +0 -0
  101. /package/dist/{openapi-D7Z7VODz.mjs → openapi-AYLVjqVe.mjs} +0 -0
  102. /package/dist/{pluralize-Dckfq6US.mjs → pluralize-BneOJkpi.mjs} +0 -0
  103. /package/dist/{queryCachePlugin-CwTpR04-.mjs → queryCachePlugin-D0iIVhW_.mjs} +0 -0
  104. /package/dist/{registry-B3lRFBWo.mjs → registry-B0Wl7uVV.mjs} +0 -0
  105. /package/dist/{replyHelpers-uDUIYh7u.mjs → replyHelpers-CXtJDAZ0.mjs} +0 -0
  106. /package/dist/{sessionManager-CEo9jwPI.d.mts → sessionManager-BkzVU8h2.d.mts} +0 -0
  107. /package/dist/{tracing-DEqdGkr-.d.mts → tracing-xqXzWeaf.d.mts} +0 -0
  108. /package/dist/{types--D3vvfdt.d.mts → types-CN6JvmYz.d.mts} +0 -0
  109. /package/dist/{versioning-CdBbFefk.mjs → versioning-CPU_5Xfs.mjs} +0 -0
@@ -1,5 +1,5 @@
1
- import { Ut as CrudRepository, Vt as ResourceDefinition, u as AnyRecord } from "../interface-B91alUzq.mjs";
2
- import { d as ResourceLike, r as CreateAppOptions } from "../types-CKB47kiu.mjs";
1
+ import { Yt as CrudRepository, m as AnyRecord, qt as ResourceDefinition } from "../interface-IJqN3pXK.mjs";
2
+ import { d as ResourceLike, r as CreateAppOptions } from "../types-gUxAIZHp.mjs";
3
3
  import Fastify, { FastifyInstance, FastifyServerOptions } from "fastify";
4
4
  import { Connection } from "mongoose";
5
5
  import { Mock } from "vitest";
@@ -1796,7 +1796,7 @@ function runEventTests(resourceName, displayName, events) {
1796
1796
  * ```
1797
1797
  */
1798
1798
  async function createTestApp(options = {}) {
1799
- const { createApp } = await import("../createApp-D7e77m8C.mjs").then((n) => n.r);
1799
+ const { createApp } = await import("../createApp-Cy8eUNKQ.mjs").then((n) => n.r);
1800
1800
  const { useInMemoryDb = true, mongoUri: providedMongoUri, ...appOptions } = options;
1801
1801
  const defaultAuth = {
1802
1802
  type: "jwt",
@@ -1,5 +1,5 @@
1
- import { _ as isAuthenticated, c as getOrgRoles, g as hasOrgAccess, n as PUBLIC_SCOPE, p as getTeamId, r as RequestScope, s as getOrgId, t as AUTHENTICATED_SCOPE, v as isElevated, y as isMember } from "../types--D3vvfdt.mjs";
2
- import { $ as RateLimitConfig, A as FieldRule, B as JwtContext, C as CrudRouterOptions, Ct as getUserId, D as FastifyRequestExtras, E as EventsDecorator, F as InferDocType, Ft as IController, G as OpenApiSchemas, Gt as PaginatedResult, H as MiddlewareConfig, I as InferResourceDoc, It as IControllerResponse, J as PopulateOption, K as OwnershipCheck, Kt as PaginationParams, L as IntrospectionData, Lt as IRequestContext, M as HealthCheck, Mt as ControllerHandler, N as HealthOptions, Nt as ControllerLike, O as FastifyWithAuth, P as InferAdapterDoc, Pt as FastifyHandler, Q as QueryParserInterface, R as IntrospectionPluginOptions, Rt as RouteHandler, S as CrudRouteKey, St as envelope, T as EventDefinition, Tt as BaseControllerOptions, U as MiddlewareHandler, Ut as CrudRepository, V as LookupOption, W as ObjectId, Wt as InferDoc, X as PresetHook, Y as PresetFunction, Z as PresetResult, _ as Authenticator, _t as TypedResourceConfig, at as ResourceCacheConfig, b as ControllerQueryOptions, bt as ValidateOptions, ct as ResourceHooks, d as ApiResponse, dt as RouteHandlerMethod, et as RegistryEntry, f as ArcDecorator, ft as RouteSchemaOptions, g as AuthPluginOptions, gt as TypedRepository, h as AuthHelpers, ht as TypedController, it as RequestWithExtras, j as GracefulShutdownOptions, k as FastifyWithDecorators, l as AdditionalRoute, lt as ResourceMetadata, m as ArcRequest, mt as TokenPair, nt as RequestContext, ot as ResourceConfig, p as ArcInternalMetadata, pt as ServiceContext, q as ParsedQuery, qt as QueryOptions, rt as RequestIdOptions, st as ResourceHookContext, tt as RegistryStats, u as AnyRecord, ut as ResourcePermissions, v as AuthenticatorContext, vt as UserLike, w as CrudSchemas, x as CrudController, xt as ValidationResult, y as ConfigError, yt as UserOrganization, z as JWTPayload } from "../interface-B91alUzq.mjs";
3
- import { i as UserBase, n as PermissionContext, r as PermissionResult, t as PermissionCheck } from "../types-B4BNthET.mjs";
4
- import { n as ElevationOptions, t as ElevationEvent } from "../elevation-D7WK0RXq.mjs";
5
- export { AUTHENTICATED_SCOPE, AdditionalRoute, AnyRecord, ApiResponse, ArcDecorator, ArcInternalMetadata, ArcRequest, AuthHelpers, AuthPluginOptions, Authenticator, AuthenticatorContext, BaseControllerOptions, ConfigError, ControllerHandler, ControllerLike, ControllerQueryOptions, CrudController, CrudRepository, CrudRouteKey, CrudRouterOptions, CrudSchemas, ElevationEvent, ElevationOptions, EventDefinition, EventsDecorator, FastifyHandler, FastifyRequestExtras, FastifyWithAuth, FastifyWithDecorators, FieldRule, GracefulShutdownOptions, HealthCheck, HealthOptions, IController, IControllerResponse, IRequestContext, InferAdapterDoc, InferDoc, InferDocType, InferResourceDoc, IntrospectionData, IntrospectionPluginOptions, JWTPayload, JwtContext, LookupOption, MiddlewareConfig, MiddlewareHandler, ObjectId, OpenApiSchemas, OwnershipCheck, PUBLIC_SCOPE, PaginatedResult, PaginationParams, ParsedQuery, PermissionCheck, PermissionContext, PermissionResult, PopulateOption, PresetFunction, PresetHook, PresetResult, QueryOptions, QueryParserInterface, RateLimitConfig, RegistryEntry, RegistryStats, RequestContext, RequestIdOptions, RequestScope, RequestWithExtras, ResourceCacheConfig, ResourceConfig, ResourceHookContext, ResourceHooks, ResourceMetadata, ResourcePermissions, RouteHandler, RouteHandlerMethod, RouteSchemaOptions, ServiceContext, TokenPair, TypedController, TypedRepository, TypedResourceConfig, UserBase, UserLike, UserOrganization, ValidateOptions, ValidationResult, envelope, getOrgId, getOrgRoles, getTeamId, getUserId, hasOrgAccess, isAuthenticated, isElevated, isMember };
1
+ import { _ as isAuthenticated, c as getOrgRoles, g as hasOrgAccess, n as PUBLIC_SCOPE, p as getTeamId, r as RequestScope, s as getOrgId, t as AUTHENTICATED_SCOPE, v as isElevated, y as isMember } from "../types-CN6JvmYz.mjs";
2
+ import { $ as PresetFunction, $t as QueryOptions, A as EventsDecorator, B as InferResourceDoc, Bt as FastifyHandler, C as ConfigError, Ct as TypedResourceConfig, D as CrudRouterOptions, Dt as ValidationResult, E as CrudRouteKey, Et as ValidateOptions, F as GracefulShutdownOptions, G as LookupOption, H as IntrospectionPluginOptions, Ht as IControllerResponse, I as HealthCheck, J as ObjectId, K as MiddlewareConfig, L as HealthOptions, M as FastifyWithAuth, N as FastifyWithDecorators, O as CrudSchemas, Ot as envelope, P as FieldRule, Q as PopulateOption, Qt as PaginationParams, R as InferAdapterDoc, Rt as ControllerHandler, S as AuthenticatorContext, St as TypedRepository, T as CrudController, Tt as UserOrganization, U as JWTPayload, Ut as IRequestContext, V as IntrospectionData, Vt as IController, W as JwtContext, Wt as RouteHandler, X as OwnershipCheck, Xt as InferDoc, Y as OpenApiSchemas, Yt as CrudRepository, Z as ParsedQuery, Zt as PaginatedResult, _ as ArcInternalMetadata, _t as RouteMcpConfig, at as RegistryStats, b as AuthPluginOptions, bt as TokenPair, ct as RequestWithExtras, d as ActionHandlerFn, dt as ResourceHookContext, et as PresetHook, f as ActionsMap, ft as ResourceHooks, g as ArcDecorator, gt as RouteHandlerMethod, h as ApiResponse, ht as RouteDefinition, it as RegistryEntry, j as FastifyRequestExtras, jt as BaseControllerOptions, k as EventDefinition, kt as getUserId, l as ActionDefinition, lt as ResourceCacheConfig, m as AnyRecord, mt as ResourcePermissions, nt as QueryParserInterface, ot as RequestContext, p as AdditionalRoute, pt as ResourceMetadata, q as MiddlewareHandler, rt as RateLimitConfig, st as RequestIdOptions, tt as PresetResult, u as ActionEntry, ut as ResourceConfig, v as ArcRequest, vt as RouteSchemaOptions, w as ControllerQueryOptions, wt as UserLike, x as Authenticator, xt as TypedController, y as AuthHelpers, yt as ServiceContext, z as InferDocType, zt as ControllerLike } from "../interface-IJqN3pXK.mjs";
3
+ import { i as UserBase, n as PermissionContext, r as PermissionResult, t as PermissionCheck } from "../types-BoaZHr-2.mjs";
4
+ import { n as ElevationOptions, t as ElevationEvent } from "../elevation-UJO3-NvX.mjs";
5
+ export { AUTHENTICATED_SCOPE, ActionDefinition, ActionEntry, ActionHandlerFn, ActionsMap, AdditionalRoute, AnyRecord, ApiResponse, ArcDecorator, ArcInternalMetadata, ArcRequest, AuthHelpers, AuthPluginOptions, Authenticator, AuthenticatorContext, BaseControllerOptions, ConfigError, ControllerHandler, ControllerLike, ControllerQueryOptions, CrudController, CrudRepository, CrudRouteKey, CrudRouterOptions, CrudSchemas, ElevationEvent, ElevationOptions, EventDefinition, EventsDecorator, FastifyHandler, FastifyRequestExtras, FastifyWithAuth, FastifyWithDecorators, FieldRule, GracefulShutdownOptions, HealthCheck, HealthOptions, IController, IControllerResponse, IRequestContext, InferAdapterDoc, InferDoc, InferDocType, InferResourceDoc, IntrospectionData, IntrospectionPluginOptions, JWTPayload, JwtContext, LookupOption, MiddlewareConfig, MiddlewareHandler, ObjectId, OpenApiSchemas, OwnershipCheck, PUBLIC_SCOPE, PaginatedResult, PaginationParams, ParsedQuery, PermissionCheck, PermissionContext, PermissionResult, PopulateOption, PresetFunction, PresetHook, PresetResult, QueryOptions, QueryParserInterface, RateLimitConfig, RegistryEntry, RegistryStats, RequestContext, RequestIdOptions, RequestScope, RequestWithExtras, ResourceCacheConfig, ResourceConfig, ResourceHookContext, ResourceHooks, ResourceMetadata, ResourcePermissions, RouteDefinition, RouteHandler, RouteHandlerMethod, RouteMcpConfig, RouteSchemaOptions, ServiceContext, TokenPair, TypedController, TypedRepository, TypedResourceConfig, UserBase, UserLike, UserOrganization, ValidateOptions, ValidationResult, envelope, getOrgId, getOrgRoles, getTeamId, getUserId, hasOrgAccess, isAuthenticated, isElevated, isMember };
@@ -1,4 +1,4 @@
1
- import { r as RequestScope } from "./types--D3vvfdt.mjs";
1
+ import { r as RequestScope } from "./types-CN6JvmYz.mjs";
2
2
  import { FastifyRequest } from "fastify";
3
3
 
4
4
  //#region src/permissions/types.d.ts
@@ -1,4 +1,4 @@
1
- import { Vt as ResourceDefinition } from "./interface-B91alUzq.mjs";
1
+ import { qt as ResourceDefinition } from "./interface-IJqN3pXK.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/integrations/mcp/types.d.ts
@@ -1,12 +1,12 @@
1
- import { _ as Authenticator } from "./interface-B91alUzq.mjs";
2
- import { n as ElevationOptions } from "./elevation-D7WK0RXq.mjs";
3
- import { t as ExternalOpenApiPaths } from "./externalPaths-iba7jD3d.mjs";
4
- import { i as CacheStore } from "./interface-CG7oRZjX.mjs";
5
- import { r as QueryCachePluginOptions } from "./queryCachePlugin-Ckl71mkc.mjs";
6
- import { i as EventTransport } from "./EventTransport-C4VheKeC.mjs";
7
- import { t as EventPluginOptions } from "./eventPlugin-CdvUoUna.mjs";
8
- import { c as MetricsOptions, d as SSEOptions, m as CachingOptions, r as VersioningOptions, t as ErrorHandlerOptions } from "./errorHandler-pCpEtNd7.mjs";
9
- import { r as IdempotencyStore } from "./interface-CSbZdv_3.mjs";
1
+ import { x as Authenticator } from "./interface-IJqN3pXK.mjs";
2
+ import { n as ElevationOptions } from "./elevation-UJO3-NvX.mjs";
3
+ import { t as ExternalOpenApiPaths } from "./externalPaths-BQ8QijNH.mjs";
4
+ import { i as CacheStore } from "./interface-bpoLKKqx.mjs";
5
+ import { r as QueryCachePluginOptions } from "./queryCachePlugin-BCFVXnxK.mjs";
6
+ import { i as EventTransport } from "./EventTransport-n1KBxC_N.mjs";
7
+ import { t as EventPluginOptions } from "./eventPlugin-CAOWMQS8.mjs";
8
+ import { c as MetricsOptions, d as SSEOptions, m as CachingOptions, r as VersioningOptions, t as ErrorHandlerOptions } from "./errorHandler-BeN-ERN7.mjs";
9
+ import { r as IdempotencyStore } from "./interface-CkkWm5uR.mjs";
10
10
  import { FastifyInstance, FastifyPluginAsync, FastifyReply, FastifyRequest, FastifyServerOptions } from "fastify";
11
11
 
12
12
  //#region src/factory/loadResources.d.ts
@@ -1,6 +1,6 @@
1
- import { G as OpenApiSchemas, Q as QueryParserInterface, q as ParsedQuery, u as AnyRecord } from "../interface-B91alUzq.mjs";
2
- import { a as NotFoundError, c as RateLimitError, d as ValidationError, i as ForbiddenError, l as ServiceUnavailableError, m as isArcError, n as ConflictError, o as OrgAccessDeniedError, p as createError, r as ErrorDetails, s as OrgRequiredError, t as ArcError, u as UnauthorizedError } from "../errors-BS6lZvWy.mjs";
3
- import { a as CircuitBreakerStats, c as createCircuitBreakerRegistry, i as CircuitBreakerRegistry, n as CircuitBreakerError, o as CircuitState, r as CircuitBreakerOptions, s as createCircuitBreaker, t as CircuitBreaker } from "../circuitBreaker-BBPDt-J_.mjs";
1
+ import { Y as OpenApiSchemas, Z as ParsedQuery, m as AnyRecord, nt as QueryParserInterface } from "../interface-IJqN3pXK.mjs";
2
+ import { a as NotFoundError, c as RateLimitError, d as ValidationError, i as ForbiddenError, l as ServiceUnavailableError, m as isArcError, n as ConflictError, o as OrgAccessDeniedError, p as createError, r as ErrorDetails, s as OrgRequiredError, t as ArcError, u as UnauthorizedError } from "../errors-BI8kEKsO.mjs";
3
+ import { a as CircuitBreakerStats, c as createCircuitBreakerRegistry, i as CircuitBreakerRegistry, n as CircuitBreakerError, o as CircuitState, r as CircuitBreakerOptions, s as createCircuitBreaker, t as CircuitBreaker } from "../circuitBreaker-BGVoB1hD.mjs";
4
4
  import { FastifyInstance } from "fastify";
5
5
 
6
6
  //#region src/utils/compensation.d.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@classytic/arc",
3
- "version": "2.7.7",
3
+ "version": "2.8.0",
4
4
  "description": "Resource-oriented backend framework for Fastify — clean, minimal, powerful, tree-shakable",
5
5
  "type": "module",
6
6
  "exports": {
@@ -245,12 +245,12 @@
245
245
  "@opentelemetry/instrumentation-mongodb": ">=0.40.0",
246
246
  "@opentelemetry/sdk-node": ">=0.50.0",
247
247
  "@sinclair/typebox": ">=0.34.0",
248
- "better-auth": ">=1.6.0",
248
+ "better-auth": ">=1.6.2",
249
249
  "bullmq": ">=5.0.0",
250
250
  "fastify": ">=5.0.0",
251
251
  "fastify-raw-body": ">=5.0.0",
252
252
  "ioredis": ">=5.0.0",
253
- "mongodb": ">=6.0.0",
253
+ "mongodb": ">=7.0.0",
254
254
  "mongoose": ">=9.4.1",
255
255
  "pino-pretty": ">=13.0.0",
256
256
  "zod": ">=4.0.0"
@@ -8,11 +8,11 @@ description: |
8
8
  Triggers: arc, fastify resource, defineResource, createApp, BaseController, arc preset,
9
9
  arc auth, arc events, arc jobs, arc websocket, arc mcp, arc plugin, arc testing, arc cli,
10
10
  arc permissions, arc hooks, arc pipeline, arc factory, arc cache, arc QueryCache.
11
- version: 2.7.3
11
+ version: 2.8.0
12
12
  license: MIT
13
13
  metadata:
14
14
  author: Classytic
15
- version: "2.7.1"
15
+ version: "2.8.0"
16
16
  tags:
17
17
  - fastify
18
18
  - rest-api
@@ -91,6 +91,23 @@ const productResource = defineResource({
91
91
  additionalRoutes: [
92
92
  { method: 'GET', path: '/featured', handler: 'getFeatured', permissions: allowPublic(), wrapHandler: true },
93
93
  ],
94
+
95
+ // v2.8: routes (replaces additionalRoutes — additionalRoutes still works but is deprecated)
96
+ routes: [
97
+ { method: 'GET', path: '/stats', handler: 'getStats', permissions: auth() },
98
+ { method: 'POST', path: '/webhook', handler: webhookFn, raw: true, permissions: auth() },
99
+ ],
100
+
101
+ // v2.8: actions (replaces onRegister + createActionRouter)
102
+ actions: {
103
+ approve: async (id, data, req) => service.approve(id, req.user._id),
104
+ cancel: {
105
+ handler: async (id, data, req) => service.cancel(id, data.reason, req.user._id),
106
+ permissions: roles('admin'),
107
+ schema: { reason: { type: 'string' } },
108
+ },
109
+ },
110
+ actionPermissions: auth(),
94
111
  });
95
112
 
96
113
  await fastify.register(productResource.toPlugin());
@@ -867,7 +884,8 @@ permissions: {
867
884
  **DX helpers:**
868
885
 
869
886
  ```typescript
870
- // Typed request for wrapHandler: false routes — no more (req as any).user
887
+ // Typed request for raw routes — no more (req as any).user
888
+ // v2.8: `raw: true` replaces `wrapHandler: false` (wrapHandler still works but is deprecated)
871
889
  import type { ArcRequest } from '@classytic/arc';
872
890
  handler: async (req: ArcRequest, reply) => { req.user?.id; req.scope; req.signal; }
873
891
 
@@ -884,6 +902,7 @@ import { createDomainError } from '@classytic/arc';
884
902
  throw createDomainError('SELF_REFERRAL', 'Cannot refer yourself', 422);
885
903
 
886
904
  // Resource lifecycle hook — wire singletons during registration
905
+ // v2.8: for action routes, use `actions` config instead of onRegister + createActionRouter
887
906
  defineResource({ name: 'notification', onRegister: (f) => setSseManager(f.sseManager) });
888
907
 
889
908
  // SSE auth — preAuth runs BEFORE auth middleware (EventSource can't set headers)
@@ -893,7 +912,7 @@ additionalRoutes: [{ preAuth: [(req) => { req.headers.authorization = `Bearer ${
893
912
  additionalRoutes: [{ streamResponse: true, handler: async (req, reply) => reply.send(stream) }]
894
913
  ```
895
914
 
896
- ## DX Helpers (v2.7.3)
915
+ ## DX Helpers (v2.7.3+)
897
916
 
898
917
  **Reply helpers** — consistent response envelopes (opt-in via `createApp({ replyHelpers: true })`):
899
918
 
@@ -3,7 +3,7 @@
3
3
  Pluggable adapters for BullMQ jobs, WebSocket real-time, Streamline workflows, and MCP tools.
4
4
  All are separate subpath imports — only loaded when explicitly used.
5
5
 
6
- > **MCP** has its own dedicated reference: [mcp.md](mcp.md) — auto-generate tools from resources, custom tools, Better Auth OAuth 2.1.
6
+ > **MCP** has its own dedicated reference: [mcp.md](mcp.md) — auto-generate tools from resources (including actions, v2.8), custom tools, Better Auth OAuth 2.1.
7
7
 
8
8
  ## Job Queue (BullMQ)
9
9
 
@@ -46,6 +46,8 @@ await app.register(mcpPlugin, {
46
46
 
47
47
  Per resource, generates up to 5 tools: `list_{plural}`, `get_{name}`, `create_{name}`, `update_{name}`, `delete_{name}`.
48
48
 
49
+ Resource `actions` (v2.8) also auto-generate MCP tools — each action becomes a tool named `{action}_{name}` with the action's input schema.
50
+
49
51
  Tool handlers call `BaseController` — same pipeline as REST (auth, org-scoping, hooks, field permissions, cache).
50
52
 
51
53
  ### McpPluginOptions