@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,220 +0,0 @@
1
- export { B as BaseController, a as BaseControllerOptions } from '../BaseController-DVAiHxEQ.js';
2
- import { RouteHandlerMethod, FastifyInstance, FastifyRequest, FastifyReply } from 'fastify';
3
- import { w as FastifyWithDecorators, B as CrudController, _ as CrudRouterOptions, d as RequestWithExtras, a as IRequestContext, c as IControllerResponse, I as IController } from '../index-B4t03KQ0.js';
4
- export { q as ResourceDefinition, p as defineResource } from '../index-B4t03KQ0.js';
5
- import { P as PermissionCheck } from '../types-B99TBmFV.js';
6
- import 'mongoose';
7
-
8
- /**
9
- * CRUD Router Factory
10
- *
11
- * Creates standard REST routes with permission-based access control.
12
- * Full TypeScript support with proper Fastify types.
13
- *
14
- * Features:
15
- * - Permission-based access control via PermissionCheck functions
16
- * - Organization scoping for multi-tenant routes
17
- * - Consistent route patterns
18
- * - Framework-agnostic controllers via adapter pattern
19
- */
20
-
21
- /**
22
- * Create CRUD routes for a controller
23
- *
24
- * @param fastify - Fastify instance with Arc decorators
25
- * @param controller - CRUD controller with handler methods
26
- * @param options - Router configuration
27
- */
28
- declare function createCrudRouter<TDoc = unknown>(fastify: FastifyWithDecorators, controller: CrudController<TDoc> | undefined, options?: CrudRouterOptions): void;
29
- /**
30
- * Helper to create org scoped middleware
31
- */
32
- declare function createOrgScopedMiddleware(instance: FastifyWithDecorators): RouteHandlerMethod[];
33
- /**
34
- * Create permission middleware from PermissionCheck
35
- * Useful for custom route registration
36
- */
37
- declare function createPermissionMiddleware(permission: PermissionCheck, resourceName: string, action: string): RouteHandlerMethod | null;
38
-
39
- /**
40
- * Action Router Factory (Stripe Pattern)
41
- *
42
- * Consolidates multiple state-transition endpoints into a single unified action endpoint.
43
- * Instead of separate endpoints for each action (approve, dispatch, receive, cancel),
44
- * this creates one endpoint: POST /:id/action
45
- *
46
- * Benefits:
47
- * - 40% fewer endpoints
48
- * - Consistent permission checking
49
- * - Self-documenting via action enum
50
- * - Type-safe action validation
51
- * - Single audit point for all state transitions
52
- *
53
- * @example
54
- * import { createActionRouter } from '@classytic/arc';
55
- * import { requireRoles } from '@classytic/arc/permissions';
56
- *
57
- * createActionRouter(fastify, {
58
- * tag: 'Inventory - Transfers',
59
- * actions: {
60
- * approve: async (id, data, req) => transferService.approve(id, req.user),
61
- * dispatch: async (id, data, req) => transferService.dispatch(id, data.transport, req.user),
62
- * receive: async (id, data, req) => transferService.receive(id, data, req.user),
63
- * cancel: async (id, data, req) => transferService.cancel(id, data.reason, req.user),
64
- * },
65
- * actionPermissions: {
66
- * approve: requireRoles(['admin', 'warehouse-manager']),
67
- * dispatch: requireRoles(['admin', 'warehouse-staff']),
68
- * receive: requireRoles(['admin', 'store-manager']),
69
- * cancel: requireRoles(['admin']),
70
- * },
71
- * actionSchemas: {
72
- * dispatch: {
73
- * transport: { type: 'object', properties: { driver: { type: 'string' } } }
74
- * },
75
- * cancel: {
76
- * reason: { type: 'string', minLength: 10 }
77
- * },
78
- * }
79
- * });
80
- */
81
-
82
- /**
83
- * Action handler function
84
- * @param id - Resource ID
85
- * @param data - Action-specific data from request body
86
- * @param req - Full Fastify request object
87
- * @returns Action result (will be wrapped in success response)
88
- */
89
- type ActionHandler<TData = any, TResult = any> = (id: string, data: TData, req: RequestWithExtras) => Promise<TResult>;
90
- /**
91
- * Action router configuration
92
- */
93
- interface ActionRouterConfig {
94
- /**
95
- * OpenAPI tag for grouping routes
96
- */
97
- tag?: string;
98
- /**
99
- * Action handlers map
100
- * @example { approve: (id, data, req) => service.approve(id), ... }
101
- */
102
- actions: Record<string, ActionHandler>;
103
- /**
104
- * Per-action permission checks (PermissionCheck functions)
105
- * @example { approve: requireRoles(['admin', 'manager']), cancel: requireRoles(['admin']) }
106
- */
107
- actionPermissions?: Record<string, PermissionCheck>;
108
- /**
109
- * Per-action JSON schema for body validation
110
- * @example { dispatch: { transport: { type: 'object' } } }
111
- */
112
- actionSchemas?: Record<string, Record<string, any>>;
113
- /**
114
- * Global permission check applied to all actions (if action-specific not defined)
115
- */
116
- globalAuth?: PermissionCheck;
117
- /**
118
- * Optional idempotency service
119
- * If provided, will handle idempotency-key header
120
- */
121
- idempotencyService?: IdempotencyService;
122
- /**
123
- * Custom error handler for action execution failures
124
- * @param error - The error thrown by action handler
125
- * @param action - The action that failed
126
- * @param id - The resource ID
127
- * @returns Status code and error response
128
- */
129
- onError?: (error: Error, action: string, id: string) => {
130
- statusCode: number;
131
- error: string;
132
- code?: string;
133
- };
134
- }
135
- /**
136
- * Idempotency service interface
137
- * Apps can provide their own implementation
138
- */
139
- interface IdempotencyService {
140
- check(key: string, payload: any): Promise<{
141
- isNew: boolean;
142
- existingResult?: any;
143
- }>;
144
- complete(key: string | undefined, result: any): Promise<void>;
145
- fail(key: string | undefined, error: Error): Promise<void>;
146
- }
147
- /**
148
- * Create action-based state transition endpoint
149
- *
150
- * Registers: POST /:id/action
151
- * Body: { action: string, ...actionData }
152
- *
153
- * @param fastify - Fastify instance
154
- * @param config - Action router configuration
155
- */
156
- declare function createActionRouter(fastify: FastifyInstance, config: ActionRouterConfig): void;
157
-
158
- /**
159
- * Fastify Adapter for IController
160
- *
161
- * Converts between Fastify's request/reply and framework-agnostic IRequestContext/IControllerResponse.
162
- * This allows controllers implementing IController to work seamlessly with Fastify.
163
- */
164
-
165
- /**
166
- * Create IRequestContext from Fastify request
167
- *
168
- * Extracts framework-agnostic context from Fastify-specific request object
169
- */
170
- declare function createRequestContext(req: FastifyRequest): IRequestContext;
171
- /**
172
- * Send IControllerResponse via Fastify reply
173
- *
174
- * Converts framework-agnostic response to Fastify response
175
- * Applies field masking if specified in request
176
- */
177
- declare function sendControllerResponse<T>(reply: FastifyReply, response: IControllerResponse<T>, request?: FastifyRequest): void;
178
- /**
179
- * Create Fastify route handler from IController method
180
- *
181
- * Wraps framework-agnostic controller method in Fastify-specific handler
182
- *
183
- * @example
184
- * ```typescript
185
- * const controller = new BaseController(repository);
186
- *
187
- * // Create Fastify handler
188
- * const listHandler = createFastifyHandler(controller.list.bind(controller));
189
- *
190
- * // Register route
191
- * fastify.get('/products', listHandler);
192
- * ```
193
- */
194
- declare function createFastifyHandler<T>(controllerMethod: (req: IRequestContext) => Promise<IControllerResponse<T>>): (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
195
- /**
196
- * Create Fastify adapters for all CRUD methods of an IController
197
- *
198
- * Returns Fastify-compatible handlers for each CRUD operation
199
- *
200
- * @example
201
- * ```typescript
202
- * const controller = new BaseController(repository);
203
- * const handlers = createCrudHandlers(controller);
204
- *
205
- * fastify.get('/', handlers.list);
206
- * fastify.get('/:id', handlers.get);
207
- * fastify.post('/', handlers.create);
208
- * fastify.patch('/:id', handlers.update);
209
- * fastify.delete('/:id', handlers.delete);
210
- * ```
211
- */
212
- declare function createCrudHandlers<TDoc>(controller: IController<TDoc>): {
213
- list: (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
214
- get: (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
215
- create: (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
216
- update: (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
217
- delete: (req: FastifyRequest, reply: FastifyReply) => Promise<void>;
218
- };
219
-
220
- export { type ActionHandler, type ActionRouterConfig, type IdempotencyService, createActionRouter, createCrudHandlers, createCrudRouter, createFastifyHandler, createOrgScopedMiddleware, createPermissionMiddleware, createRequestContext, sendControllerResponse };