queen-mq 0.3.1 → 0.6.3

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 (45) hide show
  1. package/README.md +309 -167
  2. package/client-js/client-v2/Queen.js +66 -0
  3. package/client-js/client-v2/README.md +67 -10
  4. package/client-js/client-v2/builders/QueueBuilder.js +7 -1
  5. package/client-js/client-v2/builders/TransactionBuilder.js +20 -4
  6. package/client-js/client-v2/stream/StreamBuilder.js +72 -0
  7. package/client-js/client-v2/stream/StreamConsumer.js +156 -0
  8. package/client-js/client-v2/stream/Window.js +140 -0
  9. package/client-js/test-v2/GETTING_STARTED.md +27 -0
  10. package/client-js/test-v2/MAINTENANCE_TEST.md +148 -0
  11. package/client-js/test-v2/README_SUBSCRIPTION_TESTS.md +201 -0
  12. package/client-js/test-v2/consume.js +11 -0
  13. package/client-js/test-v2/dlq.js +1 -1
  14. package/client-js/test-v2/load.js +2 -0
  15. package/client-js/test-v2/maintenance.js +261 -0
  16. package/client-js/test-v2/retention.js +69 -0
  17. package/client-js/test-v2/run.js +7 -1
  18. package/client-js/test-v2/subscription.js +198 -18
  19. package/client-js/test-v2/transaction.js +66 -4
  20. package/package.json +2 -2
  21. package/client-js/client/client.js +0 -1536
  22. package/client-js/client/index.js +0 -4
  23. package/client-js/client/utils/http.js +0 -173
  24. package/client-js/client/utils/loadBalancer.js +0 -152
  25. package/client-js/client/utils/retry.js +0 -41
  26. package/client-js/services/encryptionService.js +0 -82
  27. package/client-js/services/evictionService.js +0 -160
  28. package/client-js/services/retentionService.js +0 -162
  29. package/client-js/services/startupSync.js +0 -35
  30. package/client-js/test/README.md +0 -224
  31. package/client-js/test/advanced-client-tests.js +0 -761
  32. package/client-js/test/advanced-pattern-tests.js +0 -1137
  33. package/client-js/test/bus-mode-tests.js +0 -361
  34. package/client-js/test/core-tests.js +0 -457
  35. package/client-js/test/edge-case-tests.js +0 -562
  36. package/client-js/test/enterprise-tests.js +0 -637
  37. package/client-js/test/human.js +0 -162
  38. package/client-js/test/partition-locking-tests.js +0 -545
  39. package/client-js/test/partition-transaction-tests.js +0 -482
  40. package/client-js/test/qos0-tests.js +0 -334
  41. package/client-js/test/test-new.js +0 -370
  42. package/client-js/test/utils.js +0 -169
  43. package/client-js/test/window-buffer-test.js +0 -114
  44. package/client-js/utils/logger.js +0 -44
  45. package/client-js/utils/uuid.js +0 -5
@@ -70,8 +70,8 @@ export async function transactionMultiplePushes(client) {
70
70
  }
71
71
 
72
72
  export async function transactionMultipleAcks(client) {
73
- const queueA = await client.queue('test-queue-v2-txn-multi-ack-a').create()
74
- const queueB = await client.queue('test-queue-v2-txn-multi-ack-b').create()
73
+ const queueA = await client.queue('test-queue-v2-txn-multi-ack-a').config().create()
74
+ const queueB = await client.queue('test-queue-v2-txn-multi-ack-b').config().create()
75
75
  if (!queueA.configured || !queueB.configured) {
76
76
  return { success: false, message: 'Queues not created' }
77
77
  }
@@ -111,8 +111,12 @@ export async function transactionMultipleAcks(client) {
111
111
  }
112
112
 
113
113
  export async function transactionAckWithStatus(client) {
114
- const queueA = await client.queue('test-queue-v2-txn-ack-status-a').create()
115
- const queueB = await client.queue('test-queue-v2-txn-ack-status-b').create()
114
+ const queueA = await client.queue('test-queue-v2-txn-ack-status-a').config({
115
+ retryLimit: 0
116
+ }).create()
117
+ const queueB = await client.queue('test-queue-v2-txn-ack-status-b').config({
118
+ retryLimit: 0
119
+ }).create()
116
120
  if (!queueA.configured || !queueB.configured) {
117
121
  return { success: false, message: 'Queues not created' }
118
122
  }
@@ -441,3 +445,61 @@ export async function transactionMultipleQueues(client) {
441
445
  }
442
446
  }
443
447
 
448
+ export async function transactionRollback(client) {
449
+ const queueA = await client.queue('test-queue-v2-txn-rollback-a')
450
+ .config({
451
+ leaseTime: 1
452
+ }).create()
453
+ const queueB = await client.queue('test-queue-v2-txn-rollback-b').config({
454
+ leaseTime: 1
455
+ }).create()
456
+ if (!queueA.configured || !queueB.configured) {
457
+ return { success: false, message: 'Queues not created' }
458
+ }
459
+
460
+ // Push a test message to queue A
461
+ await client.queue('test-queue-v2-txn-rollback-a').push([{ data: { test: 'rollback' } }])
462
+
463
+ // Pop the message
464
+ const messages = await client.queue('test-queue-v2-txn-rollback-a').batch(1).wait(false).pop()
465
+ if (messages.length === 0) {
466
+ return { success: false, message: 'No message to pop' }
467
+ }
468
+
469
+ // Attempt a transaction that should fail and rollback
470
+ let transactionFailed = false
471
+ try {
472
+ await client
473
+ .transaction()
474
+ .queue('test-queue-v2-txn-rollback-b')
475
+ .push([{ data: { value: 1 } }]) // This PUSH should succeed...
476
+ .ack(messages[0]) // This ACK should succeed...
477
+ .ack({ transactionId: 'non-existent-id', partitionId: messages[0].partitionId }) // But this should FAIL
478
+ .commit()
479
+ } catch (error) {
480
+ transactionFailed = true
481
+ }
482
+
483
+ // Verify transaction failed
484
+ if (!transactionFailed) {
485
+ return { success: false, message: 'Transaction should have failed but did not' }
486
+ }
487
+
488
+ await new Promise(resolve => setTimeout(resolve, 2000))
489
+
490
+ // Verify rollback: queue B should be EMPTY (PUSH was rolled back)
491
+ const resultB = await client.queue('test-queue-v2-txn-rollback-b').batch(10).wait(false).pop()
492
+
493
+ // Verify rollback: queue A should still have the message (ACK was rolled back)
494
+ const resultA = await client.queue('test-queue-v2-txn-rollback-a').batch(10).wait(false).pop()
495
+
496
+ const rollbackWorked = resultB.length === 0 && resultA.length === 1
497
+
498
+ return {
499
+ success: rollbackWorked,
500
+ message: rollbackWorked
501
+ ? 'Transaction rollback verified: PUSH and ACK were both rolled back'
502
+ : `Rollback failed: Queue A has ${resultA.length} messages (expected 1), Queue B has ${resultB.length} messages (expected 0)`
503
+ }
504
+ }
505
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "queen-mq",
3
- "version": "0.3.1",
3
+ "version": "0.6.3",
4
4
  "type": "module",
5
5
  "description": "High-performance C++ message queue backed by PostgreSQL",
6
6
  "main": "client-js/client-v2/index.js",
@@ -8,7 +8,7 @@
8
8
  "start": "./server/bin/queen-server",
9
9
  "build:webapp": "cd webapp && npm install && npm run build",
10
10
  "publish:public": "npm publish --access public",
11
- "test": "node client-js/test/test-new.js"
11
+ "test": "node client-js/test-v2/run.js human"
12
12
  },
13
13
  "files": [
14
14
  "client-js/",