@morojs/moro 1.6.5 → 1.6.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 (200) hide show
  1. package/README.md +20 -4
  2. package/dist/core/auth/morojs-adapter.js +17 -14
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-sources.js +44 -0
  5. package/dist/core/config/config-sources.js.map +1 -1
  6. package/dist/core/database/adapters/drizzle.js +5 -5
  7. package/dist/core/database/adapters/drizzle.js.map +1 -1
  8. package/dist/core/database/adapters/mongodb.js +5 -1
  9. package/dist/core/database/adapters/mongodb.js.map +1 -1
  10. package/dist/core/database/adapters/mysql.js +5 -1
  11. package/dist/core/database/adapters/mysql.js.map +1 -1
  12. package/dist/core/database/adapters/postgresql.js +1 -1
  13. package/dist/core/database/adapters/postgresql.js.map +1 -1
  14. package/dist/core/database/adapters/redis.js +2 -2
  15. package/dist/core/database/adapters/redis.js.map +1 -1
  16. package/dist/core/database/adapters/sqlite.js +5 -1
  17. package/dist/core/database/adapters/sqlite.js.map +1 -1
  18. package/dist/core/docs/index.js.map +1 -1
  19. package/dist/core/docs/simple-docs.js +2 -1
  20. package/dist/core/docs/simple-docs.js.map +1 -1
  21. package/dist/core/docs/swagger-ui.js +1 -0
  22. package/dist/core/docs/swagger-ui.js.map +1 -1
  23. package/dist/core/docs/zod-to-openapi.js +4 -0
  24. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  25. package/dist/core/events/event-bus.d.ts +1 -1
  26. package/dist/core/events/event-bus.js +8 -4
  27. package/dist/core/events/event-bus.js.map +1 -1
  28. package/dist/core/framework.d.ts +1 -1
  29. package/dist/core/framework.js +3 -1
  30. package/dist/core/framework.js.map +1 -1
  31. package/dist/core/graphql/adapter.d.ts +73 -0
  32. package/dist/core/graphql/adapter.js +2 -0
  33. package/dist/core/graphql/adapter.js.map +1 -0
  34. package/dist/core/graphql/adapters/graphql-js-adapter.d.ts +26 -0
  35. package/dist/core/graphql/adapters/graphql-js-adapter.js +229 -0
  36. package/dist/core/graphql/adapters/graphql-js-adapter.js.map +1 -0
  37. package/dist/core/graphql/core.d.ts +60 -0
  38. package/dist/core/graphql/core.js +165 -0
  39. package/dist/core/graphql/core.js.map +1 -0
  40. package/dist/core/graphql/index.d.ts +4 -0
  41. package/dist/core/graphql/index.js +4 -0
  42. package/dist/core/graphql/index.js.map +1 -0
  43. package/dist/core/graphql/loader.d.ts +9 -0
  44. package/dist/core/graphql/loader.js +32 -0
  45. package/dist/core/graphql/loader.js.map +1 -0
  46. package/dist/core/graphql/types.d.ts +211 -0
  47. package/dist/core/graphql/types.js +2 -0
  48. package/dist/core/graphql/types.js.map +1 -0
  49. package/dist/core/http/http-server.d.ts +7 -0
  50. package/dist/core/http/http-server.js +267 -123
  51. package/dist/core/http/http-server.js.map +1 -1
  52. package/dist/core/http/utils/uws-worker-clustering.d.ts +28 -0
  53. package/dist/core/http/utils/uws-worker-clustering.js +313 -0
  54. package/dist/core/http/utils/uws-worker-clustering.js.map +1 -0
  55. package/dist/core/http/uws-http-server.d.ts +7 -1
  56. package/dist/core/http/uws-http-server.js +272 -189
  57. package/dist/core/http/uws-http-server.js.map +1 -1
  58. package/dist/core/jobs/cron-parser.d.ts +62 -0
  59. package/dist/core/jobs/cron-parser.js +239 -0
  60. package/dist/core/jobs/cron-parser.js.map +1 -0
  61. package/dist/core/jobs/index.d.ts +12 -0
  62. package/dist/core/jobs/index.js +9 -0
  63. package/dist/core/jobs/index.js.map +1 -0
  64. package/dist/core/jobs/job-executor.d.ts +134 -0
  65. package/dist/core/jobs/job-executor.js +413 -0
  66. package/dist/core/jobs/job-executor.js.map +1 -0
  67. package/dist/core/jobs/job-scheduler.d.ts +214 -0
  68. package/dist/core/jobs/job-scheduler.js +551 -0
  69. package/dist/core/jobs/job-scheduler.js.map +1 -0
  70. package/dist/core/jobs/job-state-manager.d.ts +158 -0
  71. package/dist/core/jobs/job-state-manager.js +444 -0
  72. package/dist/core/jobs/job-state-manager.js.map +1 -0
  73. package/dist/core/jobs/leader-election.d.ts +124 -0
  74. package/dist/core/jobs/leader-election.js +481 -0
  75. package/dist/core/jobs/leader-election.js.map +1 -0
  76. package/dist/core/jobs/types.d.ts +151 -0
  77. package/dist/core/jobs/types.js +4 -0
  78. package/dist/core/jobs/types.js.map +1 -0
  79. package/dist/core/jobs/utils.d.ts +95 -0
  80. package/dist/core/jobs/utils.js +258 -0
  81. package/dist/core/jobs/utils.js.map +1 -0
  82. package/dist/core/logger/filters.js +2 -0
  83. package/dist/core/logger/filters.js.map +1 -1
  84. package/dist/core/logger/logger.d.ts +7 -5
  85. package/dist/core/logger/logger.js +68 -27
  86. package/dist/core/logger/logger.js.map +1 -1
  87. package/dist/core/logger/outputs.js +2 -0
  88. package/dist/core/logger/outputs.js.map +1 -1
  89. package/dist/core/middleware/built-in/auth/helpers.js +1 -1
  90. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
  91. package/dist/core/middleware/built-in/auth/jwt-helpers.js +1 -1
  92. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
  93. package/dist/core/middleware/built-in/auth/providers.js +1 -1
  94. package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
  95. package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -3
  96. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
  97. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js +1 -0
  98. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -1
  99. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js +1 -1
  100. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
  101. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.d.ts +8 -0
  102. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js +100 -7
  103. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
  104. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.d.ts +6 -0
  105. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js +97 -13
  106. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -1
  107. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js +1 -1
  108. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -1
  109. package/dist/core/middleware/built-in/cookie/hook.d.ts +1 -1
  110. package/dist/core/middleware/built-in/cookie/hook.js +2 -2
  111. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
  112. package/dist/core/middleware/built-in/csrf/core.js +1 -0
  113. package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
  114. package/dist/core/middleware/built-in/graphql/core.d.ts +11 -0
  115. package/dist/core/middleware/built-in/graphql/core.js +24 -0
  116. package/dist/core/middleware/built-in/graphql/core.js.map +1 -0
  117. package/dist/core/middleware/built-in/graphql/helpers.d.ts +69 -0
  118. package/dist/core/middleware/built-in/graphql/helpers.js +187 -0
  119. package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -0
  120. package/dist/core/middleware/built-in/graphql/hook.d.ts +7 -0
  121. package/dist/core/middleware/built-in/graphql/hook.js +78 -0
  122. package/dist/core/middleware/built-in/graphql/hook.js.map +1 -0
  123. package/dist/core/middleware/built-in/graphql/index.d.ts +5 -0
  124. package/dist/core/middleware/built-in/graphql/index.js +5 -0
  125. package/dist/core/middleware/built-in/graphql/index.js.map +1 -0
  126. package/dist/core/middleware/built-in/graphql/middleware.d.ts +7 -0
  127. package/dist/core/middleware/built-in/graphql/middleware.js +54 -0
  128. package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -0
  129. package/dist/core/middleware/built-in/graphql/subscriptions.d.ts +20 -0
  130. package/dist/core/middleware/built-in/graphql/subscriptions.js +37 -0
  131. package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -0
  132. package/dist/core/middleware/built-in/index.d.ts +2 -1
  133. package/dist/core/middleware/built-in/index.js +3 -0
  134. package/dist/core/middleware/built-in/index.js.map +1 -1
  135. package/dist/core/middleware/built-in/rate-limit/core.d.ts +5 -0
  136. package/dist/core/middleware/built-in/rate-limit/core.js +16 -8
  137. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -1
  138. package/dist/core/middleware/built-in/validation/core.js +42 -19
  139. package/dist/core/middleware/built-in/validation/core.js.map +1 -1
  140. package/dist/core/middleware/index.js +1 -0
  141. package/dist/core/middleware/index.js.map +1 -1
  142. package/dist/core/modules/auto-discovery.js +5 -4
  143. package/dist/core/modules/auto-discovery.js.map +1 -1
  144. package/dist/core/modules/modules.js.map +1 -1
  145. package/dist/core/networking/adapters/socketio-adapter.js +1 -1
  146. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  147. package/dist/core/networking/adapters/uws-adapter.js +7 -2
  148. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  149. package/dist/core/networking/adapters/ws-adapter.js +5 -2
  150. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  151. package/dist/core/networking/websocket-manager.js +2 -0
  152. package/dist/core/networking/websocket-manager.js.map +1 -1
  153. package/dist/core/pooling/object-pool-manager.d.ts +8 -2
  154. package/dist/core/pooling/object-pool-manager.js +38 -18
  155. package/dist/core/pooling/object-pool-manager.js.map +1 -1
  156. package/dist/core/routing/app-integration.d.ts +3 -3
  157. package/dist/core/routing/app-integration.js +1 -1
  158. package/dist/core/routing/app-integration.js.map +1 -1
  159. package/dist/core/routing/index.d.ts +1 -1
  160. package/dist/core/routing/index.js +1 -1
  161. package/dist/core/routing/index.js.map +1 -1
  162. package/dist/core/routing/path-matcher.d.ts +6 -0
  163. package/dist/core/routing/path-matcher.js +46 -7
  164. package/dist/core/routing/path-matcher.js.map +1 -1
  165. package/dist/core/routing/unified-router.d.ts +4 -0
  166. package/dist/core/routing/unified-router.js +104 -43
  167. package/dist/core/routing/unified-router.js.map +1 -1
  168. package/dist/core/runtime/base-adapter.js +3 -3
  169. package/dist/core/runtime/base-adapter.js.map +1 -1
  170. package/dist/core/runtime/cloudflare-workers-adapter.js +1 -1
  171. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  172. package/dist/core/runtime/node-adapter.d.ts +1 -1
  173. package/dist/core/runtime/node-adapter.js +7 -4
  174. package/dist/core/runtime/node-adapter.js.map +1 -1
  175. package/dist/core/runtime/vercel-edge-adapter.js +1 -0
  176. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  177. package/dist/core/utilities/circuit-breaker.d.ts +9 -2
  178. package/dist/core/utilities/circuit-breaker.js +32 -3
  179. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  180. package/dist/core/utilities/container.js +6 -0
  181. package/dist/core/utilities/container.js.map +1 -1
  182. package/dist/core/utilities/hooks.d.ts +4 -0
  183. package/dist/core/utilities/hooks.js +134 -22
  184. package/dist/core/utilities/hooks.js.map +1 -1
  185. package/dist/core/validation/index.js +6 -1
  186. package/dist/core/validation/index.js.map +1 -1
  187. package/dist/index.d.ts +6 -0
  188. package/dist/index.js +5 -0
  189. package/dist/index.js.map +1 -1
  190. package/dist/moro.d.ts +154 -1
  191. package/dist/moro.js +592 -16
  192. package/dist/moro.js.map +1 -1
  193. package/dist/types/config.d.ts +28 -0
  194. package/dist/types/core.d.ts +1 -0
  195. package/dist/types/events.d.ts +1 -1
  196. package/dist/types/events.js +1 -0
  197. package/dist/types/events.js.map +1 -1
  198. package/dist/types/logger.d.ts +1 -0
  199. package/dist/types/module.d.ts +2 -2
  200. package/package.json +21 -1
package/dist/moro.d.ts CHANGED
@@ -9,6 +9,8 @@ import { DocsConfig } from './core/docs/index.js';
9
9
  import { EventEmitter } from 'events';
10
10
  import { type AppConfig } from './core/config/index.js';
11
11
  import { RuntimeAdapter, RuntimeType } from './core/runtime/index.js';
12
+ import type { JobSchedule, SimpleJobOptions, JobFunction, JobMetrics, SchedulerStats, JobHealth } from './core/jobs/index.js';
13
+ import type { GraphQLOptions } from './core/graphql/types.js';
12
14
  export declare class Moro extends EventEmitter {
13
15
  private coreFramework;
14
16
  private routes;
@@ -31,6 +33,12 @@ export declare class Moro extends EventEmitter {
31
33
  private runtimeType;
32
34
  private middlewareManager;
33
35
  private queuedWebSocketRegistrations;
36
+ private jobScheduler?;
37
+ private jobHealthChecker?;
38
+ private jobsStarted;
39
+ private graphqlCore?;
40
+ private graphqlSubscriptionManager?;
41
+ private graphqlInitPromise?;
34
42
  constructor(options?: MoroOptions);
35
43
  /**
36
44
  * Get configuration object
@@ -68,7 +76,7 @@ export declare class Moro extends EventEmitter {
68
76
  plugin(middleware: any, options?: any): Promise<this>;
69
77
  loadModule(moduleOrPath: ModuleConfig | string): Promise<this>;
70
78
  database(adapter: any): this;
71
- websocket(namespace: string, handlers: Record<string, Function>): this;
79
+ websocket(namespace: string, handlers: Record<string, CallableFunction>): this;
72
80
  private processWebSocketRegistration;
73
81
  private processQueuedWebSocketRegistrations;
74
82
  listen(callback?: () => void): void;
@@ -133,11 +141,156 @@ export declare class Moro extends EventEmitter {
133
141
  private clusterWorkers;
134
142
  private startWithClustering;
135
143
  private handleWorkerMessage;
144
+ /**
145
+ * uWebSockets Worker Thread Clustering Implementation
146
+ * Uses worker threads with acceptor pattern for maximum performance
147
+ */
148
+ private startWithUWSClustering;
149
+ private startUWSAcceptor;
150
+ private startUWSWorker;
136
151
  /**
137
152
  * Gracefully close the application and clean up resources
138
153
  * This should be called in tests and during shutdown
139
154
  */
140
155
  close(): Promise<void>;
156
+ /**
157
+ * Register a background job with cron or interval schedule
158
+ * @param name - Job name (used for identification)
159
+ * @param schedule - Cron expression, interval string ('5m', '1h'), or schedule object
160
+ * @param handler - Job function to execute
161
+ * @param options - Job configuration options
162
+ * @returns Job ID for management
163
+ *
164
+ * @example
165
+ * // Cron schedule
166
+ * app.job('cleanup', '0 2 * * *', async () => {
167
+ * await cleanupOldData();
168
+ * });
169
+ *
170
+ * // Interval schedule
171
+ * app.job('health-check', '5m', async (ctx) => {
172
+ * console.log('Health check', ctx.executionId);
173
+ * });
174
+ *
175
+ * // Advanced options
176
+ * app.job('report', '@daily', generateReport, {
177
+ * timeout: 60000,
178
+ * maxRetries: 3,
179
+ * onError: (ctx, error) => console.error('Job failed', error)
180
+ * });
181
+ */
182
+ job(name: string, schedule: string | JobSchedule, handler: JobFunction, options?: SimpleJobOptions): string;
183
+ /**
184
+ * Enable or disable a registered job
185
+ */
186
+ setJobEnabled(jobId: string, enabled: boolean): boolean;
187
+ /**
188
+ * Manually trigger a job execution
189
+ */
190
+ triggerJob(jobId: string, metadata?: Record<string, any>): Promise<any>;
191
+ /**
192
+ * Unregister a job
193
+ */
194
+ unregisterJob(jobId: string): boolean;
195
+ /**
196
+ * Get job metrics
197
+ */
198
+ getJobMetrics(jobId: string): JobMetrics | null;
199
+ /**
200
+ * Get job health status
201
+ */
202
+ getJobHealth(jobId?: string): JobHealth | JobHealth[];
203
+ /**
204
+ * Get scheduler statistics
205
+ */
206
+ getJobStats(): SchedulerStats | null;
207
+ /**
208
+ * Get overall scheduler health
209
+ */
210
+ getSchedulerHealth(): {
211
+ status: import("./core/jobs/types.js").JobHealthStatus;
212
+ stats: SchedulerStats;
213
+ jobs: JobHealth[];
214
+ unhealthyJobCount: number;
215
+ message?: string;
216
+ } | {
217
+ status: "unknown";
218
+ message: string;
219
+ stats: null;
220
+ jobs: never[];
221
+ unhealthyJobCount: number;
222
+ };
223
+ /**
224
+ * Start the job scheduler (called automatically on listen)
225
+ */
226
+ private startJobScheduler;
227
+ /**
228
+ * Configure GraphQL endpoint with schema, resolvers, and options
229
+ *
230
+ * @param options - GraphQL configuration options
231
+ *
232
+ * @example
233
+ * ```ts
234
+ * // Using type definitions and resolvers
235
+ * app.graphql({
236
+ * typeDefs: `
237
+ * type Query {
238
+ * hello: String
239
+ * users: [User]
240
+ * }
241
+ * type User {
242
+ * id: ID!
243
+ * name: String!
244
+ * }
245
+ * `,
246
+ * resolvers: {
247
+ * Query: {
248
+ * hello: () => 'Hello World!',
249
+ * users: () => [{ id: '1', name: 'Alice' }]
250
+ * }
251
+ * }
252
+ * });
253
+ *
254
+ * // Using Pothos schema builder
255
+ * import SchemaBuilder from '@pothos/core';
256
+ *
257
+ * const builder = new SchemaBuilder();
258
+ * builder.queryType({
259
+ * fields: (t) => ({
260
+ * hello: t.string({ resolve: () => 'Hello World!' })
261
+ * })
262
+ * });
263
+ *
264
+ * app.graphql({
265
+ * pothosSchema: builder
266
+ * });
267
+ * ```
268
+ */
269
+ graphql(options: GraphQLOptions): this;
270
+ /**
271
+ * Initialize GraphQL system asynchronously
272
+ */
273
+ private initializeGraphQL;
274
+ /**
275
+ * Check if GraphQL package is available
276
+ */
277
+ private isGraphQLAvailable;
278
+ /**
279
+ * Lazy load GraphQL modules
280
+ */
281
+ private loadGraphQLModules;
282
+ /**
283
+ * Setup GraphQL subscriptions
284
+ */
285
+ private setupGraphQLSubscriptions;
286
+ /**
287
+ * Get GraphQL schema (if configured)
288
+ */
289
+ getGraphQLSchema(): any | undefined;
290
+ /**
291
+ * Get GraphQL stats
292
+ */
293
+ getGraphQLStats(): any;
141
294
  }
142
295
  export declare function createApp(options?: MoroOptions): Moro;
143
296
  export declare function createAppNode(options?: Omit<MoroOptions, 'runtime'>): Moro;