flashq 0.1.0

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 (78) hide show
  1. package/README.md +283 -0
  2. package/dist/client/advanced.d.ts +174 -0
  3. package/dist/client/advanced.d.ts.map +1 -0
  4. package/dist/client/advanced.js +248 -0
  5. package/dist/client/advanced.js.map +1 -0
  6. package/dist/client/connection.d.ts +103 -0
  7. package/dist/client/connection.d.ts.map +1 -0
  8. package/dist/client/connection.js +570 -0
  9. package/dist/client/connection.js.map +1 -0
  10. package/dist/client/core.d.ts +119 -0
  11. package/dist/client/core.d.ts.map +1 -0
  12. package/dist/client/core.js +257 -0
  13. package/dist/client/core.js.map +1 -0
  14. package/dist/client/cron.d.ts +59 -0
  15. package/dist/client/cron.d.ts.map +1 -0
  16. package/dist/client/cron.js +82 -0
  17. package/dist/client/cron.js.map +1 -0
  18. package/dist/client/dlq.d.ts +52 -0
  19. package/dist/client/dlq.d.ts.map +1 -0
  20. package/dist/client/dlq.js +73 -0
  21. package/dist/client/dlq.js.map +1 -0
  22. package/dist/client/flows.d.ts +49 -0
  23. package/dist/client/flows.d.ts.map +1 -0
  24. package/dist/client/flows.js +67 -0
  25. package/dist/client/flows.js.map +1 -0
  26. package/dist/client/index.d.ts +644 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +829 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/client/jobs.d.ts +183 -0
  31. package/dist/client/jobs.d.ts.map +1 -0
  32. package/dist/client/jobs.js +272 -0
  33. package/dist/client/jobs.js.map +1 -0
  34. package/dist/client/kv.d.ts +63 -0
  35. package/dist/client/kv.d.ts.map +1 -0
  36. package/dist/client/kv.js +131 -0
  37. package/dist/client/kv.js.map +1 -0
  38. package/dist/client/metrics.d.ts +34 -0
  39. package/dist/client/metrics.d.ts.map +1 -0
  40. package/dist/client/metrics.js +49 -0
  41. package/dist/client/metrics.js.map +1 -0
  42. package/dist/client/pubsub.d.ts +42 -0
  43. package/dist/client/pubsub.d.ts.map +1 -0
  44. package/dist/client/pubsub.js +92 -0
  45. package/dist/client/pubsub.js.map +1 -0
  46. package/dist/client/queue.d.ts +111 -0
  47. package/dist/client/queue.d.ts.map +1 -0
  48. package/dist/client/queue.js +160 -0
  49. package/dist/client/queue.js.map +1 -0
  50. package/dist/client/types.d.ts +23 -0
  51. package/dist/client/types.d.ts.map +1 -0
  52. package/dist/client/types.js +3 -0
  53. package/dist/client/types.js.map +1 -0
  54. package/dist/client.d.ts +17 -0
  55. package/dist/client.d.ts.map +1 -0
  56. package/dist/client.js +23 -0
  57. package/dist/client.js.map +1 -0
  58. package/dist/events.d.ts +184 -0
  59. package/dist/events.d.ts.map +1 -0
  60. package/dist/events.js +340 -0
  61. package/dist/events.js.map +1 -0
  62. package/dist/index.d.ts +30 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +43 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/queue.d.ts +104 -0
  67. package/dist/queue.d.ts.map +1 -0
  68. package/dist/queue.js +139 -0
  69. package/dist/queue.js.map +1 -0
  70. package/dist/types.d.ts +185 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +6 -0
  73. package/dist/types.js.map +1 -0
  74. package/dist/worker.d.ts +88 -0
  75. package/dist/worker.d.ts.map +1 -0
  76. package/dist/worker.js +296 -0
  77. package/dist/worker.js.map +1 -0
  78. package/package.json +70 -0
@@ -0,0 +1,184 @@
1
+ /**
2
+ * flashQ Events - Real-time event subscriptions
3
+ *
4
+ * Supports:
5
+ * - SSE (Server-Sent Events) - Unidirectional, auto-reconnect
6
+ * - WebSocket - Bidirectional, low latency
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { EventSubscriber } from 'flashq';
11
+ *
12
+ * const events = new EventSubscriber({ host: 'localhost', httpPort: 6790 });
13
+ *
14
+ * events.on('completed', (event) => {
15
+ * console.log(`Job ${event.jobId} completed`);
16
+ * });
17
+ *
18
+ * events.on('failed', (event) => {
19
+ * console.log(`Job ${event.jobId} failed: ${event.error}`);
20
+ * });
21
+ *
22
+ * await events.connect();
23
+ * ```
24
+ */
25
+ import { EventEmitter } from 'events';
26
+ export type EventType = 'pushed' | 'completed' | 'failed' | 'progress' | 'timeout';
27
+ export interface JobEvent {
28
+ /** Event type */
29
+ eventType: EventType;
30
+ /** Queue name */
31
+ queue: string;
32
+ /** Job ID */
33
+ jobId: number;
34
+ /** Event timestamp (ms) */
35
+ timestamp: number;
36
+ /** Job data (for pushed events) */
37
+ data?: unknown;
38
+ /** Error message (for failed events) */
39
+ error?: string;
40
+ /** Progress percentage (for progress events) */
41
+ progress?: number;
42
+ }
43
+ export interface EventSubscriberOptions {
44
+ /** Server host (default: localhost) */
45
+ host?: string;
46
+ /** HTTP port (default: 6790) */
47
+ httpPort?: number;
48
+ /** Authentication token */
49
+ token?: string;
50
+ /** Filter to specific queue */
51
+ queue?: string;
52
+ /** Connection type: 'sse' or 'websocket' (default: 'sse') */
53
+ type?: 'sse' | 'websocket';
54
+ /** Auto-reconnect on disconnect (default: true) */
55
+ autoReconnect?: boolean;
56
+ /** Reconnect delay in ms (default: 1000) */
57
+ reconnectDelay?: number;
58
+ /** Max reconnect attempts (default: 10, 0 = infinite) */
59
+ maxReconnectAttempts?: number;
60
+ }
61
+ export interface EventSubscriberEvents {
62
+ /** Emitted when connected */
63
+ connected: () => void;
64
+ /** Emitted when disconnected */
65
+ disconnected: () => void;
66
+ /** Emitted on reconnect attempt */
67
+ reconnecting: (attempt: number) => void;
68
+ /** Emitted on error */
69
+ error: (error: Error) => void;
70
+ /** Emitted for all job events */
71
+ event: (event: JobEvent) => void;
72
+ /** Emitted when a job is pushed */
73
+ pushed: (event: JobEvent) => void;
74
+ /** Emitted when a job completes */
75
+ completed: (event: JobEvent) => void;
76
+ /** Emitted when a job fails */
77
+ failed: (event: JobEvent) => void;
78
+ /** Emitted on job progress update */
79
+ progress: (event: JobEvent) => void;
80
+ /** Emitted when a job times out */
81
+ timeout: (event: JobEvent) => void;
82
+ }
83
+ /**
84
+ * Real-time event subscriber for flashQ
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * // SSE (default, auto-reconnect)
89
+ * const events = new EventSubscriber({
90
+ * host: 'localhost',
91
+ * httpPort: 6790,
92
+ * queue: 'emails', // Optional: filter to one queue
93
+ * });
94
+ *
95
+ * events.on('completed', (e) => console.log(`Job ${e.jobId} done!`));
96
+ * events.on('failed', (e) => console.log(`Job ${e.jobId} failed: ${e.error}`));
97
+ *
98
+ * await events.connect();
99
+ *
100
+ * // Later...
101
+ * events.close();
102
+ * ```
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * // WebSocket
107
+ * const events = new EventSubscriber({
108
+ * type: 'websocket',
109
+ * token: 'your-auth-token',
110
+ * });
111
+ *
112
+ * await events.connect();
113
+ * ```
114
+ */
115
+ export declare class EventSubscriber extends EventEmitter {
116
+ private options;
117
+ private eventSource;
118
+ private websocket;
119
+ private connected;
120
+ private reconnectAttempts;
121
+ private reconnectTimer;
122
+ private closed;
123
+ private sseHandlers;
124
+ private wsMessageHandler;
125
+ constructor(options?: EventSubscriberOptions);
126
+ on<K extends keyof EventSubscriberEvents>(event: K, listener: EventSubscriberEvents[K]): this;
127
+ off<K extends keyof EventSubscriberEvents>(event: K, listener: EventSubscriberEvents[K]): this;
128
+ emit<K extends keyof EventSubscriberEvents>(event: K, ...args: Parameters<EventSubscriberEvents[K]>): boolean;
129
+ /**
130
+ * Connect to the event stream
131
+ */
132
+ connect(): Promise<void>;
133
+ /**
134
+ * Close the connection
135
+ */
136
+ close(): void;
137
+ /**
138
+ * Check if connected
139
+ */
140
+ isConnected(): boolean;
141
+ private connectSSE;
142
+ private connectWebSocket;
143
+ private normalizeEvent;
144
+ private scheduleReconnect;
145
+ }
146
+ /**
147
+ * Create an SSE event subscriber
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * const events = createEventSubscriber({ queue: 'emails' });
152
+ * events.on('completed', (e) => console.log(e));
153
+ * await events.connect();
154
+ * ```
155
+ */
156
+ export declare function createEventSubscriber(options?: EventSubscriberOptions): EventSubscriber;
157
+ /**
158
+ * Create a WebSocket event subscriber
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * const events = createWebSocketSubscriber({ token: 'xxx' });
163
+ * events.on('completed', (e) => console.log(e));
164
+ * await events.connect();
165
+ * ```
166
+ */
167
+ export declare function createWebSocketSubscriber(options?: EventSubscriberOptions): EventSubscriber;
168
+ /**
169
+ * Subscribe to events with a simple callback
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * const unsubscribe = await subscribeToEvents(
174
+ * { queue: 'emails' },
175
+ * (event) => console.log(event)
176
+ * );
177
+ *
178
+ * // Later...
179
+ * unsubscribe();
180
+ * ```
181
+ */
182
+ export declare function subscribeToEvents(options: EventSubscriberOptions, callback: (event: JobEvent) => void): Promise<() => void>;
183
+ export default EventSubscriber;
184
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
package/dist/events.js ADDED
@@ -0,0 +1,340 @@
1
+ "use strict";
2
+ /**
3
+ * flashQ Events - Real-time event subscriptions
4
+ *
5
+ * Supports:
6
+ * - SSE (Server-Sent Events) - Unidirectional, auto-reconnect
7
+ * - WebSocket - Bidirectional, low latency
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { EventSubscriber } from 'flashq';
12
+ *
13
+ * const events = new EventSubscriber({ host: 'localhost', httpPort: 6790 });
14
+ *
15
+ * events.on('completed', (event) => {
16
+ * console.log(`Job ${event.jobId} completed`);
17
+ * });
18
+ *
19
+ * events.on('failed', (event) => {
20
+ * console.log(`Job ${event.jobId} failed: ${event.error}`);
21
+ * });
22
+ *
23
+ * await events.connect();
24
+ * ```
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.EventSubscriber = void 0;
28
+ exports.createEventSubscriber = createEventSubscriber;
29
+ exports.createWebSocketSubscriber = createWebSocketSubscriber;
30
+ exports.subscribeToEvents = subscribeToEvents;
31
+ const events_1 = require("events");
32
+ // ============== EventSubscriber ==============
33
+ /**
34
+ * Real-time event subscriber for flashQ
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * // SSE (default, auto-reconnect)
39
+ * const events = new EventSubscriber({
40
+ * host: 'localhost',
41
+ * httpPort: 6790,
42
+ * queue: 'emails', // Optional: filter to one queue
43
+ * });
44
+ *
45
+ * events.on('completed', (e) => console.log(`Job ${e.jobId} done!`));
46
+ * events.on('failed', (e) => console.log(`Job ${e.jobId} failed: ${e.error}`));
47
+ *
48
+ * await events.connect();
49
+ *
50
+ * // Later...
51
+ * events.close();
52
+ * ```
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * // WebSocket
57
+ * const events = new EventSubscriber({
58
+ * type: 'websocket',
59
+ * token: 'your-auth-token',
60
+ * });
61
+ *
62
+ * await events.connect();
63
+ * ```
64
+ */
65
+ class EventSubscriber extends events_1.EventEmitter {
66
+ options;
67
+ eventSource = null;
68
+ websocket = null;
69
+ connected = false;
70
+ reconnectAttempts = 0;
71
+ reconnectTimer = null;
72
+ closed = false;
73
+ // Store handlers for proper cleanup
74
+ sseHandlers = new Map();
75
+ wsMessageHandler = null;
76
+ constructor(options = {}) {
77
+ super();
78
+ this.options = {
79
+ host: options.host ?? 'localhost',
80
+ httpPort: options.httpPort ?? 6790,
81
+ token: options.token ?? '',
82
+ queue: options.queue ?? '',
83
+ type: options.type ?? 'sse',
84
+ autoReconnect: options.autoReconnect ?? true,
85
+ reconnectDelay: options.reconnectDelay ?? 1000,
86
+ maxReconnectAttempts: options.maxReconnectAttempts ?? 10,
87
+ };
88
+ }
89
+ // Typed event emitter overrides
90
+ on(event, listener) {
91
+ return super.on(event, listener);
92
+ }
93
+ off(event, listener) {
94
+ return super.off(event, listener);
95
+ }
96
+ emit(event, ...args) {
97
+ return super.emit(event, ...args);
98
+ }
99
+ /**
100
+ * Connect to the event stream
101
+ */
102
+ async connect() {
103
+ this.closed = false;
104
+ this.reconnectAttempts = 0;
105
+ if (this.options.type === 'websocket') {
106
+ await this.connectWebSocket();
107
+ }
108
+ else {
109
+ await this.connectSSE();
110
+ }
111
+ }
112
+ /**
113
+ * Close the connection
114
+ */
115
+ close() {
116
+ this.closed = true;
117
+ if (this.reconnectTimer) {
118
+ clearTimeout(this.reconnectTimer);
119
+ this.reconnectTimer = null;
120
+ }
121
+ // Clean up SSE handlers to prevent memory leak
122
+ if (this.eventSource) {
123
+ for (const [eventType, handler] of this.sseHandlers) {
124
+ this.eventSource.removeEventListener(eventType, handler);
125
+ }
126
+ this.sseHandlers.clear();
127
+ this.eventSource.close();
128
+ this.eventSource = null;
129
+ }
130
+ // Clean up WebSocket
131
+ if (this.websocket) {
132
+ this.wsMessageHandler = null;
133
+ this.websocket.close();
134
+ this.websocket = null;
135
+ }
136
+ if (this.connected) {
137
+ this.connected = false;
138
+ this.emit('disconnected');
139
+ }
140
+ }
141
+ /**
142
+ * Check if connected
143
+ */
144
+ isConnected() {
145
+ return this.connected;
146
+ }
147
+ // ============== SSE ==============
148
+ async connectSSE() {
149
+ return new Promise((resolve, reject) => {
150
+ const baseUrl = `http://${this.options.host}:${this.options.httpPort}`;
151
+ const url = this.options.queue
152
+ ? `${baseUrl}/queues/${this.options.queue}/events`
153
+ : `${baseUrl}/events`;
154
+ try {
155
+ this.eventSource = new EventSource(url);
156
+ this.eventSource.onopen = () => {
157
+ this.connected = true;
158
+ this.reconnectAttempts = 0;
159
+ this.emit('connected');
160
+ resolve();
161
+ };
162
+ this.eventSource.onerror = (error) => {
163
+ const wasConnected = this.connected;
164
+ this.connected = false;
165
+ if (wasConnected) {
166
+ this.emit('disconnected');
167
+ }
168
+ if (!this.closed && this.options.autoReconnect) {
169
+ this.scheduleReconnect();
170
+ }
171
+ else if (!wasConnected) {
172
+ reject(new Error('Failed to connect to SSE'));
173
+ }
174
+ };
175
+ // Clear any existing handlers
176
+ this.sseHandlers.clear();
177
+ // Listen for specific event types
178
+ const eventTypes = ['pushed', 'completed', 'failed', 'progress', 'timeout'];
179
+ for (const eventType of eventTypes) {
180
+ const handler = (e) => {
181
+ try {
182
+ const messageEvent = e;
183
+ const rawEvent = JSON.parse(messageEvent.data);
184
+ const event = this.normalizeEvent(rawEvent);
185
+ this.emit('event', event);
186
+ this.emit(eventType, event);
187
+ }
188
+ catch {
189
+ // Ignore parse errors
190
+ }
191
+ };
192
+ this.sseHandlers.set(eventType, handler);
193
+ this.eventSource.addEventListener(eventType, handler);
194
+ }
195
+ }
196
+ catch (error) {
197
+ reject(error);
198
+ }
199
+ });
200
+ }
201
+ // ============== WebSocket ==============
202
+ async connectWebSocket() {
203
+ return new Promise((resolve, reject) => {
204
+ const protocol = this.options.host === 'localhost' ? 'ws' : 'wss';
205
+ let url = `${protocol}://${this.options.host}:${this.options.httpPort}`;
206
+ if (this.options.queue) {
207
+ url += `/ws/${this.options.queue}`;
208
+ }
209
+ else {
210
+ url += '/ws';
211
+ }
212
+ if (this.options.token) {
213
+ url += `?token=${encodeURIComponent(this.options.token)}`;
214
+ }
215
+ try {
216
+ this.websocket = new WebSocket(url);
217
+ this.websocket.onopen = () => {
218
+ this.connected = true;
219
+ this.reconnectAttempts = 0;
220
+ this.emit('connected');
221
+ resolve();
222
+ };
223
+ this.websocket.onclose = () => {
224
+ const wasConnected = this.connected;
225
+ this.connected = false;
226
+ if (wasConnected) {
227
+ this.emit('disconnected');
228
+ }
229
+ if (!this.closed && this.options.autoReconnect) {
230
+ this.scheduleReconnect();
231
+ }
232
+ };
233
+ this.websocket.onerror = () => {
234
+ this.emit('error', new Error('WebSocket error'));
235
+ if (!this.connected) {
236
+ reject(new Error('Failed to connect to WebSocket'));
237
+ }
238
+ };
239
+ // Store message handler for cleanup
240
+ this.wsMessageHandler = (e) => {
241
+ try {
242
+ const rawEvent = JSON.parse(e.data);
243
+ const event = this.normalizeEvent(rawEvent);
244
+ this.emit('event', event);
245
+ this.emit(event.eventType, event);
246
+ }
247
+ catch {
248
+ // Ignore parse errors
249
+ }
250
+ };
251
+ this.websocket.onmessage = this.wsMessageHandler;
252
+ }
253
+ catch (error) {
254
+ reject(error);
255
+ }
256
+ });
257
+ }
258
+ // ============== Helpers ==============
259
+ normalizeEvent(raw) {
260
+ return {
261
+ eventType: (raw.event_type ?? raw.eventType),
262
+ queue: raw.queue,
263
+ jobId: (raw.job_id ?? raw.jobId),
264
+ timestamp: raw.timestamp,
265
+ data: raw.data,
266
+ error: raw.error,
267
+ progress: raw.progress,
268
+ };
269
+ }
270
+ scheduleReconnect() {
271
+ if (this.closed)
272
+ return;
273
+ const maxAttempts = this.options.maxReconnectAttempts;
274
+ if (maxAttempts > 0 && this.reconnectAttempts >= maxAttempts) {
275
+ this.emit('error', new Error('Max reconnect attempts reached'));
276
+ return;
277
+ }
278
+ this.reconnectAttempts++;
279
+ this.emit('reconnecting', this.reconnectAttempts);
280
+ // Exponential backoff with jitter
281
+ const delay = Math.min(this.options.reconnectDelay * Math.pow(1.5, this.reconnectAttempts - 1) +
282
+ Math.random() * 1000, 30000);
283
+ this.reconnectTimer = setTimeout(() => {
284
+ this.reconnectTimer = null;
285
+ this.connect().catch(() => {
286
+ // Error will trigger another reconnect
287
+ });
288
+ }, delay);
289
+ }
290
+ }
291
+ exports.EventSubscriber = EventSubscriber;
292
+ // ============== Convenience Functions ==============
293
+ /**
294
+ * Create an SSE event subscriber
295
+ *
296
+ * @example
297
+ * ```typescript
298
+ * const events = createEventSubscriber({ queue: 'emails' });
299
+ * events.on('completed', (e) => console.log(e));
300
+ * await events.connect();
301
+ * ```
302
+ */
303
+ function createEventSubscriber(options) {
304
+ return new EventSubscriber({ ...options, type: 'sse' });
305
+ }
306
+ /**
307
+ * Create a WebSocket event subscriber
308
+ *
309
+ * @example
310
+ * ```typescript
311
+ * const events = createWebSocketSubscriber({ token: 'xxx' });
312
+ * events.on('completed', (e) => console.log(e));
313
+ * await events.connect();
314
+ * ```
315
+ */
316
+ function createWebSocketSubscriber(options) {
317
+ return new EventSubscriber({ ...options, type: 'websocket' });
318
+ }
319
+ /**
320
+ * Subscribe to events with a simple callback
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * const unsubscribe = await subscribeToEvents(
325
+ * { queue: 'emails' },
326
+ * (event) => console.log(event)
327
+ * );
328
+ *
329
+ * // Later...
330
+ * unsubscribe();
331
+ * ```
332
+ */
333
+ async function subscribeToEvents(options, callback) {
334
+ const subscriber = new EventSubscriber(options);
335
+ subscriber.on('event', callback);
336
+ await subscriber.connect();
337
+ return () => subscriber.close();
338
+ }
339
+ exports.default = EventSubscriber;
340
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAgYH,sDAIC;AAYD,8DAIC;AAgBD,8CAQC;AA1aD,mCAAsC;AAiEtC,gDAAgD;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAa,eAAgB,SAAQ,qBAAY;IACvC,OAAO,CAAmC;IAC1C,WAAW,GAAuB,IAAI,CAAC;IACvC,SAAS,GAAqB,IAAI,CAAC;IACnC,SAAS,GAAG,KAAK,CAAC;IAClB,iBAAiB,GAAG,CAAC,CAAC;IACtB,cAAc,GAAyC,IAAI,CAAC;IAC5D,MAAM,GAAG,KAAK,CAAC;IACvB,oCAAoC;IAC5B,WAAW,GAAoC,IAAI,GAAG,EAAE,CAAC;IACzD,gBAAgB,GAAuC,IAAI,CAAC;IAEpE,YAAY,UAAkC,EAAE;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW;YACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;YAC3B,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;YAC5C,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;YAC9C,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,EAAE;SACzD,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,EAAE,CACA,KAAQ,EACR,QAAkC;QAElC,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CACD,KAAQ,EACR,QAAkC;QAElC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CACF,KAAQ,EACR,GAAG,IAA0C;QAE7C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,+CAA+C;QAC/C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpD,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,oCAAoC;IAE5B,KAAK,CAAC,UAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;gBAC5B,CAAC,CAAC,GAAG,OAAO,WAAW,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS;gBAClD,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC;YAExB,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;gBAExC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE;oBAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACvB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBAEF,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;oBACnC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;oBACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;oBAEvB,IAAI,YAAY,EAAE,CAAC;wBACjB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC5B,CAAC;oBAED,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,CAAC;yBAAM,IAAI,CAAC,YAAY,EAAE,CAAC;wBACzB,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC,CAAC;gBAEF,8BAA8B;gBAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBAEzB,kCAAkC;gBAClC,MAAM,UAAU,GAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBAEzF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,CAAC,CAAQ,EAAE,EAAE;wBAC3B,IAAI,CAAC;4BACH,MAAM,YAAY,GAAG,CAAiB,CAAC;4BACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;4BAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;4BAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;4BAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;wBAC9B,CAAC;wBAAC,MAAM,CAAC;4BACP,sBAAsB;wBACxB,CAAC;oBACH,CAAC,CAAC;oBACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACzC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAElC,KAAK,CAAC,gBAAgB;QAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAClE,IAAI,GAAG,GAAG,GAAG,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAExE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACvB,GAAG,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,GAAG,IAAI,KAAK,CAAC;YACf,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACvB,GAAG,IAAI,UAAU,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;gBAEpC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;oBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACvB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBAEF,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;oBAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;oBACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;oBAEvB,IAAI,YAAY,EAAE,CAAC;wBACjB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC5B,CAAC;oBAED,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,CAAC;gBACH,CAAC,CAAC;gBAEF,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;oBAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBACjD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;wBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;oBACtD,CAAC;gBACH,CAAC,CAAC;gBAEF,oCAAoC;gBACpC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAe,EAAE,EAAE;oBAC1C,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBACpC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;wBAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBACpC,CAAC;oBAAC,MAAM,CAAC;wBACP,sBAAsB;oBACxB,CAAC;gBACH,CAAC,CAAC;gBACF,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wCAAwC;IAEhC,cAAc,CAAC,GAA4B;QACjD,OAAO;YACL,SAAS,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,CAAc;YACzD,KAAK,EAAE,GAAG,CAAC,KAAe;YAC1B,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAW;YAC1C,SAAS,EAAE,GAAG,CAAC,SAAmB;YAClC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,KAA2B;YACtC,QAAQ,EAAE,GAAG,CAAC,QAA8B;SAC7C,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAExB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACtD,IAAI,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,IAAI,WAAW,EAAE,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAElD,kCAAkC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,EACtB,KAAK,CACN,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBACxB,uCAAuC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;CACF;AA7QD,0CA6QC;AAED,sDAAsD;AAEtD;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CACnC,OAAgC;IAEhC,OAAO,IAAI,eAAe,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,yBAAyB,CACvC,OAAgC;IAEhC,OAAO,IAAI,eAAe,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,iBAAiB,CACrC,OAA+B,EAC/B,QAAmC;IAEnC,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;IAC3B,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * flashQ - High-performance Job Queue (BullMQ-compatible)
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Queue, Worker } from 'flashq';
7
+ *
8
+ * // Add jobs
9
+ * const queue = new Queue('emails');
10
+ * await queue.add('send', { to: 'user@example.com' });
11
+ *
12
+ * // Process jobs (auto-starts)
13
+ * const worker = new Worker('emails', async (job) => {
14
+ * await sendEmail(job.data);
15
+ * return { sent: true };
16
+ * });
17
+ * ```
18
+ *
19
+ * @packageDocumentation
20
+ */
21
+ export { Queue } from './queue';
22
+ export type { QueueOptions, JobOptions } from './queue';
23
+ export { Worker } from './worker';
24
+ export type { BullMQWorkerOptions } from './worker';
25
+ export { FlashQ, FlashQ as default } from './client';
26
+ export { MAX_BATCH_SIZE, MAX_JOB_DATA_SIZE } from './client/core';
27
+ export { validateQueueName, validateJobDataSize } from './client/connection';
28
+ export { EventSubscriber } from './events';
29
+ export type { Job, JobState, PushOptions, WorkerOptions, ClientOptions, } from './types';
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,YAAY,EACV,GAAG,EACH,QAAQ,EACR,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /**
3
+ * flashQ - High-performance Job Queue (BullMQ-compatible)
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { Queue, Worker } from 'flashq';
8
+ *
9
+ * // Add jobs
10
+ * const queue = new Queue('emails');
11
+ * await queue.add('send', { to: 'user@example.com' });
12
+ *
13
+ * // Process jobs (auto-starts)
14
+ * const worker = new Worker('emails', async (job) => {
15
+ * await sendEmail(job.data);
16
+ * return { sent: true };
17
+ * });
18
+ * ```
19
+ *
20
+ * @packageDocumentation
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.EventSubscriber = exports.validateJobDataSize = exports.validateQueueName = exports.MAX_JOB_DATA_SIZE = exports.MAX_BATCH_SIZE = exports.default = exports.FlashQ = exports.Worker = exports.Queue = void 0;
24
+ // BullMQ-compatible API
25
+ var queue_1 = require("./queue");
26
+ Object.defineProperty(exports, "Queue", { enumerable: true, get: function () { return queue_1.Queue; } });
27
+ var worker_1 = require("./worker");
28
+ Object.defineProperty(exports, "Worker", { enumerable: true, get: function () { return worker_1.Worker; } });
29
+ // Low-level API
30
+ var client_1 = require("./client");
31
+ Object.defineProperty(exports, "FlashQ", { enumerable: true, get: function () { return client_1.FlashQ; } });
32
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return client_1.FlashQ; } });
33
+ // Constants and validation utilities
34
+ var core_1 = require("./client/core");
35
+ Object.defineProperty(exports, "MAX_BATCH_SIZE", { enumerable: true, get: function () { return core_1.MAX_BATCH_SIZE; } });
36
+ Object.defineProperty(exports, "MAX_JOB_DATA_SIZE", { enumerable: true, get: function () { return core_1.MAX_JOB_DATA_SIZE; } });
37
+ var connection_1 = require("./client/connection");
38
+ Object.defineProperty(exports, "validateQueueName", { enumerable: true, get: function () { return connection_1.validateQueueName; } });
39
+ Object.defineProperty(exports, "validateJobDataSize", { enumerable: true, get: function () { return connection_1.validateJobDataSize; } });
40
+ // Optional: Real-time events
41
+ var events_1 = require("./events");
42
+ Object.defineProperty(exports, "EventSubscriber", { enumerable: true, get: function () { return events_1.EventSubscriber; } });
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,wBAAwB;AACxB,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAGd,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AAGf,gBAAgB;AAChB,mCAAqD;AAA5C,gGAAA,MAAM,OAAA;AAAE,iGAAA,MAAM,OAAW;AAElC,qCAAqC;AACrC,sCAAkE;AAAzD,sGAAA,cAAc,OAAA;AAAE,yGAAA,iBAAiB,OAAA;AAC1C,kDAA6E;AAApE,+GAAA,iBAAiB,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AAE/C,6BAA6B;AAC7B,mCAA2C;AAAlC,yGAAA,eAAe,OAAA"}