alepha 0.15.0 → 0.15.1
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.
- package/README.md +43 -98
- package/dist/api/audits/index.d.ts +240 -240
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +2 -2
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +185 -185
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +2 -2
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +245 -245
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/notifications/index.browser.js +4 -4
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +74 -74
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +4 -4
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +221 -221
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/users/index.d.ts +1632 -1631
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +26 -34
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +132 -132
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/batch/index.d.ts +122 -122
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/bucket/index.d.ts +163 -163
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/cache/core/index.d.ts +46 -46
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/index.d.ts +5933 -201
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +609 -169
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +296 -296
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +19 -19
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +268 -79
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +768 -694
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +268 -79
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +268 -79
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts +44 -44
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/email/index.d.ts +25 -25
- package/dist/email/index.d.ts.map +1 -1
- package/dist/fake/index.d.ts +5409 -5409
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +22 -22
- package/dist/fake/index.js.map +1 -1
- package/dist/file/index.d.ts +435 -435
- package/dist/file/index.d.ts.map +1 -1
- package/dist/lock/core/index.d.ts +208 -208
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/logger/index.d.ts +24 -24
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +1 -5
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +216 -198
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +28 -4
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/index.browser.js +9 -9
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +83 -76
- package/dist/orm/index.bun.js.map +1 -1
- package/dist/orm/index.d.ts +961 -960
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +88 -81
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +244 -244
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/redis/index.d.ts +105 -105
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/retry/index.d.ts +69 -69
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/router/index.d.ts +6 -6
- package/dist/router/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +108 -26
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +393 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +532 -209
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1422 -11
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +1296 -271
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1249 -18
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +56 -56
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/compress/index.d.ts +3 -3
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/cookies/index.d.ts +6 -6
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/core/index.d.ts +196 -186
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +43 -27
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +11 -11
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/helmet/index.d.ts +2 -2
- package/dist/server/helmet/index.d.ts.map +1 -1
- package/dist/server/links/index.browser.js +9 -1
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +83 -83
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +13 -5
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +514 -1
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +4462 -4
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts +6 -6
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +102 -102
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts +16 -16
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/static/index.d.ts +44 -44
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/swagger/index.d.ts +47 -47
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/sms/index.d.ts +11 -11
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +3 -3
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +71 -71
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/index.js +2 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.d.ts +318 -318
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts +6 -6
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/vite/index.d.ts +2324 -1719
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +123 -475
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +3 -3
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +275 -275
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +3 -3
- package/dist/websocket/index.js.map +1 -1
- package/package.json +9 -9
- package/src/api/users/services/SessionService.ts +0 -10
- package/src/cli/apps/AlephaCli.ts +2 -2
- package/src/cli/apps/AlephaPackageBuilderCli.ts +9 -1
- package/src/cli/assets/apiHelloControllerTs.ts +2 -1
- package/src/cli/assets/biomeJson.ts +2 -1
- package/src/cli/assets/claudeMd.ts +9 -4
- package/src/cli/assets/dummySpecTs.ts +2 -1
- package/src/cli/assets/editorconfig.ts +2 -1
- package/src/cli/assets/mainBrowserTs.ts +2 -1
- package/src/cli/assets/mainCss.ts +24 -0
- package/src/cli/assets/tsconfigJson.ts +2 -1
- package/src/cli/assets/webAppRouterTs.ts +2 -1
- package/src/cli/assets/webHelloComponentTsx.ts +6 -2
- package/src/cli/atoms/appEntryOptions.ts +13 -0
- package/src/cli/atoms/buildOptions.ts +1 -1
- package/src/cli/atoms/changelogOptions.ts +1 -1
- package/src/cli/commands/build.ts +63 -47
- package/src/cli/commands/dev.ts +16 -33
- package/src/cli/commands/gen/env.ts +1 -1
- package/src/cli/commands/init.ts +17 -8
- package/src/cli/commands/lint.ts +1 -1
- package/src/cli/defineConfig.ts +9 -0
- package/src/cli/index.ts +2 -1
- package/src/cli/providers/AppEntryProvider.ts +131 -0
- package/src/cli/providers/ViteBuildProvider.ts +82 -0
- package/src/cli/providers/ViteDevServerProvider.ts +350 -0
- package/src/cli/providers/ViteTemplateProvider.ts +27 -0
- package/src/cli/services/AlephaCliUtils.ts +33 -2
- package/src/cli/services/PackageManagerUtils.ts +13 -6
- package/src/cli/services/ProjectScaffolder.ts +72 -49
- package/src/core/Alepha.ts +2 -8
- package/src/core/primitives/$module.ts +12 -0
- package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +257 -0
- package/src/core/providers/KeylessJsonSchemaCodec.ts +396 -14
- package/src/core/providers/SchemaValidator.spec.ts +236 -0
- package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
- package/src/mcp/errors/McpError.ts +30 -0
- package/src/mcp/index.ts +3 -0
- package/src/mcp/transports/SseMcpTransport.ts +16 -6
- package/src/orm/providers/DrizzleKitProvider.ts +3 -5
- package/src/orm/services/Repository.ts +11 -0
- package/src/server/core/index.ts +1 -1
- package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
- package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
- package/src/server/core/providers/NodeHttpServerProvider.ts +71 -22
- package/src/server/core/providers/ServerLoggerProvider.ts +2 -2
- package/src/server/core/providers/ServerProvider.ts +9 -12
- package/src/server/links/atoms/apiLinksAtom.ts +7 -0
- package/src/server/links/index.browser.ts +2 -0
- package/src/server/links/index.ts +2 -0
- package/src/vite/index.ts +3 -2
- package/src/vite/tasks/buildClient.ts +0 -1
- package/src/vite/tasks/buildServer.ts +68 -21
- package/src/vite/tasks/copyAssets.ts +5 -4
- package/src/vite/tasks/generateSitemap.ts +64 -23
- package/src/vite/tasks/index.ts +0 -2
- package/src/vite/tasks/prerenderPages.ts +49 -24
- package/src/cli/assets/indexHtml.ts +0 -15
- package/src/cli/commands/format.ts +0 -23
- package/src/vite/helpers/boot.ts +0 -117
- package/src/vite/plugins/viteAlephaDev.ts +0 -177
- package/src/vite/tasks/devServer.ts +0 -71
- package/src/vite/tasks/runAlepha.ts +0 -270
- /package/dist/orm/{chunk-DtkW-qnP.js → chunk-DH6iiROE.js} +0 -0
|
@@ -11,19 +11,19 @@ import { DateTimeProvider } from "alepha/datetime";
|
|
|
11
11
|
*/
|
|
12
12
|
declare abstract class QueueProvider {
|
|
13
13
|
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
* Push a message to the queue.
|
|
15
|
+
*
|
|
16
|
+
* @param queue Name of the queue to push the message to.
|
|
17
|
+
* @param message String message to be pushed to the queue. Buffer messages are not supported for now.
|
|
18
|
+
*/
|
|
19
19
|
abstract push(queue: string, message: string): Promise<void>;
|
|
20
20
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
* Pop a message from the queue.
|
|
22
|
+
*
|
|
23
|
+
* @param queue Name of the queue to pop the message from.
|
|
24
|
+
*
|
|
25
|
+
* @returns The message popped or `undefined` if the queue is empty.
|
|
26
|
+
*/
|
|
27
27
|
abstract pop(queue: string): Promise<string | undefined>;
|
|
28
28
|
}
|
|
29
29
|
//#endregion
|
|
@@ -38,17 +38,17 @@ declare class MemoryQueueProvider implements QueueProvider {
|
|
|
38
38
|
//#region ../../src/queue/core/providers/WorkerProvider.d.ts
|
|
39
39
|
declare const envSchema: alepha1.TObject<{
|
|
40
40
|
/**
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
* The interval in milliseconds to wait before checking for new messages.
|
|
42
|
+
*/
|
|
43
43
|
QUEUE_WORKER_INTERVAL: alepha1.TInteger;
|
|
44
44
|
/**
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
* The maximum interval in milliseconds to wait before checking for new messages.
|
|
46
|
+
*/
|
|
47
47
|
QUEUE_WORKER_MAX_INTERVAL: alepha1.TInteger;
|
|
48
48
|
/**
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
* The number of workers to run concurrently. Defaults to 1.
|
|
50
|
+
* Useful only if you are doing a lot of I/O.
|
|
51
|
+
*/
|
|
52
52
|
QUEUE_WORKER_CONCURRENCY: alepha1.TInteger;
|
|
53
53
|
}>;
|
|
54
54
|
declare module "alepha" {
|
|
@@ -72,37 +72,37 @@ declare class WorkerProvider {
|
|
|
72
72
|
get isRunning(): boolean;
|
|
73
73
|
protected readonly start: alepha1.HookPrimitive<"start">;
|
|
74
74
|
/**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
* Start the workers.
|
|
76
|
+
* This method will create an endless loop that will check for new messages!
|
|
77
|
+
*/
|
|
78
78
|
protected startWorkers(): void;
|
|
79
79
|
protected readonly stop: alepha1.HookPrimitive<"stop">;
|
|
80
80
|
/**
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
* Wait for the next message, where `n` is the worker number.
|
|
82
|
+
*
|
|
83
|
+
* This method will wait for a certain amount of time, increasing the wait time again if no message is found.
|
|
84
|
+
*/
|
|
85
85
|
protected waitForNextMessage(n: number): Promise<void>;
|
|
86
86
|
/**
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
* Get the next message.
|
|
88
|
+
*/
|
|
89
89
|
protected getNextMessage(): Promise<undefined | NextMessage>;
|
|
90
90
|
/**
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
* Process a message from a queue.
|
|
92
|
+
*/
|
|
93
93
|
protected processMessage(response: {
|
|
94
94
|
message: any;
|
|
95
95
|
consumer: Consumer;
|
|
96
96
|
}): Promise<void>;
|
|
97
97
|
/**
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
* Stop the workers.
|
|
99
|
+
*
|
|
100
|
+
* This method will stop the workers and wait for them to finish processing.
|
|
101
|
+
*/
|
|
102
102
|
protected stopWorkers(): Promise<void>;
|
|
103
103
|
/**
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
* Force the workers to get back to work.
|
|
105
|
+
*/
|
|
106
106
|
wakeUp(): void;
|
|
107
107
|
}
|
|
108
108
|
interface Consumer<T extends TSchema = TSchema> {
|
|
@@ -232,122 +232,122 @@ declare const $queue: {
|
|
|
232
232
|
};
|
|
233
233
|
interface QueuePrimitiveOptions<T extends TSchema> {
|
|
234
234
|
/**
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
235
|
+
* Unique name for the queue.
|
|
236
|
+
*
|
|
237
|
+
* This name is used for:
|
|
238
|
+
* - Queue identification across the system
|
|
239
|
+
* - Storage backend key generation
|
|
240
|
+
* - Logging and monitoring
|
|
241
|
+
* - Worker assignment and routing
|
|
242
|
+
*
|
|
243
|
+
* If not provided, defaults to the property key where the queue is declared.
|
|
244
|
+
*
|
|
245
|
+
* @example "email-notifications"
|
|
246
|
+
* @example "image-processing"
|
|
247
|
+
* @example "order-fulfillment"
|
|
248
|
+
*/
|
|
249
249
|
name?: string;
|
|
250
250
|
/**
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
251
|
+
* Human-readable description of the queue's purpose.
|
|
252
|
+
*
|
|
253
|
+
* Used for:
|
|
254
|
+
* - Documentation generation
|
|
255
|
+
* - Monitoring dashboards
|
|
256
|
+
* - Development team communication
|
|
257
|
+
* - Queue management interfaces
|
|
258
|
+
*
|
|
259
|
+
* @example "Process user registration emails and welcome sequences"
|
|
260
|
+
* @example "Handle image uploads, resizing, and thumbnail generation"
|
|
261
|
+
* @example "Manage order processing, payment, and shipping workflows"
|
|
262
|
+
*/
|
|
263
263
|
description?: string;
|
|
264
264
|
/**
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
265
|
+
* Queue storage provider configuration.
|
|
266
|
+
*
|
|
267
|
+
* Options:
|
|
268
|
+
* - **"memory"**: In-memory queue (default for development, lost on restart)
|
|
269
|
+
* - **Service<QueueProvider>**: Custom provider class (e.g., RedisQueueProvider)
|
|
270
|
+
* - **undefined**: Uses the default queue provider from dependency injection
|
|
271
|
+
*
|
|
272
|
+
* **Provider Selection Guidelines**:
|
|
273
|
+
* - Development: Use "memory" for fast, simple testing
|
|
274
|
+
* - Production: Use Redis or database-backed providers for persistence
|
|
275
|
+
* - High-throughput: Use specialized providers with connection pooling
|
|
276
|
+
* - Distributed systems: Use Redis or message brokers for scalability
|
|
277
|
+
*
|
|
278
|
+
* @default Uses injected QueueProvider
|
|
279
|
+
* @example "memory"
|
|
280
|
+
* @example RedisQueueProvider
|
|
281
|
+
* @example DatabaseQueueProvider
|
|
282
|
+
*/
|
|
283
283
|
provider?: "memory" | Service<QueueProvider>;
|
|
284
284
|
/**
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
285
|
+
* TypeBox schema defining the structure of messages in this queue.
|
|
286
|
+
*
|
|
287
|
+
* This schema:
|
|
288
|
+
* - Validates all messages pushed to the queue
|
|
289
|
+
* - Provides full TypeScript type inference
|
|
290
|
+
* - Ensures type safety between producers and consumers
|
|
291
|
+
* - Enables automatic serialization/deserialization
|
|
292
|
+
*
|
|
293
|
+
* **Schema Design Best Practices**:
|
|
294
|
+
* - Keep schemas simple and focused on the specific task
|
|
295
|
+
* - Use optional fields for data that might not always be available
|
|
296
|
+
* - Include version fields for schema evolution
|
|
297
|
+
* - Use union types for different message types in the same queue
|
|
298
|
+
*
|
|
299
|
+
* @example
|
|
300
|
+
* ```ts
|
|
301
|
+
* t.object({
|
|
302
|
+
* userId: t.text(),
|
|
303
|
+
* action: t.enum(["create", "update"]),
|
|
304
|
+
* data: t.record(t.text(), t.any()),
|
|
305
|
+
* timestamp: t.optional(t.number())
|
|
306
|
+
* })
|
|
307
|
+
* ```
|
|
308
|
+
*/
|
|
309
309
|
schema: T;
|
|
310
310
|
/**
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
311
|
+
* Message handler function that processes queue messages.
|
|
312
|
+
*
|
|
313
|
+
* This function:
|
|
314
|
+
* - Runs in background worker threads for non-blocking processing
|
|
315
|
+
* - Receives type-safe message payloads based on the schema
|
|
316
|
+
* - Should be idempotent to handle potential retries
|
|
317
|
+
* - Can throw errors to trigger retry mechanisms
|
|
318
|
+
* - Has access to the full Alepha dependency injection container
|
|
319
|
+
*
|
|
320
|
+
* **Handler Best Practices**:
|
|
321
|
+
* - Keep handlers focused on a single responsibility
|
|
322
|
+
* - Use proper error handling and logging
|
|
323
|
+
* - Make operations idempotent when possible
|
|
324
|
+
* - Validate critical business logic within handlers
|
|
325
|
+
* - Consider using transactions for data consistency
|
|
326
|
+
*
|
|
327
|
+
* @param message - The queue message with validated payload
|
|
328
|
+
* @returns Promise that resolves when processing is complete
|
|
329
|
+
*
|
|
330
|
+
* @example
|
|
331
|
+
* ```ts
|
|
332
|
+
* handler: async (message) => {
|
|
333
|
+
* const { userId, email, template } = message.payload;
|
|
334
|
+
*
|
|
335
|
+
* try {
|
|
336
|
+
* await this.emailService.send({
|
|
337
|
+
* to: email,
|
|
338
|
+
* template,
|
|
339
|
+
* data: { userId }
|
|
340
|
+
* });
|
|
341
|
+
*
|
|
342
|
+
* await this.userService.markEmailSent(userId, template);
|
|
343
|
+
* } catch (error) {
|
|
344
|
+
* // Log error and let the queue system handle retries
|
|
345
|
+
* this.logger.error(`Failed to send email to ${email}`, error);
|
|
346
|
+
* throw error;
|
|
347
|
+
* }
|
|
348
|
+
* }
|
|
349
|
+
* ```
|
|
350
|
+
*/
|
|
351
351
|
handler?: (message: QueueMessage<T>) => Promise<void>;
|
|
352
352
|
}
|
|
353
353
|
declare class QueuePrimitive<T extends TSchema> extends Primitive<QueuePrimitiveOptions<T>> {
|
|
@@ -421,109 +421,109 @@ declare const $consumer: {
|
|
|
421
421
|
};
|
|
422
422
|
interface ConsumerPrimitiveOptions<T extends TSchema> {
|
|
423
423
|
/**
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
424
|
+
* The queue primitive that this consumer will process messages from.
|
|
425
|
+
*
|
|
426
|
+
* This establishes the connection between the consumer and its source queue:
|
|
427
|
+
* - The consumer inherits the queue's message schema for type safety
|
|
428
|
+
* - Messages pushed to the queue will be automatically routed to this consumer
|
|
429
|
+
* - Multiple consumers can be attached to the same queue for parallel processing
|
|
430
|
+
* - The consumer will use the queue's provider and configuration settings
|
|
431
|
+
*
|
|
432
|
+
* **Queue Integration Benefits**:
|
|
433
|
+
* - Type safety: Consumer handler gets fully typed message payloads
|
|
434
|
+
* - Schema validation: Messages are validated before reaching the consumer
|
|
435
|
+
* - Error handling: Failed messages can be retried or moved to dead letter queues
|
|
436
|
+
* - Monitoring: Queue metrics include consumer processing statistics
|
|
437
|
+
*
|
|
438
|
+
* @example
|
|
439
|
+
* ```ts
|
|
440
|
+
* // First, define a queue
|
|
441
|
+
* emailQueue = $queue({
|
|
442
|
+
* name: "emails",
|
|
443
|
+
* schema: t.object({ to: t.text(), subject: t.text() })
|
|
444
|
+
* });
|
|
445
|
+
*
|
|
446
|
+
* // Then, create a consumer for that queue
|
|
447
|
+
* emailConsumer = $consumer({
|
|
448
|
+
* queue: this.emailQueue, // Reference the queue primitive
|
|
449
|
+
* handler: async (message) => { } // process email
|
|
450
|
+
* });
|
|
451
|
+
* ```
|
|
452
|
+
*/
|
|
453
453
|
queue: QueuePrimitive<T>;
|
|
454
454
|
/**
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
455
|
+
* Message handler function that processes individual messages from the queue.
|
|
456
|
+
*
|
|
457
|
+
* This function:
|
|
458
|
+
* - Receives fully typed and validated message payloads from the connected queue
|
|
459
|
+
* - Runs in the background worker system for non-blocking operation
|
|
460
|
+
* - Should implement the core business logic for processing this message type
|
|
461
|
+
* - Can throw errors to trigger the queue's retry mechanisms
|
|
462
|
+
* - Has access to the full Alepha dependency injection container
|
|
463
|
+
* - Should be idempotent to handle potential duplicate deliveries
|
|
464
|
+
*
|
|
465
|
+
* **Handler Design Guidelines**:
|
|
466
|
+
* - Keep handlers focused on a single responsibility
|
|
467
|
+
* - Use proper error handling and meaningful error messages
|
|
468
|
+
* - Log important processing steps for debugging and monitoring
|
|
469
|
+
* - Consider transaction boundaries for data consistency
|
|
470
|
+
* - Make operations idempotent when possible
|
|
471
|
+
* - Validate business rules within the handler logic
|
|
472
|
+
*
|
|
473
|
+
* **Error Handling Strategy**:
|
|
474
|
+
* - Throw errors for temporary failures that should be retried
|
|
475
|
+
* - Log and handle permanent failures gracefully
|
|
476
|
+
* - Use specific error types to control retry behavior
|
|
477
|
+
* - Consider implementing circuit breakers for external service calls
|
|
478
|
+
*
|
|
479
|
+
* @param message - The queue message containing the validated payload
|
|
480
|
+
* @param message.payload - The typed message data based on the queue's schema
|
|
481
|
+
* @returns Promise that resolves when processing is complete
|
|
482
|
+
*
|
|
483
|
+
* @example
|
|
484
|
+
* ```ts
|
|
485
|
+
* handler: async (message) => {
|
|
486
|
+
* const { userId, action, data } = message.payload;
|
|
487
|
+
*
|
|
488
|
+
* try {
|
|
489
|
+
* // Log processing start
|
|
490
|
+
* this.logger.info(`Processing ${action} for user ${userId}`);
|
|
491
|
+
*
|
|
492
|
+
* // Validate business rules
|
|
493
|
+
* if (!await this.userService.exists(userId)) {
|
|
494
|
+
* throw new Error(`User ${userId} not found`);
|
|
495
|
+
* }
|
|
496
|
+
*
|
|
497
|
+
* // Perform the main processing logic
|
|
498
|
+
* switch (action) {
|
|
499
|
+
* case "create":
|
|
500
|
+
* await this.processCreation(userId, data);
|
|
501
|
+
* break;
|
|
502
|
+
* case "update":
|
|
503
|
+
* await this.processUpdate(userId, data);
|
|
504
|
+
* break;
|
|
505
|
+
* default:
|
|
506
|
+
* throw new Error(`Unknown action: ${action}`);
|
|
507
|
+
* }
|
|
508
|
+
*
|
|
509
|
+
* // Log successful completion
|
|
510
|
+
* this.logger.info(`Successfully processed ${action} for user ${userId}`);
|
|
511
|
+
*
|
|
512
|
+
* } catch (error) {
|
|
513
|
+
* // Log error with context
|
|
514
|
+
* this.logger.error(`Failed to process ${action} for user ${userId}`, {
|
|
515
|
+
* error: error.message,
|
|
516
|
+
* userId,
|
|
517
|
+
* action,
|
|
518
|
+
* data
|
|
519
|
+
* });
|
|
520
|
+
*
|
|
521
|
+
* // Re-throw to trigger queue retry mechanism
|
|
522
|
+
* throw error;
|
|
523
|
+
* }
|
|
524
|
+
* }
|
|
525
|
+
* ```
|
|
526
|
+
*/
|
|
527
527
|
handler: (message: {
|
|
528
528
|
payload: Static<T>;
|
|
529
529
|
}) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/core/providers/QueueProvider.ts","../../../src/queue/core/providers/MemoryQueueProvider.ts","../../../src/queue/core/providers/WorkerProvider.ts","../../../src/queue/core/primitives/$queue.ts","../../../src/queue/core/primitives/$consumer.ts","../../../src/queue/core/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/core/providers/QueueProvider.ts","../../../src/queue/core/providers/MemoryQueueProvider.ts","../../../src/queue/core/providers/WorkerProvider.ts","../../../src/queue/core/primitives/$queue.ts","../../../src/queue/core/primitives/$consumer.ts","../../../src/queue/core/index.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/redis/providers/RedisQueueProvider.ts","../../../src/queue/redis/index.ts"],"mappings":";;;;;;cAIM,SAAA,EAIJ,OAAA,CAJa,OAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/redis/providers/RedisQueueProvider.ts","../../../src/queue/redis/index.ts"],"mappings":";;;;;;cAIM,SAAA,EAIJ,OAAA,CAJa,OAAA;sBAIb,OAAA,CAAA,OAAA;AAAA;AAAA,cAEW,kBAAA,YAA8B,aAAA;EAAA,mBACtB,GAAA,EAAK,MAAA,QAAc,SAAA;EAAA,mBACnB,aAAA,EAAe,aAAA;EAE3B,MAAA,CAAO,KAAA;EAID,IAAA,CAAK,KAAA,UAAe,OAAA,WAAkB,OAAA;EAItC,GAAA,CAAI,KAAA,WAAgB,OAAA;AAAA;;;;;;;;AApBU;cCchC,gBAAA,EAAgB,OAAA,CAAA,OAAA,CAW3B,OAAA,CAX2B,MAAA"}
|