@geekmidas/events 0.0.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/{BasicConnection-C4_Y0nIj.d.mts → BasicConnection-BTRsXiuH.d.cts} +3 -2
  2. package/dist/BasicConnection-BTRsXiuH.d.cts.map +1 -0
  3. package/dist/BasicConnection-C-Cg2FJT.cjs.map +1 -1
  4. package/dist/BasicConnection-CpwybcC9.mjs.map +1 -1
  5. package/dist/{BasicConnection-CddnULuT.d.cts → BasicConnection-DIxtA7jK.d.mts} +3 -2
  6. package/dist/BasicConnection-DIxtA7jK.d.mts.map +1 -0
  7. package/dist/BasicPublisher-CXAVKxgq.cjs.map +1 -1
  8. package/dist/{BasicPublisher-DCBxaTwC.d.mts → BasicPublisher-CpJFK2oS.d.mts} +5 -3
  9. package/dist/BasicPublisher-CpJFK2oS.d.mts.map +1 -0
  10. package/dist/{BasicPublisher-V5hELHG9.d.cts → BasicPublisher-D1q0a2xp.d.cts} +5 -3
  11. package/dist/BasicPublisher-D1q0a2xp.d.cts.map +1 -0
  12. package/dist/BasicPublisher-DogbeHAH.mjs.map +1 -1
  13. package/dist/{BasicSubscriber-BB3aKeph.d.mts → BasicSubscriber-6w0Af4DD.d.mts} +5 -3
  14. package/dist/BasicSubscriber-6w0Af4DD.d.mts.map +1 -0
  15. package/dist/{BasicSubscriber-CCKfbRMo.mjs → BasicSubscriber-BJSZN22M.mjs} +2 -4
  16. package/dist/BasicSubscriber-BJSZN22M.mjs.map +1 -0
  17. package/dist/{BasicSubscriber-DOwgFw5j.d.cts → BasicSubscriber-DXxQewjc.d.cts} +5 -3
  18. package/dist/BasicSubscriber-DXxQewjc.d.cts.map +1 -0
  19. package/dist/{BasicSubscriber-BGqv3c8x.cjs → BasicSubscriber-mVJRMXhZ.cjs} +2 -4
  20. package/dist/BasicSubscriber-mVJRMXhZ.cjs.map +1 -0
  21. package/dist/{EventConnection-DZhn1Msl.d.cts → EventConnection-BaJRXdg7.d.cts} +2 -2
  22. package/dist/EventConnection-BaJRXdg7.d.cts.map +1 -0
  23. package/dist/EventConnection-ClLMoIUU.mjs.map +1 -1
  24. package/dist/EventConnection-F_N81SXu.cjs.map +1 -1
  25. package/dist/{EventConnection-DeXfLGom.d.mts → EventConnection-SOhtmxib.d.mts} +2 -2
  26. package/dist/EventConnection-SOhtmxib.d.mts.map +1 -0
  27. package/dist/EventConnection.d.cts +2 -2
  28. package/dist/EventConnection.d.mts +2 -2
  29. package/dist/{Publisher-C3m8JFXm.d.mts → Publisher-1CfcYRnm.d.mts} +4 -2
  30. package/dist/Publisher-1CfcYRnm.d.mts.map +1 -0
  31. package/dist/{Publisher-nXNVjL0e.d.cts → Publisher-BfNgvHwQ.d.cts} +4 -2
  32. package/dist/Publisher-BfNgvHwQ.d.cts.map +1 -0
  33. package/dist/Publisher-DS0aOh8r.mjs.map +1 -1
  34. package/dist/Publisher-ceu6OxCj.cjs.map +1 -1
  35. package/dist/Publisher.d.cts +2 -2
  36. package/dist/Publisher.d.mts +2 -2
  37. package/dist/{RabbitMQConnection-ungB0Zl6.cjs → RabbitMQConnection-Blj9Lo05.cjs} +2 -2
  38. package/dist/RabbitMQConnection-Blj9Lo05.cjs.map +1 -0
  39. package/dist/{RabbitMQConnection-7cWp_-_Q.d.cts → RabbitMQConnection-Bm8VCI2R.d.cts} +3 -2
  40. package/dist/RabbitMQConnection-Bm8VCI2R.d.cts.map +1 -0
  41. package/dist/{RabbitMQConnection-C2HC7J7K.d.mts → RabbitMQConnection-Ck-ktCp_.d.mts} +3 -2
  42. package/dist/RabbitMQConnection-Ck-ktCp_.d.mts.map +1 -0
  43. package/dist/{RabbitMQConnection-kU3MvN5P.mjs → RabbitMQConnection-Co7f5Xsx.mjs} +2 -2
  44. package/dist/RabbitMQConnection-Co7f5Xsx.mjs.map +1 -0
  45. package/dist/RabbitMQPublisher--DL6GM6g.cjs.map +1 -1
  46. package/dist/{RabbitMQPublisher-CpcbgrXj.d.cts → RabbitMQPublisher-COnxcWEZ.d.mts} +5 -3
  47. package/dist/RabbitMQPublisher-COnxcWEZ.d.mts.map +1 -0
  48. package/dist/RabbitMQPublisher-o_oVI3wr.mjs.map +1 -1
  49. package/dist/{RabbitMQPublisher-DDZi15Ro.d.mts → RabbitMQPublisher-qQT7-1-p.d.cts} +5 -3
  50. package/dist/RabbitMQPublisher-qQT7-1-p.d.cts.map +1 -0
  51. package/dist/{RabbitMQSubscriber-BplEJEk8.cjs → RabbitMQSubscriber-C8MYAihn.cjs} +2 -3
  52. package/dist/RabbitMQSubscriber-C8MYAihn.cjs.map +1 -0
  53. package/dist/{RabbitMQSubscriber-BJ9PTGny.d.cts → RabbitMQSubscriber-C_sZjDPU.d.mts} +5 -3
  54. package/dist/RabbitMQSubscriber-C_sZjDPU.d.mts.map +1 -0
  55. package/dist/{RabbitMQSubscriber-CIvIw8MG.d.mts → RabbitMQSubscriber-D12sssMb.d.cts} +5 -3
  56. package/dist/RabbitMQSubscriber-D12sssMb.d.cts.map +1 -0
  57. package/dist/{RabbitMQSubscriber-BaXqs5nO.mjs → RabbitMQSubscriber-DlGL0pC2.mjs} +2 -3
  58. package/dist/RabbitMQSubscriber-DlGL0pC2.mjs.map +1 -0
  59. package/dist/{SNSConnection-CAImaMM2.d.mts → SNSConnection-BDfQrVBO.d.cts} +3 -2
  60. package/dist/SNSConnection-BDfQrVBO.d.cts.map +1 -0
  61. package/dist/SNSConnection-D7wCf9Si.mjs.map +1 -1
  62. package/dist/SNSConnection-DVsC_pbB.cjs.map +1 -1
  63. package/dist/{SNSConnection-Cqbr7-Ho.d.cts → SNSConnection-mHb10nQ6.d.mts} +3 -2
  64. package/dist/SNSConnection-mHb10nQ6.d.mts.map +1 -0
  65. package/dist/{SNSPublisher-BZ6N3JI9.cjs → SNSPublisher-BoA8uLnw.cjs} +2 -3
  66. package/dist/SNSPublisher-BoA8uLnw.cjs.map +1 -0
  67. package/dist/{SNSPublisher-Dkhb4LU-.d.mts → SNSPublisher-CM7UAWtf.d.mts} +7 -6
  68. package/dist/SNSPublisher-CM7UAWtf.d.mts.map +1 -0
  69. package/dist/{SNSPublisher-BfWjzNiB.mjs → SNSPublisher-Drr4kHn6.mjs} +2 -3
  70. package/dist/SNSPublisher-Drr4kHn6.mjs.map +1 -0
  71. package/dist/{SNSPublisher-RVZFa7kL.d.cts → SNSPublisher-kpsSlGDn.d.cts} +7 -6
  72. package/dist/SNSPublisher-kpsSlGDn.d.cts.map +1 -0
  73. package/dist/{SNSSubscriber-C9YJWa7m.mjs → SNSSubscriber-CBIvQpqK.mjs} +4 -8
  74. package/dist/SNSSubscriber-CBIvQpqK.mjs.map +1 -0
  75. package/dist/{SNSSubscriber-UE0ia4XM.cjs → SNSSubscriber-CWiAJjpU.cjs} +4 -8
  76. package/dist/SNSSubscriber-CWiAJjpU.cjs.map +1 -0
  77. package/dist/{SNSSubscriber-B31JmkAE.d.mts → SNSSubscriber-DDB3--pm.d.cts} +4 -3
  78. package/dist/SNSSubscriber-DDB3--pm.d.cts.map +1 -0
  79. package/dist/{SNSSubscriber-k2UwKUxu.d.cts → SNSSubscriber-Dwo8391f.d.mts} +4 -3
  80. package/dist/SNSSubscriber-Dwo8391f.d.mts.map +1 -0
  81. package/dist/{SQSConnection-C5WFqZW7.d.mts → SQSConnection-B5Ep9Tma.d.cts} +3 -2
  82. package/dist/SQSConnection-B5Ep9Tma.d.cts.map +1 -0
  83. package/dist/{SQSConnection-geav2Rsn.d.cts → SQSConnection-BI_xOzyJ.d.mts} +3 -2
  84. package/dist/SQSConnection-BI_xOzyJ.d.mts.map +1 -0
  85. package/dist/SQSConnection-BwNjUPr4.cjs.map +1 -1
  86. package/dist/SQSConnection-Eleqqre3.mjs.map +1 -1
  87. package/dist/{SQSPublisher-CdsayOLV.d.mts → SQSPublisher-BN1ds6SN.d.mts} +5 -3
  88. package/dist/SQSPublisher-BN1ds6SN.d.mts.map +1 -0
  89. package/dist/{SQSPublisher-Utb_FTe5.d.cts → SQSPublisher-DFTqwzRW.d.cts} +5 -3
  90. package/dist/SQSPublisher-DFTqwzRW.d.cts.map +1 -0
  91. package/dist/SQSPublisher-DG9o4ME3.mjs.map +1 -1
  92. package/dist/SQSPublisher-Dq5353oZ.cjs.map +1 -1
  93. package/dist/{SQSSubscriber-DZDNgLE5.cjs → SQSSubscriber-B4sRXVl6.cjs} +5 -12
  94. package/dist/SQSSubscriber-B4sRXVl6.cjs.map +1 -0
  95. package/dist/{SQSSubscriber-B6iL1EnX.d.cts → SQSSubscriber-BO2me_gs.d.cts} +4 -3
  96. package/dist/SQSSubscriber-BO2me_gs.d.cts.map +1 -0
  97. package/dist/{SQSSubscriber-CD66P7hH.mjs → SQSSubscriber-CVGhZ8Nr.mjs} +5 -12
  98. package/dist/SQSSubscriber-CVGhZ8Nr.mjs.map +1 -0
  99. package/dist/{SQSSubscriber-DBeE4XAR.d.mts → SQSSubscriber-FyZFfr2-.d.mts} +4 -3
  100. package/dist/SQSSubscriber-FyZFfr2-.d.mts.map +1 -0
  101. package/dist/Subscriber-Bd9hb_jp.mjs.map +1 -1
  102. package/dist/{Subscriber-Cff9EIpv.d.mts → Subscriber-BxT-KzFJ.d.mts} +4 -2
  103. package/dist/Subscriber-BxT-KzFJ.d.mts.map +1 -0
  104. package/dist/{Subscriber-CpAwcUzb.d.cts → Subscriber-DDD_4Nlx.d.cts} +4 -2
  105. package/dist/Subscriber-DDD_4Nlx.d.cts.map +1 -0
  106. package/dist/Subscriber-saVOWuMq.cjs.map +1 -1
  107. package/dist/Subscriber.d.cts +2 -2
  108. package/dist/Subscriber.d.mts +2 -2
  109. package/dist/basic/BasicConnection.d.cts +2 -2
  110. package/dist/basic/BasicConnection.d.mts +2 -2
  111. package/dist/basic/BasicPublisher.d.cts +3 -3
  112. package/dist/basic/BasicPublisher.d.mts +3 -3
  113. package/dist/basic/BasicSubscriber.cjs +1 -1
  114. package/dist/basic/BasicSubscriber.d.cts +3 -3
  115. package/dist/basic/BasicSubscriber.d.mts +3 -3
  116. package/dist/basic/BasicSubscriber.mjs +1 -1
  117. package/dist/basic/index.cjs +1 -1
  118. package/dist/basic/index.d.cts +4 -4
  119. package/dist/basic/index.d.mts +4 -4
  120. package/dist/basic/index.mjs +1 -1
  121. package/dist/index.d.cts +4 -4
  122. package/dist/index.d.mts +4 -4
  123. package/dist/rabbitmq/RabbitMQConnection.cjs +1 -1
  124. package/dist/rabbitmq/RabbitMQConnection.d.cts +2 -2
  125. package/dist/rabbitmq/RabbitMQConnection.d.mts +2 -2
  126. package/dist/rabbitmq/RabbitMQConnection.mjs +1 -1
  127. package/dist/rabbitmq/RabbitMQPublisher.d.cts +3 -3
  128. package/dist/rabbitmq/RabbitMQPublisher.d.mts +3 -3
  129. package/dist/rabbitmq/RabbitMQSubscriber.cjs +1 -1
  130. package/dist/rabbitmq/RabbitMQSubscriber.d.cts +3 -3
  131. package/dist/rabbitmq/RabbitMQSubscriber.d.mts +3 -3
  132. package/dist/rabbitmq/RabbitMQSubscriber.mjs +1 -1
  133. package/dist/rabbitmq/index.cjs +2 -2
  134. package/dist/rabbitmq/index.d.cts +4 -4
  135. package/dist/rabbitmq/index.d.mts +4 -4
  136. package/dist/rabbitmq/index.mjs +2 -2
  137. package/dist/sns/SNSConnection.d.cts +2 -2
  138. package/dist/sns/SNSConnection.d.mts +2 -2
  139. package/dist/sns/SNSPublisher.cjs +1 -1
  140. package/dist/sns/SNSPublisher.d.cts +3 -3
  141. package/dist/sns/SNSPublisher.d.mts +3 -3
  142. package/dist/sns/SNSPublisher.mjs +1 -1
  143. package/dist/sns/SNSSubscriber.cjs +2 -2
  144. package/dist/sns/SNSSubscriber.d.cts +3 -3
  145. package/dist/sns/SNSSubscriber.d.mts +3 -3
  146. package/dist/sns/SNSSubscriber.mjs +2 -2
  147. package/dist/sns/index.cjs +3 -3
  148. package/dist/sns/index.d.cts +4 -4
  149. package/dist/sns/index.d.mts +4 -4
  150. package/dist/sns/index.mjs +3 -3
  151. package/dist/sqs/SQSConnection.d.cts +2 -2
  152. package/dist/sqs/SQSConnection.d.mts +2 -2
  153. package/dist/sqs/SQSPublisher.d.cts +3 -3
  154. package/dist/sqs/SQSPublisher.d.mts +3 -3
  155. package/dist/sqs/SQSSubscriber.cjs +1 -1
  156. package/dist/sqs/SQSSubscriber.d.cts +3 -3
  157. package/dist/sqs/SQSSubscriber.d.mts +3 -3
  158. package/dist/sqs/SQSSubscriber.mjs +1 -1
  159. package/dist/sqs/index.cjs +1 -1
  160. package/dist/sqs/index.d.cts +4 -4
  161. package/dist/sqs/index.d.mts +4 -4
  162. package/dist/sqs/index.mjs +1 -1
  163. package/dist/types-B63qHVOG.mjs.map +1 -1
  164. package/dist/types-CvSMEO5z.cjs.map +1 -1
  165. package/dist/{types-D0g-o6wX.d.mts → types-DSVsPgKd.d.mts} +2 -1
  166. package/dist/types-DSVsPgKd.d.mts.map +1 -0
  167. package/dist/{types-DEGUg5BA.d.cts → types-Dmbp1U-6.d.cts} +2 -1
  168. package/dist/types-Dmbp1U-6.d.cts.map +1 -0
  169. package/dist/types.d.cts +1 -1
  170. package/dist/types.d.mts +1 -1
  171. package/package.json +24 -5
  172. package/src/EventConnection.ts +31 -31
  173. package/src/Publisher.ts +78 -78
  174. package/src/Subscriber.ts +91 -91
  175. package/src/__tests__/EventConnection.spec.ts +42 -0
  176. package/src/__tests__/Publisher.spec.ts +96 -0
  177. package/src/__tests__/Subscriber.spec.ts +91 -23
  178. package/src/basic/BasicConnection.ts +35 -35
  179. package/src/basic/BasicPublisher.ts +8 -8
  180. package/src/basic/BasicSubscriber.ts +13 -16
  181. package/src/basic/__tests__/BasicSubscriber.spec.ts +116 -116
  182. package/src/index.ts +13 -13
  183. package/src/rabbitmq/RabbitMQConnection.ts +139 -139
  184. package/src/rabbitmq/RabbitMQPublisher.ts +48 -48
  185. package/src/rabbitmq/RabbitMQSubscriber.ts +100 -102
  186. package/src/rabbitmq/__tests__/RabbitMQPublisher.spec.ts +364 -364
  187. package/src/rabbitmq/__tests__/RabbitMQSubscriber.spec.ts +204 -204
  188. package/src/rabbitmq/index.ts +3 -3
  189. package/src/sns/SNSConnection.ts +76 -76
  190. package/src/sns/SNSPublisher.ts +54 -56
  191. package/src/sns/SNSSubscriber.ts +187 -191
  192. package/src/sns/__tests__/SNS-SQS-Integration.spec.ts +321 -321
  193. package/src/sns/__tests__/SNSPublisher.spec.ts +449 -0
  194. package/src/sns/__tests__/SNSSubscriber.spec.ts +527 -0
  195. package/src/sns/index.ts +3 -3
  196. package/src/sqs/SQSConnection.ts +75 -75
  197. package/src/sqs/SQSPublisher.ts +93 -93
  198. package/src/sqs/SQSSubscriber.ts +157 -165
  199. package/src/sqs/__tests__/SQSPublisher.spec.ts +178 -178
  200. package/src/sqs/index.ts +3 -3
  201. package/src/types.ts +28 -29
  202. package/tsconfig.json +9 -0
  203. package/tsdown.config.ts +1 -1
  204. package/dist/BasicSubscriber-BGqv3c8x.cjs.map +0 -1
  205. package/dist/BasicSubscriber-CCKfbRMo.mjs.map +0 -1
  206. package/dist/RabbitMQConnection-kU3MvN5P.mjs.map +0 -1
  207. package/dist/RabbitMQConnection-ungB0Zl6.cjs.map +0 -1
  208. package/dist/RabbitMQSubscriber-BaXqs5nO.mjs.map +0 -1
  209. package/dist/RabbitMQSubscriber-BplEJEk8.cjs.map +0 -1
  210. package/dist/SNSPublisher-BZ6N3JI9.cjs.map +0 -1
  211. package/dist/SNSPublisher-BfWjzNiB.mjs.map +0 -1
  212. package/dist/SNSSubscriber-C9YJWa7m.mjs.map +0 -1
  213. package/dist/SNSSubscriber-UE0ia4XM.cjs.map +0 -1
  214. package/dist/SQSSubscriber-CD66P7hH.mjs.map +0 -1
  215. package/dist/SQSSubscriber-DZDNgLE5.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SQSConnection-Eleqqre3.mjs","names":["config: SQSConnectionConfig","clientConfig: SQSClientConfig","connectionString: string"],"sources":["../src/sqs/SQSConnection.ts"],"sourcesContent":["import { SQSClient, type SQSClientConfig } from '@aws-sdk/client-sqs';\nimport type { EventConnection } from '../types';\nimport { EventPublisherType } from '../types';\n\nexport interface SQSConnectionConfig {\n queueUrl: string;\n region?: string;\n endpoint?: string; // Custom endpoint (e.g., for LocalStack)\n credentials?: {\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n };\n}\n\nexport class SQSConnection implements EventConnection {\n readonly type = EventPublisherType.SQS;\n private client: SQSClient;\n private connected = false;\n\n constructor(readonly config: SQSConnectionConfig) {\n this.config = config;\n\n const clientConfig: SQSClientConfig = {\n region: config.region,\n endpoint: config.endpoint,\n credentials: config.credentials,\n };\n\n this.client = new SQSClient(clientConfig);\n }\n\n /**\n * Create an SQSConnection from a connection string\n * Format: sqs://?queueUrl=https://sqs.region.amazonaws.com/accountId/queueName&region=us-east-1&endpoint=http://localhost:4566\n */\n static async fromConnectionString(\n connectionString: string,\n ): Promise<SQSConnection> {\n const url = new URL(connectionString);\n const params = url.searchParams;\n\n const queueUrl = params.get('queueUrl');\n if (!queueUrl) {\n throw new Error('queueUrl parameter is required in connection string');\n }\n\n const config: SQSConnectionConfig = {\n queueUrl,\n region: params.get('region') || undefined,\n endpoint: params.get('endpoint') || undefined,\n };\n\n // Parse credentials if provided\n const accessKeyId = params.get('accessKeyId');\n const secretAccessKey = params.get('secretAccessKey');\n if (accessKeyId && secretAccessKey) {\n config.credentials = {\n accessKeyId,\n secretAccessKey,\n sessionToken: params.get('sessionToken') || undefined,\n };\n }\n\n const connection = new SQSConnection(config);\n await connection.connect();\n return connection;\n }\n\n async connect(): Promise<void> {\n // SQS doesn't have a traditional connection, but we mark as connected\n this.connected = true;\n }\n\n async close(): Promise<void> {\n this.client.destroy();\n this.connected = false;\n }\n\n isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Get the underlying SQS client\n */\n get sqsClient(): SQSClient {\n return this.client;\n }\n\n /**\n * Get the queue URL for this connection\n */\n get queueUrl(): string {\n return this.config.queueUrl;\n }\n}\n"],"mappings":";;;;AAeA,IAAa,gBAAb,MAAa,cAAyC;CACpD,AAAS,OAAO,mBAAmB;CACnC,AAAQ;CACR,AAAQ,YAAY;CAEpB,YAAqBA,QAA6B;EAA7B;AACnB,OAAK,SAAS;EAEd,MAAMC,eAAgC;GACpC,QAAQ,OAAO;GACf,UAAU,OAAO;GACjB,aAAa,OAAO;EACrB;AAED,OAAK,SAAS,IAAI,UAAU;CAC7B;;;;;CAMD,aAAa,qBACXC,kBACwB;EACxB,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,WAAW,OAAO,IAAI,WAAW;AACvC,OAAK,SACH,OAAM,IAAI,MAAM;EAGlB,MAAMF,SAA8B;GAClC;GACA,QAAQ,OAAO,IAAI,SAAS;GAC5B,UAAU,OAAO,IAAI,WAAW;EACjC;EAGD,MAAM,cAAc,OAAO,IAAI,cAAc;EAC7C,MAAM,kBAAkB,OAAO,IAAI,kBAAkB;AACrD,MAAI,eAAe,gBACjB,QAAO,cAAc;GACnB;GACA;GACA,cAAc,OAAO,IAAI,eAAe;EACzC;EAGH,MAAM,aAAa,IAAI,cAAc;AACrC,QAAM,WAAW,SAAS;AAC1B,SAAO;CACR;CAED,MAAM,UAAyB;AAE7B,OAAK,YAAY;CAClB;CAED,MAAM,QAAuB;AAC3B,OAAK,OAAO,SAAS;AACrB,OAAK,YAAY;CAClB;CAED,cAAuB;AACrB,SAAO,KAAK;CACb;;;;CAKD,IAAI,YAAuB;AACzB,SAAO,KAAK;CACb;;;;CAKD,IAAI,WAAmB;AACrB,SAAO,KAAK,OAAO;CACpB;AACF"}
1
+ {"version":3,"file":"SQSConnection-Eleqqre3.mjs","names":["config: SQSConnectionConfig","clientConfig: SQSClientConfig","connectionString: string"],"sources":["../src/sqs/SQSConnection.ts"],"sourcesContent":["import { SQSClient, type SQSClientConfig } from '@aws-sdk/client-sqs';\nimport type { EventConnection } from '../types';\nimport { EventPublisherType } from '../types';\n\nexport interface SQSConnectionConfig {\n\tqueueUrl: string;\n\tregion?: string;\n\tendpoint?: string; // Custom endpoint (e.g., for LocalStack)\n\tcredentials?: {\n\t\taccessKeyId: string;\n\t\tsecretAccessKey: string;\n\t\tsessionToken?: string;\n\t};\n}\n\nexport class SQSConnection implements EventConnection {\n\treadonly type = EventPublisherType.SQS;\n\tprivate client: SQSClient;\n\tprivate connected = false;\n\n\tconstructor(readonly config: SQSConnectionConfig) {\n\t\tthis.config = config;\n\n\t\tconst clientConfig: SQSClientConfig = {\n\t\t\tregion: config.region,\n\t\t\tendpoint: config.endpoint,\n\t\t\tcredentials: config.credentials,\n\t\t};\n\n\t\tthis.client = new SQSClient(clientConfig);\n\t}\n\n\t/**\n\t * Create an SQSConnection from a connection string\n\t * Format: sqs://?queueUrl=https://sqs.region.amazonaws.com/accountId/queueName&region=us-east-1&endpoint=http://localhost:4566\n\t */\n\tstatic async fromConnectionString(\n\t\tconnectionString: string,\n\t): Promise<SQSConnection> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst queueUrl = params.get('queueUrl');\n\t\tif (!queueUrl) {\n\t\t\tthrow new Error('queueUrl parameter is required in connection string');\n\t\t}\n\n\t\tconst config: SQSConnectionConfig = {\n\t\t\tqueueUrl,\n\t\t\tregion: params.get('region') || undefined,\n\t\t\tendpoint: params.get('endpoint') || undefined,\n\t\t};\n\n\t\t// Parse credentials if provided\n\t\tconst accessKeyId = params.get('accessKeyId');\n\t\tconst secretAccessKey = params.get('secretAccessKey');\n\t\tif (accessKeyId && secretAccessKey) {\n\t\t\tconfig.credentials = {\n\t\t\t\taccessKeyId,\n\t\t\t\tsecretAccessKey,\n\t\t\t\tsessionToken: params.get('sessionToken') || undefined,\n\t\t\t};\n\t\t}\n\n\t\tconst connection = new SQSConnection(config);\n\t\tawait connection.connect();\n\t\treturn connection;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\t// SQS doesn't have a traditional connection, but we mark as connected\n\t\tthis.connected = true;\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.client.destroy();\n\t\tthis.connected = false;\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\t/**\n\t * Get the underlying SQS client\n\t */\n\tget sqsClient(): SQSClient {\n\t\treturn this.client;\n\t}\n\n\t/**\n\t * Get the queue URL for this connection\n\t */\n\tget queueUrl(): string {\n\t\treturn this.config.queueUrl;\n\t}\n}\n"],"mappings":";;;;AAeA,IAAa,gBAAb,MAAa,cAAyC;CACrD,AAAS,OAAO,mBAAmB;CACnC,AAAQ;CACR,AAAQ,YAAY;CAEpB,YAAqBA,QAA6B;EAA7B;AACpB,OAAK,SAAS;EAEd,MAAMC,eAAgC;GACrC,QAAQ,OAAO;GACf,UAAU,OAAO;GACjB,aAAa,OAAO;EACpB;AAED,OAAK,SAAS,IAAI,UAAU;CAC5B;;;;;CAMD,aAAa,qBACZC,kBACyB;EACzB,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,WAAW,OAAO,IAAI,WAAW;AACvC,OAAK,SACJ,OAAM,IAAI,MAAM;EAGjB,MAAMF,SAA8B;GACnC;GACA,QAAQ,OAAO,IAAI,SAAS;GAC5B,UAAU,OAAO,IAAI,WAAW;EAChC;EAGD,MAAM,cAAc,OAAO,IAAI,cAAc;EAC7C,MAAM,kBAAkB,OAAO,IAAI,kBAAkB;AACrD,MAAI,eAAe,gBAClB,QAAO,cAAc;GACpB;GACA;GACA,cAAc,OAAO,IAAI,eAAe;EACxC;EAGF,MAAM,aAAa,IAAI,cAAc;AACrC,QAAM,WAAW,SAAS;AAC1B,SAAO;CACP;CAED,MAAM,UAAyB;AAE9B,OAAK,YAAY;CACjB;CAED,MAAM,QAAuB;AAC5B,OAAK,OAAO,SAAS;AACrB,OAAK,YAAY;CACjB;CAED,cAAuB;AACtB,SAAO,KAAK;CACZ;;;;CAKD,IAAI,YAAuB;AAC1B,SAAO,KAAK;CACZ;;;;CAKD,IAAI,WAAmB;AACtB,SAAO,KAAK,OAAO;CACnB;AACD"}
@@ -1,5 +1,5 @@
1
- import { EventPublisher, PublishableMessage } from "./types-D0g-o6wX.mjs";
2
- import { SQSConnection } from "./SQSConnection-C5WFqZW7.mjs";
1
+ import { EventPublisher, PublishableMessage } from "./types-DSVsPgKd.mjs";
2
+ import { SQSConnection } from "./SQSConnection-BI_xOzyJ.mjs";
3
3
 
4
4
  //#region src/sqs/SQSPublisher.d.ts
5
5
  interface SQSPublisherOptions {
@@ -18,6 +18,8 @@ declare class SQSPublisher<TMessage extends PublishableMessage<string, any>> imp
18
18
  private sendBatch;
19
19
  close(): Promise<void>;
20
20
  }
21
+ //# sourceMappingURL=SQSPublisher.d.ts.map
22
+
21
23
  //#endregion
22
24
  export { SQSPublisher, SQSPublisherOptions };
23
- //# sourceMappingURL=SQSPublisher-CdsayOLV.d.mts.map
25
+ //# sourceMappingURL=SQSPublisher-BN1ds6SN.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQSPublisher-BN1ds6SN.d.mts","names":[],"sources":["../src/sqs/SQSPublisher.ts"],"sourcesContent":[],"mappings":";;;;UASiB,mBAAA;;AAAjB;AAIa,cAAA,YAAY,CAAA,iBAAkB,kBAAlB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,YACb,cADa,CACE,QADF,CAAA,CAAA;EAAA,SAAA,UAAA,EAMF,aANE;EAAA,SAAkB,OAAA,EAGxB,QAHwB,CAGf,mBAHe,CAAA;EAAkB,WAClC,CAAA,UAAA,EAKJ,aALI,EAAA,OAAA,CAAA,EAMhB,mBANgB;EAAQ;;;;EAKC,OACzB,oBAAA,CAAA,iBAYQ,kBAZR,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EAamB,OAbnB,CAa2B,YAb3B,CAawC,QAbxC,CAAA,CAAA;EAAwB,OAYhB,CAAA,QAAA,EAkBM,QAlBN,EAAA,CAAA,EAkBmB,OAlBnB,CAAA,IAAA,CAAA;EAAkB,QACc,SAAA;EAAQ,KAArB,CAAA,CAAA,EAmEtB,OAnEsB,CAAA,IAAA,CAAA"}
@@ -1,5 +1,5 @@
1
- import { EventPublisher, PublishableMessage } from "./types-DEGUg5BA.cjs";
2
- import { SQSConnection } from "./SQSConnection-geav2Rsn.cjs";
1
+ import { EventPublisher, PublishableMessage } from "./types-Dmbp1U-6.cjs";
2
+ import { SQSConnection } from "./SQSConnection-B5Ep9Tma.cjs";
3
3
 
4
4
  //#region src/sqs/SQSPublisher.d.ts
5
5
  interface SQSPublisherOptions {
@@ -18,6 +18,8 @@ declare class SQSPublisher<TMessage extends PublishableMessage<string, any>> imp
18
18
  private sendBatch;
19
19
  close(): Promise<void>;
20
20
  }
21
+ //# sourceMappingURL=SQSPublisher.d.ts.map
22
+
21
23
  //#endregion
22
24
  export { SQSPublisher, SQSPublisherOptions };
23
- //# sourceMappingURL=SQSPublisher-Utb_FTe5.d.cts.map
25
+ //# sourceMappingURL=SQSPublisher-DFTqwzRW.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQSPublisher-DFTqwzRW.d.cts","names":[],"sources":["../src/sqs/SQSPublisher.ts"],"sourcesContent":[],"mappings":";;;;UASiB,mBAAA;;AAAjB;AAIa,cAAA,YAAY,CAAA,iBAAkB,kBAAlB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,YACb,cADa,CACE,QADF,CAAA,CAAA;EAAA,SAAA,UAAA,EAMF,aANE;EAAA,SAAkB,OAAA,EAGxB,QAHwB,CAGf,mBAHe,CAAA;EAAkB,WAClC,CAAA,UAAA,EAKJ,aALI,EAAA,OAAA,CAAA,EAMhB,mBANgB;EAAQ;;;;EAKC,OACzB,oBAAA,CAAA,iBAYQ,kBAZR,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EAamB,OAbnB,CAa2B,YAb3B,CAawC,QAbxC,CAAA,CAAA;EAAwB,OAYhB,CAAA,QAAA,EAkBM,QAlBN,EAAA,CAAA,EAkBmB,OAlBnB,CAAA,IAAA,CAAA;EAAkB,QACc,SAAA;EAAQ,KAArB,CAAA,CAAA,EAmEtB,OAnEsB,CAAA,IAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"SQSPublisher-DG9o4ME3.mjs","names":["connection: SQSConnection","options: SQSPublisherOptions","connectionString: string","messages: TMessage[]","entries: SendMessageBatchRequestEntry[]","input: SendMessageBatchCommandInput"],"sources":["../src/sqs/SQSPublisher.ts"],"sourcesContent":["import {\n SendMessageBatchCommand,\n type SendMessageBatchCommandInput,\n type SendMessageBatchRequestEntry,\n} from '@aws-sdk/client-sqs';\nimport chunk from 'lodash.chunk';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { SQSConnection } from './SQSConnection';\n\nexport interface SQSPublisherOptions {\n maxBatchSize?: number; // Default: 10 (SQS limit)\n}\n\nexport class SQSPublisher<TMessage extends PublishableMessage<string, any>>\n implements EventPublisher<TMessage>\n{\n readonly options: Required<SQSPublisherOptions>;\n\n constructor(\n readonly connection: SQSConnection,\n options: SQSPublisherOptions = {},\n ) {\n this.options = {\n maxBatchSize: options.maxBatchSize ?? 10, // SQS limit\n };\n }\n\n /**\n * Create an SQSPublisher from a connection string\n * Format: sqs://?queueUrl=https://sqs.region.amazonaws.com/accountId/queueName&region=us-east-1&endpoint=http://localhost:4566&maxBatchSize=10\n */\n static async fromConnectionString<\n TMessage extends PublishableMessage<string, any>,\n >(connectionString: string): Promise<SQSPublisher<TMessage>> {\n const url = new URL(connectionString);\n const params = url.searchParams;\n\n const { SQSConnection } = await import('./SQSConnection');\n const connection =\n await SQSConnection.fromConnectionString(connectionString);\n\n const options: SQSPublisherOptions = {\n maxBatchSize: params.get('maxBatchSize')\n ? Number.parseInt(params.get('maxBatchSize')!, 10)\n : undefined,\n };\n\n return new SQSPublisher<TMessage>(connection, options);\n }\n\n async publish(messages: TMessage[]): Promise<void> {\n if (messages.length === 0) return;\n\n if (!this.connection.isConnected()) {\n await this.connection.connect();\n }\n\n // Split messages into batches (SQS limit is 10 messages per batch)\n const batches = chunk(messages, this.options.maxBatchSize);\n\n // Send all batches\n await Promise.all(batches.map((batch) => this.sendBatch(batch)));\n }\n\n private async sendBatch(messages: TMessage[]): Promise<void> {\n const entries: SendMessageBatchRequestEntry[] = messages.map(\n (message, index) => ({\n Id: `${index}`,\n MessageBody: JSON.stringify({\n type: message.type,\n payload: message.payload,\n }),\n MessageAttributes: {\n type: {\n DataType: 'String',\n StringValue: message.type,\n },\n },\n }),\n );\n\n const input: SendMessageBatchCommandInput = {\n QueueUrl: this.connection.queueUrl,\n Entries: entries,\n };\n\n const command = new SendMessageBatchCommand(input);\n const response = await this.connection.sqsClient.send(command);\n\n // Check for failures\n if (response.Failed && response.Failed.length > 0) {\n const errors = response.Failed.map(\n (f) => `${f.Id}: ${f.Code} - ${f.Message}`,\n ).join(', ');\n throw new Error(\n `Failed to send ${response.Failed.length} messages: ${errors}`,\n );\n }\n }\n\n async close(): Promise<void> {\n // Publisher doesn't own the connection\n // Connection should be closed by whoever created it\n }\n}\n"],"mappings":";;;;AAaA,IAAa,eAAb,MAAa,aAEb;CACE,AAAS;CAET,YACWA,YACTC,UAA+B,CAAE,GACjC;EAFS;AAGT,OAAK,UAAU,EACb,cAAc,QAAQ,gBAAgB,GACvC;CACF;;;;;CAMD,aAAa,qBAEXC,kBAA2D;EAC3D,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;EACvC,MAAM,aACJ,MAAM,cAAc,qBAAqB,iBAAiB;EAE5D,MAAMD,UAA+B,EACnC,cAAc,OAAO,IAAI,eAAe,GACpC,OAAO,SAAS,OAAO,IAAI,eAAe,EAAG,GAAG,UAErD;AAED,SAAO,IAAI,aAAuB,YAAY;CAC/C;CAED,MAAM,QAAQE,UAAqC;AACjD,MAAI,SAAS,WAAW,EAAG;AAE3B,OAAK,KAAK,WAAW,aAAa,CAChC,OAAM,KAAK,WAAW,SAAS;EAIjC,MAAM,UAAU,MAAM,UAAU,KAAK,QAAQ,aAAa;AAG1D,QAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,UAAU,KAAK,UAAU,MAAM,CAAC,CAAC;CACjE;CAED,MAAc,UAAUA,UAAqC;EAC3D,MAAMC,UAA0C,SAAS,IACvD,CAAC,SAAS,WAAW;GACnB,KAAK,EAAE,MAAM;GACb,aAAa,KAAK,UAAU;IAC1B,MAAM,QAAQ;IACd,SAAS,QAAQ;GAClB,EAAC;GACF,mBAAmB,EACjB,MAAM;IACJ,UAAU;IACV,aAAa,QAAQ;GACtB,EACF;EACF,GACF;EAED,MAAMC,QAAsC;GAC1C,UAAU,KAAK,WAAW;GAC1B,SAAS;EACV;EAED,MAAM,UAAU,IAAI,wBAAwB;EAC5C,MAAM,WAAW,MAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;AAG9D,MAAI,SAAS,UAAU,SAAS,OAAO,SAAS,GAAG;GACjD,MAAM,SAAS,SAAS,OAAO,IAC7B,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,EAAE,QAAQ,EAC1C,CAAC,KAAK,KAAK;AACZ,SAAM,IAAI,OACP,iBAAiB,SAAS,OAAO,OAAO,aAAa,OAAO;EAEhE;CACF;CAED,MAAM,QAAuB,CAG5B;AACF"}
1
+ {"version":3,"file":"SQSPublisher-DG9o4ME3.mjs","names":["connection: SQSConnection","options: SQSPublisherOptions","connectionString: string","messages: TMessage[]","entries: SendMessageBatchRequestEntry[]","input: SendMessageBatchCommandInput"],"sources":["../src/sqs/SQSPublisher.ts"],"sourcesContent":["import {\n\tSendMessageBatchCommand,\n\ttype SendMessageBatchCommandInput,\n\ttype SendMessageBatchRequestEntry,\n} from '@aws-sdk/client-sqs';\nimport chunk from 'lodash.chunk';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { SQSConnection } from './SQSConnection';\n\nexport interface SQSPublisherOptions {\n\tmaxBatchSize?: number; // Default: 10 (SQS limit)\n}\n\nexport class SQSPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\treadonly options: Required<SQSPublisherOptions>;\n\n\tconstructor(\n\t\treadonly connection: SQSConnection,\n\t\toptions: SQSPublisherOptions = {},\n\t) {\n\t\tthis.options = {\n\t\t\tmaxBatchSize: options.maxBatchSize ?? 10, // SQS limit\n\t\t};\n\t}\n\n\t/**\n\t * Create an SQSPublisher from a connection string\n\t * Format: sqs://?queueUrl=https://sqs.region.amazonaws.com/accountId/queueName&region=us-east-1&endpoint=http://localhost:4566&maxBatchSize=10\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<SQSPublisher<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { SQSConnection } = await import('./SQSConnection');\n\t\tconst connection =\n\t\t\tawait SQSConnection.fromConnectionString(connectionString);\n\n\t\tconst options: SQSPublisherOptions = {\n\t\t\tmaxBatchSize: params.get('maxBatchSize')\n\t\t\t\t? Number.parseInt(params.get('maxBatchSize')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new SQSPublisher<TMessage>(connection, options);\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// Split messages into batches (SQS limit is 10 messages per batch)\n\t\tconst batches = chunk(messages, this.options.maxBatchSize);\n\n\t\t// Send all batches\n\t\tawait Promise.all(batches.map((batch) => this.sendBatch(batch)));\n\t}\n\n\tprivate async sendBatch(messages: TMessage[]): Promise<void> {\n\t\tconst entries: SendMessageBatchRequestEntry[] = messages.map(\n\t\t\t(message, index) => ({\n\t\t\t\tId: `${index}`,\n\t\t\t\tMessageBody: JSON.stringify({\n\t\t\t\t\ttype: message.type,\n\t\t\t\t\tpayload: message.payload,\n\t\t\t\t}),\n\t\t\t\tMessageAttributes: {\n\t\t\t\t\ttype: {\n\t\t\t\t\t\tDataType: 'String',\n\t\t\t\t\t\tStringValue: message.type,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\tconst input: SendMessageBatchCommandInput = {\n\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\tEntries: entries,\n\t\t};\n\n\t\tconst command = new SendMessageBatchCommand(input);\n\t\tconst response = await this.connection.sqsClient.send(command);\n\n\t\t// Check for failures\n\t\tif (response.Failed && response.Failed.length > 0) {\n\t\t\tconst errors = response.Failed.map(\n\t\t\t\t(f) => `${f.Id}: ${f.Code} - ${f.Message}`,\n\t\t\t).join(', ');\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to send ${response.Failed.length} messages: ${errors}`,\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"],"mappings":";;;;AAaA,IAAa,eAAb,MAAa,aAEb;CACC,AAAS;CAET,YACUA,YACTC,UAA+B,CAAE,GAChC;EAFQ;AAGT,OAAK,UAAU,EACd,cAAc,QAAQ,gBAAgB,GACtC;CACD;;;;;CAMD,aAAa,qBAEXC,kBAA2D;EAC5D,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;EACvC,MAAM,aACL,MAAM,cAAc,qBAAqB,iBAAiB;EAE3D,MAAMD,UAA+B,EACpC,cAAc,OAAO,IAAI,eAAe,GACrC,OAAO,SAAS,OAAO,IAAI,eAAe,EAAG,GAAG,UAEnD;AAED,SAAO,IAAI,aAAuB,YAAY;CAC9C;CAED,MAAM,QAAQE,UAAqC;AAClD,MAAI,SAAS,WAAW,EAAG;AAE3B,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;EAIhC,MAAM,UAAU,MAAM,UAAU,KAAK,QAAQ,aAAa;AAG1D,QAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,UAAU,KAAK,UAAU,MAAM,CAAC,CAAC;CAChE;CAED,MAAc,UAAUA,UAAqC;EAC5D,MAAMC,UAA0C,SAAS,IACxD,CAAC,SAAS,WAAW;GACpB,KAAK,EAAE,MAAM;GACb,aAAa,KAAK,UAAU;IAC3B,MAAM,QAAQ;IACd,SAAS,QAAQ;GACjB,EAAC;GACF,mBAAmB,EAClB,MAAM;IACL,UAAU;IACV,aAAa,QAAQ;GACrB,EACD;EACD,GACD;EAED,MAAMC,QAAsC;GAC3C,UAAU,KAAK,WAAW;GAC1B,SAAS;EACT;EAED,MAAM,UAAU,IAAI,wBAAwB;EAC5C,MAAM,WAAW,MAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;AAG9D,MAAI,SAAS,UAAU,SAAS,OAAO,SAAS,GAAG;GAClD,MAAM,SAAS,SAAS,OAAO,IAC9B,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,EAAE,QAAQ,EACzC,CAAC,KAAK,KAAK;AACZ,SAAM,IAAI,OACR,iBAAiB,SAAS,OAAO,OAAO,aAAa,OAAO;EAE9D;CACD;CAED,MAAM,QAAuB,CAG5B;AACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"SQSPublisher-Dq5353oZ.cjs","names":["connection: SQSConnection","options: SQSPublisherOptions","connectionString: string","messages: TMessage[]","entries: SendMessageBatchRequestEntry[]","input: SendMessageBatchCommandInput","SendMessageBatchCommand"],"sources":["../src/sqs/SQSPublisher.ts"],"sourcesContent":["import {\n SendMessageBatchCommand,\n type SendMessageBatchCommandInput,\n type SendMessageBatchRequestEntry,\n} from '@aws-sdk/client-sqs';\nimport chunk from 'lodash.chunk';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { SQSConnection } from './SQSConnection';\n\nexport interface SQSPublisherOptions {\n maxBatchSize?: number; // Default: 10 (SQS limit)\n}\n\nexport class SQSPublisher<TMessage extends PublishableMessage<string, any>>\n implements EventPublisher<TMessage>\n{\n readonly options: Required<SQSPublisherOptions>;\n\n constructor(\n readonly connection: SQSConnection,\n options: SQSPublisherOptions = {},\n ) {\n this.options = {\n maxBatchSize: options.maxBatchSize ?? 10, // SQS limit\n };\n }\n\n /**\n * Create an SQSPublisher from a connection string\n * Format: sqs://?queueUrl=https://sqs.region.amazonaws.com/accountId/queueName&region=us-east-1&endpoint=http://localhost:4566&maxBatchSize=10\n */\n static async fromConnectionString<\n TMessage extends PublishableMessage<string, any>,\n >(connectionString: string): Promise<SQSPublisher<TMessage>> {\n const url = new URL(connectionString);\n const params = url.searchParams;\n\n const { SQSConnection } = await import('./SQSConnection');\n const connection =\n await SQSConnection.fromConnectionString(connectionString);\n\n const options: SQSPublisherOptions = {\n maxBatchSize: params.get('maxBatchSize')\n ? Number.parseInt(params.get('maxBatchSize')!, 10)\n : undefined,\n };\n\n return new SQSPublisher<TMessage>(connection, options);\n }\n\n async publish(messages: TMessage[]): Promise<void> {\n if (messages.length === 0) return;\n\n if (!this.connection.isConnected()) {\n await this.connection.connect();\n }\n\n // Split messages into batches (SQS limit is 10 messages per batch)\n const batches = chunk(messages, this.options.maxBatchSize);\n\n // Send all batches\n await Promise.all(batches.map((batch) => this.sendBatch(batch)));\n }\n\n private async sendBatch(messages: TMessage[]): Promise<void> {\n const entries: SendMessageBatchRequestEntry[] = messages.map(\n (message, index) => ({\n Id: `${index}`,\n MessageBody: JSON.stringify({\n type: message.type,\n payload: message.payload,\n }),\n MessageAttributes: {\n type: {\n DataType: 'String',\n StringValue: message.type,\n },\n },\n }),\n );\n\n const input: SendMessageBatchCommandInput = {\n QueueUrl: this.connection.queueUrl,\n Entries: entries,\n };\n\n const command = new SendMessageBatchCommand(input);\n const response = await this.connection.sqsClient.send(command);\n\n // Check for failures\n if (response.Failed && response.Failed.length > 0) {\n const errors = response.Failed.map(\n (f) => `${f.Id}: ${f.Code} - ${f.Message}`,\n ).join(', ');\n throw new Error(\n `Failed to send ${response.Failed.length} messages: ${errors}`,\n );\n }\n }\n\n async close(): Promise<void> {\n // Publisher doesn't own the connection\n // Connection should be closed by whoever created it\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,eAAb,MAAa,aAEb;CACE,AAAS;CAET,YACWA,YACTC,UAA+B,CAAE,GACjC;EAFS;AAGT,OAAK,UAAU,EACb,cAAc,QAAQ,gBAAgB,GACvC;CACF;;;;;CAMD,aAAa,qBAEXC,kBAA2D;EAC3D,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,EAAE,eAAe,GAAG,2CAAM;EAChC,MAAM,aACJ,MAAM,cAAc,qBAAqB,iBAAiB;EAE5D,MAAMD,UAA+B,EACnC,cAAc,OAAO,IAAI,eAAe,GACpC,OAAO,SAAS,OAAO,IAAI,eAAe,EAAG,GAAG,UAErD;AAED,SAAO,IAAI,aAAuB,YAAY;CAC/C;CAED,MAAM,QAAQE,UAAqC;AACjD,MAAI,SAAS,WAAW,EAAG;AAE3B,OAAK,KAAK,WAAW,aAAa,CAChC,OAAM,KAAK,WAAW,SAAS;EAIjC,MAAM,UAAU,0BAAM,UAAU,KAAK,QAAQ,aAAa;AAG1D,QAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,UAAU,KAAK,UAAU,MAAM,CAAC,CAAC;CACjE;CAED,MAAc,UAAUA,UAAqC;EAC3D,MAAMC,UAA0C,SAAS,IACvD,CAAC,SAAS,WAAW;GACnB,KAAK,EAAE,MAAM;GACb,aAAa,KAAK,UAAU;IAC1B,MAAM,QAAQ;IACd,SAAS,QAAQ;GAClB,EAAC;GACF,mBAAmB,EACjB,MAAM;IACJ,UAAU;IACV,aAAa,QAAQ;GACtB,EACF;EACF,GACF;EAED,MAAMC,QAAsC;GAC1C,UAAU,KAAK,WAAW;GAC1B,SAAS;EACV;EAED,MAAM,UAAU,IAAIC,6CAAwB;EAC5C,MAAM,WAAW,MAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;AAG9D,MAAI,SAAS,UAAU,SAAS,OAAO,SAAS,GAAG;GACjD,MAAM,SAAS,SAAS,OAAO,IAC7B,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,EAAE,QAAQ,EAC1C,CAAC,KAAK,KAAK;AACZ,SAAM,IAAI,OACP,iBAAiB,SAAS,OAAO,OAAO,aAAa,OAAO;EAEhE;CACF;CAED,MAAM,QAAuB,CAG5B;AACF"}
1
+ {"version":3,"file":"SQSPublisher-Dq5353oZ.cjs","names":["connection: SQSConnection","options: SQSPublisherOptions","connectionString: string","messages: TMessage[]","entries: SendMessageBatchRequestEntry[]","input: SendMessageBatchCommandInput","SendMessageBatchCommand"],"sources":["../src/sqs/SQSPublisher.ts"],"sourcesContent":["import {\n\tSendMessageBatchCommand,\n\ttype SendMessageBatchCommandInput,\n\ttype SendMessageBatchRequestEntry,\n} from '@aws-sdk/client-sqs';\nimport chunk from 'lodash.chunk';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { SQSConnection } from './SQSConnection';\n\nexport interface SQSPublisherOptions {\n\tmaxBatchSize?: number; // Default: 10 (SQS limit)\n}\n\nexport class SQSPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\treadonly options: Required<SQSPublisherOptions>;\n\n\tconstructor(\n\t\treadonly connection: SQSConnection,\n\t\toptions: SQSPublisherOptions = {},\n\t) {\n\t\tthis.options = {\n\t\t\tmaxBatchSize: options.maxBatchSize ?? 10, // SQS limit\n\t\t};\n\t}\n\n\t/**\n\t * Create an SQSPublisher from a connection string\n\t * Format: sqs://?queueUrl=https://sqs.region.amazonaws.com/accountId/queueName&region=us-east-1&endpoint=http://localhost:4566&maxBatchSize=10\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<SQSPublisher<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { SQSConnection } = await import('./SQSConnection');\n\t\tconst connection =\n\t\t\tawait SQSConnection.fromConnectionString(connectionString);\n\n\t\tconst options: SQSPublisherOptions = {\n\t\t\tmaxBatchSize: params.get('maxBatchSize')\n\t\t\t\t? Number.parseInt(params.get('maxBatchSize')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new SQSPublisher<TMessage>(connection, options);\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// Split messages into batches (SQS limit is 10 messages per batch)\n\t\tconst batches = chunk(messages, this.options.maxBatchSize);\n\n\t\t// Send all batches\n\t\tawait Promise.all(batches.map((batch) => this.sendBatch(batch)));\n\t}\n\n\tprivate async sendBatch(messages: TMessage[]): Promise<void> {\n\t\tconst entries: SendMessageBatchRequestEntry[] = messages.map(\n\t\t\t(message, index) => ({\n\t\t\t\tId: `${index}`,\n\t\t\t\tMessageBody: JSON.stringify({\n\t\t\t\t\ttype: message.type,\n\t\t\t\t\tpayload: message.payload,\n\t\t\t\t}),\n\t\t\t\tMessageAttributes: {\n\t\t\t\t\ttype: {\n\t\t\t\t\t\tDataType: 'String',\n\t\t\t\t\t\tStringValue: message.type,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\n\t\tconst input: SendMessageBatchCommandInput = {\n\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\tEntries: entries,\n\t\t};\n\n\t\tconst command = new SendMessageBatchCommand(input);\n\t\tconst response = await this.connection.sqsClient.send(command);\n\n\t\t// Check for failures\n\t\tif (response.Failed && response.Failed.length > 0) {\n\t\t\tconst errors = response.Failed.map(\n\t\t\t\t(f) => `${f.Id}: ${f.Code} - ${f.Message}`,\n\t\t\t).join(', ');\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to send ${response.Failed.length} messages: ${errors}`,\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"],"mappings":";;;;;AAaA,IAAa,eAAb,MAAa,aAEb;CACC,AAAS;CAET,YACUA,YACTC,UAA+B,CAAE,GAChC;EAFQ;AAGT,OAAK,UAAU,EACd,cAAc,QAAQ,gBAAgB,GACtC;CACD;;;;;CAMD,aAAa,qBAEXC,kBAA2D;EAC5D,MAAM,MAAM,IAAI,IAAI;EACpB,MAAM,SAAS,IAAI;EAEnB,MAAM,EAAE,eAAe,GAAG,2CAAM;EAChC,MAAM,aACL,MAAM,cAAc,qBAAqB,iBAAiB;EAE3D,MAAMD,UAA+B,EACpC,cAAc,OAAO,IAAI,eAAe,GACrC,OAAO,SAAS,OAAO,IAAI,eAAe,EAAG,GAAG,UAEnD;AAED,SAAO,IAAI,aAAuB,YAAY;CAC9C;CAED,MAAM,QAAQE,UAAqC;AAClD,MAAI,SAAS,WAAW,EAAG;AAE3B,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;EAIhC,MAAM,UAAU,0BAAM,UAAU,KAAK,QAAQ,aAAa;AAG1D,QAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,UAAU,KAAK,UAAU,MAAM,CAAC,CAAC;CAChE;CAED,MAAc,UAAUA,UAAqC;EAC5D,MAAMC,UAA0C,SAAS,IACxD,CAAC,SAAS,WAAW;GACpB,KAAK,EAAE,MAAM;GACb,aAAa,KAAK,UAAU;IAC3B,MAAM,QAAQ;IACd,SAAS,QAAQ;GACjB,EAAC;GACF,mBAAmB,EAClB,MAAM;IACL,UAAU;IACV,aAAa,QAAQ;GACrB,EACD;EACD,GACD;EAED,MAAMC,QAAsC;GAC3C,UAAU,KAAK,WAAW;GAC1B,SAAS;EACT;EAED,MAAM,UAAU,IAAIC,6CAAwB;EAC5C,MAAM,WAAW,MAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;AAG9D,MAAI,SAAS,UAAU,SAAS,OAAO,SAAS,GAAG;GAClD,MAAM,SAAS,SAAS,OAAO,IAC9B,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,EAAE,QAAQ,EACzC,CAAC,KAAK,KAAK;AACZ,SAAM,IAAI,OACR,iBAAiB,SAAS,OAAO,OAAO,aAAa,OAAO;EAE9D;CACD;CAED,MAAM,QAAuB,CAG5B;AACD"}
@@ -48,8 +48,7 @@ var SQSSubscriber = class {
48
48
  });
49
49
  const response = await this.connection.sqsClient.send(command);
50
50
  if (response.Messages && response.Messages.length > 0) await this.processMessages(response.Messages);
51
- } catch (error) {
52
- console.error("Error receiving messages from SQS:", error);
51
+ } catch (_error) {
53
52
  await this.sleep(1e3);
54
53
  }
55
54
  }
@@ -64,7 +63,6 @@ var SQSSubscriber = class {
64
63
  const { payload, messageType, topicArn } = parsedMessage;
65
64
  if (this.options.expectedTopicArn && topicArn) {
66
65
  if (topicArn !== this.options.expectedTopicArn) {
67
- console.warn(`Received message from unexpected topic: ${topicArn}, expected: ${this.options.expectedTopicArn}`);
68
66
  await this.deleteMessage(message.ReceiptHandle);
69
67
  continue;
70
68
  }
@@ -73,9 +71,7 @@ var SQSSubscriber = class {
73
71
  if (this.listener) await this.listener(payload);
74
72
  await this.deleteMessage(message.ReceiptHandle);
75
73
  } else await this.deleteMessage(message.ReceiptHandle);
76
- } catch (error) {
77
- console.error("Error processing message:", error);
78
- }
74
+ } catch (_error) {}
79
75
  }
80
76
  /**
81
77
  * Parse message body - handles both direct SQS messages and SNS-wrapped messages
@@ -96,8 +92,7 @@ var SQSSubscriber = class {
96
92
  payload: parsed,
97
93
  messageType: parsed.type
98
94
  };
99
- } catch (error) {
100
- console.error("Failed to parse message:", error);
95
+ } catch (_error) {
101
96
  return null;
102
97
  }
103
98
  }
@@ -108,9 +103,7 @@ var SQSSubscriber = class {
108
103
  ReceiptHandle: receiptHandle
109
104
  });
110
105
  await this.connection.sqsClient.send(command);
111
- } catch (error) {
112
- console.error("Error deleting message:", error);
113
- }
106
+ } catch (_error) {}
114
107
  }
115
108
  sleep(ms) {
116
109
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -124,4 +117,4 @@ Object.defineProperty(exports, 'SQSSubscriber', {
124
117
  return SQSSubscriber;
125
118
  }
126
119
  });
127
- //# sourceMappingURL=SQSSubscriber-DZDNgLE5.cjs.map
120
+ //# sourceMappingURL=SQSSubscriber-B4sRXVl6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQSSubscriber-B4sRXVl6.cjs","names":["connection: SQSConnection","options: SQSSubscriberOptions","messages: TMessage['type'][]","listener: (payload: TMessage) => Promise<void>","ReceiveMessageCommand","messages: Message[]","body: string","receiptHandle: string","DeleteMessageCommand","ms: number"],"sources":["../src/sqs/SQSSubscriber.ts"],"sourcesContent":["import {\n\tDeleteMessageCommand,\n\ttype Message,\n\tReceiveMessageCommand,\n} from '@aws-sdk/client-sqs';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { SQSConnection } from './SQSConnection';\n\nexport interface SQSSubscriberOptions {\n\twaitTimeSeconds?: number; // SQS long polling (default: 20)\n\tmaxMessages?: number; // Max messages per poll (default: 10)\n\texpectedTopicArn?: string; // Optional: verify messages are from specific SNS topic\n}\n\n/**\n * SQS Subscriber - receives messages from an SQS queue\n *\n * This subscriber can receive:\n * 1. Direct SQS messages\n * 2. SNS messages that were pushed to the queue (SNS → SQS pattern)\n *\n * When receiving SNS messages, it:\n * - Automatically detects and parses the SNS wrapper format\n * - Filters by TopicArn (if expectedTopicArn is provided)\n * - Filters by message type\n * - Processes the actual message payload\n */\nexport class SQSSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tprivate polling = false;\n\tprivate messageTypes: Set<TMessage['type']> = new Set();\n\tprivate listener?: (payload: TMessage) => Promise<void>;\n\tprivate options: Required<SQSSubscriberOptions>;\n\n\tconstructor(\n\t\tprivate connection: SQSConnection,\n\t\toptions: SQSSubscriberOptions = {},\n\t) {\n\t\tthis.options = {\n\t\t\twaitTimeSeconds: options.waitTimeSeconds ?? 20,\n\t\t\tmaxMessages: options.maxMessages ?? 10,\n\t\t\texpectedTopicArn: options.expectedTopicArn ?? '',\n\t\t};\n\t}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tthis.messageTypes = new Set(messages);\n\t\tthis.listener = listener;\n\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tthis.polling = true;\n\t\tthis.poll();\n\t}\n\n\tstop(): void {\n\t\tthis.polling = false;\n\t}\n\n\tprivate async poll(): Promise<void> {\n\t\twhile (this.polling) {\n\t\t\ttry {\n\t\t\t\tconst command = new ReceiveMessageCommand({\n\t\t\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\t\t\tMaxNumberOfMessages: this.options.maxMessages,\n\t\t\t\t\tWaitTimeSeconds: this.options.waitTimeSeconds,\n\t\t\t\t\tMessageAttributeNames: ['All'],\n\t\t\t\t});\n\n\t\t\t\tconst response = await this.connection.sqsClient.send(command);\n\n\t\t\t\tif (response.Messages && response.Messages.length > 0) {\n\t\t\t\t\tawait this.processMessages(response.Messages);\n\t\t\t\t}\n\t\t\t} catch (_error) {\n\t\t\t\tawait this.sleep(1000);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async processMessages(messages: Message[]): Promise<void> {\n\t\tfor (const message of messages) {\n\t\t\ttry {\n\t\t\t\tif (!message.Body) continue;\n\n\t\t\t\t// Try to parse as SNS message first\n\t\t\t\tconst parsedMessage = this.parseMessage(message.Body);\n\n\t\t\t\tif (!parsedMessage) {\n\t\t\t\t\t// Not a valid message format\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst { payload, messageType, topicArn } = parsedMessage;\n\n\t\t\t\t// If expectedTopicArn is set, verify the message is from that topic\n\t\t\t\tif (this.options.expectedTopicArn && topicArn) {\n\t\t\t\t\tif (topicArn !== this.options.expectedTopicArn) {\n\t\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check if we're subscribed to this message type\n\t\t\t\tif (\n\t\t\t\t\tmessageType &&\n\t\t\t\t\tthis.messageTypes.has(messageType as TMessage['type'])\n\t\t\t\t) {\n\t\t\t\t\t// Call listener\n\t\t\t\t\tif (this.listener) {\n\t\t\t\t\t\tawait this.listener(payload as TMessage);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Delete message after successful processing\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t} else {\n\t\t\t\t\t// Delete messages we're not subscribed to\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t}\n\t\t\t} catch (_error) {\n\t\t\t\t// Message will become visible again\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Parse message body - handles both direct SQS messages and SNS-wrapped messages\n\t */\n\tprivate parseMessage(body: string): {\n\t\tpayload: unknown;\n\t\tmessageType: string | undefined;\n\t\ttopicArn?: string;\n\t} | null {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(body);\n\n\t\t\t// Check if this is an SNS notification wrapper\n\t\t\tif (parsed.Type === 'Notification' && parsed.Message) {\n\t\t\t\t// This is an SNS message\n\t\t\t\tconst snsMessage = JSON.parse(parsed.Message);\n\t\t\t\tconst messageType =\n\t\t\t\t\tparsed.MessageAttributes?.type?.Value || snsMessage.type;\n\n\t\t\t\treturn {\n\t\t\t\t\tpayload: snsMessage,\n\t\t\t\t\tmessageType,\n\t\t\t\t\ttopicArn: parsed.TopicArn,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// This is a direct SQS message\n\t\t\treturn {\n\t\t\t\tpayload: parsed,\n\t\t\t\tmessageType: parsed.type,\n\t\t\t};\n\t\t} catch (_error) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async deleteMessage(receiptHandle: string): Promise<void> {\n\t\ttry {\n\t\t\tconst command = new DeleteMessageCommand({\n\t\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\t\tReceiptHandle: receiptHandle,\n\t\t\t});\n\t\t\tawait this.connection.sqsClient.send(command);\n\t\t} catch (_error) {}\n\t}\n\n\tprivate sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA2BA,IAAa,gBAAb,MAEA;CACC,AAAQ,UAAU;CAClB,AAAQ,+BAAsC,IAAI;CAClD,AAAQ;CACR,AAAQ;CAER,YACSA,YACRC,UAAgC,CAAE,GACjC;EAFO;AAGR,OAAK,UAAU;GACd,iBAAiB,QAAQ,mBAAmB;GAC5C,aAAa,QAAQ,eAAe;GACpC,kBAAkB,QAAQ,oBAAoB;EAC9C;CACD;CAED,MAAM,UACLC,UACAC,UACgB;AAChB,OAAK,eAAe,IAAI,IAAI;AAC5B,OAAK,WAAW;AAEhB,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;AAGhC,OAAK,UAAU;AACf,OAAK,MAAM;CACX;CAED,OAAa;AACZ,OAAK,UAAU;CACf;CAED,MAAc,OAAsB;AACnC,SAAO,KAAK,QACX,KAAI;GACH,MAAM,UAAU,IAAIC,2CAAsB;IACzC,UAAU,KAAK,WAAW;IAC1B,qBAAqB,KAAK,QAAQ;IAClC,iBAAiB,KAAK,QAAQ;IAC9B,uBAAuB,CAAC,KAAM;GAC9B;GAED,MAAM,WAAW,MAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;AAE9D,OAAI,SAAS,YAAY,SAAS,SAAS,SAAS,EACnD,OAAM,KAAK,gBAAgB,SAAS,SAAS;EAE9C,SAAQ,QAAQ;AAChB,SAAM,KAAK,MAAM,IAAK;EACtB;CAEF;CAED,MAAc,gBAAgBC,UAAoC;AACjE,OAAK,MAAM,WAAW,SACrB,KAAI;AACH,QAAK,QAAQ,KAAM;GAGnB,MAAM,gBAAgB,KAAK,aAAa,QAAQ,KAAK;AAErD,QAAK,eAAe;AAEnB,UAAM,KAAK,cAAc,QAAQ,cAAe;AAChD;GACA;GAED,MAAM,EAAE,SAAS,aAAa,UAAU,GAAG;AAG3C,OAAI,KAAK,QAAQ,oBAAoB,UACpC;QAAI,aAAa,KAAK,QAAQ,kBAAkB;AAC/C,WAAM,KAAK,cAAc,QAAQ,cAAe;AAChD;IACA;;AAIF,OACC,eACA,KAAK,aAAa,IAAI,YAAgC,EACrD;AAED,QAAI,KAAK,SACR,OAAM,KAAK,SAAS,QAAoB;AAIzC,UAAM,KAAK,cAAc,QAAQ,cAAe;GAChD,MAEA,OAAM,KAAK,cAAc,QAAQ,cAAe;EAEjD,SAAQ,QAAQ,CAEhB;CAEF;;;;CAKD,AAAQ,aAAaC,MAIZ;AACR,MAAI;GACH,MAAM,SAAS,KAAK,MAAM,KAAK;AAG/B,OAAI,OAAO,SAAS,kBAAkB,OAAO,SAAS;IAErD,MAAM,aAAa,KAAK,MAAM,OAAO,QAAQ;IAC7C,MAAM,cACL,OAAO,mBAAmB,MAAM,SAAS,WAAW;AAErD,WAAO;KACN,SAAS;KACT;KACA,UAAU,OAAO;IACjB;GACD;AAGD,UAAO;IACN,SAAS;IACT,aAAa,OAAO;GACpB;EACD,SAAQ,QAAQ;AAChB,UAAO;EACP;CACD;CAED,MAAc,cAAcC,eAAsC;AACjE,MAAI;GACH,MAAM,UAAU,IAAIC,0CAAqB;IACxC,UAAU,KAAK,WAAW;IAC1B,eAAe;GACf;AACD,SAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;EAC7C,SAAQ,QAAQ,CAAE;CACnB;CAED,AAAQ,MAAMC,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG;CACvD;AACD"}
@@ -1,5 +1,5 @@
1
- import { EventSubscriber, PublishableMessage } from "./types-DEGUg5BA.cjs";
2
- import { SQSConnection } from "./SQSConnection-geav2Rsn.cjs";
1
+ import { EventSubscriber, PublishableMessage } from "./types-Dmbp1U-6.cjs";
2
+ import { SQSConnection } from "./SQSConnection-B5Ep9Tma.cjs";
3
3
 
4
4
  //#region src/sqs/SQSSubscriber.d.ts
5
5
  interface SQSSubscriberOptions {
@@ -38,6 +38,7 @@ declare class SQSSubscriber<TMessage extends PublishableMessage<string, any>> im
38
38
  private deleteMessage;
39
39
  private sleep;
40
40
  }
41
+ //# sourceMappingURL=SQSSubscriber.d.ts.map
41
42
  //#endregion
42
43
  export { SQSSubscriber, SQSSubscriberOptions };
43
- //# sourceMappingURL=SQSSubscriber-B6iL1EnX.d.cts.map
44
+ //# sourceMappingURL=SQSSubscriber-BO2me_gs.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQSSubscriber-BO2me_gs.d.cts","names":[],"sources":["../src/sqs/SQSSubscriber.ts"],"sourcesContent":[],"mappings":";;;;UAQiB,oBAAA;;EAAA,WAAA,CAAA,EAAA,MAAA;EAmBJ,gBAAa,CAAA,EAAA,MAAA;;;;;;;;;;;AACC;;;;cADd,+BAA+B,4CAChC,gBAAgB;;;;;;0BAQN,yBACX;sBAUC,wCACU,aAAa,gBAC/B"}
@@ -47,8 +47,7 @@ var SQSSubscriber = class {
47
47
  });
48
48
  const response = await this.connection.sqsClient.send(command);
49
49
  if (response.Messages && response.Messages.length > 0) await this.processMessages(response.Messages);
50
- } catch (error) {
51
- console.error("Error receiving messages from SQS:", error);
50
+ } catch (_error) {
52
51
  await this.sleep(1e3);
53
52
  }
54
53
  }
@@ -63,7 +62,6 @@ var SQSSubscriber = class {
63
62
  const { payload, messageType, topicArn } = parsedMessage;
64
63
  if (this.options.expectedTopicArn && topicArn) {
65
64
  if (topicArn !== this.options.expectedTopicArn) {
66
- console.warn(`Received message from unexpected topic: ${topicArn}, expected: ${this.options.expectedTopicArn}`);
67
65
  await this.deleteMessage(message.ReceiptHandle);
68
66
  continue;
69
67
  }
@@ -72,9 +70,7 @@ var SQSSubscriber = class {
72
70
  if (this.listener) await this.listener(payload);
73
71
  await this.deleteMessage(message.ReceiptHandle);
74
72
  } else await this.deleteMessage(message.ReceiptHandle);
75
- } catch (error) {
76
- console.error("Error processing message:", error);
77
- }
73
+ } catch (_error) {}
78
74
  }
79
75
  /**
80
76
  * Parse message body - handles both direct SQS messages and SNS-wrapped messages
@@ -95,8 +91,7 @@ var SQSSubscriber = class {
95
91
  payload: parsed,
96
92
  messageType: parsed.type
97
93
  };
98
- } catch (error) {
99
- console.error("Failed to parse message:", error);
94
+ } catch (_error) {
100
95
  return null;
101
96
  }
102
97
  }
@@ -107,9 +102,7 @@ var SQSSubscriber = class {
107
102
  ReceiptHandle: receiptHandle
108
103
  });
109
104
  await this.connection.sqsClient.send(command);
110
- } catch (error) {
111
- console.error("Error deleting message:", error);
112
- }
105
+ } catch (_error) {}
113
106
  }
114
107
  sleep(ms) {
115
108
  return new Promise((resolve) => setTimeout(resolve, ms));
@@ -118,4 +111,4 @@ var SQSSubscriber = class {
118
111
 
119
112
  //#endregion
120
113
  export { SQSSubscriber };
121
- //# sourceMappingURL=SQSSubscriber-CD66P7hH.mjs.map
114
+ //# sourceMappingURL=SQSSubscriber-CVGhZ8Nr.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQSSubscriber-CVGhZ8Nr.mjs","names":["connection: SQSConnection","options: SQSSubscriberOptions","messages: TMessage['type'][]","listener: (payload: TMessage) => Promise<void>","messages: Message[]","body: string","receiptHandle: string","ms: number"],"sources":["../src/sqs/SQSSubscriber.ts"],"sourcesContent":["import {\n\tDeleteMessageCommand,\n\ttype Message,\n\tReceiveMessageCommand,\n} from '@aws-sdk/client-sqs';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { SQSConnection } from './SQSConnection';\n\nexport interface SQSSubscriberOptions {\n\twaitTimeSeconds?: number; // SQS long polling (default: 20)\n\tmaxMessages?: number; // Max messages per poll (default: 10)\n\texpectedTopicArn?: string; // Optional: verify messages are from specific SNS topic\n}\n\n/**\n * SQS Subscriber - receives messages from an SQS queue\n *\n * This subscriber can receive:\n * 1. Direct SQS messages\n * 2. SNS messages that were pushed to the queue (SNS → SQS pattern)\n *\n * When receiving SNS messages, it:\n * - Automatically detects and parses the SNS wrapper format\n * - Filters by TopicArn (if expectedTopicArn is provided)\n * - Filters by message type\n * - Processes the actual message payload\n */\nexport class SQSSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tprivate polling = false;\n\tprivate messageTypes: Set<TMessage['type']> = new Set();\n\tprivate listener?: (payload: TMessage) => Promise<void>;\n\tprivate options: Required<SQSSubscriberOptions>;\n\n\tconstructor(\n\t\tprivate connection: SQSConnection,\n\t\toptions: SQSSubscriberOptions = {},\n\t) {\n\t\tthis.options = {\n\t\t\twaitTimeSeconds: options.waitTimeSeconds ?? 20,\n\t\t\tmaxMessages: options.maxMessages ?? 10,\n\t\t\texpectedTopicArn: options.expectedTopicArn ?? '',\n\t\t};\n\t}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tthis.messageTypes = new Set(messages);\n\t\tthis.listener = listener;\n\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tthis.polling = true;\n\t\tthis.poll();\n\t}\n\n\tstop(): void {\n\t\tthis.polling = false;\n\t}\n\n\tprivate async poll(): Promise<void> {\n\t\twhile (this.polling) {\n\t\t\ttry {\n\t\t\t\tconst command = new ReceiveMessageCommand({\n\t\t\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\t\t\tMaxNumberOfMessages: this.options.maxMessages,\n\t\t\t\t\tWaitTimeSeconds: this.options.waitTimeSeconds,\n\t\t\t\t\tMessageAttributeNames: ['All'],\n\t\t\t\t});\n\n\t\t\t\tconst response = await this.connection.sqsClient.send(command);\n\n\t\t\t\tif (response.Messages && response.Messages.length > 0) {\n\t\t\t\t\tawait this.processMessages(response.Messages);\n\t\t\t\t}\n\t\t\t} catch (_error) {\n\t\t\t\tawait this.sleep(1000);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async processMessages(messages: Message[]): Promise<void> {\n\t\tfor (const message of messages) {\n\t\t\ttry {\n\t\t\t\tif (!message.Body) continue;\n\n\t\t\t\t// Try to parse as SNS message first\n\t\t\t\tconst parsedMessage = this.parseMessage(message.Body);\n\n\t\t\t\tif (!parsedMessage) {\n\t\t\t\t\t// Not a valid message format\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst { payload, messageType, topicArn } = parsedMessage;\n\n\t\t\t\t// If expectedTopicArn is set, verify the message is from that topic\n\t\t\t\tif (this.options.expectedTopicArn && topicArn) {\n\t\t\t\t\tif (topicArn !== this.options.expectedTopicArn) {\n\t\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check if we're subscribed to this message type\n\t\t\t\tif (\n\t\t\t\t\tmessageType &&\n\t\t\t\t\tthis.messageTypes.has(messageType as TMessage['type'])\n\t\t\t\t) {\n\t\t\t\t\t// Call listener\n\t\t\t\t\tif (this.listener) {\n\t\t\t\t\t\tawait this.listener(payload as TMessage);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Delete message after successful processing\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t} else {\n\t\t\t\t\t// Delete messages we're not subscribed to\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t}\n\t\t\t} catch (_error) {\n\t\t\t\t// Message will become visible again\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Parse message body - handles both direct SQS messages and SNS-wrapped messages\n\t */\n\tprivate parseMessage(body: string): {\n\t\tpayload: unknown;\n\t\tmessageType: string | undefined;\n\t\ttopicArn?: string;\n\t} | null {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(body);\n\n\t\t\t// Check if this is an SNS notification wrapper\n\t\t\tif (parsed.Type === 'Notification' && parsed.Message) {\n\t\t\t\t// This is an SNS message\n\t\t\t\tconst snsMessage = JSON.parse(parsed.Message);\n\t\t\t\tconst messageType =\n\t\t\t\t\tparsed.MessageAttributes?.type?.Value || snsMessage.type;\n\n\t\t\t\treturn {\n\t\t\t\t\tpayload: snsMessage,\n\t\t\t\t\tmessageType,\n\t\t\t\t\ttopicArn: parsed.TopicArn,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// This is a direct SQS message\n\t\t\treturn {\n\t\t\t\tpayload: parsed,\n\t\t\t\tmessageType: parsed.type,\n\t\t\t};\n\t\t} catch (_error) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async deleteMessage(receiptHandle: string): Promise<void> {\n\t\ttry {\n\t\t\tconst command = new DeleteMessageCommand({\n\t\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\t\tReceiptHandle: receiptHandle,\n\t\t\t});\n\t\t\tawait this.connection.sqsClient.send(command);\n\t\t} catch (_error) {}\n\t}\n\n\tprivate sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2BA,IAAa,gBAAb,MAEA;CACC,AAAQ,UAAU;CAClB,AAAQ,+BAAsC,IAAI;CAClD,AAAQ;CACR,AAAQ;CAER,YACSA,YACRC,UAAgC,CAAE,GACjC;EAFO;AAGR,OAAK,UAAU;GACd,iBAAiB,QAAQ,mBAAmB;GAC5C,aAAa,QAAQ,eAAe;GACpC,kBAAkB,QAAQ,oBAAoB;EAC9C;CACD;CAED,MAAM,UACLC,UACAC,UACgB;AAChB,OAAK,eAAe,IAAI,IAAI;AAC5B,OAAK,WAAW;AAEhB,OAAK,KAAK,WAAW,aAAa,CACjC,OAAM,KAAK,WAAW,SAAS;AAGhC,OAAK,UAAU;AACf,OAAK,MAAM;CACX;CAED,OAAa;AACZ,OAAK,UAAU;CACf;CAED,MAAc,OAAsB;AACnC,SAAO,KAAK,QACX,KAAI;GACH,MAAM,UAAU,IAAI,sBAAsB;IACzC,UAAU,KAAK,WAAW;IAC1B,qBAAqB,KAAK,QAAQ;IAClC,iBAAiB,KAAK,QAAQ;IAC9B,uBAAuB,CAAC,KAAM;GAC9B;GAED,MAAM,WAAW,MAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;AAE9D,OAAI,SAAS,YAAY,SAAS,SAAS,SAAS,EACnD,OAAM,KAAK,gBAAgB,SAAS,SAAS;EAE9C,SAAQ,QAAQ;AAChB,SAAM,KAAK,MAAM,IAAK;EACtB;CAEF;CAED,MAAc,gBAAgBC,UAAoC;AACjE,OAAK,MAAM,WAAW,SACrB,KAAI;AACH,QAAK,QAAQ,KAAM;GAGnB,MAAM,gBAAgB,KAAK,aAAa,QAAQ,KAAK;AAErD,QAAK,eAAe;AAEnB,UAAM,KAAK,cAAc,QAAQ,cAAe;AAChD;GACA;GAED,MAAM,EAAE,SAAS,aAAa,UAAU,GAAG;AAG3C,OAAI,KAAK,QAAQ,oBAAoB,UACpC;QAAI,aAAa,KAAK,QAAQ,kBAAkB;AAC/C,WAAM,KAAK,cAAc,QAAQ,cAAe;AAChD;IACA;;AAIF,OACC,eACA,KAAK,aAAa,IAAI,YAAgC,EACrD;AAED,QAAI,KAAK,SACR,OAAM,KAAK,SAAS,QAAoB;AAIzC,UAAM,KAAK,cAAc,QAAQ,cAAe;GAChD,MAEA,OAAM,KAAK,cAAc,QAAQ,cAAe;EAEjD,SAAQ,QAAQ,CAEhB;CAEF;;;;CAKD,AAAQ,aAAaC,MAIZ;AACR,MAAI;GACH,MAAM,SAAS,KAAK,MAAM,KAAK;AAG/B,OAAI,OAAO,SAAS,kBAAkB,OAAO,SAAS;IAErD,MAAM,aAAa,KAAK,MAAM,OAAO,QAAQ;IAC7C,MAAM,cACL,OAAO,mBAAmB,MAAM,SAAS,WAAW;AAErD,WAAO;KACN,SAAS;KACT;KACA,UAAU,OAAO;IACjB;GACD;AAGD,UAAO;IACN,SAAS;IACT,aAAa,OAAO;GACpB;EACD,SAAQ,QAAQ;AAChB,UAAO;EACP;CACD;CAED,MAAc,cAAcC,eAAsC;AACjE,MAAI;GACH,MAAM,UAAU,IAAI,qBAAqB;IACxC,UAAU,KAAK,WAAW;IAC1B,eAAe;GACf;AACD,SAAM,KAAK,WAAW,UAAU,KAAK,QAAQ;EAC7C,SAAQ,QAAQ,CAAE;CACnB;CAED,AAAQ,MAAMC,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG;CACvD;AACD"}
@@ -1,5 +1,5 @@
1
- import { EventSubscriber, PublishableMessage } from "./types-D0g-o6wX.mjs";
2
- import { SQSConnection } from "./SQSConnection-C5WFqZW7.mjs";
1
+ import { EventSubscriber, PublishableMessage } from "./types-DSVsPgKd.mjs";
2
+ import { SQSConnection } from "./SQSConnection-BI_xOzyJ.mjs";
3
3
 
4
4
  //#region src/sqs/SQSSubscriber.d.ts
5
5
  interface SQSSubscriberOptions {
@@ -38,6 +38,7 @@ declare class SQSSubscriber<TMessage extends PublishableMessage<string, any>> im
38
38
  private deleteMessage;
39
39
  private sleep;
40
40
  }
41
+ //# sourceMappingURL=SQSSubscriber.d.ts.map
41
42
  //#endregion
42
43
  export { SQSSubscriber, SQSSubscriberOptions };
43
- //# sourceMappingURL=SQSSubscriber-DBeE4XAR.d.mts.map
44
+ //# sourceMappingURL=SQSSubscriber-FyZFfr2-.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQSSubscriber-FyZFfr2-.d.mts","names":[],"sources":["../src/sqs/SQSSubscriber.ts"],"sourcesContent":[],"mappings":";;;;UAQiB,oBAAA;;EAAA,WAAA,CAAA,EAAA,MAAA;EAmBJ,gBAAa,CAAA,EAAA,MAAA;;;;;;;;;;;AACC;;;;cADd,+BAA+B,4CAChC,gBAAgB;;;;;;0BAQN,yBACX;sBAUC,wCACU,aAAa,gBAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"Subscriber-Bd9hb_jp.mjs","names":["connectionStr: EventSubscriberConnectionString","url","connection: EventConnection"],"sources":["../src/Subscriber.ts"],"sourcesContent":["import type {\n EventConnection,\n EventSubscriber,\n PublishableMessage,\n} from './types';\nimport { EventPublisherType } from './types';\n\nexport class Subscriber {\n /**\n * Create a subscriber from a connection string\n * This creates both a connection and a subscriber\n */\n static async fromConnectionString<\n TMessage extends PublishableMessage<string, any>,\n >(\n connectionStr: EventSubscriberConnectionString,\n ): Promise<EventSubscriber<TMessage>> {\n const url = new URL(connectionStr);\n switch (url.protocol.replace(':', '')) {\n case EventPublisherType.Basic: {\n const { BasicConnection, BasicSubscriber } = await import('./basic');\n const connection =\n await BasicConnection.fromConnectionString(connectionStr);\n return new BasicSubscriber<TMessage>(connection);\n }\n case EventPublisherType.RabbitMQ: {\n const { RabbitMQSubscriber } = await import('./rabbitmq');\n return RabbitMQSubscriber.fromConnectionString<TMessage>(connectionStr);\n }\n case EventPublisherType.SNS: {\n const { SNSSubscriber } = await import('./sns');\n return SNSSubscriber.fromConnectionString<TMessage>(connectionStr);\n }\n case EventPublisherType.SQS: {\n const url = new URL(connectionStr);\n const topicArn = url.searchParams.get('topicArn');\n\n // If topicArn is present, use managed SNS→SQS subscription\n if (topicArn) {\n const { SNSSubscriber } = await import('./sns');\n // Convert SQS connection string to SNS connection string\n const snsConnectionStr = connectionStr.replace('sqs://', 'sns://');\n return SNSSubscriber.fromConnectionString<TMessage>(snsConnectionStr);\n }\n\n // Direct SQS subscriber\n const { SQSSubscriber } = await import('./sqs');\n const { SQSConnection } = await import('./sqs');\n const connection =\n await SQSConnection.fromConnectionString(connectionStr);\n return new SQSSubscriber<TMessage>(connection);\n }\n // Future implementations for EventBridge, Kafka, etc.\n default:\n throw new Error(`Unsupported event subscriber type: ${url.protocol}`);\n }\n }\n\n /**\n * Create a subscriber from an existing connection\n * This allows sharing connections between publishers and subscribers\n */\n static async fromConnection<TMessage extends PublishableMessage<string, any>>(\n connection: EventConnection,\n ): Promise<EventSubscriber<TMessage>> {\n switch (connection.type) {\n case EventPublisherType.Basic: {\n const { BasicSubscriber } = await import('./basic');\n const { BasicConnection } = await import('./basic');\n return new BasicSubscriber<TMessage>(\n connection as InstanceType<typeof BasicConnection>,\n );\n }\n case EventPublisherType.RabbitMQ: {\n const { RabbitMQSubscriber } = await import('./rabbitmq');\n const { RabbitMQConnection } = await import('./rabbitmq');\n return new RabbitMQSubscriber<TMessage>(\n connection as InstanceType<typeof RabbitMQConnection>,\n );\n }\n case EventPublisherType.SNS: {\n const { SNSSubscriber } = await import('./sns');\n const { SNSConnection } = await import('./sns');\n return new SNSSubscriber<TMessage>(\n connection as InstanceType<typeof SNSConnection>,\n );\n }\n case EventPublisherType.SQS: {\n const { SQSSubscriber } = await import('./sqs');\n const { SQSConnection } = await import('./sqs');\n return new SQSSubscriber<TMessage>(\n connection as InstanceType<typeof SQSConnection>,\n );\n }\n default:\n throw new Error(`Unsupported connection type: ${connection.type}`);\n }\n }\n}\n\nexport type EventSubscriberConnectionString =\n `${EventPublisherType}://${string}`;\n"],"mappings":";;;AAOA,IAAa,aAAb,MAAwB;;;;;CAKtB,aAAa,qBAGXA,eACoC;EACpC,MAAM,MAAM,IAAI,IAAI;AACpB,UAAQ,IAAI,SAAS,QAAQ,KAAK,GAAG,EAArC;GACE,KAAK,mBAAmB,OAAO;IAC7B,MAAM,EAAE,iBAAiB,iBAAiB,GAAG,MAAM,OAAO;IAC1D,MAAM,aACJ,MAAM,gBAAgB,qBAAqB,cAAc;AAC3D,WAAO,IAAI,gBAA0B;GACtC;GACD,KAAK,mBAAmB,UAAU;IAChC,MAAM,EAAE,oBAAoB,GAAG,MAAM,OAAO;AAC5C,WAAO,mBAAmB,qBAA+B,cAAc;GACxE;GACD,KAAK,mBAAmB,KAAK;IAC3B,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;AACvC,WAAO,cAAc,qBAA+B,cAAc;GACnE;GACD,KAAK,mBAAmB,KAAK;IAC3B,MAAMC,QAAM,IAAI,IAAI;IACpB,MAAM,WAAW,MAAI,aAAa,IAAI,WAAW;AAGjD,QAAI,UAAU;KACZ,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;KAEvC,MAAM,mBAAmB,cAAc,QAAQ,UAAU,SAAS;AAClE,YAAO,cAAc,qBAA+B,iBAAiB;IACtE;IAGD,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;IACvC,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;IACvC,MAAM,aACJ,MAAM,cAAc,qBAAqB,cAAc;AACzD,WAAO,IAAI,cAAwB;GACpC;GAED,QACE,OAAM,IAAI,OAAO,qCAAqC,IAAI,SAAS;EACtE;CACF;;;;;CAMD,aAAa,eACXC,YACoC;AACpC,UAAQ,WAAW,MAAnB;GACE,KAAK,mBAAmB,OAAO;IAC7B,MAAM,EAAE,iBAAiB,GAAG,MAAM,OAAO;IACzC,MAAM,EAAE,iBAAiB,GAAG,MAAM,OAAO;AACzC,WAAO,IAAI,gBACT;GAEH;GACD,KAAK,mBAAmB,UAAU;IAChC,MAAM,EAAE,oBAAoB,GAAG,MAAM,OAAO;IAC5C,MAAM,EAAE,oBAAoB,GAAG,MAAM,OAAO;AAC5C,WAAO,IAAI,mBACT;GAEH;GACD,KAAK,mBAAmB,KAAK;IAC3B,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;IACvC,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;AACvC,WAAO,IAAI,cACT;GAEH;GACD,KAAK,mBAAmB,KAAK;IAC3B,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;IACvC,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;AACvC,WAAO,IAAI,cACT;GAEH;GACD,QACE,OAAM,IAAI,OAAO,+BAA+B,WAAW,KAAK;EACnE;CACF;AACF"}
1
+ {"version":3,"file":"Subscriber-Bd9hb_jp.mjs","names":["connectionStr: EventSubscriberConnectionString","url","connection: EventConnection"],"sources":["../src/Subscriber.ts"],"sourcesContent":["import type {\n\tEventConnection,\n\tEventSubscriber,\n\tPublishableMessage,\n} from './types';\nimport { EventPublisherType } from './types';\n\nexport class Subscriber {\n\t/**\n\t * Create a subscriber from a connection string\n\t * This creates both a connection and a subscriber\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(\n\t\tconnectionStr: EventSubscriberConnectionString,\n\t): Promise<EventSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionStr);\n\t\tswitch (url.protocol.replace(':', '')) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicConnection, BasicSubscriber } = await import('./basic');\n\t\t\t\tconst connection =\n\t\t\t\t\tawait BasicConnection.fromConnectionString(connectionStr);\n\t\t\t\treturn new BasicSubscriber<TMessage>(connection);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQSubscriber } = await import('./rabbitmq');\n\t\t\t\treturn RabbitMQSubscriber.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\treturn SNSSubscriber.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst url = new URL(connectionStr);\n\t\t\t\tconst topicArn = url.searchParams.get('topicArn');\n\n\t\t\t\t// If topicArn is present, use managed SNS→SQS subscription\n\t\t\t\tif (topicArn) {\n\t\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\t\t// Convert SQS connection string to SNS connection string\n\t\t\t\t\tconst snsConnectionStr = connectionStr.replace('sqs://', 'sns://');\n\t\t\t\t\treturn SNSSubscriber.fromConnectionString<TMessage>(snsConnectionStr);\n\t\t\t\t}\n\n\t\t\t\t// Direct SQS subscriber\n\t\t\t\tconst { SQSSubscriber } = await import('./sqs');\n\t\t\t\tconst { SQSConnection } = await import('./sqs');\n\t\t\t\tconst connection =\n\t\t\t\t\tawait SQSConnection.fromConnectionString(connectionStr);\n\t\t\t\treturn new SQSSubscriber<TMessage>(connection);\n\t\t\t}\n\t\t\t// Future implementations for EventBridge, Kafka, etc.\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported event subscriber type: ${url.protocol}`);\n\t\t}\n\t}\n\n\t/**\n\t * Create a subscriber from an existing connection\n\t * This allows sharing connections between publishers and subscribers\n\t */\n\tstatic async fromConnection<TMessage extends PublishableMessage<string, any>>(\n\t\tconnection: EventConnection,\n\t): Promise<EventSubscriber<TMessage>> {\n\t\tswitch (connection.type) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicSubscriber } = await import('./basic');\n\t\t\t\tconst { BasicConnection } = await import('./basic');\n\t\t\t\treturn new BasicSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof BasicConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQSubscriber } = await import('./rabbitmq');\n\t\t\t\tconst { RabbitMQConnection } = await import('./rabbitmq');\n\t\t\t\treturn new RabbitMQSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof RabbitMQConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\tconst { SNSConnection } = await import('./sns');\n\t\t\t\treturn new SNSSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof SNSConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst { SQSSubscriber } = await import('./sqs');\n\t\t\t\tconst { SQSConnection } = await import('./sqs');\n\t\t\t\treturn new SQSSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof SQSConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported connection type: ${connection.type}`);\n\t\t}\n\t}\n}\n\nexport type EventSubscriberConnectionString =\n\t`${EventPublisherType}://${string}`;\n"],"mappings":";;;AAOA,IAAa,aAAb,MAAwB;;;;;CAKvB,aAAa,qBAGZA,eACqC;EACrC,MAAM,MAAM,IAAI,IAAI;AACpB,UAAQ,IAAI,SAAS,QAAQ,KAAK,GAAG,EAArC;GACC,KAAK,mBAAmB,OAAO;IAC9B,MAAM,EAAE,iBAAiB,iBAAiB,GAAG,MAAM,OAAO;IAC1D,MAAM,aACL,MAAM,gBAAgB,qBAAqB,cAAc;AAC1D,WAAO,IAAI,gBAA0B;GACrC;GACD,KAAK,mBAAmB,UAAU;IACjC,MAAM,EAAE,oBAAoB,GAAG,MAAM,OAAO;AAC5C,WAAO,mBAAmB,qBAA+B,cAAc;GACvE;GACD,KAAK,mBAAmB,KAAK;IAC5B,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;AACvC,WAAO,cAAc,qBAA+B,cAAc;GAClE;GACD,KAAK,mBAAmB,KAAK;IAC5B,MAAMC,QAAM,IAAI,IAAI;IACpB,MAAM,WAAW,MAAI,aAAa,IAAI,WAAW;AAGjD,QAAI,UAAU;KACb,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;KAEvC,MAAM,mBAAmB,cAAc,QAAQ,UAAU,SAAS;AAClE,YAAO,cAAc,qBAA+B,iBAAiB;IACrE;IAGD,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;IACvC,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;IACvC,MAAM,aACL,MAAM,cAAc,qBAAqB,cAAc;AACxD,WAAO,IAAI,cAAwB;GACnC;GAED,QACC,OAAM,IAAI,OAAO,qCAAqC,IAAI,SAAS;EACpE;CACD;;;;;CAMD,aAAa,eACZC,YACqC;AACrC,UAAQ,WAAW,MAAnB;GACC,KAAK,mBAAmB,OAAO;IAC9B,MAAM,EAAE,iBAAiB,GAAG,MAAM,OAAO;IACzC,MAAM,EAAE,iBAAiB,GAAG,MAAM,OAAO;AACzC,WAAO,IAAI,gBACV;GAED;GACD,KAAK,mBAAmB,UAAU;IACjC,MAAM,EAAE,oBAAoB,GAAG,MAAM,OAAO;IAC5C,MAAM,EAAE,oBAAoB,GAAG,MAAM,OAAO;AAC5C,WAAO,IAAI,mBACV;GAED;GACD,KAAK,mBAAmB,KAAK;IAC5B,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;IACvC,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;AACvC,WAAO,IAAI,cACV;GAED;GACD,KAAK,mBAAmB,KAAK;IAC5B,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;IACvC,MAAM,EAAE,eAAe,GAAG,MAAM,OAAO;AACvC,WAAO,IAAI,cACV;GAED;GACD,QACC,OAAM,IAAI,OAAO,+BAA+B,WAAW,KAAK;EACjE;CACD;AACD"}
@@ -1,4 +1,4 @@
1
- import { EventConnection, EventPublisherType, EventSubscriber, PublishableMessage } from "./types-D0g-o6wX.mjs";
1
+ import { EventConnection, EventPublisherType, EventSubscriber, PublishableMessage } from "./types-DSVsPgKd.mjs";
2
2
 
3
3
  //#region src/Subscriber.d.ts
4
4
  declare class Subscriber {
@@ -14,6 +14,8 @@ declare class Subscriber {
14
14
  static fromConnection<TMessage extends PublishableMessage<string, any>>(connection: EventConnection): Promise<EventSubscriber<TMessage>>;
15
15
  }
16
16
  type EventSubscriberConnectionString = `${EventPublisherType}://${string}`;
17
+ //# sourceMappingURL=Subscriber.d.ts.map
18
+
17
19
  //#endregion
18
20
  export { EventSubscriberConnectionString, Subscriber };
19
- //# sourceMappingURL=Subscriber-Cff9EIpv.d.mts.map
21
+ //# sourceMappingURL=Subscriber-BxT-KzFJ.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Subscriber-BxT-KzFJ.d.mts","names":[],"sources":["../src/Subscriber.ts"],"sourcesContent":[],"mappings":";;;cAOa,UAAA;EAAA;;;;EAQmC,OACpB,oBAAA,CAAA,iBAHT,kBAGS,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,aAAA,EADX,+BACW,CAAA,EAAxB,OAAwB,CAAhB,eAAgB,CAAA,QAAA,CAAA,CAAA;EAAQ;;;;EA+CP,OACD,cAAA,CAAA,iBAFkB,kBAElB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,UAAA,EADd,eACc,CAAA,EAAxB,OAAwB,CAAhB,eAAgB,CAAA,QAAA,CAAA,CAAA;;AAAxB,KAoCQ,+BAAA,GApCR,GAqCA,kBArCA,MAAA,MAAA,EAAA;AAAO"}
@@ -1,4 +1,4 @@
1
- import { EventConnection, EventPublisherType, EventSubscriber, PublishableMessage } from "./types-DEGUg5BA.cjs";
1
+ import { EventConnection, EventPublisherType, EventSubscriber, PublishableMessage } from "./types-Dmbp1U-6.cjs";
2
2
 
3
3
  //#region src/Subscriber.d.ts
4
4
  declare class Subscriber {
@@ -14,6 +14,8 @@ declare class Subscriber {
14
14
  static fromConnection<TMessage extends PublishableMessage<string, any>>(connection: EventConnection): Promise<EventSubscriber<TMessage>>;
15
15
  }
16
16
  type EventSubscriberConnectionString = `${EventPublisherType}://${string}`;
17
+ //# sourceMappingURL=Subscriber.d.ts.map
18
+
17
19
  //#endregion
18
20
  export { EventSubscriberConnectionString, Subscriber };
19
- //# sourceMappingURL=Subscriber-CpAwcUzb.d.cts.map
21
+ //# sourceMappingURL=Subscriber-DDD_4Nlx.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Subscriber-DDD_4Nlx.d.cts","names":[],"sources":["../src/Subscriber.ts"],"sourcesContent":[],"mappings":";;;cAOa,UAAA;EAAA;;;;EAQmC,OACpB,oBAAA,CAAA,iBAHT,kBAGS,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,aAAA,EADX,+BACW,CAAA,EAAxB,OAAwB,CAAhB,eAAgB,CAAA,QAAA,CAAA,CAAA;EAAQ;;;;EA+CP,OACD,cAAA,CAAA,iBAFkB,kBAElB,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,CAAA,UAAA,EADd,eACc,CAAA,EAAxB,OAAwB,CAAhB,eAAgB,CAAA,QAAA,CAAA,CAAA;;AAAxB,KAoCQ,+BAAA,GApCR,GAqCA,kBArCA,MAAA,MAAA,EAAA;AAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"Subscriber-saVOWuMq.cjs","names":["connectionStr: EventSubscriberConnectionString","EventPublisherType","url","connection: EventConnection"],"sources":["../src/Subscriber.ts"],"sourcesContent":["import type {\n EventConnection,\n EventSubscriber,\n PublishableMessage,\n} from './types';\nimport { EventPublisherType } from './types';\n\nexport class Subscriber {\n /**\n * Create a subscriber from a connection string\n * This creates both a connection and a subscriber\n */\n static async fromConnectionString<\n TMessage extends PublishableMessage<string, any>,\n >(\n connectionStr: EventSubscriberConnectionString,\n ): Promise<EventSubscriber<TMessage>> {\n const url = new URL(connectionStr);\n switch (url.protocol.replace(':', '')) {\n case EventPublisherType.Basic: {\n const { BasicConnection, BasicSubscriber } = await import('./basic');\n const connection =\n await BasicConnection.fromConnectionString(connectionStr);\n return new BasicSubscriber<TMessage>(connection);\n }\n case EventPublisherType.RabbitMQ: {\n const { RabbitMQSubscriber } = await import('./rabbitmq');\n return RabbitMQSubscriber.fromConnectionString<TMessage>(connectionStr);\n }\n case EventPublisherType.SNS: {\n const { SNSSubscriber } = await import('./sns');\n return SNSSubscriber.fromConnectionString<TMessage>(connectionStr);\n }\n case EventPublisherType.SQS: {\n const url = new URL(connectionStr);\n const topicArn = url.searchParams.get('topicArn');\n\n // If topicArn is present, use managed SNS→SQS subscription\n if (topicArn) {\n const { SNSSubscriber } = await import('./sns');\n // Convert SQS connection string to SNS connection string\n const snsConnectionStr = connectionStr.replace('sqs://', 'sns://');\n return SNSSubscriber.fromConnectionString<TMessage>(snsConnectionStr);\n }\n\n // Direct SQS subscriber\n const { SQSSubscriber } = await import('./sqs');\n const { SQSConnection } = await import('./sqs');\n const connection =\n await SQSConnection.fromConnectionString(connectionStr);\n return new SQSSubscriber<TMessage>(connection);\n }\n // Future implementations for EventBridge, Kafka, etc.\n default:\n throw new Error(`Unsupported event subscriber type: ${url.protocol}`);\n }\n }\n\n /**\n * Create a subscriber from an existing connection\n * This allows sharing connections between publishers and subscribers\n */\n static async fromConnection<TMessage extends PublishableMessage<string, any>>(\n connection: EventConnection,\n ): Promise<EventSubscriber<TMessage>> {\n switch (connection.type) {\n case EventPublisherType.Basic: {\n const { BasicSubscriber } = await import('./basic');\n const { BasicConnection } = await import('./basic');\n return new BasicSubscriber<TMessage>(\n connection as InstanceType<typeof BasicConnection>,\n );\n }\n case EventPublisherType.RabbitMQ: {\n const { RabbitMQSubscriber } = await import('./rabbitmq');\n const { RabbitMQConnection } = await import('./rabbitmq');\n return new RabbitMQSubscriber<TMessage>(\n connection as InstanceType<typeof RabbitMQConnection>,\n );\n }\n case EventPublisherType.SNS: {\n const { SNSSubscriber } = await import('./sns');\n const { SNSConnection } = await import('./sns');\n return new SNSSubscriber<TMessage>(\n connection as InstanceType<typeof SNSConnection>,\n );\n }\n case EventPublisherType.SQS: {\n const { SQSSubscriber } = await import('./sqs');\n const { SQSConnection } = await import('./sqs');\n return new SQSSubscriber<TMessage>(\n connection as InstanceType<typeof SQSConnection>,\n );\n }\n default:\n throw new Error(`Unsupported connection type: ${connection.type}`);\n }\n }\n}\n\nexport type EventSubscriberConnectionString =\n `${EventPublisherType}://${string}`;\n"],"mappings":";;;AAOA,IAAa,aAAb,MAAwB;;;;;CAKtB,aAAa,qBAGXA,eACoC;EACpC,MAAM,MAAM,IAAI,IAAI;AACpB,UAAQ,IAAI,SAAS,QAAQ,KAAK,GAAG,EAArC;GACE,KAAKC,iCAAmB,OAAO;IAC7B,MAAM,EAAE,iBAAiB,iBAAiB,GAAG,2CAAM;IACnD,MAAM,aACJ,MAAM,gBAAgB,qBAAqB,cAAc;AAC3D,WAAO,IAAI,gBAA0B;GACtC;GACD,KAAKA,iCAAmB,UAAU;IAChC,MAAM,EAAE,oBAAoB,GAAG,2CAAM;AACrC,WAAO,mBAAmB,qBAA+B,cAAc;GACxE;GACD,KAAKA,iCAAmB,KAAK;IAC3B,MAAM,EAAE,eAAe,GAAG,2CAAM;AAChC,WAAO,cAAc,qBAA+B,cAAc;GACnE;GACD,KAAKA,iCAAmB,KAAK;IAC3B,MAAMC,QAAM,IAAI,IAAI;IACpB,MAAM,WAAW,MAAI,aAAa,IAAI,WAAW;AAGjD,QAAI,UAAU;KACZ,MAAM,EAAE,eAAe,GAAG,2CAAM;KAEhC,MAAM,mBAAmB,cAAc,QAAQ,UAAU,SAAS;AAClE,YAAO,cAAc,qBAA+B,iBAAiB;IACtE;IAGD,MAAM,EAAE,eAAe,GAAG,2CAAM;IAChC,MAAM,EAAE,eAAe,GAAG,2CAAM;IAChC,MAAM,aACJ,MAAM,cAAc,qBAAqB,cAAc;AACzD,WAAO,IAAI,cAAwB;GACpC;GAED,QACE,OAAM,IAAI,OAAO,qCAAqC,IAAI,SAAS;EACtE;CACF;;;;;CAMD,aAAa,eACXC,YACoC;AACpC,UAAQ,WAAW,MAAnB;GACE,KAAKF,iCAAmB,OAAO;IAC7B,MAAM,EAAE,iBAAiB,GAAG,2CAAM;IAClC,MAAM,EAAE,iBAAiB,GAAG,2CAAM;AAClC,WAAO,IAAI,gBACT;GAEH;GACD,KAAKA,iCAAmB,UAAU;IAChC,MAAM,EAAE,oBAAoB,GAAG,2CAAM;IACrC,MAAM,EAAE,oBAAoB,GAAG,2CAAM;AACrC,WAAO,IAAI,mBACT;GAEH;GACD,KAAKA,iCAAmB,KAAK;IAC3B,MAAM,EAAE,eAAe,GAAG,2CAAM;IAChC,MAAM,EAAE,eAAe,GAAG,2CAAM;AAChC,WAAO,IAAI,cACT;GAEH;GACD,KAAKA,iCAAmB,KAAK;IAC3B,MAAM,EAAE,eAAe,GAAG,2CAAM;IAChC,MAAM,EAAE,eAAe,GAAG,2CAAM;AAChC,WAAO,IAAI,cACT;GAEH;GACD,QACE,OAAM,IAAI,OAAO,+BAA+B,WAAW,KAAK;EACnE;CACF;AACF"}
1
+ {"version":3,"file":"Subscriber-saVOWuMq.cjs","names":["connectionStr: EventSubscriberConnectionString","EventPublisherType","url","connection: EventConnection"],"sources":["../src/Subscriber.ts"],"sourcesContent":["import type {\n\tEventConnection,\n\tEventSubscriber,\n\tPublishableMessage,\n} from './types';\nimport { EventPublisherType } from './types';\n\nexport class Subscriber {\n\t/**\n\t * Create a subscriber from a connection string\n\t * This creates both a connection and a subscriber\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(\n\t\tconnectionStr: EventSubscriberConnectionString,\n\t): Promise<EventSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionStr);\n\t\tswitch (url.protocol.replace(':', '')) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicConnection, BasicSubscriber } = await import('./basic');\n\t\t\t\tconst connection =\n\t\t\t\t\tawait BasicConnection.fromConnectionString(connectionStr);\n\t\t\t\treturn new BasicSubscriber<TMessage>(connection);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQSubscriber } = await import('./rabbitmq');\n\t\t\t\treturn RabbitMQSubscriber.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\treturn SNSSubscriber.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst url = new URL(connectionStr);\n\t\t\t\tconst topicArn = url.searchParams.get('topicArn');\n\n\t\t\t\t// If topicArn is present, use managed SNS→SQS subscription\n\t\t\t\tif (topicArn) {\n\t\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\t\t// Convert SQS connection string to SNS connection string\n\t\t\t\t\tconst snsConnectionStr = connectionStr.replace('sqs://', 'sns://');\n\t\t\t\t\treturn SNSSubscriber.fromConnectionString<TMessage>(snsConnectionStr);\n\t\t\t\t}\n\n\t\t\t\t// Direct SQS subscriber\n\t\t\t\tconst { SQSSubscriber } = await import('./sqs');\n\t\t\t\tconst { SQSConnection } = await import('./sqs');\n\t\t\t\tconst connection =\n\t\t\t\t\tawait SQSConnection.fromConnectionString(connectionStr);\n\t\t\t\treturn new SQSSubscriber<TMessage>(connection);\n\t\t\t}\n\t\t\t// Future implementations for EventBridge, Kafka, etc.\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported event subscriber type: ${url.protocol}`);\n\t\t}\n\t}\n\n\t/**\n\t * Create a subscriber from an existing connection\n\t * This allows sharing connections between publishers and subscribers\n\t */\n\tstatic async fromConnection<TMessage extends PublishableMessage<string, any>>(\n\t\tconnection: EventConnection,\n\t): Promise<EventSubscriber<TMessage>> {\n\t\tswitch (connection.type) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicSubscriber } = await import('./basic');\n\t\t\t\tconst { BasicConnection } = await import('./basic');\n\t\t\t\treturn new BasicSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof BasicConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQSubscriber } = await import('./rabbitmq');\n\t\t\t\tconst { RabbitMQConnection } = await import('./rabbitmq');\n\t\t\t\treturn new RabbitMQSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof RabbitMQConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\tconst { SNSConnection } = await import('./sns');\n\t\t\t\treturn new SNSSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof SNSConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst { SQSSubscriber } = await import('./sqs');\n\t\t\t\tconst { SQSConnection } = await import('./sqs');\n\t\t\t\treturn new SQSSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof SQSConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported connection type: ${connection.type}`);\n\t\t}\n\t}\n}\n\nexport type EventSubscriberConnectionString =\n\t`${EventPublisherType}://${string}`;\n"],"mappings":";;;AAOA,IAAa,aAAb,MAAwB;;;;;CAKvB,aAAa,qBAGZA,eACqC;EACrC,MAAM,MAAM,IAAI,IAAI;AACpB,UAAQ,IAAI,SAAS,QAAQ,KAAK,GAAG,EAArC;GACC,KAAKC,iCAAmB,OAAO;IAC9B,MAAM,EAAE,iBAAiB,iBAAiB,GAAG,2CAAM;IACnD,MAAM,aACL,MAAM,gBAAgB,qBAAqB,cAAc;AAC1D,WAAO,IAAI,gBAA0B;GACrC;GACD,KAAKA,iCAAmB,UAAU;IACjC,MAAM,EAAE,oBAAoB,GAAG,2CAAM;AACrC,WAAO,mBAAmB,qBAA+B,cAAc;GACvE;GACD,KAAKA,iCAAmB,KAAK;IAC5B,MAAM,EAAE,eAAe,GAAG,2CAAM;AAChC,WAAO,cAAc,qBAA+B,cAAc;GAClE;GACD,KAAKA,iCAAmB,KAAK;IAC5B,MAAMC,QAAM,IAAI,IAAI;IACpB,MAAM,WAAW,MAAI,aAAa,IAAI,WAAW;AAGjD,QAAI,UAAU;KACb,MAAM,EAAE,eAAe,GAAG,2CAAM;KAEhC,MAAM,mBAAmB,cAAc,QAAQ,UAAU,SAAS;AAClE,YAAO,cAAc,qBAA+B,iBAAiB;IACrE;IAGD,MAAM,EAAE,eAAe,GAAG,2CAAM;IAChC,MAAM,EAAE,eAAe,GAAG,2CAAM;IAChC,MAAM,aACL,MAAM,cAAc,qBAAqB,cAAc;AACxD,WAAO,IAAI,cAAwB;GACnC;GAED,QACC,OAAM,IAAI,OAAO,qCAAqC,IAAI,SAAS;EACpE;CACD;;;;;CAMD,aAAa,eACZC,YACqC;AACrC,UAAQ,WAAW,MAAnB;GACC,KAAKF,iCAAmB,OAAO;IAC9B,MAAM,EAAE,iBAAiB,GAAG,2CAAM;IAClC,MAAM,EAAE,iBAAiB,GAAG,2CAAM;AAClC,WAAO,IAAI,gBACV;GAED;GACD,KAAKA,iCAAmB,UAAU;IACjC,MAAM,EAAE,oBAAoB,GAAG,2CAAM;IACrC,MAAM,EAAE,oBAAoB,GAAG,2CAAM;AACrC,WAAO,IAAI,mBACV;GAED;GACD,KAAKA,iCAAmB,KAAK;IAC5B,MAAM,EAAE,eAAe,GAAG,2CAAM;IAChC,MAAM,EAAE,eAAe,GAAG,2CAAM;AAChC,WAAO,IAAI,cACV;GAED;GACD,KAAKA,iCAAmB,KAAK;IAC5B,MAAM,EAAE,eAAe,GAAG,2CAAM;IAChC,MAAM,EAAE,eAAe,GAAG,2CAAM;AAChC,WAAO,IAAI,cACV;GAED;GACD,QACC,OAAM,IAAI,OAAO,+BAA+B,WAAW,KAAK;EACjE;CACD;AACD"}
@@ -1,3 +1,3 @@
1
- import "./types-DEGUg5BA.cjs";
2
- import { EventSubscriberConnectionString, Subscriber } from "./Subscriber-CpAwcUzb.cjs";
1
+ import "./types-Dmbp1U-6.cjs";
2
+ import { EventSubscriberConnectionString, Subscriber } from "./Subscriber-DDD_4Nlx.cjs";
3
3
  export { EventSubscriberConnectionString, Subscriber };
@@ -1,3 +1,3 @@
1
- import "./types-D0g-o6wX.mjs";
2
- import { EventSubscriberConnectionString, Subscriber } from "./Subscriber-Cff9EIpv.mjs";
1
+ import "./types-DSVsPgKd.mjs";
2
+ import { EventSubscriberConnectionString, Subscriber } from "./Subscriber-BxT-KzFJ.mjs";
3
3
  export { EventSubscriberConnectionString, Subscriber };
@@ -1,3 +1,3 @@
1
- import "../types-DEGUg5BA.cjs";
2
- import { BasicConnection } from "../BasicConnection-CddnULuT.cjs";
1
+ import "../types-Dmbp1U-6.cjs";
2
+ import { BasicConnection } from "../BasicConnection-BTRsXiuH.cjs";
3
3
  export { BasicConnection };
@@ -1,3 +1,3 @@
1
- import "../types-D0g-o6wX.mjs";
2
- import { BasicConnection } from "../BasicConnection-C4_Y0nIj.mjs";
1
+ import "../types-DSVsPgKd.mjs";
2
+ import { BasicConnection } from "../BasicConnection-DIxtA7jK.mjs";
3
3
  export { BasicConnection };
@@ -1,4 +1,4 @@
1
- import "../types-DEGUg5BA.cjs";
2
- import "../BasicConnection-CddnULuT.cjs";
3
- import { BasicPublisher } from "../BasicPublisher-V5hELHG9.cjs";
1
+ import "../types-Dmbp1U-6.cjs";
2
+ import "../BasicConnection-BTRsXiuH.cjs";
3
+ import { BasicPublisher } from "../BasicPublisher-D1q0a2xp.cjs";
4
4
  export { BasicPublisher };
@@ -1,4 +1,4 @@
1
- import "../types-D0g-o6wX.mjs";
2
- import "../BasicConnection-C4_Y0nIj.mjs";
3
- import { BasicPublisher } from "../BasicPublisher-DCBxaTwC.mjs";
1
+ import "../types-DSVsPgKd.mjs";
2
+ import "../BasicConnection-DIxtA7jK.mjs";
3
+ import { BasicPublisher } from "../BasicPublisher-CpJFK2oS.mjs";
4
4
  export { BasicPublisher };
@@ -1,3 +1,3 @@
1
- const require_BasicSubscriber = require('../BasicSubscriber-BGqv3c8x.cjs');
1
+ const require_BasicSubscriber = require('../BasicSubscriber-mVJRMXhZ.cjs');
2
2
 
3
3
  exports.BasicSubscriber = require_BasicSubscriber.BasicSubscriber;
@@ -1,4 +1,4 @@
1
- import "../types-DEGUg5BA.cjs";
2
- import "../BasicConnection-CddnULuT.cjs";
3
- import { BasicSubscriber } from "../BasicSubscriber-DOwgFw5j.cjs";
1
+ import "../types-Dmbp1U-6.cjs";
2
+ import "../BasicConnection-BTRsXiuH.cjs";
3
+ import { BasicSubscriber } from "../BasicSubscriber-DXxQewjc.cjs";
4
4
  export { BasicSubscriber };
@@ -1,4 +1,4 @@
1
- import "../types-D0g-o6wX.mjs";
2
- import "../BasicConnection-C4_Y0nIj.mjs";
3
- import { BasicSubscriber } from "../BasicSubscriber-BB3aKeph.mjs";
1
+ import "../types-DSVsPgKd.mjs";
2
+ import "../BasicConnection-DIxtA7jK.mjs";
3
+ import { BasicSubscriber } from "../BasicSubscriber-6w0Af4DD.mjs";
4
4
  export { BasicSubscriber };
@@ -1,3 +1,3 @@
1
- import { BasicSubscriber } from "../BasicSubscriber-CCKfbRMo.mjs";
1
+ import { BasicSubscriber } from "../BasicSubscriber-BJSZN22M.mjs";
2
2
 
3
3
  export { BasicSubscriber };
@@ -1,7 +1,7 @@
1
1
  require('../types-CvSMEO5z.cjs');
2
2
  const require_BasicConnection = require('../BasicConnection-C-Cg2FJT.cjs');
3
3
  const require_BasicPublisher = require('../BasicPublisher-CXAVKxgq.cjs');
4
- const require_BasicSubscriber = require('../BasicSubscriber-BGqv3c8x.cjs');
4
+ const require_BasicSubscriber = require('../BasicSubscriber-mVJRMXhZ.cjs');
5
5
 
6
6
  exports.BasicConnection = require_BasicConnection.BasicConnection;
7
7
  exports.BasicPublisher = require_BasicPublisher.BasicPublisher;
@@ -1,5 +1,5 @@
1
- import "../types-DEGUg5BA.cjs";
2
- import { BasicConnection } from "../BasicConnection-CddnULuT.cjs";
3
- import { BasicPublisher } from "../BasicPublisher-V5hELHG9.cjs";
4
- import { BasicSubscriber } from "../BasicSubscriber-DOwgFw5j.cjs";
1
+ import "../types-Dmbp1U-6.cjs";
2
+ import { BasicConnection } from "../BasicConnection-BTRsXiuH.cjs";
3
+ import { BasicPublisher } from "../BasicPublisher-D1q0a2xp.cjs";
4
+ import { BasicSubscriber } from "../BasicSubscriber-DXxQewjc.cjs";
5
5
  export { BasicConnection, BasicPublisher, BasicSubscriber };
@@ -1,5 +1,5 @@
1
- import "../types-D0g-o6wX.mjs";
2
- import { BasicConnection } from "../BasicConnection-C4_Y0nIj.mjs";
3
- import { BasicPublisher } from "../BasicPublisher-DCBxaTwC.mjs";
4
- import { BasicSubscriber } from "../BasicSubscriber-BB3aKeph.mjs";
1
+ import "../types-DSVsPgKd.mjs";
2
+ import { BasicConnection } from "../BasicConnection-DIxtA7jK.mjs";
3
+ import { BasicPublisher } from "../BasicPublisher-CpJFK2oS.mjs";
4
+ import { BasicSubscriber } from "../BasicSubscriber-6w0Af4DD.mjs";
5
5
  export { BasicConnection, BasicPublisher, BasicSubscriber };
@@ -1,6 +1,6 @@
1
1
  import "../types-B63qHVOG.mjs";
2
2
  import { BasicConnection } from "../BasicConnection-CpwybcC9.mjs";
3
3
  import { BasicPublisher } from "../BasicPublisher-DogbeHAH.mjs";
4
- import { BasicSubscriber } from "../BasicSubscriber-CCKfbRMo.mjs";
4
+ import { BasicSubscriber } from "../BasicSubscriber-BJSZN22M.mjs";
5
5
 
6
6
  export { BasicConnection, BasicPublisher, BasicSubscriber };
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { EventConnection, EventPublisher, EventPublisherType, EventSubscriber, ExtractPublisherMessage, MappedEvent, PublishableMessage } from "./types-DEGUg5BA.cjs";
2
- import { EventConnectionFactory } from "./EventConnection-DZhn1Msl.cjs";
3
- import { EventPublisherConnectionString, Publisher } from "./Publisher-nXNVjL0e.cjs";
4
- import { EventSubscriberConnectionString, Subscriber } from "./Subscriber-CpAwcUzb.cjs";
1
+ import { EventConnection, EventPublisher, EventPublisherType, EventSubscriber, ExtractPublisherMessage, MappedEvent, PublishableMessage } from "./types-Dmbp1U-6.cjs";
2
+ import { EventConnectionFactory } from "./EventConnection-BaJRXdg7.cjs";
3
+ import { EventPublisherConnectionString, Publisher } from "./Publisher-BfNgvHwQ.cjs";
4
+ import { EventSubscriberConnectionString, Subscriber } from "./Subscriber-DDD_4Nlx.cjs";
5
5
  export { EventConnection, EventConnectionFactory, EventPublisher, EventPublisherConnectionString, EventPublisherType, EventSubscriber, EventSubscriberConnectionString, ExtractPublisherMessage, MappedEvent, PublishableMessage, Publisher, Subscriber };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { EventConnection, EventPublisher, EventPublisherType, EventSubscriber, ExtractPublisherMessage, MappedEvent, PublishableMessage } from "./types-D0g-o6wX.mjs";
2
- import { EventConnectionFactory } from "./EventConnection-DeXfLGom.mjs";
3
- import { EventPublisherConnectionString, Publisher } from "./Publisher-C3m8JFXm.mjs";
4
- import { EventSubscriberConnectionString, Subscriber } from "./Subscriber-Cff9EIpv.mjs";
1
+ import { EventConnection, EventPublisher, EventPublisherType, EventSubscriber, ExtractPublisherMessage, MappedEvent, PublishableMessage } from "./types-DSVsPgKd.mjs";
2
+ import { EventConnectionFactory } from "./EventConnection-SOhtmxib.mjs";
3
+ import { EventPublisherConnectionString, Publisher } from "./Publisher-1CfcYRnm.mjs";
4
+ import { EventSubscriberConnectionString, Subscriber } from "./Subscriber-BxT-KzFJ.mjs";
5
5
  export { EventConnection, EventConnectionFactory, EventPublisher, EventPublisherConnectionString, EventPublisherType, EventSubscriber, EventSubscriberConnectionString, ExtractPublisherMessage, MappedEvent, PublishableMessage, Publisher, Subscriber };
@@ -1,4 +1,4 @@
1
1
  require('../types-CvSMEO5z.cjs');
2
- const require_RabbitMQConnection = require('../RabbitMQConnection-ungB0Zl6.cjs');
2
+ const require_RabbitMQConnection = require('../RabbitMQConnection-Blj9Lo05.cjs');
3
3
 
4
4
  exports.RabbitMQConnection = require_RabbitMQConnection.RabbitMQConnection;