queen-mq 0.1.5 → 0.2.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 (135) hide show
  1. package/README.md +467 -1775
  2. package/package.json +12 -14
  3. package/src/client/client.js +664 -5
  4. package/src/managers/queueManagerOptimized.js +250 -47
  5. package/src/routes/ack.js +3 -3
  6. package/src/server.js +131 -3
  7. package/src/test/advanced-client-tests.js +761 -0
  8. package/src/test/advanced-pattern-tests.js +2 -2
  9. package/src/test/bus-mode-tests.js +6 -6
  10. package/src/test/core-tests.js +1 -1
  11. package/src/test/edge-case-tests.js +2 -2
  12. package/src/test/test-new.js +36 -1
  13. package/src/webapp-dist/assets/Analytics-DJrE4Rz2.css +1 -0
  14. package/src/webapp-dist/assets/Analytics-HEMXKmfJ.js +1 -0
  15. package/src/webapp-dist/assets/ConfirmDialog-YEoCdE7x.js +1 -0
  16. package/src/webapp-dist/assets/ConsumerGroups-CC5VJywp.css +1 -0
  17. package/src/webapp-dist/assets/ConsumerGroups-D8Z20HhZ.js +1 -0
  18. package/src/webapp-dist/assets/Dashboard-BRFOz6it.css +1 -0
  19. package/src/webapp-dist/assets/Dashboard-Bpx9I32h.js +1 -0
  20. package/src/webapp-dist/assets/LoadingSpinner-BPttXcbs.js +1 -0
  21. package/src/webapp-dist/assets/Messages-BOfVHKma.css +1 -0
  22. package/src/webapp-dist/assets/Messages-EKURCbLl.js +1 -0
  23. package/src/webapp-dist/assets/QueueDetail-BXXA7xoZ.css +1 -0
  24. package/src/webapp-dist/assets/QueueDetail-Bmxg0KiA.js +1 -0
  25. package/src/webapp-dist/assets/Queues-CvrJkrZT.css +1 -0
  26. package/src/webapp-dist/assets/Queues-yUx9_3-9.js +1 -0
  27. package/src/webapp-dist/assets/StatusBadge-C1bBtXHh.css +1 -0
  28. package/src/webapp-dist/assets/StatusBadge-C6N84XmO.js +1 -0
  29. package/src/webapp-dist/assets/analytics-BapTekLM.js +1 -0
  30. package/src/webapp-dist/assets/colors-5z6Q_kUr.js +18 -0
  31. package/src/webapp-dist/assets/index-B7w2bKT6.css +1 -0
  32. package/src/webapp-dist/assets/index-CUSnwYTH.js +31 -0
  33. package/src/webapp-dist/assets/messages-CRV6E-xU.js +1 -0
  34. package/src/webapp-dist/assets/queues-BdUbxfBC.js +1 -0
  35. package/src/webapp-dist/assets/resources-Bs9U-ceF.js +1 -0
  36. package/{webapp → src/webapp-dist}/index.html +2 -1
  37. package/API.md +0 -1226
  38. package/AUTH.md +0 -2044
  39. package/CHANGELOG_STATIC_SERVING.md +0 -213
  40. package/DEPLOYMENT.md +0 -425
  41. package/PROGRAMMATIC_SERVER.md +0 -239
  42. package/WEBAPP.md +0 -1889
  43. package/assets/dashboard-01.png +0 -0
  44. package/assets/dashboard.png +0 -0
  45. package/examples/batch-processing.js +0 -58
  46. package/examples/bus-mode.js +0 -239
  47. package/examples/continuous-consumer-optimized.js +0 -215
  48. package/examples/continuous-consumer.js +0 -159
  49. package/examples/continuous-producer.js +0 -343
  50. package/examples/mixed-mode.js +0 -277
  51. package/examples/multi-server-test.js +0 -305
  52. package/examples/programmatic-server.js +0 -58
  53. package/examples/server-with-frontend.js +0 -46
  54. package/examples/single.js +0 -64
  55. package/examples/smartchat-dealyed.js +0 -42
  56. package/examples/smartchat.js +0 -52
  57. package/examples/test-cache-invalidation.js +0 -119
  58. package/examples/test-cache-multi-server.js +0 -245
  59. package/examples/test-complete-client.js +0 -260
  60. package/examples/test-connection-recovery.js +0 -66
  61. package/examples/test-dashboard-api.js +0 -200
  62. package/examples/test-minimal-client.js +0 -112
  63. package/examples/test-queue-creation-policy.js +0 -137
  64. package/examples/test-traceid.js +0 -147
  65. package/server.log +0 -1
  66. package/test-keepalive-v2.sh +0 -22
  67. package/webapp/COLOR_GUIDE.md +0 -118
  68. package/webapp/README.md +0 -143
  69. package/webapp/package-lock.json +0 -3184
  70. package/webapp/package.json +0 -25
  71. package/webapp/postcss.config.js +0 -7
  72. package/webapp/public/assets/queen-logo-blue.svg +0 -210
  73. package/webapp/public/assets/queen-logo-cyan.svg +0 -210
  74. package/webapp/public/assets/queen-logo-indigo.svg +0 -210
  75. package/webapp/public/assets/queen-logo-orange.svg +0 -210
  76. package/webapp/public/assets/queen-logo-pink.svg +0 -210
  77. package/webapp/public/assets/queen-logo-purple.svg +0 -210
  78. package/webapp/public/assets/queen-logo-rose.svg +0 -239
  79. package/webapp/public/assets/queen-logo.svg +0 -263
  80. package/webapp/src/App.vue +0 -19
  81. package/webapp/src/api/analytics.js +0 -10
  82. package/webapp/src/api/client.js +0 -34
  83. package/webapp/src/api/consumers.js +0 -52
  84. package/webapp/src/api/health.js +0 -7
  85. package/webapp/src/api/messages.js +0 -26
  86. package/webapp/src/api/queues.js +0 -14
  87. package/webapp/src/api/resources.js +0 -8
  88. package/webapp/src/assets/styles/main.css +0 -357
  89. package/webapp/src/components/analytics/AnalyticsFilters.vue +0 -87
  90. package/webapp/src/components/analytics/AnalyticsMetrics.vue +0 -57
  91. package/webapp/src/components/analytics/MessageDistributionChart.vue +0 -111
  92. package/webapp/src/components/analytics/MessageFlowChart.vue +0 -173
  93. package/webapp/src/components/analytics/TimeRangeSelector.vue +0 -27
  94. package/webapp/src/components/analytics/TopQueuesChart.vue +0 -132
  95. package/webapp/src/components/common/ConfirmDialog.vue +0 -56
  96. package/webapp/src/components/common/LoadingSpinner.vue +0 -6
  97. package/webapp/src/components/common/MetricCard.vue +0 -43
  98. package/webapp/src/components/common/StatusBadge.vue +0 -45
  99. package/webapp/src/components/dashboard/MessageStatusCard.vue +0 -50
  100. package/webapp/src/components/dashboard/PerformanceCard.vue +0 -38
  101. package/webapp/src/components/dashboard/ThroughputChart.vue +0 -182
  102. package/webapp/src/components/dashboard/TopQueuesTable.vue +0 -53
  103. package/webapp/src/components/layout/AppLayout.vue +0 -110
  104. package/webapp/src/components/layout/AppSidebar.vue +0 -304
  105. package/webapp/src/components/messages/MessageDetailPanel.vue +0 -242
  106. package/webapp/src/components/messages/MessageFilters.vue +0 -101
  107. package/webapp/src/components/queue-detail/PartitionList.vue +0 -79
  108. package/webapp/src/components/queue-detail/PushMessageModal.vue +0 -175
  109. package/webapp/src/components/queue-detail/QueueConfig.vue +0 -63
  110. package/webapp/src/components/queue-detail/QueueDetailHeader.vue +0 -53
  111. package/webapp/src/components/queue-detail/RecentMessages.vue +0 -76
  112. package/webapp/src/components/queues/CreateQueueModal.vue +0 -193
  113. package/webapp/src/components/queues/QueueFilters.vue +0 -90
  114. package/webapp/src/composables/useApi.js +0 -34
  115. package/webapp/src/composables/useTheme.js +0 -36
  116. package/webapp/src/main.js +0 -11
  117. package/webapp/src/router/index.js +0 -42
  118. package/webapp/src/utils/colors.js +0 -96
  119. package/webapp/src/utils/formatters.js +0 -49
  120. package/webapp/src/views/Analytics.vue +0 -377
  121. package/webapp/src/views/ConsumerGroups.vue +0 -433
  122. package/webapp/src/views/Dashboard.vue +0 -418
  123. package/webapp/src/views/Messages.vue +0 -363
  124. package/webapp/src/views/QueueDetail.vue +0 -582
  125. package/webapp/src/views/Queues.vue +0 -496
  126. package/webapp/tailwind.config.js +0 -25
  127. package/webapp/vite.config.js +0 -10
  128. /package/{assets → src/webapp-dist/assets}/queen-logo-blue.svg +0 -0
  129. /package/{assets → src/webapp-dist/assets}/queen-logo-cyan.svg +0 -0
  130. /package/{assets → src/webapp-dist/assets}/queen-logo-indigo.svg +0 -0
  131. /package/{assets → src/webapp-dist/assets}/queen-logo-orange.svg +0 -0
  132. /package/{assets → src/webapp-dist/assets}/queen-logo-pink.svg +0 -0
  133. /package/{assets → src/webapp-dist/assets}/queen-logo-purple.svg +0 -0
  134. /package/{assets → src/webapp-dist/assets}/queen-logo-rose.svg +0 -0
  135. /package/{assets → src/webapp-dist/assets}/queen-logo.svg +0 -0
@@ -1,239 +0,0 @@
1
- # Queen MQ - Programmatic Server API
2
-
3
- As of version 0.1.2, Queen MQ can be run programmatically from your Node.js code, in addition to running it as a standalone process.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install queen-mq
9
- ```
10
-
11
- ## Basic Usage
12
-
13
- ### Starting the Server Programmatically
14
-
15
- ```javascript
16
- import { QueenServer } from 'queen-mq';
17
-
18
- // Start server with default configuration
19
- const server = await QueenServer();
20
-
21
- // Or with custom options
22
- const server = await QueenServer({
23
- port: 3000,
24
- host: '127.0.0.1',
25
- workerId: 'worker-1'
26
- });
27
-
28
- console.log(`Server running at http://${server.host}:${server.port}`);
29
- ```
30
-
31
- ### Using Client and Server Together
32
-
33
- ```javascript
34
- import { QueenServer, Queen } from 'queen-mq';
35
-
36
- // Start the server
37
- const server = await QueenServer({ port: 3000 });
38
-
39
- // Create a client
40
- const client = new Queen({
41
- servers: [`http://localhost:${server.port}`]
42
- });
43
-
44
- // Use the queue
45
- await client.push({
46
- queue: 'my-queue',
47
- items: [{ data: { message: 'Hello World' } }]
48
- });
49
-
50
- const result = await client.pop({ queue: 'my-queue' });
51
- console.log(result.messages);
52
- ```
53
-
54
- ### Graceful Shutdown
55
-
56
- ```javascript
57
- const server = await QueenServer();
58
-
59
- // Shutdown programmatically
60
- await server.shutdown('SIGTERM');
61
-
62
- // Or handle process signals
63
- process.on('SIGINT', async () => {
64
- await server.shutdown('SIGINT');
65
- });
66
- ```
67
-
68
- ## Server Options
69
-
70
- The `QueenServer()` function accepts an options object:
71
-
72
- ```javascript
73
- {
74
- port: number, // Server port (default: from config, typically 3000)
75
- host: string, // Server host (default: from config, typically '127.0.0.1')
76
- workerId: string, // Worker ID for clustering (default: from config)
77
- serveWebapp: boolean, // Serve built frontend from same server (default: false)
78
- webappPath: string, // Path to webapp dist folder (default: '../webapp/dist')
79
- skipDatabaseMigration: boolean // Skip database migration on startup (default: false)
80
- }
81
- ```
82
-
83
- ## Return Value
84
-
85
- The `QueenServer()` function returns a promise that resolves to a server instance with:
86
-
87
- ```javascript
88
- {
89
- port: number, // The port the server is listening on
90
- host: string, // The host the server is bound to
91
- shutdown: Function, // Async function to gracefully shutdown the server
92
- app: Object // The underlying uWebSockets.js app instance
93
- }
94
- ```
95
-
96
- ## Use Cases
97
-
98
- ### 1. Embedded Message Queue
99
-
100
- Run Queen MQ embedded in your application instead of as a separate service:
101
-
102
- ```javascript
103
- import { QueenServer, Queen } from 'queen-mq';
104
- import express from 'express';
105
-
106
- // Start Queen server
107
- await QueenServer({ port: 3001 });
108
-
109
- // Start your application server
110
- const app = express();
111
- const client = new Queen({ servers: ['http://localhost:3001'] });
112
-
113
- app.post('/api/task', async (req, res) => {
114
- await client.push({
115
- queue: 'tasks',
116
- items: [{ data: req.body }]
117
- });
118
- res.json({ status: 'queued' });
119
- });
120
-
121
- app.listen(3000);
122
- ```
123
-
124
- ### 2. Testing
125
-
126
- Easily spin up and tear down Queen servers in tests:
127
-
128
- ```javascript
129
- import { QueenServer, Queen } from 'queen-mq';
130
- import { describe, it, beforeAll, afterAll } from 'jest';
131
-
132
- describe('Queue Tests', () => {
133
- let server, client;
134
-
135
- beforeAll(async () => {
136
- server = await QueenServer({ port: 4000 });
137
- client = new Queen({ servers: ['http://localhost:4000'] });
138
- });
139
-
140
- afterAll(async () => {
141
- await server.shutdown('TEST');
142
- });
143
-
144
- it('should process messages', async () => {
145
- await client.push({
146
- queue: 'test-queue',
147
- items: [{ data: { test: true } }]
148
- });
149
-
150
- const result = await client.pop({ queue: 'test-queue' });
151
- expect(result.messages).toHaveLength(1);
152
- });
153
- });
154
- ```
155
-
156
- ### 3. Multiple Servers
157
-
158
- Run multiple Queen instances in the same process:
159
-
160
- ```javascript
161
- import { QueenServer } from 'queen-mq';
162
-
163
- // Start multiple servers for different purposes
164
- const server1 = await QueenServer({ port: 3001, workerId: 'worker-1' });
165
- const server2 = await QueenServer({ port: 3002, workerId: 'worker-2' });
166
-
167
- console.log('Multi-server setup running');
168
- ```
169
-
170
- ### 4. Serve Built Frontend (Single Deployment)
171
-
172
- Serve the Queen dashboard UI from the same server as the API:
173
-
174
- ```javascript
175
- import { QueenServer } from 'queen-mq';
176
-
177
- // Build the frontend first: cd webapp && npm run build
178
-
179
- const server = await QueenServer({
180
- port: 3000,
181
- serveWebapp: true // Enable static file serving
182
- });
183
-
184
- console.log(`Dashboard: http://localhost:${server.port}/`);
185
- console.log(`API: http://localhost:${server.port}/api/v1/`);
186
- ```
187
-
188
- **Benefits:**
189
- - ✅ Single port deployment (no CORS issues)
190
- - ✅ No separate web server needed (nginx, apache, etc.)
191
- - ✅ Simpler deployment and configuration
192
- - ✅ Production-ready with proper caching headers
193
- - ✅ SPA routing fully supported
194
-
195
- **How it works:**
196
- - Serves built files from `webapp/dist/`
197
- - Assets get long-term caching (fingerprinted files)
198
- - `index.html` always fresh (no caching)
199
- - SPA fallback for client-side routing
200
- - API routes always take precedence
201
-
202
- **Build the frontend:**
203
- ```bash
204
- cd webapp
205
- npm install
206
- npm run build
207
- cd ..
208
- ```
209
-
210
- **Start with frontend:**
211
- ```bash
212
- node examples/server-with-frontend.js
213
- # Or programmatically with serveWebapp: true
214
- ```
215
-
216
- ## Traditional Usage
217
-
218
- You can still run Queen as a standalone server:
219
-
220
- ```bash
221
- npm start
222
- # or
223
- node src/server.js
224
- ```
225
-
226
- When `src/server.js` is run directly (not imported), it automatically starts the server with configuration from `src/config.js`.
227
-
228
- ## Requirements
229
-
230
- - Node.js ≥ 22.0.0
231
- - PostgreSQL database (configured via environment variables or config.js)
232
- - Database must be initialized first (run `npm run init`)
233
-
234
- ## See Also
235
-
236
- - [Main README](./README.md) - General Queen MQ documentation
237
- - [API Documentation](./API.md) - HTTP API reference
238
- - [Examples](./examples/) - More usage examples
239
-