@azure/event-hubs 5.13.0-alpha.20241017.1 → 5.13.0-alpha.20241115.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/dist/browser/batchingPartitionChannel.d.ts +3 -3
  2. package/dist/browser/batchingPartitionChannel.d.ts.map +1 -1
  3. package/dist/browser/batchingPartitionChannel.js.map +1 -1
  4. package/dist/browser/connectionContext.d.ts +8 -7
  5. package/dist/browser/connectionContext.d.ts.map +1 -1
  6. package/dist/browser/connectionContext.js +2 -4
  7. package/dist/browser/connectionContext.js.map +1 -1
  8. package/dist/browser/diagnostics/instrumentEventData.d.ts +5 -5
  9. package/dist/browser/diagnostics/instrumentEventData.d.ts.map +1 -1
  10. package/dist/browser/diagnostics/instrumentEventData.js.map +1 -1
  11. package/dist/browser/diagnostics/tracing.d.ts +2 -2
  12. package/dist/browser/diagnostics/tracing.d.ts.map +1 -1
  13. package/dist/browser/diagnostics/tracing.js.map +1 -1
  14. package/dist/browser/eventData.d.ts +2 -2
  15. package/dist/browser/eventData.d.ts.map +1 -1
  16. package/dist/browser/eventData.js +2 -2
  17. package/dist/browser/eventData.js.map +1 -1
  18. package/dist/browser/eventDataAdapter.d.ts +1 -1
  19. package/dist/browser/eventDataAdapter.d.ts.map +1 -1
  20. package/dist/browser/eventDataAdapter.js.map +1 -1
  21. package/dist/browser/eventDataBatch.d.ts +5 -5
  22. package/dist/browser/eventDataBatch.d.ts.map +1 -1
  23. package/dist/browser/eventDataBatch.js.map +1 -1
  24. package/dist/browser/eventHubBufferedProducerClient.d.ts +6 -6
  25. package/dist/browser/eventHubBufferedProducerClient.d.ts.map +1 -1
  26. package/dist/browser/eventHubBufferedProducerClient.js.map +1 -1
  27. package/dist/browser/eventHubConsumerClient.d.ts +5 -5
  28. package/dist/browser/eventHubConsumerClient.d.ts.map +1 -1
  29. package/dist/browser/eventHubConsumerClient.js.map +1 -1
  30. package/dist/browser/eventHubConsumerClientModels.d.ts +6 -6
  31. package/dist/browser/eventHubConsumerClientModels.d.ts.map +1 -1
  32. package/dist/browser/eventHubConsumerClientModels.js.map +1 -1
  33. package/dist/browser/eventHubProducerClient.d.ts +7 -7
  34. package/dist/browser/eventHubProducerClient.d.ts.map +1 -1
  35. package/dist/browser/eventHubProducerClient.js.map +1 -1
  36. package/dist/browser/eventHubSender.d.ts +8 -8
  37. package/dist/browser/eventHubSender.d.ts.map +1 -1
  38. package/dist/browser/eventHubSender.js +3 -3
  39. package/dist/browser/eventHubSender.js.map +1 -1
  40. package/dist/browser/eventProcessor.d.ts +6 -6
  41. package/dist/browser/eventProcessor.d.ts.map +1 -1
  42. package/dist/browser/eventProcessor.js.map +1 -1
  43. package/dist/browser/impl/awaitableQueue.d.ts +1 -1
  44. package/dist/browser/impl/awaitableQueue.d.ts.map +1 -1
  45. package/dist/browser/impl/awaitableQueue.js.map +1 -1
  46. package/dist/browser/inMemoryCheckpointStore.d.ts +2 -2
  47. package/dist/browser/inMemoryCheckpointStore.d.ts.map +1 -1
  48. package/dist/browser/inMemoryCheckpointStore.js.map +1 -1
  49. package/dist/browser/loadBalancerStrategies/balancedStrategy.d.ts +2 -2
  50. package/dist/browser/loadBalancerStrategies/balancedStrategy.d.ts.map +1 -1
  51. package/dist/browser/loadBalancerStrategies/balancedStrategy.js.map +1 -1
  52. package/dist/browser/loadBalancerStrategies/greedyStrategy.d.ts +2 -2
  53. package/dist/browser/loadBalancerStrategies/greedyStrategy.d.ts.map +1 -1
  54. package/dist/browser/loadBalancerStrategies/greedyStrategy.js.map +1 -1
  55. package/dist/browser/loadBalancerStrategies/loadBalancingStrategy.d.ts +1 -1
  56. package/dist/browser/loadBalancerStrategies/loadBalancingStrategy.d.ts.map +1 -1
  57. package/dist/browser/loadBalancerStrategies/loadBalancingStrategy.js.map +1 -1
  58. package/dist/browser/loadBalancerStrategies/unbalancedStrategy.d.ts +2 -2
  59. package/dist/browser/loadBalancerStrategies/unbalancedStrategy.d.ts.map +1 -1
  60. package/dist/browser/loadBalancerStrategies/unbalancedStrategy.js.map +1 -1
  61. package/dist/browser/logger.d.ts +1 -1
  62. package/dist/browser/logger.d.ts.map +1 -1
  63. package/dist/browser/logger.js.map +1 -1
  64. package/dist/browser/managementClient.d.ts +4 -4
  65. package/dist/browser/managementClient.d.ts.map +1 -1
  66. package/dist/browser/managementClient.js +1 -1
  67. package/dist/browser/managementClient.js.map +1 -1
  68. package/dist/browser/models/private.d.ts +5 -5
  69. package/dist/browser/models/private.d.ts.map +1 -1
  70. package/dist/browser/models/private.js +1 -1
  71. package/dist/browser/models/private.js.map +1 -1
  72. package/dist/browser/models/public.d.ts +2 -2
  73. package/dist/browser/models/public.d.ts.map +1 -1
  74. package/dist/browser/models/public.js.map +1 -1
  75. package/dist/browser/partitionProcessor.d.ts +5 -5
  76. package/dist/browser/partitionProcessor.d.ts.map +1 -1
  77. package/dist/browser/partitionProcessor.js.map +1 -1
  78. package/dist/browser/partitionPump.d.ts +7 -7
  79. package/dist/browser/partitionPump.d.ts.map +1 -1
  80. package/dist/browser/partitionPump.js.map +1 -1
  81. package/dist/browser/partitionReceiver.d.ts +6 -6
  82. package/dist/browser/partitionReceiver.d.ts.map +1 -1
  83. package/dist/browser/partitionReceiver.js +1 -1
  84. package/dist/browser/partitionReceiver.js.map +1 -1
  85. package/dist/browser/pumpManager.d.ts +5 -5
  86. package/dist/browser/pumpManager.d.ts.map +1 -1
  87. package/dist/browser/pumpManager.js.map +1 -1
  88. package/dist/browser/util/delayWithoutThrow.d.ts +1 -1
  89. package/dist/browser/util/delayWithoutThrow.d.ts.map +1 -1
  90. package/dist/browser/util/delayWithoutThrow.js.map +1 -1
  91. package/dist/browser/util/error.d.ts +3 -3
  92. package/dist/browser/util/error.d.ts.map +1 -1
  93. package/dist/browser/util/error.js.map +1 -1
  94. package/dist/browser/util/operationOptions.d.ts +2 -2
  95. package/dist/browser/util/operationOptions.d.ts.map +1 -1
  96. package/dist/browser/util/operationOptions.js.map +1 -1
  97. package/dist/browser/util/retries.d.ts +1 -1
  98. package/dist/browser/util/retries.d.ts.map +1 -1
  99. package/dist/browser/util/retries.js.map +1 -1
  100. package/dist/browser/util/typeGuards.d.ts +1 -1
  101. package/dist/browser/util/typeGuards.d.ts.map +1 -1
  102. package/dist/browser/util/typeGuards.js +1 -1
  103. package/dist/browser/util/typeGuards.js.map +1 -1
  104. package/dist/browser/withAuth.d.ts +5 -5
  105. package/dist/browser/withAuth.d.ts.map +1 -1
  106. package/dist/browser/withAuth.js +1 -1
  107. package/dist/browser/withAuth.js.map +1 -1
  108. package/dist/commonjs/batchingPartitionChannel.d.ts +3 -3
  109. package/dist/commonjs/batchingPartitionChannel.d.ts.map +1 -1
  110. package/dist/commonjs/batchingPartitionChannel.js.map +1 -1
  111. package/dist/commonjs/connectionContext.d.ts +8 -7
  112. package/dist/commonjs/connectionContext.d.ts.map +1 -1
  113. package/dist/commonjs/connectionContext.js +0 -2
  114. package/dist/commonjs/connectionContext.js.map +1 -1
  115. package/dist/commonjs/diagnostics/instrumentEventData.d.ts +5 -5
  116. package/dist/commonjs/diagnostics/instrumentEventData.d.ts.map +1 -1
  117. package/dist/commonjs/diagnostics/instrumentEventData.js.map +1 -1
  118. package/dist/commonjs/diagnostics/tracing.d.ts +2 -2
  119. package/dist/commonjs/diagnostics/tracing.d.ts.map +1 -1
  120. package/dist/commonjs/diagnostics/tracing.js.map +1 -1
  121. package/dist/commonjs/eventData.d.ts +2 -2
  122. package/dist/commonjs/eventData.d.ts.map +1 -1
  123. package/dist/commonjs/eventData.js.map +1 -1
  124. package/dist/commonjs/eventDataAdapter.d.ts +1 -1
  125. package/dist/commonjs/eventDataAdapter.d.ts.map +1 -1
  126. package/dist/commonjs/eventDataAdapter.js.map +1 -1
  127. package/dist/commonjs/eventDataBatch.d.ts +5 -5
  128. package/dist/commonjs/eventDataBatch.d.ts.map +1 -1
  129. package/dist/commonjs/eventDataBatch.js.map +1 -1
  130. package/dist/commonjs/eventHubBufferedProducerClient.d.ts +6 -6
  131. package/dist/commonjs/eventHubBufferedProducerClient.d.ts.map +1 -1
  132. package/dist/commonjs/eventHubBufferedProducerClient.js.map +1 -1
  133. package/dist/commonjs/eventHubConsumerClient.d.ts +5 -5
  134. package/dist/commonjs/eventHubConsumerClient.d.ts.map +1 -1
  135. package/dist/commonjs/eventHubConsumerClient.js.map +1 -1
  136. package/dist/commonjs/eventHubConsumerClientModels.d.ts +6 -6
  137. package/dist/commonjs/eventHubConsumerClientModels.d.ts.map +1 -1
  138. package/dist/commonjs/eventHubConsumerClientModels.js.map +1 -1
  139. package/dist/commonjs/eventHubProducerClient.d.ts +7 -7
  140. package/dist/commonjs/eventHubProducerClient.d.ts.map +1 -1
  141. package/dist/commonjs/eventHubProducerClient.js.map +1 -1
  142. package/dist/commonjs/eventHubSender.d.ts +8 -8
  143. package/dist/commonjs/eventHubSender.d.ts.map +1 -1
  144. package/dist/commonjs/eventHubSender.js.map +1 -1
  145. package/dist/commonjs/eventProcessor.d.ts +6 -6
  146. package/dist/commonjs/eventProcessor.d.ts.map +1 -1
  147. package/dist/commonjs/eventProcessor.js.map +1 -1
  148. package/dist/commonjs/impl/awaitableQueue.d.ts +1 -1
  149. package/dist/commonjs/impl/awaitableQueue.d.ts.map +1 -1
  150. package/dist/commonjs/impl/awaitableQueue.js.map +1 -1
  151. package/dist/commonjs/inMemoryCheckpointStore.d.ts +2 -2
  152. package/dist/commonjs/inMemoryCheckpointStore.d.ts.map +1 -1
  153. package/dist/commonjs/inMemoryCheckpointStore.js.map +1 -1
  154. package/dist/commonjs/loadBalancerStrategies/balancedStrategy.d.ts +2 -2
  155. package/dist/commonjs/loadBalancerStrategies/balancedStrategy.d.ts.map +1 -1
  156. package/dist/commonjs/loadBalancerStrategies/balancedStrategy.js.map +1 -1
  157. package/dist/commonjs/loadBalancerStrategies/greedyStrategy.d.ts +2 -2
  158. package/dist/commonjs/loadBalancerStrategies/greedyStrategy.d.ts.map +1 -1
  159. package/dist/commonjs/loadBalancerStrategies/greedyStrategy.js.map +1 -1
  160. package/dist/commonjs/loadBalancerStrategies/loadBalancingStrategy.d.ts +1 -1
  161. package/dist/commonjs/loadBalancerStrategies/loadBalancingStrategy.d.ts.map +1 -1
  162. package/dist/commonjs/loadBalancerStrategies/loadBalancingStrategy.js.map +1 -1
  163. package/dist/commonjs/loadBalancerStrategies/unbalancedStrategy.d.ts +2 -2
  164. package/dist/commonjs/loadBalancerStrategies/unbalancedStrategy.d.ts.map +1 -1
  165. package/dist/commonjs/loadBalancerStrategies/unbalancedStrategy.js.map +1 -1
  166. package/dist/commonjs/logger.d.ts +1 -1
  167. package/dist/commonjs/logger.d.ts.map +1 -1
  168. package/dist/commonjs/logger.js.map +1 -1
  169. package/dist/commonjs/managementClient.d.ts +4 -4
  170. package/dist/commonjs/managementClient.d.ts.map +1 -1
  171. package/dist/commonjs/managementClient.js.map +1 -1
  172. package/dist/commonjs/models/private.d.ts +5 -5
  173. package/dist/commonjs/models/private.d.ts.map +1 -1
  174. package/dist/commonjs/models/private.js +0 -1
  175. package/dist/commonjs/models/private.js.map +1 -1
  176. package/dist/commonjs/models/public.d.ts +2 -2
  177. package/dist/commonjs/models/public.d.ts.map +1 -1
  178. package/dist/commonjs/models/public.js.map +1 -1
  179. package/dist/commonjs/partitionProcessor.d.ts +5 -5
  180. package/dist/commonjs/partitionProcessor.d.ts.map +1 -1
  181. package/dist/commonjs/partitionProcessor.js.map +1 -1
  182. package/dist/commonjs/partitionPump.d.ts +7 -7
  183. package/dist/commonjs/partitionPump.d.ts.map +1 -1
  184. package/dist/commonjs/partitionPump.js.map +1 -1
  185. package/dist/commonjs/partitionReceiver.d.ts +6 -6
  186. package/dist/commonjs/partitionReceiver.d.ts.map +1 -1
  187. package/dist/commonjs/partitionReceiver.js.map +1 -1
  188. package/dist/commonjs/pumpManager.d.ts +5 -5
  189. package/dist/commonjs/pumpManager.d.ts.map +1 -1
  190. package/dist/commonjs/pumpManager.js.map +1 -1
  191. package/dist/commonjs/tsdoc-metadata.json +1 -1
  192. package/dist/commonjs/util/delayWithoutThrow.d.ts +1 -1
  193. package/dist/commonjs/util/delayWithoutThrow.d.ts.map +1 -1
  194. package/dist/commonjs/util/delayWithoutThrow.js.map +1 -1
  195. package/dist/commonjs/util/error.d.ts +3 -3
  196. package/dist/commonjs/util/error.d.ts.map +1 -1
  197. package/dist/commonjs/util/error.js.map +1 -1
  198. package/dist/commonjs/util/operationOptions.d.ts +2 -2
  199. package/dist/commonjs/util/operationOptions.d.ts.map +1 -1
  200. package/dist/commonjs/util/operationOptions.js.map +1 -1
  201. package/dist/commonjs/util/retries.d.ts +1 -1
  202. package/dist/commonjs/util/retries.d.ts.map +1 -1
  203. package/dist/commonjs/util/retries.js.map +1 -1
  204. package/dist/commonjs/util/typeGuards.d.ts +1 -1
  205. package/dist/commonjs/util/typeGuards.d.ts.map +1 -1
  206. package/dist/commonjs/util/typeGuards.js.map +1 -1
  207. package/dist/commonjs/withAuth.d.ts +5 -5
  208. package/dist/commonjs/withAuth.d.ts.map +1 -1
  209. package/dist/commonjs/withAuth.js.map +1 -1
  210. package/dist/esm/batchingPartitionChannel.d.ts +3 -3
  211. package/dist/esm/batchingPartitionChannel.d.ts.map +1 -1
  212. package/dist/esm/batchingPartitionChannel.js.map +1 -1
  213. package/dist/esm/connectionContext.d.ts +8 -7
  214. package/dist/esm/connectionContext.d.ts.map +1 -1
  215. package/dist/esm/connectionContext.js +2 -4
  216. package/dist/esm/connectionContext.js.map +1 -1
  217. package/dist/esm/diagnostics/instrumentEventData.d.ts +5 -5
  218. package/dist/esm/diagnostics/instrumentEventData.d.ts.map +1 -1
  219. package/dist/esm/diagnostics/instrumentEventData.js.map +1 -1
  220. package/dist/esm/diagnostics/tracing.d.ts +2 -2
  221. package/dist/esm/diagnostics/tracing.d.ts.map +1 -1
  222. package/dist/esm/diagnostics/tracing.js.map +1 -1
  223. package/dist/esm/eventData.d.ts +2 -2
  224. package/dist/esm/eventData.d.ts.map +1 -1
  225. package/dist/esm/eventData.js +2 -2
  226. package/dist/esm/eventData.js.map +1 -1
  227. package/dist/esm/eventDataAdapter.d.ts +1 -1
  228. package/dist/esm/eventDataAdapter.d.ts.map +1 -1
  229. package/dist/esm/eventDataAdapter.js.map +1 -1
  230. package/dist/esm/eventDataBatch.d.ts +5 -5
  231. package/dist/esm/eventDataBatch.d.ts.map +1 -1
  232. package/dist/esm/eventDataBatch.js.map +1 -1
  233. package/dist/esm/eventHubBufferedProducerClient.d.ts +6 -6
  234. package/dist/esm/eventHubBufferedProducerClient.d.ts.map +1 -1
  235. package/dist/esm/eventHubBufferedProducerClient.js.map +1 -1
  236. package/dist/esm/eventHubConsumerClient.d.ts +5 -5
  237. package/dist/esm/eventHubConsumerClient.d.ts.map +1 -1
  238. package/dist/esm/eventHubConsumerClient.js.map +1 -1
  239. package/dist/esm/eventHubConsumerClientModels.d.ts +6 -6
  240. package/dist/esm/eventHubConsumerClientModels.d.ts.map +1 -1
  241. package/dist/esm/eventHubConsumerClientModels.js.map +1 -1
  242. package/dist/esm/eventHubProducerClient.d.ts +7 -7
  243. package/dist/esm/eventHubProducerClient.d.ts.map +1 -1
  244. package/dist/esm/eventHubProducerClient.js.map +1 -1
  245. package/dist/esm/eventHubSender.d.ts +8 -8
  246. package/dist/esm/eventHubSender.d.ts.map +1 -1
  247. package/dist/esm/eventHubSender.js +3 -3
  248. package/dist/esm/eventHubSender.js.map +1 -1
  249. package/dist/esm/eventProcessor.d.ts +6 -6
  250. package/dist/esm/eventProcessor.d.ts.map +1 -1
  251. package/dist/esm/eventProcessor.js.map +1 -1
  252. package/dist/esm/impl/awaitableQueue.d.ts +1 -1
  253. package/dist/esm/impl/awaitableQueue.d.ts.map +1 -1
  254. package/dist/esm/impl/awaitableQueue.js.map +1 -1
  255. package/dist/esm/inMemoryCheckpointStore.d.ts +2 -2
  256. package/dist/esm/inMemoryCheckpointStore.d.ts.map +1 -1
  257. package/dist/esm/inMemoryCheckpointStore.js.map +1 -1
  258. package/dist/esm/loadBalancerStrategies/balancedStrategy.d.ts +2 -2
  259. package/dist/esm/loadBalancerStrategies/balancedStrategy.d.ts.map +1 -1
  260. package/dist/esm/loadBalancerStrategies/balancedStrategy.js.map +1 -1
  261. package/dist/esm/loadBalancerStrategies/greedyStrategy.d.ts +2 -2
  262. package/dist/esm/loadBalancerStrategies/greedyStrategy.d.ts.map +1 -1
  263. package/dist/esm/loadBalancerStrategies/greedyStrategy.js.map +1 -1
  264. package/dist/esm/loadBalancerStrategies/loadBalancingStrategy.d.ts +1 -1
  265. package/dist/esm/loadBalancerStrategies/loadBalancingStrategy.d.ts.map +1 -1
  266. package/dist/esm/loadBalancerStrategies/loadBalancingStrategy.js.map +1 -1
  267. package/dist/esm/loadBalancerStrategies/unbalancedStrategy.d.ts +2 -2
  268. package/dist/esm/loadBalancerStrategies/unbalancedStrategy.d.ts.map +1 -1
  269. package/dist/esm/loadBalancerStrategies/unbalancedStrategy.js.map +1 -1
  270. package/dist/esm/logger.d.ts +1 -1
  271. package/dist/esm/logger.d.ts.map +1 -1
  272. package/dist/esm/logger.js.map +1 -1
  273. package/dist/esm/managementClient.d.ts +4 -4
  274. package/dist/esm/managementClient.d.ts.map +1 -1
  275. package/dist/esm/managementClient.js +1 -1
  276. package/dist/esm/managementClient.js.map +1 -1
  277. package/dist/esm/models/private.d.ts +5 -5
  278. package/dist/esm/models/private.d.ts.map +1 -1
  279. package/dist/esm/models/private.js +1 -1
  280. package/dist/esm/models/private.js.map +1 -1
  281. package/dist/esm/models/public.d.ts +2 -2
  282. package/dist/esm/models/public.d.ts.map +1 -1
  283. package/dist/esm/models/public.js.map +1 -1
  284. package/dist/esm/partitionProcessor.d.ts +5 -5
  285. package/dist/esm/partitionProcessor.d.ts.map +1 -1
  286. package/dist/esm/partitionProcessor.js.map +1 -1
  287. package/dist/esm/partitionPump.d.ts +7 -7
  288. package/dist/esm/partitionPump.d.ts.map +1 -1
  289. package/dist/esm/partitionPump.js.map +1 -1
  290. package/dist/esm/partitionReceiver.d.ts +6 -6
  291. package/dist/esm/partitionReceiver.d.ts.map +1 -1
  292. package/dist/esm/partitionReceiver.js +1 -1
  293. package/dist/esm/partitionReceiver.js.map +1 -1
  294. package/dist/esm/pumpManager.d.ts +5 -5
  295. package/dist/esm/pumpManager.d.ts.map +1 -1
  296. package/dist/esm/pumpManager.js.map +1 -1
  297. package/dist/esm/util/delayWithoutThrow.d.ts +1 -1
  298. package/dist/esm/util/delayWithoutThrow.d.ts.map +1 -1
  299. package/dist/esm/util/delayWithoutThrow.js.map +1 -1
  300. package/dist/esm/util/error.d.ts +3 -3
  301. package/dist/esm/util/error.d.ts.map +1 -1
  302. package/dist/esm/util/error.js.map +1 -1
  303. package/dist/esm/util/operationOptions.d.ts +2 -2
  304. package/dist/esm/util/operationOptions.d.ts.map +1 -1
  305. package/dist/esm/util/operationOptions.js.map +1 -1
  306. package/dist/esm/util/retries.d.ts +1 -1
  307. package/dist/esm/util/retries.d.ts.map +1 -1
  308. package/dist/esm/util/retries.js.map +1 -1
  309. package/dist/esm/util/typeGuards.d.ts +1 -1
  310. package/dist/esm/util/typeGuards.d.ts.map +1 -1
  311. package/dist/esm/util/typeGuards.js +1 -1
  312. package/dist/esm/util/typeGuards.js.map +1 -1
  313. package/dist/esm/withAuth.d.ts +5 -5
  314. package/dist/esm/withAuth.d.ts.map +1 -1
  315. package/dist/esm/withAuth.js +1 -1
  316. package/dist/esm/withAuth.js.map +1 -1
  317. package/dist/event-hubs.d.ts +5 -5
  318. package/package.json +5 -9
@@ -1 +1 @@
1
- {"version":3,"file":"partitionReceiver.js","sourceRoot":"","sources":["../../src/partitionReceiver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { AbortError, AbortSignalLike } from \"@azure/abort-controller\";\nimport {\n Constants,\n MessagingError,\n RetryOperationType,\n StandardAbortMessage,\n retry,\n translate,\n RetryConfig,\n} from \"@azure/core-amqp\";\nimport {\n EventContext,\n Receiver as Link,\n ReceiverOptions as RheaReceiverOptions,\n Source,\n types,\n} from \"rhea-promise\";\nimport { EventDataInternal, ReceivedEventData, fromRheaMessage } from \"./eventData.js\";\nimport { EventPosition, getEventPositionFilter } from \"./eventPosition.js\";\nimport {\n createSimpleLogger,\n logErrorStackTrace,\n logObj,\n logger as azureLogger,\n SimpleLogger,\n createReceiverLogPrefix,\n} from \"./logger.js\";\nimport { ConnectionContext } from \"./connectionContext.js\";\nimport { PartitionReceiverOptions } from \"./models/private.js\";\nimport { getRetryAttemptTimeoutInMs } from \"./util/retries.js\";\nimport { createAbortablePromise } from \"@azure/core-util\";\nimport { TimerLoop } from \"./util/timerLoop.js\";\nimport { getRandomName } from \"./util/utils.js\";\nimport { withAuth } from \"./withAuth.js\";\nimport { geoReplication, receiverIdPropertyName } from \"./util/constants.js\";\n\ntype Writable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n/** @internal */\nexport type WritableReceiver = Writable<PartitionReceiver>;\n\nconst abortLogMessage = \"operation has been cancelled by the user\";\n/** The time to wait in ms before attempting to read from the queue */\nconst qReadIntervalInMs = 20;\n\n/**\n * A set of information about the last enqueued event of a partition, as observed by the consumer as\n * events are received from the Event Hubs service\n */\nexport interface LastEnqueuedEventProperties {\n /**\n * The sequence number of the event that was last enqueued into the Event Hub partition from which\n * this event was received.\n */\n sequenceNumber?: number;\n /**\n * The date and time, in UTC, that the last event was enqueued into the Event Hub partition from\n * which this event was received.\n */\n enqueuedOn?: Date;\n /**\n * The offset of the event that was last enqueued into the Event Hub partition from which\n * this event was received.\n */\n offset?: string;\n /**\n * The date and time, in UTC, that the last event was retrieved from the Event Hub partition.\n */\n retrievedOn?: Date;\n}\n\n/** @internal */\nexport interface PartitionReceiver {\n readonly checkpoint: number;\n readonly lastEnqueuedEventProperties: LastEnqueuedEventProperties;\n readonly isClosed: boolean;\n readonly close: () => Promise<void>;\n readonly abort: () => Promise<void>;\n readonly isOpen: () => boolean;\n readonly receiveBatch: (\n maxMessageCount: number,\n maxWaitTimeInSeconds?: number,\n abortSignal?: AbortSignalLike,\n ) => Promise<ReceivedEventData[]>;\n /** Needed for tests only */\n readonly _onError?: (error: MessagingError | Error) => void;\n readonly connect: (options: ConnectOptions) => Promise<void>;\n}\n\ninterface ConnectOptions {\n abortSignal: AbortSignalLike | undefined;\n timeoutInMs: number;\n}\n\ninterface ReceiverState {\n link?: Link;\n authLoop?: TimerLoop;\n isConnecting: boolean;\n}\n\n/** @internal */\nexport function createReceiver(\n ctx: ConnectionContext,\n consumerGroup: string,\n consumerId: string,\n partitionId: string,\n eventPosition: EventPosition,\n options: PartitionReceiverOptions = {},\n): PartitionReceiver {\n const address = ctx.config.getReceiverAddress(partitionId, consumerGroup);\n const name = getRandomName(address);\n const audience = ctx.config.getReceiverAudience(partitionId, consumerGroup);\n const logPrefix = createReceiverLogPrefix(consumerId, ctx.connectionId, partitionId);\n const logger = createSimpleLogger(azureLogger, logPrefix);\n const queue: ReceivedEventData[] = [];\n const state: ReceiverState = {\n isConnecting: false,\n };\n\n const obj: WritableReceiver = {\n _onError: undefined,\n checkpoint: -1,\n lastEnqueuedEventProperties: {},\n isClosed: false,\n close: async () => {\n clearHandlers(obj);\n delete ctx.receivers[name];\n logger.verbose(\"deleted the receiver from the client cache\");\n state.authLoop?.stop();\n return state.link\n ?.close()\n .catch((err) => {\n logger.warning(`an error occurred while closing: ${err?.name}: ${err?.message}`);\n logErrorStackTrace(err);\n throw err;\n })\n .finally(() => {\n obj.isClosed = true;\n logger.verbose(\"is closed\");\n state.link = undefined;\n state.authLoop = undefined;\n });\n },\n abort: () => {\n obj._onError?.(new AbortError(StandardAbortMessage));\n logger.info(abortLogMessage);\n return obj.close();\n },\n isOpen: () => {\n const isOpen = !!state.link?.isOpen();\n logger.verbose(`is open? -> ${isOpen}`);\n return isOpen;\n },\n async connect({ abortSignal, timeoutInMs }: ConnectOptions): Promise<void> {\n if (state.isConnecting || obj.isOpen()) {\n return;\n }\n state.isConnecting = true;\n logger.verbose(\"is trying to connect\");\n try {\n await ctx.readyToOpenLink({ abortSignal });\n state.authLoop = await withAuth(\n () =>\n setupLink(\n consumerId,\n ctx,\n name,\n address,\n obj,\n state,\n queue,\n eventPosition,\n logger,\n options,\n abortSignal,\n ),\n ctx,\n audience,\n timeoutInMs,\n logger,\n {\n abortSignal,\n },\n );\n } catch (err) {\n state.isConnecting = false;\n const error = translate(err);\n logger.error(\n `an error occurred while creating the receiver: ${error?.name}: ${error?.message}`,\n );\n logErrorStackTrace(err);\n throw error;\n }\n },\n receiveBatch: (\n maxMessageCount: number,\n maxWaitTimeInSeconds: number = 60,\n abortSignal?: AbortSignalLike,\n ) => {\n const prefetchCount = options.prefetchCount ?? maxMessageCount * 3;\n const cleanupBeforeAbort = (): Promise<void> => {\n logger.info(abortLogMessage);\n return obj.close();\n };\n const retrieveEvents = (): Promise<ReceivedEventData[]> => {\n const eventsToRetrieveCount = Math.max(maxMessageCount - queue.length, 0);\n logger.verbose(\n `already has ${queue.length} events and wants to receive ${eventsToRetrieveCount} more events`,\n );\n if (abortSignal?.aborted) {\n cleanupBeforeAbort();\n return Promise.reject(new AbortError(StandardAbortMessage));\n }\n return obj.isClosed || ctx.wasConnectionCloseCalled || eventsToRetrieveCount === 0\n ? Promise.resolve(queue.splice(0, maxMessageCount))\n : new Promise<void>((resolve, reject) => {\n obj._onError = reject;\n obj // eslint-disable-line promise/catch-or-return\n .connect({\n abortSignal,\n timeoutInMs: getRetryAttemptTimeoutInMs(options.retryOptions),\n })\n .then(() => {\n addCredits(state.link, Math.max(prefetchCount, maxMessageCount) - queue.length);\n logger.verbose(`setting the max wait time to ${maxWaitTimeInSeconds} seconds`);\n return waitForEvents(\n maxMessageCount,\n maxWaitTimeInSeconds * 1000,\n qReadIntervalInMs,\n queue,\n {\n abortSignal,\n cleanupBeforeAbort,\n receivedAfterWait: () =>\n logger.info(\n `${Math.min(\n maxMessageCount,\n queue.length,\n )} messages received within ${maxWaitTimeInSeconds} seconds`,\n ),\n receivedAlready: () =>\n logger.info(`${maxMessageCount} messages already received`),\n receivedNone: () =>\n logger.info(\n `no messages received when max wait time in seconds ${maxWaitTimeInSeconds} is over`,\n ),\n },\n );\n })\n .catch(reject)\n .then(resolve);\n })\n .then(() => queue.splice(0, maxMessageCount))\n .finally(() => clearHandlers(obj));\n };\n return retry(\n Object.defineProperties(\n {\n operation: retrieveEvents,\n operationType: RetryOperationType.receiveMessage,\n abortSignal: abortSignal,\n retryOptions: options.retryOptions ?? {},\n },\n {\n connectionId: {\n enumerable: true,\n get: () => ctx.connectionId,\n },\n connectionHost: {\n enumerable: true,\n get: () => ctx.config.host,\n },\n },\n ) as RetryConfig<ReceivedEventData[]>,\n );\n },\n };\n return obj;\n}\n\nfunction delay(\n waitTimeInMs: number,\n options?: {\n abortSignal?: AbortSignalLike;\n cleanupBeforeAbort?: () => void;\n abortErrorMsg?: string;\n },\n): Promise<void> {\n let token: ReturnType<typeof setTimeout>;\n return createAbortablePromise<void>((resolve) => {\n token = setTimeout(resolve, waitTimeInMs);\n }, options).finally(() => clearTimeout(token));\n}\n\n/**\n * @internal\n */\nexport function checkOnInterval(\n waitTimeInMs: number,\n check: () => boolean,\n options?: {\n abortSignal?: AbortSignalLike;\n cleanupBeforeAbort?: () => void;\n abortErrorMsg?: string;\n },\n): Promise<void> {\n let token: ReturnType<typeof setInterval>;\n return createAbortablePromise<void>((resolve) => {\n token = setInterval(() => {\n if (check()) {\n resolve();\n }\n }, waitTimeInMs);\n }, options).finally(() => clearInterval(token));\n}\n\n/**\n * Returns a promise that will resolve when it is time to read from the queue\n * @param maxEventCount - The maximum number of events to receive.\n * @param maxWaitTimeInMs - The maximum time to wait in ms for the queue to contain any events.\n * @param readIntervalWaitTimeInMs - The time interval to wait in ms before checking the queue.\n * @param queue - The queue to read from.\n * @param options - The options bag.\n * @returns a promise that will resolve when it is time to read from the queue\n * @internal\n */\nexport function waitForEvents(\n maxEventCount: number,\n maxWaitTimeInMs: number,\n readIntervalWaitTimeInMs: number,\n queue: unknown[],\n options: {\n abortSignal?: AbortSignalLike;\n cleanupBeforeAbort?: () => void;\n receivedAfterWait?: () => void;\n receivedAlready?: () => void;\n receivedNone?: () => void;\n } = {},\n): Promise<void> {\n const {\n abortSignal: clientAbortSignal,\n cleanupBeforeAbort,\n receivedNone,\n receivedAfterWait,\n receivedAlready,\n } = options;\n\n if (queue.length >= maxEventCount) {\n return Promise.resolve().then(receivedAlready);\n }\n\n const aborter = new AbortController();\n const abortListener = () => {\n aborter.abort();\n };\n clientAbortSignal?.addEventListener(\"abort\", abortListener);\n let cleanupBeforeAbortCalled = false;\n\n const updatedOptions = {\n abortSignal: aborter.signal,\n abortErrorMsg: StandardAbortMessage,\n cleanupBeforeAbort: () => {\n if (clientAbortSignal?.aborted && !cleanupBeforeAbortCalled) {\n cleanupBeforeAbort?.();\n cleanupBeforeAbortCalled = true;\n }\n },\n };\n return Promise.race([\n checkOnInterval(readIntervalWaitTimeInMs, () => queue.length > 0, updatedOptions)\n .then(() => delay(readIntervalWaitTimeInMs, updatedOptions))\n .then(receivedAfterWait),\n delay(maxWaitTimeInMs, updatedOptions).then(receivedNone),\n ]).finally(() => {\n aborter.abort();\n clientAbortSignal?.removeEventListener(\"abort\", abortListener);\n });\n}\n\nfunction convertAMQPMesage(data: EventDataInternal): ReceivedEventData {\n const rawMessage = data.getRawAmqpMessage();\n const receivedEventData: ReceivedEventData = {\n body: data.body,\n properties: data.properties,\n offset: data.offset!,\n sequenceNumber: data.sequenceNumber!,\n enqueuedTimeUtc: data.enqueuedTimeUtc!,\n partitionKey: data.partitionKey!,\n systemProperties: data.systemProperties,\n getRawAmqpMessage() {\n return rawMessage;\n },\n };\n if (data.correlationId != null) {\n receivedEventData.correlationId = data.correlationId;\n }\n if (data.contentType != null) {\n receivedEventData.contentType = data.contentType;\n }\n if (data.messageId != null) {\n receivedEventData.messageId = data.messageId;\n }\n return receivedEventData;\n}\n\nfunction setEventProps(eventProps: LastEnqueuedEventProperties, data: EventDataInternal): void {\n eventProps.sequenceNumber = data.lastSequenceNumber;\n eventProps.enqueuedOn = data.lastEnqueuedTime;\n eventProps.offset = data.lastEnqueuedOffset;\n eventProps.retrievedOn = data.retrievalTime;\n}\n\nfunction clearHandlers(obj: WritableReceiver): void {\n obj._onError = undefined;\n}\n\nfunction onMessage(\n context: EventContext,\n obj: WritableReceiver,\n queue: ReceivedEventData[],\n options: PartitionReceiverOptions,\n): void {\n if (!context.message) {\n return;\n }\n const data = fromRheaMessage(context.message, !!options.skipParsingBodyAsJson);\n const receivedEventData = convertAMQPMesage(data);\n obj.checkpoint = receivedEventData.sequenceNumber;\n if (options.trackLastEnqueuedEventProperties) {\n setEventProps(obj.lastEnqueuedEventProperties, data);\n }\n queue.push(receivedEventData);\n}\n\nfunction onError(\n context: EventContext,\n obj: PartitionReceiver,\n receiver: Link | undefined,\n logger: SimpleLogger,\n): void {\n const rheaReceiver = receiver || context.receiver;\n const amqpError = rheaReceiver?.error;\n logger.verbose(`'receiver_error' event occurred: ${logObj(amqpError)}`);\n if (obj._onError && amqpError) {\n const error = translate(amqpError);\n logErrorStackTrace(error);\n obj._onError(error);\n }\n}\n\nfunction onSessionError(context: EventContext, obj: PartitionReceiver, logger: SimpleLogger): void {\n const sessionError = context.session?.error;\n logger.verbose(`'session_error' event occurred: ${logObj(sessionError)}`);\n if (obj._onError && sessionError) {\n const error = translate(sessionError);\n logErrorStackTrace(error);\n obj._onError(error);\n }\n}\n\nasync function onClose(\n context: EventContext,\n state: ReceiverState,\n logger: SimpleLogger,\n): Promise<void> {\n const rheaReceiver = state.link || context.receiver;\n logger.verbose(\n `'receiver_close' event occurred. Value for isItselfClosed on the receiver is: '${rheaReceiver\n ?.isItselfClosed()\n .toString()}' Value for isConnecting on the session is: '${state.isConnecting}'`,\n );\n if (rheaReceiver && !state.isConnecting) {\n return rheaReceiver.close().catch((err) => {\n logger.verbose(`error when closing after 'receiver_close' event: ${logObj(err)}`);\n });\n }\n}\n\nasync function onSessionClose(\n context: EventContext,\n state: ReceiverState,\n logger: SimpleLogger,\n): Promise<void> {\n const rheaReceiver = state.link || context.receiver;\n logger.verbose(\n `'session_close' event occurred. Value for isSessionItselfClosed on the session is: '${rheaReceiver\n ?.isSessionItselfClosed()\n .toString()}' Value for isConnecting on the session is: '${state.isConnecting}'`,\n );\n if (rheaReceiver && !state.isConnecting) {\n return rheaReceiver.close().catch((err) => {\n logger.verbose(`error when closing after 'session_close' event: ${logObj(err)}`);\n });\n }\n}\n\nfunction createRheaOptions(\n consumerId: string,\n name: string,\n address: string,\n obj: PartitionReceiver,\n state: ReceiverState,\n queue: ReceivedEventData[],\n eventPosition: EventPosition,\n logger: SimpleLogger,\n options: PartitionReceiverOptions,\n): RheaReceiverOptions {\n const rheaOptions: RheaReceiverOptions & { source: Source; properties: Record<string, any> } = {\n name,\n autoaccept: true,\n target: consumerId,\n source: {\n address,\n },\n credit_window: 0,\n properties: {\n [receiverIdPropertyName]: consumerId,\n },\n onClose: (context) => onClose(context, state, logger),\n onSessionClose: (context) => onSessionClose(context, state, logger),\n onError: (context) => onError(context, obj, state.link, logger),\n onMessage: (context) => onMessage(context, obj, queue, options),\n onSessionError: (context) => onSessionError(context, obj, logger),\n };\n const ownerLevel = options.ownerLevel;\n if (typeof ownerLevel === \"number\") {\n rheaOptions.properties[Constants.attachEpoch] = types.wrap_long(ownerLevel);\n }\n rheaOptions.desired_capabilities = [geoReplication];\n if (options.trackLastEnqueuedEventProperties) {\n rheaOptions.desired_capabilities.push(Constants.enableReceiverRuntimeMetricName);\n }\n const filterClause = getEventPositionFilter(\n obj.checkpoint > -1 ? { sequenceNumber: obj.checkpoint } : eventPosition,\n );\n rheaOptions.source.filter = {\n \"apache.org:selector-filter:string\": types.wrap_described(filterClause, 0x468c00000004),\n };\n return rheaOptions;\n}\n\nasync function setupLink(\n consumerId: string,\n ctx: ConnectionContext,\n name: string,\n address: string,\n obj: PartitionReceiver,\n state: ReceiverState,\n queue: ReceivedEventData[],\n eventPosition: EventPosition,\n logger: SimpleLogger,\n options: PartitionReceiverOptions,\n abortSignal?: AbortSignalLike,\n): Promise<void> {\n const rheaOptions = createRheaOptions(\n consumerId,\n name,\n address,\n obj,\n state,\n queue,\n eventPosition,\n logger,\n options,\n );\n logger.verbose(`trying to be created with options ${logObj(rheaOptions)}`);\n state.link = await ctx.connection.createReceiver({\n ...rheaOptions,\n abortSignal,\n });\n state.isConnecting = false;\n logger.verbose(\"is created successfully\");\n ctx.receivers[name] = obj;\n}\n\nfunction addCredits(receiver: Link | undefined, creditsToAdd: number): void {\n if (creditsToAdd > 0) {\n receiver?.addCredit(creditsToAdd);\n }\n}\n"]}
1
+ {"version":3,"file":"partitionReceiver.js","sourceRoot":"","sources":["../../src/partitionReceiver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport type { MessagingError, RetryConfig } from \"@azure/core-amqp\";\nimport {\n Constants,\n RetryOperationType,\n StandardAbortMessage,\n retry,\n translate,\n} from \"@azure/core-amqp\";\nimport type {\n EventContext,\n Receiver as Link,\n ReceiverOptions as RheaReceiverOptions,\n Source,\n} from \"rhea-promise\";\nimport { types } from \"rhea-promise\";\nimport type { EventDataInternal, ReceivedEventData } from \"./eventData.js\";\nimport { fromRheaMessage } from \"./eventData.js\";\nimport type { EventPosition } from \"./eventPosition.js\";\nimport { getEventPositionFilter } from \"./eventPosition.js\";\nimport type { SimpleLogger } from \"./logger.js\";\nimport {\n createSimpleLogger,\n logErrorStackTrace,\n logObj,\n logger as azureLogger,\n createReceiverLogPrefix,\n} from \"./logger.js\";\nimport type { ConnectionContext } from \"./connectionContext.js\";\nimport type { PartitionReceiverOptions } from \"./models/private.js\";\nimport { getRetryAttemptTimeoutInMs } from \"./util/retries.js\";\nimport { createAbortablePromise } from \"@azure/core-util\";\nimport type { TimerLoop } from \"./util/timerLoop.js\";\nimport { getRandomName } from \"./util/utils.js\";\nimport { withAuth } from \"./withAuth.js\";\nimport { geoReplication, receiverIdPropertyName } from \"./util/constants.js\";\n\ntype Writable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n/** @internal */\nexport type WritableReceiver = Writable<PartitionReceiver>;\n\nconst abortLogMessage = \"operation has been cancelled by the user\";\n/** The time to wait in ms before attempting to read from the queue */\nconst qReadIntervalInMs = 20;\n\n/**\n * A set of information about the last enqueued event of a partition, as observed by the consumer as\n * events are received from the Event Hubs service\n */\nexport interface LastEnqueuedEventProperties {\n /**\n * The sequence number of the event that was last enqueued into the Event Hub partition from which\n * this event was received.\n */\n sequenceNumber?: number;\n /**\n * The date and time, in UTC, that the last event was enqueued into the Event Hub partition from\n * which this event was received.\n */\n enqueuedOn?: Date;\n /**\n * The offset of the event that was last enqueued into the Event Hub partition from which\n * this event was received.\n */\n offset?: string;\n /**\n * The date and time, in UTC, that the last event was retrieved from the Event Hub partition.\n */\n retrievedOn?: Date;\n}\n\n/** @internal */\nexport interface PartitionReceiver {\n readonly checkpoint: number;\n readonly lastEnqueuedEventProperties: LastEnqueuedEventProperties;\n readonly isClosed: boolean;\n readonly close: () => Promise<void>;\n readonly abort: () => Promise<void>;\n readonly isOpen: () => boolean;\n readonly receiveBatch: (\n maxMessageCount: number,\n maxWaitTimeInSeconds?: number,\n abortSignal?: AbortSignalLike,\n ) => Promise<ReceivedEventData[]>;\n /** Needed for tests only */\n readonly _onError?: (error: MessagingError | Error) => void;\n readonly connect: (options: ConnectOptions) => Promise<void>;\n}\n\ninterface ConnectOptions {\n abortSignal: AbortSignalLike | undefined;\n timeoutInMs: number;\n}\n\ninterface ReceiverState {\n link?: Link;\n authLoop?: TimerLoop;\n isConnecting: boolean;\n}\n\n/** @internal */\nexport function createReceiver(\n ctx: ConnectionContext,\n consumerGroup: string,\n consumerId: string,\n partitionId: string,\n eventPosition: EventPosition,\n options: PartitionReceiverOptions = {},\n): PartitionReceiver {\n const address = ctx.config.getReceiverAddress(partitionId, consumerGroup);\n const name = getRandomName(address);\n const audience = ctx.config.getReceiverAudience(partitionId, consumerGroup);\n const logPrefix = createReceiverLogPrefix(consumerId, ctx.connectionId, partitionId);\n const logger = createSimpleLogger(azureLogger, logPrefix);\n const queue: ReceivedEventData[] = [];\n const state: ReceiverState = {\n isConnecting: false,\n };\n\n const obj: WritableReceiver = {\n _onError: undefined,\n checkpoint: -1,\n lastEnqueuedEventProperties: {},\n isClosed: false,\n close: async () => {\n clearHandlers(obj);\n delete ctx.receivers[name];\n logger.verbose(\"deleted the receiver from the client cache\");\n state.authLoop?.stop();\n return state.link\n ?.close()\n .catch((err) => {\n logger.warning(`an error occurred while closing: ${err?.name}: ${err?.message}`);\n logErrorStackTrace(err);\n throw err;\n })\n .finally(() => {\n obj.isClosed = true;\n logger.verbose(\"is closed\");\n state.link = undefined;\n state.authLoop = undefined;\n });\n },\n abort: () => {\n obj._onError?.(new AbortError(StandardAbortMessage));\n logger.info(abortLogMessage);\n return obj.close();\n },\n isOpen: () => {\n const isOpen = !!state.link?.isOpen();\n logger.verbose(`is open? -> ${isOpen}`);\n return isOpen;\n },\n async connect({ abortSignal, timeoutInMs }: ConnectOptions): Promise<void> {\n if (state.isConnecting || obj.isOpen()) {\n return;\n }\n state.isConnecting = true;\n logger.verbose(\"is trying to connect\");\n try {\n await ctx.readyToOpenLink({ abortSignal });\n state.authLoop = await withAuth(\n () =>\n setupLink(\n consumerId,\n ctx,\n name,\n address,\n obj,\n state,\n queue,\n eventPosition,\n logger,\n options,\n abortSignal,\n ),\n ctx,\n audience,\n timeoutInMs,\n logger,\n {\n abortSignal,\n },\n );\n } catch (err) {\n state.isConnecting = false;\n const error = translate(err);\n logger.error(\n `an error occurred while creating the receiver: ${error?.name}: ${error?.message}`,\n );\n logErrorStackTrace(err);\n throw error;\n }\n },\n receiveBatch: (\n maxMessageCount: number,\n maxWaitTimeInSeconds: number = 60,\n abortSignal?: AbortSignalLike,\n ) => {\n const prefetchCount = options.prefetchCount ?? maxMessageCount * 3;\n const cleanupBeforeAbort = (): Promise<void> => {\n logger.info(abortLogMessage);\n return obj.close();\n };\n const retrieveEvents = (): Promise<ReceivedEventData[]> => {\n const eventsToRetrieveCount = Math.max(maxMessageCount - queue.length, 0);\n logger.verbose(\n `already has ${queue.length} events and wants to receive ${eventsToRetrieveCount} more events`,\n );\n if (abortSignal?.aborted) {\n cleanupBeforeAbort();\n return Promise.reject(new AbortError(StandardAbortMessage));\n }\n return obj.isClosed || ctx.wasConnectionCloseCalled || eventsToRetrieveCount === 0\n ? Promise.resolve(queue.splice(0, maxMessageCount))\n : new Promise<void>((resolve, reject) => {\n obj._onError = reject;\n obj // eslint-disable-line promise/catch-or-return\n .connect({\n abortSignal,\n timeoutInMs: getRetryAttemptTimeoutInMs(options.retryOptions),\n })\n .then(() => {\n addCredits(state.link, Math.max(prefetchCount, maxMessageCount) - queue.length);\n logger.verbose(`setting the max wait time to ${maxWaitTimeInSeconds} seconds`);\n return waitForEvents(\n maxMessageCount,\n maxWaitTimeInSeconds * 1000,\n qReadIntervalInMs,\n queue,\n {\n abortSignal,\n cleanupBeforeAbort,\n receivedAfterWait: () =>\n logger.info(\n `${Math.min(\n maxMessageCount,\n queue.length,\n )} messages received within ${maxWaitTimeInSeconds} seconds`,\n ),\n receivedAlready: () =>\n logger.info(`${maxMessageCount} messages already received`),\n receivedNone: () =>\n logger.info(\n `no messages received when max wait time in seconds ${maxWaitTimeInSeconds} is over`,\n ),\n },\n );\n })\n .catch(reject)\n .then(resolve);\n })\n .then(() => queue.splice(0, maxMessageCount))\n .finally(() => clearHandlers(obj));\n };\n return retry(\n Object.defineProperties(\n {\n operation: retrieveEvents,\n operationType: RetryOperationType.receiveMessage,\n abortSignal: abortSignal,\n retryOptions: options.retryOptions ?? {},\n },\n {\n connectionId: {\n enumerable: true,\n get: () => ctx.connectionId,\n },\n connectionHost: {\n enumerable: true,\n get: () => ctx.config.host,\n },\n },\n ) as RetryConfig<ReceivedEventData[]>,\n );\n },\n };\n return obj;\n}\n\nfunction delay(\n waitTimeInMs: number,\n options?: {\n abortSignal?: AbortSignalLike;\n cleanupBeforeAbort?: () => void;\n abortErrorMsg?: string;\n },\n): Promise<void> {\n let token: ReturnType<typeof setTimeout>;\n return createAbortablePromise<void>((resolve) => {\n token = setTimeout(resolve, waitTimeInMs);\n }, options).finally(() => clearTimeout(token));\n}\n\n/**\n * @internal\n */\nexport function checkOnInterval(\n waitTimeInMs: number,\n check: () => boolean,\n options?: {\n abortSignal?: AbortSignalLike;\n cleanupBeforeAbort?: () => void;\n abortErrorMsg?: string;\n },\n): Promise<void> {\n let token: ReturnType<typeof setInterval>;\n return createAbortablePromise<void>((resolve) => {\n token = setInterval(() => {\n if (check()) {\n resolve();\n }\n }, waitTimeInMs);\n }, options).finally(() => clearInterval(token));\n}\n\n/**\n * Returns a promise that will resolve when it is time to read from the queue\n * @param maxEventCount - The maximum number of events to receive.\n * @param maxWaitTimeInMs - The maximum time to wait in ms for the queue to contain any events.\n * @param readIntervalWaitTimeInMs - The time interval to wait in ms before checking the queue.\n * @param queue - The queue to read from.\n * @param options - The options bag.\n * @returns a promise that will resolve when it is time to read from the queue\n * @internal\n */\nexport function waitForEvents(\n maxEventCount: number,\n maxWaitTimeInMs: number,\n readIntervalWaitTimeInMs: number,\n queue: unknown[],\n options: {\n abortSignal?: AbortSignalLike;\n cleanupBeforeAbort?: () => void;\n receivedAfterWait?: () => void;\n receivedAlready?: () => void;\n receivedNone?: () => void;\n } = {},\n): Promise<void> {\n const {\n abortSignal: clientAbortSignal,\n cleanupBeforeAbort,\n receivedNone,\n receivedAfterWait,\n receivedAlready,\n } = options;\n\n if (queue.length >= maxEventCount) {\n return Promise.resolve().then(receivedAlready);\n }\n\n const aborter = new AbortController();\n const abortListener = () => {\n aborter.abort();\n };\n clientAbortSignal?.addEventListener(\"abort\", abortListener);\n let cleanupBeforeAbortCalled = false;\n\n const updatedOptions = {\n abortSignal: aborter.signal,\n abortErrorMsg: StandardAbortMessage,\n cleanupBeforeAbort: () => {\n if (clientAbortSignal?.aborted && !cleanupBeforeAbortCalled) {\n cleanupBeforeAbort?.();\n cleanupBeforeAbortCalled = true;\n }\n },\n };\n return Promise.race([\n checkOnInterval(readIntervalWaitTimeInMs, () => queue.length > 0, updatedOptions)\n .then(() => delay(readIntervalWaitTimeInMs, updatedOptions))\n .then(receivedAfterWait),\n delay(maxWaitTimeInMs, updatedOptions).then(receivedNone),\n ]).finally(() => {\n aborter.abort();\n clientAbortSignal?.removeEventListener(\"abort\", abortListener);\n });\n}\n\nfunction convertAMQPMesage(data: EventDataInternal): ReceivedEventData {\n const rawMessage = data.getRawAmqpMessage();\n const receivedEventData: ReceivedEventData = {\n body: data.body,\n properties: data.properties,\n offset: data.offset!,\n sequenceNumber: data.sequenceNumber!,\n enqueuedTimeUtc: data.enqueuedTimeUtc!,\n partitionKey: data.partitionKey!,\n systemProperties: data.systemProperties,\n getRawAmqpMessage() {\n return rawMessage;\n },\n };\n if (data.correlationId != null) {\n receivedEventData.correlationId = data.correlationId;\n }\n if (data.contentType != null) {\n receivedEventData.contentType = data.contentType;\n }\n if (data.messageId != null) {\n receivedEventData.messageId = data.messageId;\n }\n return receivedEventData;\n}\n\nfunction setEventProps(eventProps: LastEnqueuedEventProperties, data: EventDataInternal): void {\n eventProps.sequenceNumber = data.lastSequenceNumber;\n eventProps.enqueuedOn = data.lastEnqueuedTime;\n eventProps.offset = data.lastEnqueuedOffset;\n eventProps.retrievedOn = data.retrievalTime;\n}\n\nfunction clearHandlers(obj: WritableReceiver): void {\n obj._onError = undefined;\n}\n\nfunction onMessage(\n context: EventContext,\n obj: WritableReceiver,\n queue: ReceivedEventData[],\n options: PartitionReceiverOptions,\n): void {\n if (!context.message) {\n return;\n }\n const data = fromRheaMessage(context.message, !!options.skipParsingBodyAsJson);\n const receivedEventData = convertAMQPMesage(data);\n obj.checkpoint = receivedEventData.sequenceNumber;\n if (options.trackLastEnqueuedEventProperties) {\n setEventProps(obj.lastEnqueuedEventProperties, data);\n }\n queue.push(receivedEventData);\n}\n\nfunction onError(\n context: EventContext,\n obj: PartitionReceiver,\n receiver: Link | undefined,\n logger: SimpleLogger,\n): void {\n const rheaReceiver = receiver || context.receiver;\n const amqpError = rheaReceiver?.error;\n logger.verbose(`'receiver_error' event occurred: ${logObj(amqpError)}`);\n if (obj._onError && amqpError) {\n const error = translate(amqpError);\n logErrorStackTrace(error);\n obj._onError(error);\n }\n}\n\nfunction onSessionError(context: EventContext, obj: PartitionReceiver, logger: SimpleLogger): void {\n const sessionError = context.session?.error;\n logger.verbose(`'session_error' event occurred: ${logObj(sessionError)}`);\n if (obj._onError && sessionError) {\n const error = translate(sessionError);\n logErrorStackTrace(error);\n obj._onError(error);\n }\n}\n\nasync function onClose(\n context: EventContext,\n state: ReceiverState,\n logger: SimpleLogger,\n): Promise<void> {\n const rheaReceiver = state.link || context.receiver;\n logger.verbose(\n `'receiver_close' event occurred. Value for isItselfClosed on the receiver is: '${rheaReceiver\n ?.isItselfClosed()\n .toString()}' Value for isConnecting on the session is: '${state.isConnecting}'`,\n );\n if (rheaReceiver && !state.isConnecting) {\n return rheaReceiver.close().catch((err) => {\n logger.verbose(`error when closing after 'receiver_close' event: ${logObj(err)}`);\n });\n }\n}\n\nasync function onSessionClose(\n context: EventContext,\n state: ReceiverState,\n logger: SimpleLogger,\n): Promise<void> {\n const rheaReceiver = state.link || context.receiver;\n logger.verbose(\n `'session_close' event occurred. Value for isSessionItselfClosed on the session is: '${rheaReceiver\n ?.isSessionItselfClosed()\n .toString()}' Value for isConnecting on the session is: '${state.isConnecting}'`,\n );\n if (rheaReceiver && !state.isConnecting) {\n return rheaReceiver.close().catch((err) => {\n logger.verbose(`error when closing after 'session_close' event: ${logObj(err)}`);\n });\n }\n}\n\nfunction createRheaOptions(\n consumerId: string,\n name: string,\n address: string,\n obj: PartitionReceiver,\n state: ReceiverState,\n queue: ReceivedEventData[],\n eventPosition: EventPosition,\n logger: SimpleLogger,\n options: PartitionReceiverOptions,\n): RheaReceiverOptions {\n const rheaOptions: RheaReceiverOptions & { source: Source; properties: Record<string, any> } = {\n name,\n autoaccept: true,\n target: consumerId,\n source: {\n address,\n },\n credit_window: 0,\n properties: {\n [receiverIdPropertyName]: consumerId,\n },\n onClose: (context) => onClose(context, state, logger),\n onSessionClose: (context) => onSessionClose(context, state, logger),\n onError: (context) => onError(context, obj, state.link, logger),\n onMessage: (context) => onMessage(context, obj, queue, options),\n onSessionError: (context) => onSessionError(context, obj, logger),\n };\n const ownerLevel = options.ownerLevel;\n if (typeof ownerLevel === \"number\") {\n rheaOptions.properties[Constants.attachEpoch] = types.wrap_long(ownerLevel);\n }\n rheaOptions.desired_capabilities = [geoReplication];\n if (options.trackLastEnqueuedEventProperties) {\n rheaOptions.desired_capabilities.push(Constants.enableReceiverRuntimeMetricName);\n }\n const filterClause = getEventPositionFilter(\n obj.checkpoint > -1 ? { sequenceNumber: obj.checkpoint } : eventPosition,\n );\n rheaOptions.source.filter = {\n \"apache.org:selector-filter:string\": types.wrap_described(filterClause, 0x468c00000004),\n };\n return rheaOptions;\n}\n\nasync function setupLink(\n consumerId: string,\n ctx: ConnectionContext,\n name: string,\n address: string,\n obj: PartitionReceiver,\n state: ReceiverState,\n queue: ReceivedEventData[],\n eventPosition: EventPosition,\n logger: SimpleLogger,\n options: PartitionReceiverOptions,\n abortSignal?: AbortSignalLike,\n): Promise<void> {\n const rheaOptions = createRheaOptions(\n consumerId,\n name,\n address,\n obj,\n state,\n queue,\n eventPosition,\n logger,\n options,\n );\n logger.verbose(`trying to be created with options ${logObj(rheaOptions)}`);\n state.link = await ctx.connection.createReceiver({\n ...rheaOptions,\n abortSignal,\n });\n state.isConnecting = false;\n logger.verbose(\"is created successfully\");\n ctx.receivers[name] = obj;\n}\n\nfunction addCredits(receiver: Link | undefined, creditsToAdd: number): void {\n if (creditsToAdd > 0) {\n receiver?.addCredit(creditsToAdd);\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
- import { AbortSignalLike } from "@azure/abort-controller";
1
+ import type { AbortSignalLike } from "@azure/abort-controller";
2
2
  import { CloseReason } from "./models/public.js";
3
- import { CommonEventProcessorOptions } from "./models/private.js";
4
- import { ConnectionContext } from "./connectionContext.js";
5
- import { EventPosition } from "./eventPosition.js";
6
- import { PartitionProcessor } from "./partitionProcessor.js";
3
+ import type { CommonEventProcessorOptions } from "./models/private.js";
4
+ import type { ConnectionContext } from "./connectionContext.js";
5
+ import type { EventPosition } from "./eventPosition.js";
6
+ import type { PartitionProcessor } from "./partitionProcessor.js";
7
7
  /**
8
8
  * The PumpManager handles the creation and removal of PartitionPumps.
9
9
  * It also starts a PartitionPump when it is created, and stops a
@@ -1 +1 @@
1
- {"version":3,"file":"pumpManager.d.ts","sourceRoot":"","sources":["../../src/pumpManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,UAAU,CACR,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,eAAe,GAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvD;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,mBAAmB,CAEpB;gBAEK,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,EAAE,2BAA2B;IAK1F;;OAEG;IACI,uBAAuB,IAAI,MAAM,EAAE;IAO1C;;;OAGG;IACI,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAK7D;;;;;OAKG;IACU,UAAU,CACrB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,eAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IA6ChB;;;;OAIG;IACU,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhF;;;OAGG;IACU,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAwBhE"}
1
+ {"version":3,"file":"pumpManager.d.ts","sourceRoot":"","sources":["../../src/pumpManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,UAAU,CACR,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,eAAe,GAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvD;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,mBAAmB,CAEpB;gBAEK,kBAAkB,EAAE,MAAM,EAAE,qBAAqB,EAAE,2BAA2B;IAK1F;;OAEG;IACI,uBAAuB,IAAI,MAAM,EAAE;IAO1C;;;OAGG;IACI,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAK7D;;;;;OAKG;IACU,UAAU,CACrB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,eAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IA6ChB;;;;OAIG;IACU,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhF;;;OAGG;IACU,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAwBhE"}
@@ -1 +1 @@
1
- {"version":3,"file":"pumpManager.js","sourceRoot":"","sources":["../../src/pumpManager.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { logErrorStackTrace, logger } from \"./logger.js\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { CloseReason } from \"./models/public.js\";\nimport { CommonEventProcessorOptions } from \"./models/private.js\";\nimport { ConnectionContext } from \"./connectionContext.js\";\nimport { EventPosition } from \"./eventPosition.js\";\nimport { PartitionProcessor } from \"./partitionProcessor.js\";\nimport { PartitionPump } from \"./partitionPump.js\";\n\n/**\n * The PumpManager handles the creation and removal of PartitionPumps.\n * It also starts a PartitionPump when it is created, and stops a\n * PartitionPump when it is removed.\n * @internal\n */\nexport interface PumpManager {\n /**\n * Creates and starts a PartitionPump.\n * @param startPosition - The position in the partition to start reading from.\n * @param eventHubClient - The EventHubClient to forward to the PartitionPump.\n * @param partitionProcessor - The PartitionProcessor to forward to the PartitionPump.\n * @param abortSignal - Used to cancel pump creation.\n */\n createPump(\n startPosition: EventPosition,\n connectionContext: ConnectionContext,\n partitionProcessor: PartitionProcessor,\n abortSignal: AbortSignalLike,\n ): Promise<void>;\n\n /**\n * Indicates whether the pump manager is actively receiving events from a given partition.\n * @param partitionId - The partition to check.\n */\n isReceivingFromPartition(partitionId: string): boolean;\n\n /**\n * Stops all PartitionPumps and removes them from the internal map.\n * @param reason - The reason for removing the pump.\n */\n removeAllPumps(reason: CloseReason): Promise<void>;\n}\n\n/**\n * The PumpManager handles the creation and removal of PartitionPumps.\n * It also starts a PartitionPump when it is created, and stops a\n * PartitionPump when it is removed.\n * @internal\n */\nexport class PumpManagerImpl implements PumpManager {\n private readonly _eventProcessorName: string;\n private readonly _options: CommonEventProcessorOptions;\n private _partitionIdToPumps: {\n [partitionId: string]: PartitionPump | undefined;\n } = {};\n\n constructor(eventProcessorName: string, eventProcessorOptions: CommonEventProcessorOptions) {\n this._eventProcessorName = eventProcessorName;\n this._options = eventProcessorOptions;\n }\n\n /**\n * Returns a list of partitionIds that are actively receiving messages.\n */\n public receivingFromPartitions(): string[] {\n return Object.keys(this._partitionIdToPumps).filter((id) => {\n const pump = this._partitionIdToPumps[id];\n return Boolean(pump && pump.isReceiving);\n });\n }\n\n /**\n * Indicates whether the pump manager is actively receiving events from a given partition.\n * @internal\n */\n public isReceivingFromPartition(partitionId: string): boolean {\n const pump = this._partitionIdToPumps[partitionId];\n return Boolean(pump && pump.isReceiving);\n }\n\n /**\n * Creates and starts a PartitionPump.\n * @param startPosition - The position in the partition to start reading from.\n * @param connectionContext - The ConnectionContext to forward to the PartitionPump.\n * @param partitionProcessor - The PartitionProcessor to forward to the PartitionPump.\n */\n public async createPump(\n startPosition: EventPosition,\n connectionContext: ConnectionContext,\n partitionProcessor: PartitionProcessor,\n abortSignal: AbortSignalLike,\n ): Promise<void> {\n const partitionId = partitionProcessor.partitionId;\n if (abortSignal.aborted) {\n logger.verbose(\n `${this._eventProcessorName}] The subscription was closed before creating the pump for partition ${partitionId}.`,\n );\n return;\n }\n // attempt to get an existing pump\n const existingPump = this._partitionIdToPumps[partitionId];\n if (existingPump) {\n if (existingPump.isReceiving) {\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] The existing pump is running.`,\n );\n return;\n }\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] The existing pump is not running.`,\n );\n await this.removePump(partitionId, CloseReason.OwnershipLost);\n }\n\n logger.verbose(`[${this._eventProcessorName}] [${partitionId}] Creating a new pump.`);\n\n const pump = new PartitionPump(\n connectionContext,\n partitionProcessor,\n startPosition,\n this._options,\n );\n\n try {\n // Set the pump before starting it in case the user\n // closes the subscription while `start()` is in progress.\n this._partitionIdToPumps[partitionId] = pump;\n await pump.start();\n } catch (err: any) {\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] An error occured while adding/updating a pump: ${err}`,\n );\n logErrorStackTrace(err);\n }\n }\n\n /**\n * Stop a PartitionPump and removes it from the internal map.\n * @param partitionId - The partitionId to remove the associated PartitionPump from.\n * @param reason - The reason for removing the pump.\n */\n public async removePump(partitionId: string, reason: CloseReason): Promise<void> {\n try {\n const pump = this._partitionIdToPumps[partitionId];\n if (pump) {\n delete this._partitionIdToPumps[partitionId];\n logger.verbose(`[${this._eventProcessorName}] [${partitionId}] Stopping the pump.`);\n await pump.stop(reason);\n } else {\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] No pump was found to remove.`,\n );\n }\n } catch (err: any) {\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] An error occured while removing a pump: ${err}`,\n );\n logErrorStackTrace(err);\n }\n }\n\n /**\n * Stops all PartitionPumps and removes them from the internal map.\n * @param reason - The reason for removing the pump.\n */\n public async removeAllPumps(reason: CloseReason): Promise<void> {\n const partitionIds = Object.keys(this._partitionIdToPumps);\n\n logger.verbose(`[${this._eventProcessorName}] Removing all pumps due to reason ${reason}.`);\n\n const tasks: PromiseLike<void>[] = [];\n for (const partitionId of partitionIds) {\n const pump = this._partitionIdToPumps[partitionId];\n if (pump) {\n tasks.push(pump.stop(reason));\n }\n }\n\n try {\n await Promise.all(tasks);\n } catch (err: any) {\n logger.verbose(\n `[${this._eventProcessorName}] An error occured while removing all pumps: ${err}`,\n );\n logErrorStackTrace(err);\n } finally {\n this._partitionIdToPumps = {};\n }\n }\n}\n"]}
1
+ {"version":3,"file":"pumpManager.js","sourceRoot":"","sources":["../../src/pumpManager.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAoCnD;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAO1B,YAAY,kBAA0B,EAAE,qBAAkD;QAJlF,wBAAmB,GAEvB,EAAE,CAAC;QAGL,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,uBAAuB;QAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAC1C,OAAO,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,wBAAwB,CAAC,WAAmB;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CACrB,aAA4B,EAC5B,iBAAoC,EACpC,kBAAsC,EACtC,WAA4B;QAE5B,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;QACnD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,CACZ,GAAG,IAAI,CAAC,mBAAmB,wEAAwE,WAAW,GAAG,CAClH,CAAC;YACF,OAAO;QACT,CAAC;QACD,kCAAkC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;gBAC7B,MAAM,CAAC,OAAO,CACZ,IAAI,IAAI,CAAC,mBAAmB,MAAM,WAAW,iCAAiC,CAC/E,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,CAAC,OAAO,CACZ,IAAI,IAAI,CAAC,mBAAmB,MAAM,WAAW,qCAAqC,CACnF,CAAC;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,mBAAmB,MAAM,WAAW,wBAAwB,CAAC,CAAC;QAEtF,MAAM,IAAI,GAAG,IAAI,aAAa,CAC5B,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,IAAI,CAAC,QAAQ,CACd,CAAC;QAEF,IAAI,CAAC;YACH,mDAAmD;YACnD,0DAA0D;YAC1D,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;YAC7C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CACZ,IAAI,IAAI,CAAC,mBAAmB,MAAM,WAAW,oDAAoD,GAAG,EAAE,CACvG,CAAC;YACF,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,UAAU,CAAC,WAAmB,EAAE,MAAmB;QAC9D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;gBAC7C,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,mBAAmB,MAAM,WAAW,sBAAsB,CAAC,CAAC;gBACpF,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CACZ,IAAI,IAAI,CAAC,mBAAmB,MAAM,WAAW,gCAAgC,CAC9E,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CACZ,IAAI,IAAI,CAAC,mBAAmB,MAAM,WAAW,6CAA6C,GAAG,EAAE,CAChG,CAAC;YACF,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,cAAc,CAAC,MAAmB;QAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE3D,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,mBAAmB,sCAAsC,MAAM,GAAG,CAAC,CAAC;QAE5F,MAAM,KAAK,GAAwB,EAAE,CAAC;QACtC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CACZ,IAAI,IAAI,CAAC,mBAAmB,gDAAgD,GAAG,EAAE,CAClF,CAAC;YACF,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { logErrorStackTrace, logger } from \"./logger.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { CloseReason } from \"./models/public.js\";\nimport type { CommonEventProcessorOptions } from \"./models/private.js\";\nimport type { ConnectionContext } from \"./connectionContext.js\";\nimport type { EventPosition } from \"./eventPosition.js\";\nimport type { PartitionProcessor } from \"./partitionProcessor.js\";\nimport { PartitionPump } from \"./partitionPump.js\";\n\n/**\n * The PumpManager handles the creation and removal of PartitionPumps.\n * It also starts a PartitionPump when it is created, and stops a\n * PartitionPump when it is removed.\n * @internal\n */\nexport interface PumpManager {\n /**\n * Creates and starts a PartitionPump.\n * @param startPosition - The position in the partition to start reading from.\n * @param eventHubClient - The EventHubClient to forward to the PartitionPump.\n * @param partitionProcessor - The PartitionProcessor to forward to the PartitionPump.\n * @param abortSignal - Used to cancel pump creation.\n */\n createPump(\n startPosition: EventPosition,\n connectionContext: ConnectionContext,\n partitionProcessor: PartitionProcessor,\n abortSignal: AbortSignalLike,\n ): Promise<void>;\n\n /**\n * Indicates whether the pump manager is actively receiving events from a given partition.\n * @param partitionId - The partition to check.\n */\n isReceivingFromPartition(partitionId: string): boolean;\n\n /**\n * Stops all PartitionPumps and removes them from the internal map.\n * @param reason - The reason for removing the pump.\n */\n removeAllPumps(reason: CloseReason): Promise<void>;\n}\n\n/**\n * The PumpManager handles the creation and removal of PartitionPumps.\n * It also starts a PartitionPump when it is created, and stops a\n * PartitionPump when it is removed.\n * @internal\n */\nexport class PumpManagerImpl implements PumpManager {\n private readonly _eventProcessorName: string;\n private readonly _options: CommonEventProcessorOptions;\n private _partitionIdToPumps: {\n [partitionId: string]: PartitionPump | undefined;\n } = {};\n\n constructor(eventProcessorName: string, eventProcessorOptions: CommonEventProcessorOptions) {\n this._eventProcessorName = eventProcessorName;\n this._options = eventProcessorOptions;\n }\n\n /**\n * Returns a list of partitionIds that are actively receiving messages.\n */\n public receivingFromPartitions(): string[] {\n return Object.keys(this._partitionIdToPumps).filter((id) => {\n const pump = this._partitionIdToPumps[id];\n return Boolean(pump && pump.isReceiving);\n });\n }\n\n /**\n * Indicates whether the pump manager is actively receiving events from a given partition.\n * @internal\n */\n public isReceivingFromPartition(partitionId: string): boolean {\n const pump = this._partitionIdToPumps[partitionId];\n return Boolean(pump && pump.isReceiving);\n }\n\n /**\n * Creates and starts a PartitionPump.\n * @param startPosition - The position in the partition to start reading from.\n * @param connectionContext - The ConnectionContext to forward to the PartitionPump.\n * @param partitionProcessor - The PartitionProcessor to forward to the PartitionPump.\n */\n public async createPump(\n startPosition: EventPosition,\n connectionContext: ConnectionContext,\n partitionProcessor: PartitionProcessor,\n abortSignal: AbortSignalLike,\n ): Promise<void> {\n const partitionId = partitionProcessor.partitionId;\n if (abortSignal.aborted) {\n logger.verbose(\n `${this._eventProcessorName}] The subscription was closed before creating the pump for partition ${partitionId}.`,\n );\n return;\n }\n // attempt to get an existing pump\n const existingPump = this._partitionIdToPumps[partitionId];\n if (existingPump) {\n if (existingPump.isReceiving) {\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] The existing pump is running.`,\n );\n return;\n }\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] The existing pump is not running.`,\n );\n await this.removePump(partitionId, CloseReason.OwnershipLost);\n }\n\n logger.verbose(`[${this._eventProcessorName}] [${partitionId}] Creating a new pump.`);\n\n const pump = new PartitionPump(\n connectionContext,\n partitionProcessor,\n startPosition,\n this._options,\n );\n\n try {\n // Set the pump before starting it in case the user\n // closes the subscription while `start()` is in progress.\n this._partitionIdToPumps[partitionId] = pump;\n await pump.start();\n } catch (err: any) {\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] An error occured while adding/updating a pump: ${err}`,\n );\n logErrorStackTrace(err);\n }\n }\n\n /**\n * Stop a PartitionPump and removes it from the internal map.\n * @param partitionId - The partitionId to remove the associated PartitionPump from.\n * @param reason - The reason for removing the pump.\n */\n public async removePump(partitionId: string, reason: CloseReason): Promise<void> {\n try {\n const pump = this._partitionIdToPumps[partitionId];\n if (pump) {\n delete this._partitionIdToPumps[partitionId];\n logger.verbose(`[${this._eventProcessorName}] [${partitionId}] Stopping the pump.`);\n await pump.stop(reason);\n } else {\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] No pump was found to remove.`,\n );\n }\n } catch (err: any) {\n logger.verbose(\n `[${this._eventProcessorName}] [${partitionId}] An error occured while removing a pump: ${err}`,\n );\n logErrorStackTrace(err);\n }\n }\n\n /**\n * Stops all PartitionPumps and removes them from the internal map.\n * @param reason - The reason for removing the pump.\n */\n public async removeAllPumps(reason: CloseReason): Promise<void> {\n const partitionIds = Object.keys(this._partitionIdToPumps);\n\n logger.verbose(`[${this._eventProcessorName}] Removing all pumps due to reason ${reason}.`);\n\n const tasks: PromiseLike<void>[] = [];\n for (const partitionId of partitionIds) {\n const pump = this._partitionIdToPumps[partitionId];\n if (pump) {\n tasks.push(pump.stop(reason));\n }\n }\n\n try {\n await Promise.all(tasks);\n } catch (err: any) {\n logger.verbose(\n `[${this._eventProcessorName}] An error occured while removing all pumps: ${err}`,\n );\n logErrorStackTrace(err);\n } finally {\n this._partitionIdToPumps = {};\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { AbortSignalLike } from "@azure/abort-controller";
1
+ import type { AbortSignalLike } from "@azure/abort-controller";
2
2
  /**
3
3
  * @param delayInMs - The number of milliseconds to be delayed.
4
4
  * @param abortSignal - The abortSignal associated with the containing operation.
@@ -1 +1 @@
1
- {"version":3,"file":"delayWithoutThrow.d.ts","sourceRoot":"","sources":["../../../src/util/delayWithoutThrow.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC,IAAI,CAAC,CAMf"}
1
+ {"version":3,"file":"delayWithoutThrow.d.ts","sourceRoot":"","sources":["../../../src/util/delayWithoutThrow.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -1 +1 @@
1
- {"version":3,"file":"delayWithoutThrow.js","sourceRoot":"","sources":["../../../src/util/delayWithoutThrow.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,WAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;IAAC,WAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { delay } from \"@azure/core-amqp\";\n\n/**\n * @param delayInMs - The number of milliseconds to be delayed.\n * @param abortSignal - The abortSignal associated with the containing operation.\n * @internal\n */\nexport async function delayWithoutThrow(\n delayInMs: number,\n abortSignal?: AbortSignalLike,\n): Promise<void> {\n try {\n await delay(delayInMs, abortSignal);\n } catch {\n /* no-op to swallow AbortError */\n }\n}\n"]}
1
+ {"version":3,"file":"delayWithoutThrow.js","sourceRoot":"","sources":["../../../src/util/delayWithoutThrow.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,WAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;IAAC,WAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { delay } from \"@azure/core-amqp\";\n\n/**\n * @param delayInMs - The number of milliseconds to be delayed.\n * @param abortSignal - The abortSignal associated with the containing operation.\n * @internal\n */\nexport async function delayWithoutThrow(\n delayInMs: number,\n abortSignal?: AbortSignalLike,\n): Promise<void> {\n try {\n await delay(delayInMs, abortSignal);\n } catch {\n /* no-op to swallow AbortError */\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { ConnectionContext } from "../connectionContext.js";
2
- import { AmqpError } from "rhea-promise";
3
- import { MessagingError } from "@azure/core-amqp";
1
+ import type { ConnectionContext } from "../connectionContext.js";
2
+ import type { AmqpError } from "rhea-promise";
3
+ import type { MessagingError } from "@azure/core-amqp";
4
4
  /**
5
5
  * @internal
6
6
  * Logs and throws Error if the current AMQP connection is closed.
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/util/error.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AACtD,OAAO,EAAoB,cAAc,EAAa,MAAM,kBAAkB,CAAC;AAE/E;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAQ7E;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,OAAO,GACtB,IAAI,CASN;AA0BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,KAAK,GAAG,cAAc,GAAG,KAAK,CAwB7E;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,sLAC8I,CAAC;AAEtL;;GAEG;AACH,eAAO,MAAM,8BAA8B,mMACuJ,CAAC;AAEnM;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,EAChD,uBAAuB,EACvB,WAAW,EACX,YAAY,GACb,EAAE;IACD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAYP"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/util/error.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAQ7E;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,OAAO,GACtB,IAAI,CASN;AA0BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,KAAK,GAAG,cAAc,GAAG,KAAK,CAwB7E;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,sLAC8I,CAAC;AAEtL;;GAEG;AACH,eAAO,MAAM,8BAA8B,mMACuJ,CAAC;AAEnM;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,EAChD,uBAAuB,EACvB,WAAW,EACX,YAAY,GACb,EAAE;IACD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,IAAI,CAYP"}
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/util/error.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { logErrorStackTrace, logger } from \"../logger.js\";\nimport { ConnectionContext } from \"../connectionContext.js\";\nimport { isDefined } from \"@azure/core-util\";\nimport { AmqpError, isAmqpError } from \"rhea-promise\";\nimport { isMessagingError, MessagingError, translate } from \"@azure/core-amqp\";\n\n/**\n * @internal\n * Logs and throws Error if the current AMQP connection is closed.\n * @param context - The ConnectionContext associated with the current AMQP connection.\n */\nexport function throwErrorIfConnectionClosed(context: ConnectionContext): void {\n if (context && context.wasConnectionCloseCalled) {\n const errorMessage = \"The underlying AMQP connection is closed.\";\n const error = new Error(errorMessage);\n logger.warning(`[${context.connectionId}] ${error.name}: ${error.message}`);\n logErrorStackTrace(error);\n throw error;\n }\n}\n\n/**\n * @internal\n * Logs and Throws TypeError if given parameter is undefined or null\n * @param connectionId - Id of the underlying AMQP connection used for logging\n * @param methodName - Name of the method that was passed the parameter\n * @param parameterName - Name of the parameter to check\n * @param parameterValue - Value of the parameter to check\n */\nexport function throwTypeErrorIfParameterMissing(\n connectionId: string,\n methodName: string,\n parameterName: string,\n parameterValue: unknown,\n): void {\n if (!isDefined(parameterValue)) {\n const error = new TypeError(\n `${methodName} called without required argument \"${parameterName}\"`,\n );\n logger.warning(`[${connectionId}] ${error.name}: ${error.message}`);\n logErrorStackTrace(error);\n throw error;\n }\n}\n\n/**\n * Maps the amqp error conditions to the Error names.\n * @internal\n */\nenum ConditionErrorNameMapper {\n /**\n * Indicates that a sequenc enumber was out of order.\n */\n \"com.microsoft:out-of-order-sequence\" = \"SequenceOutOfOrderError\",\n /**\n * Error is thrown when two or more instances connect to the same partition\n * with different epoch values.\n */\n \"com.microsoft:producer-epoch-stolen\" = \"ProducerDisconnectedError\",\n}\n\n/**\n * @internal\n */\nconst nonRetryableErrors: Set<string> = new Set([\n \"ProducerDisconnectedError\",\n \"SequenceOutOfOrderError\",\n]);\n\n/**\n * @internal\n */\nexport function translateError(err: AmqpError | Error): MessagingError | Error {\n const translatedError = translate(err);\n // If we're not dealing with a messaging error, or the original error wasn't an AMQP error,\n // or we have a resolved code on the messaging error, just return the translated error.\n if (!isMessagingError(translatedError) || !isAmqpError(err) || translatedError.code) {\n return translatedError;\n }\n\n const amqpError = err as AmqpError;\n const condition = amqpError.condition;\n\n // If we don't have a condition, we can't map the condition to a code.\n if (!condition) {\n return translatedError;\n }\n\n // Attempt to resolve codes core-amqp doesn't know about.\n translatedError.code =\n ConditionErrorNameMapper[condition as keyof typeof ConditionErrorNameMapper];\n if (translatedError.code) {\n translatedError.retryable = !nonRetryableErrors.has(translatedError.code);\n }\n\n return translatedError;\n}\n\n/**\n * @internal\n */\nexport const idempotentAlreadyPublished =\n \"These events have already been successfully published. When idempotent publishing is enabled, events that were acknowledged by the Event Hubs service may not be published again.\";\n\n/**\n * @internal\n */\nexport const idempotentSomeAlreadyPublished =\n \"1 or more of these events have already been successfully published. When idempotent publishing is enabled, events that were acknowledged by the Event Hubs service may not be published again.\";\n\n/**\n * @internal\n */\nexport function validateProducerPartitionSettings({\n enableIdempotentRetries,\n partitionId,\n partitionKey,\n}: {\n enableIdempotentRetries?: boolean;\n partitionId?: string;\n partitionKey?: string;\n}): void {\n if (enableIdempotentRetries && (isDefined(partitionKey) || !isDefined(partitionId))) {\n throw new Error(\n `The \"partitionId\" must be supplied and \"partitionKey\" must not be provided when the EventHubProducerClient has \"enableIdempotentRetries\" set to true.`,\n );\n }\n\n if (isDefined(partitionId) && isDefined(partitionKey)) {\n throw new Error(\n `The partitionId (${partitionId}) and partitionKey (${partitionKey}) cannot both be specified.`,\n );\n }\n}\n"]}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/util/error.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { logErrorStackTrace, logger } from \"../logger.js\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\nimport { isDefined } from \"@azure/core-util\";\nimport type { AmqpError } from \"rhea-promise\";\nimport { isAmqpError } from \"rhea-promise\";\nimport type { MessagingError } from \"@azure/core-amqp\";\nimport { isMessagingError, translate } from \"@azure/core-amqp\";\n\n/**\n * @internal\n * Logs and throws Error if the current AMQP connection is closed.\n * @param context - The ConnectionContext associated with the current AMQP connection.\n */\nexport function throwErrorIfConnectionClosed(context: ConnectionContext): void {\n if (context && context.wasConnectionCloseCalled) {\n const errorMessage = \"The underlying AMQP connection is closed.\";\n const error = new Error(errorMessage);\n logger.warning(`[${context.connectionId}] ${error.name}: ${error.message}`);\n logErrorStackTrace(error);\n throw error;\n }\n}\n\n/**\n * @internal\n * Logs and Throws TypeError if given parameter is undefined or null\n * @param connectionId - Id of the underlying AMQP connection used for logging\n * @param methodName - Name of the method that was passed the parameter\n * @param parameterName - Name of the parameter to check\n * @param parameterValue - Value of the parameter to check\n */\nexport function throwTypeErrorIfParameterMissing(\n connectionId: string,\n methodName: string,\n parameterName: string,\n parameterValue: unknown,\n): void {\n if (!isDefined(parameterValue)) {\n const error = new TypeError(\n `${methodName} called without required argument \"${parameterName}\"`,\n );\n logger.warning(`[${connectionId}] ${error.name}: ${error.message}`);\n logErrorStackTrace(error);\n throw error;\n }\n}\n\n/**\n * Maps the amqp error conditions to the Error names.\n * @internal\n */\nenum ConditionErrorNameMapper {\n /**\n * Indicates that a sequenc enumber was out of order.\n */\n \"com.microsoft:out-of-order-sequence\" = \"SequenceOutOfOrderError\",\n /**\n * Error is thrown when two or more instances connect to the same partition\n * with different epoch values.\n */\n \"com.microsoft:producer-epoch-stolen\" = \"ProducerDisconnectedError\",\n}\n\n/**\n * @internal\n */\nconst nonRetryableErrors: Set<string> = new Set([\n \"ProducerDisconnectedError\",\n \"SequenceOutOfOrderError\",\n]);\n\n/**\n * @internal\n */\nexport function translateError(err: AmqpError | Error): MessagingError | Error {\n const translatedError = translate(err);\n // If we're not dealing with a messaging error, or the original error wasn't an AMQP error,\n // or we have a resolved code on the messaging error, just return the translated error.\n if (!isMessagingError(translatedError) || !isAmqpError(err) || translatedError.code) {\n return translatedError;\n }\n\n const amqpError = err as AmqpError;\n const condition = amqpError.condition;\n\n // If we don't have a condition, we can't map the condition to a code.\n if (!condition) {\n return translatedError;\n }\n\n // Attempt to resolve codes core-amqp doesn't know about.\n translatedError.code =\n ConditionErrorNameMapper[condition as keyof typeof ConditionErrorNameMapper];\n if (translatedError.code) {\n translatedError.retryable = !nonRetryableErrors.has(translatedError.code);\n }\n\n return translatedError;\n}\n\n/**\n * @internal\n */\nexport const idempotentAlreadyPublished =\n \"These events have already been successfully published. When idempotent publishing is enabled, events that were acknowledged by the Event Hubs service may not be published again.\";\n\n/**\n * @internal\n */\nexport const idempotentSomeAlreadyPublished =\n \"1 or more of these events have already been successfully published. When idempotent publishing is enabled, events that were acknowledged by the Event Hubs service may not be published again.\";\n\n/**\n * @internal\n */\nexport function validateProducerPartitionSettings({\n enableIdempotentRetries,\n partitionId,\n partitionKey,\n}: {\n enableIdempotentRetries?: boolean;\n partitionId?: string;\n partitionKey?: string;\n}): void {\n if (enableIdempotentRetries && (isDefined(partitionKey) || !isDefined(partitionId))) {\n throw new Error(\n `The \"partitionId\" must be supplied and \"partitionKey\" must not be provided when the EventHubProducerClient has \"enableIdempotentRetries\" set to true.`,\n );\n }\n\n if (isDefined(partitionId) && isDefined(partitionKey)) {\n throw new Error(\n `The partitionId (${partitionId}) and partitionKey (${partitionKey}) cannot both be specified.`,\n );\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { AbortSignalLike } from "@azure/abort-controller";
2
- import { OperationTracingOptions } from "@azure/core-tracing";
1
+ import type { AbortSignalLike } from "@azure/abort-controller";
2
+ import type { OperationTracingOptions } from "@azure/core-tracing";
3
3
  /**
4
4
  * Options for configuring tracing and the abortSignal.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"operationOptions.d.ts","sourceRoot":"","sources":["../../../src/util/operationOptions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;GAEG;AAGH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;OAEG;IACH,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C"}
1
+ {"version":3,"file":"operationOptions.d.ts","sourceRoot":"","sources":["../../../src/util/operationOptions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE;;GAEG;AAGH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;OAEG;IACH,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"operationOptions.js","sourceRoot":"","sources":["../../../src/util/operationOptions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { OperationTracingOptions } from \"@azure/core-tracing\";\n\n/**\n * Options for configuring tracing and the abortSignal.\n */\n// NOTE: This class is intended to mirror the relevant fields and structure from\n// @azure/core-http OperationOptions\nexport interface OperationOptions {\n /**\n * The signal which can be used to abort requests.\n */\n abortSignal?: AbortSignalLike;\n /**\n * Options for configuring tracing.\n */\n tracingOptions?: OperationTracingOptions;\n}\n"]}
1
+ {"version":3,"file":"operationOptions.js","sourceRoot":"","sources":["../../../src/util/operationOptions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { OperationTracingOptions } from \"@azure/core-tracing\";\n\n/**\n * Options for configuring tracing and the abortSignal.\n */\n// NOTE: This class is intended to mirror the relevant fields and structure from\n// @azure/core-http OperationOptions\nexport interface OperationOptions {\n /**\n * The signal which can be used to abort requests.\n */\n abortSignal?: AbortSignalLike;\n /**\n * Options for configuring tracing.\n */\n tracingOptions?: OperationTracingOptions;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { RetryOptions } from "@azure/core-amqp";
1
+ import type { RetryOptions } from "@azure/core-amqp";
2
2
  /**
3
3
  * @internal
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"retries.d.ts","sourceRoot":"","sources":["../../../src/util/retries.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,GAAE,YAAiB,GAAG,MAAM,CAKlF"}
1
+ {"version":3,"file":"retries.d.ts","sourceRoot":"","sources":["../../../src/util/retries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,GAAE,YAAiB,GAAG,MAAM,CAKlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"retries.js","sourceRoot":"","sources":["../../../src/util/retries.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,eAA6B,EAAE;IACxE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IACrC,OAAO,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC9D,CAAC,CAAC,SAAS,CAAC,2BAA2B;QACvC,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Constants, RetryOptions } from \"@azure/core-amqp\";\n\n/**\n * @internal\n */\nexport function getRetryAttemptTimeoutInMs(retryOptions: RetryOptions = {}): number {\n const { timeoutInMs } = retryOptions;\n return typeof timeoutInMs !== \"number\" || !isFinite(timeoutInMs)\n ? Constants.defaultOperationTimeoutInMs\n : timeoutInMs;\n}\n"]}
1
+ {"version":3,"file":"retries.js","sourceRoot":"","sources":["../../../src/util/retries.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,eAA6B,EAAE;IACxE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IACrC,OAAO,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC9D,CAAC,CAAC,SAAS,CAAC,2BAA2B;QACvC,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { RetryOptions } from \"@azure/core-amqp\";\nimport { Constants } from \"@azure/core-amqp\";\n\n/**\n * @internal\n */\nexport function getRetryAttemptTimeoutInMs(retryOptions: RetryOptions = {}): number {\n const { timeoutInMs } = retryOptions;\n return typeof timeoutInMs !== \"number\" || !isFinite(timeoutInMs)\n ? Constants.defaultOperationTimeoutInMs\n : timeoutInMs;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { NamedKeyCredential, SASCredential, TokenCredential } from "@azure/core-auth";
1
+ import type { NamedKeyCredential, SASCredential, TokenCredential } from "@azure/core-auth";
2
2
  /**
3
3
  * Typeguard that checks if the input is a credential type the clients accept.
4
4
  * @param thing - Any object.
@@ -1 +1 @@
1
- {"version":3,"file":"typeGuards.d.ts","sourceRoot":"","sources":["../../../src/util/typeGuards.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,eAAe,EAIhB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,eAAe,GAAG,kBAAkB,GAAG,aAAa,CAE/D"}
1
+ {"version":3,"file":"typeGuards.d.ts","sourceRoot":"","sources":["../../../src/util/typeGuards.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG3F;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,eAAe,GAAG,kBAAkB,GAAG,aAAa,CAE/D"}
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import { isNamedKeyCredential, isSASCredential, isTokenCredential, } from "@azure/core-auth";
3
+ import { isNamedKeyCredential, isSASCredential, isTokenCredential } from "@azure/core-auth";
4
4
  /**
5
5
  * Typeguard that checks if the input is a credential type the clients accept.
6
6
  * @param thing - Any object.
@@ -1 +1 @@
1
- {"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../../src/util/typeGuards.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAIL,oBAAoB,EACpB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAc;IAEd,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n NamedKeyCredential,\n SASCredential,\n TokenCredential,\n isNamedKeyCredential,\n isSASCredential,\n isTokenCredential,\n} from \"@azure/core-auth\";\n\n/**\n * Typeguard that checks if the input is a credential type the clients accept.\n * @param thing - Any object.\n * @internal\n */\nexport function isCredential(\n thing: unknown,\n): thing is TokenCredential | NamedKeyCredential | SASCredential {\n return isTokenCredential(thing) || isNamedKeyCredential(thing) || isSASCredential(thing);\n}\n"]}
1
+ {"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../../src/util/typeGuards.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE5F;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAc;IAEd,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { NamedKeyCredential, SASCredential, TokenCredential } from \"@azure/core-auth\";\nimport { isNamedKeyCredential, isSASCredential, isTokenCredential } from \"@azure/core-auth\";\n\n/**\n * Typeguard that checks if the input is a credential type the clients accept.\n * @param thing - Any object.\n * @internal\n */\nexport function isCredential(\n thing: unknown,\n): thing is TokenCredential | NamedKeyCredential | SASCredential {\n return isTokenCredential(thing) || isNamedKeyCredential(thing) || isSASCredential(thing);\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { CbsClient } from "@azure/core-amqp";
2
- import { AbortSignalLike } from "@azure/abort-controller";
3
- import { ConnectionContext } from "./connectionContext.js";
4
- import { TimerLoop } from "./util/timerLoop.js";
5
- import { SimpleLogger } from "./logger.js";
1
+ import type { CbsClient } from "@azure/core-amqp";
2
+ import type { AbortSignalLike } from "@azure/abort-controller";
3
+ import type { ConnectionContext } from "./connectionContext.js";
4
+ import type { TimerLoop } from "./util/timerLoop.js";
5
+ import type { SimpleLogger } from "./logger.js";
6
6
  /**
7
7
  *
8
8
  * @param callback - The callback to be executed after the token is obtained.
@@ -1 +1 @@
1
- {"version":3,"file":"withAuth.d.ts","sourceRoot":"","sources":["../../src/withAuth.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,SAAS,EAEV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAmB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAU,MAAM,aAAa,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,GACA,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,qBAAqB,EAAE,MAAM,EAC7B,EAAE,WAAW,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,eAAe,CAAA;CAAO,GACtD,OAAO,CAAC,IAAI,CAAC,CAaf"}
1
+ {"version":3,"file":"withAuth.d.ts","sourceRoot":"","sources":["../../src/withAuth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,SAAS,EAAe,MAAM,kBAAkB,CAAC;AAEjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,GACA,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,qBAAqB,EAAE,MAAM,EAC7B,EAAE,WAAW,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,eAAe,CAAA;CAAO,GACtD,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import { Constants, TokenType, defaultCancellableLock, isSasTokenProvider, } from "@azure/core-amqp";
3
+ import { Constants, TokenType, defaultCancellableLock, isSasTokenProvider } from "@azure/core-amqp";
4
4
  import { createTimerLoop } from "./util/timerLoop.js";
5
5
  import { logObj } from "./logger.js";
6
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"withAuth.js","sourceRoot":"","sources":["../../src/withAuth.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n Constants,\n TokenType,\n defaultCancellableLock,\n isSasTokenProvider,\n SasTokenProvider,\n CbsClient,\n CbsResponse,\n} from \"@azure/core-amqp\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AccessToken, TokenCredential } from \"@azure/core-auth\";\nimport { ConnectionContext } from \"./connectionContext.js\";\nimport { createTimerLoop, TimerLoop } from \"./util/timerLoop.js\";\nimport { SimpleLogger, logObj } from \"./logger.js\";\n\n/**\n *\n * @param callback - The callback to be executed after the token is obtained.\n * @param context - The connection context.\n * @param audience - The audience for which the token is needed.\n * @param timeoutInMs - The timeout in milliseconds.\n * @param logger - The logger to be used for logging.\n * @returns A TimerLoop that keeps the token refreshed.\n * @internal\n */\nexport async function withAuth(\n callback: () => Promise<void>,\n context: ConnectionContext,\n audience: string,\n timeoutInMs: number,\n logger: SimpleLogger,\n options: {\n abortSignal?: AbortSignalLike;\n },\n): Promise<TimerLoop> {\n const info = await getTokenInfo(context.tokenCredential, audience);\n await setupClaimNegotiation(context, audience, info, timeoutInMs, logger, options);\n await callback();\n async function createTask(): Promise<void> {\n try {\n const info2 = await getTokenInfo(context.tokenCredential, audience);\n await setupClaimNegotiation(context, audience, info2, timeoutInMs, logger, options);\n logger.verbose(\n `next token renewal is in ${info2.timeToLiveInMs} milliseconds @(${new Date(\n Date.now() + info2.timeToLiveInMs,\n ).toString()}).`,\n );\n } catch (err) {\n logger.verbose(`an error occurred while renewing the token: ${logObj(err)}`);\n }\n }\n const loop = createTimerLoop(info.timeToLiveInMs, createTask);\n loop.start();\n return loop;\n}\n\n/**\n * @internal\n */\nexport async function openCbsSession(\n client: CbsClient,\n timeoutAfterStartTime: number,\n { abortSignal }: { abortSignal?: AbortSignalLike } = {},\n): Promise<void> {\n return defaultCancellableLock.acquire(\n client.cbsLock,\n () =>\n client.init({\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n }),\n {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n },\n );\n}\n\n/**\n * A representation of an access token.\n * @internal\n */\ninterface TokenInfo {\n /** The access token */\n token: AccessToken;\n /** The type of the token */\n type: TokenType;\n /** The time duration after which the token should be refreshed */\n timeToLiveInMs: number;\n}\n\nasync function getAadToken(cred: TokenCredential): Promise<TokenInfo> {\n const token = await cred.getToken(Constants.aadEventHubsScope);\n if (!token) {\n throw new Error(`Failed to get token from the provided \"TokenCredential\" object`);\n }\n return {\n token,\n type: TokenType.CbsTokenTypeJwt,\n timeToLiveInMs: token.expiresOnTimestamp - Date.now() - 2 * 60 * 1000,\n };\n}\n\nasync function getSharedKeyBasedToken(\n cred: SasTokenProvider,\n audience: string,\n): Promise<TokenInfo> {\n return {\n token: await cred.getToken(audience),\n type: TokenType.CbsTokenTypeSas,\n timeToLiveInMs: 45 * 60 * 1000,\n };\n}\n\nasync function getTokenInfo(\n cred: SasTokenProvider | TokenCredential,\n audience: string,\n): Promise<TokenInfo> {\n return isSasTokenProvider(cred) ? getSharedKeyBasedToken(cred, audience) : getAadToken(cred);\n}\n\nfunction negotiateClaim(\n { token, type }: TokenInfo,\n audience: string,\n cbsSession: CbsClient,\n timeoutAfterStartTime: number,\n lock: string,\n abortSignal?: AbortSignalLike,\n): Promise<CbsResponse> {\n return defaultCancellableLock.acquire(\n lock,\n () =>\n cbsSession.negotiateClaim(audience, token.token, type, {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n }),\n {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n },\n );\n}\n\nasync function setupClaimNegotiation(\n context: ConnectionContext,\n audience: string,\n info: TokenInfo,\n timeoutInMs: number,\n logger: SimpleLogger,\n {\n abortSignal,\n }: {\n abortSignal?: AbortSignalLike;\n },\n): Promise<void> {\n const startTime = Date.now();\n logger.verbose(\n `acquiring cbs lock: '${context.cbsSession.cbsLock}' for creating the cbs session`,\n );\n\n await openCbsSession(context.cbsSession, timeoutInMs + startTime, { abortSignal });\n logger.verbose(`acquiring cbs lock: '${context.negotiateClaimLock}' for cbs auth`);\n await negotiateClaim(\n info,\n audience,\n context.cbsSession,\n timeoutInMs + startTime,\n context.negotiateClaimLock,\n abortSignal,\n );\n logger.verbose(\"claim negotiation succeeded\");\n}\n"]}
1
+ {"version":3,"file":"withAuth.js","sourceRoot":"","sources":["../../src/withAuth.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { SasTokenProvider, CbsClient, CbsResponse } from \"@azure/core-amqp\";\nimport { Constants, TokenType, defaultCancellableLock, isSasTokenProvider } from \"@azure/core-amqp\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { AccessToken, TokenCredential } from \"@azure/core-auth\";\nimport type { ConnectionContext } from \"./connectionContext.js\";\nimport type { TimerLoop } from \"./util/timerLoop.js\";\nimport { createTimerLoop } from \"./util/timerLoop.js\";\nimport type { SimpleLogger } from \"./logger.js\";\nimport { logObj } from \"./logger.js\";\n\n/**\n *\n * @param callback - The callback to be executed after the token is obtained.\n * @param context - The connection context.\n * @param audience - The audience for which the token is needed.\n * @param timeoutInMs - The timeout in milliseconds.\n * @param logger - The logger to be used for logging.\n * @returns A TimerLoop that keeps the token refreshed.\n * @internal\n */\nexport async function withAuth(\n callback: () => Promise<void>,\n context: ConnectionContext,\n audience: string,\n timeoutInMs: number,\n logger: SimpleLogger,\n options: {\n abortSignal?: AbortSignalLike;\n },\n): Promise<TimerLoop> {\n const info = await getTokenInfo(context.tokenCredential, audience);\n await setupClaimNegotiation(context, audience, info, timeoutInMs, logger, options);\n await callback();\n async function createTask(): Promise<void> {\n try {\n const info2 = await getTokenInfo(context.tokenCredential, audience);\n await setupClaimNegotiation(context, audience, info2, timeoutInMs, logger, options);\n logger.verbose(\n `next token renewal is in ${info2.timeToLiveInMs} milliseconds @(${new Date(\n Date.now() + info2.timeToLiveInMs,\n ).toString()}).`,\n );\n } catch (err) {\n logger.verbose(`an error occurred while renewing the token: ${logObj(err)}`);\n }\n }\n const loop = createTimerLoop(info.timeToLiveInMs, createTask);\n loop.start();\n return loop;\n}\n\n/**\n * @internal\n */\nexport async function openCbsSession(\n client: CbsClient,\n timeoutAfterStartTime: number,\n { abortSignal }: { abortSignal?: AbortSignalLike } = {},\n): Promise<void> {\n return defaultCancellableLock.acquire(\n client.cbsLock,\n () =>\n client.init({\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n }),\n {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n },\n );\n}\n\n/**\n * A representation of an access token.\n * @internal\n */\ninterface TokenInfo {\n /** The access token */\n token: AccessToken;\n /** The type of the token */\n type: TokenType;\n /** The time duration after which the token should be refreshed */\n timeToLiveInMs: number;\n}\n\nasync function getAadToken(cred: TokenCredential): Promise<TokenInfo> {\n const token = await cred.getToken(Constants.aadEventHubsScope);\n if (!token) {\n throw new Error(`Failed to get token from the provided \"TokenCredential\" object`);\n }\n return {\n token,\n type: TokenType.CbsTokenTypeJwt,\n timeToLiveInMs: token.expiresOnTimestamp - Date.now() - 2 * 60 * 1000,\n };\n}\n\nasync function getSharedKeyBasedToken(\n cred: SasTokenProvider,\n audience: string,\n): Promise<TokenInfo> {\n return {\n token: await cred.getToken(audience),\n type: TokenType.CbsTokenTypeSas,\n timeToLiveInMs: 45 * 60 * 1000,\n };\n}\n\nasync function getTokenInfo(\n cred: SasTokenProvider | TokenCredential,\n audience: string,\n): Promise<TokenInfo> {\n return isSasTokenProvider(cred) ? getSharedKeyBasedToken(cred, audience) : getAadToken(cred);\n}\n\nfunction negotiateClaim(\n { token, type }: TokenInfo,\n audience: string,\n cbsSession: CbsClient,\n timeoutAfterStartTime: number,\n lock: string,\n abortSignal?: AbortSignalLike,\n): Promise<CbsResponse> {\n return defaultCancellableLock.acquire(\n lock,\n () =>\n cbsSession.negotiateClaim(audience, token.token, type, {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n }),\n {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n },\n );\n}\n\nasync function setupClaimNegotiation(\n context: ConnectionContext,\n audience: string,\n info: TokenInfo,\n timeoutInMs: number,\n logger: SimpleLogger,\n {\n abortSignal,\n }: {\n abortSignal?: AbortSignalLike;\n },\n): Promise<void> {\n const startTime = Date.now();\n logger.verbose(\n `acquiring cbs lock: '${context.cbsSession.cbsLock}' for creating the cbs session`,\n );\n\n await openCbsSession(context.cbsSession, timeoutInMs + startTime, { abortSignal });\n logger.verbose(`acquiring cbs lock: '${context.negotiateClaimLock}' for cbs auth`);\n await negotiateClaim(\n info,\n audience,\n context.cbsSession,\n timeoutInMs + startTime,\n context.negotiateClaimLock,\n abortSignal,\n );\n logger.verbose(\"claim negotiation succeeded\");\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { AmqpAnnotatedMessage } from "@azure/core-amqp";
2
- import { EventData, EventHubBufferedProducerClientOptions, EventHubProducerClient, OperationOptions } from "./index.js";
3
- import { AbortSignalLike } from "@azure/abort-controller";
1
+ import type { AmqpAnnotatedMessage } from "@azure/core-amqp";
2
+ import type { EventData, EventHubBufferedProducerClientOptions, EventHubProducerClient, OperationOptions } from "./index.js";
3
+ import type { AbortSignalLike } from "@azure/abort-controller";
4
4
  export interface BatchingPartitionChannelProps {
5
5
  loopAbortSignal: AbortSignalLike;
6
6
  maxBufferSize: number;
@@ -1 +1 @@
1
- {"version":3,"file":"batchingPartitionChannel.d.ts","sourceRoot":"","sources":["../../src/batchingPartitionChannel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAS,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,SAAS,EAET,qCAAqC,EACrC,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM1D,MAAM,WAAW,6BAA6B;IAC5C,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,sBAAsB,CAAC;IACjC;;OAEG;IACH,0BAA0B,CAAC,EAAE,qCAAqC,CAAC,4BAA4B,CAAC,CAAC;IACjG;;OAEG;IACH,wBAAwB,EAAE,qCAAqC,CAAC,0BAA0B,CAAC,CAAC;CAC7F;AAED;;;;GAIG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,WAAW,CAA0D;IAC7E,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAGX;IACR,OAAO,CAAC,WAAW,CAIjB;IACF,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,yBAAyB,CAAoE;IACrG,OAAO,CAAC,2BAA2B,CAAC,CAAsE;IAE1G,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAyB;gBAE9B,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,WAAW,EACX,QAAQ,GACT,EAAE,6BAA6B;IAUhC,uBAAuB,IAAI,MAAM;IAI3B,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1E;;;;;OAKG;IACG,KAAK,CAAC,QAAQ,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D;;;OAGG;IACH,OAAO,CAAC,MAAM;IAmBd;;;;OAIG;YACW,iBAAiB;IAuF/B;;;;;;;OAOG;YACW,YAAY;IAU1B;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAW1B"}
1
+ {"version":3,"file":"batchingPartitionChannel.d.ts","sourceRoot":"","sources":["../../src/batchingPartitionChannel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,EACV,SAAS,EAET,qCAAqC,EACrC,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM/D,MAAM,WAAW,6BAA6B;IAC5C,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,sBAAsB,CAAC;IACjC;;OAEG;IACH,0BAA0B,CAAC,EAAE,qCAAqC,CAAC,4BAA4B,CAAC,CAAC;IACjG;;OAEG;IACH,wBAAwB,EAAE,qCAAqC,CAAC,0BAA0B,CAAC,CAAC;CAC7F;AAED;;;;GAIG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,WAAW,CAA0D;IAC7E,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAGX;IACR,OAAO,CAAC,WAAW,CAIjB;IACF,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,yBAAyB,CAAoE;IACrG,OAAO,CAAC,2BAA2B,CAAC,CAAsE;IAE1G,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAyB;gBAE9B,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,WAAW,EACX,QAAQ,GACT,EAAE,6BAA6B;IAUhC,uBAAuB,IAAI,MAAM;IAI3B,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1E;;;;;OAKG;IACG,KAAK,CAAC,QAAQ,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D;;;OAGG;IACH,OAAO,CAAC,MAAM;IAmBd;;;;OAIG;YACW,iBAAiB;IAuF/B;;;;;;;OAOG;YACW,YAAY;IAU1B;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAW1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"batchingPartitionChannel.js","sourceRoot":"","sources":["../../src/batchingPartitionChannel.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { AmqpAnnotatedMessage, delay } from \"@azure/core-amqp\";\nimport {\n EventData,\n EventDataBatch,\n EventHubBufferedProducerClientOptions,\n EventHubProducerClient,\n OperationOptions,\n} from \"./index.js\";\nimport { isDefined, isObjectWithProperties, AbortOptions } from \"@azure/core-util\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AwaitableQueue } from \"./impl/awaitableQueue.js\";\nimport { getPromiseParts } from \"./util/getPromiseParts.js\";\nimport { logger } from \"./logger.js\";\nimport { cancelablePromiseRace } from \"@azure/core-util\";\n\nexport interface BatchingPartitionChannelProps {\n loopAbortSignal: AbortSignalLike;\n maxBufferSize: number;\n maxWaitTimeInMs: number;\n partitionId: string;\n producer: EventHubProducerClient;\n /**\n * The handler to call once a batch has successfully published.\n */\n onSendEventsSuccessHandler?: EventHubBufferedProducerClientOptions[\"onSendEventsSuccessHandler\"];\n /**\n * The handler to call when a batch fails to publish.\n */\n onSendEventsErrorHandler: EventHubBufferedProducerClientOptions[\"onSendEventsErrorHandler\"];\n}\n\n/**\n * The `BatchingPartitionChannel` is responsible for accepting enqueued events\n * and optimally batching and sending them to an Event Hub.\n * @internal\n */\nexport class BatchingPartitionChannel {\n private _eventQueue = new AwaitableQueue<EventData | AmqpAnnotatedMessage>();\n private _batchedEvents: Array<EventData | AmqpAnnotatedMessage> = [];\n private _bufferCount: number = 0;\n private _readyQueue: Array<{\n resolve: (value: void) => void;\n reject: (reason?: any) => void;\n }> = [];\n private _flushState:\n | { isFlushing: false }\n | { isFlushing: true; currentPromise: Promise<void>; resolve: () => void } = {\n isFlushing: false,\n };\n private _isRunning: boolean = false;\n private _lastBatchCreationTime: number = 0;\n private _loopAbortSignal: AbortSignalLike;\n private _maxBufferSize: number;\n private _maxWaitTimeInMs: number;\n private _onSendEventsErrorHandler: EventHubBufferedProducerClientOptions[\"onSendEventsErrorHandler\"];\n private _onSendEventsSuccessHandler?: EventHubBufferedProducerClientOptions[\"onSendEventsSuccessHandler\"];\n\n private _partitionId: string;\n private _producer: EventHubProducerClient;\n\n constructor({\n loopAbortSignal,\n maxBufferSize,\n maxWaitTimeInMs,\n onSendEventsErrorHandler,\n onSendEventsSuccessHandler,\n partitionId,\n producer,\n }: BatchingPartitionChannelProps) {\n this._loopAbortSignal = loopAbortSignal;\n this._maxBufferSize = maxBufferSize;\n this._maxWaitTimeInMs = maxWaitTimeInMs;\n this._onSendEventsErrorHandler = onSendEventsErrorHandler;\n this._onSendEventsSuccessHandler = onSendEventsSuccessHandler;\n this._partitionId = partitionId;\n this._producer = producer;\n }\n\n getCurrentBufferedCount(): number {\n return this._bufferCount;\n }\n\n async enqueueEvent(event: EventData | AmqpAnnotatedMessage): Promise<void> {\n await this._ready();\n this._eventQueue.push(event);\n this._bufferCount++;\n\n if (!this._isRunning) {\n this._isRunning = true;\n this._startPublishLoop().catch((e) => {\n logger.error(\n `The following error occured during batch creation or sending: ${JSON.stringify(\n e,\n undefined,\n \" \",\n )}`,\n );\n });\n }\n }\n\n /**\n * Sets the flush state so that no new events can be enqueued until\n * all the currently buffered events are sent to the Event Hub.\n *\n * Returns a promise that resolves once flushing is complete.\n */\n async flush(_options: OperationOptions = {}): Promise<void> {\n const state = this._flushState;\n if (state.isFlushing) {\n return state.currentPromise;\n }\n\n if (this.getCurrentBufferedCount() === 0) {\n return Promise.resolve();\n }\n\n const { promise, resolve } = getPromiseParts<void>();\n this._flushState = { isFlushing: true, currentPromise: promise, resolve };\n\n return promise;\n }\n\n /**\n * Returns a promise that resolves once there is room for events to be added\n * to the buffer.\n */\n private _ready(): Promise<void> {\n const currentBufferedCount = this.getCurrentBufferedCount();\n\n // If the buffer isn't full and we don't have any pending `ready()` calls,\n // then it's safe to return right away.\n if (\n currentBufferedCount < this._maxBufferSize &&\n !this._readyQueue.length &&\n !this._flushState.isFlushing\n ) {\n return Promise.resolve();\n }\n\n const { promise: readyPromise, reject, resolve } = getPromiseParts<void>();\n this._readyQueue.push({ resolve, reject });\n\n return readyPromise;\n }\n\n /**\n * Starts the loop that creates batches and sends them to the Event Hub.\n *\n * The loop will run until the `_loopAbortSignal` is aborted.\n */\n private async _startPublishLoop() {\n let batch: EventDataBatch | undefined;\n // `eventToAddToBatch` is used to keep track of an event that has been removed\n // from the queue, but has not yet been added to a batch.\n // This prevents losing an event if a `sendBatch` or `createBatch` call fails\n // before the event is added to a batch.\n let eventToAddToBatch: EventData | AmqpAnnotatedMessage | undefined;\n while (!this._loopAbortSignal.aborted) {\n try {\n if (!isDefined(batch)) {\n batch = await this._createBatch();\n }\n const timeSinceLastBatchCreation = Date.now() - this._lastBatchCreationTime;\n const maximumTimeToWaitForEvent = batch.count\n ? Math.max(this._maxWaitTimeInMs - timeSinceLastBatchCreation, 0)\n : this._maxWaitTimeInMs;\n\n const event =\n eventToAddToBatch ??\n (await cancelablePromiseRace<[EventData | AmqpAnnotatedMessage, void]>(\n [\n (abortOptions: AbortOptions) => this._eventQueue.shift(abortOptions),\n (abortOptions: AbortOptions) =>\n delay<void>(\n maximumTimeToWaitForEvent,\n abortOptions.abortSignal,\n abortOptions.abortErrorMsg,\n ),\n ],\n { abortSignal: this._loopAbortSignal },\n ));\n\n if (!event) {\n // We didn't receive an event within the allotted time.\n // Send the existing batch if it has events in it.\n if (batch.count) {\n await this._producer.sendBatch(batch);\n this._reportSuccess();\n batch = await this._createBatch();\n }\n continue;\n } else if (!eventToAddToBatch) {\n eventToAddToBatch = event;\n }\n\n const didAdd = batch.tryAdd(event);\n if (didAdd) {\n // This event will definitely make it to one of the user-provided handlers\n // since it was added to a batch.\n // Store it so we can return it in a handler later.\n this._batchedEvents.push(event);\n // Clear reference to existing event since it has been added to the batch.\n eventToAddToBatch = undefined;\n }\n\n if (didAdd && batch.count >= this._maxBufferSize) {\n // Whenever batch.count exceeds the max count of buffered events, send the batch.\n await this._producer.sendBatch(batch);\n this._reportSuccess();\n batch = await this._createBatch();\n } else if (!didAdd && batch.count) {\n // If the event wasn't able to be added and the current batch isn't empty,\n // attempt to send the current batch and add the event to a new batch.\n await this._producer.sendBatch(batch);\n this._reportSuccess();\n batch = await this._createBatch();\n }\n\n if (!didAdd && !batch.tryAdd(event)) {\n // TODO: Report MaxMesageSizeExceeded error. Mimic service's error.\n this._reportFailure(new Error(\"Placeholder for max message size exceeded\"), event);\n } else if (!didAdd) {\n // Handles the case where the event _was_ successfull added to the new batch.\n this._batchedEvents.push(event);\n }\n // Clear reference to existing event since it has been added to the batch.\n eventToAddToBatch = undefined;\n } catch (err: any) {\n if (!isObjectWithProperties(err, [\"name\"]) || err.name !== \"AbortError\") {\n this._reportFailure(err);\n batch = undefined;\n this._batchedEvents = [];\n }\n }\n }\n }\n\n /**\n * Helper method that returns an `EventDataBatch`.\n * This also has the side effects of\n * - keeping track of batch creation time: needed for maxWaitTime calculations.\n * - clearing reference to batched events.\n * - incrementing the readiness: creating a new batch indicates the buffer\n * should have room, so we can resolve some pending `ready()` calls.\n */\n private async _createBatch(): Promise<EventDataBatch> {\n this._lastBatchCreationTime = Date.now();\n this._batchedEvents = [];\n const batch = await this._producer.createBatch({\n partitionId: this._partitionId,\n });\n this._incrementReadiness();\n return batch;\n }\n\n /**\n * This method will resolve as many pending `ready()` calls as it can\n * based on how much space remains in the buffer.\n *\n * If the channel is currently flushing, this is a no-op. This prevents\n * `enqueueEvent` calls from adding the event to the buffer until flushing\n * completes.\n */\n private _incrementReadiness() {\n if (this._flushState.isFlushing) {\n return;\n }\n const currentBufferedCount = this.getCurrentBufferedCount();\n const num = Math.min(this._maxBufferSize - currentBufferedCount, this._readyQueue.length);\n for (let i = 0; i < num; i++) {\n this._readyQueue.shift()?.resolve();\n }\n }\n\n /**\n * Calls the user-provided `onSendEventsSuccessHandler` with the events\n * that were successfully sent.\n */\n private _reportSuccess() {\n this._bufferCount = this._bufferCount - this._batchedEvents.length;\n this._updateFlushState();\n try {\n this._onSendEventsSuccessHandler?.({\n events: this._batchedEvents,\n partitionId: this._partitionId,\n });\n } catch (e: unknown) {\n logger.error(\n `The following error occurred in the onSendEventsSuccessHandler: ${JSON.stringify(\n e,\n undefined,\n \" \",\n )}`,\n );\n }\n }\n\n /**\n * Calls the user-provided `onSendEventsErrorHandler` with an error and the events\n * that were not successfully sent.\n */\n private _reportFailure(err: any, event?: EventData | AmqpAnnotatedMessage) {\n this._bufferCount = this._bufferCount - (event ? 1 : this._batchedEvents.length);\n this._updateFlushState();\n try {\n this._onSendEventsErrorHandler({\n error: err,\n events: event ? [event] : this._batchedEvents,\n partitionId: this._partitionId,\n });\n } catch (e: unknown) {\n logger.error(\n `The following error occurred in the onSendEventsErrorHandler: ${JSON.stringify(\n e,\n undefined,\n \" \",\n )}`,\n );\n }\n }\n\n /**\n * Updates the channel's flush state once the size of the\n * event buffer has decreased to 0.\n */\n private _updateFlushState() {\n const state = this._flushState;\n if (!state.isFlushing || this.getCurrentBufferedCount() !== 0) {\n return;\n }\n\n state.resolve();\n\n this._flushState = { isFlushing: false };\n this._incrementReadiness();\n }\n}\n"]}
1
+ {"version":3,"file":"batchingPartitionChannel.js","sourceRoot":"","sources":["../../src/batchingPartitionChannel.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AmqpAnnotatedMessage } from \"@azure/core-amqp\";\nimport { delay } from \"@azure/core-amqp\";\nimport type {\n EventData,\n EventDataBatch,\n EventHubBufferedProducerClientOptions,\n EventHubProducerClient,\n OperationOptions,\n} from \"./index.js\";\nimport type { AbortOptions } from \"@azure/core-util\";\nimport { isDefined, isObjectWithProperties } from \"@azure/core-util\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AwaitableQueue } from \"./impl/awaitableQueue.js\";\nimport { getPromiseParts } from \"./util/getPromiseParts.js\";\nimport { logger } from \"./logger.js\";\nimport { cancelablePromiseRace } from \"@azure/core-util\";\n\nexport interface BatchingPartitionChannelProps {\n loopAbortSignal: AbortSignalLike;\n maxBufferSize: number;\n maxWaitTimeInMs: number;\n partitionId: string;\n producer: EventHubProducerClient;\n /**\n * The handler to call once a batch has successfully published.\n */\n onSendEventsSuccessHandler?: EventHubBufferedProducerClientOptions[\"onSendEventsSuccessHandler\"];\n /**\n * The handler to call when a batch fails to publish.\n */\n onSendEventsErrorHandler: EventHubBufferedProducerClientOptions[\"onSendEventsErrorHandler\"];\n}\n\n/**\n * The `BatchingPartitionChannel` is responsible for accepting enqueued events\n * and optimally batching and sending them to an Event Hub.\n * @internal\n */\nexport class BatchingPartitionChannel {\n private _eventQueue = new AwaitableQueue<EventData | AmqpAnnotatedMessage>();\n private _batchedEvents: Array<EventData | AmqpAnnotatedMessage> = [];\n private _bufferCount: number = 0;\n private _readyQueue: Array<{\n resolve: (value: void) => void;\n reject: (reason?: any) => void;\n }> = [];\n private _flushState:\n | { isFlushing: false }\n | { isFlushing: true; currentPromise: Promise<void>; resolve: () => void } = {\n isFlushing: false,\n };\n private _isRunning: boolean = false;\n private _lastBatchCreationTime: number = 0;\n private _loopAbortSignal: AbortSignalLike;\n private _maxBufferSize: number;\n private _maxWaitTimeInMs: number;\n private _onSendEventsErrorHandler: EventHubBufferedProducerClientOptions[\"onSendEventsErrorHandler\"];\n private _onSendEventsSuccessHandler?: EventHubBufferedProducerClientOptions[\"onSendEventsSuccessHandler\"];\n\n private _partitionId: string;\n private _producer: EventHubProducerClient;\n\n constructor({\n loopAbortSignal,\n maxBufferSize,\n maxWaitTimeInMs,\n onSendEventsErrorHandler,\n onSendEventsSuccessHandler,\n partitionId,\n producer,\n }: BatchingPartitionChannelProps) {\n this._loopAbortSignal = loopAbortSignal;\n this._maxBufferSize = maxBufferSize;\n this._maxWaitTimeInMs = maxWaitTimeInMs;\n this._onSendEventsErrorHandler = onSendEventsErrorHandler;\n this._onSendEventsSuccessHandler = onSendEventsSuccessHandler;\n this._partitionId = partitionId;\n this._producer = producer;\n }\n\n getCurrentBufferedCount(): number {\n return this._bufferCount;\n }\n\n async enqueueEvent(event: EventData | AmqpAnnotatedMessage): Promise<void> {\n await this._ready();\n this._eventQueue.push(event);\n this._bufferCount++;\n\n if (!this._isRunning) {\n this._isRunning = true;\n this._startPublishLoop().catch((e) => {\n logger.error(\n `The following error occured during batch creation or sending: ${JSON.stringify(\n e,\n undefined,\n \" \",\n )}`,\n );\n });\n }\n }\n\n /**\n * Sets the flush state so that no new events can be enqueued until\n * all the currently buffered events are sent to the Event Hub.\n *\n * Returns a promise that resolves once flushing is complete.\n */\n async flush(_options: OperationOptions = {}): Promise<void> {\n const state = this._flushState;\n if (state.isFlushing) {\n return state.currentPromise;\n }\n\n if (this.getCurrentBufferedCount() === 0) {\n return Promise.resolve();\n }\n\n const { promise, resolve } = getPromiseParts<void>();\n this._flushState = { isFlushing: true, currentPromise: promise, resolve };\n\n return promise;\n }\n\n /**\n * Returns a promise that resolves once there is room for events to be added\n * to the buffer.\n */\n private _ready(): Promise<void> {\n const currentBufferedCount = this.getCurrentBufferedCount();\n\n // If the buffer isn't full and we don't have any pending `ready()` calls,\n // then it's safe to return right away.\n if (\n currentBufferedCount < this._maxBufferSize &&\n !this._readyQueue.length &&\n !this._flushState.isFlushing\n ) {\n return Promise.resolve();\n }\n\n const { promise: readyPromise, reject, resolve } = getPromiseParts<void>();\n this._readyQueue.push({ resolve, reject });\n\n return readyPromise;\n }\n\n /**\n * Starts the loop that creates batches and sends them to the Event Hub.\n *\n * The loop will run until the `_loopAbortSignal` is aborted.\n */\n private async _startPublishLoop() {\n let batch: EventDataBatch | undefined;\n // `eventToAddToBatch` is used to keep track of an event that has been removed\n // from the queue, but has not yet been added to a batch.\n // This prevents losing an event if a `sendBatch` or `createBatch` call fails\n // before the event is added to a batch.\n let eventToAddToBatch: EventData | AmqpAnnotatedMessage | undefined;\n while (!this._loopAbortSignal.aborted) {\n try {\n if (!isDefined(batch)) {\n batch = await this._createBatch();\n }\n const timeSinceLastBatchCreation = Date.now() - this._lastBatchCreationTime;\n const maximumTimeToWaitForEvent = batch.count\n ? Math.max(this._maxWaitTimeInMs - timeSinceLastBatchCreation, 0)\n : this._maxWaitTimeInMs;\n\n const event =\n eventToAddToBatch ??\n (await cancelablePromiseRace<[EventData | AmqpAnnotatedMessage, void]>(\n [\n (abortOptions: AbortOptions) => this._eventQueue.shift(abortOptions),\n (abortOptions: AbortOptions) =>\n delay<void>(\n maximumTimeToWaitForEvent,\n abortOptions.abortSignal,\n abortOptions.abortErrorMsg,\n ),\n ],\n { abortSignal: this._loopAbortSignal },\n ));\n\n if (!event) {\n // We didn't receive an event within the allotted time.\n // Send the existing batch if it has events in it.\n if (batch.count) {\n await this._producer.sendBatch(batch);\n this._reportSuccess();\n batch = await this._createBatch();\n }\n continue;\n } else if (!eventToAddToBatch) {\n eventToAddToBatch = event;\n }\n\n const didAdd = batch.tryAdd(event);\n if (didAdd) {\n // This event will definitely make it to one of the user-provided handlers\n // since it was added to a batch.\n // Store it so we can return it in a handler later.\n this._batchedEvents.push(event);\n // Clear reference to existing event since it has been added to the batch.\n eventToAddToBatch = undefined;\n }\n\n if (didAdd && batch.count >= this._maxBufferSize) {\n // Whenever batch.count exceeds the max count of buffered events, send the batch.\n await this._producer.sendBatch(batch);\n this._reportSuccess();\n batch = await this._createBatch();\n } else if (!didAdd && batch.count) {\n // If the event wasn't able to be added and the current batch isn't empty,\n // attempt to send the current batch and add the event to a new batch.\n await this._producer.sendBatch(batch);\n this._reportSuccess();\n batch = await this._createBatch();\n }\n\n if (!didAdd && !batch.tryAdd(event)) {\n // TODO: Report MaxMesageSizeExceeded error. Mimic service's error.\n this._reportFailure(new Error(\"Placeholder for max message size exceeded\"), event);\n } else if (!didAdd) {\n // Handles the case where the event _was_ successfull added to the new batch.\n this._batchedEvents.push(event);\n }\n // Clear reference to existing event since it has been added to the batch.\n eventToAddToBatch = undefined;\n } catch (err: any) {\n if (!isObjectWithProperties(err, [\"name\"]) || err.name !== \"AbortError\") {\n this._reportFailure(err);\n batch = undefined;\n this._batchedEvents = [];\n }\n }\n }\n }\n\n /**\n * Helper method that returns an `EventDataBatch`.\n * This also has the side effects of\n * - keeping track of batch creation time: needed for maxWaitTime calculations.\n * - clearing reference to batched events.\n * - incrementing the readiness: creating a new batch indicates the buffer\n * should have room, so we can resolve some pending `ready()` calls.\n */\n private async _createBatch(): Promise<EventDataBatch> {\n this._lastBatchCreationTime = Date.now();\n this._batchedEvents = [];\n const batch = await this._producer.createBatch({\n partitionId: this._partitionId,\n });\n this._incrementReadiness();\n return batch;\n }\n\n /**\n * This method will resolve as many pending `ready()` calls as it can\n * based on how much space remains in the buffer.\n *\n * If the channel is currently flushing, this is a no-op. This prevents\n * `enqueueEvent` calls from adding the event to the buffer until flushing\n * completes.\n */\n private _incrementReadiness() {\n if (this._flushState.isFlushing) {\n return;\n }\n const currentBufferedCount = this.getCurrentBufferedCount();\n const num = Math.min(this._maxBufferSize - currentBufferedCount, this._readyQueue.length);\n for (let i = 0; i < num; i++) {\n this._readyQueue.shift()?.resolve();\n }\n }\n\n /**\n * Calls the user-provided `onSendEventsSuccessHandler` with the events\n * that were successfully sent.\n */\n private _reportSuccess() {\n this._bufferCount = this._bufferCount - this._batchedEvents.length;\n this._updateFlushState();\n try {\n this._onSendEventsSuccessHandler?.({\n events: this._batchedEvents,\n partitionId: this._partitionId,\n });\n } catch (e: unknown) {\n logger.error(\n `The following error occurred in the onSendEventsSuccessHandler: ${JSON.stringify(\n e,\n undefined,\n \" \",\n )}`,\n );\n }\n }\n\n /**\n * Calls the user-provided `onSendEventsErrorHandler` with an error and the events\n * that were not successfully sent.\n */\n private _reportFailure(err: any, event?: EventData | AmqpAnnotatedMessage) {\n this._bufferCount = this._bufferCount - (event ? 1 : this._batchedEvents.length);\n this._updateFlushState();\n try {\n this._onSendEventsErrorHandler({\n error: err,\n events: event ? [event] : this._batchedEvents,\n partitionId: this._partitionId,\n });\n } catch (e: unknown) {\n logger.error(\n `The following error occurred in the onSendEventsErrorHandler: ${JSON.stringify(\n e,\n undefined,\n \" \",\n )}`,\n );\n }\n }\n\n /**\n * Updates the channel's flush state once the size of the\n * event buffer has decreased to 0.\n */\n private _updateFlushState() {\n const state = this._flushState;\n if (!state.isFlushing || this.getCurrentBufferedCount() !== 0) {\n return;\n }\n\n state.resolve();\n\n this._flushState = { isFlushing: false };\n this._incrementReadiness();\n }\n}\n"]}