@gravito/stream 1.0.0-alpha.6 → 1.0.0-beta.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 +94 -5
- package/dist/index.cjs +2265 -31639
- package/dist/index.d.cts +1814 -0
- package/dist/index.d.ts +1805 -36
- package/dist/index.js +2700 -0
- package/package.json +11 -7
- package/dist/Consumer.d.ts +0 -67
- package/dist/Consumer.d.ts.map +0 -1
- package/dist/Job.d.ts +0 -76
- package/dist/Job.d.ts.map +0 -1
- package/dist/OrbitQueue.d.ts +0 -74
- package/dist/OrbitQueue.d.ts.map +0 -1
- package/dist/QueueManager.d.ts +0 -86
- package/dist/QueueManager.d.ts.map +0 -1
- package/dist/Queueable.d.ts +0 -63
- package/dist/Queueable.d.ts.map +0 -1
- package/dist/Worker.d.ts +0 -48
- package/dist/Worker.d.ts.map +0 -1
- package/dist/core/src/ConfigManager.d.ts +0 -26
- package/dist/core/src/ConfigManager.d.ts.map +0 -1
- package/dist/core/src/Container.d.ts +0 -39
- package/dist/core/src/Container.d.ts.map +0 -1
- package/dist/core/src/Event.d.ts +0 -6
- package/dist/core/src/Event.d.ts.map +0 -1
- package/dist/core/src/EventManager.d.ts +0 -124
- package/dist/core/src/EventManager.d.ts.map +0 -1
- package/dist/core/src/GlobalErrorHandlers.d.ts +0 -32
- package/dist/core/src/GlobalErrorHandlers.d.ts.map +0 -1
- package/dist/core/src/HookManager.d.ts +0 -29
- package/dist/core/src/HookManager.d.ts.map +0 -1
- package/dist/core/src/Listener.d.ts +0 -5
- package/dist/core/src/Listener.d.ts.map +0 -1
- package/dist/core/src/Logger.d.ts +0 -21
- package/dist/core/src/Logger.d.ts.map +0 -1
- package/dist/core/src/PlanetCore.d.ts +0 -116
- package/dist/core/src/PlanetCore.d.ts.map +0 -1
- package/dist/core/src/Route.d.ts +0 -13
- package/dist/core/src/Route.d.ts.map +0 -1
- package/dist/core/src/Router.d.ts +0 -168
- package/dist/core/src/Router.d.ts.map +0 -1
- package/dist/core/src/ServiceProvider.d.ts +0 -17
- package/dist/core/src/ServiceProvider.d.ts.map +0 -1
- package/dist/core/src/exceptions/AuthenticationException.d.ts +0 -5
- package/dist/core/src/exceptions/AuthenticationException.d.ts.map +0 -1
- package/dist/core/src/exceptions/AuthorizationException.d.ts +0 -5
- package/dist/core/src/exceptions/AuthorizationException.d.ts.map +0 -1
- package/dist/core/src/exceptions/GravitoException.d.ts +0 -15
- package/dist/core/src/exceptions/GravitoException.d.ts.map +0 -1
- package/dist/core/src/exceptions/ModelNotFoundException.d.ts +0 -7
- package/dist/core/src/exceptions/ModelNotFoundException.d.ts.map +0 -1
- package/dist/core/src/exceptions/ValidationException.d.ts +0 -15
- package/dist/core/src/exceptions/ValidationException.d.ts.map +0 -1
- package/dist/core/src/exceptions/index.d.ts +0 -6
- package/dist/core/src/exceptions/index.d.ts.map +0 -1
- package/dist/core/src/helpers/Arr.d.ts +0 -15
- package/dist/core/src/helpers/Arr.d.ts.map +0 -1
- package/dist/core/src/helpers/Str.d.ts +0 -19
- package/dist/core/src/helpers/Str.d.ts.map +0 -1
- package/dist/core/src/helpers/data.d.ts +0 -6
- package/dist/core/src/helpers/data.d.ts.map +0 -1
- package/dist/core/src/helpers/errors.d.ts +0 -13
- package/dist/core/src/helpers/errors.d.ts.map +0 -1
- package/dist/core/src/helpers/response.d.ts +0 -19
- package/dist/core/src/helpers/response.d.ts.map +0 -1
- package/dist/core/src/helpers.d.ts +0 -39
- package/dist/core/src/helpers.d.ts.map +0 -1
- package/dist/core/src/http/CookieJar.d.ts +0 -34
- package/dist/core/src/http/CookieJar.d.ts.map +0 -1
- package/dist/core/src/http/middleware/ThrottleRequests.d.ts +0 -13
- package/dist/core/src/http/middleware/ThrottleRequests.d.ts.map +0 -1
- package/dist/core/src/index.d.ts +0 -32
- package/dist/core/src/index.d.ts.map +0 -1
- package/dist/core/src/security/Encrypter.d.ts +0 -25
- package/dist/core/src/security/Encrypter.d.ts.map +0 -1
- package/dist/core/src/security/Hasher.d.ts +0 -30
- package/dist/core/src/security/Hasher.d.ts.map +0 -1
- package/dist/core/src/types/events.d.ts +0 -95
- package/dist/core/src/types/events.d.ts.map +0 -1
- package/dist/drivers/DatabaseDriver.d.ts +0 -60
- package/dist/drivers/DatabaseDriver.d.ts.map +0 -1
- package/dist/drivers/KafkaDriver.d.ts +0 -134
- package/dist/drivers/KafkaDriver.d.ts.map +0 -1
- package/dist/drivers/MemoryDriver.d.ts +0 -45
- package/dist/drivers/MemoryDriver.d.ts.map +0 -1
- package/dist/drivers/QueueDriver.d.ts +0 -89
- package/dist/drivers/QueueDriver.d.ts.map +0 -1
- package/dist/drivers/RedisDriver.d.ts +0 -79
- package/dist/drivers/RedisDriver.d.ts.map +0 -1
- package/dist/drivers/SQSDriver.d.ts +0 -100
- package/dist/drivers/SQSDriver.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -422
- package/dist/index.d.ts.map +0 -1
- package/dist/index.mjs +0 -32096
- package/dist/index.mjs.map +0 -422
- package/dist/orbit-db/src/DBService.d.ts +0 -270
- package/dist/orbit-db/src/DBService.d.ts.map +0 -1
- package/dist/orbit-db/src/EventBus.d.ts +0 -53
- package/dist/orbit-db/src/EventBus.d.ts.map +0 -1
- package/dist/orbit-db/src/MigrationDriver.d.ts +0 -55
- package/dist/orbit-db/src/MigrationDriver.d.ts.map +0 -1
- package/dist/orbit-db/src/Model.d.ts +0 -564
- package/dist/orbit-db/src/Model.d.ts.map +0 -1
- package/dist/orbit-db/src/ModelCollection.d.ts +0 -35
- package/dist/orbit-db/src/ModelCollection.d.ts.map +0 -1
- package/dist/orbit-db/src/index.d.ts +0 -34
- package/dist/orbit-db/src/index.d.ts.map +0 -1
- package/dist/orbit-db/src/types.d.ts +0 -146
- package/dist/orbit-db/src/types.d.ts.map +0 -1
- package/dist/orbit-queue/src/Consumer.d.ts +0 -67
- package/dist/orbit-queue/src/Consumer.d.ts.map +0 -1
- package/dist/orbit-queue/src/Job.d.ts +0 -76
- package/dist/orbit-queue/src/Job.d.ts.map +0 -1
- package/dist/orbit-queue/src/OrbitQueue.d.ts +0 -74
- package/dist/orbit-queue/src/OrbitQueue.d.ts.map +0 -1
- package/dist/orbit-queue/src/QueueManager.d.ts +0 -86
- package/dist/orbit-queue/src/QueueManager.d.ts.map +0 -1
- package/dist/orbit-queue/src/Queueable.d.ts +0 -63
- package/dist/orbit-queue/src/Queueable.d.ts.map +0 -1
- package/dist/orbit-queue/src/Worker.d.ts +0 -48
- package/dist/orbit-queue/src/Worker.d.ts.map +0 -1
- package/dist/orbit-queue/src/drivers/DatabaseDriver.d.ts +0 -60
- package/dist/orbit-queue/src/drivers/DatabaseDriver.d.ts.map +0 -1
- package/dist/orbit-queue/src/drivers/KafkaDriver.d.ts +0 -134
- package/dist/orbit-queue/src/drivers/KafkaDriver.d.ts.map +0 -1
- package/dist/orbit-queue/src/drivers/MemoryDriver.d.ts +0 -45
- package/dist/orbit-queue/src/drivers/MemoryDriver.d.ts.map +0 -1
- package/dist/orbit-queue/src/drivers/QueueDriver.d.ts +0 -89
- package/dist/orbit-queue/src/drivers/QueueDriver.d.ts.map +0 -1
- package/dist/orbit-queue/src/drivers/RedisDriver.d.ts +0 -79
- package/dist/orbit-queue/src/drivers/RedisDriver.d.ts.map +0 -1
- package/dist/orbit-queue/src/drivers/SQSDriver.d.ts +0 -100
- package/dist/orbit-queue/src/drivers/SQSDriver.d.ts.map +0 -1
- package/dist/orbit-queue/src/index.d.ts +0 -45
- package/dist/orbit-queue/src/index.d.ts.map +0 -1
- package/dist/orbit-queue/src/serializers/ClassNameSerializer.d.ts +0 -46
- package/dist/orbit-queue/src/serializers/ClassNameSerializer.d.ts.map +0 -1
- package/dist/orbit-queue/src/serializers/JobSerializer.d.ts +0 -36
- package/dist/orbit-queue/src/serializers/JobSerializer.d.ts.map +0 -1
- package/dist/orbit-queue/src/serializers/JsonSerializer.d.ts +0 -32
- package/dist/orbit-queue/src/serializers/JsonSerializer.d.ts.map +0 -1
- package/dist/orbit-queue/src/types.d.ts +0 -85
- package/dist/orbit-queue/src/types.d.ts.map +0 -1
- package/dist/serializers/ClassNameSerializer.d.ts +0 -46
- package/dist/serializers/ClassNameSerializer.d.ts.map +0 -1
- package/dist/serializers/JobSerializer.d.ts +0 -36
- package/dist/serializers/JobSerializer.d.ts.map +0 -1
- package/dist/serializers/JsonSerializer.d.ts +0 -32
- package/dist/serializers/JsonSerializer.d.ts.map +0 -1
- package/dist/types.d.ts +0 -85
- package/dist/types.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -7,10 +7,14 @@ Lightweight, high-performance queueing for Gravito. Supports multiple storage dr
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
- **Zero runtime overhead**: Thin wrappers that delegate to drivers
|
|
10
|
-
- **Multi-driver support**: Memory, Database, Redis, Kafka, SQS
|
|
10
|
+
- **Multi-driver support**: Memory, Database, Redis, Kafka, SQS, RabbitMQ
|
|
11
11
|
- **Modular**: Install only the driver you need (core < 50KB)
|
|
12
12
|
- **Embedded or standalone workers**: Run in-process during development or standalone in production
|
|
13
13
|
- **AI-friendly**: Strong typing, clear JSDoc, and predictable APIs
|
|
14
|
+
- **Custom Retry Strategies**: Built-in exponential backoff with per-job overrides
|
|
15
|
+
- **Dead Letter Queue (DLQ)**: Automatic handling of permanently failed jobs, with retry and clear operations
|
|
16
|
+
- **Priority Queues**: Assign priority (critical, high, low) to any job
|
|
17
|
+
- **Rate Limiting**: Control job consumption rate per queue (requires Redis)
|
|
14
18
|
|
|
15
19
|
## Installation
|
|
16
20
|
|
|
@@ -37,6 +41,24 @@ export class SendWelcomeEmail extends Job {
|
|
|
37
41
|
}
|
|
38
42
|
```
|
|
39
43
|
|
|
44
|
+
### 3. Rate Limit & Priority (Optional)
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
const queue = c.get('queue')
|
|
48
|
+
|
|
49
|
+
// High priority job
|
|
50
|
+
await queue.push(new SendWelcomeEmail(user.id))
|
|
51
|
+
.onQueue('emails')
|
|
52
|
+
.withPriority('high') // 'critical' | 'high' | 'default' | 'low'
|
|
53
|
+
|
|
54
|
+
// Configure rate limits in Consumer
|
|
55
|
+
const consumer = new Consumer(manager, {
|
|
56
|
+
rateLimits: {
|
|
57
|
+
emails: { limit: 10, window: 60 } // Max 10 jobs per minute
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
```
|
|
61
|
+
|
|
40
62
|
### 2. Enqueue a job
|
|
41
63
|
|
|
42
64
|
```typescript
|
|
@@ -72,17 +94,47 @@ const core = await PlanetCore.boot({
|
|
|
72
94
|
|
|
73
95
|
```typescript
|
|
74
96
|
import { OrbitStream } from '@gravito/stream'
|
|
75
|
-
|
|
97
|
+
|
|
98
|
+
// Create a database service adapter that implements DatabaseService interface
|
|
99
|
+
const dbService = {
|
|
100
|
+
execute: async (sql, bindings) => yourDbClient.query(sql, bindings),
|
|
101
|
+
transaction: async (callback) => yourDbClient.transaction(callback),
|
|
102
|
+
}
|
|
76
103
|
|
|
77
104
|
const core = await PlanetCore.boot({
|
|
78
105
|
orbits: [
|
|
79
|
-
OrbitDB.configure({ db: drizzleClient }),
|
|
80
106
|
OrbitStream.configure({
|
|
81
107
|
default: 'database',
|
|
82
108
|
connections: {
|
|
83
109
|
database: {
|
|
84
110
|
driver: 'database',
|
|
85
|
-
table: 'jobs'
|
|
111
|
+
table: 'jobs',
|
|
112
|
+
dbService: dbService // Pass your database service
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
})
|
|
116
|
+
]
|
|
117
|
+
})
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## RabbitMQ Driver Example
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
import { OrbitStream } from '@gravito/stream'
|
|
124
|
+
import amqp from 'amqplib'
|
|
125
|
+
|
|
126
|
+
const connection = await amqp.connect('amqp://localhost')
|
|
127
|
+
|
|
128
|
+
const core = await PlanetCore.boot({
|
|
129
|
+
orbits: [
|
|
130
|
+
OrbitStream.configure({
|
|
131
|
+
default: 'rabbitmq',
|
|
132
|
+
connections: {
|
|
133
|
+
rabbitmq: {
|
|
134
|
+
driver: 'rabbitmq',
|
|
135
|
+
client: connection,
|
|
136
|
+
exchange: 'gravito.events',
|
|
137
|
+
exchangeType: 'fanout'
|
|
86
138
|
}
|
|
87
139
|
}
|
|
88
140
|
})
|
|
@@ -103,10 +155,37 @@ CREATE TABLE jobs (
|
|
|
103
155
|
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
104
156
|
);
|
|
105
157
|
|
|
158
|
+
CREATE INDEX idx_jobs_queue_available ON jobs(queue, available_at);
|
|
159
|
+
CREATE INDEX idx_jobs_reserved ON jobs(reserved_at);
|
|
106
160
|
CREATE INDEX idx_jobs_queue_available ON jobs(queue, available_at);
|
|
107
161
|
CREATE INDEX idx_jobs_reserved ON jobs(reserved_at);
|
|
108
162
|
```
|
|
109
163
|
|
|
164
|
+
## Persistence and Audit Mode
|
|
165
|
+
|
|
166
|
+
The `@gravito/stream` package supports an optional persistence layer (using SQLite or MySQL) for archiving job history and providing an audit trail.
|
|
167
|
+
|
|
168
|
+
### Configuration
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
OrbitStream.configure({
|
|
172
|
+
// ... other config
|
|
173
|
+
persistence: {
|
|
174
|
+
adapter: new SQLitePersistence(DB), // or MySQLPersistence
|
|
175
|
+
archiveCompleted: true, // Archive jobs when they complete successfully
|
|
176
|
+
archiveFailed: true, // Archive jobs when they fail permanently
|
|
177
|
+
archiveEnqueued: true // (Audit Mode) Archive jobs immediately when pushed
|
|
178
|
+
}
|
|
179
|
+
})
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Audit Mode (`archiveEnqueued: true`)
|
|
183
|
+
|
|
184
|
+
When Audit Mode is enabled, every job pushed to the queue is immediately written to the SQL archive with a `waiting` status. This happens in parallel with the main queue operation (Fire-and-Forget).
|
|
185
|
+
|
|
186
|
+
- **Benefit**: Provides a complete audit trail. Even if the queue driver (e.g., Redis) crashes and loses data, the SQL archive will contain the record of the job being enqueued.
|
|
187
|
+
- **Performance**: Designed to be non-blocking. The SQL write happens asynchronously and does not delay the `push()` operation.
|
|
188
|
+
|
|
110
189
|
## Standalone Worker
|
|
111
190
|
|
|
112
191
|
```bash
|
|
@@ -128,6 +207,13 @@ abstract class Job implements Queueable {
|
|
|
128
207
|
onQueue(queue: string): this
|
|
129
208
|
onConnection(connection: string): this
|
|
130
209
|
delay(seconds: number): this
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Set retry backoff strategy.
|
|
213
|
+
* @param seconds - Initial delay in seconds
|
|
214
|
+
* @param multiplier - Multiplier for each subsequent attempt (default: 2)
|
|
215
|
+
*/
|
|
216
|
+
backoff(seconds: number, multiplier = 2): this
|
|
131
217
|
}
|
|
132
218
|
```
|
|
133
219
|
|
|
@@ -140,6 +226,8 @@ class QueueManager {
|
|
|
140
226
|
async pop(queue?: string, connection?: string): Promise<Job | null>
|
|
141
227
|
async size(queue?: string, connection?: string): Promise<number>
|
|
142
228
|
async clear(queue?: string, connection?: string): Promise<void>
|
|
229
|
+
async complete(job: Job): Promise<void>
|
|
230
|
+
async fail(job: Job, error: Error): Promise<void>
|
|
143
231
|
registerJobClasses(jobClasses: Array<new (...args: unknown[]) => Job>): void
|
|
144
232
|
}
|
|
145
233
|
```
|
|
@@ -148,9 +236,10 @@ class QueueManager {
|
|
|
148
236
|
|
|
149
237
|
- **MemoryDriver** - in-memory (development)
|
|
150
238
|
- **DatabaseDriver** - PostgreSQL/MySQL/SQLite
|
|
151
|
-
- **RedisDriver** - delayed jobs
|
|
239
|
+
- **RedisDriver** - delayed jobs, priority queues, rate limiting, and DLQ support
|
|
152
240
|
- **KafkaDriver** - topics and consumer groups
|
|
153
241
|
- **SQSDriver** - standard/FIFO queues and long polling
|
|
242
|
+
- **RabbitMQDriver** - exchanges, queues, and advanced confirm mode
|
|
154
243
|
|
|
155
244
|
## License
|
|
156
245
|
|