@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.
Files changed (150) hide show
  1. package/README.md +94 -5
  2. package/dist/index.cjs +2265 -31639
  3. package/dist/index.d.cts +1814 -0
  4. package/dist/index.d.ts +1805 -36
  5. package/dist/index.js +2700 -0
  6. package/package.json +11 -7
  7. package/dist/Consumer.d.ts +0 -67
  8. package/dist/Consumer.d.ts.map +0 -1
  9. package/dist/Job.d.ts +0 -76
  10. package/dist/Job.d.ts.map +0 -1
  11. package/dist/OrbitQueue.d.ts +0 -74
  12. package/dist/OrbitQueue.d.ts.map +0 -1
  13. package/dist/QueueManager.d.ts +0 -86
  14. package/dist/QueueManager.d.ts.map +0 -1
  15. package/dist/Queueable.d.ts +0 -63
  16. package/dist/Queueable.d.ts.map +0 -1
  17. package/dist/Worker.d.ts +0 -48
  18. package/dist/Worker.d.ts.map +0 -1
  19. package/dist/core/src/ConfigManager.d.ts +0 -26
  20. package/dist/core/src/ConfigManager.d.ts.map +0 -1
  21. package/dist/core/src/Container.d.ts +0 -39
  22. package/dist/core/src/Container.d.ts.map +0 -1
  23. package/dist/core/src/Event.d.ts +0 -6
  24. package/dist/core/src/Event.d.ts.map +0 -1
  25. package/dist/core/src/EventManager.d.ts +0 -124
  26. package/dist/core/src/EventManager.d.ts.map +0 -1
  27. package/dist/core/src/GlobalErrorHandlers.d.ts +0 -32
  28. package/dist/core/src/GlobalErrorHandlers.d.ts.map +0 -1
  29. package/dist/core/src/HookManager.d.ts +0 -29
  30. package/dist/core/src/HookManager.d.ts.map +0 -1
  31. package/dist/core/src/Listener.d.ts +0 -5
  32. package/dist/core/src/Listener.d.ts.map +0 -1
  33. package/dist/core/src/Logger.d.ts +0 -21
  34. package/dist/core/src/Logger.d.ts.map +0 -1
  35. package/dist/core/src/PlanetCore.d.ts +0 -116
  36. package/dist/core/src/PlanetCore.d.ts.map +0 -1
  37. package/dist/core/src/Route.d.ts +0 -13
  38. package/dist/core/src/Route.d.ts.map +0 -1
  39. package/dist/core/src/Router.d.ts +0 -168
  40. package/dist/core/src/Router.d.ts.map +0 -1
  41. package/dist/core/src/ServiceProvider.d.ts +0 -17
  42. package/dist/core/src/ServiceProvider.d.ts.map +0 -1
  43. package/dist/core/src/exceptions/AuthenticationException.d.ts +0 -5
  44. package/dist/core/src/exceptions/AuthenticationException.d.ts.map +0 -1
  45. package/dist/core/src/exceptions/AuthorizationException.d.ts +0 -5
  46. package/dist/core/src/exceptions/AuthorizationException.d.ts.map +0 -1
  47. package/dist/core/src/exceptions/GravitoException.d.ts +0 -15
  48. package/dist/core/src/exceptions/GravitoException.d.ts.map +0 -1
  49. package/dist/core/src/exceptions/ModelNotFoundException.d.ts +0 -7
  50. package/dist/core/src/exceptions/ModelNotFoundException.d.ts.map +0 -1
  51. package/dist/core/src/exceptions/ValidationException.d.ts +0 -15
  52. package/dist/core/src/exceptions/ValidationException.d.ts.map +0 -1
  53. package/dist/core/src/exceptions/index.d.ts +0 -6
  54. package/dist/core/src/exceptions/index.d.ts.map +0 -1
  55. package/dist/core/src/helpers/Arr.d.ts +0 -15
  56. package/dist/core/src/helpers/Arr.d.ts.map +0 -1
  57. package/dist/core/src/helpers/Str.d.ts +0 -19
  58. package/dist/core/src/helpers/Str.d.ts.map +0 -1
  59. package/dist/core/src/helpers/data.d.ts +0 -6
  60. package/dist/core/src/helpers/data.d.ts.map +0 -1
  61. package/dist/core/src/helpers/errors.d.ts +0 -13
  62. package/dist/core/src/helpers/errors.d.ts.map +0 -1
  63. package/dist/core/src/helpers/response.d.ts +0 -19
  64. package/dist/core/src/helpers/response.d.ts.map +0 -1
  65. package/dist/core/src/helpers.d.ts +0 -39
  66. package/dist/core/src/helpers.d.ts.map +0 -1
  67. package/dist/core/src/http/CookieJar.d.ts +0 -34
  68. package/dist/core/src/http/CookieJar.d.ts.map +0 -1
  69. package/dist/core/src/http/middleware/ThrottleRequests.d.ts +0 -13
  70. package/dist/core/src/http/middleware/ThrottleRequests.d.ts.map +0 -1
  71. package/dist/core/src/index.d.ts +0 -32
  72. package/dist/core/src/index.d.ts.map +0 -1
  73. package/dist/core/src/security/Encrypter.d.ts +0 -25
  74. package/dist/core/src/security/Encrypter.d.ts.map +0 -1
  75. package/dist/core/src/security/Hasher.d.ts +0 -30
  76. package/dist/core/src/security/Hasher.d.ts.map +0 -1
  77. package/dist/core/src/types/events.d.ts +0 -95
  78. package/dist/core/src/types/events.d.ts.map +0 -1
  79. package/dist/drivers/DatabaseDriver.d.ts +0 -60
  80. package/dist/drivers/DatabaseDriver.d.ts.map +0 -1
  81. package/dist/drivers/KafkaDriver.d.ts +0 -134
  82. package/dist/drivers/KafkaDriver.d.ts.map +0 -1
  83. package/dist/drivers/MemoryDriver.d.ts +0 -45
  84. package/dist/drivers/MemoryDriver.d.ts.map +0 -1
  85. package/dist/drivers/QueueDriver.d.ts +0 -89
  86. package/dist/drivers/QueueDriver.d.ts.map +0 -1
  87. package/dist/drivers/RedisDriver.d.ts +0 -79
  88. package/dist/drivers/RedisDriver.d.ts.map +0 -1
  89. package/dist/drivers/SQSDriver.d.ts +0 -100
  90. package/dist/drivers/SQSDriver.d.ts.map +0 -1
  91. package/dist/index.cjs.map +0 -422
  92. package/dist/index.d.ts.map +0 -1
  93. package/dist/index.mjs +0 -32096
  94. package/dist/index.mjs.map +0 -422
  95. package/dist/orbit-db/src/DBService.d.ts +0 -270
  96. package/dist/orbit-db/src/DBService.d.ts.map +0 -1
  97. package/dist/orbit-db/src/EventBus.d.ts +0 -53
  98. package/dist/orbit-db/src/EventBus.d.ts.map +0 -1
  99. package/dist/orbit-db/src/MigrationDriver.d.ts +0 -55
  100. package/dist/orbit-db/src/MigrationDriver.d.ts.map +0 -1
  101. package/dist/orbit-db/src/Model.d.ts +0 -564
  102. package/dist/orbit-db/src/Model.d.ts.map +0 -1
  103. package/dist/orbit-db/src/ModelCollection.d.ts +0 -35
  104. package/dist/orbit-db/src/ModelCollection.d.ts.map +0 -1
  105. package/dist/orbit-db/src/index.d.ts +0 -34
  106. package/dist/orbit-db/src/index.d.ts.map +0 -1
  107. package/dist/orbit-db/src/types.d.ts +0 -146
  108. package/dist/orbit-db/src/types.d.ts.map +0 -1
  109. package/dist/orbit-queue/src/Consumer.d.ts +0 -67
  110. package/dist/orbit-queue/src/Consumer.d.ts.map +0 -1
  111. package/dist/orbit-queue/src/Job.d.ts +0 -76
  112. package/dist/orbit-queue/src/Job.d.ts.map +0 -1
  113. package/dist/orbit-queue/src/OrbitQueue.d.ts +0 -74
  114. package/dist/orbit-queue/src/OrbitQueue.d.ts.map +0 -1
  115. package/dist/orbit-queue/src/QueueManager.d.ts +0 -86
  116. package/dist/orbit-queue/src/QueueManager.d.ts.map +0 -1
  117. package/dist/orbit-queue/src/Queueable.d.ts +0 -63
  118. package/dist/orbit-queue/src/Queueable.d.ts.map +0 -1
  119. package/dist/orbit-queue/src/Worker.d.ts +0 -48
  120. package/dist/orbit-queue/src/Worker.d.ts.map +0 -1
  121. package/dist/orbit-queue/src/drivers/DatabaseDriver.d.ts +0 -60
  122. package/dist/orbit-queue/src/drivers/DatabaseDriver.d.ts.map +0 -1
  123. package/dist/orbit-queue/src/drivers/KafkaDriver.d.ts +0 -134
  124. package/dist/orbit-queue/src/drivers/KafkaDriver.d.ts.map +0 -1
  125. package/dist/orbit-queue/src/drivers/MemoryDriver.d.ts +0 -45
  126. package/dist/orbit-queue/src/drivers/MemoryDriver.d.ts.map +0 -1
  127. package/dist/orbit-queue/src/drivers/QueueDriver.d.ts +0 -89
  128. package/dist/orbit-queue/src/drivers/QueueDriver.d.ts.map +0 -1
  129. package/dist/orbit-queue/src/drivers/RedisDriver.d.ts +0 -79
  130. package/dist/orbit-queue/src/drivers/RedisDriver.d.ts.map +0 -1
  131. package/dist/orbit-queue/src/drivers/SQSDriver.d.ts +0 -100
  132. package/dist/orbit-queue/src/drivers/SQSDriver.d.ts.map +0 -1
  133. package/dist/orbit-queue/src/index.d.ts +0 -45
  134. package/dist/orbit-queue/src/index.d.ts.map +0 -1
  135. package/dist/orbit-queue/src/serializers/ClassNameSerializer.d.ts +0 -46
  136. package/dist/orbit-queue/src/serializers/ClassNameSerializer.d.ts.map +0 -1
  137. package/dist/orbit-queue/src/serializers/JobSerializer.d.ts +0 -36
  138. package/dist/orbit-queue/src/serializers/JobSerializer.d.ts.map +0 -1
  139. package/dist/orbit-queue/src/serializers/JsonSerializer.d.ts +0 -32
  140. package/dist/orbit-queue/src/serializers/JsonSerializer.d.ts.map +0 -1
  141. package/dist/orbit-queue/src/types.d.ts +0 -85
  142. package/dist/orbit-queue/src/types.d.ts.map +0 -1
  143. package/dist/serializers/ClassNameSerializer.d.ts +0 -46
  144. package/dist/serializers/ClassNameSerializer.d.ts.map +0 -1
  145. package/dist/serializers/JobSerializer.d.ts +0 -36
  146. package/dist/serializers/JobSerializer.d.ts.map +0 -1
  147. package/dist/serializers/JsonSerializer.d.ts +0 -32
  148. package/dist/serializers/JsonSerializer.d.ts.map +0 -1
  149. package/dist/types.d.ts +0 -85
  150. 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
- import { OrbitDB } from '@gravito/db'
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 supported
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