@geekmidas/events 9.0.2 → 10.0.0-alpha.1
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-DmMMosT4.cjs → RabbitMQConnection-BKEdCUro.cjs} +2 -2
- package/dist/{RabbitMQConnection-DmMMosT4.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-BtKZjtZY.mjs → RabbitMQConnection-DJgUPc19.mjs} +2 -2
- package/dist/{RabbitMQConnection-BtKZjtZY.mjs.map → RabbitMQConnection-DJgUPc19.mjs.map} +1 -1
- package/dist/{SNSConnection-CAcbLQOy.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-CVjH93lb.mjs → SNSConnection-v9jjF99w.mjs} +7 -8
- package/dist/SNSConnection-v9jjF99w.mjs.map +1 -0
- package/dist/{SQSConnection-CT3S7_zP.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-Y0mdVTcB.cjs → SQSConnection-BaC7rGhI.cjs} +7 -8
- package/dist/SQSConnection-BaC7rGhI.cjs.map +1 -0
- package/dist/SQSConnection-DbavOq8_.mjs +5 -0
- package/dist/{SQSSubscriber-CQdSFzpe.mjs → SQSSubscriber-BMWZ3s5q.mjs} +1 -1
- package/dist/{SQSSubscriber-CQdSFzpe.mjs.map → SQSSubscriber-BMWZ3s5q.mjs.map} +1 -1
- package/dist/{SQSSubscriber-C4UA2hKq.cjs → SQSSubscriber-YXPlg2rm.cjs} +2 -2
- package/dist/{SQSSubscriber-C4UA2hKq.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 -109
- 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-C94q6g8q.cjs +0 -45
- package/dist/RabbitMQPublisher-C94q6g8q.cjs.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/RabbitMQPublisher-yUqWNq-P.mjs +0 -39
- package/dist/RabbitMQPublisher-yUqWNq-P.mjs.map +0 -1
- package/dist/RabbitMQSubscriber-BF7JGfYm.d.cts +0 -27
- package/dist/RabbitMQSubscriber-BF7JGfYm.d.cts.map +0 -1
- package/dist/RabbitMQSubscriber-BWniDtFs.mjs +0 -56
- package/dist/RabbitMQSubscriber-BWniDtFs.mjs.map +0 -1
- package/dist/RabbitMQSubscriber-CdbUy5mB.d.mts +0 -27
- package/dist/RabbitMQSubscriber-CdbUy5mB.d.mts.map +0 -1
- package/dist/RabbitMQSubscriber-DGEO-clQ.cjs +0 -62
- package/dist/RabbitMQSubscriber-DGEO-clQ.cjs.map +0 -1
- package/dist/SNSConnection-CAcbLQOy.cjs.map +0 -1
- package/dist/SNSConnection-CG4iEwA8.d.mts +0 -41
- package/dist/SNSConnection-CG4iEwA8.d.mts.map +0 -1
- package/dist/SNSConnection-CVjH93lb.mjs.map +0 -1
- package/dist/SNSConnection-Dol9FuxA.d.cts +0 -41
- package/dist/SNSConnection-Dol9FuxA.d.cts.map +0 -1
- package/dist/SNSPublisher-CjlMS3Z2.mjs +0 -41
- package/dist/SNSPublisher-CjlMS3Z2.mjs.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-DV_8GGsi.cjs +0 -47
- package/dist/SNSPublisher-DV_8GGsi.cjs.map +0 -1
- package/dist/SNSSubscriber-BWaCQFl6.mjs +0 -139
- package/dist/SNSSubscriber-BWaCQFl6.mjs.map +0 -1
- package/dist/SNSSubscriber-CUgHK4W2.d.mts +0 -55
- package/dist/SNSSubscriber-CUgHK4W2.d.mts.map +0 -1
- package/dist/SNSSubscriber-ZE_-Hsps.cjs +0 -145
- package/dist/SNSSubscriber-ZE_-Hsps.cjs.map +0 -1
- package/dist/SNSSubscriber-ZGJjhXFQ.d.cts +0 -55
- package/dist/SNSSubscriber-ZGJjhXFQ.d.cts.map +0 -1
- package/dist/SQSConnection-BtEkDha8.d.cts +0 -41
- package/dist/SQSConnection-BtEkDha8.d.cts.map +0 -1
- package/dist/SQSConnection-CT3S7_zP.mjs.map +0 -1
- package/dist/SQSConnection-DVy43GCV.d.mts +0 -41
- package/dist/SQSConnection-DVy43GCV.d.mts.map +0 -1
- package/dist/SQSConnection-Y0mdVTcB.cjs.map +0 -1
- package/dist/SQSPublisher-B-32CC4G.mjs +0 -57
- package/dist/SQSPublisher-B-32CC4G.mjs.map +0 -1
- package/dist/SQSPublisher-CgUduk6H.cjs +0 -63
- package/dist/SQSPublisher-CgUduk6H.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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["connection: SNSConnection","_options: SNSPublisherOptions","connectionString: string","messages: TMessage[]","message: TMessage","PublishCommand","connection: SNSConnection","options: SNSSubscriberOptions","SQSClient","connectionString: string","messages: TMessage['type'][]","listener: (payload: TMessage) => Promise<void>","SQSConnection","SQSSubscriber","UnsubscribeCommand","DeleteQueueCommand","CreateQueueCommand","GetQueueAttributesCommand","SetQueueAttributesCommand","SubscribeCommand"],"sources":["../../src/sns/SNSPublisher.ts","../../src/sns/SNSSubscriber.ts"],"sourcesContent":["import { PublishCommand } from '@aws-sdk/client-sns';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { SNSConnection } from './SNSConnection';\n\nexport type SNSPublisherOptions = {};\n\nexport class SNSPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: SNSConnection,\n\t\t_options: SNSPublisherOptions = {},\n\t) {}\n\n\t/**\n\t * Create an SNSPublisher from a connection string\n\t * Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<SNSPublisher<TMessage>> {\n\t\tconst { SNSConnection } = await import('./SNSConnection');\n\t\tconst connection =\n\t\t\tawait SNSConnection.fromConnectionString(connectionString);\n\n\t\treturn new SNSPublisher<TMessage>(connection);\n\t}\n\n\tasync publish(messages: TMessage[]): Promise<void> {\n\t\tif (messages.length === 0) return;\n\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\t// Publish all messages\n\t\tawait Promise.all(messages.map((message) => this.publishMessage(message)));\n\t}\n\n\tprivate async publishMessage(message: TMessage): Promise<void> {\n\t\tconst command = new PublishCommand({\n\t\t\tTopicArn: this.connection.topicArn,\n\t\t\tMessage: JSON.stringify({\n\t\t\t\ttype: message.type,\n\t\t\t\tpayload: message.payload,\n\t\t\t}),\n\t\t\tMessageAttributes: {\n\t\t\t\ttype: {\n\t\t\t\t\tDataType: 'String',\n\t\t\t\t\tStringValue: message.type,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tawait this.connection.snsClient.send(command);\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 { SubscribeCommand, UnsubscribeCommand } from '@aws-sdk/client-sns';\nimport {\n\tCreateQueueCommand,\n\tDeleteQueueCommand,\n\tGetQueueAttributesCommand,\n\tSetQueueAttributesCommand,\n\tSQSClient,\n} from '@aws-sdk/client-sqs';\nimport { SQSConnection } from '../sqs/SQSConnection';\nimport { SQSSubscriber } from '../sqs/SQSSubscriber';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { SNSConnection } from './SNSConnection';\n\nexport interface SNSSubscriberOptions {\n\tqueueName?: string; // Optional queue name (defaults to auto-generated)\n\tcreateQueue?: boolean; // Auto-create SQS queue (default: true)\n\tdeleteQueueOnClose?: boolean; // Delete queue when subscriber closes (default: false for named queues, true for auto-generated)\n\twaitTimeSeconds?: number; // SQS long polling (default: 20)\n\tmaxMessages?: number; // Max messages per poll (default: 10)\n}\n\n/**\n * SNS Subscriber - receives push-based messages from SNS via SQS queue\n *\n * Architecture:\n * SNS Topic → (push) → SQS Queue → Subscriber\n *\n * This subscriber automatically:\n * 1. Creates an SQS queue (or uses existing one)\n * 2. Subscribes the queue to the SNS topic\n * 3. Receives messages pushed from SNS to the queue\n * 4. Filters messages by topic ARN and message type\n * 5. Processes and acknowledges messages\n *\n * Note: While SQS long-polling is used internally to receive messages,\n * this is an implementation detail of the SNS push delivery mechanism.\n * Messages are pushed from SNS to SQS, and we receive those pushed messages.\n */\nexport class SNSSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tprivate sqsClient: SQSClient;\n\tprivate queueUrl?: string;\n\tprivate queueArn?: string;\n\tprivate subscriptionArn?: string;\n\tprivate sqsSubscriber?: SQSSubscriber<TMessage>;\n\tprivate options: Required<SNSSubscriberOptions>;\n\n\tconstructor(\n\t\tprivate connection: SNSConnection,\n\t\toptions: SNSSubscriberOptions = {},\n\t) {\n\t\tthis.options = {\n\t\t\tqueueName:\n\t\t\t\toptions.queueName ||\n\t\t\t\t`sns-sub-${Date.now()}-${Math.random().toString(36).substring(7)}`,\n\t\t\tcreateQueue: options.createQueue ?? true,\n\t\t\tdeleteQueueOnClose: options.deleteQueueOnClose ?? !options.queueName, // Delete auto-generated queues\n\t\t\twaitTimeSeconds: options.waitTimeSeconds ?? 20,\n\t\t\tmaxMessages: options.maxMessages ?? 10,\n\t\t};\n\n\t\t// Create SQS client with same config as SNS\n\t\tthis.sqsClient = new SQSClient({\n\t\t\tregion: (this.connection as any).config.region,\n\t\t\tendpoint: (this.connection as any).config.endpoint,\n\t\t\tcredentials: (this.connection as any).config.credentials,\n\t\t});\n\t}\n\n\t/**\n\t * Create an SNSSubscriber from a connection string\n\t * Format: sns://?topicArn=...&queueName=myqueue®ion=us-east-1\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<SNSSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { SNSConnection } = await import('./SNSConnection');\n\t\tconst connection =\n\t\t\tawait SNSConnection.fromConnectionString(connectionString);\n\n\t\tconst options: SNSSubscriberOptions = {\n\t\t\tqueueName: params.get('queueName') || undefined,\n\t\t\tcreateQueue: params.get('createQueue') !== 'false',\n\t\t\tdeleteQueueOnClose: params.get('deleteQueueOnClose') === 'true',\n\t\t\twaitTimeSeconds: params.get('waitTimeSeconds')\n\t\t\t\t? Number.parseInt(params.get('waitTimeSeconds')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new SNSSubscriber<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\t// Setup SQS queue and SNS subscription\n\t\tawait this.setupQueue();\n\t\tawait this.subscribeToTopic();\n\n\t\t// Create SQS connection for the subscriber\n\t\tconst sqsConnection = new SQSConnection({\n\t\t\tqueueUrl: this.queueUrl!,\n\t\t\tregion: (this.connection as any).config.region,\n\t\t\tendpoint: (this.connection as any).config.endpoint,\n\t\t\tcredentials: (this.connection as any).config.credentials,\n\t\t});\n\t\tawait sqsConnection.connect();\n\n\t\t// Use SQSSubscriber to receive messages, with topic filtering\n\t\tthis.sqsSubscriber = new SQSSubscriber<TMessage>(sqsConnection, {\n\t\t\twaitTimeSeconds: this.options.waitTimeSeconds,\n\t\t\tmaxMessages: this.options.maxMessages,\n\t\t\texpectedTopicArn: this.connection.topicArn,\n\t\t});\n\n\t\tawait this.sqsSubscriber.subscribe(messages, listener);\n\t}\n\n\t/**\n\t * Stop receiving messages and clean up resources\n\t */\n\tasync stop(): Promise<void> {\n\t\t// Stop SQS subscriber\n\t\tif (this.sqsSubscriber) {\n\t\t\tthis.sqsSubscriber.stop();\n\t\t}\n\n\t\t// Unsubscribe from topic\n\t\tif (this.subscriptionArn) {\n\t\t\ttry {\n\t\t\t\tconst command = new UnsubscribeCommand({\n\t\t\t\t\tSubscriptionArn: this.subscriptionArn,\n\t\t\t\t});\n\t\t\t\tawait this.connection.snsClient.send(command);\n\t\t\t} catch (_error) {}\n\t\t}\n\n\t\t// Delete queue if configured\n\t\tif (this.queueUrl && this.options.deleteQueueOnClose) {\n\t\t\ttry {\n\t\t\t\tconst command = new DeleteQueueCommand({\n\t\t\t\t\tQueueUrl: this.queueUrl,\n\t\t\t\t});\n\t\t\t\tawait this.sqsClient.send(command);\n\t\t\t} catch (_error) {}\n\t\t}\n\n\t\tthis.sqsClient.destroy();\n\t}\n\n\tprivate async setupQueue(): Promise<void> {\n\t\tif (this.options.createQueue) {\n\t\t\t// Create queue\n\t\t\tconst createCommand = new CreateQueueCommand({\n\t\t\t\tQueueName: this.options.queueName,\n\t\t\t});\n\t\t\tconst response = await this.sqsClient.send(createCommand);\n\t\t\tthis.queueUrl = response.QueueUrl!;\n\t\t} else {\n\t\t\tthrow new Error('Queue must exist or createQueue option must be true');\n\t\t}\n\n\t\t// Get queue ARN\n\t\tconst attrsCommand = new GetQueueAttributesCommand({\n\t\t\tQueueUrl: this.queueUrl,\n\t\t\tAttributeNames: ['QueueArn'],\n\t\t});\n\t\tconst attrsResponse = await this.sqsClient.send(attrsCommand);\n\t\tthis.queueArn = attrsResponse.Attributes?.QueueArn!;\n\n\t\t// Set queue policy to allow SNS\n\t\tawait this.setQueuePolicy();\n\t}\n\n\tprivate async setQueuePolicy(): Promise<void> {\n\t\tconst policy = {\n\t\t\tVersion: '2012-10-17',\n\t\t\tStatement: [\n\t\t\t\t{\n\t\t\t\t\tEffect: 'Allow',\n\t\t\t\t\tPrincipal: '*',\n\t\t\t\t\tAction: 'SQS:SendMessage',\n\t\t\t\t\tResource: this.queueArn,\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tArnEquals: {\n\t\t\t\t\t\t\t'aws:SourceArn': this.connection.topicArn,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tconst command = new SetQueueAttributesCommand({\n\t\t\tQueueUrl: this.queueUrl,\n\t\t\tAttributes: {\n\t\t\t\tPolicy: JSON.stringify(policy),\n\t\t\t},\n\t\t});\n\n\t\tawait this.sqsClient.send(command);\n\t}\n\n\tprivate async subscribeToTopic(): Promise<void> {\n\t\tconst command = new SubscribeCommand({\n\t\t\tTopicArn: this.connection.topicArn,\n\t\t\tProtocol: 'sqs',\n\t\t\tEndpoint: this.queueArn,\n\t\t});\n\n\t\tconst response = await this.connection.snsClient.send(command);\n\t\tthis.subscriptionArn = response.SubscriptionArn!;\n\t}\n}\n"],"mappings":"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"}
|
package/dist/sns/index.d.cts
CHANGED
|
@@ -1,5 +1,109 @@
|
|
|
1
|
-
import "../types-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { EventConnection, EventPublisher, EventPublisherType, EventSubscriber, PublishableMessage } from "../types-BmixGrOD.cjs";
|
|
2
|
+
import { SnsAddress, snsUrl_d_exports } from "../snsUrl-ASdc0D1v.cjs";
|
|
3
|
+
import { SNSClient } from "@aws-sdk/client-sns";
|
|
4
|
+
|
|
5
|
+
//#region src/sns/SNSConnection.d.ts
|
|
6
|
+
interface SNSConnectionConfig {
|
|
7
|
+
topicArn: string;
|
|
8
|
+
region?: string;
|
|
9
|
+
endpoint?: string;
|
|
10
|
+
credentials?: {
|
|
11
|
+
accessKeyId: string;
|
|
12
|
+
secretAccessKey: string;
|
|
13
|
+
sessionToken?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
declare class SNSConnection implements EventConnection {
|
|
17
|
+
readonly type = EventPublisherType.SNS;
|
|
18
|
+
private client;
|
|
19
|
+
private connected;
|
|
20
|
+
private config;
|
|
21
|
+
constructor(config: SNSConnectionConfig);
|
|
22
|
+
/**
|
|
23
|
+
* Create an SNSConnection from a connection string
|
|
24
|
+
* Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566
|
|
25
|
+
*/
|
|
26
|
+
static fromConnectionString(connectionString: string): Promise<SNSConnection>;
|
|
27
|
+
connect(): Promise<void>;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
isConnected(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get the underlying SNS client
|
|
32
|
+
*/
|
|
33
|
+
get snsClient(): SNSClient;
|
|
34
|
+
/**
|
|
35
|
+
* Get the topic ARN for this connection
|
|
36
|
+
*/
|
|
37
|
+
get topicArn(): string;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=SNSConnection.d.ts.map
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/sns/SNSPublisher.d.ts
|
|
42
|
+
type SNSPublisherOptions = {};
|
|
43
|
+
declare class SNSPublisher<TMessage extends PublishableMessage<string, any>> implements EventPublisher<TMessage> {
|
|
44
|
+
private connection;
|
|
45
|
+
constructor(connection: SNSConnection, _options?: SNSPublisherOptions);
|
|
46
|
+
/**
|
|
47
|
+
* Create an SNSPublisher from a connection string
|
|
48
|
+
* Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566
|
|
49
|
+
*/
|
|
50
|
+
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionString: string): Promise<SNSPublisher<TMessage>>;
|
|
51
|
+
publish(messages: TMessage[]): Promise<void>;
|
|
52
|
+
private publishMessage;
|
|
53
|
+
close(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=SNSPublisher.d.ts.map
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/sns/SNSSubscriber.d.ts
|
|
58
|
+
interface SNSSubscriberOptions {
|
|
59
|
+
queueName?: string;
|
|
60
|
+
createQueue?: boolean;
|
|
61
|
+
deleteQueueOnClose?: boolean;
|
|
62
|
+
waitTimeSeconds?: number;
|
|
63
|
+
maxMessages?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* SNS Subscriber - receives push-based messages from SNS via SQS queue
|
|
67
|
+
*
|
|
68
|
+
* Architecture:
|
|
69
|
+
* SNS Topic → (push) → SQS Queue → Subscriber
|
|
70
|
+
*
|
|
71
|
+
* This subscriber automatically:
|
|
72
|
+
* 1. Creates an SQS queue (or uses existing one)
|
|
73
|
+
* 2. Subscribes the queue to the SNS topic
|
|
74
|
+
* 3. Receives messages pushed from SNS to the queue
|
|
75
|
+
* 4. Filters messages by topic ARN and message type
|
|
76
|
+
* 5. Processes and acknowledges messages
|
|
77
|
+
*
|
|
78
|
+
* Note: While SQS long-polling is used internally to receive messages,
|
|
79
|
+
* this is an implementation detail of the SNS push delivery mechanism.
|
|
80
|
+
* Messages are pushed from SNS to SQS, and we receive those pushed messages.
|
|
81
|
+
*/
|
|
82
|
+
declare class SNSSubscriber<TMessage extends PublishableMessage<string, any>> implements EventSubscriber<TMessage> {
|
|
83
|
+
private connection;
|
|
84
|
+
private sqsClient;
|
|
85
|
+
private queueUrl?;
|
|
86
|
+
private queueArn?;
|
|
87
|
+
private subscriptionArn?;
|
|
88
|
+
private sqsSubscriber?;
|
|
89
|
+
private options;
|
|
90
|
+
constructor(connection: SNSConnection, options?: SNSSubscriberOptions);
|
|
91
|
+
/**
|
|
92
|
+
* Create an SNSSubscriber from a connection string
|
|
93
|
+
* Format: sns://?topicArn=...&queueName=myqueue®ion=us-east-1
|
|
94
|
+
*/
|
|
95
|
+
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionString: string): Promise<SNSSubscriber<TMessage>>;
|
|
96
|
+
subscribe(messages: TMessage['type'][], listener: (payload: TMessage) => Promise<void>): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Stop receiving messages and clean up resources
|
|
99
|
+
*/
|
|
100
|
+
stop(): Promise<void>;
|
|
101
|
+
private setupQueue;
|
|
102
|
+
private setQueuePolicy;
|
|
103
|
+
private subscribeToTopic;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=SNSSubscriber.d.ts.map
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
export { SNSConnection, SNSConnectionConfig, SNSPublisher, SNSPublisherOptions, SNSSubscriber, SNSSubscriberOptions, SnsAddress, snsUrl_d_exports as snsUrl };
|
|
109
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/sns/SNSConnection.ts","../../src/sns/SNSPublisher.ts","../../src/sns/SNSSubscriber.ts"],"sourcesContent":[],"mappings":";;;;;UAKiB,mBAAA;;EAAA,MAAA,CAAA,EAAA,MAAA;EAWJ,QAAA,CAAA,EAAA,MAAc;EAAA,WAAA,CAAA,EAAA;IACb,WAAA,EAAA,MAAA;IAKO,eAAA,EAAA,MAAA;IAkBT,YAAA,CAAA,EAAA,MAAA;EAAa,CAAA;;AAmCT,cA3DH,aAAA,YAAyB,eA2DtB,CAAA;EAAO,SAYL,IAAA,GAtEJ,kBAAA,CAAA,GAAA;EAsEa,QAvEW,MAAA;EAAe,QAAA,SAAA;;sBAMhC;;AClBrB;AAEA;;EAAyB,OAAkB,oBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EDkCvC,OClCuC,CDkC/B,aClC+B,CAAA;EAAkB,OAClC,CAAA,CAAA,ED+DT,OC/DS,CAAA,IAAA,CAAA;EAAQ,KAGb,CAAA,CAAA,EDiEN,OCjEM,CAAA,IAAA,CAAA;EAAa,WACvB,CAAA,CAAA,EAAA,OAAA;EAAwB;;;EASc,IAApB,SAAA,CAAA,CAAA,EDmEZ,SCnEY;EAAO;;;EAqCd,IAlDX,QAAA,CAAA,CAAA,EAAA,MAAA;AAAc;;;;KAHd,mBAAA;cAEC,8BAA8B,4CAC/B,eAAe;;EDFV,WAAA,CAAA,UAAmB,ECKd,aDLc,EAAA,QAAA,CAAA,ECMxB,mBDNwB;EAWvB;;;;EAM2B,OAkB5B,oBAAA,CAAA,iBCrBO,kBDqBP,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,ECpBkB,ODoBlB,CCpB0B,YDoB1B,CCpBuC,QDoBvC,CAAA,CAAA;EAAa,OAArB,CAAA,QAAA,ECZqB,QDYrB,EAAA,CAAA,ECZkC,ODYlC,CAAA,IAAA,CAAA;EAAO,QA8BO,cAAA;EAAO,KAKT,CAAA,CAAA,EClBA,ODkBA,CAAA,IAAA,CAAA;;;;;UE9DC,oBAAA;;;EFRA,kBAAA,CAAA,EAAA,OAAmB;EAWvB,eAAA,CAAc,EAAA,MAAA;EAAA,WAAA,CAAA,EAAA,MAAA;;;;;;;;;AAA0B;;;;ACZrD;AAEA;;;;;AAKY,cC2BC,aD3BD,CAAA,iBC2BgC,kBD3BhC,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,YC4BA,eD5BA,CC4BgB,QD5BhB,CAAA,CAAA;EAAwB,QAQjB,UAAA;EAAkB,QACc,SAAA;EAAQ,QAArB,QAAA;EAAY,QAApB,QAAA;EAAO,QAQZ,eAAA;EAAQ,QAAK,aAAA;EAAO,QA6B7B,OAAA;EAAO,WAlDX,CAAA,UAAA,EC0CU,aD1CV,EAAA,OAAA,CAAA,EC2CD,oBD3CC;EAAc;;;;ECMT,OAAA,oBAAoB,CAAA,iBA8DlB,kBA9DkB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EA+DP,OA/DO,CA+DC,aA/DD,CA+De,QA/Df,CAAA,CAAA;EAyBxB,SAAA,CAAA,QAAa,EA2Dd,QA3Dc,CAAA,MAAA,CAAA,EAAA,EAAA,QAAA,EAAA,CAAA,OAAA,EA4DJ,QA5DI,EAAA,GA4DS,OA5DT,CAAA,IAAA,CAAA,CAAA,EA6DtB,OA7DsB,CAAA,IAAA,CAAA;EAAA;;;EACU,IAUd,CAAA,CAAA,EA6EP,OA7EO,CAAA,IAAA,CAAA;EAAa,QACxB,UAAA;EAAyB,QAyBjB,cAAA;EAAkB,QACe,gBAAA"}
|
package/dist/sns/index.d.mts
CHANGED
|
@@ -1,5 +1,109 @@
|
|
|
1
|
-
import "../types-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { EventConnection, EventPublisher, EventPublisherType, EventSubscriber, PublishableMessage } from "../types-DycjsYms.mjs";
|
|
2
|
+
import { SnsAddress, snsUrl_d_exports } from "../snsUrl-FRbRcwF0.mjs";
|
|
3
|
+
import { SNSClient } from "@aws-sdk/client-sns";
|
|
4
|
+
|
|
5
|
+
//#region src/sns/SNSConnection.d.ts
|
|
6
|
+
interface SNSConnectionConfig {
|
|
7
|
+
topicArn: string;
|
|
8
|
+
region?: string;
|
|
9
|
+
endpoint?: string;
|
|
10
|
+
credentials?: {
|
|
11
|
+
accessKeyId: string;
|
|
12
|
+
secretAccessKey: string;
|
|
13
|
+
sessionToken?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
declare class SNSConnection implements EventConnection {
|
|
17
|
+
readonly type = EventPublisherType.SNS;
|
|
18
|
+
private client;
|
|
19
|
+
private connected;
|
|
20
|
+
private config;
|
|
21
|
+
constructor(config: SNSConnectionConfig);
|
|
22
|
+
/**
|
|
23
|
+
* Create an SNSConnection from a connection string
|
|
24
|
+
* Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566
|
|
25
|
+
*/
|
|
26
|
+
static fromConnectionString(connectionString: string): Promise<SNSConnection>;
|
|
27
|
+
connect(): Promise<void>;
|
|
28
|
+
close(): Promise<void>;
|
|
29
|
+
isConnected(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get the underlying SNS client
|
|
32
|
+
*/
|
|
33
|
+
get snsClient(): SNSClient;
|
|
34
|
+
/**
|
|
35
|
+
* Get the topic ARN for this connection
|
|
36
|
+
*/
|
|
37
|
+
get topicArn(): string;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=SNSConnection.d.ts.map
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/sns/SNSPublisher.d.ts
|
|
42
|
+
type SNSPublisherOptions = {};
|
|
43
|
+
declare class SNSPublisher<TMessage extends PublishableMessage<string, any>> implements EventPublisher<TMessage> {
|
|
44
|
+
private connection;
|
|
45
|
+
constructor(connection: SNSConnection, _options?: SNSPublisherOptions);
|
|
46
|
+
/**
|
|
47
|
+
* Create an SNSPublisher from a connection string
|
|
48
|
+
* Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566
|
|
49
|
+
*/
|
|
50
|
+
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionString: string): Promise<SNSPublisher<TMessage>>;
|
|
51
|
+
publish(messages: TMessage[]): Promise<void>;
|
|
52
|
+
private publishMessage;
|
|
53
|
+
close(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=SNSPublisher.d.ts.map
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/sns/SNSSubscriber.d.ts
|
|
58
|
+
interface SNSSubscriberOptions {
|
|
59
|
+
queueName?: string;
|
|
60
|
+
createQueue?: boolean;
|
|
61
|
+
deleteQueueOnClose?: boolean;
|
|
62
|
+
waitTimeSeconds?: number;
|
|
63
|
+
maxMessages?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* SNS Subscriber - receives push-based messages from SNS via SQS queue
|
|
67
|
+
*
|
|
68
|
+
* Architecture:
|
|
69
|
+
* SNS Topic → (push) → SQS Queue → Subscriber
|
|
70
|
+
*
|
|
71
|
+
* This subscriber automatically:
|
|
72
|
+
* 1. Creates an SQS queue (or uses existing one)
|
|
73
|
+
* 2. Subscribes the queue to the SNS topic
|
|
74
|
+
* 3. Receives messages pushed from SNS to the queue
|
|
75
|
+
* 4. Filters messages by topic ARN and message type
|
|
76
|
+
* 5. Processes and acknowledges messages
|
|
77
|
+
*
|
|
78
|
+
* Note: While SQS long-polling is used internally to receive messages,
|
|
79
|
+
* this is an implementation detail of the SNS push delivery mechanism.
|
|
80
|
+
* Messages are pushed from SNS to SQS, and we receive those pushed messages.
|
|
81
|
+
*/
|
|
82
|
+
declare class SNSSubscriber<TMessage extends PublishableMessage<string, any>> implements EventSubscriber<TMessage> {
|
|
83
|
+
private connection;
|
|
84
|
+
private sqsClient;
|
|
85
|
+
private queueUrl?;
|
|
86
|
+
private queueArn?;
|
|
87
|
+
private subscriptionArn?;
|
|
88
|
+
private sqsSubscriber?;
|
|
89
|
+
private options;
|
|
90
|
+
constructor(connection: SNSConnection, options?: SNSSubscriberOptions);
|
|
91
|
+
/**
|
|
92
|
+
* Create an SNSSubscriber from a connection string
|
|
93
|
+
* Format: sns://?topicArn=...&queueName=myqueue®ion=us-east-1
|
|
94
|
+
*/
|
|
95
|
+
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionString: string): Promise<SNSSubscriber<TMessage>>;
|
|
96
|
+
subscribe(messages: TMessage['type'][], listener: (payload: TMessage) => Promise<void>): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Stop receiving messages and clean up resources
|
|
99
|
+
*/
|
|
100
|
+
stop(): Promise<void>;
|
|
101
|
+
private setupQueue;
|
|
102
|
+
private setQueuePolicy;
|
|
103
|
+
private subscribeToTopic;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=SNSSubscriber.d.ts.map
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
export { SNSConnection, SNSConnectionConfig, SNSPublisher, SNSPublisherOptions, SNSSubscriber, SNSSubscriberOptions, SnsAddress, snsUrl_d_exports as snsUrl };
|
|
109
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/sns/SNSConnection.ts","../../src/sns/SNSPublisher.ts","../../src/sns/SNSSubscriber.ts"],"sourcesContent":[],"mappings":";;;;;UAKiB,mBAAA;;EAAA,MAAA,CAAA,EAAA,MAAA;EAWJ,QAAA,CAAA,EAAA,MAAc;EAAA,WAAA,CAAA,EAAA;IACb,WAAA,EAAA,MAAA;IAKO,eAAA,EAAA,MAAA;IAkBT,YAAA,CAAA,EAAA,MAAA;EAAa,CAAA;;AAmCT,cA3DH,aAAA,YAAyB,eA2DtB,CAAA;EAAO,SAYL,IAAA,GAtEJ,kBAAA,CAAA,GAAA;EAsEa,QAvEW,MAAA;EAAe,QAAA,SAAA;;sBAMhC;;AClBrB;AAEA;;EAAyB,OAAkB,oBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EDkCvC,OClCuC,CDkC/B,aClC+B,CAAA;EAAkB,OAClC,CAAA,CAAA,ED+DT,OC/DS,CAAA,IAAA,CAAA;EAAQ,KAGb,CAAA,CAAA,EDiEN,OCjEM,CAAA,IAAA,CAAA;EAAa,WACvB,CAAA,CAAA,EAAA,OAAA;EAAwB;;;EASc,IAApB,SAAA,CAAA,CAAA,EDmEZ,SCnEY;EAAO;;;EAqCd,IAlDX,QAAA,CAAA,CAAA,EAAA,MAAA;AAAc;;;;KAHd,mBAAA;cAEC,8BAA8B,4CAC/B,eAAe;;EDFV,WAAA,CAAA,UAAmB,ECKd,aDLc,EAAA,QAAA,CAAA,ECMxB,mBDNwB;EAWvB;;;;EAM2B,OAkB5B,oBAAA,CAAA,iBCrBO,kBDqBP,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,ECpBkB,ODoBlB,CCpB0B,YDoB1B,CCpBuC,QDoBvC,CAAA,CAAA;EAAa,OAArB,CAAA,QAAA,ECZqB,QDYrB,EAAA,CAAA,ECZkC,ODYlC,CAAA,IAAA,CAAA;EAAO,QA8BO,cAAA;EAAO,KAKT,CAAA,CAAA,EClBA,ODkBA,CAAA,IAAA,CAAA;;;;;UE9DC,oBAAA;;;EFRA,kBAAA,CAAA,EAAA,OAAmB;EAWvB,eAAA,CAAc,EAAA,MAAA;EAAA,WAAA,CAAA,EAAA,MAAA;;;;;;;;;AAA0B;;;;ACZrD;AAEA;;;;;AAKY,cC2BC,aD3BD,CAAA,iBC2BgC,kBD3BhC,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,YC4BA,eD5BA,CC4BgB,QD5BhB,CAAA,CAAA;EAAwB,QAQjB,UAAA;EAAkB,QACc,SAAA;EAAQ,QAArB,QAAA;EAAY,QAApB,QAAA;EAAO,QAQZ,eAAA;EAAQ,QAAK,aAAA;EAAO,QA6B7B,OAAA;EAAO,WAlDX,CAAA,UAAA,EC0CU,aD1CV,EAAA,OAAA,CAAA,EC2CD,oBD3CC;EAAc;;;;ECMT,OAAA,oBAAoB,CAAA,iBA8DlB,kBA9DkB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EA+DP,OA/DO,CA+DC,aA/DD,CA+De,QA/Df,CAAA,CAAA;EAyBxB,SAAA,CAAA,QAAa,EA2Dd,QA3Dc,CAAA,MAAA,CAAA,EAAA,EAAA,QAAA,EAAA,CAAA,OAAA,EA4DJ,QA5DI,EAAA,GA4DS,OA5DT,CAAA,IAAA,CAAA,CAAA,EA6DtB,OA7DsB,CAAA,IAAA,CAAA;EAAA;;;EACU,IAUd,CAAA,CAAA,EA6EP,OA7EO,CAAA,IAAA,CAAA;EAAa,QACxB,UAAA;EAAyB,QAyBjB,cAAA;EAAkB,QACe,gBAAA"}
|
package/dist/sns/index.mjs
CHANGED
|
@@ -1,8 +1,180 @@
|
|
|
1
|
-
import "../types-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import "../
|
|
5
|
-
import "../
|
|
6
|
-
import {
|
|
1
|
+
import "../types-CYDt-2RQ.mjs";
|
|
2
|
+
import { snsUrl_exports } from "../snsUrl-CifYhPAa.mjs";
|
|
3
|
+
import { SNSConnection } from "../SNSConnection-v9jjF99w.mjs";
|
|
4
|
+
import "../sqsUrl-CbAsBFHI.mjs";
|
|
5
|
+
import { SQSConnection } from "../SQSConnection-4tBMkVZE.mjs";
|
|
6
|
+
import { SQSSubscriber } from "../SQSSubscriber-BMWZ3s5q.mjs";
|
|
7
|
+
import { PublishCommand, SubscribeCommand, UnsubscribeCommand } from "@aws-sdk/client-sns";
|
|
8
|
+
import { CreateQueueCommand, DeleteQueueCommand, GetQueueAttributesCommand, SQSClient, SetQueueAttributesCommand } from "@aws-sdk/client-sqs";
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
//#region src/sns/SNSPublisher.ts
|
|
11
|
+
var SNSPublisher = class SNSPublisher {
|
|
12
|
+
constructor(connection, _options = {}) {
|
|
13
|
+
this.connection = connection;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create an SNSPublisher from a connection string
|
|
17
|
+
* Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566
|
|
18
|
+
*/
|
|
19
|
+
static async fromConnectionString(connectionString) {
|
|
20
|
+
const { SNSConnection: SNSConnection$1 } = await import("../SNSConnection-BVo84FeW.mjs");
|
|
21
|
+
const connection = await SNSConnection$1.fromConnectionString(connectionString);
|
|
22
|
+
return new SNSPublisher(connection);
|
|
23
|
+
}
|
|
24
|
+
async publish(messages) {
|
|
25
|
+
if (messages.length === 0) return;
|
|
26
|
+
if (!this.connection.isConnected()) await this.connection.connect();
|
|
27
|
+
await Promise.all(messages.map((message) => this.publishMessage(message)));
|
|
28
|
+
}
|
|
29
|
+
async publishMessage(message) {
|
|
30
|
+
const command = new PublishCommand({
|
|
31
|
+
TopicArn: this.connection.topicArn,
|
|
32
|
+
Message: JSON.stringify({
|
|
33
|
+
type: message.type,
|
|
34
|
+
payload: message.payload
|
|
35
|
+
}),
|
|
36
|
+
MessageAttributes: { type: {
|
|
37
|
+
DataType: "String",
|
|
38
|
+
StringValue: message.type
|
|
39
|
+
} }
|
|
40
|
+
});
|
|
41
|
+
await this.connection.snsClient.send(command);
|
|
42
|
+
}
|
|
43
|
+
async close() {}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/sns/SNSSubscriber.ts
|
|
48
|
+
/**
|
|
49
|
+
* SNS Subscriber - receives push-based messages from SNS via SQS queue
|
|
50
|
+
*
|
|
51
|
+
* Architecture:
|
|
52
|
+
* SNS Topic → (push) → SQS Queue → Subscriber
|
|
53
|
+
*
|
|
54
|
+
* This subscriber automatically:
|
|
55
|
+
* 1. Creates an SQS queue (or uses existing one)
|
|
56
|
+
* 2. Subscribes the queue to the SNS topic
|
|
57
|
+
* 3. Receives messages pushed from SNS to the queue
|
|
58
|
+
* 4. Filters messages by topic ARN and message type
|
|
59
|
+
* 5. Processes and acknowledges messages
|
|
60
|
+
*
|
|
61
|
+
* Note: While SQS long-polling is used internally to receive messages,
|
|
62
|
+
* this is an implementation detail of the SNS push delivery mechanism.
|
|
63
|
+
* Messages are pushed from SNS to SQS, and we receive those pushed messages.
|
|
64
|
+
*/
|
|
65
|
+
var SNSSubscriber = class SNSSubscriber {
|
|
66
|
+
sqsClient;
|
|
67
|
+
queueUrl;
|
|
68
|
+
queueArn;
|
|
69
|
+
subscriptionArn;
|
|
70
|
+
sqsSubscriber;
|
|
71
|
+
options;
|
|
72
|
+
constructor(connection, options = {}) {
|
|
73
|
+
this.connection = connection;
|
|
74
|
+
this.options = {
|
|
75
|
+
queueName: options.queueName || `sns-sub-${Date.now()}-${Math.random().toString(36).substring(7)}`,
|
|
76
|
+
createQueue: options.createQueue ?? true,
|
|
77
|
+
deleteQueueOnClose: options.deleteQueueOnClose ?? !options.queueName,
|
|
78
|
+
waitTimeSeconds: options.waitTimeSeconds ?? 20,
|
|
79
|
+
maxMessages: options.maxMessages ?? 10
|
|
80
|
+
};
|
|
81
|
+
this.sqsClient = new SQSClient({
|
|
82
|
+
region: this.connection.config.region,
|
|
83
|
+
endpoint: this.connection.config.endpoint,
|
|
84
|
+
credentials: this.connection.config.credentials
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Create an SNSSubscriber from a connection string
|
|
89
|
+
* Format: sns://?topicArn=...&queueName=myqueue®ion=us-east-1
|
|
90
|
+
*/
|
|
91
|
+
static async fromConnectionString(connectionString) {
|
|
92
|
+
const url = new URL(connectionString);
|
|
93
|
+
const params = url.searchParams;
|
|
94
|
+
const { SNSConnection: SNSConnection$1 } = await import("../SNSConnection-BVo84FeW.mjs");
|
|
95
|
+
const connection = await SNSConnection$1.fromConnectionString(connectionString);
|
|
96
|
+
const options = {
|
|
97
|
+
queueName: params.get("queueName") || void 0,
|
|
98
|
+
createQueue: params.get("createQueue") !== "false",
|
|
99
|
+
deleteQueueOnClose: params.get("deleteQueueOnClose") === "true",
|
|
100
|
+
waitTimeSeconds: params.get("waitTimeSeconds") ? Number.parseInt(params.get("waitTimeSeconds"), 10) : void 0
|
|
101
|
+
};
|
|
102
|
+
return new SNSSubscriber(connection, options);
|
|
103
|
+
}
|
|
104
|
+
async subscribe(messages, listener) {
|
|
105
|
+
await this.setupQueue();
|
|
106
|
+
await this.subscribeToTopic();
|
|
107
|
+
const sqsConnection = new SQSConnection({
|
|
108
|
+
queueUrl: this.queueUrl,
|
|
109
|
+
region: this.connection.config.region,
|
|
110
|
+
endpoint: this.connection.config.endpoint,
|
|
111
|
+
credentials: this.connection.config.credentials
|
|
112
|
+
});
|
|
113
|
+
await sqsConnection.connect();
|
|
114
|
+
this.sqsSubscriber = new SQSSubscriber(sqsConnection, {
|
|
115
|
+
waitTimeSeconds: this.options.waitTimeSeconds,
|
|
116
|
+
maxMessages: this.options.maxMessages,
|
|
117
|
+
expectedTopicArn: this.connection.topicArn
|
|
118
|
+
});
|
|
119
|
+
await this.sqsSubscriber.subscribe(messages, listener);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Stop receiving messages and clean up resources
|
|
123
|
+
*/
|
|
124
|
+
async stop() {
|
|
125
|
+
if (this.sqsSubscriber) this.sqsSubscriber.stop();
|
|
126
|
+
if (this.subscriptionArn) try {
|
|
127
|
+
const command = new UnsubscribeCommand({ SubscriptionArn: this.subscriptionArn });
|
|
128
|
+
await this.connection.snsClient.send(command);
|
|
129
|
+
} catch (_error) {}
|
|
130
|
+
if (this.queueUrl && this.options.deleteQueueOnClose) try {
|
|
131
|
+
const command = new DeleteQueueCommand({ QueueUrl: this.queueUrl });
|
|
132
|
+
await this.sqsClient.send(command);
|
|
133
|
+
} catch (_error) {}
|
|
134
|
+
this.sqsClient.destroy();
|
|
135
|
+
}
|
|
136
|
+
async setupQueue() {
|
|
137
|
+
if (this.options.createQueue) {
|
|
138
|
+
const createCommand = new CreateQueueCommand({ QueueName: this.options.queueName });
|
|
139
|
+
const response = await this.sqsClient.send(createCommand);
|
|
140
|
+
this.queueUrl = response.QueueUrl;
|
|
141
|
+
} else throw new Error("Queue must exist or createQueue option must be true");
|
|
142
|
+
const attrsCommand = new GetQueueAttributesCommand({
|
|
143
|
+
QueueUrl: this.queueUrl,
|
|
144
|
+
AttributeNames: ["QueueArn"]
|
|
145
|
+
});
|
|
146
|
+
const attrsResponse = await this.sqsClient.send(attrsCommand);
|
|
147
|
+
this.queueArn = attrsResponse.Attributes?.QueueArn;
|
|
148
|
+
await this.setQueuePolicy();
|
|
149
|
+
}
|
|
150
|
+
async setQueuePolicy() {
|
|
151
|
+
const policy = {
|
|
152
|
+
Version: "2012-10-17",
|
|
153
|
+
Statement: [{
|
|
154
|
+
Effect: "Allow",
|
|
155
|
+
Principal: "*",
|
|
156
|
+
Action: "SQS:SendMessage",
|
|
157
|
+
Resource: this.queueArn,
|
|
158
|
+
Condition: { ArnEquals: { "aws:SourceArn": this.connection.topicArn } }
|
|
159
|
+
}]
|
|
160
|
+
};
|
|
161
|
+
const command = new SetQueueAttributesCommand({
|
|
162
|
+
QueueUrl: this.queueUrl,
|
|
163
|
+
Attributes: { Policy: JSON.stringify(policy) }
|
|
164
|
+
});
|
|
165
|
+
await this.sqsClient.send(command);
|
|
166
|
+
}
|
|
167
|
+
async subscribeToTopic() {
|
|
168
|
+
const command = new SubscribeCommand({
|
|
169
|
+
TopicArn: this.connection.topicArn,
|
|
170
|
+
Protocol: "sqs",
|
|
171
|
+
Endpoint: this.queueArn
|
|
172
|
+
});
|
|
173
|
+
const response = await this.connection.snsClient.send(command);
|
|
174
|
+
this.subscriptionArn = response.SubscriptionArn;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
//#endregion
|
|
179
|
+
export { SNSConnection, SNSPublisher, SNSSubscriber, snsUrl_exports as snsUrl };
|
|
180
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["connection: SNSConnection","_options: SNSPublisherOptions","connectionString: string","messages: TMessage[]","message: TMessage","connection: SNSConnection","options: SNSSubscriberOptions","connectionString: string","messages: TMessage['type'][]","listener: (payload: TMessage) => Promise<void>"],"sources":["../../src/sns/SNSPublisher.ts","../../src/sns/SNSSubscriber.ts"],"sourcesContent":["import { PublishCommand } from '@aws-sdk/client-sns';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { SNSConnection } from './SNSConnection';\n\nexport type SNSPublisherOptions = {};\n\nexport class SNSPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: SNSConnection,\n\t\t_options: SNSPublisherOptions = {},\n\t) {}\n\n\t/**\n\t * Create an SNSPublisher from a connection string\n\t * Format: sns://?topicArn=arn:aws:sns:region:account:topic®ion=us-east-1&endpoint=http://localhost:4566\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<SNSPublisher<TMessage>> {\n\t\tconst { SNSConnection } = await import('./SNSConnection');\n\t\tconst connection =\n\t\t\tawait SNSConnection.fromConnectionString(connectionString);\n\n\t\treturn new SNSPublisher<TMessage>(connection);\n\t}\n\n\tasync publish(messages: TMessage[]): Promise<void> {\n\t\tif (messages.length === 0) return;\n\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\t// Publish all messages\n\t\tawait Promise.all(messages.map((message) => this.publishMessage(message)));\n\t}\n\n\tprivate async publishMessage(message: TMessage): Promise<void> {\n\t\tconst command = new PublishCommand({\n\t\t\tTopicArn: this.connection.topicArn,\n\t\t\tMessage: JSON.stringify({\n\t\t\t\ttype: message.type,\n\t\t\t\tpayload: message.payload,\n\t\t\t}),\n\t\t\tMessageAttributes: {\n\t\t\t\ttype: {\n\t\t\t\t\tDataType: 'String',\n\t\t\t\t\tStringValue: message.type,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tawait this.connection.snsClient.send(command);\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 { SubscribeCommand, UnsubscribeCommand } from '@aws-sdk/client-sns';\nimport {\n\tCreateQueueCommand,\n\tDeleteQueueCommand,\n\tGetQueueAttributesCommand,\n\tSetQueueAttributesCommand,\n\tSQSClient,\n} from '@aws-sdk/client-sqs';\nimport { SQSConnection } from '../sqs/SQSConnection';\nimport { SQSSubscriber } from '../sqs/SQSSubscriber';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { SNSConnection } from './SNSConnection';\n\nexport interface SNSSubscriberOptions {\n\tqueueName?: string; // Optional queue name (defaults to auto-generated)\n\tcreateQueue?: boolean; // Auto-create SQS queue (default: true)\n\tdeleteQueueOnClose?: boolean; // Delete queue when subscriber closes (default: false for named queues, true for auto-generated)\n\twaitTimeSeconds?: number; // SQS long polling (default: 20)\n\tmaxMessages?: number; // Max messages per poll (default: 10)\n}\n\n/**\n * SNS Subscriber - receives push-based messages from SNS via SQS queue\n *\n * Architecture:\n * SNS Topic → (push) → SQS Queue → Subscriber\n *\n * This subscriber automatically:\n * 1. Creates an SQS queue (or uses existing one)\n * 2. Subscribes the queue to the SNS topic\n * 3. Receives messages pushed from SNS to the queue\n * 4. Filters messages by topic ARN and message type\n * 5. Processes and acknowledges messages\n *\n * Note: While SQS long-polling is used internally to receive messages,\n * this is an implementation detail of the SNS push delivery mechanism.\n * Messages are pushed from SNS to SQS, and we receive those pushed messages.\n */\nexport class SNSSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tprivate sqsClient: SQSClient;\n\tprivate queueUrl?: string;\n\tprivate queueArn?: string;\n\tprivate subscriptionArn?: string;\n\tprivate sqsSubscriber?: SQSSubscriber<TMessage>;\n\tprivate options: Required<SNSSubscriberOptions>;\n\n\tconstructor(\n\t\tprivate connection: SNSConnection,\n\t\toptions: SNSSubscriberOptions = {},\n\t) {\n\t\tthis.options = {\n\t\t\tqueueName:\n\t\t\t\toptions.queueName ||\n\t\t\t\t`sns-sub-${Date.now()}-${Math.random().toString(36).substring(7)}`,\n\t\t\tcreateQueue: options.createQueue ?? true,\n\t\t\tdeleteQueueOnClose: options.deleteQueueOnClose ?? !options.queueName, // Delete auto-generated queues\n\t\t\twaitTimeSeconds: options.waitTimeSeconds ?? 20,\n\t\t\tmaxMessages: options.maxMessages ?? 10,\n\t\t};\n\n\t\t// Create SQS client with same config as SNS\n\t\tthis.sqsClient = new SQSClient({\n\t\t\tregion: (this.connection as any).config.region,\n\t\t\tendpoint: (this.connection as any).config.endpoint,\n\t\t\tcredentials: (this.connection as any).config.credentials,\n\t\t});\n\t}\n\n\t/**\n\t * Create an SNSSubscriber from a connection string\n\t * Format: sns://?topicArn=...&queueName=myqueue®ion=us-east-1\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<SNSSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { SNSConnection } = await import('./SNSConnection');\n\t\tconst connection =\n\t\t\tawait SNSConnection.fromConnectionString(connectionString);\n\n\t\tconst options: SNSSubscriberOptions = {\n\t\t\tqueueName: params.get('queueName') || undefined,\n\t\t\tcreateQueue: params.get('createQueue') !== 'false',\n\t\t\tdeleteQueueOnClose: params.get('deleteQueueOnClose') === 'true',\n\t\t\twaitTimeSeconds: params.get('waitTimeSeconds')\n\t\t\t\t? Number.parseInt(params.get('waitTimeSeconds')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new SNSSubscriber<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\t// Setup SQS queue and SNS subscription\n\t\tawait this.setupQueue();\n\t\tawait this.subscribeToTopic();\n\n\t\t// Create SQS connection for the subscriber\n\t\tconst sqsConnection = new SQSConnection({\n\t\t\tqueueUrl: this.queueUrl!,\n\t\t\tregion: (this.connection as any).config.region,\n\t\t\tendpoint: (this.connection as any).config.endpoint,\n\t\t\tcredentials: (this.connection as any).config.credentials,\n\t\t});\n\t\tawait sqsConnection.connect();\n\n\t\t// Use SQSSubscriber to receive messages, with topic filtering\n\t\tthis.sqsSubscriber = new SQSSubscriber<TMessage>(sqsConnection, {\n\t\t\twaitTimeSeconds: this.options.waitTimeSeconds,\n\t\t\tmaxMessages: this.options.maxMessages,\n\t\t\texpectedTopicArn: this.connection.topicArn,\n\t\t});\n\n\t\tawait this.sqsSubscriber.subscribe(messages, listener);\n\t}\n\n\t/**\n\t * Stop receiving messages and clean up resources\n\t */\n\tasync stop(): Promise<void> {\n\t\t// Stop SQS subscriber\n\t\tif (this.sqsSubscriber) {\n\t\t\tthis.sqsSubscriber.stop();\n\t\t}\n\n\t\t// Unsubscribe from topic\n\t\tif (this.subscriptionArn) {\n\t\t\ttry {\n\t\t\t\tconst command = new UnsubscribeCommand({\n\t\t\t\t\tSubscriptionArn: this.subscriptionArn,\n\t\t\t\t});\n\t\t\t\tawait this.connection.snsClient.send(command);\n\t\t\t} catch (_error) {}\n\t\t}\n\n\t\t// Delete queue if configured\n\t\tif (this.queueUrl && this.options.deleteQueueOnClose) {\n\t\t\ttry {\n\t\t\t\tconst command = new DeleteQueueCommand({\n\t\t\t\t\tQueueUrl: this.queueUrl,\n\t\t\t\t});\n\t\t\t\tawait this.sqsClient.send(command);\n\t\t\t} catch (_error) {}\n\t\t}\n\n\t\tthis.sqsClient.destroy();\n\t}\n\n\tprivate async setupQueue(): Promise<void> {\n\t\tif (this.options.createQueue) {\n\t\t\t// Create queue\n\t\t\tconst createCommand = new CreateQueueCommand({\n\t\t\t\tQueueName: this.options.queueName,\n\t\t\t});\n\t\t\tconst response = await this.sqsClient.send(createCommand);\n\t\t\tthis.queueUrl = response.QueueUrl!;\n\t\t} else {\n\t\t\tthrow new Error('Queue must exist or createQueue option must be true');\n\t\t}\n\n\t\t// Get queue ARN\n\t\tconst attrsCommand = new GetQueueAttributesCommand({\n\t\t\tQueueUrl: this.queueUrl,\n\t\t\tAttributeNames: ['QueueArn'],\n\t\t});\n\t\tconst attrsResponse = await this.sqsClient.send(attrsCommand);\n\t\tthis.queueArn = attrsResponse.Attributes?.QueueArn!;\n\n\t\t// Set queue policy to allow SNS\n\t\tawait this.setQueuePolicy();\n\t}\n\n\tprivate async setQueuePolicy(): Promise<void> {\n\t\tconst policy = {\n\t\t\tVersion: '2012-10-17',\n\t\t\tStatement: [\n\t\t\t\t{\n\t\t\t\t\tEffect: 'Allow',\n\t\t\t\t\tPrincipal: '*',\n\t\t\t\t\tAction: 'SQS:SendMessage',\n\t\t\t\t\tResource: this.queueArn,\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tArnEquals: {\n\t\t\t\t\t\t\t'aws:SourceArn': this.connection.topicArn,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tconst command = new SetQueueAttributesCommand({\n\t\t\tQueueUrl: this.queueUrl,\n\t\t\tAttributes: {\n\t\t\t\tPolicy: JSON.stringify(policy),\n\t\t\t},\n\t\t});\n\n\t\tawait this.sqsClient.send(command);\n\t}\n\n\tprivate async subscribeToTopic(): Promise<void> {\n\t\tconst command = new SubscribeCommand({\n\t\t\tTopicArn: this.connection.topicArn,\n\t\t\tProtocol: 'sqs',\n\t\t\tEndpoint: this.queueArn,\n\t\t});\n\n\t\tconst response = await this.connection.snsClient.send(command);\n\t\tthis.subscriptionArn = response.SubscriptionArn!;\n\t}\n}\n"],"mappings":";;;;;;;;;;AAMA,IAAa,eAAb,MAAa,aAEb;CACC,YACSA,YACRC,WAAgC,CAAE,GACjC;EAFO;CAEL;;;;;CAMJ,aAAa,qBAEXC,kBAA2D;EAC5D,MAAM,EAAE,gCAAe,GAAG,MAAM,OAAO;EACvC,MAAM,aACL,MAAM,gBAAc,qBAAqB,iBAAiB;AAE3D,SAAO,IAAI,aAAuB;CAClC;CAED,MAAM,QAAQC,UAAqC;AAClD,MAAI,SAAS,WAAW,EAAG;AAE3B,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;AAIhC,QAAM,QAAQ,IAAI,SAAS,IAAI,CAAC,YAAY,KAAK,eAAe,QAAQ,CAAC,CAAC;CAC1E;CAED,MAAc,eAAeC,SAAkC;EAC9D,MAAM,UAAU,IAAI,eAAe;GAClC,UAAU,KAAK,WAAW;GAC1B,SAAS,KAAK,UAAU;IACvB,MAAM,QAAQ;IACd,SAAS,QAAQ;GACjB,EAAC;GACF,mBAAmB,EAClB,MAAM;IACL,UAAU;IACV,aAAa,QAAQ;GACrB,EACD;EACD;AAED,QAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;CAC7C;CAED,MAAM,QAAuB,CAG5B;AACD;;;;;;;;;;;;;;;;;;;;;ACvBD,IAAa,gBAAb,MAAa,cAEb;CACC,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YACSC,YACRC,UAAgC,CAAE,GACjC;EAFO;AAGR,OAAK,UAAU;GACd,WACC,QAAQ,cACP,UAAU,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,UAAU,EAAE,CAAC;GAClE,aAAa,QAAQ,eAAe;GACpC,oBAAoB,QAAQ,uBAAuB,QAAQ;GAC3D,iBAAiB,QAAQ,mBAAmB;GAC5C,aAAa,QAAQ,eAAe;EACpC;AAGD,OAAK,YAAY,IAAI,UAAU;GAC9B,QAAS,KAAK,WAAmB,OAAO;GACxC,UAAW,KAAK,WAAmB,OAAO;GAC1C,aAAc,KAAK,WAAmB,OAAO;EAC7C;CACD;;;;;CAMD,aAAa,qBAEXC,kBAA4D;EAC7D,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,EAAE,gCAAe,GAAG,MAAM,OAAO;EACvC,MAAM,aACL,MAAM,gBAAc,qBAAqB,iBAAiB;EAE3D,MAAMD,UAAgC;GACrC,WAAW,OAAO,IAAI,YAAY;GAClC,aAAa,OAAO,IAAI,cAAc,KAAK;GAC3C,oBAAoB,OAAO,IAAI,qBAAqB,KAAK;GACzD,iBAAiB,OAAO,IAAI,kBAAkB,GAC3C,OAAO,SAAS,OAAO,IAAI,kBAAkB,EAAG,GAAG;EAEtD;AAED,SAAO,IAAI,cAAwB,YAAY;CAC/C;CAED,MAAM,UACLE,UACAC,UACgB;AAEhB,QAAM,KAAK,YAAY;AACvB,QAAM,KAAK,kBAAkB;EAG7B,MAAM,gBAAgB,IAAI,cAAc;GACvC,UAAU,KAAK;GACf,QAAS,KAAK,WAAmB,OAAO;GACxC,UAAW,KAAK,WAAmB,OAAO;GAC1C,aAAc,KAAK,WAAmB,OAAO;EAC7C;AACD,QAAM,cAAc,SAAS;AAG7B,OAAK,gBAAgB,IAAI,cAAwB,eAAe;GAC/D,iBAAiB,KAAK,QAAQ;GAC9B,aAAa,KAAK,QAAQ;GAC1B,kBAAkB,KAAK,WAAW;EAClC;AAED,QAAM,KAAK,cAAc,UAAU,UAAU,SAAS;CACtD;;;;CAKD,MAAM,OAAsB;AAE3B,MAAI,KAAK,cACR,MAAK,cAAc,MAAM;AAI1B,MAAI,KAAK,gBACR,KAAI;GACH,MAAM,UAAU,IAAI,mBAAmB,EACtC,iBAAiB,KAAK,gBACtB;AACD,SAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;EAC7C,SAAQ,QAAQ,CAAE;AAIpB,MAAI,KAAK,YAAY,KAAK,QAAQ,mBACjC,KAAI;GACH,MAAM,UAAU,IAAI,mBAAmB,EACtC,UAAU,KAAK,SACf;AACD,SAAM,KAAK,UAAU,KAAK,QAAQ;EAClC,SAAQ,QAAQ,CAAE;AAGpB,OAAK,UAAU,SAAS;CACxB;CAED,MAAc,aAA4B;AACzC,MAAI,KAAK,QAAQ,aAAa;GAE7B,MAAM,gBAAgB,IAAI,mBAAmB,EAC5C,WAAW,KAAK,QAAQ,UACxB;GACD,MAAM,WAAW,MAAM,KAAK,UAAU,KAAK,cAAc;AACzD,QAAK,WAAW,SAAS;EACzB,MACA,OAAM,IAAI,MAAM;EAIjB,MAAM,eAAe,IAAI,0BAA0B;GAClD,UAAU,KAAK;GACf,gBAAgB,CAAC,UAAW;EAC5B;EACD,MAAM,gBAAgB,MAAM,KAAK,UAAU,KAAK,aAAa;AAC7D,OAAK,WAAW,cAAc,YAAY;AAG1C,QAAM,KAAK,gBAAgB;CAC3B;CAED,MAAc,iBAAgC;EAC7C,MAAM,SAAS;GACd,SAAS;GACT,WAAW,CACV;IACC,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,UAAU,KAAK;IACf,WAAW,EACV,WAAW,EACV,iBAAiB,KAAK,WAAW,SACjC,EACD;GACD,CACD;EACD;EAED,MAAM,UAAU,IAAI,0BAA0B;GAC7C,UAAU,KAAK;GACf,YAAY,EACX,QAAQ,KAAK,UAAU,OAAO,CAC9B;EACD;AAED,QAAM,KAAK,UAAU,KAAK,QAAQ;CAClC;CAED,MAAc,mBAAkC;EAC/C,MAAM,UAAU,IAAI,iBAAiB;GACpC,UAAU,KAAK,WAAW;GAC1B,UAAU;GACV,UAAU,KAAK;EACf;EAED,MAAM,WAAW,MAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;AAC9D,OAAK,kBAAkB,SAAS;CAChC;AACD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const require_snsUrl = require('../snsUrl-f2gU3CzK.cjs');
|
|
2
|
+
|
|
3
|
+
exports.MalformedTopicUrl = require_snsUrl.MalformedTopicUrl;
|
|
4
|
+
exports.MissingTopicArn = require_snsUrl.MissingTopicArn;
|
|
5
|
+
exports.UnexpectedTopicScheme = require_snsUrl.UnexpectedTopicScheme;
|
|
6
|
+
exports.build = require_snsUrl.build;
|
|
7
|
+
exports.parse = require_snsUrl.parse;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { __export } from "./chunk-CWFgIw0j.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/sns/snsUrl.d.ts
|
|
4
|
+
declare namespace snsUrl_d_exports {
|
|
5
|
+
export { MalformedTopicUrl, MissingTopicArn, SnsAddress, UnexpectedTopicScheme, build, parse };
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The `sns://` connection-string codec — how a topic is addressed as one string.
|
|
9
|
+
*
|
|
10
|
+
* The twin of `sqsUrl`, and separate from it for the same reason `gs://` would
|
|
11
|
+
* be separate from `s3://`: a topic ARN and a queue URL are different
|
|
12
|
+
* vocabularies, and a shared codec would have to contain both. What they share
|
|
13
|
+
* is only the rule that a construct provides one string.
|
|
14
|
+
*
|
|
15
|
+
* Both directions live here so they cannot drift: `parse(build(x))` is `x`.
|
|
16
|
+
*/
|
|
17
|
+
/** What an SNS connection string addresses. */
|
|
18
|
+
interface SnsAddress {
|
|
19
|
+
topicArn: string;
|
|
20
|
+
/** Read off the topic, never inherited: a topic may live in another region. */
|
|
21
|
+
region?: string;
|
|
22
|
+
/** Set for SNS-compatible backends such as LocalStack. */
|
|
23
|
+
endpoint?: string;
|
|
24
|
+
/**
|
|
25
|
+
* The queue a subscriber drains.
|
|
26
|
+
*
|
|
27
|
+
* Present only on the subscriber's string: fan-out delivers to a queue per
|
|
28
|
+
* subscriber, so the publisher's string names the topic and nothing else.
|
|
29
|
+
*/
|
|
30
|
+
queueName?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Compose an address into a connection string.
|
|
34
|
+
*
|
|
35
|
+
* Credentials never appear, for the same reason they never appear in an
|
|
36
|
+
* `s3://` URL: the SDK resolves them from its own chain.
|
|
37
|
+
*/
|
|
38
|
+
declare function build(address: SnsAddress): string;
|
|
39
|
+
/** Parse a connection string back into an address. */
|
|
40
|
+
declare function parse(connectionString: string): SnsAddress;
|
|
41
|
+
/** The string is not a URL at all. */
|
|
42
|
+
declare class MalformedTopicUrl extends Error {
|
|
43
|
+
readonly url: string;
|
|
44
|
+
constructor(url: string);
|
|
45
|
+
}
|
|
46
|
+
/** The string is a URL, but not an `sns://` one. */
|
|
47
|
+
declare class UnexpectedTopicScheme extends Error {
|
|
48
|
+
readonly url: string;
|
|
49
|
+
readonly expected: string;
|
|
50
|
+
readonly actual: string;
|
|
51
|
+
constructor(url: string, expected: string, actual: string);
|
|
52
|
+
}
|
|
53
|
+
/** An `sns://` string with no topic names nothing. */
|
|
54
|
+
declare class MissingTopicArn extends Error {
|
|
55
|
+
readonly url: string;
|
|
56
|
+
constructor(url: string);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=snsUrl.d.ts.map
|
|
59
|
+
//#endregion
|
|
60
|
+
export { MalformedTopicUrl, MissingTopicArn, SnsAddress, UnexpectedTopicScheme, build, parse, snsUrl_d_exports };
|
|
61
|
+
//# sourceMappingURL=snsUrl-ASdc0D1v.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snsUrl-ASdc0D1v.d.cts","names":[],"sources":["../src/sns/snsUrl.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;UAYiB,UAAA;EAAA,QAAA,EAAA,MAAU;EAuBX;EAcA,MAAA,CAAA,EAAK,MAAA;EA4BR;EAQA,QAAA,CAAA,EAAA,MAAA;EAcA;;;;;;;;;;;;;;iBAhEG,KAAA,UAAe;;iBAcf,KAAA,4BAAiC;;cA4BpC,iBAAA,SAA0B,KAAK;;;;;cAQ/B,qBAAA,SAA8B,KAAK;;;;;;;cAcnC,eAAA,SAAwB,KAAK"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { __export } from "./chunk-B9dir_RE.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/sns/snsUrl.ts
|
|
4
|
+
var snsUrl_exports = {};
|
|
5
|
+
__export(snsUrl_exports, {
|
|
6
|
+
MalformedTopicUrl: () => MalformedTopicUrl,
|
|
7
|
+
MissingTopicArn: () => MissingTopicArn,
|
|
8
|
+
UnexpectedTopicScheme: () => UnexpectedTopicScheme,
|
|
9
|
+
build: () => build,
|
|
10
|
+
parse: () => parse
|
|
11
|
+
});
|
|
12
|
+
const SCHEME = "sns:";
|
|
13
|
+
/**
|
|
14
|
+
* Compose an address into a connection string.
|
|
15
|
+
*
|
|
16
|
+
* Credentials never appear, for the same reason they never appear in an
|
|
17
|
+
* `s3://` URL: the SDK resolves them from its own chain.
|
|
18
|
+
*/
|
|
19
|
+
function build(address) {
|
|
20
|
+
const { topicArn, region, endpoint, queueName } = address;
|
|
21
|
+
if (!topicArn) throw new MissingTopicArn("");
|
|
22
|
+
const url = new URL(`${SCHEME}//`);
|
|
23
|
+
url.searchParams.set("topicArn", topicArn);
|
|
24
|
+
if (region) url.searchParams.set("region", region);
|
|
25
|
+
if (endpoint) url.searchParams.set("endpoint", endpoint);
|
|
26
|
+
if (queueName) url.searchParams.set("queueName", queueName);
|
|
27
|
+
return url.toString();
|
|
28
|
+
}
|
|
29
|
+
/** Parse a connection string back into an address. */
|
|
30
|
+
function parse(connectionString) {
|
|
31
|
+
let parsed;
|
|
32
|
+
try {
|
|
33
|
+
parsed = new URL(connectionString);
|
|
34
|
+
} catch {
|
|
35
|
+
throw new MalformedTopicUrl(connectionString);
|
|
36
|
+
}
|
|
37
|
+
if (parsed.protocol !== SCHEME) throw new UnexpectedTopicScheme(connectionString, SCHEME, parsed.protocol);
|
|
38
|
+
const topicArn = parsed.searchParams.get("topicArn");
|
|
39
|
+
if (!topicArn) throw new MissingTopicArn(connectionString);
|
|
40
|
+
const region = parsed.searchParams.get("region") ?? void 0;
|
|
41
|
+
const endpoint = parsed.searchParams.get("endpoint") ?? void 0;
|
|
42
|
+
const queueName = parsed.searchParams.get("queueName") ?? void 0;
|
|
43
|
+
return {
|
|
44
|
+
topicArn,
|
|
45
|
+
...region ? { region } : {},
|
|
46
|
+
...endpoint ? { endpoint } : {},
|
|
47
|
+
...queueName ? { queueName } : {}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** The string is not a URL at all. */
|
|
51
|
+
var MalformedTopicUrl = class extends Error {
|
|
52
|
+
constructor(url) {
|
|
53
|
+
super(`'${url}' is not a valid connection string.`);
|
|
54
|
+
this.url = url;
|
|
55
|
+
this.name = "MalformedTopicUrl";
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
/** The string is a URL, but not an `sns://` one. */
|
|
59
|
+
var UnexpectedTopicScheme = class extends Error {
|
|
60
|
+
constructor(url, expected, actual) {
|
|
61
|
+
super(`Expected a '${expected}//' connection string and got '${actual}//' in '${url}'.`);
|
|
62
|
+
this.url = url;
|
|
63
|
+
this.expected = expected;
|
|
64
|
+
this.actual = actual;
|
|
65
|
+
this.name = "UnexpectedTopicScheme";
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
/** An `sns://` string with no topic names nothing. */
|
|
69
|
+
var MissingTopicArn = class extends Error {
|
|
70
|
+
constructor(url) {
|
|
71
|
+
super(url ? `'${url}' names no topic: an sns:// connection string needs ?topicArn=.` : "An sns:// connection string needs a topicArn.");
|
|
72
|
+
this.url = url;
|
|
73
|
+
this.name = "MissingTopicArn";
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { MalformedTopicUrl, MissingTopicArn, UnexpectedTopicScheme, build, parse, snsUrl_exports };
|
|
79
|
+
//# sourceMappingURL=snsUrl-CifYhPAa.mjs.map
|