@geekmidas/events 1.1.6 → 10.0.0-alpha.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.
- package/dist/{PgBossConnection-B71ssr72.cjs → PgBossConnection-23soZ_aM.cjs} +2 -2
- package/dist/{PgBossConnection-B71ssr72.cjs.map → PgBossConnection-23soZ_aM.cjs.map} +1 -1
- package/dist/PgBossConnection-CCXhoNzb.cjs +4 -0
- package/dist/{PgBossConnection-Bj_Wo1lQ.mjs → PgBossConnection-DvNbd4Zk.mjs} +2 -2
- package/dist/{PgBossConnection-Bj_Wo1lQ.mjs.map → PgBossConnection-DvNbd4Zk.mjs.map} +1 -1
- package/dist/PgBossConnection-_gdM40JB.mjs +4 -0
- package/dist/{RabbitMQConnection-DddqvI3I.cjs → RabbitMQConnection-BKEdCUro.cjs} +2 -2
- package/dist/{RabbitMQConnection-DddqvI3I.cjs.map → RabbitMQConnection-BKEdCUro.cjs.map} +1 -1
- package/dist/RabbitMQConnection-CCOqDDnb.cjs +4 -0
- package/dist/RabbitMQConnection-DJEyM-Bu.mjs +4 -0
- package/dist/{RabbitMQConnection-Cg7mp8u-.mjs → RabbitMQConnection-DJgUPc19.mjs} +2 -2
- package/dist/{RabbitMQConnection-Cg7mp8u-.mjs.map → RabbitMQConnection-DJgUPc19.mjs.map} +1 -1
- package/dist/{SNSConnection-DFehUWG1.cjs → SNSConnection-B2K86hpz.cjs} +7 -8
- package/dist/SNSConnection-B2K86hpz.cjs.map +1 -0
- package/dist/SNSConnection-BVo84FeW.mjs +5 -0
- package/dist/SNSConnection-DIHRjrQF.cjs +5 -0
- package/dist/{SNSConnection-CpMKzgx2.mjs → SNSConnection-v9jjF99w.mjs} +7 -8
- package/dist/SNSConnection-v9jjF99w.mjs.map +1 -0
- package/dist/{SQSConnection-BqZZnAZI.mjs → SQSConnection-4tBMkVZE.mjs} +7 -8
- package/dist/SQSConnection-4tBMkVZE.mjs.map +1 -0
- package/dist/SQSConnection-BBLAvF-1.cjs +5 -0
- package/dist/{SQSConnection-yge9cB_f.cjs → SQSConnection-BaC7rGhI.cjs} +7 -8
- package/dist/SQSConnection-BaC7rGhI.cjs.map +1 -0
- package/dist/SQSConnection-DbavOq8_.mjs +5 -0
- package/dist/{SQSSubscriber-CVGhZ8Nr.mjs → SQSSubscriber-BMWZ3s5q.mjs} +1 -1
- package/dist/{SQSSubscriber-CVGhZ8Nr.mjs.map → SQSSubscriber-BMWZ3s5q.mjs.map} +1 -1
- package/dist/{SQSSubscriber-B4sRXVl6.cjs → SQSSubscriber-YXPlg2rm.cjs} +2 -2
- package/dist/{SQSSubscriber-B4sRXVl6.cjs.map → SQSSubscriber-YXPlg2rm.cjs.map} +1 -1
- package/dist/basic/index.cjs +71 -8
- package/dist/basic/index.cjs.map +1 -0
- package/dist/basic/index.d.cts +44 -5
- package/dist/basic/index.d.cts.map +1 -0
- package/dist/basic/index.d.mts +44 -5
- package/dist/basic/index.d.mts.map +1 -0
- package/dist/basic/index.mjs +67 -5
- package/dist/basic/index.mjs.map +1 -0
- package/dist/chunk-B9dir_RE.mjs +11 -0
- package/dist/{chunk-CUT6urMc.cjs → chunk-CsX-DzYB.cjs} +12 -0
- package/dist/index.cjs +189 -6
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +46 -5
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +46 -5
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +188 -5
- package/dist/index.mjs.map +1 -0
- package/dist/pgboss/index.cjs +81 -5
- package/dist/pgboss/index.cjs.map +1 -0
- package/dist/pgboss/index.d.cts +65 -5
- package/dist/pgboss/index.d.cts.map +1 -0
- package/dist/pgboss/index.d.mts +65 -5
- package/dist/pgboss/index.d.mts.map +1 -0
- package/dist/pgboss/index.mjs +81 -5
- package/dist/pgboss/index.mjs.map +1 -0
- package/dist/rabbitmq/index.cjs +95 -5
- package/dist/rabbitmq/index.cjs.map +1 -0
- package/dist/rabbitmq/index.d.cts +83 -5
- package/dist/rabbitmq/index.d.cts.map +1 -0
- package/dist/rabbitmq/index.d.mts +83 -5
- package/dist/rabbitmq/index.d.mts.map +1 -0
- package/dist/rabbitmq/index.mjs +95 -5
- package/dist/rabbitmq/index.mjs.map +1 -0
- package/dist/sns/index.cjs +186 -7
- package/dist/sns/index.cjs.map +1 -0
- package/dist/sns/index.d.cts +109 -5
- package/dist/sns/index.d.cts.map +1 -0
- package/dist/sns/index.d.mts +109 -5
- package/dist/sns/index.d.mts.map +1 -0
- package/dist/sns/index.mjs +179 -7
- package/dist/sns/index.mjs.map +1 -0
- package/dist/sns/snsUrl.cjs +7 -0
- package/dist/sns/snsUrl.d.cts +2 -0
- package/dist/sns/snsUrl.d.mts +2 -0
- package/dist/sns/snsUrl.mjs +3 -0
- package/dist/snsUrl-ASdc0D1v.d.cts +61 -0
- package/dist/snsUrl-ASdc0D1v.d.cts.map +1 -0
- package/dist/snsUrl-CifYhPAa.mjs +79 -0
- package/dist/snsUrl-CifYhPAa.mjs.map +1 -0
- package/dist/snsUrl-FRbRcwF0.d.mts +61 -0
- package/dist/snsUrl-FRbRcwF0.d.mts.map +1 -0
- package/dist/snsUrl-f2gU3CzK.cjs +114 -0
- package/dist/snsUrl-f2gU3CzK.cjs.map +1 -0
- package/dist/sqs/index.cjs +67 -5
- package/dist/sqs/index.cjs.map +1 -0
- package/dist/sqs/index.d.cts +101 -5
- package/dist/sqs/index.d.cts.map +1 -0
- package/dist/sqs/index.d.mts +101 -5
- package/dist/sqs/index.d.mts.map +1 -0
- package/dist/sqs/index.mjs +60 -5
- package/dist/sqs/index.mjs.map +1 -0
- package/dist/sqs/sqsUrl.cjs +7 -0
- package/dist/sqs/sqsUrl.d.cts +2 -0
- package/dist/sqs/sqsUrl.d.mts +2 -0
- package/dist/sqs/sqsUrl.mjs +3 -0
- package/dist/sqsUrl-BV6zS-mi.d.mts +60 -0
- package/dist/sqsUrl-BV6zS-mi.d.mts.map +1 -0
- package/dist/sqsUrl-CbAsBFHI.mjs +80 -0
- package/dist/sqsUrl-CbAsBFHI.mjs.map +1 -0
- package/dist/sqsUrl-CdisN3GU.cjs +115 -0
- package/dist/sqsUrl-CdisN3GU.cjs.map +1 -0
- package/dist/sqsUrl-DZDPHxIk.d.cts +60 -0
- package/dist/sqsUrl-DZDPHxIk.d.cts.map +1 -0
- package/dist/{types-Dh9Jyinx.d.mts → types-BmixGrOD.d.cts} +1 -1
- package/dist/{types-Dh9Jyinx.d.mts.map → types-BmixGrOD.d.cts.map} +1 -1
- package/dist/{types-BrdcSEnd.mjs → types-CYDt-2RQ.mjs} +1 -1
- package/dist/{types-BrdcSEnd.mjs.map → types-CYDt-2RQ.mjs.map} +1 -1
- package/dist/{types-Dj23od3e.d.cts → types-DycjsYms.d.mts} +1 -1
- package/dist/{types-Dj23od3e.d.cts.map → types-DycjsYms.d.mts.map} +1 -1
- package/package.json +26 -3
- package/CHANGELOG.md +0 -88
- package/dist/BasicConnection-CQsJpx2J.d.cts +0 -27
- package/dist/BasicConnection-CQsJpx2J.d.cts.map +0 -1
- package/dist/BasicConnection-CxfNEvlb.cjs +0 -48
- package/dist/BasicConnection-CxfNEvlb.cjs.map +0 -1
- package/dist/BasicConnection-DcRelT64.d.mts +0 -27
- package/dist/BasicConnection-DcRelT64.d.mts.map +0 -1
- package/dist/BasicConnection-hl-Ogz3a.mjs +0 -42
- package/dist/BasicConnection-hl-Ogz3a.mjs.map +0 -1
- package/dist/BasicPublisher-C-hMX2Hy.d.mts +0 -14
- package/dist/BasicPublisher-C-hMX2Hy.d.mts.map +0 -1
- package/dist/BasicPublisher-CGMXg2I2.d.cts +0 -14
- package/dist/BasicPublisher-CGMXg2I2.d.cts.map +0 -1
- package/dist/BasicPublisher-CXAVKxgq.cjs +0 -20
- package/dist/BasicPublisher-CXAVKxgq.cjs.map +0 -1
- package/dist/BasicPublisher-DogbeHAH.mjs +0 -14
- package/dist/BasicPublisher-DogbeHAH.mjs.map +0 -1
- package/dist/BasicSubscriber-BJSZN22M.mjs +0 -16
- package/dist/BasicSubscriber-BJSZN22M.mjs.map +0 -1
- package/dist/BasicSubscriber-HzSJ_MbB.d.mts +0 -14
- package/dist/BasicSubscriber-HzSJ_MbB.d.mts.map +0 -1
- package/dist/BasicSubscriber-mVJRMXhZ.cjs +0 -22
- package/dist/BasicSubscriber-mVJRMXhZ.cjs.map +0 -1
- package/dist/BasicSubscriber-uW3IOyBj.d.cts +0 -14
- package/dist/BasicSubscriber-uW3IOyBj.d.cts.map +0 -1
- package/dist/EventConnection-4niMI6D8.d.mts +0 -13
- package/dist/EventConnection-4niMI6D8.d.mts.map +0 -1
- package/dist/EventConnection-BkA9FSVL.cjs +0 -45
- package/dist/EventConnection-BkA9FSVL.cjs.map +0 -1
- package/dist/EventConnection-Kr32GAzq.mjs +0 -40
- package/dist/EventConnection-Kr32GAzq.mjs.map +0 -1
- package/dist/EventConnection-dP42P87q.d.cts +0 -13
- package/dist/EventConnection-dP42P87q.d.cts.map +0 -1
- package/dist/EventConnection.cjs +0 -5
- package/dist/EventConnection.d.cts +0 -3
- package/dist/EventConnection.d.mts +0 -3
- package/dist/EventConnection.mjs +0 -4
- package/dist/PgBossConnection-DCfLGoHx.d.mts +0 -32
- package/dist/PgBossConnection-DCfLGoHx.d.mts.map +0 -1
- package/dist/PgBossConnection-oto_CAbP.d.cts +0 -32
- package/dist/PgBossConnection-oto_CAbP.d.cts.map +0 -1
- package/dist/PgBossPublisher-Bwo7qSoH.mjs +0 -35
- package/dist/PgBossPublisher-Bwo7qSoH.mjs.map +0 -1
- package/dist/PgBossPublisher-CqjigBVC.d.mts +0 -20
- package/dist/PgBossPublisher-CqjigBVC.d.mts.map +0 -1
- package/dist/PgBossPublisher-FTdYh58W.cjs +0 -41
- package/dist/PgBossPublisher-FTdYh58W.cjs.map +0 -1
- package/dist/PgBossPublisher-JIiB1zpA.d.cts +0 -20
- package/dist/PgBossPublisher-JIiB1zpA.d.cts.map +0 -1
- package/dist/PgBossSubscriber-BUiB1JKf.d.mts +0 -24
- package/dist/PgBossSubscriber-BUiB1JKf.d.mts.map +0 -1
- package/dist/PgBossSubscriber-BubVfuWm.cjs +0 -52
- package/dist/PgBossSubscriber-BubVfuWm.cjs.map +0 -1
- package/dist/PgBossSubscriber-Cozijfdj.d.cts +0 -24
- package/dist/PgBossSubscriber-Cozijfdj.d.cts.map +0 -1
- package/dist/PgBossSubscriber-DopATe80.mjs +0 -46
- package/dist/PgBossSubscriber-DopATe80.mjs.map +0 -1
- package/dist/Publisher-CKloIGh6.cjs +0 -79
- package/dist/Publisher-CKloIGh6.cjs.map +0 -1
- package/dist/Publisher-ChLTrUeP.mjs +0 -74
- package/dist/Publisher-ChLTrUeP.mjs.map +0 -1
- package/dist/Publisher-DDee6xau.d.cts +0 -21
- package/dist/Publisher-DDee6xau.d.cts.map +0 -1
- package/dist/Publisher-VHumMkrP.d.mts +0 -21
- package/dist/Publisher-VHumMkrP.d.mts.map +0 -1
- package/dist/Publisher.cjs +0 -4
- package/dist/Publisher.d.cts +0 -3
- package/dist/Publisher.d.mts +0 -3
- package/dist/Publisher.mjs +0 -4
- package/dist/RabbitMQConnection-DV9t3VYp.d.mts +0 -44
- package/dist/RabbitMQConnection-DV9t3VYp.d.mts.map +0 -1
- package/dist/RabbitMQConnection-jNME_eR7.d.cts +0 -44
- package/dist/RabbitMQConnection-jNME_eR7.d.cts.map +0 -1
- package/dist/RabbitMQPublisher-BfTRUnpy.cjs +0 -45
- package/dist/RabbitMQPublisher-BfTRUnpy.cjs.map +0 -1
- package/dist/RabbitMQPublisher-Cxm1zSkD.mjs +0 -39
- package/dist/RabbitMQPublisher-Cxm1zSkD.mjs.map +0 -1
- package/dist/RabbitMQPublisher-DKmgwqVj.d.mts +0 -25
- package/dist/RabbitMQPublisher-DKmgwqVj.d.mts.map +0 -1
- package/dist/RabbitMQPublisher-d257OHLa.d.cts +0 -25
- package/dist/RabbitMQPublisher-d257OHLa.d.cts.map +0 -1
- package/dist/RabbitMQSubscriber-BF7JGfYm.d.cts +0 -27
- package/dist/RabbitMQSubscriber-BF7JGfYm.d.cts.map +0 -1
- package/dist/RabbitMQSubscriber-CWDdmt1M.cjs +0 -62
- package/dist/RabbitMQSubscriber-CWDdmt1M.cjs.map +0 -1
- package/dist/RabbitMQSubscriber-CdbUy5mB.d.mts +0 -27
- package/dist/RabbitMQSubscriber-CdbUy5mB.d.mts.map +0 -1
- package/dist/RabbitMQSubscriber-fP8G9OlK.mjs +0 -56
- package/dist/RabbitMQSubscriber-fP8G9OlK.mjs.map +0 -1
- package/dist/SNSConnection-CG4iEwA8.d.mts +0 -41
- package/dist/SNSConnection-CG4iEwA8.d.mts.map +0 -1
- package/dist/SNSConnection-CpMKzgx2.mjs.map +0 -1
- package/dist/SNSConnection-DFehUWG1.cjs.map +0 -1
- package/dist/SNSConnection-Dol9FuxA.d.cts +0 -41
- package/dist/SNSConnection-Dol9FuxA.d.cts.map +0 -1
- package/dist/SNSPublisher-BoA8uLnw.cjs +0 -47
- package/dist/SNSPublisher-BoA8uLnw.cjs.map +0 -1
- package/dist/SNSPublisher-D50dPCEh.d.mts +0 -22
- package/dist/SNSPublisher-D50dPCEh.d.mts.map +0 -1
- package/dist/SNSPublisher-DQunY4NM.d.cts +0 -22
- package/dist/SNSPublisher-DQunY4NM.d.cts.map +0 -1
- package/dist/SNSPublisher-Drr4kHn6.mjs +0 -41
- package/dist/SNSPublisher-Drr4kHn6.mjs.map +0 -1
- package/dist/SNSSubscriber-CUgHK4W2.d.mts +0 -55
- package/dist/SNSSubscriber-CUgHK4W2.d.mts.map +0 -1
- package/dist/SNSSubscriber-DIXqA-VV.mjs +0 -139
- package/dist/SNSSubscriber-DIXqA-VV.mjs.map +0 -1
- package/dist/SNSSubscriber-ZGJjhXFQ.d.cts +0 -55
- package/dist/SNSSubscriber-ZGJjhXFQ.d.cts.map +0 -1
- package/dist/SNSSubscriber-ZIdCi6nQ.cjs +0 -145
- package/dist/SNSSubscriber-ZIdCi6nQ.cjs.map +0 -1
- package/dist/SQSConnection-BqZZnAZI.mjs.map +0 -1
- package/dist/SQSConnection-BtEkDha8.d.cts +0 -41
- package/dist/SQSConnection-BtEkDha8.d.cts.map +0 -1
- package/dist/SQSConnection-DVy43GCV.d.mts +0 -41
- package/dist/SQSConnection-DVy43GCV.d.mts.map +0 -1
- package/dist/SQSConnection-yge9cB_f.cjs.map +0 -1
- package/dist/SQSPublisher-DG9o4ME3.mjs +0 -57
- package/dist/SQSPublisher-DG9o4ME3.mjs.map +0 -1
- package/dist/SQSPublisher-Dq5353oZ.cjs +0 -63
- package/dist/SQSPublisher-Dq5353oZ.cjs.map +0 -1
- package/dist/SQSPublisher-kyl5HW3N.d.cts +0 -25
- package/dist/SQSPublisher-kyl5HW3N.d.cts.map +0 -1
- package/dist/SQSPublisher-qDE5Fp-N.d.mts +0 -25
- package/dist/SQSPublisher-qDE5Fp-N.d.mts.map +0 -1
- package/dist/SQSSubscriber-CDvaG4ij.d.cts +0 -44
- package/dist/SQSSubscriber-CDvaG4ij.d.cts.map +0 -1
- package/dist/SQSSubscriber-JfFuAAoP.d.mts +0 -44
- package/dist/SQSSubscriber-JfFuAAoP.d.mts.map +0 -1
- package/dist/Subscriber-CG_QUQZs.d.cts +0 -21
- package/dist/Subscriber-CG_QUQZs.d.cts.map +0 -1
- package/dist/Subscriber-CghW0A02.cjs +0 -88
- package/dist/Subscriber-CghW0A02.cjs.map +0 -1
- package/dist/Subscriber-DiYHmuF0.d.mts +0 -21
- package/dist/Subscriber-DiYHmuF0.d.mts.map +0 -1
- package/dist/Subscriber-bnkFtSvt.mjs +0 -83
- package/dist/Subscriber-bnkFtSvt.mjs.map +0 -1
- package/dist/Subscriber.cjs +0 -4
- package/dist/Subscriber.d.cts +0 -3
- package/dist/Subscriber.d.mts +0 -3
- package/dist/Subscriber.mjs +0 -4
- package/dist/basic/BasicConnection.cjs +0 -4
- package/dist/basic/BasicConnection.d.cts +0 -3
- package/dist/basic/BasicConnection.d.mts +0 -3
- package/dist/basic/BasicConnection.mjs +0 -4
- package/dist/basic/BasicPublisher.cjs +0 -3
- package/dist/basic/BasicPublisher.d.cts +0 -4
- package/dist/basic/BasicPublisher.d.mts +0 -4
- package/dist/basic/BasicPublisher.mjs +0 -3
- package/dist/basic/BasicSubscriber.cjs +0 -3
- package/dist/basic/BasicSubscriber.d.cts +0 -4
- package/dist/basic/BasicSubscriber.d.mts +0 -4
- package/dist/basic/BasicSubscriber.mjs +0 -3
- package/dist/pgboss/PgBossConnection.cjs +0 -4
- package/dist/pgboss/PgBossConnection.d.cts +0 -3
- package/dist/pgboss/PgBossConnection.d.mts +0 -3
- package/dist/pgboss/PgBossConnection.mjs +0 -4
- package/dist/pgboss/PgBossPublisher.cjs +0 -3
- package/dist/pgboss/PgBossPublisher.d.cts +0 -4
- package/dist/pgboss/PgBossPublisher.d.mts +0 -4
- package/dist/pgboss/PgBossPublisher.mjs +0 -3
- package/dist/pgboss/PgBossSubscriber.cjs +0 -3
- package/dist/pgboss/PgBossSubscriber.d.cts +0 -4
- package/dist/pgboss/PgBossSubscriber.d.mts +0 -4
- package/dist/pgboss/PgBossSubscriber.mjs +0 -3
- package/dist/rabbitmq/RabbitMQConnection.cjs +0 -4
- package/dist/rabbitmq/RabbitMQConnection.d.cts +0 -3
- package/dist/rabbitmq/RabbitMQConnection.d.mts +0 -3
- package/dist/rabbitmq/RabbitMQConnection.mjs +0 -4
- package/dist/rabbitmq/RabbitMQPublisher.cjs +0 -3
- package/dist/rabbitmq/RabbitMQPublisher.d.cts +0 -4
- package/dist/rabbitmq/RabbitMQPublisher.d.mts +0 -4
- package/dist/rabbitmq/RabbitMQPublisher.mjs +0 -3
- package/dist/rabbitmq/RabbitMQSubscriber.cjs +0 -3
- package/dist/rabbitmq/RabbitMQSubscriber.d.cts +0 -4
- package/dist/rabbitmq/RabbitMQSubscriber.d.mts +0 -4
- package/dist/rabbitmq/RabbitMQSubscriber.mjs +0 -3
- package/dist/sns/SNSConnection.cjs +0 -4
- package/dist/sns/SNSConnection.d.cts +0 -3
- package/dist/sns/SNSConnection.d.mts +0 -3
- package/dist/sns/SNSConnection.mjs +0 -4
- package/dist/sns/SNSPublisher.cjs +0 -3
- package/dist/sns/SNSPublisher.d.cts +0 -4
- package/dist/sns/SNSPublisher.d.mts +0 -4
- package/dist/sns/SNSPublisher.mjs +0 -3
- package/dist/sns/SNSSubscriber.cjs +0 -6
- package/dist/sns/SNSSubscriber.d.cts +0 -4
- package/dist/sns/SNSSubscriber.d.mts +0 -4
- package/dist/sns/SNSSubscriber.mjs +0 -6
- package/dist/sqs/SQSConnection.cjs +0 -4
- package/dist/sqs/SQSConnection.d.cts +0 -3
- package/dist/sqs/SQSConnection.d.mts +0 -3
- package/dist/sqs/SQSConnection.mjs +0 -4
- package/dist/sqs/SQSPublisher.cjs +0 -3
- package/dist/sqs/SQSPublisher.d.cts +0 -4
- package/dist/sqs/SQSPublisher.d.mts +0 -4
- package/dist/sqs/SQSPublisher.mjs +0 -3
- package/dist/sqs/SQSSubscriber.cjs +0 -3
- package/dist/sqs/SQSSubscriber.d.cts +0 -4
- package/dist/sqs/SQSSubscriber.d.mts +0 -4
- package/dist/sqs/SQSSubscriber.mjs +0 -3
- package/dist/types.cjs +0 -3
- package/dist/types.d.cts +0 -2
- package/dist/types.d.mts +0 -2
- package/dist/types.mjs +0 -3
- package/src/EventConnection.ts +0 -43
- package/src/Publisher.ts +0 -98
- package/src/Subscriber.ts +0 -113
- package/src/__tests__/EventConnection.spec.ts +0 -42
- package/src/__tests__/Publisher.spec.ts +0 -96
- package/src/__tests__/Subscriber.spec.ts +0 -109
- package/src/basic/BasicConnection.ts +0 -47
- package/src/basic/BasicPublisher.ts +0 -15
- package/src/basic/BasicSubscriber.ts +0 -21
- package/src/basic/__tests__/BasicSubscriber.spec.ts +0 -166
- package/src/basic/index.ts +0 -3
- package/src/index.ts +0 -25
- package/src/pgboss/PgBossConnection.ts +0 -91
- package/src/pgboss/PgBossPublisher.ts +0 -49
- package/src/pgboss/PgBossSubscriber.ts +0 -81
- package/src/pgboss/__tests__/pgboss.spec.ts +0 -196
- package/src/pgboss/__tests__/setup.ts +0 -21
- package/src/pgboss/index.ts +0 -5
- package/src/rabbitmq/RabbitMQConnection.ts +0 -148
- package/src/rabbitmq/RabbitMQPublisher.ts +0 -67
- package/src/rabbitmq/RabbitMQSubscriber.ts +0 -111
- package/src/rabbitmq/__tests__/RabbitMQPublisher.spec.ts +0 -378
- package/src/rabbitmq/__tests__/RabbitMQSubscriber.spec.ts +0 -292
- package/src/rabbitmq/index.ts +0 -6
- package/src/sns/SNSConnection.ts +0 -98
- package/src/sns/SNSPublisher.ts +0 -62
- package/src/sns/SNSSubscriber.ts +0 -218
- package/src/sns/__tests__/SNS-SQS-Integration.spec.ts +0 -389
- package/src/sns/__tests__/SNSPublisher.spec.ts +0 -449
- package/src/sns/__tests__/SNSSubscriber.spec.ts +0 -527
- package/src/sns/index.ts +0 -6
- package/src/sqs/SQSConnection.ts +0 -97
- package/src/sqs/SQSPublisher.ts +0 -105
- package/src/sqs/SQSSubscriber.ts +0 -181
- package/src/sqs/__tests__/SQSPublisher.spec.ts +0 -189
- package/src/sqs/index.ts +0 -6
- package/src/types.ts +0 -76
- package/tsconfig.json +0 -9
- package/tsdown.config.ts +0 -10
package/dist/rabbitmq/index.cjs
CHANGED
|
@@ -1,8 +1,98 @@
|
|
|
1
1
|
require('../types-Byv8N9ma.cjs');
|
|
2
|
-
const require_RabbitMQConnection = require('../RabbitMQConnection-
|
|
3
|
-
const require_RabbitMQPublisher = require('../RabbitMQPublisher-BfTRUnpy.cjs');
|
|
4
|
-
const require_RabbitMQSubscriber = require('../RabbitMQSubscriber-CWDdmt1M.cjs');
|
|
2
|
+
const require_RabbitMQConnection = require('../RabbitMQConnection-BKEdCUro.cjs');
|
|
5
3
|
|
|
4
|
+
//#region src/rabbitmq/RabbitMQPublisher.ts
|
|
5
|
+
var RabbitMQPublisher = class RabbitMQPublisher {
|
|
6
|
+
constructor(connection, options = {}) {
|
|
7
|
+
this.connection = connection;
|
|
8
|
+
this.options = options;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Create a RabbitMQPublisher from a connection string
|
|
12
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&timeout=5000
|
|
13
|
+
*/
|
|
14
|
+
static async fromConnectionString(connectionString) {
|
|
15
|
+
const { RabbitMQConnection: RabbitMQConnection$1 } = await Promise.resolve().then(() => require("../RabbitMQConnection-CCOqDDnb.cjs"));
|
|
16
|
+
const connection = await RabbitMQConnection$1.fromConnectionString(connectionString);
|
|
17
|
+
return new RabbitMQPublisher(connection);
|
|
18
|
+
}
|
|
19
|
+
async publish(messages) {
|
|
20
|
+
if (!this.connection.isConnected()) await this.connection.connect();
|
|
21
|
+
const channel = this.connection.amqpChannel;
|
|
22
|
+
if (!channel) throw new Error("Channel not initialized");
|
|
23
|
+
const exchange = this.connection.exchangeName;
|
|
24
|
+
for (const message of messages) {
|
|
25
|
+
const content = Buffer.from(JSON.stringify(message.payload));
|
|
26
|
+
const routingKey = message.type;
|
|
27
|
+
const published = channel.publish(exchange, routingKey, content, {
|
|
28
|
+
contentType: "application/json",
|
|
29
|
+
timestamp: Date.now(),
|
|
30
|
+
type: message.type,
|
|
31
|
+
persistent: true,
|
|
32
|
+
...this.options.publishOptions
|
|
33
|
+
});
|
|
34
|
+
if (!published) await new Promise((resolve) => channel.once("drain", resolve));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async close() {}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/rabbitmq/RabbitMQSubscriber.ts
|
|
42
|
+
var RabbitMQSubscriber = class RabbitMQSubscriber {
|
|
43
|
+
constructor(connection, options = {}) {
|
|
44
|
+
this.connection = connection;
|
|
45
|
+
this.options = options;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create a RabbitMQSubscriber from a connection string
|
|
49
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&queueName=myqueue&prefetch=10
|
|
50
|
+
*/
|
|
51
|
+
static async fromConnectionString(connectionString) {
|
|
52
|
+
const url = new URL(connectionString);
|
|
53
|
+
const params = url.searchParams;
|
|
54
|
+
const { RabbitMQConnection: RabbitMQConnection$1 } = await Promise.resolve().then(() => require("../RabbitMQConnection-CCOqDDnb.cjs"));
|
|
55
|
+
const connection = await RabbitMQConnection$1.fromConnectionString(connectionString);
|
|
56
|
+
const options = {
|
|
57
|
+
queueName: params.get("queueName") || void 0,
|
|
58
|
+
prefetch: params.get("prefetch") ? Number.parseInt(params.get("prefetch"), 10) : void 0
|
|
59
|
+
};
|
|
60
|
+
return new RabbitMQSubscriber(connection, options);
|
|
61
|
+
}
|
|
62
|
+
async subscribe(messages, listener) {
|
|
63
|
+
if (!this.connection.isConnected()) await this.connection.connect();
|
|
64
|
+
const channel = this.connection.amqpChannel;
|
|
65
|
+
if (!channel) throw new Error("Channel not initialized");
|
|
66
|
+
const exchange = this.connection.exchangeName;
|
|
67
|
+
if (this.options.prefetch) await channel.prefetch(this.options.prefetch);
|
|
68
|
+
const queueName = this.options.queueName || "";
|
|
69
|
+
const queueOptions = {
|
|
70
|
+
durable: true,
|
|
71
|
+
...this.options.queueOptions
|
|
72
|
+
};
|
|
73
|
+
const { queue } = await channel.assertQueue(queueName, queueOptions);
|
|
74
|
+
for (const messageType of messages) await channel.bindQueue(queue, exchange, messageType);
|
|
75
|
+
await channel.consume(queue, async (msg) => {
|
|
76
|
+
if (!msg) return;
|
|
77
|
+
try {
|
|
78
|
+
const content = msg.content.toString();
|
|
79
|
+
const payload = JSON.parse(content);
|
|
80
|
+
const messageType = msg.properties.type;
|
|
81
|
+
const fullMessage = {
|
|
82
|
+
type: messageType,
|
|
83
|
+
payload
|
|
84
|
+
};
|
|
85
|
+
await listener(fullMessage);
|
|
86
|
+
channel.ack(msg);
|
|
87
|
+
} catch (_error) {
|
|
88
|
+
channel.nack(msg, false, true);
|
|
89
|
+
}
|
|
90
|
+
}, this.options.consumeOptions);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
//#endregion
|
|
6
95
|
exports.RabbitMQConnection = require_RabbitMQConnection.RabbitMQConnection;
|
|
7
|
-
exports.RabbitMQPublisher =
|
|
8
|
-
exports.RabbitMQSubscriber =
|
|
96
|
+
exports.RabbitMQPublisher = RabbitMQPublisher;
|
|
97
|
+
exports.RabbitMQSubscriber = RabbitMQSubscriber;
|
|
98
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["connection: RabbitMQConnection","options: RabbitMQPublisherOptions","connectionString: string","messages: TMessage[]","connection: RabbitMQConnection","options: RabbitMQSubscriberOptions","connectionString: string","messages: TMessage['type'][]","listener: (payload: TMessage) => Promise<void>","queueOptions: amqplib.Options.AssertQueue","fullMessage: TMessage"],"sources":["../../src/rabbitmq/RabbitMQPublisher.ts","../../src/rabbitmq/RabbitMQSubscriber.ts"],"sourcesContent":["import type amqplib from 'amqplib';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { RabbitMQConnection } from './RabbitMQConnection';\n\nexport interface RabbitMQPublisherOptions {\n\tpublishOptions?: amqplib.Options.Publish;\n}\n\nexport class RabbitMQPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: RabbitMQConnection,\n\t\tprivate options: RabbitMQPublisherOptions = {},\n\t) {}\n\n\t/**\n\t * Create a RabbitMQPublisher from a connection string\n\t * Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&timeout=5000\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<RabbitMQPublisher<TMessage>> {\n\t\tconst { RabbitMQConnection } = await import('./RabbitMQConnection');\n\t\tconst connection =\n\t\t\tawait RabbitMQConnection.fromConnectionString(connectionString);\n\t\treturn new RabbitMQPublisher<TMessage>(connection);\n\t}\n\n\tasync publish(messages: TMessage[]): Promise<void> {\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tconst channel = this.connection.amqpChannel;\n\t\tif (!channel) {\n\t\t\tthrow new Error('Channel not initialized');\n\t\t}\n\n\t\tconst exchange = this.connection.exchangeName;\n\n\t\tfor (const message of messages) {\n\t\t\tconst content = Buffer.from(JSON.stringify(message.payload));\n\n\t\t\t// Use message type as routing key for topic exchanges\n\t\t\tconst routingKey = message.type;\n\n\t\t\tconst published = channel.publish(exchange, routingKey, content, {\n\t\t\t\tcontentType: 'application/json',\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\ttype: message.type,\n\t\t\t\tpersistent: true,\n\t\t\t\t...this.options.publishOptions,\n\t\t\t});\n\n\t\t\t// Handle backpressure\n\t\t\tif (!published) {\n\t\t\t\tawait new Promise((resolve) => channel.once('drain', resolve));\n\t\t\t}\n\t\t}\n\t}\n\n\tasync close(): Promise<void> {\n\t\t// Publisher doesn't own the connection\n\t\t// Connection should be closed by whoever created it\n\t}\n}\n","import type amqplib from 'amqplib';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { RabbitMQConnection } from './RabbitMQConnection';\n\nexport interface RabbitMQSubscriberOptions {\n\tqueueName?: string; // If not provided, a unique queue will be generated\n\tqueueOptions?: amqplib.Options.AssertQueue;\n\tconsumeOptions?: amqplib.Options.Consume;\n\tprefetch?: number; // Number of messages to prefetch (default: 1)\n}\n\nexport class RabbitMQSubscriber<\n\tTMessage extends PublishableMessage<string, any>,\n> implements EventSubscriber<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: RabbitMQConnection,\n\t\tprivate options: RabbitMQSubscriberOptions = {},\n\t) {}\n\n\t/**\n\t * Create a RabbitMQSubscriber from a connection string\n\t * Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&queueName=myqueue&prefetch=10\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<RabbitMQSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { RabbitMQConnection } = await import('./RabbitMQConnection');\n\t\tconst connection =\n\t\t\tawait RabbitMQConnection.fromConnectionString(connectionString);\n\n\t\tconst options: RabbitMQSubscriberOptions = {\n\t\t\tqueueName: params.get('queueName') || undefined,\n\t\t\tprefetch: params.get('prefetch')\n\t\t\t\t? Number.parseInt(params.get('prefetch')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new RabbitMQSubscriber<TMessage>(connection, options);\n\t}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tconst channel = this.connection.amqpChannel;\n\t\tif (!channel) {\n\t\t\tthrow new Error('Channel not initialized');\n\t\t}\n\n\t\tconst exchange = this.connection.exchangeName;\n\n\t\t// Set prefetch if specified\n\t\tif (this.options.prefetch) {\n\t\t\tawait channel.prefetch(this.options.prefetch);\n\t\t}\n\n\t\t// Assert queue\n\t\tconst queueName = this.options.queueName || '';\n\t\tconst queueOptions: amqplib.Options.AssertQueue = {\n\t\t\tdurable: true,\n\t\t\t...this.options.queueOptions,\n\t\t};\n\n\t\tconst { queue } = await channel.assertQueue(queueName, queueOptions);\n\n\t\t// Bind queue to exchange for each message type\n\t\tfor (const messageType of messages) {\n\t\t\tawait channel.bindQueue(queue, exchange, messageType);\n\t\t}\n\n\t\t// Consume messages\n\t\tawait channel.consume(\n\t\t\tqueue,\n\t\t\tasync (msg) => {\n\t\t\t\tif (!msg) return;\n\n\t\t\t\ttry {\n\t\t\t\t\t// Parse message payload\n\t\t\t\t\tconst content = msg.content.toString();\n\t\t\t\t\tconst payload = JSON.parse(content);\n\n\t\t\t\t\t// Get message type from properties\n\t\t\t\t\tconst messageType = msg.properties.type;\n\n\t\t\t\t\t// Reconstruct full message\n\t\t\t\t\tconst fullMessage: TMessage = {\n\t\t\t\t\t\ttype: messageType,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t} as TMessage;\n\n\t\t\t\t\t// Call listener\n\t\t\t\t\tawait listener(fullMessage);\n\n\t\t\t\t\t// Ack message\n\t\t\t\t\tchannel.ack(msg);\n\t\t\t\t} catch (_error) {\n\t\t\t\t\tchannel.nack(msg, false, true);\n\t\t\t\t}\n\t\t\t},\n\t\t\tthis.options.consumeOptions,\n\t\t);\n\t}\n}\n"],"mappings":";;;;AAQA,IAAa,oBAAb,MAAa,kBAEb;CACC,YACSA,YACAC,UAAoC,CAAE,GAC7C;EAFO;EACA;CACL;;;;;CAMJ,aAAa,qBAEXC,kBAAgE;EACjE,MAAM,EAAE,0CAAoB,GAAG,2CAAM;EACrC,MAAM,aACL,MAAM,qBAAmB,qBAAqB,iBAAiB;AAChE,SAAO,IAAI,kBAA4B;CACvC;CAED,MAAM,QAAQC,UAAqC;AAClD,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;EAGhC,MAAM,UAAU,KAAK,WAAW;AAChC,OAAK,QACJ,OAAM,IAAI,MAAM;EAGjB,MAAM,WAAW,KAAK,WAAW;AAEjC,OAAK,MAAM,WAAW,UAAU;GAC/B,MAAM,UAAU,OAAO,KAAK,KAAK,UAAU,QAAQ,QAAQ,CAAC;GAG5D,MAAM,aAAa,QAAQ;GAE3B,MAAM,YAAY,QAAQ,QAAQ,UAAU,YAAY,SAAS;IAChE,aAAa;IACb,WAAW,KAAK,KAAK;IACrB,MAAM,QAAQ;IACd,YAAY;IACZ,GAAG,KAAK,QAAQ;GAChB,EAAC;AAGF,QAAK,UACJ,OAAM,IAAI,QAAQ,CAAC,YAAY,QAAQ,KAAK,SAAS,QAAQ;EAE9D;CACD;CAED,MAAM,QAAuB,CAG5B;AACD;;;;ACvDD,IAAa,qBAAb,MAAa,mBAGb;CACC,YACSC,YACAC,UAAqC,CAAE,GAC9C;EAFO;EACA;CACL;;;;;CAMJ,aAAa,qBAEXC,kBAAiE;EAClE,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,EAAE,0CAAoB,GAAG,2CAAM;EACrC,MAAM,aACL,MAAM,qBAAmB,qBAAqB,iBAAiB;EAEhE,MAAMD,UAAqC;GAC1C,WAAW,OAAO,IAAI,YAAY;GAClC,UAAU,OAAO,IAAI,WAAW,GAC7B,OAAO,SAAS,OAAO,IAAI,WAAW,EAAG,GAAG;EAE/C;AAED,SAAO,IAAI,mBAA6B,YAAY;CACpD;CAED,MAAM,UACLE,UACAC,UACgB;AAChB,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;EAGhC,MAAM,UAAU,KAAK,WAAW;AAChC,OAAK,QACJ,OAAM,IAAI,MAAM;EAGjB,MAAM,WAAW,KAAK,WAAW;AAGjC,MAAI,KAAK,QAAQ,SAChB,OAAM,QAAQ,SAAS,KAAK,QAAQ,SAAS;EAI9C,MAAM,YAAY,KAAK,QAAQ,aAAa;EAC5C,MAAMC,eAA4C;GACjD,SAAS;GACT,GAAG,KAAK,QAAQ;EAChB;EAED,MAAM,EAAE,OAAO,GAAG,MAAM,QAAQ,YAAY,WAAW,aAAa;AAGpE,OAAK,MAAM,eAAe,SACzB,OAAM,QAAQ,UAAU,OAAO,UAAU,YAAY;AAItD,QAAM,QAAQ,QACb,OACA,OAAO,QAAQ;AACd,QAAK,IAAK;AAEV,OAAI;IAEH,MAAM,UAAU,IAAI,QAAQ,UAAU;IACtC,MAAM,UAAU,KAAK,MAAM,QAAQ;IAGnC,MAAM,cAAc,IAAI,WAAW;IAGnC,MAAMC,cAAwB;KAC7B,MAAM;KACN;IACA;AAGD,UAAM,SAAS,YAAY;AAG3B,YAAQ,IAAI,IAAI;GAChB,SAAQ,QAAQ;AAChB,YAAQ,KAAK,KAAK,OAAO,KAAK;GAC9B;EACD,GACD,KAAK,QAAQ,eACb;CACD;AACD"}
|
|
@@ -1,5 +1,83 @@
|
|
|
1
|
-
import "../types-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { EventConnection, EventPublisher, EventPublisherType, EventSubscriber, PublishableMessage } from "../types-BmixGrOD.cjs";
|
|
2
|
+
import amqplib from "amqplib";
|
|
3
|
+
|
|
4
|
+
//#region src/rabbitmq/RabbitMQConnection.d.ts
|
|
5
|
+
interface RabbitMQConnectionConfig {
|
|
6
|
+
url: string;
|
|
7
|
+
exchange?: string;
|
|
8
|
+
exchangeType?: 'topic' | 'direct' | 'fanout' | 'headers';
|
|
9
|
+
exchangeOptions?: amqplib.Options.AssertExchange;
|
|
10
|
+
timeout?: number;
|
|
11
|
+
}
|
|
12
|
+
declare class RabbitMQConnection implements EventConnection {
|
|
13
|
+
readonly type = EventPublisherType.RabbitMQ;
|
|
14
|
+
private connection?;
|
|
15
|
+
private channel?;
|
|
16
|
+
private connecting?;
|
|
17
|
+
private config;
|
|
18
|
+
constructor(config: RabbitMQConnectionConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Create a RabbitMQConnection from a connection string
|
|
21
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&timeout=5000
|
|
22
|
+
*/
|
|
23
|
+
static fromConnectionString(connectionString: string): Promise<RabbitMQConnection>;
|
|
24
|
+
connect(): Promise<void>;
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
isConnected(): boolean;
|
|
27
|
+
private cleanup;
|
|
28
|
+
/**
|
|
29
|
+
* Get the underlying channel for publishing/subscribing
|
|
30
|
+
*/
|
|
31
|
+
get amqpChannel(): amqplib.Channel | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Get the exchange name for this connection
|
|
34
|
+
*/
|
|
35
|
+
get exchangeName(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get the exchange type for this connection
|
|
38
|
+
*/
|
|
39
|
+
get exchangeType(): string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=RabbitMQConnection.d.ts.map
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/rabbitmq/RabbitMQPublisher.d.ts
|
|
44
|
+
interface RabbitMQPublisherOptions {
|
|
45
|
+
publishOptions?: amqplib.Options.Publish;
|
|
46
|
+
}
|
|
47
|
+
declare class RabbitMQPublisher<TMessage extends PublishableMessage<string, any>> implements EventPublisher<TMessage> {
|
|
48
|
+
private connection;
|
|
49
|
+
private options;
|
|
50
|
+
constructor(connection: RabbitMQConnection, options?: RabbitMQPublisherOptions);
|
|
51
|
+
/**
|
|
52
|
+
* Create a RabbitMQPublisher from a connection string
|
|
53
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&timeout=5000
|
|
54
|
+
*/
|
|
55
|
+
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionString: string): Promise<RabbitMQPublisher<TMessage>>;
|
|
56
|
+
publish(messages: TMessage[]): Promise<void>;
|
|
57
|
+
close(): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=RabbitMQPublisher.d.ts.map
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/rabbitmq/RabbitMQSubscriber.d.ts
|
|
62
|
+
interface RabbitMQSubscriberOptions {
|
|
63
|
+
queueName?: string;
|
|
64
|
+
queueOptions?: amqplib.Options.AssertQueue;
|
|
65
|
+
consumeOptions?: amqplib.Options.Consume;
|
|
66
|
+
prefetch?: number;
|
|
67
|
+
}
|
|
68
|
+
declare class RabbitMQSubscriber<TMessage extends PublishableMessage<string, any>> implements EventSubscriber<TMessage> {
|
|
69
|
+
private connection;
|
|
70
|
+
private options;
|
|
71
|
+
constructor(connection: RabbitMQConnection, options?: RabbitMQSubscriberOptions);
|
|
72
|
+
/**
|
|
73
|
+
* Create a RabbitMQSubscriber from a connection string
|
|
74
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&queueName=myqueue&prefetch=10
|
|
75
|
+
*/
|
|
76
|
+
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionString: string): Promise<RabbitMQSubscriber<TMessage>>;
|
|
77
|
+
subscribe(messages: TMessage['type'][], listener: (payload: TMessage) => Promise<void>): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=RabbitMQSubscriber.d.ts.map
|
|
80
|
+
|
|
81
|
+
//#endregion
|
|
82
|
+
export { RabbitMQConnection, RabbitMQConnectionConfig, RabbitMQPublisher, RabbitMQPublisherOptions, RabbitMQSubscriber, RabbitMQSubscriberOptions };
|
|
83
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/rabbitmq/RabbitMQConnection.ts","../../src/rabbitmq/RabbitMQPublisher.ts","../../src/rabbitmq/RabbitMQSubscriber.ts"],"sourcesContent":[],"mappings":";;;;UAIiB,wBAAA;EAAA,GAAA,EAAA,MAAA;EAQJ,QAAA,CAAA,EAAA,MAAA;EAAmB,YAAA,CAAA,EAAA,OAAA,GAAA,QAAA,GAAA,QAAA,GAAA,SAAA;EAAA,eAClB,CAAA,EALK,OAAA,CAAQ,OAAA,CAAQ,cAKrB;EAAA,OASO,CAAA,EAAA,MAAA;;AAmBjB,cA7BS,kBAAA,YAA8B,eA6BvC,CAAA;EAAO,SAoBO,IAAA,GAhDJ,kBAAA,CAAA,QAAA;EAgDW,QA6CT,UAAA;EAAO,QAwBH,OAAQ;EAAO,QAtHQ,UAAA;EAAe,QAAA,MAAA;sBAUrC;;;AClBrB;AAIA;EAA8B,OAAA,oBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EDiC1B,OCjC0B,CDiClB,kBCjCkB,CAAA;EAAA,OAAkB,CAAA,CAAA,EDqD9B,OCrD8B,CAAA,IAAA,CAAA;EAAkB,KACvC,CAAA,CAAA,EDiGX,OCjGW,CAAA,IAAA,CAAA;EAAQ,WAGb,CAAA,CAAA,EAAA,OAAA;EAAkB,QACrB,OAAA;EAA6B;;;EASO,IAAzB,WAAA,CAAA,CAAA,ED4GV,OAAA,CAAQ,OC5GE,GAAA,SAAA;EAAO;;;EAwCd,IArDX,YAAA,CAAA,CAAA,EAAA,MAAA;EAAc;;;;ACL1B;;;;UDAiB,wBAAA;EDAA,cAAA,CAAA,ECCC,OAAA,CAAQ,OAAA,CAAQ,ODGf;AAInB;AAAgC,cCJnB,iBDImB,CAAA,iBCJgB,kBDIhB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,YCHpB,cDGoB,CCHL,QDGK,CAAA,CAAA;EAAA,QAClB,UAAA;EAAA,QASO,OAAA;EAAwB,WAmBjC,CAAA,UAAA,EC7BU,kBD6BV,EAAA,OAAA,CAAA,EC5BO,wBD4BP;EAAkB;;;;EAyFK,OAtHQ,oBAAA,CAAA,iBCSxB,kBDTwB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,ECUb,ODVa,CCUL,iBDVK,CCUa,QDVb,CAAA,CAAA;EAAe,OAAA,CAAA,QAAA,ECiBjC,QDjBiC,EAAA,CAAA,ECiBpB,ODjBoB,CAAA,IAAA,CAAA;WCkD1C;;;;;UC1DC,yBAAA;EFAA,SAAA,CAAA,EAAA,MAAA;EAQJ,YAAA,CAAA,EENG,OAAA,CAAQ,OAAA,CAAQ,WFMA;EAAA,cAAA,CAAA,EELd,OAAA,CAAQ,OAAA,CAAQ,OFKF;EAAA,QAClB,CAAA,EAAA,MAAA;;AA4BF,cE9BC,kBF8BD,CAAA,iBE7BM,kBF6BN,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,YE5BC,eF4BD,CE5BiB,QF4BjB,CAAA,CAAA;EAAkB,QAA1B,UAAA;EAAO,QAoBO,OAAA;EAAO,WA6CT,CAAA,UAAA,EE1FM,kBF0FN,EAAA,OAAA,CAAA,EEzFG,yBFyFH;EAAO;;AA9FmC;;+CEavC,4DACW,QAAQ,mBAAmB;sBAmB7C,wCACU,aAAa,gBAC/B;AD3CJ;AAIA"}
|
|
@@ -1,5 +1,83 @@
|
|
|
1
|
-
import "../types-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { EventConnection, EventPublisher, EventPublisherType, EventSubscriber, PublishableMessage } from "../types-DycjsYms.mjs";
|
|
2
|
+
import amqplib from "amqplib";
|
|
3
|
+
|
|
4
|
+
//#region src/rabbitmq/RabbitMQConnection.d.ts
|
|
5
|
+
interface RabbitMQConnectionConfig {
|
|
6
|
+
url: string;
|
|
7
|
+
exchange?: string;
|
|
8
|
+
exchangeType?: 'topic' | 'direct' | 'fanout' | 'headers';
|
|
9
|
+
exchangeOptions?: amqplib.Options.AssertExchange;
|
|
10
|
+
timeout?: number;
|
|
11
|
+
}
|
|
12
|
+
declare class RabbitMQConnection implements EventConnection {
|
|
13
|
+
readonly type = EventPublisherType.RabbitMQ;
|
|
14
|
+
private connection?;
|
|
15
|
+
private channel?;
|
|
16
|
+
private connecting?;
|
|
17
|
+
private config;
|
|
18
|
+
constructor(config: RabbitMQConnectionConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Create a RabbitMQConnection from a connection string
|
|
21
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&timeout=5000
|
|
22
|
+
*/
|
|
23
|
+
static fromConnectionString(connectionString: string): Promise<RabbitMQConnection>;
|
|
24
|
+
connect(): Promise<void>;
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
isConnected(): boolean;
|
|
27
|
+
private cleanup;
|
|
28
|
+
/**
|
|
29
|
+
* Get the underlying channel for publishing/subscribing
|
|
30
|
+
*/
|
|
31
|
+
get amqpChannel(): amqplib.Channel | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Get the exchange name for this connection
|
|
34
|
+
*/
|
|
35
|
+
get exchangeName(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get the exchange type for this connection
|
|
38
|
+
*/
|
|
39
|
+
get exchangeType(): string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=RabbitMQConnection.d.ts.map
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/rabbitmq/RabbitMQPublisher.d.ts
|
|
44
|
+
interface RabbitMQPublisherOptions {
|
|
45
|
+
publishOptions?: amqplib.Options.Publish;
|
|
46
|
+
}
|
|
47
|
+
declare class RabbitMQPublisher<TMessage extends PublishableMessage<string, any>> implements EventPublisher<TMessage> {
|
|
48
|
+
private connection;
|
|
49
|
+
private options;
|
|
50
|
+
constructor(connection: RabbitMQConnection, options?: RabbitMQPublisherOptions);
|
|
51
|
+
/**
|
|
52
|
+
* Create a RabbitMQPublisher from a connection string
|
|
53
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&timeout=5000
|
|
54
|
+
*/
|
|
55
|
+
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionString: string): Promise<RabbitMQPublisher<TMessage>>;
|
|
56
|
+
publish(messages: TMessage[]): Promise<void>;
|
|
57
|
+
close(): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=RabbitMQPublisher.d.ts.map
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/rabbitmq/RabbitMQSubscriber.d.ts
|
|
62
|
+
interface RabbitMQSubscriberOptions {
|
|
63
|
+
queueName?: string;
|
|
64
|
+
queueOptions?: amqplib.Options.AssertQueue;
|
|
65
|
+
consumeOptions?: amqplib.Options.Consume;
|
|
66
|
+
prefetch?: number;
|
|
67
|
+
}
|
|
68
|
+
declare class RabbitMQSubscriber<TMessage extends PublishableMessage<string, any>> implements EventSubscriber<TMessage> {
|
|
69
|
+
private connection;
|
|
70
|
+
private options;
|
|
71
|
+
constructor(connection: RabbitMQConnection, options?: RabbitMQSubscriberOptions);
|
|
72
|
+
/**
|
|
73
|
+
* Create a RabbitMQSubscriber from a connection string
|
|
74
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&queueName=myqueue&prefetch=10
|
|
75
|
+
*/
|
|
76
|
+
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionString: string): Promise<RabbitMQSubscriber<TMessage>>;
|
|
77
|
+
subscribe(messages: TMessage['type'][], listener: (payload: TMessage) => Promise<void>): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=RabbitMQSubscriber.d.ts.map
|
|
80
|
+
|
|
81
|
+
//#endregion
|
|
82
|
+
export { RabbitMQConnection, RabbitMQConnectionConfig, RabbitMQPublisher, RabbitMQPublisherOptions, RabbitMQSubscriber, RabbitMQSubscriberOptions };
|
|
83
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/rabbitmq/RabbitMQConnection.ts","../../src/rabbitmq/RabbitMQPublisher.ts","../../src/rabbitmq/RabbitMQSubscriber.ts"],"sourcesContent":[],"mappings":";;;;UAIiB,wBAAA;EAAA,GAAA,EAAA,MAAA;EAQJ,QAAA,CAAA,EAAA,MAAA;EAAmB,YAAA,CAAA,EAAA,OAAA,GAAA,QAAA,GAAA,QAAA,GAAA,SAAA;EAAA,eAClB,CAAA,EALK,OAAA,CAAQ,OAAA,CAAQ,cAKrB;EAAA,OASO,CAAA,EAAA,MAAA;;AAmBjB,cA7BS,kBAAA,YAA8B,eA6BvC,CAAA;EAAO,SAoBO,IAAA,GAhDJ,kBAAA,CAAA,QAAA;EAgDW,QA6CT,UAAA;EAAO,QAwBH,OAAQ;EAAO,QAtHQ,UAAA;EAAe,QAAA,MAAA;sBAUrC;;;AClBrB;AAIA;EAA8B,OAAA,oBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EDiC1B,OCjC0B,CDiClB,kBCjCkB,CAAA;EAAA,OAAkB,CAAA,CAAA,EDqD9B,OCrD8B,CAAA,IAAA,CAAA;EAAkB,KACvC,CAAA,CAAA,EDiGX,OCjGW,CAAA,IAAA,CAAA;EAAQ,WAGb,CAAA,CAAA,EAAA,OAAA;EAAkB,QACrB,OAAA;EAA6B;;;EASO,IAAzB,WAAA,CAAA,CAAA,ED4GV,OAAA,CAAQ,OC5GE,GAAA,SAAA;EAAO;;;EAwCd,IArDX,YAAA,CAAA,CAAA,EAAA,MAAA;EAAc;;;;ACL1B;;;;UDAiB,wBAAA;EDAA,cAAA,CAAA,ECCC,OAAA,CAAQ,OAAA,CAAQ,ODGf;AAInB;AAAgC,cCJnB,iBDImB,CAAA,iBCJgB,kBDIhB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,YCHpB,cDGoB,CCHL,QDGK,CAAA,CAAA;EAAA,QAClB,UAAA;EAAA,QASO,OAAA;EAAwB,WAmBjC,CAAA,UAAA,EC7BU,kBD6BV,EAAA,OAAA,CAAA,EC5BO,wBD4BP;EAAkB;;;;EAyFK,OAtHQ,oBAAA,CAAA,iBCSxB,kBDTwB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,ECUb,ODVa,CCUL,iBDVK,CCUa,QDVb,CAAA,CAAA;EAAe,OAAA,CAAA,QAAA,ECiBjC,QDjBiC,EAAA,CAAA,ECiBpB,ODjBoB,CAAA,IAAA,CAAA;WCkD1C;;;;;UC1DC,yBAAA;EFAA,SAAA,CAAA,EAAA,MAAA;EAQJ,YAAA,CAAA,EENG,OAAA,CAAQ,OAAA,CAAQ,WFMA;EAAA,cAAA,CAAA,EELd,OAAA,CAAQ,OAAA,CAAQ,OFKF;EAAA,QAClB,CAAA,EAAA,MAAA;;AA4BF,cE9BC,kBF8BD,CAAA,iBE7BM,kBF6BN,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,YE5BC,eF4BD,CE5BiB,QF4BjB,CAAA,CAAA;EAAkB,QAA1B,UAAA;EAAO,QAoBO,OAAA;EAAO,WA6CT,CAAA,UAAA,EE1FM,kBF0FN,EAAA,OAAA,CAAA,EEzFG,yBFyFH;EAAO;;AA9FmC;;+CEavC,4DACW,QAAQ,mBAAmB;sBAmB7C,wCACU,aAAa,gBAC/B;AD3CJ;AAIA"}
|
package/dist/rabbitmq/index.mjs
CHANGED
|
@@ -1,6 +1,96 @@
|
|
|
1
|
-
import "../types-
|
|
2
|
-
import { RabbitMQConnection } from "../RabbitMQConnection-
|
|
3
|
-
import { RabbitMQPublisher } from "../RabbitMQPublisher-Cxm1zSkD.mjs";
|
|
4
|
-
import { RabbitMQSubscriber } from "../RabbitMQSubscriber-fP8G9OlK.mjs";
|
|
1
|
+
import "../types-CYDt-2RQ.mjs";
|
|
2
|
+
import { RabbitMQConnection } from "../RabbitMQConnection-DJgUPc19.mjs";
|
|
5
3
|
|
|
6
|
-
|
|
4
|
+
//#region src/rabbitmq/RabbitMQPublisher.ts
|
|
5
|
+
var RabbitMQPublisher = class RabbitMQPublisher {
|
|
6
|
+
constructor(connection, options = {}) {
|
|
7
|
+
this.connection = connection;
|
|
8
|
+
this.options = options;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Create a RabbitMQPublisher from a connection string
|
|
12
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&timeout=5000
|
|
13
|
+
*/
|
|
14
|
+
static async fromConnectionString(connectionString) {
|
|
15
|
+
const { RabbitMQConnection: RabbitMQConnection$1 } = await import("../RabbitMQConnection-DJEyM-Bu.mjs");
|
|
16
|
+
const connection = await RabbitMQConnection$1.fromConnectionString(connectionString);
|
|
17
|
+
return new RabbitMQPublisher(connection);
|
|
18
|
+
}
|
|
19
|
+
async publish(messages) {
|
|
20
|
+
if (!this.connection.isConnected()) await this.connection.connect();
|
|
21
|
+
const channel = this.connection.amqpChannel;
|
|
22
|
+
if (!channel) throw new Error("Channel not initialized");
|
|
23
|
+
const exchange = this.connection.exchangeName;
|
|
24
|
+
for (const message of messages) {
|
|
25
|
+
const content = Buffer.from(JSON.stringify(message.payload));
|
|
26
|
+
const routingKey = message.type;
|
|
27
|
+
const published = channel.publish(exchange, routingKey, content, {
|
|
28
|
+
contentType: "application/json",
|
|
29
|
+
timestamp: Date.now(),
|
|
30
|
+
type: message.type,
|
|
31
|
+
persistent: true,
|
|
32
|
+
...this.options.publishOptions
|
|
33
|
+
});
|
|
34
|
+
if (!published) await new Promise((resolve) => channel.once("drain", resolve));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async close() {}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/rabbitmq/RabbitMQSubscriber.ts
|
|
42
|
+
var RabbitMQSubscriber = class RabbitMQSubscriber {
|
|
43
|
+
constructor(connection, options = {}) {
|
|
44
|
+
this.connection = connection;
|
|
45
|
+
this.options = options;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create a RabbitMQSubscriber from a connection string
|
|
49
|
+
* Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&queueName=myqueue&prefetch=10
|
|
50
|
+
*/
|
|
51
|
+
static async fromConnectionString(connectionString) {
|
|
52
|
+
const url = new URL(connectionString);
|
|
53
|
+
const params = url.searchParams;
|
|
54
|
+
const { RabbitMQConnection: RabbitMQConnection$1 } = await import("../RabbitMQConnection-DJEyM-Bu.mjs");
|
|
55
|
+
const connection = await RabbitMQConnection$1.fromConnectionString(connectionString);
|
|
56
|
+
const options = {
|
|
57
|
+
queueName: params.get("queueName") || void 0,
|
|
58
|
+
prefetch: params.get("prefetch") ? Number.parseInt(params.get("prefetch"), 10) : void 0
|
|
59
|
+
};
|
|
60
|
+
return new RabbitMQSubscriber(connection, options);
|
|
61
|
+
}
|
|
62
|
+
async subscribe(messages, listener) {
|
|
63
|
+
if (!this.connection.isConnected()) await this.connection.connect();
|
|
64
|
+
const channel = this.connection.amqpChannel;
|
|
65
|
+
if (!channel) throw new Error("Channel not initialized");
|
|
66
|
+
const exchange = this.connection.exchangeName;
|
|
67
|
+
if (this.options.prefetch) await channel.prefetch(this.options.prefetch);
|
|
68
|
+
const queueName = this.options.queueName || "";
|
|
69
|
+
const queueOptions = {
|
|
70
|
+
durable: true,
|
|
71
|
+
...this.options.queueOptions
|
|
72
|
+
};
|
|
73
|
+
const { queue } = await channel.assertQueue(queueName, queueOptions);
|
|
74
|
+
for (const messageType of messages) await channel.bindQueue(queue, exchange, messageType);
|
|
75
|
+
await channel.consume(queue, async (msg) => {
|
|
76
|
+
if (!msg) return;
|
|
77
|
+
try {
|
|
78
|
+
const content = msg.content.toString();
|
|
79
|
+
const payload = JSON.parse(content);
|
|
80
|
+
const messageType = msg.properties.type;
|
|
81
|
+
const fullMessage = {
|
|
82
|
+
type: messageType,
|
|
83
|
+
payload
|
|
84
|
+
};
|
|
85
|
+
await listener(fullMessage);
|
|
86
|
+
channel.ack(msg);
|
|
87
|
+
} catch (_error) {
|
|
88
|
+
channel.nack(msg, false, true);
|
|
89
|
+
}
|
|
90
|
+
}, this.options.consumeOptions);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
//#endregion
|
|
95
|
+
export { RabbitMQConnection, RabbitMQPublisher, RabbitMQSubscriber };
|
|
96
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["connection: RabbitMQConnection","options: RabbitMQPublisherOptions","connectionString: string","messages: TMessage[]","connection: RabbitMQConnection","options: RabbitMQSubscriberOptions","connectionString: string","messages: TMessage['type'][]","listener: (payload: TMessage) => Promise<void>","queueOptions: amqplib.Options.AssertQueue","fullMessage: TMessage"],"sources":["../../src/rabbitmq/RabbitMQPublisher.ts","../../src/rabbitmq/RabbitMQSubscriber.ts"],"sourcesContent":["import type amqplib from 'amqplib';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { RabbitMQConnection } from './RabbitMQConnection';\n\nexport interface RabbitMQPublisherOptions {\n\tpublishOptions?: amqplib.Options.Publish;\n}\n\nexport class RabbitMQPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: RabbitMQConnection,\n\t\tprivate options: RabbitMQPublisherOptions = {},\n\t) {}\n\n\t/**\n\t * Create a RabbitMQPublisher from a connection string\n\t * Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&timeout=5000\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<RabbitMQPublisher<TMessage>> {\n\t\tconst { RabbitMQConnection } = await import('./RabbitMQConnection');\n\t\tconst connection =\n\t\t\tawait RabbitMQConnection.fromConnectionString(connectionString);\n\t\treturn new RabbitMQPublisher<TMessage>(connection);\n\t}\n\n\tasync publish(messages: TMessage[]): Promise<void> {\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tconst channel = this.connection.amqpChannel;\n\t\tif (!channel) {\n\t\t\tthrow new Error('Channel not initialized');\n\t\t}\n\n\t\tconst exchange = this.connection.exchangeName;\n\n\t\tfor (const message of messages) {\n\t\t\tconst content = Buffer.from(JSON.stringify(message.payload));\n\n\t\t\t// Use message type as routing key for topic exchanges\n\t\t\tconst routingKey = message.type;\n\n\t\t\tconst published = channel.publish(exchange, routingKey, content, {\n\t\t\t\tcontentType: 'application/json',\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\ttype: message.type,\n\t\t\t\tpersistent: true,\n\t\t\t\t...this.options.publishOptions,\n\t\t\t});\n\n\t\t\t// Handle backpressure\n\t\t\tif (!published) {\n\t\t\t\tawait new Promise((resolve) => channel.once('drain', resolve));\n\t\t\t}\n\t\t}\n\t}\n\n\tasync close(): Promise<void> {\n\t\t// Publisher doesn't own the connection\n\t\t// Connection should be closed by whoever created it\n\t}\n}\n","import type amqplib from 'amqplib';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { RabbitMQConnection } from './RabbitMQConnection';\n\nexport interface RabbitMQSubscriberOptions {\n\tqueueName?: string; // If not provided, a unique queue will be generated\n\tqueueOptions?: amqplib.Options.AssertQueue;\n\tconsumeOptions?: amqplib.Options.Consume;\n\tprefetch?: number; // Number of messages to prefetch (default: 1)\n}\n\nexport class RabbitMQSubscriber<\n\tTMessage extends PublishableMessage<string, any>,\n> implements EventSubscriber<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: RabbitMQConnection,\n\t\tprivate options: RabbitMQSubscriberOptions = {},\n\t) {}\n\n\t/**\n\t * Create a RabbitMQSubscriber from a connection string\n\t * Format: rabbitmq://user:pass@host:port/vhost?exchange=name&type=topic&queueName=myqueue&prefetch=10\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<RabbitMQSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { RabbitMQConnection } = await import('./RabbitMQConnection');\n\t\tconst connection =\n\t\t\tawait RabbitMQConnection.fromConnectionString(connectionString);\n\n\t\tconst options: RabbitMQSubscriberOptions = {\n\t\t\tqueueName: params.get('queueName') || undefined,\n\t\t\tprefetch: params.get('prefetch')\n\t\t\t\t? Number.parseInt(params.get('prefetch')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new RabbitMQSubscriber<TMessage>(connection, options);\n\t}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tconst channel = this.connection.amqpChannel;\n\t\tif (!channel) {\n\t\t\tthrow new Error('Channel not initialized');\n\t\t}\n\n\t\tconst exchange = this.connection.exchangeName;\n\n\t\t// Set prefetch if specified\n\t\tif (this.options.prefetch) {\n\t\t\tawait channel.prefetch(this.options.prefetch);\n\t\t}\n\n\t\t// Assert queue\n\t\tconst queueName = this.options.queueName || '';\n\t\tconst queueOptions: amqplib.Options.AssertQueue = {\n\t\t\tdurable: true,\n\t\t\t...this.options.queueOptions,\n\t\t};\n\n\t\tconst { queue } = await channel.assertQueue(queueName, queueOptions);\n\n\t\t// Bind queue to exchange for each message type\n\t\tfor (const messageType of messages) {\n\t\t\tawait channel.bindQueue(queue, exchange, messageType);\n\t\t}\n\n\t\t// Consume messages\n\t\tawait channel.consume(\n\t\t\tqueue,\n\t\t\tasync (msg) => {\n\t\t\t\tif (!msg) return;\n\n\t\t\t\ttry {\n\t\t\t\t\t// Parse message payload\n\t\t\t\t\tconst content = msg.content.toString();\n\t\t\t\t\tconst payload = JSON.parse(content);\n\n\t\t\t\t\t// Get message type from properties\n\t\t\t\t\tconst messageType = msg.properties.type;\n\n\t\t\t\t\t// Reconstruct full message\n\t\t\t\t\tconst fullMessage: TMessage = {\n\t\t\t\t\t\ttype: messageType,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t} as TMessage;\n\n\t\t\t\t\t// Call listener\n\t\t\t\t\tawait listener(fullMessage);\n\n\t\t\t\t\t// Ack message\n\t\t\t\t\tchannel.ack(msg);\n\t\t\t\t} catch (_error) {\n\t\t\t\t\tchannel.nack(msg, false, true);\n\t\t\t\t}\n\t\t\t},\n\t\t\tthis.options.consumeOptions,\n\t\t);\n\t}\n}\n"],"mappings":";;;;AAQA,IAAa,oBAAb,MAAa,kBAEb;CACC,YACSA,YACAC,UAAoC,CAAE,GAC7C;EAFO;EACA;CACL;;;;;CAMJ,aAAa,qBAEXC,kBAAgE;EACjE,MAAM,EAAE,0CAAoB,GAAG,MAAM,OAAO;EAC5C,MAAM,aACL,MAAM,qBAAmB,qBAAqB,iBAAiB;AAChE,SAAO,IAAI,kBAA4B;CACvC;CAED,MAAM,QAAQC,UAAqC;AAClD,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;EAGhC,MAAM,UAAU,KAAK,WAAW;AAChC,OAAK,QACJ,OAAM,IAAI,MAAM;EAGjB,MAAM,WAAW,KAAK,WAAW;AAEjC,OAAK,MAAM,WAAW,UAAU;GAC/B,MAAM,UAAU,OAAO,KAAK,KAAK,UAAU,QAAQ,QAAQ,CAAC;GAG5D,MAAM,aAAa,QAAQ;GAE3B,MAAM,YAAY,QAAQ,QAAQ,UAAU,YAAY,SAAS;IAChE,aAAa;IACb,WAAW,KAAK,KAAK;IACrB,MAAM,QAAQ;IACd,YAAY;IACZ,GAAG,KAAK,QAAQ;GAChB,EAAC;AAGF,QAAK,UACJ,OAAM,IAAI,QAAQ,CAAC,YAAY,QAAQ,KAAK,SAAS,QAAQ;EAE9D;CACD;CAED,MAAM,QAAuB,CAG5B;AACD;;;;ACvDD,IAAa,qBAAb,MAAa,mBAGb;CACC,YACSC,YACAC,UAAqC,CAAE,GAC9C;EAFO;EACA;CACL;;;;;CAMJ,aAAa,qBAEXC,kBAAiE;EAClE,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,EAAE,0CAAoB,GAAG,MAAM,OAAO;EAC5C,MAAM,aACL,MAAM,qBAAmB,qBAAqB,iBAAiB;EAEhE,MAAMD,UAAqC;GAC1C,WAAW,OAAO,IAAI,YAAY;GAClC,UAAU,OAAO,IAAI,WAAW,GAC7B,OAAO,SAAS,OAAO,IAAI,WAAW,EAAG,GAAG;EAE/C;AAED,SAAO,IAAI,mBAA6B,YAAY;CACpD;CAED,MAAM,UACLE,UACAC,UACgB;AAChB,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;EAGhC,MAAM,UAAU,KAAK,WAAW;AAChC,OAAK,QACJ,OAAM,IAAI,MAAM;EAGjB,MAAM,WAAW,KAAK,WAAW;AAGjC,MAAI,KAAK,QAAQ,SAChB,OAAM,QAAQ,SAAS,KAAK,QAAQ,SAAS;EAI9C,MAAM,YAAY,KAAK,QAAQ,aAAa;EAC5C,MAAMC,eAA4C;GACjD,SAAS;GACT,GAAG,KAAK,QAAQ;EAChB;EAED,MAAM,EAAE,OAAO,GAAG,MAAM,QAAQ,YAAY,WAAW,aAAa;AAGpE,OAAK,MAAM,eAAe,SACzB,OAAM,QAAQ,UAAU,OAAO,UAAU,YAAY;AAItD,QAAM,QAAQ,QACb,OACA,OAAO,QAAQ;AACd,QAAK,IAAK;AAEV,OAAI;IAEH,MAAM,UAAU,IAAI,QAAQ,UAAU;IACtC,MAAM,UAAU,KAAK,MAAM,QAAQ;IAGnC,MAAM,cAAc,IAAI,WAAW;IAGnC,MAAMC,cAAwB;KAC7B,MAAM;KACN;IACA;AAGD,UAAM,SAAS,YAAY;AAG3B,YAAQ,IAAI,IAAI;GAChB,SAAQ,QAAQ;AAChB,YAAQ,KAAK,KAAK,OAAO,KAAK;GAC9B;EACD,GACD,KAAK,QAAQ,eACb;CACD;AACD"}
|
package/dist/sns/index.cjs
CHANGED
|
@@ -1,10 +1,189 @@
|
|
|
1
|
+
const require_chunk = require('../chunk-CsX-DzYB.cjs');
|
|
1
2
|
require('../types-Byv8N9ma.cjs');
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
require('../
|
|
5
|
-
require('../
|
|
6
|
-
const
|
|
3
|
+
const require_snsUrl = require('../snsUrl-f2gU3CzK.cjs');
|
|
4
|
+
const require_SNSConnection = require('../SNSConnection-B2K86hpz.cjs');
|
|
5
|
+
require('../sqsUrl-CdisN3GU.cjs');
|
|
6
|
+
const require_SQSConnection = require('../SQSConnection-BaC7rGhI.cjs');
|
|
7
|
+
const require_SQSSubscriber = require('../SQSSubscriber-YXPlg2rm.cjs');
|
|
8
|
+
const __aws_sdk_client_sns = require_chunk.__toESM(require("@aws-sdk/client-sns"));
|
|
9
|
+
const __aws_sdk_client_sqs = require_chunk.__toESM(require("@aws-sdk/client-sqs"));
|
|
7
10
|
|
|
11
|
+
//#region src/sns/SNSPublisher.ts
|
|
12
|
+
var SNSPublisher = class SNSPublisher {
|
|
13
|
+
constructor(connection, _options = {}) {
|
|
14
|
+
this.connection = connection;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create an SNSPublisher from a connection string
|
|
18
|
+
* Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566
|
|
19
|
+
*/
|
|
20
|
+
static async fromConnectionString(connectionString) {
|
|
21
|
+
const { SNSConnection: SNSConnection$1 } = await Promise.resolve().then(() => require("../SNSConnection-DIHRjrQF.cjs"));
|
|
22
|
+
const connection = await SNSConnection$1.fromConnectionString(connectionString);
|
|
23
|
+
return new SNSPublisher(connection);
|
|
24
|
+
}
|
|
25
|
+
async publish(messages) {
|
|
26
|
+
if (messages.length === 0) return;
|
|
27
|
+
if (!this.connection.isConnected()) await this.connection.connect();
|
|
28
|
+
await Promise.all(messages.map((message) => this.publishMessage(message)));
|
|
29
|
+
}
|
|
30
|
+
async publishMessage(message) {
|
|
31
|
+
const command = new __aws_sdk_client_sns.PublishCommand({
|
|
32
|
+
TopicArn: this.connection.topicArn,
|
|
33
|
+
Message: JSON.stringify({
|
|
34
|
+
type: message.type,
|
|
35
|
+
payload: message.payload
|
|
36
|
+
}),
|
|
37
|
+
MessageAttributes: { type: {
|
|
38
|
+
DataType: "String",
|
|
39
|
+
StringValue: message.type
|
|
40
|
+
} }
|
|
41
|
+
});
|
|
42
|
+
await this.connection.snsClient.send(command);
|
|
43
|
+
}
|
|
44
|
+
async close() {}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/sns/SNSSubscriber.ts
|
|
49
|
+
/**
|
|
50
|
+
* SNS Subscriber - receives push-based messages from SNS via SQS queue
|
|
51
|
+
*
|
|
52
|
+
* Architecture:
|
|
53
|
+
* SNS Topic → (push) → SQS Queue → Subscriber
|
|
54
|
+
*
|
|
55
|
+
* This subscriber automatically:
|
|
56
|
+
* 1. Creates an SQS queue (or uses existing one)
|
|
57
|
+
* 2. Subscribes the queue to the SNS topic
|
|
58
|
+
* 3. Receives messages pushed from SNS to the queue
|
|
59
|
+
* 4. Filters messages by topic ARN and message type
|
|
60
|
+
* 5. Processes and acknowledges messages
|
|
61
|
+
*
|
|
62
|
+
* Note: While SQS long-polling is used internally to receive messages,
|
|
63
|
+
* this is an implementation detail of the SNS push delivery mechanism.
|
|
64
|
+
* Messages are pushed from SNS to SQS, and we receive those pushed messages.
|
|
65
|
+
*/
|
|
66
|
+
var SNSSubscriber = class SNSSubscriber {
|
|
67
|
+
sqsClient;
|
|
68
|
+
queueUrl;
|
|
69
|
+
queueArn;
|
|
70
|
+
subscriptionArn;
|
|
71
|
+
sqsSubscriber;
|
|
72
|
+
options;
|
|
73
|
+
constructor(connection, options = {}) {
|
|
74
|
+
this.connection = connection;
|
|
75
|
+
this.options = {
|
|
76
|
+
queueName: options.queueName || `sns-sub-${Date.now()}-${Math.random().toString(36).substring(7)}`,
|
|
77
|
+
createQueue: options.createQueue ?? true,
|
|
78
|
+
deleteQueueOnClose: options.deleteQueueOnClose ?? !options.queueName,
|
|
79
|
+
waitTimeSeconds: options.waitTimeSeconds ?? 20,
|
|
80
|
+
maxMessages: options.maxMessages ?? 10
|
|
81
|
+
};
|
|
82
|
+
this.sqsClient = new __aws_sdk_client_sqs.SQSClient({
|
|
83
|
+
region: this.connection.config.region,
|
|
84
|
+
endpoint: this.connection.config.endpoint,
|
|
85
|
+
credentials: this.connection.config.credentials
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create an SNSSubscriber from a connection string
|
|
90
|
+
* Format: sns://?topicArn=...&queueName=myqueue®ion=us-east-1
|
|
91
|
+
*/
|
|
92
|
+
static async fromConnectionString(connectionString) {
|
|
93
|
+
const url = new URL(connectionString);
|
|
94
|
+
const params = url.searchParams;
|
|
95
|
+
const { SNSConnection: SNSConnection$1 } = await Promise.resolve().then(() => require("../SNSConnection-DIHRjrQF.cjs"));
|
|
96
|
+
const connection = await SNSConnection$1.fromConnectionString(connectionString);
|
|
97
|
+
const options = {
|
|
98
|
+
queueName: params.get("queueName") || void 0,
|
|
99
|
+
createQueue: params.get("createQueue") !== "false",
|
|
100
|
+
deleteQueueOnClose: params.get("deleteQueueOnClose") === "true",
|
|
101
|
+
waitTimeSeconds: params.get("waitTimeSeconds") ? Number.parseInt(params.get("waitTimeSeconds"), 10) : void 0
|
|
102
|
+
};
|
|
103
|
+
return new SNSSubscriber(connection, options);
|
|
104
|
+
}
|
|
105
|
+
async subscribe(messages, listener) {
|
|
106
|
+
await this.setupQueue();
|
|
107
|
+
await this.subscribeToTopic();
|
|
108
|
+
const sqsConnection = new require_SQSConnection.SQSConnection({
|
|
109
|
+
queueUrl: this.queueUrl,
|
|
110
|
+
region: this.connection.config.region,
|
|
111
|
+
endpoint: this.connection.config.endpoint,
|
|
112
|
+
credentials: this.connection.config.credentials
|
|
113
|
+
});
|
|
114
|
+
await sqsConnection.connect();
|
|
115
|
+
this.sqsSubscriber = new require_SQSSubscriber.SQSSubscriber(sqsConnection, {
|
|
116
|
+
waitTimeSeconds: this.options.waitTimeSeconds,
|
|
117
|
+
maxMessages: this.options.maxMessages,
|
|
118
|
+
expectedTopicArn: this.connection.topicArn
|
|
119
|
+
});
|
|
120
|
+
await this.sqsSubscriber.subscribe(messages, listener);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Stop receiving messages and clean up resources
|
|
124
|
+
*/
|
|
125
|
+
async stop() {
|
|
126
|
+
if (this.sqsSubscriber) this.sqsSubscriber.stop();
|
|
127
|
+
if (this.subscriptionArn) try {
|
|
128
|
+
const command = new __aws_sdk_client_sns.UnsubscribeCommand({ SubscriptionArn: this.subscriptionArn });
|
|
129
|
+
await this.connection.snsClient.send(command);
|
|
130
|
+
} catch (_error) {}
|
|
131
|
+
if (this.queueUrl && this.options.deleteQueueOnClose) try {
|
|
132
|
+
const command = new __aws_sdk_client_sqs.DeleteQueueCommand({ QueueUrl: this.queueUrl });
|
|
133
|
+
await this.sqsClient.send(command);
|
|
134
|
+
} catch (_error) {}
|
|
135
|
+
this.sqsClient.destroy();
|
|
136
|
+
}
|
|
137
|
+
async setupQueue() {
|
|
138
|
+
if (this.options.createQueue) {
|
|
139
|
+
const createCommand = new __aws_sdk_client_sqs.CreateQueueCommand({ QueueName: this.options.queueName });
|
|
140
|
+
const response = await this.sqsClient.send(createCommand);
|
|
141
|
+
this.queueUrl = response.QueueUrl;
|
|
142
|
+
} else throw new Error("Queue must exist or createQueue option must be true");
|
|
143
|
+
const attrsCommand = new __aws_sdk_client_sqs.GetQueueAttributesCommand({
|
|
144
|
+
QueueUrl: this.queueUrl,
|
|
145
|
+
AttributeNames: ["QueueArn"]
|
|
146
|
+
});
|
|
147
|
+
const attrsResponse = await this.sqsClient.send(attrsCommand);
|
|
148
|
+
this.queueArn = attrsResponse.Attributes?.QueueArn;
|
|
149
|
+
await this.setQueuePolicy();
|
|
150
|
+
}
|
|
151
|
+
async setQueuePolicy() {
|
|
152
|
+
const policy = {
|
|
153
|
+
Version: "2012-10-17",
|
|
154
|
+
Statement: [{
|
|
155
|
+
Effect: "Allow",
|
|
156
|
+
Principal: "*",
|
|
157
|
+
Action: "SQS:SendMessage",
|
|
158
|
+
Resource: this.queueArn,
|
|
159
|
+
Condition: { ArnEquals: { "aws:SourceArn": this.connection.topicArn } }
|
|
160
|
+
}]
|
|
161
|
+
};
|
|
162
|
+
const command = new __aws_sdk_client_sqs.SetQueueAttributesCommand({
|
|
163
|
+
QueueUrl: this.queueUrl,
|
|
164
|
+
Attributes: { Policy: JSON.stringify(policy) }
|
|
165
|
+
});
|
|
166
|
+
await this.sqsClient.send(command);
|
|
167
|
+
}
|
|
168
|
+
async subscribeToTopic() {
|
|
169
|
+
const command = new __aws_sdk_client_sns.SubscribeCommand({
|
|
170
|
+
TopicArn: this.connection.topicArn,
|
|
171
|
+
Protocol: "sqs",
|
|
172
|
+
Endpoint: this.queueArn
|
|
173
|
+
});
|
|
174
|
+
const response = await this.connection.snsClient.send(command);
|
|
175
|
+
this.subscriptionArn = response.SubscriptionArn;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
//#endregion
|
|
8
180
|
exports.SNSConnection = require_SNSConnection.SNSConnection;
|
|
9
|
-
exports.SNSPublisher =
|
|
10
|
-
exports.SNSSubscriber =
|
|
181
|
+
exports.SNSPublisher = SNSPublisher;
|
|
182
|
+
exports.SNSSubscriber = SNSSubscriber;
|
|
183
|
+
Object.defineProperty(exports, 'snsUrl', {
|
|
184
|
+
enumerable: true,
|
|
185
|
+
get: function () {
|
|
186
|
+
return require_snsUrl.snsUrl_exports;
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
//# sourceMappingURL=index.cjs.map
|