@classytic/arc 1.1.0 → 2.1.3

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 (200) hide show
  1. package/README.md +247 -794
  2. package/bin/arc.js +91 -52
  3. package/dist/EventTransport-BkUDYZEb.d.mts +99 -0
  4. package/dist/HookSystem-BsGV-j2l.mjs +404 -0
  5. package/dist/ResourceRegistry-7Ic20ZMw.mjs +249 -0
  6. package/dist/adapters/index.d.mts +5 -0
  7. package/dist/adapters/index.mjs +3 -0
  8. package/dist/audit/index.d.mts +81 -0
  9. package/dist/audit/index.mjs +275 -0
  10. package/dist/audit/mongodb.d.mts +5 -0
  11. package/dist/audit/mongodb.mjs +3 -0
  12. package/dist/audited-CGdLiSlE.mjs +140 -0
  13. package/dist/auth/index.d.mts +188 -0
  14. package/dist/auth/index.mjs +1096 -0
  15. package/dist/auth/redis-session.d.mts +43 -0
  16. package/dist/auth/redis-session.mjs +75 -0
  17. package/dist/betterAuthOpenApi-DjWDddNc.mjs +249 -0
  18. package/dist/cache/index.d.mts +145 -0
  19. package/dist/cache/index.mjs +91 -0
  20. package/dist/caching-GSDJcA6-.mjs +93 -0
  21. package/dist/chunk-C7Uep-_p.mjs +20 -0
  22. package/dist/circuitBreaker-DYhWBW_D.mjs +1096 -0
  23. package/dist/cli/commands/describe.d.mts +18 -0
  24. package/dist/cli/commands/describe.mjs +238 -0
  25. package/dist/cli/commands/docs.d.mts +13 -0
  26. package/dist/cli/commands/docs.mjs +52 -0
  27. package/dist/cli/commands/{generate.d.ts → generate.d.mts} +3 -2
  28. package/dist/cli/commands/generate.mjs +357 -0
  29. package/dist/cli/commands/{init.d.ts → init.d.mts} +11 -8
  30. package/dist/cli/commands/{init.js → init.mjs} +807 -617
  31. package/dist/cli/commands/introspect.d.mts +10 -0
  32. package/dist/cli/commands/introspect.mjs +75 -0
  33. package/dist/cli/index.d.mts +16 -0
  34. package/dist/cli/index.mjs +156 -0
  35. package/dist/constants-DdXFXQtN.mjs +84 -0
  36. package/dist/core/index.d.mts +5 -0
  37. package/dist/core/index.mjs +4 -0
  38. package/dist/createApp-D2D5XXaV.mjs +559 -0
  39. package/dist/defineResource-PXzSJ15_.mjs +2197 -0
  40. package/dist/discovery/index.d.mts +46 -0
  41. package/dist/discovery/index.mjs +109 -0
  42. package/dist/docs/index.d.mts +162 -0
  43. package/dist/docs/index.mjs +74 -0
  44. package/dist/elevation-DGo5shaX.d.mts +87 -0
  45. package/dist/elevation-DSTbVvYj.mjs +113 -0
  46. package/dist/errorHandler-C3GY3_ow.mjs +108 -0
  47. package/dist/errorHandler-CW3OOeYq.d.mts +72 -0
  48. package/dist/errors-DAWRdiYP.d.mts +124 -0
  49. package/dist/errors-DBANPbGr.mjs +211 -0
  50. package/dist/eventPlugin-BEOvaDqo.mjs +229 -0
  51. package/dist/eventPlugin-H6wDDjGO.d.mts +124 -0
  52. package/dist/events/index.d.mts +53 -0
  53. package/dist/events/index.mjs +51 -0
  54. package/dist/events/transports/redis-stream-entry.d.mts +2 -0
  55. package/dist/events/transports/redis-stream-entry.mjs +177 -0
  56. package/dist/events/transports/redis.d.mts +76 -0
  57. package/dist/events/transports/redis.mjs +124 -0
  58. package/dist/externalPaths-SyPF2tgK.d.mts +50 -0
  59. package/dist/factory/index.d.mts +63 -0
  60. package/dist/factory/index.mjs +3 -0
  61. package/dist/fastifyAdapter-C8DlE0YH.d.mts +216 -0
  62. package/dist/fields-Bi_AVKSo.d.mts +109 -0
  63. package/dist/fields-CTd_CrKr.mjs +114 -0
  64. package/dist/hooks/index.d.mts +4 -0
  65. package/dist/hooks/index.mjs +3 -0
  66. package/dist/idempotency/index.d.mts +96 -0
  67. package/dist/idempotency/index.mjs +319 -0
  68. package/dist/idempotency/mongodb.d.mts +2 -0
  69. package/dist/idempotency/mongodb.mjs +114 -0
  70. package/dist/idempotency/redis.d.mts +2 -0
  71. package/dist/idempotency/redis.mjs +103 -0
  72. package/dist/index.d.mts +260 -0
  73. package/dist/index.mjs +104 -0
  74. package/dist/integrations/event-gateway.d.mts +46 -0
  75. package/dist/integrations/event-gateway.mjs +43 -0
  76. package/dist/integrations/index.d.mts +5 -0
  77. package/dist/integrations/index.mjs +1 -0
  78. package/dist/integrations/jobs.d.mts +103 -0
  79. package/dist/integrations/jobs.mjs +123 -0
  80. package/dist/integrations/streamline.d.mts +60 -0
  81. package/dist/integrations/streamline.mjs +125 -0
  82. package/dist/integrations/websocket.d.mts +82 -0
  83. package/dist/integrations/websocket.mjs +288 -0
  84. package/dist/interface-CSNjltAc.d.mts +77 -0
  85. package/dist/interface-DTbsvIWe.d.mts +54 -0
  86. package/dist/interface-e9XfSsUV.d.mts +1097 -0
  87. package/dist/introspectionPlugin-B3JkrjwU.mjs +53 -0
  88. package/dist/keys-DhqDRxv3.mjs +42 -0
  89. package/dist/logger-ByrvQWZO.mjs +78 -0
  90. package/dist/memory-B2v7KrCB.mjs +143 -0
  91. package/dist/migrations/index.d.mts +156 -0
  92. package/dist/migrations/index.mjs +260 -0
  93. package/dist/mongodb-ClykrfGo.d.mts +118 -0
  94. package/dist/mongodb-DNKEExbf.mjs +93 -0
  95. package/dist/mongodb-Dg8O_gvd.d.mts +71 -0
  96. package/dist/openapi-9nB_kiuR.mjs +525 -0
  97. package/dist/org/index.d.mts +68 -0
  98. package/dist/org/index.mjs +513 -0
  99. package/dist/org/types.d.mts +82 -0
  100. package/dist/org/types.mjs +1 -0
  101. package/dist/permissions/index.d.mts +278 -0
  102. package/dist/permissions/index.mjs +579 -0
  103. package/dist/plugins/index.d.mts +172 -0
  104. package/dist/plugins/index.mjs +522 -0
  105. package/dist/plugins/response-cache.d.mts +87 -0
  106. package/dist/plugins/response-cache.mjs +283 -0
  107. package/dist/plugins/tracing-entry.d.mts +2 -0
  108. package/dist/plugins/tracing-entry.mjs +185 -0
  109. package/dist/pluralize-CM-jZg7p.mjs +86 -0
  110. package/dist/policies/{index.d.ts → index.d.mts} +204 -170
  111. package/dist/policies/index.mjs +321 -0
  112. package/dist/presets/{index.d.ts → index.d.mts} +62 -131
  113. package/dist/presets/index.mjs +143 -0
  114. package/dist/presets/multiTenant.d.mts +24 -0
  115. package/dist/presets/multiTenant.mjs +113 -0
  116. package/dist/presets-BTeYbw7h.d.mts +57 -0
  117. package/dist/presets-CeFtfDR8.mjs +119 -0
  118. package/dist/prisma-C3iornoK.d.mts +274 -0
  119. package/dist/prisma-DJbMt3yf.mjs +627 -0
  120. package/dist/queryCachePlugin-B6R0d4av.mjs +138 -0
  121. package/dist/queryCachePlugin-Q6SYuHZ6.d.mts +71 -0
  122. package/dist/redis-UwjEp8Ea.d.mts +49 -0
  123. package/dist/redis-stream-CBg0upHI.d.mts +103 -0
  124. package/dist/registry/index.d.mts +11 -0
  125. package/dist/registry/index.mjs +4 -0
  126. package/dist/requestContext-xi6OKBL-.mjs +55 -0
  127. package/dist/schemaConverter-Dtg0Kt9T.mjs +98 -0
  128. package/dist/schemas/index.d.mts +63 -0
  129. package/dist/schemas/index.mjs +82 -0
  130. package/dist/scope/index.d.mts +21 -0
  131. package/dist/scope/index.mjs +65 -0
  132. package/dist/sessionManager-D_iEHjQl.d.mts +186 -0
  133. package/dist/sse-DkqQ1uxb.mjs +123 -0
  134. package/dist/testing/index.d.mts +907 -0
  135. package/dist/testing/index.mjs +1976 -0
  136. package/dist/tracing-8CEbhF0w.d.mts +70 -0
  137. package/dist/typeGuards-DwxA1t_L.mjs +9 -0
  138. package/dist/types/index.d.mts +946 -0
  139. package/dist/types/index.mjs +14 -0
  140. package/dist/types-B0dhNrnd.d.mts +445 -0
  141. package/dist/types-Beqn1Un7.mjs +38 -0
  142. package/dist/types-DelU6kln.mjs +25 -0
  143. package/dist/types-RLkFVgaw.d.mts +101 -0
  144. package/dist/utils/index.d.mts +747 -0
  145. package/dist/utils/index.mjs +6 -0
  146. package/package.json +194 -68
  147. package/dist/BaseController-DVAiHxEQ.d.ts +0 -233
  148. package/dist/adapters/index.d.ts +0 -237
  149. package/dist/adapters/index.js +0 -668
  150. package/dist/arcCorePlugin-CsShQdyP.d.ts +0 -273
  151. package/dist/audit/index.d.ts +0 -195
  152. package/dist/audit/index.js +0 -319
  153. package/dist/auth/index.d.ts +0 -47
  154. package/dist/auth/index.js +0 -174
  155. package/dist/cli/commands/docs.d.ts +0 -11
  156. package/dist/cli/commands/docs.js +0 -474
  157. package/dist/cli/commands/generate.js +0 -334
  158. package/dist/cli/commands/introspect.d.ts +0 -8
  159. package/dist/cli/commands/introspect.js +0 -338
  160. package/dist/cli/index.d.ts +0 -4
  161. package/dist/cli/index.js +0 -3269
  162. package/dist/core/index.d.ts +0 -220
  163. package/dist/core/index.js +0 -2786
  164. package/dist/createApp-Ce9wl8W9.d.ts +0 -77
  165. package/dist/docs/index.d.ts +0 -166
  166. package/dist/docs/index.js +0 -658
  167. package/dist/errors-8WIxGS_6.d.ts +0 -122
  168. package/dist/events/index.d.ts +0 -117
  169. package/dist/events/index.js +0 -89
  170. package/dist/factory/index.d.ts +0 -38
  171. package/dist/factory/index.js +0 -1652
  172. package/dist/hooks/index.d.ts +0 -4
  173. package/dist/hooks/index.js +0 -199
  174. package/dist/idempotency/index.d.ts +0 -323
  175. package/dist/idempotency/index.js +0 -500
  176. package/dist/index-B4t03KQ0.d.ts +0 -1366
  177. package/dist/index.d.ts +0 -135
  178. package/dist/index.js +0 -4756
  179. package/dist/migrations/index.d.ts +0 -185
  180. package/dist/migrations/index.js +0 -274
  181. package/dist/org/index.d.ts +0 -129
  182. package/dist/org/index.js +0 -220
  183. package/dist/permissions/index.d.ts +0 -144
  184. package/dist/permissions/index.js +0 -103
  185. package/dist/plugins/index.d.ts +0 -46
  186. package/dist/plugins/index.js +0 -1069
  187. package/dist/policies/index.js +0 -196
  188. package/dist/presets/index.js +0 -384
  189. package/dist/presets/multiTenant.d.ts +0 -39
  190. package/dist/presets/multiTenant.js +0 -112
  191. package/dist/registry/index.d.ts +0 -16
  192. package/dist/registry/index.js +0 -253
  193. package/dist/testing/index.d.ts +0 -618
  194. package/dist/testing/index.js +0 -48020
  195. package/dist/types/index.d.ts +0 -4
  196. package/dist/types/index.js +0 -8
  197. package/dist/types-B99TBmFV.d.ts +0 -76
  198. package/dist/types-BvckRbs2.d.ts +0 -143
  199. package/dist/utils/index.d.ts +0 -679
  200. package/dist/utils/index.js +0 -931
@@ -1,4 +0,0 @@
1
- export { K as AdditionalRoute, A as AnyRecord, s as ApiResponse, al as ArcDecorator, g as AuthHelpers, h as AuthPluginOptions, as as Authenticator, ar as AuthenticatorContext, av as BaseControllerOptions, a4 as ConfigError, ay as ControllerHandler, t as ControllerLike, C as ControllerQueryOptions, B as CrudController, y as CrudRepository, e as CrudRouteKey, _ as CrudRouterOptions, G as CrudSchemas, N as EventDefinition, am as EventsDecorator, az as FastifyHandler, u as FastifyRequestExtras, v as FastifyWithAuth, w as FastifyWithDecorators, E as FieldRule, a9 as GracefulShutdownOptions, a7 as HealthCheck, a8 as HealthOptions, I as IController, c as IControllerResponse, a as IRequestContext, ax as InferDoc, $ as InferDocType, a0 as InferResourceDoc, Y as IntrospectionData, i as IntrospectionPluginOptions, J as JWTPayload, aq as JwtContext, M as MiddlewareConfig, ap as MiddlewareHandler, ah as ObjectId, af as OpenApiSchemas, Z as OrgScopeOptions, O as OwnershipCheck, P as PaginatedResult, aw as PaginationParams, ae as ParsedQuery, ak as PopulateOption, L as PresetFunction, au as PresetHook, f as PresetResult, x as QueryOptions, Q as QueryParserInterface, W as RegistryEntry, X as RegistryStats, b as RequestContext, aa as RequestIdOptions, d as RequestWithExtras, l as ResourceConfig, ao as ResourceHooks, T as ResourceMetadata, an as ResourcePermissions, z as RouteHandler, R as RouteSchemaOptions, S as ServiceContext, at as TokenPair, a2 as TypedController, a3 as TypedRepository, a1 as TypedResourceConfig, ai as UserLike, U as UserOrganization, a6 as ValidateOptions, a5 as ValidationResult, aj as getUserId } from '../index-B4t03KQ0.js';
2
- export { RouteHandlerMethod } from 'fastify';
3
- export { Document, Model } from 'mongoose';
4
- export { P as PermissionCheck, a as PermissionContext, b as PermissionResult, U as UserBase } from '../types-B99TBmFV.js';
@@ -1,8 +0,0 @@
1
- // src/types/index.ts
2
- function getUserId(user) {
3
- if (!user) return void 0;
4
- const id = user.id ?? user._id;
5
- return id ? String(id) : void 0;
6
- }
7
-
8
- export { getUserId };
@@ -1,76 +0,0 @@
1
- import { FastifyRequest } from 'fastify';
2
-
3
- /**
4
- * Permission Types - Core Type Definitions
5
- *
6
- * PermissionCheck is THE ONLY way to define permissions in Arc.
7
- * No string arrays, no alternative patterns.
8
- */
9
-
10
- /**
11
- * User base interface - minimal shape Arc expects
12
- * Your actual User can have any additional fields
13
- */
14
- interface UserBase {
15
- id?: string;
16
- _id?: string;
17
- roles?: string[];
18
- [key: string]: unknown;
19
- }
20
- /**
21
- * Context passed to permission check functions
22
- */
23
- interface PermissionContext {
24
- /** Authenticated user or null if unauthenticated */
25
- user: UserBase | null;
26
- /** Fastify request object */
27
- request: FastifyRequest;
28
- /** Resource name being accessed */
29
- resource: string;
30
- /** Action being performed (list, get, create, update, delete) */
31
- action: string;
32
- /** Resource ID for single-resource operations */
33
- resourceId?: string;
34
- /** Organization context for multi-tenant apps */
35
- organizationId?: string;
36
- /** Request body data */
37
- data?: Record<string, unknown>;
38
- }
39
- /**
40
- * Result from permission check
41
- */
42
- interface PermissionResult {
43
- /** Whether access is granted */
44
- granted: boolean;
45
- /** Reason for denial (for error messages) */
46
- reason?: string;
47
- /** Query filters to apply (for ownership patterns) */
48
- filters?: Record<string, unknown>;
49
- }
50
- /**
51
- * Permission Check Function
52
- *
53
- * THE ONLY way to define permissions in Arc.
54
- * Returns boolean, PermissionResult, or Promise of either.
55
- *
56
- * @example
57
- * ```typescript
58
- * // Simple boolean return
59
- * const isAdmin: PermissionCheck = (ctx) => ctx.user?.roles?.includes('admin') ?? false;
60
- *
61
- * // With filters for ownership
62
- * const ownedByUser: PermissionCheck = (ctx) => ({
63
- * granted: true,
64
- * filters: { userId: ctx.user?.id }
65
- * });
66
- *
67
- * // Async check
68
- * const canAccessOrg: PermissionCheck = async (ctx) => {
69
- * const isMember = await checkMembership(ctx.user?.id, ctx.organizationId);
70
- * return { granted: isMember, reason: isMember ? undefined : 'Not a member' };
71
- * };
72
- * ```
73
- */
74
- type PermissionCheck = (context: PermissionContext) => boolean | PermissionResult | Promise<boolean | PermissionResult>;
75
-
76
- export type { PermissionCheck as P, UserBase as U, PermissionContext as a, PermissionResult as b };
@@ -1,143 +0,0 @@
1
- import { FastifyServerOptions } from 'fastify';
2
- import { FastifyCorsOptions } from '@fastify/cors';
3
- import { FastifyHelmetOptions } from '@fastify/helmet';
4
- import { RateLimitOptions } from '@fastify/rate-limit';
5
- import { h as AuthPluginOptions } from './index-B4t03KQ0.js';
6
-
7
- /**
8
- * Types for createApp factory
9
- */
10
-
11
- /**
12
- * CreateApp Options
13
- *
14
- * Configuration for creating an Arc application.
15
- *
16
- * @example
17
- * ```typescript
18
- * // Minimal setup
19
- * const app = await createApp({
20
- * preset: 'development',
21
- * auth: {
22
- * jwt: { secret: process.env.JWT_SECRET },
23
- * },
24
- * });
25
- *
26
- * // With custom authenticator
27
- * const app = await createApp({
28
- * preset: 'production',
29
- * auth: {
30
- * jwt: { secret: process.env.JWT_SECRET },
31
- * authenticate: async (request, { jwt }) => {
32
- * // Check API key first
33
- * const apiKey = request.headers['x-api-key'];
34
- * if (apiKey) {
35
- * const result = await apiKeyService.verify(apiKey);
36
- * if (result) return { _id: result.userId, isApiKey: true };
37
- * }
38
- * // Then check JWT
39
- * const token = request.headers.authorization?.split(' ')[1];
40
- * if (token) {
41
- * const decoded = jwt.verify(token);
42
- * return userRepo.findById(decoded.id);
43
- * }
44
- * return null;
45
- * },
46
- * },
47
- * });
48
- * ```
49
- */
50
- interface CreateAppOptions {
51
- /** Environment preset: 'production', 'development', or 'testing' */
52
- preset?: 'production' | 'development' | 'testing';
53
- /** Fastify logger configuration */
54
- logger?: FastifyServerOptions['logger'];
55
- /** Trust proxy headers (X-Forwarded-For, etc.) */
56
- trustProxy?: boolean;
57
- /**
58
- * Auth configuration
59
- *
60
- * Set to false to disable authentication entirely.
61
- * Provide AuthPluginOptions for full control.
62
- *
63
- * @example
64
- * ```typescript
65
- * // Disable auth
66
- * auth: false,
67
- *
68
- * // Simple JWT (uses default jwtVerify)
69
- * auth: {
70
- * jwt: { secret: process.env.JWT_SECRET },
71
- * },
72
- *
73
- * // Custom authenticator
74
- * auth: {
75
- * jwt: { secret: process.env.JWT_SECRET },
76
- * authenticate: async (request, { jwt }) => {
77
- * const token = request.headers.authorization?.split(' ')[1];
78
- * if (!token) return null;
79
- * const decoded = jwt.verify(token);
80
- * return userRepo.findById(decoded.id);
81
- * },
82
- * },
83
- *
84
- * // Completely custom auth plugin
85
- * auth: {
86
- * plugin: async (fastify) => {
87
- * // Your custom auth setup
88
- * },
89
- * },
90
- * ```
91
- */
92
- auth?: false | AuthPluginOptions | {
93
- /** Replace Arc auth with your own plugin */
94
- plugin?: (fastify: any) => Promise<void>;
95
- };
96
- /** Helmet security headers. Set to false to disable. */
97
- helmet?: FastifyHelmetOptions | false;
98
- /** CORS configuration. Set to false to disable. */
99
- cors?: FastifyCorsOptions | false;
100
- /** Rate limiting. Set to false to disable. */
101
- rateLimit?: RateLimitOptions | false;
102
- /** Under pressure health monitoring. Set to false to disable. */
103
- underPressure?: UnderPressureOptions | false;
104
- /** @fastify/sensible (HTTP helpers). Set to false to disable. */
105
- sensible?: boolean | false;
106
- /** @fastify/multipart (file uploads). Set to false to disable. */
107
- multipart?: MultipartOptions | false;
108
- /** Raw body parsing (for webhooks). Set to false to disable. */
109
- rawBody?: RawBodyOptions | false;
110
- /** Enable Arc plugins (requestId, health, gracefulShutdown) */
111
- arcPlugins?: {
112
- /** Request ID tracking (default: true) */
113
- requestId?: boolean;
114
- /** Health endpoints (default: true) */
115
- health?: boolean;
116
- /** Graceful shutdown handling (default: true) */
117
- gracefulShutdown?: boolean;
118
- /** Emit events for CRUD operations (default: true) */
119
- emitEvents?: boolean;
120
- };
121
- /** Custom plugin registration function */
122
- plugins?: (fastify: any) => Promise<void>;
123
- }
124
- interface UnderPressureOptions {
125
- exposeStatusRoute?: boolean;
126
- maxEventLoopDelay?: number;
127
- maxHeapUsedBytes?: number;
128
- maxRssBytes?: number;
129
- }
130
- interface MultipartOptions {
131
- limits?: {
132
- fileSize?: number;
133
- files?: number;
134
- };
135
- }
136
- interface RawBodyOptions {
137
- field?: string;
138
- global?: boolean;
139
- encoding?: string;
140
- runFirst?: boolean;
141
- }
142
-
143
- export type { CreateAppOptions as C, MultipartOptions as M, RawBodyOptions as R, UnderPressureOptions as U };