@azure/service-bus 7.10.0-beta.2 → 7.10.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/dist/browser/connectionContext.js +1 -2
  2. package/dist/browser/connectionContext.js.map +1 -1
  3. package/dist/browser/constructorHelpers.js +3 -4
  4. package/dist/browser/constructorHelpers.js.map +1 -1
  5. package/dist/browser/core/autoLockRenewer.js +9 -5
  6. package/dist/browser/core/autoLockRenewer.js.map +1 -1
  7. package/dist/browser/core/batchingReceiver.js +26 -18
  8. package/dist/browser/core/batchingReceiver.js.map +1 -1
  9. package/dist/browser/core/linkEntity.js +74 -13
  10. package/dist/browser/core/linkEntity.js.map +1 -1
  11. package/dist/browser/core/managementClient.js +48 -48
  12. package/dist/browser/core/managementClient.js.map +1 -1
  13. package/dist/browser/core/messageReceiver.js +41 -14
  14. package/dist/browser/core/messageReceiver.js.map +1 -1
  15. package/dist/browser/core/messageSender.js +33 -10
  16. package/dist/browser/core/messageSender.js.map +1 -1
  17. package/dist/browser/core/receiverHelper.js +3 -2
  18. package/dist/browser/core/receiverHelper.js.map +1 -1
  19. package/dist/browser/core/shared.js +11 -4
  20. package/dist/browser/core/shared.js.map +1 -1
  21. package/dist/browser/core/streamingReceiver.js +74 -43
  22. package/dist/browser/core/streamingReceiver.js.map +1 -1
  23. package/dist/browser/diagnostics/instrumentServiceBusMessage.js +16 -8
  24. package/dist/browser/diagnostics/instrumentServiceBusMessage.js.map +1 -1
  25. package/dist/browser/receivers/receiver.js +68 -23
  26. package/dist/browser/receivers/receiver.js.map +1 -1
  27. package/dist/browser/receivers/receiverCommon.js +36 -21
  28. package/dist/browser/receivers/receiverCommon.js.map +1 -1
  29. package/dist/browser/receivers/sessionReceiver.js +69 -29
  30. package/dist/browser/receivers/sessionReceiver.js.map +1 -1
  31. package/dist/browser/sender.js +33 -11
  32. package/dist/browser/sender.js.map +1 -1
  33. package/dist/browser/serializers/queueResourceSerializer.js +9 -1
  34. package/dist/browser/serializers/queueResourceSerializer.js.map +1 -1
  35. package/dist/browser/serializers/ruleResourceSerializer.js +1 -2
  36. package/dist/browser/serializers/ruleResourceSerializer.js.map +1 -1
  37. package/dist/browser/serviceBusAtomManagementClient.js +181 -228
  38. package/dist/browser/serviceBusAtomManagementClient.js.map +1 -1
  39. package/dist/browser/serviceBusClient.js +31 -22
  40. package/dist/browser/serviceBusClient.js.map +1 -1
  41. package/dist/browser/serviceBusError.js +21 -1
  42. package/dist/browser/serviceBusError.js.map +1 -1
  43. package/dist/browser/serviceBusMessage.js +208 -13
  44. package/dist/browser/serviceBusMessage.js.map +1 -1
  45. package/dist/browser/serviceBusMessageBatch.js +32 -8
  46. package/dist/browser/serviceBusMessageBatch.js.map +1 -1
  47. package/dist/browser/serviceBusRuleManager.js +39 -15
  48. package/dist/browser/serviceBusRuleManager.js.map +1 -1
  49. package/dist/browser/session/messageSession.js +130 -25
  50. package/dist/browser/session/messageSession.js.map +1 -1
  51. package/dist/browser/util/atomXmlHelper.js +4 -5
  52. package/dist/browser/util/atomXmlHelper.js.map +1 -1
  53. package/dist/browser/util/compat/httpHeaders.js +1 -0
  54. package/dist/browser/util/compat/httpHeaders.js.map +1 -1
  55. package/dist/browser/util/constants.js +1 -1
  56. package/dist/browser/util/constants.js.map +1 -1
  57. package/dist/browser/util/sasServiceClientCredentials.js +8 -0
  58. package/dist/browser/util/sasServiceClientCredentials.js.map +1 -1
  59. package/dist/browser/util/semaphore.js +6 -2
  60. package/dist/browser/util/semaphore.js.map +1 -1
  61. package/dist/browser/util/utils.js +5 -7
  62. package/dist/browser/util/utils.js.map +1 -1
  63. package/dist/commonjs/connectionContext.js +1 -2
  64. package/dist/commonjs/connectionContext.js.map +1 -1
  65. package/dist/commonjs/constructorHelpers.js +3 -4
  66. package/dist/commonjs/constructorHelpers.js.map +1 -1
  67. package/dist/commonjs/core/autoLockRenewer.js +9 -5
  68. package/dist/commonjs/core/autoLockRenewer.js.map +1 -1
  69. package/dist/commonjs/core/batchingReceiver.js +26 -18
  70. package/dist/commonjs/core/batchingReceiver.js.map +1 -1
  71. package/dist/commonjs/core/linkEntity.js +74 -13
  72. package/dist/commonjs/core/linkEntity.js.map +1 -1
  73. package/dist/commonjs/core/managementClient.js +48 -48
  74. package/dist/commonjs/core/managementClient.js.map +1 -1
  75. package/dist/commonjs/core/messageReceiver.js +41 -14
  76. package/dist/commonjs/core/messageReceiver.js.map +1 -1
  77. package/dist/commonjs/core/messageSender.js +33 -10
  78. package/dist/commonjs/core/messageSender.js.map +1 -1
  79. package/dist/commonjs/core/receiverHelper.js +3 -2
  80. package/dist/commonjs/core/receiverHelper.js.map +1 -1
  81. package/dist/commonjs/core/shared.js +11 -4
  82. package/dist/commonjs/core/shared.js.map +1 -1
  83. package/dist/commonjs/core/streamingReceiver.js +74 -43
  84. package/dist/commonjs/core/streamingReceiver.js.map +1 -1
  85. package/dist/commonjs/diagnostics/instrumentServiceBusMessage.js +16 -8
  86. package/dist/commonjs/diagnostics/instrumentServiceBusMessage.js.map +1 -1
  87. package/dist/commonjs/receivers/receiver.js +68 -23
  88. package/dist/commonjs/receivers/receiver.js.map +1 -1
  89. package/dist/commonjs/receivers/receiverCommon.js +36 -21
  90. package/dist/commonjs/receivers/receiverCommon.js.map +1 -1
  91. package/dist/commonjs/receivers/sessionReceiver.js +69 -29
  92. package/dist/commonjs/receivers/sessionReceiver.js.map +1 -1
  93. package/dist/commonjs/sender.js +33 -11
  94. package/dist/commonjs/sender.js.map +1 -1
  95. package/dist/commonjs/serializers/queueResourceSerializer.js +9 -1
  96. package/dist/commonjs/serializers/queueResourceSerializer.js.map +1 -1
  97. package/dist/commonjs/serializers/ruleResourceSerializer.js +1 -2
  98. package/dist/commonjs/serializers/ruleResourceSerializer.js.map +1 -1
  99. package/dist/commonjs/serviceBusAtomManagementClient.js +181 -227
  100. package/dist/commonjs/serviceBusAtomManagementClient.js.map +1 -1
  101. package/dist/commonjs/serviceBusClient.js +31 -22
  102. package/dist/commonjs/serviceBusClient.js.map +1 -1
  103. package/dist/commonjs/serviceBusError.js +21 -1
  104. package/dist/commonjs/serviceBusError.js.map +1 -1
  105. package/dist/commonjs/serviceBusMessage.js +208 -12
  106. package/dist/commonjs/serviceBusMessage.js.map +1 -1
  107. package/dist/commonjs/serviceBusMessageBatch.js +32 -8
  108. package/dist/commonjs/serviceBusMessageBatch.js.map +1 -1
  109. package/dist/commonjs/serviceBusRuleManager.js +39 -15
  110. package/dist/commonjs/serviceBusRuleManager.js.map +1 -1
  111. package/dist/commonjs/session/messageSession.js +130 -25
  112. package/dist/commonjs/session/messageSession.js.map +1 -1
  113. package/dist/commonjs/tsdoc-metadata.json +11 -11
  114. package/dist/commonjs/util/atomXmlHelper.js +4 -5
  115. package/dist/commonjs/util/atomXmlHelper.js.map +1 -1
  116. package/dist/commonjs/util/compat/httpHeaders.js +1 -0
  117. package/dist/commonjs/util/compat/httpHeaders.js.map +1 -1
  118. package/dist/commonjs/util/constants.js +1 -1
  119. package/dist/commonjs/util/constants.js.map +1 -1
  120. package/dist/commonjs/util/runtimeInfo.js +2 -2
  121. package/dist/commonjs/util/runtimeInfo.js.map +1 -1
  122. package/dist/commonjs/util/sasServiceClientCredentials.js +8 -0
  123. package/dist/commonjs/util/sasServiceClientCredentials.js.map +1 -1
  124. package/dist/commonjs/util/semaphore.js +6 -2
  125. package/dist/commonjs/util/semaphore.js.map +1 -1
  126. package/dist/commonjs/util/utils.js +5 -7
  127. package/dist/commonjs/util/utils.js.map +1 -1
  128. package/dist/esm/connectionContext.js +1 -2
  129. package/dist/esm/connectionContext.js.map +1 -1
  130. package/dist/esm/constructorHelpers.js +3 -4
  131. package/dist/esm/constructorHelpers.js.map +1 -1
  132. package/dist/esm/core/autoLockRenewer.js +9 -5
  133. package/dist/esm/core/autoLockRenewer.js.map +1 -1
  134. package/dist/esm/core/batchingReceiver.js +26 -18
  135. package/dist/esm/core/batchingReceiver.js.map +1 -1
  136. package/dist/esm/core/linkEntity.js +74 -13
  137. package/dist/esm/core/linkEntity.js.map +1 -1
  138. package/dist/esm/core/managementClient.js +48 -48
  139. package/dist/esm/core/managementClient.js.map +1 -1
  140. package/dist/esm/core/messageReceiver.js +41 -14
  141. package/dist/esm/core/messageReceiver.js.map +1 -1
  142. package/dist/esm/core/messageSender.js +33 -10
  143. package/dist/esm/core/messageSender.js.map +1 -1
  144. package/dist/esm/core/receiverHelper.js +3 -2
  145. package/dist/esm/core/receiverHelper.js.map +1 -1
  146. package/dist/esm/core/shared.js +11 -4
  147. package/dist/esm/core/shared.js.map +1 -1
  148. package/dist/esm/core/streamingReceiver.js +74 -43
  149. package/dist/esm/core/streamingReceiver.js.map +1 -1
  150. package/dist/esm/diagnostics/instrumentServiceBusMessage.js +16 -8
  151. package/dist/esm/diagnostics/instrumentServiceBusMessage.js.map +1 -1
  152. package/dist/esm/receivers/receiver.js +68 -23
  153. package/dist/esm/receivers/receiver.js.map +1 -1
  154. package/dist/esm/receivers/receiverCommon.js +36 -21
  155. package/dist/esm/receivers/receiverCommon.js.map +1 -1
  156. package/dist/esm/receivers/sessionReceiver.js +69 -29
  157. package/dist/esm/receivers/sessionReceiver.js.map +1 -1
  158. package/dist/esm/sender.js +33 -11
  159. package/dist/esm/sender.js.map +1 -1
  160. package/dist/esm/serializers/queueResourceSerializer.js +9 -1
  161. package/dist/esm/serializers/queueResourceSerializer.js.map +1 -1
  162. package/dist/esm/serializers/ruleResourceSerializer.js +1 -2
  163. package/dist/esm/serializers/ruleResourceSerializer.js.map +1 -1
  164. package/dist/esm/serviceBusAtomManagementClient.js +181 -228
  165. package/dist/esm/serviceBusAtomManagementClient.js.map +1 -1
  166. package/dist/esm/serviceBusClient.js +31 -22
  167. package/dist/esm/serviceBusClient.js.map +1 -1
  168. package/dist/esm/serviceBusError.js +21 -1
  169. package/dist/esm/serviceBusError.js.map +1 -1
  170. package/dist/esm/serviceBusMessage.js +208 -13
  171. package/dist/esm/serviceBusMessage.js.map +1 -1
  172. package/dist/esm/serviceBusMessageBatch.js +32 -8
  173. package/dist/esm/serviceBusMessageBatch.js.map +1 -1
  174. package/dist/esm/serviceBusRuleManager.js +39 -15
  175. package/dist/esm/serviceBusRuleManager.js.map +1 -1
  176. package/dist/esm/session/messageSession.js +130 -25
  177. package/dist/esm/session/messageSession.js.map +1 -1
  178. package/dist/esm/util/atomXmlHelper.js +4 -5
  179. package/dist/esm/util/atomXmlHelper.js.map +1 -1
  180. package/dist/esm/util/compat/httpHeaders.js +1 -0
  181. package/dist/esm/util/compat/httpHeaders.js.map +1 -1
  182. package/dist/esm/util/constants.js +1 -1
  183. package/dist/esm/util/constants.js.map +1 -1
  184. package/dist/esm/util/runtimeInfo.js +1 -1
  185. package/dist/esm/util/runtimeInfo.js.map +1 -1
  186. package/dist/esm/util/sasServiceClientCredentials.js +8 -0
  187. package/dist/esm/util/sasServiceClientCredentials.js.map +1 -1
  188. package/dist/esm/util/semaphore.js +6 -2
  189. package/dist/esm/util/semaphore.js.map +1 -1
  190. package/dist/esm/util/utils.js +5 -7
  191. package/dist/esm/util/utils.js.map +1 -1
  192. package/dist/react-native/connectionContext.js +1 -2
  193. package/dist/react-native/connectionContext.js.map +1 -1
  194. package/dist/react-native/constructorHelpers.js +3 -4
  195. package/dist/react-native/constructorHelpers.js.map +1 -1
  196. package/dist/react-native/core/autoLockRenewer.js +9 -5
  197. package/dist/react-native/core/autoLockRenewer.js.map +1 -1
  198. package/dist/react-native/core/batchingReceiver.js +26 -18
  199. package/dist/react-native/core/batchingReceiver.js.map +1 -1
  200. package/dist/react-native/core/linkEntity.js +74 -13
  201. package/dist/react-native/core/linkEntity.js.map +1 -1
  202. package/dist/react-native/core/managementClient.js +48 -48
  203. package/dist/react-native/core/managementClient.js.map +1 -1
  204. package/dist/react-native/core/messageReceiver.js +41 -14
  205. package/dist/react-native/core/messageReceiver.js.map +1 -1
  206. package/dist/react-native/core/messageSender.js +33 -10
  207. package/dist/react-native/core/messageSender.js.map +1 -1
  208. package/dist/react-native/core/receiverHelper.js +3 -2
  209. package/dist/react-native/core/receiverHelper.js.map +1 -1
  210. package/dist/react-native/core/shared.js +11 -4
  211. package/dist/react-native/core/shared.js.map +1 -1
  212. package/dist/react-native/core/streamingReceiver.js +74 -43
  213. package/dist/react-native/core/streamingReceiver.js.map +1 -1
  214. package/dist/react-native/diagnostics/instrumentServiceBusMessage.js +16 -8
  215. package/dist/react-native/diagnostics/instrumentServiceBusMessage.js.map +1 -1
  216. package/dist/react-native/receivers/receiver.js +68 -23
  217. package/dist/react-native/receivers/receiver.js.map +1 -1
  218. package/dist/react-native/receivers/receiverCommon.js +36 -21
  219. package/dist/react-native/receivers/receiverCommon.js.map +1 -1
  220. package/dist/react-native/receivers/sessionReceiver.js +69 -29
  221. package/dist/react-native/receivers/sessionReceiver.js.map +1 -1
  222. package/dist/react-native/sender.js +33 -11
  223. package/dist/react-native/sender.js.map +1 -1
  224. package/dist/react-native/serializers/queueResourceSerializer.js +9 -1
  225. package/dist/react-native/serializers/queueResourceSerializer.js.map +1 -1
  226. package/dist/react-native/serializers/ruleResourceSerializer.js +1 -2
  227. package/dist/react-native/serializers/ruleResourceSerializer.js.map +1 -1
  228. package/dist/react-native/serviceBusAtomManagementClient.js +181 -228
  229. package/dist/react-native/serviceBusAtomManagementClient.js.map +1 -1
  230. package/dist/react-native/serviceBusClient.js +31 -22
  231. package/dist/react-native/serviceBusClient.js.map +1 -1
  232. package/dist/react-native/serviceBusError.js +21 -1
  233. package/dist/react-native/serviceBusError.js.map +1 -1
  234. package/dist/react-native/serviceBusMessage.js +208 -13
  235. package/dist/react-native/serviceBusMessage.js.map +1 -1
  236. package/dist/react-native/serviceBusMessageBatch.js +32 -8
  237. package/dist/react-native/serviceBusMessageBatch.js.map +1 -1
  238. package/dist/react-native/serviceBusRuleManager.js +39 -15
  239. package/dist/react-native/serviceBusRuleManager.js.map +1 -1
  240. package/dist/react-native/session/messageSession.js +130 -25
  241. package/dist/react-native/session/messageSession.js.map +1 -1
  242. package/dist/react-native/util/atomXmlHelper.js +4 -5
  243. package/dist/react-native/util/atomXmlHelper.js.map +1 -1
  244. package/dist/react-native/util/compat/httpHeaders.js +1 -0
  245. package/dist/react-native/util/compat/httpHeaders.js.map +1 -1
  246. package/dist/react-native/util/constants.js +1 -1
  247. package/dist/react-native/util/constants.js.map +1 -1
  248. package/dist/react-native/util/sasServiceClientCredentials.js +8 -0
  249. package/dist/react-native/util/sasServiceClientCredentials.js.map +1 -1
  250. package/dist/react-native/util/semaphore.js +6 -2
  251. package/dist/react-native/util/semaphore.js.map +1 -1
  252. package/dist/react-native/util/utils.js +5 -7
  253. package/dist/react-native/util/utils.js.map +1 -1
  254. package/package.json +38 -38
@@ -1 +1 @@
1
- {"version":3,"file":"messageReceiver.js","sourceRoot":"","sources":["../../../src/core/messageReceiver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { MessagingError, RetryOptions } from \"@azure/core-amqp\";\nimport { Constants, ErrorNameConditionMapper } from \"@azure/core-amqp\";\nimport type { AmqpError, EventContext, OnAmqpEvent, Receiver, ReceiverOptions } from \"rhea-promise\";\nimport { receiverLogger as logger } from \"../log.js\";\nimport type { ReceiverType } from \"./linkEntity.js\";\nimport { LinkEntity } from \"./linkEntity.js\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\nimport type { ServiceBusMessageImpl } from \"../serviceBusMessage.js\";\nimport { DispositionType } from \"../serviceBusMessage.js\";\nimport { getUniqueName } from \"../util/utils.js\";\nimport type { ProcessErrorArgs, ReceiveMode, SubscribeOptions } from \"../models.js\";\nimport type { DispositionStatusOptions } from \"./managementClient.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { DeferredPromiseAndTimer, ReceiverHandlers } from \"./shared.js\";\nimport { onMessageSettled, createReceiverOptions } from \"./shared.js\";\nimport type { LockRenewer } from \"./autoLockRenewer.js\";\nimport { translateServiceBusError } from \"../serviceBusError.js\";\n\n/**\n * @internal\n */\nexport interface OnAmqpEventAsPromise extends OnAmqpEvent {\n (context: EventContext): Promise<void>;\n}\n\n/**\n * @internal\n */\nexport interface ReceiveOptions extends SubscribeOptions {\n /**\n * The mode in which messages should be received.\n */\n receiveMode: ReceiveMode;\n /**\n * Retry policy options that determine the mode, number of retries, retry interval etc.\n */\n retryOptions?: RetryOptions;\n\n /**\n * A LockAutoRenewer that will automatically renew locks based on user specified interval.\n * This will be set if the user has chosen peekLock mode _and_ they've set a positive\n * maxAutoRenewLockDurationInMs value when they created their receiver.\n */\n lockRenewer: LockRenewer | undefined;\n /**\n * Option to disable the client from running JSON.parse() on the message body when receiving the message.\n * Not applicable if the message was sent with AMQP body type value or sequence. Use this option when you\n * prefer to work directly with the bytes present in the message body than have the client attempt to parse it.\n */\n skipParsingBodyAsJson: boolean;\n\n /**\n * Whether to skip converting Date type on properties of message annotations\n * or application properties into numbers when receiving the message. By\n * default, properties of Date type is converted into UNIX epoch number for\n * compatibility.\n */\n skipConvertingDate: boolean;\n}\n\n/**\n * Describes the signature of the message handler passed to `registerMessageHandler` method.\n * @internal\n */\nexport interface OnMessage {\n /**\n * Handler for processing each incoming message.\n */\n (message: ServiceBusMessageImpl): Promise<void>;\n}\n\n/**\n * Describes the signature of the error handler passed to `registerMessageHandler` method.\n *\n * @internal\n */\nexport interface OnError {\n /**\n * Handler for any error that occurs while receiving or processing messages.\n *\n * NOTE: if this signature changes make sure you reflect those same changes in the\n * `OnErrorNoContext` definition below.\n */\n (args: ProcessErrorArgs): Promise<void>;\n}\n\n/**\n * An onError method but without the context property. Used when wrapping OnError\n * with an implicit ProcessErrorContext. Used by LockRenewer.\n *\n * @internal\n */\nexport interface OnErrorNoContext {\n (error: MessagingError | Error): void;\n}\n\n/**\n * @internal\n * Describes the MessageReceiver that will receive messages from ServiceBus.\n */\nexport abstract class MessageReceiver extends LinkEntity<Receiver> {\n /**\n * The type of receiver: \"batching\" or \"streaming\".\n */\n receiverType: ReceiverType;\n /**\n * The mode in which messages should be received.\n * Default: ReceiveMode.peekLock\n */\n receiveMode: ReceiveMode;\n /**\n * Indicates whether `Message.complete()` should be called\n * automatically after the message processing is complete while receiving messages with handlers.\n * Default: false.\n */\n autoComplete: boolean;\n /**\n * Maintains a map of deliveries that\n * are being actively disposed. It acts as a store for correlating the responses received for\n * active dispositions.\n */\n protected _deliveryDispositionMap: Map<number, DeferredPromiseAndTimer> = new Map<\n number,\n DeferredPromiseAndTimer\n >();\n\n /**\n * A lock renewer that handles message lock auto-renewal. This is undefined unless the user\n * has activated autolock renewal via ReceiveOptions. A single auto lock renewer is shared\n * for all links for a `ServiceBusReceiver` instance.\n */\n protected _lockRenewer: LockRenewer | undefined;\n\n constructor(\n public identifier: string,\n context: ConnectionContext,\n entityPath: string,\n receiverType: ReceiverType,\n options: Omit<ReceiveOptions, \"maxConcurrentCalls\">,\n ) {\n super(entityPath, entityPath, context, receiverType, logger, {\n address: entityPath,\n audience: `${context.config.endpoint}${entityPath}`,\n });\n\n this.receiverType = receiverType;\n this.receiveMode = options.receiveMode || \"peekLock\";\n\n // If explicitly set to false then autoComplete is false else true (default).\n this.autoComplete =\n options.autoCompleteMessages === false ? options.autoCompleteMessages : true;\n this._lockRenewer = options.lockRenewer;\n }\n\n /**\n * Creates the options that need to be specified while creating an AMQP receiver link.\n */\n protected _createReceiverOptions(\n useNewName: boolean,\n handlers: ReceiverHandlers,\n ): ReceiverOptions {\n const rcvrOptions: ReceiverOptions = createReceiverOptions(\n useNewName ? getUniqueName(this.baseName) : this.name,\n this.receiveMode,\n {\n address: this.address,\n },\n this.identifier,\n {\n onSettled: (context: EventContext) => {\n return onMessageSettled(this.logPrefix, context.delivery, this._deliveryDispositionMap);\n },\n ...handlers,\n },\n );\n\n return rcvrOptions;\n }\n\n /**\n * Creates a new AMQP receiver under a new AMQP session.\n */\n protected async _init(options: ReceiverOptions, abortSignal?: AbortSignalLike): Promise<void> {\n try {\n await this.initLink(options, abortSignal);\n\n // It is possible for someone to close the receiver and then start it again.\n // Thus make sure that the receiver is present in the client cache.\n this._context.messageReceivers[this.name] = this as any;\n } catch (err: any) {\n const translatedError = translateServiceBusError(err);\n logger.logError(\n translatedError,\n \"%s An error occured while creating the receiver\",\n this.logPrefix,\n );\n\n // Fix the unhelpful error messages for the OperationTimeoutError that comes from `rhea-promise`.\n if ((translatedError as MessagingError).code === \"OperationTimeoutError\") {\n translatedError.message =\n \"Failed to create a receiver within allocated time and retry attempts.\";\n }\n\n throw translatedError;\n }\n }\n\n protected createRheaLink(\n options: ReceiverOptions,\n _abortSignal?: AbortSignalLike,\n ): Promise<Receiver> {\n return this._context.connection.createReceiver(options);\n }\n\n /**\n * React to receiver being detached due to given error.\n * You may want to set up retries to recover the broken link and/or report error to user.\n * @param error - The error accompanying the receiver/session error or connection disconnected events\n */\n abstract onDetached(error?: AmqpError | Error): Promise<void>;\n\n /**\n * Clears lock renewal timers on all active messages, clears token remewal for current receiver,\n * removes current MessageReceiver instance from cache, and closes the underlying AMQP receiver.\n * @returns Promise<void>.\n */\n async close(): Promise<void> {\n this._lockRenewer?.stopAll(this);\n await super.close();\n }\n\n /**\n * Settles the message with the specified disposition.\n * @param message - The ServiceBus Message that needs to be settled.\n * @param operation - The disposition type.\n * @param options - Optional parameters that can be provided while disposing the message.\n */\n async settleMessage(\n message: ServiceBusMessageImpl,\n operation: DispositionType,\n options: DispositionStatusOptions,\n ): Promise<any> {\n return new Promise((resolve, reject) => {\n if (operation.match(/^(complete|abandon|defer|deadletter)$/) == null) {\n return reject(new Error(`operation: '${operation}' is not a valid operation.`));\n }\n this._lockRenewer?.stop(this, message);\n const delivery = message.delivery;\n const timer = setTimeout(() => {\n this._deliveryDispositionMap.delete(delivery.id);\n\n logger.verbose(\n \"%s Disposition for delivery id: %d, did not complete in %d milliseconds. \" +\n \"Hence rejecting the promise with timeout error.\",\n this.logPrefix,\n delivery.id,\n Constants.defaultOperationTimeoutInMs,\n );\n\n const e: AmqpError = {\n condition: ErrorNameConditionMapper.ServiceUnavailableError,\n description:\n \"Operation to settle the message has timed out. The disposition of the \" +\n \"message may or may not be successful\",\n };\n return reject(translateServiceBusError(e));\n }, options.retryOptions?.timeoutInMs ?? Constants.defaultOperationTimeoutInMs);\n this._deliveryDispositionMap.set(delivery.id, {\n resolve: resolve,\n reject: reject,\n timer: timer,\n });\n if (operation === DispositionType.complete) {\n delivery.accept();\n } else if (operation === DispositionType.abandon) {\n const params: any = {\n undeliverable_here: false,\n };\n if (options.propertiesToModify) params.message_annotations = options.propertiesToModify;\n delivery.modified(params);\n } else if (operation === DispositionType.defer) {\n const params: any = {\n undeliverable_here: true,\n };\n if (options.propertiesToModify) params.message_annotations = options.propertiesToModify;\n delivery.modified(params);\n } else if (operation === DispositionType.deadletter) {\n const error: AmqpError = {\n condition: Constants.deadLetterName,\n info: {\n ...options.propertiesToModify,\n DeadLetterReason: options.deadLetterReason,\n DeadLetterErrorDescription: options.deadLetterDescription,\n },\n };\n delivery.reject(error);\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"messageReceiver.js","sourceRoot":"","sources":["../../../src/core/messageReceiver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { MessagingError, RetryOptions } from \"@azure/core-amqp\";\nimport { Constants, ErrorNameConditionMapper } from \"@azure/core-amqp\";\nimport type { AmqpError, EventContext, OnAmqpEvent, Receiver, ReceiverOptions } from \"rhea-promise\";\nimport { receiverLogger as logger } from \"../log.js\";\nimport type { ReceiverType } from \"./linkEntity.js\";\nimport { LinkEntity } from \"./linkEntity.js\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\nimport type { ServiceBusMessageImpl } from \"../serviceBusMessage.js\";\nimport { DispositionType } from \"../serviceBusMessage.js\";\nimport { getUniqueName } from \"../util/utils.js\";\nimport type { ProcessErrorArgs, ReceiveMode, SubscribeOptions } from \"../models.js\";\nimport type { DispositionStatusOptions } from \"./managementClient.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { DeferredPromiseAndTimer, ReceiverHandlers } from \"./shared.js\";\nimport { onMessageSettled, createReceiverOptions } from \"./shared.js\";\nimport type { LockRenewer } from \"./autoLockRenewer.js\";\nimport { translateServiceBusError } from \"../serviceBusError.js\";\n\n/**\n * @internal\n */\nexport interface OnAmqpEventAsPromise extends OnAmqpEvent {\n (context: EventContext): Promise<void>;\n}\n\n/**\n * @internal\n */\nexport interface ReceiveOptions extends SubscribeOptions {\n /**\n * The mode in which messages should be received.\n */\n receiveMode: ReceiveMode;\n /**\n * Retry policy options that determine the mode, number of retries, retry interval etc.\n */\n retryOptions?: RetryOptions;\n\n /**\n * A LockAutoRenewer that will automatically renew locks based on user specified interval.\n * This will be set if the user has chosen peekLock mode _and_ they've set a positive\n * maxAutoRenewLockDurationInMs value when they created their receiver.\n */\n lockRenewer: LockRenewer | undefined;\n /**\n * Option to disable the client from running JSON.parse() on the message body when receiving the message.\n * Not applicable if the message was sent with AMQP body type value or sequence. Use this option when you\n * prefer to work directly with the bytes present in the message body than have the client attempt to parse it.\n */\n skipParsingBodyAsJson: boolean;\n\n /**\n * Whether to skip converting Date type on properties of message annotations\n * or application properties into numbers when receiving the message. By\n * default, properties of Date type is converted into UNIX epoch number for\n * compatibility.\n */\n skipConvertingDate: boolean;\n}\n\n/**\n * Describes the signature of the message handler passed to `registerMessageHandler` method.\n * @internal\n */\nexport interface OnMessage {\n /**\n * Handler for processing each incoming message.\n */\n (message: ServiceBusMessageImpl): Promise<void>;\n}\n\n/**\n * Describes the signature of the error handler passed to `registerMessageHandler` method.\n *\n * @internal\n */\nexport interface OnError {\n /**\n * Handler for any error that occurs while receiving or processing messages.\n *\n * NOTE: if this signature changes make sure you reflect those same changes in the\n * `OnErrorNoContext` definition below.\n */\n (args: ProcessErrorArgs): Promise<void>;\n}\n\n/**\n * An onError method but without the context property. Used when wrapping OnError\n * with an implicit ProcessErrorContext. Used by LockRenewer.\n *\n * @internal\n */\nexport interface OnErrorNoContext {\n (error: MessagingError | Error): void;\n}\n\n/**\n * @internal\n * Describes the MessageReceiver that will receive messages from ServiceBus.\n */\nexport abstract class MessageReceiver extends LinkEntity<Receiver> {\n /**\n * The type of receiver: \"batching\" or \"streaming\".\n */\n receiverType: ReceiverType;\n /**\n * The mode in which messages should be received.\n * Default: ReceiveMode.peekLock\n */\n receiveMode: ReceiveMode;\n /**\n * Indicates whether `Message.complete()` should be called\n * automatically after the message processing is complete while receiving messages with handlers.\n * Default: false.\n */\n autoComplete: boolean;\n /**\n * Maintains a map of deliveries that\n * are being actively disposed. It acts as a store for correlating the responses received for\n * active dispositions.\n */\n protected _deliveryDispositionMap: Map<number, DeferredPromiseAndTimer> = new Map<\n number,\n DeferredPromiseAndTimer\n >();\n\n /**\n * A lock renewer that handles message lock auto-renewal. This is undefined unless the user\n * has activated autolock renewal via ReceiveOptions. A single auto lock renewer is shared\n * for all links for a `ServiceBusReceiver` instance.\n */\n protected _lockRenewer: LockRenewer | undefined;\n\n constructor(\n public identifier: string,\n context: ConnectionContext,\n entityPath: string,\n receiverType: ReceiverType,\n options: Omit<ReceiveOptions, \"maxConcurrentCalls\">,\n ) {\n super(entityPath, entityPath, context, receiverType, logger, {\n address: entityPath,\n audience: `${context.config.endpoint}${entityPath}`,\n });\n\n this.receiverType = receiverType;\n this.receiveMode = options.receiveMode || \"peekLock\";\n\n // If explicitly set to false then autoComplete is false else true (default).\n this.autoComplete =\n options.autoCompleteMessages === false ? options.autoCompleteMessages : true;\n this._lockRenewer = options.lockRenewer;\n }\n\n /**\n * Creates the options that need to be specified while creating an AMQP receiver link.\n */\n protected _createReceiverOptions(\n useNewName: boolean,\n handlers: ReceiverHandlers,\n ): ReceiverOptions {\n const rcvrOptions: ReceiverOptions = createReceiverOptions(\n useNewName ? getUniqueName(this.baseName) : this.name,\n this.receiveMode,\n {\n address: this.address,\n },\n this.identifier,\n {\n onSettled: (context: EventContext) => {\n return onMessageSettled(this.logPrefix, context.delivery, this._deliveryDispositionMap);\n },\n ...handlers,\n },\n );\n\n return rcvrOptions;\n }\n\n /**\n * Creates a new AMQP receiver under a new AMQP session.\n */\n protected async _init(options: ReceiverOptions, abortSignal?: AbortSignalLike): Promise<void> {\n try {\n await this.initLink(options, abortSignal);\n\n // It is possible for someone to close the receiver and then start it again.\n // Thus make sure that the receiver is present in the client cache.\n this._context.messageReceivers[this.name] = this as any;\n } catch (err: any) {\n const translatedError = translateServiceBusError(err);\n logger.logError(\n translatedError,\n \"%s An error occured while creating the receiver\",\n this.logPrefix,\n );\n\n // Fix the unhelpful error messages for the OperationTimeoutError that comes from `rhea-promise`.\n if ((translatedError as MessagingError).code === \"OperationTimeoutError\") {\n translatedError.message =\n \"Failed to create a receiver within allocated time and retry attempts.\";\n }\n\n throw translatedError;\n }\n }\n\n protected createRheaLink(\n options: ReceiverOptions,\n _abortSignal?: AbortSignalLike,\n ): Promise<Receiver> {\n return this._context.connection.createReceiver(options);\n }\n\n /**\n * React to receiver being detached due to given error.\n * You may want to set up retries to recover the broken link and/or report error to user.\n * @param error - The error accompanying the receiver/session error or connection disconnected events\n */\n abstract onDetached(error?: AmqpError | Error): Promise<void>;\n\n /**\n * Clears lock renewal timers on all active messages, clears token remewal for current receiver,\n * removes current MessageReceiver instance from cache, and closes the underlying AMQP receiver.\n * @returns Promise<void>.\n */\n async close(): Promise<void> {\n this._lockRenewer?.stopAll(this);\n await super.close();\n }\n\n /**\n * Settles the message with the specified disposition.\n * @param message - The ServiceBus Message that needs to be settled.\n * @param operation - The disposition type.\n * @param options - Optional parameters that can be provided while disposing the message.\n */\n async settleMessage(\n message: ServiceBusMessageImpl,\n operation: DispositionType,\n options: DispositionStatusOptions,\n ): Promise<any> {\n return new Promise((resolve, reject) => {\n if (operation.match(/^(complete|abandon|defer|deadletter)$/) == null) {\n return reject(new Error(`operation: '${operation}' is not a valid operation.`));\n }\n this._lockRenewer?.stop(this, message);\n const delivery = message.delivery;\n const timer = setTimeout(() => {\n this._deliveryDispositionMap.delete(delivery.id);\n\n logger.verbose(\n \"%s Disposition for delivery id: %d, did not complete in %d milliseconds. \" +\n \"Hence rejecting the promise with timeout error.\",\n this.logPrefix,\n delivery.id,\n Constants.defaultOperationTimeoutInMs,\n );\n\n const e: AmqpError = {\n condition: ErrorNameConditionMapper.ServiceUnavailableError,\n description:\n \"Operation to settle the message has timed out. The disposition of the \" +\n \"message may or may not be successful\",\n };\n return reject(translateServiceBusError(e));\n }, options.retryOptions?.timeoutInMs ?? Constants.defaultOperationTimeoutInMs);\n this._deliveryDispositionMap.set(delivery.id, {\n resolve: resolve,\n reject: reject,\n timer: timer,\n });\n if (operation === DispositionType.complete) {\n delivery.accept();\n } else if (operation === DispositionType.abandon) {\n const params: any = {\n undeliverable_here: false,\n };\n if (options.propertiesToModify) params.message_annotations = options.propertiesToModify;\n delivery.modified(params);\n } else if (operation === DispositionType.defer) {\n const params: any = {\n undeliverable_here: true,\n };\n if (options.propertiesToModify) params.message_annotations = options.propertiesToModify;\n delivery.modified(params);\n } else if (operation === DispositionType.deadletter) {\n const error: AmqpError = {\n condition: Constants.deadLetterName,\n info: {\n ...options.propertiesToModify,\n DeadLetterReason: options.deadLetterReason,\n DeadLetterErrorDescription: options.deadLetterDescription,\n },\n };\n delivery.reject(error);\n }\n });\n }\n}\n"]}
@@ -16,6 +16,30 @@ import { defaultDataTransformer } from "../dataTransformer.js";
16
16
  * Describes the MessageSender that will send messages to ServiceBus.
17
17
  */
18
18
  export class MessageSender extends LinkEntity {
19
+ identifier;
20
+ /**
21
+ * The handler function to handle errors that happen on the
22
+ * underlying sender.
23
+ * @readonly
24
+ */
25
+ _onAmqpError;
26
+ /**
27
+ * The handler function to handle "sender_close" event
28
+ * that happens on the underlying sender.
29
+ * @readonly
30
+ */
31
+ _onAmqpClose;
32
+ /**
33
+ * The message handler that will be set as the handler on
34
+ * the underlying rhea sender's session for the "session_error" event.
35
+ */
36
+ _onSessionError;
37
+ /**
38
+ * The message handler that will be set as the handler on
39
+ * the underlying rhea sender's session for the "session_close" event.
40
+ */
41
+ _onSessionClose;
42
+ _retryOptions;
19
43
  constructor(identifier, connectionContext, entityPath, retryOptions) {
20
44
  super(entityPath, entityPath, connectionContext, "sender", logger, {
21
45
  address: entityPath,
@@ -78,18 +102,17 @@ export class MessageSender extends LinkEntity {
78
102
  * @param sendBatch - Boolean indicating whether the encoded message represents a batch of messages or not
79
103
  */
80
104
  _trySend(encodedMessage, sendBatch, options) {
81
- const abortSignal = options === null || options === void 0 ? void 0 : options.abortSignal;
105
+ const abortSignal = options?.abortSignal;
82
106
  const timeoutInMs = !isDefined(this._retryOptions.timeoutInMs)
83
107
  ? Constants.defaultOperationTimeoutInMs
84
108
  : this._retryOptions.timeoutInMs;
85
109
  const sendEventPromise = async () => {
86
- var _a, _b, _c, _d, _e, _f, _g;
87
110
  const initStartTime = Date.now();
88
111
  if (!this.isOpen()) {
89
112
  try {
90
113
  await waitForTimeoutOrAbortOrResolve({
91
- actionFn: () => this.open(undefined, options === null || options === void 0 ? void 0 : options.abortSignal),
92
- abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal,
114
+ actionFn: () => this.open(undefined, options?.abortSignal),
115
+ abortSignal: options?.abortSignal,
93
116
  timeoutMs: timeoutInMs,
94
117
  timeoutMessage: `[${this._context.connectionId}] Sender "${this.name}" ` +
95
118
  `with address "${this.address}", was not able to send the message right now, due ` +
@@ -103,8 +126,8 @@ export class MessageSender extends LinkEntity {
103
126
  }
104
127
  }
105
128
  const timeTakenByInit = Date.now() - initStartTime;
106
- logger.verbose("%s Sender '%s', credit: %d available: %d", this.logPrefix, this.name, (_a = this.link) === null || _a === void 0 ? void 0 : _a.credit, (_d = (_c = (_b = this.link) === null || _b === void 0 ? void 0 : _b.session) === null || _c === void 0 ? void 0 : _c.outgoing) === null || _d === void 0 ? void 0 : _d.available());
107
- const waitingTime = await waitForSendable(logger, this.logPrefix, this.name, timeoutInMs - timeTakenByInit, this.link, (_g = (_f = (_e = this.link) === null || _e === void 0 ? void 0 : _e.session) === null || _f === void 0 ? void 0 : _f.outgoing) === null || _g === void 0 ? void 0 : _g.available());
129
+ logger.verbose("%s Sender '%s', credit: %d available: %d", this.logPrefix, this.name, this.link?.credit, this.link?.session?.outgoing?.available());
130
+ const waitingTime = await waitForSendable(logger, this.logPrefix, this.name, timeoutInMs - timeTakenByInit, this.link, this.link?.session?.outgoing?.available());
108
131
  if (timeoutInMs <= timeTakenByInit + waitingTime) {
109
132
  const desc = `${this.logPrefix} Sender "${this.name}" ` +
110
133
  `with address "${this.address}", was not able to send the message right now, due ` +
@@ -228,7 +251,7 @@ export class MessageSender extends LinkEntity {
228
251
  }
229
252
  const config = {
230
253
  operation: async () => {
231
- await this.open(undefined, options === null || options === void 0 ? void 0 : options.abortSignal);
254
+ await this.open(undefined, options?.abortSignal);
232
255
  if (this.link) {
233
256
  return this.link.maxMessageSize;
234
257
  }
@@ -237,7 +260,7 @@ export class MessageSender extends LinkEntity {
237
260
  connectionId: this._context.connectionId,
238
261
  operationType: RetryOperationType.senderLink,
239
262
  retryOptions: retryOptions,
240
- abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal,
263
+ abortSignal: options?.abortSignal,
241
264
  };
242
265
  return retry(config);
243
266
  }
@@ -245,9 +268,9 @@ export class MessageSender extends LinkEntity {
245
268
  throwErrorIfConnectionClosed(this._context);
246
269
  let maxMessageSize = await this.getMaxMessageSize({
247
270
  retryOptions: this._retryOptions,
248
- abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal,
271
+ abortSignal: options?.abortSignal,
249
272
  });
250
- if (options === null || options === void 0 ? void 0 : options.maxSizeInBytes) {
273
+ if (options?.maxSizeInBytes) {
251
274
  if (options.maxSizeInBytes > maxMessageSize) {
252
275
  const error = new Error(`Max message size (${options.maxSizeInBytes} bytes) is greater than maximum message size (${maxMessageSize} bytes) on the AMQP sender link.`);
253
276
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"messageSender.js","sourceRoot":"","sources":["../../../src/core/messageSender.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { senderLogger as logger } from \"../log.js\";\nimport type {\n AmqpError,\n AwaitableSender,\n AwaitableSenderOptions,\n EventContext,\n OnAmqpEvent,\n} from \"rhea-promise\";\nimport { message as RheaMessageUtil } from \"rhea-promise\";\nimport type {\n MessagingError,\n RetryConfig,\n RetryOptions,\n AmqpAnnotatedMessage,\n} from \"@azure/core-amqp\";\nimport { Constants, ErrorNameConditionMapper, RetryOperationType, retry } from \"@azure/core-amqp\";\nimport type { ServiceBusMessage } from \"../serviceBusMessage.js\";\nimport { toRheaMessage } from \"../serviceBusMessage.js\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\nimport { LinkEntity } from \"./linkEntity.js\";\nimport { getUniqueName, waitForSendable, waitForTimeoutOrAbortOrResolve } from \"../util/utils.js\";\nimport { throwErrorIfConnectionClosed } from \"../util/errors.js\";\nimport type { ServiceBusMessageBatch } from \"../serviceBusMessageBatch.js\";\nimport { ServiceBusMessageBatchImpl } from \"../serviceBusMessageBatch.js\";\nimport type { CreateMessageBatchOptions } from \"../models.js\";\nimport type { OperationOptionsBase } from \"../modelsToBeSharedWithEventHubs.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { ServiceBusError, translateServiceBusError } from \"../serviceBusError.js\";\nimport { isDefined } from \"@azure/core-util\";\nimport { defaultDataTransformer } from \"../dataTransformer.js\";\n\n/**\n * @internal\n * Describes the MessageSender that will send messages to ServiceBus.\n */\nexport class MessageSender extends LinkEntity<AwaitableSender> {\n /**\n * The handler function to handle errors that happen on the\n * underlying sender.\n * @readonly\n */\n private readonly _onAmqpError: OnAmqpEvent;\n /**\n * The handler function to handle \"sender_close\" event\n * that happens on the underlying sender.\n * @readonly\n */\n private readonly _onAmqpClose: OnAmqpEvent;\n /**\n * The message handler that will be set as the handler on\n * the underlying rhea sender's session for the \"session_error\" event.\n */\n private _onSessionError: OnAmqpEvent;\n /**\n * The message handler that will be set as the handler on\n * the underlying rhea sender's session for the \"session_close\" event.\n */\n private _onSessionClose: OnAmqpEvent;\n private _retryOptions: RetryOptions;\n\n constructor(\n private identifier: string,\n connectionContext: ConnectionContext,\n entityPath: string,\n retryOptions: RetryOptions,\n ) {\n super(entityPath, entityPath, connectionContext, \"sender\", logger, {\n address: entityPath,\n audience: `${connectionContext.config.endpoint}${entityPath}`,\n });\n this._retryOptions = retryOptions;\n this._onAmqpError = (context: EventContext) => {\n const senderError = context.sender && context.sender.error;\n logger.logError(\n senderError,\n \"%s 'sender_error' event occurred on the sender '%s' with address '%s'. \" +\n \"The associated error\",\n this.logPrefix,\n this.name,\n this.address,\n );\n // TODO: Consider rejecting promise in trySendBatch() or createBatch()\n };\n\n this._onSessionError = (context: EventContext) => {\n const sessionError = context.session && context.session.error;\n logger.logError(\n sessionError,\n \"%s 'session_error' event occurred on the session of sender '%s' with address '%s'. \" +\n \"The associated error\",\n this.logPrefix,\n this.name,\n this.address,\n );\n // TODO: Consider rejecting promise in trySendBatch() or createBatch()\n };\n\n this._onAmqpClose = async (context: EventContext) => {\n const senderError = context.sender && context.sender.error;\n\n logger.logError(\n senderError,\n `${this.logPrefix} 'sender_close' event occurred. The associated error is`,\n );\n\n await this.onDetached().catch((err) => {\n logger.logError(\n err,\n `${this.logPrefix} error when closing sender after 'sender_close' event`,\n );\n });\n };\n\n this._onSessionClose = async (context: EventContext) => {\n const sessionError = context.session && context.session.error;\n\n logger.logError(\n sessionError,\n `${this.logPrefix} 'session_close' event occurred. The associated error is`,\n );\n\n await this.onDetached().catch((err) => {\n logger.logError(\n err,\n `${this.logPrefix} error when closing sender after 'session_close' event`,\n );\n });\n };\n }\n\n private _createSenderOptions(newName?: boolean): AwaitableSenderOptions {\n if (newName) this.name = getUniqueName(this.baseName);\n const srOptions: AwaitableSenderOptions = {\n name: this.name,\n target: {\n address: this.address,\n },\n source: this.identifier,\n onError: this._onAmqpError,\n onClose: this._onAmqpClose,\n onSessionError: this._onSessionError,\n onSessionClose: this._onSessionClose,\n };\n logger.verbose(`${this.logPrefix} Creating sender with options: %O`, srOptions);\n return srOptions;\n }\n\n /**\n * Tries to send the message to ServiceBus if there is enough credit to send them\n * and the circular buffer has available space to settle the message after sending them.\n *\n * We have implemented a synchronous send over here in the sense that we shall be waiting\n * for the message to be accepted or rejected and accordingly resolve or reject the promise.\n *\n * @param encodedMessage - The encoded message to be sent to ServiceBus.\n * @param sendBatch - Boolean indicating whether the encoded message represents a batch of messages or not\n */\n private _trySend(\n encodedMessage: Buffer,\n sendBatch: boolean,\n options: OperationOptionsBase | undefined,\n ): Promise<void> {\n const abortSignal = options?.abortSignal;\n const timeoutInMs = !isDefined(this._retryOptions.timeoutInMs)\n ? Constants.defaultOperationTimeoutInMs\n : this._retryOptions.timeoutInMs;\n\n const sendEventPromise = async (): Promise<void> => {\n const initStartTime = Date.now();\n if (!this.isOpen()) {\n try {\n await waitForTimeoutOrAbortOrResolve({\n actionFn: () => this.open(undefined, options?.abortSignal),\n abortSignal: options?.abortSignal,\n timeoutMs: timeoutInMs,\n timeoutMessage:\n `[${this._context.connectionId}] Sender \"${this.name}\" ` +\n `with address \"${this.address}\", was not able to send the message right now, due ` +\n `to operation timeout.`,\n });\n } catch (err: any) {\n const translatedError = translateServiceBusError(err);\n logger.logError(\n translatedError,\n \"%s An error occurred while creating the sender\",\n this.logPrefix,\n this.name,\n );\n throw translatedError;\n }\n }\n\n const timeTakenByInit = Date.now() - initStartTime;\n\n logger.verbose(\n \"%s Sender '%s', credit: %d available: %d\",\n this.logPrefix,\n this.name,\n this.link?.credit,\n this.link?.session?.outgoing?.available(),\n );\n\n const waitingTime = await waitForSendable(\n logger,\n this.logPrefix,\n this.name,\n timeoutInMs - timeTakenByInit,\n this.link,\n this.link?.session?.outgoing?.available(),\n );\n\n if (timeoutInMs <= timeTakenByInit + waitingTime) {\n const desc: string =\n `${this.logPrefix} Sender \"${this.name}\" ` +\n `with address \"${this.address}\", was not able to send the message right now, due ` +\n `to operation timeout.`;\n logger.warning(desc);\n const e: AmqpError = {\n condition: ErrorNameConditionMapper.ServiceUnavailableError,\n description: desc,\n };\n throw translateServiceBusError(e);\n }\n\n if (!this.link) {\n const msg = `[${this.logPrefix}] Cannot send the message. Link is not ready.`;\n logger.warning(msg);\n const amqpError: AmqpError = {\n condition: ErrorNameConditionMapper.SenderNotReadyError,\n description: msg,\n };\n throw translateServiceBusError(amqpError);\n }\n try {\n const delivery = await this.link.send(encodedMessage, {\n format: sendBatch ? 0x80013700 : 0,\n timeoutInSeconds: (timeoutInMs - timeTakenByInit - waitingTime) / 1000,\n abortSignal,\n });\n logger.verbose(\n \"%s Sender '%s', sent message with delivery id: %d\",\n this.logPrefix,\n this.name,\n delivery.id,\n );\n } catch (error: any) {\n const translatedError = translateServiceBusError(error.innerError || error);\n logger.logError(\n translatedError,\n `${this.logPrefix} An error occurred while sending the message`,\n );\n throw translatedError;\n }\n };\n const config: RetryConfig<void> = {\n operation: sendEventPromise,\n connectionId: this._context.connectionId!,\n operationType: RetryOperationType.sendMessage,\n retryOptions: this._retryOptions,\n abortSignal: abortSignal,\n };\n\n return retry<void>(config);\n }\n\n protected createRheaLink(options: AwaitableSenderOptions): Promise<AwaitableSender> {\n return this._context.connection.createAwaitableSender(options);\n }\n\n /**\n * Initializes the sender session on the connection.\n */\n public async open(\n options?: AwaitableSenderOptions,\n abortSignal?: AbortSignalLike,\n ): Promise<void> {\n try {\n if (!options) {\n options = this._createSenderOptions();\n }\n await this.initLink(options, abortSignal);\n } catch (err: any) {\n const translatedError = translateServiceBusError(err);\n logger.logError(\n translatedError,\n `${this.logPrefix} An error occurred while creating the sender`,\n );\n // Fix the unhelpful error messages for the OperationTimeoutError that comes from `rhea-promise`.\n if ((translatedError as MessagingError).code === \"OperationTimeoutError\") {\n translatedError.message =\n \"Failed to create a sender within allocated time and retry attempts.\";\n }\n throw translatedError;\n }\n }\n\n /**\n * Closes the rhea link.\n * To be called when connection is disconnected, onAmqpClose and onSessionClose events.\n */\n async onDetached(): Promise<void> {\n // Clears the token renewal timer. Closes the link and its session if they are open.\n // Removes the link and its session if they are present in rhea's cache.\n await this.closeLink();\n }\n\n /**\n * Determines whether the AMQP sender link is open. If open then returns true else returns false.\n */\n isOpen(): boolean {\n const result: boolean = this.link == null ? false : this.link.isOpen();\n logger.verbose(\n \"%s Sender '%s' with address '%s' is open? -> %s\",\n this.logPrefix,\n this.name,\n this.address,\n result,\n );\n return result;\n }\n\n /**\n * Sends the given message, with the given options on this link\n *\n * @param data - Message to send. Will be sent as UTF8-encoded JSON string.\n */\n async send(\n data: ServiceBusMessage | AmqpAnnotatedMessage,\n options?: OperationOptionsBase,\n ): Promise<void> {\n throwErrorIfConnectionClosed(this._context);\n try {\n const amqpMessage = toRheaMessage(data, defaultDataTransformer);\n\n // TODO: this body of logic is really similar to what's in sendMessages. Unify what we can.\n const encodedMessage = RheaMessageUtil.encode(amqpMessage);\n logger.verbose(\"%s Sender '%s', trying to send message: %O\", this.logPrefix, this.name, data);\n return await this._trySend(encodedMessage, false, options);\n } catch (err: any) {\n logger.logError(\n err,\n \"%s An error occurred while sending the message: %O\\nError\",\n this.logPrefix,\n data,\n );\n throw err;\n }\n }\n\n /**\n * Returns maximum message size on the AMQP sender link.\n *\n * Options to configure the `createBatch` method on the `Sender`.\n * - `maxSizeInBytes`: The upper limit for the size of batch.\n *\n * Example usage:\n * ```ts snippet:ignore\n * {\n * retryOptions: { maxRetries: 5; timeoutInMs: 10 }\n * }\n * ```\n */\n async getMaxMessageSize(\n options: {\n retryOptions?: RetryOptions;\n } & Pick<OperationOptionsBase, \"abortSignal\"> = {},\n ): Promise<number> {\n const retryOptions = options.retryOptions || {};\n if (this.isOpen()) {\n return this.link!.maxMessageSize;\n }\n\n const config: RetryConfig<number> = {\n operation: async () => {\n await this.open(undefined, options?.abortSignal);\n\n if (this.link) {\n return this.link.maxMessageSize;\n }\n\n throw new ServiceBusError(\n \"Link failed to initialize, cannot get max message size.\",\n \"GeneralError\",\n );\n },\n connectionId: this._context.connectionId,\n operationType: RetryOperationType.senderLink,\n retryOptions: retryOptions,\n abortSignal: options?.abortSignal,\n };\n\n return retry(config);\n }\n\n async createBatch(options?: CreateMessageBatchOptions): Promise<ServiceBusMessageBatch> {\n throwErrorIfConnectionClosed(this._context);\n let maxMessageSize = await this.getMaxMessageSize({\n retryOptions: this._retryOptions,\n abortSignal: options?.abortSignal,\n });\n if (options?.maxSizeInBytes) {\n if (options.maxSizeInBytes > maxMessageSize!) {\n const error = new Error(\n `Max message size (${options.maxSizeInBytes} bytes) is greater than maximum message size (${maxMessageSize} bytes) on the AMQP sender link.`,\n );\n throw error;\n }\n maxMessageSize = options.maxSizeInBytes;\n }\n return new ServiceBusMessageBatchImpl(this._context, maxMessageSize!);\n }\n\n async sendBatch(\n batchMessage: ServiceBusMessageBatch,\n options?: OperationOptionsBase,\n ): Promise<void> {\n throwErrorIfConnectionClosed(this._context);\n try {\n logger.verbose(\n \"%s Sender '%s', sending encoded batch message.\",\n this.logPrefix,\n this.name,\n batchMessage,\n );\n return await this._trySend(batchMessage._generateMessage(), true, options);\n } catch (err: any) {\n logger.logError(\n err,\n \"%s Sender '%s': An error occurred while sending the messages: %O\\nError\",\n this.logPrefix,\n this.name,\n batchMessage,\n );\n throw err;\n }\n }\n\n static create(\n identifier: string,\n context: ConnectionContext,\n entityPath: string,\n retryOptions: RetryOptions,\n ): MessageSender {\n throwErrorIfConnectionClosed(context);\n\n const sbSender = new MessageSender(identifier, context, entityPath, retryOptions);\n context.senders[sbSender.name] = sbSender;\n return sbSender;\n }\n\n protected removeLinkFromContext(): void {\n delete this._context.senders[this.name];\n }\n}\n"]}
1
+ {"version":3,"file":"messageSender.js","sourceRoot":"","sources":["../../../src/core/messageSender.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { senderLogger as logger } from \"../log.js\";\nimport type {\n AmqpError,\n AwaitableSender,\n AwaitableSenderOptions,\n EventContext,\n OnAmqpEvent,\n} from \"rhea-promise\";\nimport { message as RheaMessageUtil } from \"rhea-promise\";\nimport type {\n MessagingError,\n RetryConfig,\n RetryOptions,\n AmqpAnnotatedMessage,\n} from \"@azure/core-amqp\";\nimport { Constants, ErrorNameConditionMapper, RetryOperationType, retry } from \"@azure/core-amqp\";\nimport type { ServiceBusMessage } from \"../serviceBusMessage.js\";\nimport { toRheaMessage } from \"../serviceBusMessage.js\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\nimport { LinkEntity } from \"./linkEntity.js\";\nimport { getUniqueName, waitForSendable, waitForTimeoutOrAbortOrResolve } from \"../util/utils.js\";\nimport { throwErrorIfConnectionClosed } from \"../util/errors.js\";\nimport type { ServiceBusMessageBatch } from \"../serviceBusMessageBatch.js\";\nimport { ServiceBusMessageBatchImpl } from \"../serviceBusMessageBatch.js\";\nimport type { CreateMessageBatchOptions } from \"../models.js\";\nimport type { OperationOptionsBase } from \"../modelsToBeSharedWithEventHubs.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { ServiceBusError, translateServiceBusError } from \"../serviceBusError.js\";\nimport { isDefined } from \"@azure/core-util\";\nimport { defaultDataTransformer } from \"../dataTransformer.js\";\n\n/**\n * @internal\n * Describes the MessageSender that will send messages to ServiceBus.\n */\nexport class MessageSender extends LinkEntity<AwaitableSender> {\n /**\n * The handler function to handle errors that happen on the\n * underlying sender.\n * @readonly\n */\n private readonly _onAmqpError: OnAmqpEvent;\n /**\n * The handler function to handle \"sender_close\" event\n * that happens on the underlying sender.\n * @readonly\n */\n private readonly _onAmqpClose: OnAmqpEvent;\n /**\n * The message handler that will be set as the handler on\n * the underlying rhea sender's session for the \"session_error\" event.\n */\n private _onSessionError: OnAmqpEvent;\n /**\n * The message handler that will be set as the handler on\n * the underlying rhea sender's session for the \"session_close\" event.\n */\n private _onSessionClose: OnAmqpEvent;\n private _retryOptions: RetryOptions;\n\n constructor(\n private identifier: string,\n connectionContext: ConnectionContext,\n entityPath: string,\n retryOptions: RetryOptions,\n ) {\n super(entityPath, entityPath, connectionContext, \"sender\", logger, {\n address: entityPath,\n audience: `${connectionContext.config.endpoint}${entityPath}`,\n });\n this._retryOptions = retryOptions;\n this._onAmqpError = (context: EventContext) => {\n const senderError = context.sender && context.sender.error;\n logger.logError(\n senderError,\n \"%s 'sender_error' event occurred on the sender '%s' with address '%s'. \" +\n \"The associated error\",\n this.logPrefix,\n this.name,\n this.address,\n );\n // TODO: Consider rejecting promise in trySendBatch() or createBatch()\n };\n\n this._onSessionError = (context: EventContext) => {\n const sessionError = context.session && context.session.error;\n logger.logError(\n sessionError,\n \"%s 'session_error' event occurred on the session of sender '%s' with address '%s'. \" +\n \"The associated error\",\n this.logPrefix,\n this.name,\n this.address,\n );\n // TODO: Consider rejecting promise in trySendBatch() or createBatch()\n };\n\n this._onAmqpClose = async (context: EventContext) => {\n const senderError = context.sender && context.sender.error;\n\n logger.logError(\n senderError,\n `${this.logPrefix} 'sender_close' event occurred. The associated error is`,\n );\n\n await this.onDetached().catch((err) => {\n logger.logError(\n err,\n `${this.logPrefix} error when closing sender after 'sender_close' event`,\n );\n });\n };\n\n this._onSessionClose = async (context: EventContext) => {\n const sessionError = context.session && context.session.error;\n\n logger.logError(\n sessionError,\n `${this.logPrefix} 'session_close' event occurred. The associated error is`,\n );\n\n await this.onDetached().catch((err) => {\n logger.logError(\n err,\n `${this.logPrefix} error when closing sender after 'session_close' event`,\n );\n });\n };\n }\n\n private _createSenderOptions(newName?: boolean): AwaitableSenderOptions {\n if (newName) this.name = getUniqueName(this.baseName);\n const srOptions: AwaitableSenderOptions = {\n name: this.name,\n target: {\n address: this.address,\n },\n source: this.identifier,\n onError: this._onAmqpError,\n onClose: this._onAmqpClose,\n onSessionError: this._onSessionError,\n onSessionClose: this._onSessionClose,\n };\n logger.verbose(`${this.logPrefix} Creating sender with options: %O`, srOptions);\n return srOptions;\n }\n\n /**\n * Tries to send the message to ServiceBus if there is enough credit to send them\n * and the circular buffer has available space to settle the message after sending them.\n *\n * We have implemented a synchronous send over here in the sense that we shall be waiting\n * for the message to be accepted or rejected and accordingly resolve or reject the promise.\n *\n * @param encodedMessage - The encoded message to be sent to ServiceBus.\n * @param sendBatch - Boolean indicating whether the encoded message represents a batch of messages or not\n */\n private _trySend(\n encodedMessage: Buffer,\n sendBatch: boolean,\n options: OperationOptionsBase | undefined,\n ): Promise<void> {\n const abortSignal = options?.abortSignal;\n const timeoutInMs = !isDefined(this._retryOptions.timeoutInMs)\n ? Constants.defaultOperationTimeoutInMs\n : this._retryOptions.timeoutInMs;\n\n const sendEventPromise = async (): Promise<void> => {\n const initStartTime = Date.now();\n if (!this.isOpen()) {\n try {\n await waitForTimeoutOrAbortOrResolve({\n actionFn: () => this.open(undefined, options?.abortSignal),\n abortSignal: options?.abortSignal,\n timeoutMs: timeoutInMs,\n timeoutMessage:\n `[${this._context.connectionId}] Sender \"${this.name}\" ` +\n `with address \"${this.address}\", was not able to send the message right now, due ` +\n `to operation timeout.`,\n });\n } catch (err: any) {\n const translatedError = translateServiceBusError(err);\n logger.logError(\n translatedError,\n \"%s An error occurred while creating the sender\",\n this.logPrefix,\n this.name,\n );\n throw translatedError;\n }\n }\n\n const timeTakenByInit = Date.now() - initStartTime;\n\n logger.verbose(\n \"%s Sender '%s', credit: %d available: %d\",\n this.logPrefix,\n this.name,\n this.link?.credit,\n this.link?.session?.outgoing?.available(),\n );\n\n const waitingTime = await waitForSendable(\n logger,\n this.logPrefix,\n this.name,\n timeoutInMs - timeTakenByInit,\n this.link,\n this.link?.session?.outgoing?.available(),\n );\n\n if (timeoutInMs <= timeTakenByInit + waitingTime) {\n const desc: string =\n `${this.logPrefix} Sender \"${this.name}\" ` +\n `with address \"${this.address}\", was not able to send the message right now, due ` +\n `to operation timeout.`;\n logger.warning(desc);\n const e: AmqpError = {\n condition: ErrorNameConditionMapper.ServiceUnavailableError,\n description: desc,\n };\n throw translateServiceBusError(e);\n }\n\n if (!this.link) {\n const msg = `[${this.logPrefix}] Cannot send the message. Link is not ready.`;\n logger.warning(msg);\n const amqpError: AmqpError = {\n condition: ErrorNameConditionMapper.SenderNotReadyError,\n description: msg,\n };\n throw translateServiceBusError(amqpError);\n }\n try {\n const delivery = await this.link.send(encodedMessage, {\n format: sendBatch ? 0x80013700 : 0,\n timeoutInSeconds: (timeoutInMs - timeTakenByInit - waitingTime) / 1000,\n abortSignal,\n });\n logger.verbose(\n \"%s Sender '%s', sent message with delivery id: %d\",\n this.logPrefix,\n this.name,\n delivery.id,\n );\n } catch (error: any) {\n const translatedError = translateServiceBusError(error.innerError || error);\n logger.logError(\n translatedError,\n `${this.logPrefix} An error occurred while sending the message`,\n );\n throw translatedError;\n }\n };\n const config: RetryConfig<void> = {\n operation: sendEventPromise,\n connectionId: this._context.connectionId!,\n operationType: RetryOperationType.sendMessage,\n retryOptions: this._retryOptions,\n abortSignal: abortSignal,\n };\n\n return retry<void>(config);\n }\n\n protected createRheaLink(options: AwaitableSenderOptions): Promise<AwaitableSender> {\n return this._context.connection.createAwaitableSender(options);\n }\n\n /**\n * Initializes the sender session on the connection.\n */\n public async open(\n options?: AwaitableSenderOptions,\n abortSignal?: AbortSignalLike,\n ): Promise<void> {\n try {\n if (!options) {\n options = this._createSenderOptions();\n }\n await this.initLink(options, abortSignal);\n } catch (err: any) {\n const translatedError = translateServiceBusError(err);\n logger.logError(\n translatedError,\n `${this.logPrefix} An error occurred while creating the sender`,\n );\n // Fix the unhelpful error messages for the OperationTimeoutError that comes from `rhea-promise`.\n if ((translatedError as MessagingError).code === \"OperationTimeoutError\") {\n translatedError.message =\n \"Failed to create a sender within allocated time and retry attempts.\";\n }\n throw translatedError;\n }\n }\n\n /**\n * Closes the rhea link.\n * To be called when connection is disconnected, onAmqpClose and onSessionClose events.\n */\n async onDetached(): Promise<void> {\n // Clears the token renewal timer. Closes the link and its session if they are open.\n // Removes the link and its session if they are present in rhea's cache.\n await this.closeLink();\n }\n\n /**\n * Determines whether the AMQP sender link is open. If open then returns true else returns false.\n */\n isOpen(): boolean {\n const result: boolean = this.link == null ? false : this.link.isOpen();\n logger.verbose(\n \"%s Sender '%s' with address '%s' is open? -> %s\",\n this.logPrefix,\n this.name,\n this.address,\n result,\n );\n return result;\n }\n\n /**\n * Sends the given message, with the given options on this link\n *\n * @param data - Message to send. Will be sent as UTF8-encoded JSON string.\n */\n async send(\n data: ServiceBusMessage | AmqpAnnotatedMessage,\n options?: OperationOptionsBase,\n ): Promise<void> {\n throwErrorIfConnectionClosed(this._context);\n try {\n const amqpMessage = toRheaMessage(data, defaultDataTransformer);\n\n // TODO: this body of logic is really similar to what's in sendMessages. Unify what we can.\n const encodedMessage = RheaMessageUtil.encode(amqpMessage);\n logger.verbose(\"%s Sender '%s', trying to send message: %O\", this.logPrefix, this.name, data);\n return await this._trySend(encodedMessage, false, options);\n } catch (err: any) {\n logger.logError(\n err,\n \"%s An error occurred while sending the message: %O\\nError\",\n this.logPrefix,\n data,\n );\n throw err;\n }\n }\n\n /**\n * Returns maximum message size on the AMQP sender link.\n *\n * Options to configure the `createBatch` method on the `Sender`.\n * - `maxSizeInBytes`: The upper limit for the size of batch.\n *\n * Example usage:\n * ```ts snippet:ignore\n * {\n * retryOptions: { maxRetries: 5; timeoutInMs: 10 }\n * }\n * ```\n */\n async getMaxMessageSize(\n options: {\n retryOptions?: RetryOptions;\n } & Pick<OperationOptionsBase, \"abortSignal\"> = {},\n ): Promise<number> {\n const retryOptions = options.retryOptions || {};\n if (this.isOpen()) {\n return this.link!.maxMessageSize;\n }\n\n const config: RetryConfig<number> = {\n operation: async () => {\n await this.open(undefined, options?.abortSignal);\n\n if (this.link) {\n return this.link.maxMessageSize;\n }\n\n throw new ServiceBusError(\n \"Link failed to initialize, cannot get max message size.\",\n \"GeneralError\",\n );\n },\n connectionId: this._context.connectionId,\n operationType: RetryOperationType.senderLink,\n retryOptions: retryOptions,\n abortSignal: options?.abortSignal,\n };\n\n return retry(config);\n }\n\n async createBatch(options?: CreateMessageBatchOptions): Promise<ServiceBusMessageBatch> {\n throwErrorIfConnectionClosed(this._context);\n let maxMessageSize = await this.getMaxMessageSize({\n retryOptions: this._retryOptions,\n abortSignal: options?.abortSignal,\n });\n if (options?.maxSizeInBytes) {\n if (options.maxSizeInBytes > maxMessageSize!) {\n const error = new Error(\n `Max message size (${options.maxSizeInBytes} bytes) is greater than maximum message size (${maxMessageSize} bytes) on the AMQP sender link.`,\n );\n throw error;\n }\n maxMessageSize = options.maxSizeInBytes;\n }\n return new ServiceBusMessageBatchImpl(this._context, maxMessageSize!);\n }\n\n async sendBatch(\n batchMessage: ServiceBusMessageBatch,\n options?: OperationOptionsBase,\n ): Promise<void> {\n throwErrorIfConnectionClosed(this._context);\n try {\n logger.verbose(\n \"%s Sender '%s', sending encoded batch message.\",\n this.logPrefix,\n this.name,\n batchMessage,\n );\n return await this._trySend(batchMessage._generateMessage(), true, options);\n } catch (err: any) {\n logger.logError(\n err,\n \"%s Sender '%s': An error occurred while sending the messages: %O\\nError\",\n this.logPrefix,\n this.name,\n batchMessage,\n );\n throw err;\n }\n }\n\n static create(\n identifier: string,\n context: ConnectionContext,\n entityPath: string,\n retryOptions: RetryOptions,\n ): MessageSender {\n throwErrorIfConnectionClosed(context);\n\n const sbSender = new MessageSender(identifier, context, entityPath, retryOptions);\n context.senders[sbSender.name] = sbSender;\n return sbSender;\n }\n\n protected removeLinkFromContext(): void {\n delete this._context.senders[this.name];\n }\n}\n"]}
@@ -12,9 +12,10 @@ import { receiveDrainTimeoutInMs } from "../util/constants.js";
12
12
  * @internal
13
13
  */
14
14
  export class ReceiverHelper {
15
+ _getCurrentReceiver;
16
+ _isSuspended = true;
15
17
  constructor(_getCurrentReceiver) {
16
18
  this._getCurrentReceiver = _getCurrentReceiver;
17
- this._isSuspended = true;
18
19
  }
19
20
  _getCurrentReceiverOrError() {
20
21
  const currentReceiverData = this._getCurrentReceiver();
@@ -98,7 +99,7 @@ export class ReceiverHelper {
98
99
  logger.warning(`${logPrefix} Time out when draining credits in suspend().`);
99
100
  // Close the receiver link since we have not received the receiver_drained event
100
101
  // to prevent out-of-sync link state between local and remote
101
- await (receiver === null || receiver === void 0 ? void 0 : receiver.close());
102
+ await receiver?.close();
102
103
  resolve();
103
104
  }, receiveDrainTimeoutInMs);
104
105
  receiver.once(ReceiverEvents.receiverDrained, () => {
@@ -1 +1 @@
1
- {"version":3,"file":"receiverHelper.js","sourceRoot":"","sources":["../../../src/core/receiverHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { AbortError } from \"@azure/abort-controller\";\nimport type { Receiver } from \"rhea-promise\";\nimport { ReceiverEvents } from \"rhea-promise\";\nimport { receiverLogger as logger } from \"../log.js\";\nimport { ServiceBusError } from \"../serviceBusError.js\";\nimport { receiveDrainTimeoutInMs } from \"../util/constants.js\";\n\n/**\n * Wraps the receiver with some higher level operations for managing state\n * like credits, draining, etc...\n *\n * @internal\n */\nexport class ReceiverHelper {\n private _isSuspended: boolean = true;\n\n constructor(\n private _getCurrentReceiver: () => { receiver: Receiver | undefined; logPrefix: string },\n ) {}\n\n private _getCurrentReceiverOrError():\n | \"is undefined\"\n | \"is not open\"\n | \"is suspended\"\n | { receiver: Receiver | undefined; logPrefix: string } {\n const currentReceiverData = this._getCurrentReceiver();\n\n if (currentReceiverData.receiver == null) {\n return \"is undefined\";\n }\n\n if (!currentReceiverData.receiver.isOpen()) {\n return \"is not open\";\n }\n\n if (this._isSuspended) {\n return \"is suspended\";\n }\n\n return currentReceiverData;\n }\n\n /**\n * Adds credits to the receiver, respecting any state that\n * indicates the receiver is closed or should not continue\n * to receive more messages.\n *\n * @param credits - Number of credits to add.\n * or `stopReceivingMessages` has been called.\n */\n addCredit(credits: number): void {\n const currentReceiverOrError = this._getCurrentReceiverOrError();\n\n if (typeof currentReceiverOrError === \"string\") {\n const errorMessage = `Cannot request messages on the receiver since it ${currentReceiverOrError}.`;\n\n if (currentReceiverOrError === \"is suspended\") {\n // if a user has suspended the receiver we should consider this a non-retryable\n // error since it absolutely requires user intervention.\n throw new AbortError(errorMessage);\n }\n\n throw new ServiceBusError(errorMessage, \"GeneralError\");\n }\n\n if (currentReceiverOrError.receiver != null) {\n logger.verbose(`${currentReceiverOrError.logPrefix} Adding ${credits} credits`);\n currentReceiverOrError.receiver.addCredit(credits);\n }\n }\n\n /**\n * Drains the credits for the receiver and prevents the `receiverHelper.addCredit()` method from adding credits.\n * Call `resume()` to enable the `addCredit()` method.\n */\n async suspend(): Promise<void> {\n const { receiver, logPrefix } = this._getCurrentReceiver();\n\n this._isSuspended = true;\n\n if (!this._isValidReceiver(receiver)) {\n return;\n }\n\n logger.verbose(\n `${logPrefix} User has requested to stop receiving new messages, attempting to drain.`,\n );\n\n return this.drain();\n }\n\n /**\n * Resets tracking so `addCredit` works again by toggling the `_isSuspended` flag.\n */\n resume(): void {\n this._isSuspended = false;\n }\n\n isSuspended(): boolean {\n return this._isSuspended;\n }\n\n /**\n * Initiates a drain for the current receiver and resolves when\n * the drain has completed.\n *\n * NOTE: This method returns immediately if the receiver is not valid or if there\n * are no pending credits on the receiver (ie: `receiver.credit === 0`).\n */\n async drain(): Promise<void> {\n const { receiver, logPrefix } = this._getCurrentReceiver();\n\n if (!this._isValidReceiver(receiver)) {\n // TODO: should we throw?\n return;\n }\n\n if (receiver.credit === 0) {\n // nothing to drain\n return;\n }\n\n logger.verbose(\n `${logPrefix} Receiver is starting drain. Remaining credits; ${receiver.credit}`,\n );\n\n const drainPromise = new Promise<void>((resolve) => {\n const timer = setTimeout(async () => {\n logger.warning(`${logPrefix} Time out when draining credits in suspend().`);\n // Close the receiver link since we have not received the receiver_drained event\n // to prevent out-of-sync link state between local and remote\n await receiver?.close();\n resolve();\n }, receiveDrainTimeoutInMs);\n receiver.once(ReceiverEvents.receiverDrained, () => {\n logger.verbose(`${logPrefix} Receiver has been drained.`);\n receiver.drain = false;\n clearTimeout(timer);\n resolve();\n });\n receiver.drainCredit();\n });\n\n return drainPromise;\n }\n\n private _isValidReceiver(receiver: Receiver | undefined): receiver is Receiver {\n return receiver != null && receiver.isOpen();\n }\n}\n"]}
1
+ {"version":3,"file":"receiverHelper.js","sourceRoot":"","sources":["../../../src/core/receiverHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { AbortError } from \"@azure/abort-controller\";\nimport type { Receiver } from \"rhea-promise\";\nimport { ReceiverEvents } from \"rhea-promise\";\nimport { receiverLogger as logger } from \"../log.js\";\nimport { ServiceBusError } from \"../serviceBusError.js\";\nimport { receiveDrainTimeoutInMs } from \"../util/constants.js\";\n\n/**\n * Wraps the receiver with some higher level operations for managing state\n * like credits, draining, etc...\n *\n * @internal\n */\nexport class ReceiverHelper {\n private _isSuspended: boolean = true;\n\n constructor(\n private _getCurrentReceiver: () => { receiver: Receiver | undefined; logPrefix: string },\n ) {}\n\n private _getCurrentReceiverOrError():\n | \"is undefined\"\n | \"is not open\"\n | \"is suspended\"\n | { receiver: Receiver | undefined; logPrefix: string } {\n const currentReceiverData = this._getCurrentReceiver();\n\n if (currentReceiverData.receiver == null) {\n return \"is undefined\";\n }\n\n if (!currentReceiverData.receiver.isOpen()) {\n return \"is not open\";\n }\n\n if (this._isSuspended) {\n return \"is suspended\";\n }\n\n return currentReceiverData;\n }\n\n /**\n * Adds credits to the receiver, respecting any state that\n * indicates the receiver is closed or should not continue\n * to receive more messages.\n *\n * @param credits - Number of credits to add.\n * or `stopReceivingMessages` has been called.\n */\n addCredit(credits: number): void {\n const currentReceiverOrError = this._getCurrentReceiverOrError();\n\n if (typeof currentReceiverOrError === \"string\") {\n const errorMessage = `Cannot request messages on the receiver since it ${currentReceiverOrError}.`;\n\n if (currentReceiverOrError === \"is suspended\") {\n // if a user has suspended the receiver we should consider this a non-retryable\n // error since it absolutely requires user intervention.\n throw new AbortError(errorMessage);\n }\n\n throw new ServiceBusError(errorMessage, \"GeneralError\");\n }\n\n if (currentReceiverOrError.receiver != null) {\n logger.verbose(`${currentReceiverOrError.logPrefix} Adding ${credits} credits`);\n currentReceiverOrError.receiver.addCredit(credits);\n }\n }\n\n /**\n * Drains the credits for the receiver and prevents the `receiverHelper.addCredit()` method from adding credits.\n * Call `resume()` to enable the `addCredit()` method.\n */\n async suspend(): Promise<void> {\n const { receiver, logPrefix } = this._getCurrentReceiver();\n\n this._isSuspended = true;\n\n if (!this._isValidReceiver(receiver)) {\n return;\n }\n\n logger.verbose(\n `${logPrefix} User has requested to stop receiving new messages, attempting to drain.`,\n );\n\n return this.drain();\n }\n\n /**\n * Resets tracking so `addCredit` works again by toggling the `_isSuspended` flag.\n */\n resume(): void {\n this._isSuspended = false;\n }\n\n isSuspended(): boolean {\n return this._isSuspended;\n }\n\n /**\n * Initiates a drain for the current receiver and resolves when\n * the drain has completed.\n *\n * NOTE: This method returns immediately if the receiver is not valid or if there\n * are no pending credits on the receiver (ie: `receiver.credit === 0`).\n */\n async drain(): Promise<void> {\n const { receiver, logPrefix } = this._getCurrentReceiver();\n\n if (!this._isValidReceiver(receiver)) {\n // TODO: should we throw?\n return;\n }\n\n if (receiver.credit === 0) {\n // nothing to drain\n return;\n }\n\n logger.verbose(\n `${logPrefix} Receiver is starting drain. Remaining credits; ${receiver.credit}`,\n );\n\n const drainPromise = new Promise<void>((resolve) => {\n const timer = setTimeout(async () => {\n logger.warning(`${logPrefix} Time out when draining credits in suspend().`);\n // Close the receiver link since we have not received the receiver_drained event\n // to prevent out-of-sync link state between local and remote\n await receiver?.close();\n resolve();\n }, receiveDrainTimeoutInMs);\n receiver.once(ReceiverEvents.receiverDrained, () => {\n logger.verbose(`${logPrefix} Receiver has been drained.`);\n receiver.drain = false;\n clearTimeout(timer);\n resolve();\n });\n receiver.drainCredit();\n });\n\n return drainPromise;\n }\n\n private _isValidReceiver(receiver: Receiver | undefined): receiver is Receiver {\n return receiver != null && receiver.isOpen();\n }\n}\n"]}
@@ -46,14 +46,21 @@ export function createReceiverOptions(name, receiveMode, source, clientId, handl
46
46
  const properties = timeoutInMs !== undefined
47
47
  ? { [Constants.receiverIdentifierName]: clientId, [timeoutName]: timeoutInMs }
48
48
  : { [Constants.receiverIdentifierName]: clientId };
49
- const rcvrOptions = Object.assign({ name,
49
+ const rcvrOptions = {
50
+ name,
50
51
  // "autoaccept" being true in the "receiveAndDelete" mode sets the "settled" flag to true on the deliveries
51
52
  // which helps in clearing the circular buffer(size=2048) as it is needed to receive messages after 2048 of them are received.
52
- autoaccept: receiveMode === "receiveAndDelete" ? true : false,
53
+ autoaccept: receiveMode === "receiveAndDelete" ? true : false,
53
54
  // receiveAndDelete -> first(0), peekLock -> second (1)
54
- rcv_settle_mode: receiveMode === "receiveAndDelete" ? 0 : 1,
55
+ rcv_settle_mode: receiveMode === "receiveAndDelete" ? 0 : 1,
55
56
  // receiveAndDelete -> settled (1), peekLock -> unsettled (0)
56
- snd_settle_mode: receiveMode === "receiveAndDelete" ? 1 : 0, source, target: clientId, credit_window: 0, properties }, handlers);
57
+ snd_settle_mode: receiveMode === "receiveAndDelete" ? 1 : 0,
58
+ source,
59
+ target: clientId,
60
+ credit_window: 0,
61
+ properties,
62
+ ...handlers,
63
+ };
57
64
  return rcvrOptions;
58
65
  }
59
66
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/core/shared.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAmB7C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,QAA8B,EAC9B,sBAA4D;IAE5D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC;QACxC,cAAc,CAAC,OAAO,CACpB,wEAAwE,GAAG,WAAW,EACtF,SAAS,EACT,EAAE,EACF,OAAO,EACP,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAC3C,CAAC;QACF,IAAI,OAAO,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAA4B,CAAC;YAC1E,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,cAAc,CAAC,OAAO,CACpB,oEAAoE,EACpE,SAAS,EACT,EAAE,CACH,CAAC;YACF,MAAM,YAAY,GAAG,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvD,cAAc,CAAC,OAAO,CACpB,+DAA+D,EAC/D,SAAS,EACT,EAAE,EACF,YAAY,CACb,CAAC;YACF,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/E,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,8GAA8G;AAC9G,MAAM,WAAW,GAAG,GAAG,SAAS,CAAC,YAAY,UAAU,CAAC;AACxD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,WAAwB,EACxB,MAAc,EACd,QAAgB,EAChB,QAA0B,EAC1B,WAAoB;IAEpB,MAAM,UAAU,GACd,WAAW,KAAK,SAAS;QACvB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE;QAC9E,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvD,MAAM,WAAW,mBACf,IAAI;QACJ,2GAA2G;QAC3G,8HAA8H;QAC9H,UAAU,EAAE,WAAW,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QAC7D,uDAAuD;QACvD,eAAe,EAAE,WAAW,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,6DAA6D;QAC7D,eAAe,EAAE,WAAW,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3D,MAAM,EACN,MAAM,EAAE,QAAQ,EAChB,aAAa,EAAE,CAAC,EAChB,UAAU,IACP,QAAQ,CACZ,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Delivery, ReceiverOptions, Source } from \"rhea-promise\";\nimport { translateServiceBusError } from \"../serviceBusError.js\";\nimport { receiverLogger } from \"../log.js\";\nimport type { ReceiveMode } from \"../models.js\";\nimport { Constants } from \"@azure/core-amqp\";\n\n/**\n * @internal\n */\nexport type ReceiverHandlers = Pick<\n ReceiverOptions,\n \"onMessage\" | \"onError\" | \"onClose\" | \"onSessionError\" | \"onSessionClose\" | \"onSettled\"\n>;\n\n/**\n * @internal\n */\nexport interface DeferredPromiseAndTimer {\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n timer: NodeJS.Timeout;\n}\n\n/**\n * This is the shared onSettled handler for all of the receiver implementations.\n *\n * The sequence is basically:\n * 1. User calls `await <ServiceBusMessage instance>.complete()` (or other settlement methods)\n * 2. This creates a `Promise` that gets stored in the _deliveryDispositionMap\n * 3. When the service acknowledges the settlement this method gets called for that message.\n * 4. We resolve() the promise from the _deliveryDispositionMap.\n * 5. User's code after the settlement continues.\n *\n * @internal\n */\nexport function onMessageSettled(\n logPrefix: string,\n delivery: Delivery | undefined,\n deliveryDispositionMap: Map<number, DeferredPromiseAndTimer>,\n): void {\n if (delivery) {\n const id = delivery.id;\n const state = delivery.remote_state;\n const settled = delivery.remote_settled;\n receiverLogger.verbose(\n \"%s Delivery with id %d, remote_settled: %s, remote_state: %o has been \" + \"received.\",\n logPrefix,\n id,\n settled,\n state && state.error ? state.error : state,\n );\n if (settled && deliveryDispositionMap.has(id)) {\n const promise = deliveryDispositionMap.get(id) as DeferredPromiseAndTimer;\n clearTimeout(promise.timer);\n receiverLogger.verbose(\n \"%s Found the delivery with id %d in the map and cleared the timer.\",\n logPrefix,\n id,\n );\n const deleteResult = deliveryDispositionMap.delete(id);\n receiverLogger.verbose(\n \"%s Successfully deleted the delivery with id %d from the map.\",\n logPrefix,\n id,\n deleteResult,\n );\n if (state && state.error && (state.error.condition || state.error.description)) {\n const error = translateServiceBusError(state.error);\n return promise.reject(error);\n }\n\n return promise.resolve();\n }\n }\n}\n\n// Placed in Service Bus for now and can be promoted to core-amqp if also useful for Event Hubs in the future.\nconst timeoutName = `${Constants.vendorString}:timeout`;\n/**\n * Creates the options that need to be specified while creating an AMQP receiver link.\n *\n * @internal\n */\nexport function createReceiverOptions(\n name: string,\n receiveMode: ReceiveMode,\n source: Source,\n clientId: string,\n handlers: ReceiverHandlers,\n timeoutInMs?: number,\n): ReceiverOptions {\n const properties =\n timeoutInMs !== undefined\n ? { [Constants.receiverIdentifierName]: clientId, [timeoutName]: timeoutInMs }\n : { [Constants.receiverIdentifierName]: clientId };\n const rcvrOptions: ReceiverOptions = {\n name,\n // \"autoaccept\" being true in the \"receiveAndDelete\" mode sets the \"settled\" flag to true on the deliveries\n // which helps in clearing the circular buffer(size=2048) as it is needed to receive messages after 2048 of them are received.\n autoaccept: receiveMode === \"receiveAndDelete\" ? true : false,\n // receiveAndDelete -> first(0), peekLock -> second (1)\n rcv_settle_mode: receiveMode === \"receiveAndDelete\" ? 0 : 1,\n // receiveAndDelete -> settled (1), peekLock -> unsettled (0)\n snd_settle_mode: receiveMode === \"receiveAndDelete\" ? 1 : 0,\n source,\n target: clientId,\n credit_window: 0,\n properties,\n ...handlers,\n };\n\n return rcvrOptions;\n}\n"]}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/core/shared.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAmB7C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,QAA8B,EAC9B,sBAA4D;IAE5D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC;QACxC,cAAc,CAAC,OAAO,CACpB,wEAAwE,GAAG,WAAW,EACtF,SAAS,EACT,EAAE,EACF,OAAO,EACP,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAC3C,CAAC;QACF,IAAI,OAAO,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAA4B,CAAC;YAC1E,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,cAAc,CAAC,OAAO,CACpB,oEAAoE,EACpE,SAAS,EACT,EAAE,CACH,CAAC;YACF,MAAM,YAAY,GAAG,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvD,cAAc,CAAC,OAAO,CACpB,+DAA+D,EAC/D,SAAS,EACT,EAAE,EACF,YAAY,CACb,CAAC;YACF,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/E,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,8GAA8G;AAC9G,MAAM,WAAW,GAAG,GAAG,SAAS,CAAC,YAAY,UAAU,CAAC;AACxD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,WAAwB,EACxB,MAAc,EACd,QAAgB,EAChB,QAA0B,EAC1B,WAAoB;IAEpB,MAAM,UAAU,GACd,WAAW,KAAK,SAAS;QACvB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE;QAC9E,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvD,MAAM,WAAW,GAAoB;QACnC,IAAI;QACJ,2GAA2G;QAC3G,8HAA8H;QAC9H,UAAU,EAAE,WAAW,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QAC7D,uDAAuD;QACvD,eAAe,EAAE,WAAW,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,6DAA6D;QAC7D,eAAe,EAAE,WAAW,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM;QACN,MAAM,EAAE,QAAQ;QAChB,aAAa,EAAE,CAAC;QAChB,UAAU;QACV,GAAG,QAAQ;KACZ,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Delivery, ReceiverOptions, Source } from \"rhea-promise\";\nimport { translateServiceBusError } from \"../serviceBusError.js\";\nimport { receiverLogger } from \"../log.js\";\nimport type { ReceiveMode } from \"../models.js\";\nimport { Constants } from \"@azure/core-amqp\";\n\n/**\n * @internal\n */\nexport type ReceiverHandlers = Pick<\n ReceiverOptions,\n \"onMessage\" | \"onError\" | \"onClose\" | \"onSessionError\" | \"onSessionClose\" | \"onSettled\"\n>;\n\n/**\n * @internal\n */\nexport interface DeferredPromiseAndTimer {\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n timer: NodeJS.Timeout;\n}\n\n/**\n * This is the shared onSettled handler for all of the receiver implementations.\n *\n * The sequence is basically:\n * 1. User calls `await <ServiceBusMessage instance>.complete()` (or other settlement methods)\n * 2. This creates a `Promise` that gets stored in the _deliveryDispositionMap\n * 3. When the service acknowledges the settlement this method gets called for that message.\n * 4. We resolve() the promise from the _deliveryDispositionMap.\n * 5. User's code after the settlement continues.\n *\n * @internal\n */\nexport function onMessageSettled(\n logPrefix: string,\n delivery: Delivery | undefined,\n deliveryDispositionMap: Map<number, DeferredPromiseAndTimer>,\n): void {\n if (delivery) {\n const id = delivery.id;\n const state = delivery.remote_state;\n const settled = delivery.remote_settled;\n receiverLogger.verbose(\n \"%s Delivery with id %d, remote_settled: %s, remote_state: %o has been \" + \"received.\",\n logPrefix,\n id,\n settled,\n state && state.error ? state.error : state,\n );\n if (settled && deliveryDispositionMap.has(id)) {\n const promise = deliveryDispositionMap.get(id) as DeferredPromiseAndTimer;\n clearTimeout(promise.timer);\n receiverLogger.verbose(\n \"%s Found the delivery with id %d in the map and cleared the timer.\",\n logPrefix,\n id,\n );\n const deleteResult = deliveryDispositionMap.delete(id);\n receiverLogger.verbose(\n \"%s Successfully deleted the delivery with id %d from the map.\",\n logPrefix,\n id,\n deleteResult,\n );\n if (state && state.error && (state.error.condition || state.error.description)) {\n const error = translateServiceBusError(state.error);\n return promise.reject(error);\n }\n\n return promise.resolve();\n }\n }\n}\n\n// Placed in Service Bus for now and can be promoted to core-amqp if also useful for Event Hubs in the future.\nconst timeoutName = `${Constants.vendorString}:timeout`;\n/**\n * Creates the options that need to be specified while creating an AMQP receiver link.\n *\n * @internal\n */\nexport function createReceiverOptions(\n name: string,\n receiveMode: ReceiveMode,\n source: Source,\n clientId: string,\n handlers: ReceiverHandlers,\n timeoutInMs?: number,\n): ReceiverOptions {\n const properties =\n timeoutInMs !== undefined\n ? { [Constants.receiverIdentifierName]: clientId, [timeoutName]: timeoutInMs }\n : { [Constants.receiverIdentifierName]: clientId };\n const rcvrOptions: ReceiverOptions = {\n name,\n // \"autoaccept\" being true in the \"receiveAndDelete\" mode sets the \"settled\" flag to true on the deliveries\n // which helps in clearing the circular buffer(size=2048) as it is needed to receive messages after 2048 of them are received.\n autoaccept: receiveMode === \"receiveAndDelete\" ? true : false,\n // receiveAndDelete -> first(0), peekLock -> second (1)\n rcv_settle_mode: receiveMode === \"receiveAndDelete\" ? 0 : 1,\n // receiveAndDelete -> settled (1), peekLock -> unsettled (0)\n snd_settle_mode: receiveMode === \"receiveAndDelete\" ? 1 : 0,\n source,\n target: clientId,\n credit_window: 0,\n properties,\n ...handlers,\n };\n\n return rcvrOptions;\n}\n"]}