@gravito/stream 1.0.0-alpha.2
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 +319 -0
- package/dist/Consumer.d.ts +67 -0
- package/dist/Consumer.d.ts.map +1 -0
- package/dist/Job.d.ts +76 -0
- package/dist/Job.d.ts.map +1 -0
- package/dist/OrbitQueue.d.ts +74 -0
- package/dist/OrbitQueue.d.ts.map +1 -0
- package/dist/QueueManager.d.ts +86 -0
- package/dist/QueueManager.d.ts.map +1 -0
- package/dist/Queueable.d.ts +63 -0
- package/dist/Queueable.d.ts.map +1 -0
- package/dist/Worker.d.ts +48 -0
- package/dist/Worker.d.ts.map +1 -0
- package/dist/core/src/ConfigManager.d.ts +26 -0
- package/dist/core/src/ConfigManager.d.ts.map +1 -0
- package/dist/core/src/Container.d.ts +39 -0
- package/dist/core/src/Container.d.ts.map +1 -0
- package/dist/core/src/Event.d.ts +6 -0
- package/dist/core/src/Event.d.ts.map +1 -0
- package/dist/core/src/EventManager.d.ts +124 -0
- package/dist/core/src/EventManager.d.ts.map +1 -0
- package/dist/core/src/GlobalErrorHandlers.d.ts +32 -0
- package/dist/core/src/GlobalErrorHandlers.d.ts.map +1 -0
- package/dist/core/src/HookManager.d.ts +29 -0
- package/dist/core/src/HookManager.d.ts.map +1 -0
- package/dist/core/src/Listener.d.ts +5 -0
- package/dist/core/src/Listener.d.ts.map +1 -0
- package/dist/core/src/Logger.d.ts +21 -0
- package/dist/core/src/Logger.d.ts.map +1 -0
- package/dist/core/src/PlanetCore.d.ts +116 -0
- package/dist/core/src/PlanetCore.d.ts.map +1 -0
- package/dist/core/src/Route.d.ts +13 -0
- package/dist/core/src/Route.d.ts.map +1 -0
- package/dist/core/src/Router.d.ts +168 -0
- package/dist/core/src/Router.d.ts.map +1 -0
- package/dist/core/src/ServiceProvider.d.ts +17 -0
- package/dist/core/src/ServiceProvider.d.ts.map +1 -0
- package/dist/core/src/exceptions/AuthenticationException.d.ts +5 -0
- package/dist/core/src/exceptions/AuthenticationException.d.ts.map +1 -0
- package/dist/core/src/exceptions/AuthorizationException.d.ts +5 -0
- package/dist/core/src/exceptions/AuthorizationException.d.ts.map +1 -0
- package/dist/core/src/exceptions/GravitoException.d.ts +15 -0
- package/dist/core/src/exceptions/GravitoException.d.ts.map +1 -0
- package/dist/core/src/exceptions/ModelNotFoundException.d.ts +7 -0
- package/dist/core/src/exceptions/ModelNotFoundException.d.ts.map +1 -0
- package/dist/core/src/exceptions/ValidationException.d.ts +15 -0
- package/dist/core/src/exceptions/ValidationException.d.ts.map +1 -0
- package/dist/core/src/exceptions/index.d.ts +6 -0
- package/dist/core/src/exceptions/index.d.ts.map +1 -0
- package/dist/core/src/helpers/Arr.d.ts +15 -0
- package/dist/core/src/helpers/Arr.d.ts.map +1 -0
- package/dist/core/src/helpers/Str.d.ts +19 -0
- package/dist/core/src/helpers/Str.d.ts.map +1 -0
- package/dist/core/src/helpers/data.d.ts +6 -0
- package/dist/core/src/helpers/data.d.ts.map +1 -0
- package/dist/core/src/helpers/errors.d.ts +13 -0
- package/dist/core/src/helpers/errors.d.ts.map +1 -0
- package/dist/core/src/helpers/response.d.ts +19 -0
- package/dist/core/src/helpers/response.d.ts.map +1 -0
- package/dist/core/src/helpers.d.ts +39 -0
- package/dist/core/src/helpers.d.ts.map +1 -0
- package/dist/core/src/http/CookieJar.d.ts +34 -0
- package/dist/core/src/http/CookieJar.d.ts.map +1 -0
- package/dist/core/src/http/middleware/ThrottleRequests.d.ts +13 -0
- package/dist/core/src/http/middleware/ThrottleRequests.d.ts.map +1 -0
- package/dist/core/src/index.d.ts +32 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/security/Encrypter.d.ts +25 -0
- package/dist/core/src/security/Encrypter.d.ts.map +1 -0
- package/dist/core/src/security/Hasher.d.ts +30 -0
- package/dist/core/src/security/Hasher.d.ts.map +1 -0
- package/dist/core/src/types/events.d.ts +95 -0
- package/dist/core/src/types/events.d.ts.map +1 -0
- package/dist/drivers/DatabaseDriver.d.ts +60 -0
- package/dist/drivers/DatabaseDriver.d.ts.map +1 -0
- package/dist/drivers/KafkaDriver.d.ts +134 -0
- package/dist/drivers/KafkaDriver.d.ts.map +1 -0
- package/dist/drivers/MemoryDriver.d.ts +45 -0
- package/dist/drivers/MemoryDriver.d.ts.map +1 -0
- package/dist/drivers/QueueDriver.d.ts +89 -0
- package/dist/drivers/QueueDriver.d.ts.map +1 -0
- package/dist/drivers/RedisDriver.d.ts +79 -0
- package/dist/drivers/RedisDriver.d.ts.map +1 -0
- package/dist/drivers/SQSDriver.d.ts +100 -0
- package/dist/drivers/SQSDriver.d.ts.map +1 -0
- package/dist/index.cjs +32101 -0
- package/dist/index.cjs.map +422 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +32095 -0
- package/dist/index.mjs.map +422 -0
- package/dist/orbit-db/src/DBService.d.ts +270 -0
- package/dist/orbit-db/src/DBService.d.ts.map +1 -0
- package/dist/orbit-db/src/EventBus.d.ts +53 -0
- package/dist/orbit-db/src/EventBus.d.ts.map +1 -0
- package/dist/orbit-db/src/MigrationDriver.d.ts +55 -0
- package/dist/orbit-db/src/MigrationDriver.d.ts.map +1 -0
- package/dist/orbit-db/src/Model.d.ts +564 -0
- package/dist/orbit-db/src/Model.d.ts.map +1 -0
- package/dist/orbit-db/src/ModelCollection.d.ts +35 -0
- package/dist/orbit-db/src/ModelCollection.d.ts.map +1 -0
- package/dist/orbit-db/src/index.d.ts +34 -0
- package/dist/orbit-db/src/index.d.ts.map +1 -0
- package/dist/orbit-db/src/types.d.ts +146 -0
- package/dist/orbit-db/src/types.d.ts.map +1 -0
- package/dist/orbit-queue/src/Consumer.d.ts +67 -0
- package/dist/orbit-queue/src/Consumer.d.ts.map +1 -0
- package/dist/orbit-queue/src/Job.d.ts +76 -0
- package/dist/orbit-queue/src/Job.d.ts.map +1 -0
- package/dist/orbit-queue/src/OrbitQueue.d.ts +74 -0
- package/dist/orbit-queue/src/OrbitQueue.d.ts.map +1 -0
- package/dist/orbit-queue/src/QueueManager.d.ts +86 -0
- package/dist/orbit-queue/src/QueueManager.d.ts.map +1 -0
- package/dist/orbit-queue/src/Queueable.d.ts +63 -0
- package/dist/orbit-queue/src/Queueable.d.ts.map +1 -0
- package/dist/orbit-queue/src/Worker.d.ts +48 -0
- package/dist/orbit-queue/src/Worker.d.ts.map +1 -0
- package/dist/orbit-queue/src/drivers/DatabaseDriver.d.ts +60 -0
- package/dist/orbit-queue/src/drivers/DatabaseDriver.d.ts.map +1 -0
- package/dist/orbit-queue/src/drivers/KafkaDriver.d.ts +134 -0
- package/dist/orbit-queue/src/drivers/KafkaDriver.d.ts.map +1 -0
- package/dist/orbit-queue/src/drivers/MemoryDriver.d.ts +45 -0
- package/dist/orbit-queue/src/drivers/MemoryDriver.d.ts.map +1 -0
- package/dist/orbit-queue/src/drivers/QueueDriver.d.ts +89 -0
- package/dist/orbit-queue/src/drivers/QueueDriver.d.ts.map +1 -0
- package/dist/orbit-queue/src/drivers/RedisDriver.d.ts +79 -0
- package/dist/orbit-queue/src/drivers/RedisDriver.d.ts.map +1 -0
- package/dist/orbit-queue/src/drivers/SQSDriver.d.ts +100 -0
- package/dist/orbit-queue/src/drivers/SQSDriver.d.ts.map +1 -0
- package/dist/orbit-queue/src/index.d.ts +45 -0
- package/dist/orbit-queue/src/index.d.ts.map +1 -0
- package/dist/orbit-queue/src/serializers/ClassNameSerializer.d.ts +46 -0
- package/dist/orbit-queue/src/serializers/ClassNameSerializer.d.ts.map +1 -0
- package/dist/orbit-queue/src/serializers/JobSerializer.d.ts +36 -0
- package/dist/orbit-queue/src/serializers/JobSerializer.d.ts.map +1 -0
- package/dist/orbit-queue/src/serializers/JsonSerializer.d.ts +32 -0
- package/dist/orbit-queue/src/serializers/JsonSerializer.d.ts.map +1 -0
- package/dist/orbit-queue/src/types.d.ts +85 -0
- package/dist/orbit-queue/src/types.d.ts.map +1 -0
- package/dist/serializers/ClassNameSerializer.d.ts +46 -0
- package/dist/serializers/ClassNameSerializer.d.ts.map +1 -0
- package/dist/serializers/JobSerializer.d.ts +36 -0
- package/dist/serializers/JobSerializer.d.ts.map +1 -0
- package/dist/serializers/JsonSerializer.d.ts +32 -0
- package/dist/serializers/JsonSerializer.d.ts.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { SerializedJob, TopicOptions } from '../types';
|
|
2
|
+
import type { QueueDriver } from './QueueDriver';
|
|
3
|
+
/**
|
|
4
|
+
* Kafka driver configuration.
|
|
5
|
+
*/
|
|
6
|
+
export interface KafkaDriverConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Kafka client instance (kafkajs).
|
|
9
|
+
*/
|
|
10
|
+
client: {
|
|
11
|
+
producer: () => {
|
|
12
|
+
connect: () => Promise<void>;
|
|
13
|
+
send: (args: {
|
|
14
|
+
topic: string;
|
|
15
|
+
messages: Array<{
|
|
16
|
+
key?: string;
|
|
17
|
+
value: string;
|
|
18
|
+
}>;
|
|
19
|
+
}) => Promise<void>;
|
|
20
|
+
disconnect: () => Promise<void>;
|
|
21
|
+
};
|
|
22
|
+
admin: () => {
|
|
23
|
+
connect: () => Promise<void>;
|
|
24
|
+
createTopics: (args: {
|
|
25
|
+
topics: Array<{
|
|
26
|
+
topic: string;
|
|
27
|
+
numPartitions?: number;
|
|
28
|
+
replicationFactor?: number;
|
|
29
|
+
}>;
|
|
30
|
+
}) => Promise<void>;
|
|
31
|
+
deleteTopics: (args: {
|
|
32
|
+
topics: string[];
|
|
33
|
+
}) => Promise<void>;
|
|
34
|
+
disconnect: () => Promise<void>;
|
|
35
|
+
};
|
|
36
|
+
consumer: (args: {
|
|
37
|
+
groupId: string;
|
|
38
|
+
}) => {
|
|
39
|
+
connect: () => Promise<void>;
|
|
40
|
+
subscribe: (args: {
|
|
41
|
+
topics: string[];
|
|
42
|
+
}) => Promise<void>;
|
|
43
|
+
run: (args: {
|
|
44
|
+
eachMessage: (args: {
|
|
45
|
+
topic: string;
|
|
46
|
+
partition: number;
|
|
47
|
+
message: {
|
|
48
|
+
key?: Buffer;
|
|
49
|
+
value: Buffer;
|
|
50
|
+
offset: string;
|
|
51
|
+
};
|
|
52
|
+
}) => Promise<void>;
|
|
53
|
+
}) => Promise<void>;
|
|
54
|
+
disconnect: () => Promise<void>;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Consumer group ID (for consuming messages).
|
|
59
|
+
*/
|
|
60
|
+
consumerGroupId?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Kafka Driver
|
|
64
|
+
*
|
|
65
|
+
* Uses Apache Kafka as the queue backend.
|
|
66
|
+
* Supports topic management, consumer groups, and batch operations.
|
|
67
|
+
*
|
|
68
|
+
* Requires `kafkajs`.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* import { Kafka } from 'kafkajs'
|
|
73
|
+
*
|
|
74
|
+
* const kafka = new Kafka({
|
|
75
|
+
* brokers: ['localhost:9092'],
|
|
76
|
+
* clientId: 'gravito-app'
|
|
77
|
+
* })
|
|
78
|
+
*
|
|
79
|
+
* const driver = new KafkaDriver({ client: kafka, consumerGroupId: 'workers' })
|
|
80
|
+
* await driver.push('default', serializedJob)
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare class KafkaDriver implements QueueDriver {
|
|
84
|
+
private client;
|
|
85
|
+
private consumerGroupId;
|
|
86
|
+
private producer?;
|
|
87
|
+
private admin?;
|
|
88
|
+
constructor(config: KafkaDriverConfig);
|
|
89
|
+
/**
|
|
90
|
+
* Ensure the producer is connected.
|
|
91
|
+
*/
|
|
92
|
+
private ensureProducer;
|
|
93
|
+
/**
|
|
94
|
+
* Ensure the admin client is connected.
|
|
95
|
+
*/
|
|
96
|
+
private ensureAdmin;
|
|
97
|
+
/**
|
|
98
|
+
* Push a job to a topic.
|
|
99
|
+
*/
|
|
100
|
+
push(queue: string, job: SerializedJob): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Pop is not supported for Kafka.
|
|
103
|
+
*
|
|
104
|
+
* Note: Kafka uses a push-based model, so you should use `subscribe()`.
|
|
105
|
+
*/
|
|
106
|
+
pop(_queue: string): Promise<SerializedJob | null>;
|
|
107
|
+
/**
|
|
108
|
+
* Kafka does not provide a direct queue size.
|
|
109
|
+
*
|
|
110
|
+
* Returns 0; use Kafka tooling/metrics for lag/size insights.
|
|
111
|
+
*/
|
|
112
|
+
size(_queue: string): Promise<number>;
|
|
113
|
+
/**
|
|
114
|
+
* Clear a queue by deleting the topic.
|
|
115
|
+
*/
|
|
116
|
+
clear(queue: string): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Push multiple jobs.
|
|
119
|
+
*/
|
|
120
|
+
pushMany(queue: string, jobs: SerializedJob[]): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Create a topic.
|
|
123
|
+
*/
|
|
124
|
+
createTopic(topic: string, options?: TopicOptions): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Delete a topic.
|
|
127
|
+
*/
|
|
128
|
+
deleteTopic(topic: string): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Subscribe to a topic (push-based model).
|
|
131
|
+
*/
|
|
132
|
+
subscribe(queue: string, callback: (job: SerializedJob) => Promise<void>): Promise<void>;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=KafkaDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KafkaDriver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/KafkaDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { SerializedJob } from '../types';
|
|
2
|
+
import type { QueueDriver } from './QueueDriver';
|
|
3
|
+
/**
|
|
4
|
+
* Memory Driver
|
|
5
|
+
*
|
|
6
|
+
* In-memory driver for development and testing.
|
|
7
|
+
* All data is stored in memory and will be lost when the process restarts.
|
|
8
|
+
*
|
|
9
|
+
* Zero-config: works out of the box.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const driver = new MemoryDriver()
|
|
14
|
+
* await driver.push('default', serializedJob)
|
|
15
|
+
* const job = await driver.pop('default')
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare class MemoryDriver implements QueueDriver {
|
|
19
|
+
private queues;
|
|
20
|
+
/**
|
|
21
|
+
* Push a job to a queue.
|
|
22
|
+
*/
|
|
23
|
+
push(queue: string, job: SerializedJob): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Pop a job from a queue (FIFO).
|
|
26
|
+
*/
|
|
27
|
+
pop(queue: string): Promise<SerializedJob | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Get queue size.
|
|
30
|
+
*/
|
|
31
|
+
size(queue: string): Promise<number>;
|
|
32
|
+
/**
|
|
33
|
+
* Clear a queue.
|
|
34
|
+
*/
|
|
35
|
+
clear(queue: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Push multiple jobs.
|
|
38
|
+
*/
|
|
39
|
+
pushMany(queue: string, jobs: SerializedJob[]): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Pop multiple jobs.
|
|
42
|
+
*/
|
|
43
|
+
popMany(queue: string, count: number): Promise<SerializedJob[]>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=MemoryDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,MAAM,CAAqC;IAEnD;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5D;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmBvD;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAYtE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { SerializedJob, TopicOptions } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Queue driver interface.
|
|
4
|
+
*
|
|
5
|
+
* All queue drivers must implement this interface.
|
|
6
|
+
* Defines basic queue operations plus optional enterprise-grade capabilities.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* class MyDriver implements QueueDriver {
|
|
11
|
+
* async push(queue: string, job: SerializedJob): Promise<void> {
|
|
12
|
+
* // push a job
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* async pop(queue: string): Promise<SerializedJob | null> {
|
|
16
|
+
* // pop a job
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* async size(queue: string): Promise<number> {
|
|
20
|
+
* // queue size
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* async clear(queue: string): Promise<void> {
|
|
24
|
+
* // clear queue
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export interface QueueDriver {
|
|
30
|
+
/**
|
|
31
|
+
* Push a job to a queue.
|
|
32
|
+
* @param queue - Queue name
|
|
33
|
+
* @param job - Serialized job
|
|
34
|
+
*/
|
|
35
|
+
push(queue: string, job: SerializedJob): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Pop a job from a queue (non-blocking).
|
|
38
|
+
* @param queue - Queue name
|
|
39
|
+
* @returns Serialized job, or `null` if the queue is empty
|
|
40
|
+
*/
|
|
41
|
+
pop(queue: string): Promise<SerializedJob | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Get queue size.
|
|
44
|
+
* @param queue - Queue name
|
|
45
|
+
* @returns Number of jobs in the queue
|
|
46
|
+
*/
|
|
47
|
+
size(queue: string): Promise<number>;
|
|
48
|
+
/**
|
|
49
|
+
* Clear a queue.
|
|
50
|
+
* @param queue - Queue name
|
|
51
|
+
*/
|
|
52
|
+
clear(queue: string): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Push multiple jobs (optional, higher throughput).
|
|
55
|
+
* @param queue - Queue name
|
|
56
|
+
* @param jobs - Serialized job array
|
|
57
|
+
*/
|
|
58
|
+
pushMany?(queue: string, jobs: SerializedJob[]): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Pop multiple jobs (optional, higher throughput).
|
|
61
|
+
* @param queue - Queue name
|
|
62
|
+
* @param count - Max number of jobs to pop
|
|
63
|
+
* @returns Serialized job array
|
|
64
|
+
*/
|
|
65
|
+
popMany?(queue: string, count: number): Promise<SerializedJob[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Acknowledge a message (enterprise capability, e.g. Kafka/SQS).
|
|
68
|
+
* @param messageId - Message ID
|
|
69
|
+
*/
|
|
70
|
+
acknowledge?(messageId: string): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Subscribe to a queue (push-based model, e.g. Kafka/SQS).
|
|
73
|
+
* @param queue - Queue name
|
|
74
|
+
* @param callback - Callback to process jobs
|
|
75
|
+
*/
|
|
76
|
+
subscribe?(queue: string, callback: (job: SerializedJob) => Promise<void>): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Create a topic (Kafka, etc.).
|
|
79
|
+
* @param topic - Topic name
|
|
80
|
+
* @param options - Topic options
|
|
81
|
+
*/
|
|
82
|
+
createTopic?(topic: string, options?: TopicOptions): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Delete a topic (Kafka, etc.).
|
|
85
|
+
* @param topic - Topic name
|
|
86
|
+
*/
|
|
87
|
+
deleteTopic?(topic: string): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=QueueDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueueDriver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/QueueDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtD;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAEjD;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAEpC;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEnC;;;;OAIG;IACH,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9D;;;;;OAKG;IACH,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAEhE;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9C;;;;OAIG;IACH,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzF;;;;OAIG;IACH,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAElE;;;OAGG;IACH,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { SerializedJob } from '../types';
|
|
2
|
+
import type { QueueDriver } from './QueueDriver';
|
|
3
|
+
/**
|
|
4
|
+
* Redis driver configuration.
|
|
5
|
+
*/
|
|
6
|
+
export interface RedisDriverConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Redis client instance (ioredis or node-redis).
|
|
9
|
+
*/
|
|
10
|
+
client: {
|
|
11
|
+
lpush: (key: string, ...values: string[]) => Promise<number>;
|
|
12
|
+
rpop: (key: string) => Promise<string | null>;
|
|
13
|
+
llen: (key: string) => Promise<number>;
|
|
14
|
+
del: (key: string) => Promise<number>;
|
|
15
|
+
lpushx?: (key: string, ...values: string[]) => Promise<number>;
|
|
16
|
+
rpoplpush?: (src: string, dst: string) => Promise<string | null>;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Key prefix (default: `queue:`).
|
|
21
|
+
*/
|
|
22
|
+
prefix?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Redis Driver
|
|
26
|
+
*
|
|
27
|
+
* Uses Redis as the queue backend.
|
|
28
|
+
* Implements FIFO via Redis Lists (LPUSH/RPOP).
|
|
29
|
+
*
|
|
30
|
+
* Requires `ioredis` or `redis`.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* import Redis from 'ioredis'
|
|
35
|
+
*
|
|
36
|
+
* const redis = new Redis('redis://localhost:6379')
|
|
37
|
+
* const driver = new RedisDriver({ client: redis })
|
|
38
|
+
*
|
|
39
|
+
* await driver.push('default', serializedJob)
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare class RedisDriver implements QueueDriver {
|
|
43
|
+
private prefix;
|
|
44
|
+
private client;
|
|
45
|
+
constructor(config: RedisDriverConfig);
|
|
46
|
+
/**
|
|
47
|
+
* Get full Redis key for a queue.
|
|
48
|
+
*/
|
|
49
|
+
private getKey;
|
|
50
|
+
/**
|
|
51
|
+
* Push a job (LPUSH).
|
|
52
|
+
*/
|
|
53
|
+
push(queue: string, job: SerializedJob): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Pop a job (RPOP, FIFO).
|
|
56
|
+
*/
|
|
57
|
+
pop(queue: string): Promise<SerializedJob | null>;
|
|
58
|
+
/**
|
|
59
|
+
* Parse Redis payload.
|
|
60
|
+
*/
|
|
61
|
+
private parsePayload;
|
|
62
|
+
/**
|
|
63
|
+
* Get queue size.
|
|
64
|
+
*/
|
|
65
|
+
size(queue: string): Promise<number>;
|
|
66
|
+
/**
|
|
67
|
+
* Clear a queue.
|
|
68
|
+
*/
|
|
69
|
+
clear(queue: string): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Push multiple jobs.
|
|
72
|
+
*/
|
|
73
|
+
pushMany(queue: string, jobs: SerializedJob[]): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Pop multiple jobs.
|
|
76
|
+
*/
|
|
77
|
+
popMany(queue: string, count: number): Promise<SerializedJob[]>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=RedisDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,MAAM,EAAE;QACN,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;QAC5D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;QAC7C,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;QACtC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;QACrC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9D,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;QAChE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IAED;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,EAAE,iBAAiB;IAWrC;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B5D;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA4BvD;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBnE;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAetE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { SerializedJob } from '../types';
|
|
2
|
+
import type { QueueDriver } from './QueueDriver';
|
|
3
|
+
/**
|
|
4
|
+
* SQS driver configuration.
|
|
5
|
+
*/
|
|
6
|
+
export interface SQSDriverConfig {
|
|
7
|
+
/**
|
|
8
|
+
* SQS client instance (`@aws-sdk/client-sqs`).
|
|
9
|
+
*/
|
|
10
|
+
client: {
|
|
11
|
+
send: (command: unknown) => Promise<{
|
|
12
|
+
MessageId?: string;
|
|
13
|
+
Messages?: Array<{
|
|
14
|
+
MessageId?: string;
|
|
15
|
+
ReceiptHandle?: string;
|
|
16
|
+
Body?: string;
|
|
17
|
+
}>;
|
|
18
|
+
}>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Queue URL prefix (used to build full queue URLs).
|
|
22
|
+
*/
|
|
23
|
+
queueUrlPrefix?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Visibility timeout (seconds, default: 30).
|
|
26
|
+
*/
|
|
27
|
+
visibilityTimeout?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Long-polling duration (seconds, default: 20).
|
|
30
|
+
*/
|
|
31
|
+
waitTimeSeconds?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* SQS Driver
|
|
35
|
+
*
|
|
36
|
+
* Uses AWS SQS as the queue backend.
|
|
37
|
+
* Supports standard/FIFO queues, long polling, DLQ setups, etc.
|
|
38
|
+
*
|
|
39
|
+
* Requires `@aws-sdk/client-sqs`.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* import { SQSClient } from '@aws-sdk/client-sqs'
|
|
44
|
+
*
|
|
45
|
+
* const sqs = new SQSClient({
|
|
46
|
+
* region: 'us-east-1',
|
|
47
|
+
* credentials: {
|
|
48
|
+
* accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
49
|
+
* secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
50
|
+
* }
|
|
51
|
+
* })
|
|
52
|
+
*
|
|
53
|
+
* const driver = new SQSDriver({ client: sqs })
|
|
54
|
+
* await driver.push('default', serializedJob)
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare class SQSDriver implements QueueDriver {
|
|
58
|
+
private client;
|
|
59
|
+
private queueUrlPrefix;
|
|
60
|
+
private visibilityTimeout;
|
|
61
|
+
private waitTimeSeconds;
|
|
62
|
+
private queueUrls;
|
|
63
|
+
constructor(config: SQSDriverConfig);
|
|
64
|
+
/**
|
|
65
|
+
* Resolve the full queue URL.
|
|
66
|
+
*/
|
|
67
|
+
private getQueueUrl;
|
|
68
|
+
/**
|
|
69
|
+
* Push a job to SQS.
|
|
70
|
+
*/
|
|
71
|
+
push(queue: string, job: SerializedJob): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Pop a job (long polling).
|
|
74
|
+
*/
|
|
75
|
+
pop(queue: string): Promise<SerializedJob | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Get queue size (approximate).
|
|
78
|
+
*/
|
|
79
|
+
size(queue: string): Promise<number>;
|
|
80
|
+
/**
|
|
81
|
+
* Clear a queue by receiving and deleting messages.
|
|
82
|
+
*
|
|
83
|
+
* Note: SQS does not provide a direct "purge" API via this wrapper. This method will
|
|
84
|
+
* keep receiving and deleting messages until the queue is empty.
|
|
85
|
+
*/
|
|
86
|
+
clear(queue: string): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Push multiple jobs.
|
|
89
|
+
*/
|
|
90
|
+
pushMany(queue: string, jobs: SerializedJob[]): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Acknowledge is not supported via messageId.
|
|
93
|
+
*/
|
|
94
|
+
acknowledge(_messageId: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Delete a message (acknowledge processing completion).
|
|
97
|
+
*/
|
|
98
|
+
deleteMessage(queue: string, receiptHandle: string): Promise<void>;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=SQSDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQSDriver.d.ts","sourceRoot":"","sources":["../../../../src/drivers/SQSDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;YAClC,SAAS,CAAC,EAAE,MAAM,CAAA;YAClB,QAAQ,CAAC,EAAE,KAAK,CAAC;gBACf,SAAS,CAAC,EAAE,MAAM,CAAA;gBAClB,aAAa,CAAC,EAAE,MAAM,CAAA;gBACtB,IAAI,CAAC,EAAE,MAAM,CAAA;aACd,CAAC,CAAA;SACH,CAAC,CAAA;KACH,CAAA;IAED;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,SAAU,YAAW,WAAW;IAC3C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,SAAS,CAA4B;gBAEjC,MAAM,EAAE,eAAe;IAanC;;OAEG;YACW,WAAW;IAiBzB;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B5D;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAkCvD;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB1C;;;;;OAKG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzC;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCnE;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAWzE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @gravito/orbit-queue
|
|
3
|
+
*
|
|
4
|
+
* Lightweight, high-performance queue system inspired by Laravel while keeping Gravito's core values.
|
|
5
|
+
* Supports multiple storage drivers, embedded/standalone consumer modes, and multiple job serialization strategies.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { OrbitQueue, Job } from '@gravito/orbit-queue'
|
|
10
|
+
*
|
|
11
|
+
* // Create a Job
|
|
12
|
+
* class SendEmail extends Job {
|
|
13
|
+
* async handle() {
|
|
14
|
+
* // handle logic
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* // Push a Job
|
|
19
|
+
* await queue.push(new SendEmail())
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export type { ConsumerOptions } from './Consumer';
|
|
23
|
+
export { Consumer } from './Consumer';
|
|
24
|
+
export type { DatabaseDriverConfig } from './drivers/DatabaseDriver';
|
|
25
|
+
export { DatabaseDriver } from './drivers/DatabaseDriver';
|
|
26
|
+
export type { KafkaDriverConfig } from './drivers/KafkaDriver';
|
|
27
|
+
export { KafkaDriver } from './drivers/KafkaDriver';
|
|
28
|
+
export { MemoryDriver } from './drivers/MemoryDriver';
|
|
29
|
+
export type { QueueDriver } from './drivers/QueueDriver';
|
|
30
|
+
export type { RedisDriverConfig } from './drivers/RedisDriver';
|
|
31
|
+
export { RedisDriver } from './drivers/RedisDriver';
|
|
32
|
+
export type { SQSDriverConfig } from './drivers/SQSDriver';
|
|
33
|
+
export { SQSDriver } from './drivers/SQSDriver';
|
|
34
|
+
export { Job } from './Job';
|
|
35
|
+
export type { OrbitQueueOptions } from './OrbitQueue';
|
|
36
|
+
export { OrbitQueue } from './OrbitQueue';
|
|
37
|
+
export type { Queueable } from './Queueable';
|
|
38
|
+
export { QueueManager } from './QueueManager';
|
|
39
|
+
export { ClassNameSerializer } from './serializers/ClassNameSerializer';
|
|
40
|
+
export type { JobSerializer } from './serializers/JobSerializer';
|
|
41
|
+
export { JsonSerializer } from './serializers/JsonSerializer';
|
|
42
|
+
export type { QueueConfig, QueueConnectionConfig, SerializedJob, TopicOptions, } from './types';
|
|
43
|
+
export type { WorkerOptions } from './Worker';
|
|
44
|
+
export { Worker } from './Worker';
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAErD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAEvE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,YAAY,GACb,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Job } from '../Job';
|
|
2
|
+
import type { SerializedJob } from '../types';
|
|
3
|
+
import type { JobSerializer } from './JobSerializer';
|
|
4
|
+
/**
|
|
5
|
+
* Class name serializer (Laravel-style).
|
|
6
|
+
*
|
|
7
|
+
* Stores the class name and properties, then recreates an instance at runtime.
|
|
8
|
+
* This is the recommended serializer because it can restore class instances correctly.
|
|
9
|
+
*
|
|
10
|
+
* Requirement: Job classes must be dynamically loadable (by class name).
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const serializer = new ClassNameSerializer()
|
|
15
|
+
* const serialized = serializer.serialize(new SendEmail('user@example.com'))
|
|
16
|
+
* // serialized.data contains class name and properties
|
|
17
|
+
*
|
|
18
|
+
* const job = serializer.deserialize(serialized)
|
|
19
|
+
* // job is an instance of SendEmail
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class ClassNameSerializer implements JobSerializer {
|
|
23
|
+
/**
|
|
24
|
+
* Job class registry (for resolving classes by name).
|
|
25
|
+
*/
|
|
26
|
+
private jobClasses;
|
|
27
|
+
/**
|
|
28
|
+
* Register a Job class.
|
|
29
|
+
* @param jobClass - Job class
|
|
30
|
+
*/
|
|
31
|
+
register(jobClass: new (...args: unknown[]) => Job): void;
|
|
32
|
+
/**
|
|
33
|
+
* Register multiple Job classes.
|
|
34
|
+
* @param jobClasses - Job class array
|
|
35
|
+
*/
|
|
36
|
+
registerMany(jobClasses: Array<new (...args: unknown[]) => Job>): void;
|
|
37
|
+
/**
|
|
38
|
+
* Serialize a Job.
|
|
39
|
+
*/
|
|
40
|
+
serialize(job: Job): SerializedJob;
|
|
41
|
+
/**
|
|
42
|
+
* Deserialize a Job.
|
|
43
|
+
*/
|
|
44
|
+
deserialize(serialized: SerializedJob): Job;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ClassNameSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassNameSerializer.d.ts","sourceRoot":"","sources":["../../../../src/serializers/ClassNameSerializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD;;OAEG;IACH,OAAO,CAAC,UAAU,CAAqD;IAEvE;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,GAAG,GAAG,IAAI;IAIzD;;;OAGG;IACH,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI;IAMtE;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,aAAa;IA8BlC;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,aAAa,GAAG,GAAG;CAqC5C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Job } from '../Job';
|
|
2
|
+
import type { SerializedJob } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Job serializer interface.
|
|
5
|
+
*
|
|
6
|
+
* Responsible for serializing and deserializing jobs.
|
|
7
|
+
* Supports multiple strategies (JSON, class-name, etc.).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* class MySerializer implements JobSerializer {
|
|
12
|
+
* serialize(job: Job): SerializedJob {
|
|
13
|
+
* // serialization logic
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* deserialize(serialized: SerializedJob): Job {
|
|
17
|
+
* // deserialization logic
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export interface JobSerializer {
|
|
23
|
+
/**
|
|
24
|
+
* Serialize a job.
|
|
25
|
+
* @param job - Job instance
|
|
26
|
+
* @returns Serialized job payload
|
|
27
|
+
*/
|
|
28
|
+
serialize(job: Job): SerializedJob;
|
|
29
|
+
/**
|
|
30
|
+
* Deserialize a job.
|
|
31
|
+
* @param serialized - Serialized job payload
|
|
32
|
+
* @returns Job instance
|
|
33
|
+
*/
|
|
34
|
+
deserialize(serialized: SerializedJob): Job;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=JobSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobSerializer.d.ts","sourceRoot":"","sources":["../../../../src/serializers/JobSerializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,aAAa,CAAA;IAElC;;;;OAIG;IACH,WAAW,CAAC,UAAU,EAAE,aAAa,GAAG,GAAG,CAAA;CAC5C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Job } from '../Job';
|
|
2
|
+
import type { SerializedJob } from '../types';
|
|
3
|
+
import type { JobSerializer } from './JobSerializer';
|
|
4
|
+
/**
|
|
5
|
+
* JSON Serializer
|
|
6
|
+
*
|
|
7
|
+
* Serializes jobs using JSON.
|
|
8
|
+
* Suitable for simple scenarios where you only need to persist plain properties.
|
|
9
|
+
*
|
|
10
|
+
* Limitation: cannot restore class instances, functions, or complex objects.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const serializer = new JsonSerializer()
|
|
15
|
+
* const serialized = serializer.serialize(job)
|
|
16
|
+
* const job = serializer.deserialize(serialized)
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class JsonSerializer implements JobSerializer {
|
|
20
|
+
/**
|
|
21
|
+
* Serialize a job.
|
|
22
|
+
*/
|
|
23
|
+
serialize(job: Job): SerializedJob;
|
|
24
|
+
/**
|
|
25
|
+
* Deserialize a job.
|
|
26
|
+
*
|
|
27
|
+
* Note: this implementation only restores properties and does not recreate class instances.
|
|
28
|
+
* For class instances, use `ClassNameSerializer`.
|
|
29
|
+
*/
|
|
30
|
+
deserialize(serialized: SerializedJob): Job;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=JsonSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonSerializer.d.ts","sourceRoot":"","sources":["../../../../src/serializers/JsonSerializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,aAAa;IAClD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,aAAa;IAiBlC;;;;;OAKG;IACH,WAAW,CAAC,UAAU,EAAE,aAAa,GAAG,GAAG;CAW5C"}
|