@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,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event system type definitions.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Listener interface.
|
|
6
|
+
*
|
|
7
|
+
* All event listeners must implement this interface.
|
|
8
|
+
*/
|
|
9
|
+
export interface Listener<TEvent extends Event = Event> {
|
|
10
|
+
/**
|
|
11
|
+
* Handle an event.
|
|
12
|
+
* @param event - Event instance
|
|
13
|
+
*/
|
|
14
|
+
handle(event: TEvent): Promise<void> | void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Marker interface for listeners that should be queued.
|
|
18
|
+
*
|
|
19
|
+
* Listeners implementing this interface can be dispatched asynchronously via a queue.
|
|
20
|
+
*/
|
|
21
|
+
export interface ShouldQueue {
|
|
22
|
+
/**
|
|
23
|
+
* Queue name (optional).
|
|
24
|
+
*/
|
|
25
|
+
queue?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Connection name (optional).
|
|
28
|
+
*/
|
|
29
|
+
connection?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Delay before execution (seconds).
|
|
32
|
+
*/
|
|
33
|
+
delay?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Marker interface for events that should be broadcast.
|
|
37
|
+
*
|
|
38
|
+
* Events implementing this interface can be automatically broadcast to clients.
|
|
39
|
+
*/
|
|
40
|
+
export interface ShouldBroadcast {
|
|
41
|
+
/**
|
|
42
|
+
* Define the broadcast channel.
|
|
43
|
+
* @returns Channel name or channel object
|
|
44
|
+
*/
|
|
45
|
+
broadcastOn(): string | Channel;
|
|
46
|
+
/**
|
|
47
|
+
* Define broadcast payload (optional).
|
|
48
|
+
* If omitted, public event properties will be used.
|
|
49
|
+
* @returns Broadcast payload
|
|
50
|
+
*/
|
|
51
|
+
broadcastWith?(): Record<string, unknown>;
|
|
52
|
+
/**
|
|
53
|
+
* Define the broadcast event name (optional).
|
|
54
|
+
* If omitted, the event class name will be used.
|
|
55
|
+
* @returns Event name
|
|
56
|
+
*/
|
|
57
|
+
broadcastAs?(): string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Channel interface.
|
|
61
|
+
*/
|
|
62
|
+
export interface Channel {
|
|
63
|
+
/**
|
|
64
|
+
* Channel name.
|
|
65
|
+
*/
|
|
66
|
+
name: string;
|
|
67
|
+
/**
|
|
68
|
+
* Channel type.
|
|
69
|
+
*/
|
|
70
|
+
type: 'public' | 'private' | 'presence';
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Base event class.
|
|
74
|
+
*
|
|
75
|
+
* All events should extend this class.
|
|
76
|
+
*/
|
|
77
|
+
export declare abstract class Event {
|
|
78
|
+
/**
|
|
79
|
+
* Whether this event should be broadcast.
|
|
80
|
+
*/
|
|
81
|
+
shouldBroadcast(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Get broadcast channel.
|
|
84
|
+
*/
|
|
85
|
+
getBroadcastChannel(): string | Channel | null;
|
|
86
|
+
/**
|
|
87
|
+
* Get broadcast payload.
|
|
88
|
+
*/
|
|
89
|
+
getBroadcastData(): Record<string, unknown>;
|
|
90
|
+
/**
|
|
91
|
+
* Get broadcast event name.
|
|
92
|
+
*/
|
|
93
|
+
getBroadcastEventName(): string;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../../core/src/types/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,WAAW,QAAQ,CAAC,MAAM,SAAS,KAAK,GAAG,KAAK;IACpD;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC5C;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,WAAW,IAAI,MAAM,GAAG,OAAO,CAAA;IAE/B;;;;OAIG;IACH,aAAa,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEzC;;;;OAIG;IACH,WAAW,CAAC,IAAI,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAA;CACxC;AAED;;;;GAIG;AACH,8BAAsB,KAAK;IACzB;;OAEG;IACH,eAAe,IAAI,OAAO;IAO1B;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,OAAO,GAAG,IAAI;IAO9C;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkB3C;;OAEG;IACH,qBAAqB,IAAI,MAAM;CAUhC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { DBService } from '@gravito/orbit-db';
|
|
2
|
+
import type { SerializedJob } from '../types';
|
|
3
|
+
import type { QueueDriver } from './QueueDriver';
|
|
4
|
+
/**
|
|
5
|
+
* Database driver configuration.
|
|
6
|
+
*/
|
|
7
|
+
export interface DatabaseDriverConfig {
|
|
8
|
+
/**
|
|
9
|
+
* Table name (default: `jobs`).
|
|
10
|
+
*/
|
|
11
|
+
table?: string;
|
|
12
|
+
/**
|
|
13
|
+
* DBService instance (from `orbit-db`).
|
|
14
|
+
* If not provided, it can be resolved from Context in OrbitQueue.
|
|
15
|
+
*/
|
|
16
|
+
dbService?: DBService;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Database Driver
|
|
20
|
+
*
|
|
21
|
+
* Uses a database as the queue backend.
|
|
22
|
+
* Reuses the `orbit-db` connection instead of creating a new connection.
|
|
23
|
+
*
|
|
24
|
+
* Requires `@gravito/orbit-db` to be installed and configured.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Get DBService from Context
|
|
29
|
+
* const dbService = c.get('db')
|
|
30
|
+
* const driver = new DatabaseDriver({ dbService, table: 'jobs' })
|
|
31
|
+
*
|
|
32
|
+
* await driver.push('default', serializedJob)
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class DatabaseDriver implements QueueDriver {
|
|
36
|
+
private tableName;
|
|
37
|
+
private dbService;
|
|
38
|
+
constructor(config: DatabaseDriverConfig);
|
|
39
|
+
/**
|
|
40
|
+
* Push a job to a queue.
|
|
41
|
+
*/
|
|
42
|
+
push(queue: string, job: SerializedJob): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Pop a job from the queue (FIFO, with delay support).
|
|
45
|
+
*/
|
|
46
|
+
pop(queue: string): Promise<SerializedJob | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Get queue size.
|
|
49
|
+
*/
|
|
50
|
+
size(queue: string): Promise<number>;
|
|
51
|
+
/**
|
|
52
|
+
* Clear a queue.
|
|
53
|
+
*/
|
|
54
|
+
clear(queue: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Push multiple jobs.
|
|
57
|
+
*/
|
|
58
|
+
pushMany(queue: string, jobs: SerializedJob[]): Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=DatabaseDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseDriver.d.ts","sourceRoot":"","sources":["../../src/drivers/DatabaseDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAW;gBAEhB,MAAM,EAAE,oBAAoB;IAWxC;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5D;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAyEvD;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa1C;;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;CAoBpE"}
|
|
@@ -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"}
|