@azure/core-amqp 4.4.0-beta.1 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +3 -3
- package/README.md +3 -5
- package/dist/browser/ConnectionContextBase.js +1 -1
- package/dist/browser/ConnectionContextBase.js.map +1 -1
- package/dist/browser/amqpAnnotatedMessage.d.ts +1 -1
- package/dist/browser/amqpAnnotatedMessage.js +1 -2
- package/dist/browser/amqpAnnotatedMessage.js.map +1 -1
- package/dist/browser/auth/token.js +1 -1
- package/dist/browser/auth/token.js.map +1 -1
- package/dist/browser/auth/tokenProvider.d.ts +1 -1
- package/dist/browser/auth/tokenProvider.js +2 -2
- package/dist/browser/auth/tokenProvider.js.map +1 -1
- package/dist/browser/cbs.d.ts +3 -3
- package/dist/browser/cbs.js +2 -2
- package/dist/browser/cbs.js.map +1 -1
- package/dist/browser/connectionConfig/connectionConfig.d.ts +1 -1
- package/dist/browser/connectionConfig/connectionConfig.js +29 -10
- package/dist/browser/connectionConfig/connectionConfig.js.map +1 -1
- package/dist/browser/errors.d.ts +3 -1
- package/dist/browser/errors.js +3 -1
- package/dist/browser/errors.js.map +1 -1
- package/dist/browser/index.d.ts +0 -1
- package/dist/browser/index.js +1 -2
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/internals.js +1 -1
- package/dist/browser/internals.js.map +1 -1
- package/dist/browser/log.js +1 -1
- package/dist/browser/log.js.map +1 -1
- package/dist/browser/messageHeader.d.ts +1 -1
- package/dist/browser/messageHeader.js +1 -1
- package/dist/browser/messageHeader.js.map +1 -1
- package/dist/browser/messageProperties.d.ts +1 -2
- package/dist/browser/messageProperties.js +1 -1
- package/dist/browser/messageProperties.js.map +1 -1
- package/dist/browser/requestResponseLink.d.ts +2 -2
- package/dist/browser/requestResponseLink.js +3 -3
- package/dist/browser/requestResponseLink.js.map +1 -1
- package/dist/browser/retry.d.ts +1 -1
- package/dist/browser/retry.js +5 -12
- package/dist/browser/retry.js.map +1 -1
- package/dist/browser/util/checkNetworkConnection-browser.mjs.map +1 -1
- package/dist/browser/util/checkNetworkConnection.common.d.ts +6 -0
- package/dist/browser/util/checkNetworkConnection.common.js +10 -0
- package/dist/browser/util/checkNetworkConnection.common.js.map +1 -0
- package/dist/browser/util/checkNetworkConnection.d.ts +1 -5
- package/dist/browser/util/checkNetworkConnection.js +2 -8
- package/dist/browser/util/constants.d.ts +0 -1
- package/dist/browser/util/constants.js +1 -2
- package/dist/browser/util/constants.js.map +1 -1
- package/dist/browser/util/hmacSha256-browser.mjs.map +1 -1
- package/dist/browser/util/hmacSha256.common.d.ts +2 -0
- package/dist/browser/util/hmacSha256.common.js +11 -0
- package/dist/browser/util/hmacSha256.common.js.map +1 -0
- package/dist/browser/util/hmacSha256.d.ts +1 -16
- package/dist/browser/util/hmacSha256.js +2 -9
- package/dist/browser/util/lock.d.ts +1 -1
- package/dist/browser/util/lock.js +1 -1
- package/dist/browser/util/lock.js.map +1 -1
- package/dist/browser/util/runtimeInfo-browser.mjs.map +1 -1
- package/dist/browser/util/runtimeInfo.js +1 -1
- package/dist/browser/util/typeGuards.d.ts +1 -1
- package/dist/browser/util/typeGuards.js +1 -1
- package/dist/browser/util/typeGuards.js.map +1 -1
- package/dist/browser/util/utils.d.ts +3 -3
- package/dist/browser/util/utils.js +1 -1
- package/dist/browser/util/utils.js.map +1 -1
- package/dist/commonjs/ConnectionContextBase.js +1 -1
- package/dist/commonjs/ConnectionContextBase.js.map +1 -1
- package/dist/commonjs/amqpAnnotatedMessage.d.ts +1 -1
- package/dist/commonjs/amqpAnnotatedMessage.js +1 -2
- package/dist/commonjs/amqpAnnotatedMessage.js.map +1 -1
- package/dist/commonjs/auth/token.js +1 -1
- package/dist/commonjs/auth/token.js.map +1 -1
- package/dist/commonjs/auth/tokenProvider.d.ts +1 -1
- package/dist/commonjs/auth/tokenProvider.js +3 -3
- package/dist/commonjs/auth/tokenProvider.js.map +1 -1
- package/dist/commonjs/cbs.d.ts +3 -3
- package/dist/commonjs/cbs.js +1 -1
- package/dist/commonjs/cbs.js.map +1 -1
- package/dist/commonjs/connectionConfig/connectionConfig.d.ts +1 -1
- package/dist/commonjs/connectionConfig/connectionConfig.js +31 -12
- package/dist/commonjs/connectionConfig/connectionConfig.js.map +1 -1
- package/dist/commonjs/errors.d.ts +3 -1
- package/dist/commonjs/errors.js +7 -5
- package/dist/commonjs/errors.js.map +1 -1
- package/dist/commonjs/index.d.ts +0 -1
- package/dist/commonjs/index.js +1 -2
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/internals.js +1 -1
- package/dist/commonjs/internals.js.map +1 -1
- package/dist/commonjs/log.js +3 -3
- package/dist/commonjs/log.js.map +1 -1
- package/dist/commonjs/messageHeader.d.ts +1 -1
- package/dist/commonjs/messageHeader.js +1 -1
- package/dist/commonjs/messageHeader.js.map +1 -1
- package/dist/commonjs/messageProperties.d.ts +1 -2
- package/dist/commonjs/messageProperties.js +1 -1
- package/dist/commonjs/messageProperties.js.map +1 -1
- package/dist/commonjs/requestResponseLink.d.ts +2 -2
- package/dist/commonjs/requestResponseLink.js +4 -4
- package/dist/commonjs/requestResponseLink.js.map +1 -1
- package/dist/commonjs/retry.d.ts +1 -1
- package/dist/commonjs/retry.js +7 -14
- package/dist/commonjs/retry.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/commonjs/util/checkNetworkConnection.common.d.ts +6 -0
- package/dist/commonjs/util/checkNetworkConnection.common.js +13 -0
- package/dist/commonjs/util/checkNetworkConnection.common.js.map +1 -0
- package/dist/commonjs/util/checkNetworkConnection.js +2 -3
- package/dist/commonjs/util/checkNetworkConnection.js.map +1 -1
- package/dist/commonjs/util/constants.d.ts +0 -1
- package/dist/commonjs/util/constants.js +1 -2
- package/dist/commonjs/util/constants.js.map +1 -1
- package/dist/commonjs/util/hmacSha256.common.d.ts +2 -0
- package/dist/commonjs/util/hmacSha256.common.js +14 -0
- package/dist/commonjs/util/hmacSha256.common.js.map +1 -0
- package/dist/commonjs/util/hmacSha256.js +2 -3
- package/dist/commonjs/util/hmacSha256.js.map +1 -1
- package/dist/commonjs/util/lock.d.ts +1 -1
- package/dist/commonjs/util/lock.js +1 -1
- package/dist/commonjs/util/lock.js.map +1 -1
- package/dist/commonjs/util/runtimeInfo.js +3 -4
- package/dist/commonjs/util/runtimeInfo.js.map +1 -1
- package/dist/commonjs/util/typeGuards.d.ts +1 -1
- package/dist/commonjs/util/typeGuards.js +2 -3
- package/dist/commonjs/util/typeGuards.js.map +1 -1
- package/dist/commonjs/util/utils.d.ts +3 -3
- package/dist/commonjs/util/utils.js +10 -10
- package/dist/commonjs/util/utils.js.map +1 -1
- package/dist/esm/ConnectionContextBase.js +1 -1
- package/dist/esm/ConnectionContextBase.js.map +1 -1
- package/dist/esm/amqpAnnotatedMessage.d.ts +1 -1
- package/dist/esm/amqpAnnotatedMessage.js +1 -2
- package/dist/esm/amqpAnnotatedMessage.js.map +1 -1
- package/dist/esm/auth/token.js +1 -1
- package/dist/esm/auth/token.js.map +1 -1
- package/dist/esm/auth/tokenProvider.d.ts +1 -1
- package/dist/esm/auth/tokenProvider.js +2 -2
- package/dist/esm/auth/tokenProvider.js.map +1 -1
- package/dist/esm/cbs.d.ts +3 -3
- package/dist/esm/cbs.js +2 -2
- package/dist/esm/cbs.js.map +1 -1
- package/dist/esm/connectionConfig/connectionConfig.d.ts +1 -1
- package/dist/esm/connectionConfig/connectionConfig.js +29 -10
- package/dist/esm/connectionConfig/connectionConfig.js.map +1 -1
- package/dist/esm/errors.d.ts +3 -1
- package/dist/esm/errors.js +3 -1
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internals.js +1 -1
- package/dist/esm/internals.js.map +1 -1
- package/dist/esm/log.js +1 -1
- package/dist/esm/log.js.map +1 -1
- package/dist/esm/messageHeader.d.ts +1 -1
- package/dist/esm/messageHeader.js +1 -1
- package/dist/esm/messageHeader.js.map +1 -1
- package/dist/esm/messageProperties.d.ts +1 -2
- package/dist/esm/messageProperties.js +1 -1
- package/dist/esm/messageProperties.js.map +1 -1
- package/dist/esm/requestResponseLink.d.ts +2 -2
- package/dist/esm/requestResponseLink.js +3 -3
- package/dist/esm/requestResponseLink.js.map +1 -1
- package/dist/esm/retry.d.ts +1 -1
- package/dist/esm/retry.js +5 -12
- package/dist/esm/retry.js.map +1 -1
- package/dist/esm/util/checkNetworkConnection.common.d.ts +6 -0
- package/dist/esm/util/checkNetworkConnection.common.js +10 -0
- package/dist/esm/util/checkNetworkConnection.common.js.map +1 -0
- package/dist/esm/util/checkNetworkConnection.js +1 -1
- package/dist/esm/util/checkNetworkConnection.js.map +1 -1
- package/dist/esm/util/constants.d.ts +0 -1
- package/dist/esm/util/constants.js +1 -2
- package/dist/esm/util/constants.js.map +1 -1
- package/dist/esm/util/hmacSha256.common.d.ts +2 -0
- package/dist/esm/util/hmacSha256.common.js +11 -0
- package/dist/esm/util/hmacSha256.common.js.map +1 -0
- package/dist/esm/util/hmacSha256.js +1 -1
- package/dist/esm/util/hmacSha256.js.map +1 -1
- package/dist/esm/util/lock.d.ts +1 -1
- package/dist/esm/util/lock.js +1 -1
- package/dist/esm/util/lock.js.map +1 -1
- package/dist/esm/util/runtimeInfo.js +1 -1
- package/dist/esm/util/runtimeInfo.js.map +1 -1
- package/dist/esm/util/typeGuards.d.ts +1 -1
- package/dist/esm/util/typeGuards.js +1 -1
- package/dist/esm/util/typeGuards.js.map +1 -1
- package/dist/esm/util/utils.d.ts +3 -3
- package/dist/esm/util/utils.js +1 -1
- package/dist/esm/util/utils.js.map +1 -1
- package/dist/react-native/ConnectionContextBase.js +1 -1
- package/dist/react-native/ConnectionContextBase.js.map +1 -1
- package/dist/react-native/amqpAnnotatedMessage.d.ts +1 -1
- package/dist/react-native/amqpAnnotatedMessage.js +1 -2
- package/dist/react-native/amqpAnnotatedMessage.js.map +1 -1
- package/dist/react-native/auth/token.js +1 -1
- package/dist/react-native/auth/token.js.map +1 -1
- package/dist/react-native/auth/tokenProvider.d.ts +1 -1
- package/dist/react-native/auth/tokenProvider.js +2 -2
- package/dist/react-native/auth/tokenProvider.js.map +1 -1
- package/dist/react-native/cbs.d.ts +3 -3
- package/dist/react-native/cbs.js +2 -2
- package/dist/react-native/cbs.js.map +1 -1
- package/dist/react-native/connectionConfig/connectionConfig.d.ts +1 -1
- package/dist/react-native/connectionConfig/connectionConfig.js +29 -10
- package/dist/react-native/connectionConfig/connectionConfig.js.map +1 -1
- package/dist/react-native/errors.d.ts +3 -1
- package/dist/react-native/errors.js +3 -1
- package/dist/react-native/errors.js.map +1 -1
- package/dist/react-native/index.d.ts +0 -1
- package/dist/react-native/index.js +1 -2
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native/internals.js +1 -1
- package/dist/react-native/internals.js.map +1 -1
- package/dist/react-native/log.js +1 -1
- package/dist/react-native/log.js.map +1 -1
- package/dist/react-native/messageHeader.d.ts +1 -1
- package/dist/react-native/messageHeader.js +1 -1
- package/dist/react-native/messageHeader.js.map +1 -1
- package/dist/react-native/messageProperties.d.ts +1 -2
- package/dist/react-native/messageProperties.js +1 -1
- package/dist/react-native/messageProperties.js.map +1 -1
- package/dist/react-native/requestResponseLink.d.ts +2 -2
- package/dist/react-native/requestResponseLink.js +3 -3
- package/dist/react-native/requestResponseLink.js.map +1 -1
- package/dist/react-native/retry.d.ts +1 -1
- package/dist/react-native/retry.js +5 -12
- package/dist/react-native/retry.js.map +1 -1
- package/dist/react-native/util/checkNetworkConnection-react-native.mjs.map +1 -0
- package/dist/react-native/util/checkNetworkConnection.common.d.ts +6 -0
- package/dist/react-native/util/checkNetworkConnection.common.js +10 -0
- package/dist/react-native/util/checkNetworkConnection.common.js.map +1 -0
- package/dist/react-native/util/checkNetworkConnection.d.ts +2 -6
- package/dist/react-native/util/checkNetworkConnection.js +3 -27
- package/dist/react-native/util/constants.d.ts +0 -1
- package/dist/react-native/util/constants.js +1 -2
- package/dist/react-native/util/constants.js.map +1 -1
- package/dist/react-native/util/hmacSha256-react-native.mjs.map +1 -0
- package/dist/react-native/util/hmacSha256.common.d.ts +2 -0
- package/dist/react-native/util/hmacSha256.common.js +11 -0
- package/dist/react-native/util/hmacSha256.common.js.map +1 -0
- package/dist/react-native/util/hmacSha256.d.ts +2 -2
- package/dist/react-native/util/hmacSha256.js +3 -7
- package/dist/react-native/util/lock.d.ts +1 -1
- package/dist/react-native/util/lock.js +1 -1
- package/dist/react-native/util/lock.js.map +1 -1
- package/dist/react-native/util/runtimeInfo-react-native.mjs.map +1 -1
- package/dist/react-native/util/runtimeInfo.js +2 -2
- package/dist/react-native/util/typeGuards.d.ts +1 -1
- package/dist/react-native/util/typeGuards.js +1 -1
- package/dist/react-native/util/typeGuards.js.map +1 -1
- package/dist/react-native/util/utils.d.ts +3 -3
- package/dist/react-native/util/utils.js +1 -1
- package/dist/react-native/util/utils.js.map +1 -1
- package/package.json +29 -33
- package/dist/browser/ConnectionContextBase.d.ts.map +0 -1
- package/dist/browser/amqpAnnotatedMessage.d.ts.map +0 -1
- package/dist/browser/auth/token.d.ts.map +0 -1
- package/dist/browser/auth/tokenProvider.d.ts.map +0 -1
- package/dist/browser/cbs.d.ts.map +0 -1
- package/dist/browser/connectionConfig/connectionConfig.d.ts.map +0 -1
- package/dist/browser/errors.d.ts.map +0 -1
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/internals.d.ts.map +0 -1
- package/dist/browser/log.d.ts.map +0 -1
- package/dist/browser/messageHeader.d.ts.map +0 -1
- package/dist/browser/messageProperties.d.ts.map +0 -1
- package/dist/browser/requestResponseLink.d.ts.map +0 -1
- package/dist/browser/retry.d.ts.map +0 -1
- package/dist/browser/util/checkNetworkConnection-browser.d.mts.map +0 -1
- package/dist/browser/util/constants.d.ts.map +0 -1
- package/dist/browser/util/hmacSha256-browser.d.mts.map +0 -1
- package/dist/browser/util/lock.d.ts.map +0 -1
- package/dist/browser/util/runtimeInfo-browser.d.mts.map +0 -1
- package/dist/browser/util/typeGuards.d.ts.map +0 -1
- package/dist/browser/util/utils.d.ts.map +0 -1
- package/dist/commonjs/ConnectionContextBase.d.ts.map +0 -1
- package/dist/commonjs/amqpAnnotatedMessage.d.ts.map +0 -1
- package/dist/commonjs/auth/token.d.ts.map +0 -1
- package/dist/commonjs/auth/tokenProvider.d.ts.map +0 -1
- package/dist/commonjs/cbs.d.ts.map +0 -1
- package/dist/commonjs/connectionConfig/connectionConfig.d.ts.map +0 -1
- package/dist/commonjs/errors.d.ts.map +0 -1
- package/dist/commonjs/index.d.ts.map +0 -1
- package/dist/commonjs/internals.d.ts.map +0 -1
- package/dist/commonjs/log.d.ts.map +0 -1
- package/dist/commonjs/messageHeader.d.ts.map +0 -1
- package/dist/commonjs/messageProperties.d.ts.map +0 -1
- package/dist/commonjs/requestResponseLink.d.ts.map +0 -1
- package/dist/commonjs/retry.d.ts.map +0 -1
- package/dist/commonjs/util/checkNetworkConnection.d.ts.map +0 -1
- package/dist/commonjs/util/constants.d.ts.map +0 -1
- package/dist/commonjs/util/hmacSha256.d.ts.map +0 -1
- package/dist/commonjs/util/lock.d.ts.map +0 -1
- package/dist/commonjs/util/runtimeInfo.d.ts.map +0 -1
- package/dist/commonjs/util/typeGuards.d.ts.map +0 -1
- package/dist/commonjs/util/utils.d.ts.map +0 -1
- package/dist/core-amqp.d.ts +0 -1521
- package/dist/esm/ConnectionContextBase.d.ts.map +0 -1
- package/dist/esm/amqpAnnotatedMessage.d.ts.map +0 -1
- package/dist/esm/auth/token.d.ts.map +0 -1
- package/dist/esm/auth/tokenProvider.d.ts.map +0 -1
- package/dist/esm/cbs.d.ts.map +0 -1
- package/dist/esm/connectionConfig/connectionConfig.d.ts.map +0 -1
- package/dist/esm/errors.d.ts.map +0 -1
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/internals.d.ts.map +0 -1
- package/dist/esm/log.d.ts.map +0 -1
- package/dist/esm/messageHeader.d.ts.map +0 -1
- package/dist/esm/messageProperties.d.ts.map +0 -1
- package/dist/esm/requestResponseLink.d.ts.map +0 -1
- package/dist/esm/retry.d.ts.map +0 -1
- package/dist/esm/util/checkNetworkConnection.d.ts.map +0 -1
- package/dist/esm/util/constants.d.ts.map +0 -1
- package/dist/esm/util/hmacSha256.d.ts.map +0 -1
- package/dist/esm/util/lock.d.ts.map +0 -1
- package/dist/esm/util/runtimeInfo.d.ts.map +0 -1
- package/dist/esm/util/typeGuards.d.ts.map +0 -1
- package/dist/esm/util/utils.d.ts.map +0 -1
- package/dist/react-native/ConnectionContextBase.d.ts.map +0 -1
- package/dist/react-native/amqpAnnotatedMessage.d.ts.map +0 -1
- package/dist/react-native/auth/token.d.ts.map +0 -1
- package/dist/react-native/auth/tokenProvider.d.ts.map +0 -1
- package/dist/react-native/cbs.d.ts.map +0 -1
- package/dist/react-native/connectionConfig/connectionConfig.d.ts.map +0 -1
- package/dist/react-native/errors.d.ts.map +0 -1
- package/dist/react-native/index.d.ts.map +0 -1
- package/dist/react-native/internals.d.ts.map +0 -1
- package/dist/react-native/log.d.ts.map +0 -1
- package/dist/react-native/messageHeader.d.ts.map +0 -1
- package/dist/react-native/messageProperties.d.ts.map +0 -1
- package/dist/react-native/requestResponseLink.d.ts.map +0 -1
- package/dist/react-native/retry.d.ts.map +0 -1
- package/dist/react-native/util/checkNetworkConnection.d.ts.map +0 -1
- package/dist/react-native/util/checkNetworkConnection.js.map +0 -1
- package/dist/react-native/util/constants.d.ts.map +0 -1
- package/dist/react-native/util/hmacSha256.d.ts.map +0 -1
- package/dist/react-native/util/hmacSha256.js.map +0 -1
- package/dist/react-native/util/lock.d.ts.map +0 -1
- package/dist/react-native/util/runtimeInfo-react-native.d.mts.map +0 -1
- package/dist/react-native/util/typeGuards.d.ts.map +0 -1
- package/dist/react-native/util/utils.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageProperties.js","sourceRoot":"","sources":["../../src/messageProperties.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT
|
|
1
|
+
{"version":3,"file":"messageProperties.js","sourceRoot":"","sources":["../../src/messageProperties.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/* eslint-disable eqeqeq */\n\nimport type { MessageProperties as RheaMessageProperties } from \"rhea-promise\";\nimport { logger } from \"./log.js\";\n\n/**\n * Describes the defined set of standard properties of the message.\n */\nexport interface AmqpMessageProperties {\n /**\n * The application message identifier that uniquely identifies a message.\n * The user is responsible for making sure that this is unique in the given context. Guids usually make a good fit.\n */\n messageId?: string | number | Buffer;\n /**\n * The address of the node to send replies to.\n */\n replyTo?: string;\n /**\n * The address of the node the message is destined for.\n */\n to?: string;\n /**\n * The id that can be used to mark or identify messages between clients.\n */\n correlationId?: string | number | Buffer;\n /**\n * MIME type for the message.\n */\n contentType?: string;\n /**\n * The content-encoding property is used as a modifier to the content-type.\n * When present, its value indicates what additional content encodings have been applied to the application-data.\n */\n contentEncoding?: string;\n /**\n * The time when this message is considered expired.\n */\n absoluteExpiryTime?: number;\n /**\n * The time this message was created.\n */\n creationTime?: number;\n /**\n * The group this message belongs to.\n */\n groupId?: string;\n /**\n * The sequence number of this message with its group.\n */\n groupSequence?: number;\n /**\n * The group the reply message belongs to.\n */\n replyToGroupId?: string;\n /**\n * A common field for summary information about the message\n * content and purpose.\n */\n subject?: string;\n // /**\n // * The identity of the user responsible for producing the message.\n // */\n // userId?: string;\n}\n\n/**\n * Describes the operations that can be performed on the amqp message properties.\n */\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- renaming constant would be a breaking change.\nexport const AmqpMessageProperties = {\n /**\n * Converts MessageProperties to RheaMessageProperties.\n * @param props - Message properties.\n * @returns RheaMessageProperties.\n */\n toRheaMessageProperties(props: AmqpMessageProperties): RheaMessageProperties {\n const amqpProperties: RheaMessageProperties = {};\n if (props.absoluteExpiryTime != undefined) {\n amqpProperties.absolute_expiry_time = new Date(props.absoluteExpiryTime);\n }\n if (props.contentEncoding != undefined) {\n amqpProperties.content_encoding = props.contentEncoding;\n }\n if (props.contentType != undefined) {\n amqpProperties.content_type = props.contentType;\n }\n if (props.correlationId != undefined) {\n amqpProperties.correlation_id = props.correlationId;\n }\n if (props.creationTime != undefined) {\n amqpProperties.creation_time = new Date(props.creationTime);\n }\n if (props.groupId != undefined) {\n amqpProperties.group_id = props.groupId;\n }\n if (props.groupSequence != undefined) {\n amqpProperties.group_sequence = props.groupSequence;\n }\n if (props.messageId != undefined) {\n amqpProperties.message_id = props.messageId;\n }\n if (props.replyTo != undefined) {\n amqpProperties.reply_to = props.replyTo;\n }\n if (props.replyToGroupId != undefined) {\n amqpProperties.reply_to_group_id = props.replyToGroupId;\n }\n if (props.subject != undefined) {\n amqpProperties.subject = props.subject;\n }\n if (props.to != undefined) {\n amqpProperties.to = props.to;\n }\n // if (props.userId != undefined) {\n // amqpProperties.user_id = props.userId;\n // }\n\n logger.verbose(\"To RheaMessageProperties: %O\", amqpProperties);\n return amqpProperties;\n },\n\n /**\n * Converts RheaMessageProperties to MessageProperties.\n * @param props - Amqp message properties.\n * @returns MessageProperties.\n */\n fromRheaMessageProperties(props: RheaMessageProperties): AmqpMessageProperties {\n const msgProperties: AmqpMessageProperties = {};\n if (props.absolute_expiry_time != undefined) {\n msgProperties.absoluteExpiryTime = props.absolute_expiry_time.getTime();\n }\n if (props.content_encoding != undefined) {\n msgProperties.contentEncoding = props.content_encoding;\n }\n if (props.content_type != undefined) {\n msgProperties.contentType = props.content_type;\n }\n if (props.correlation_id != undefined) {\n msgProperties.correlationId = props.correlation_id;\n }\n if (props.creation_time != undefined) {\n msgProperties.creationTime = props.creation_time.getTime();\n }\n if (props.group_id != undefined) {\n msgProperties.groupId = props.group_id;\n }\n if (props.group_sequence != undefined) {\n msgProperties.groupSequence = props.group_sequence;\n }\n if (props.message_id != undefined) {\n msgProperties.messageId = props.message_id;\n }\n if (props.reply_to != undefined) {\n msgProperties.replyTo = props.reply_to;\n }\n if (props.reply_to_group_id != undefined) {\n msgProperties.replyToGroupId = props.reply_to_group_id;\n }\n if (props.subject != undefined) {\n msgProperties.subject = props.subject;\n }\n if (props.to != undefined) {\n msgProperties.to = props.to;\n }\n // if (props.user_id != undefined) {\n // msgProperties.userId = props.user_id;\n // }\n\n logger.verbose(\"From RheaMessageProperties: %O\", msgProperties);\n return msgProperties;\n },\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbortSignalLike } from "@azure/abort-controller";
|
|
2
|
-
import { Connection, EventContext, Receiver, ReceiverOptions, ReqResLink, Message as RheaMessage, Sender, SenderOptions, Session } from "rhea-promise";
|
|
1
|
+
import type { AbortSignalLike } from "@azure/abort-controller";
|
|
2
|
+
import type { Connection, EventContext, Receiver, ReceiverOptions, ReqResLink, Message as RheaMessage, Sender, SenderOptions, Session } from "rhea-promise";
|
|
3
3
|
/**
|
|
4
4
|
* Describes the options that can be specified while sending a request.
|
|
5
5
|
*/
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
3
|
import { AbortError } from "@azure/abort-controller";
|
|
4
4
|
import { ConditionStatusMapper, translate } from "./errors.js";
|
|
5
|
-
import { ReceiverEvents, SenderEvents, generate_uuid
|
|
5
|
+
import { ReceiverEvents, SenderEvents, generate_uuid } from "rhea-promise";
|
|
6
6
|
import { Constants, StandardAbortMessage } from "./util/constants.js";
|
|
7
7
|
import { logErrorStackTrace, logger } from "./log.js";
|
|
8
8
|
import { isDefined } from "@azure/core-util";
|
|
@@ -120,7 +120,7 @@ export class RequestResponseLink {
|
|
|
120
120
|
}
|
|
121
121
|
},
|
|
122
122
|
});
|
|
123
|
-
logger.verbose("[%s] %s request sent: %O", this.connection.id, request.to || "$management"
|
|
123
|
+
logger.verbose("[%s] %s request sent: %O", this.connection.id, request.to || "$management");
|
|
124
124
|
this.sender.send(request);
|
|
125
125
|
});
|
|
126
126
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestResponseLink.js","sourceRoot":"","sources":["../../src/requestResponseLink.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortError, AbortSignalLike } from \"@azure/abort-controller\";\nimport { ConditionStatusMapper, translate } from \"./errors.js\";\nimport {\n Connection,\n EventContext,\n Receiver,\n ReceiverEvents,\n ReceiverOptions,\n ReqResLink,\n Message as RheaMessage,\n Sender,\n SenderEvents,\n SenderOptions,\n Session,\n generate_uuid,\n} from \"rhea-promise\";\nimport { Constants, StandardAbortMessage } from \"./util/constants.js\";\nimport { logErrorStackTrace, logger } from \"./log.js\";\nimport { isDefined } from \"@azure/core-util\";\n\n/**\n * Describes the options that can be specified while sending a request.\n */\nexport interface SendRequestOptions {\n /**\n * Cancels the operation.\n */\n abortSignal?: AbortSignalLike;\n /**\n * Max time to wait for the operation to complete.\n * Default: `60000 milliseconds`.\n */\n timeoutInMs?: number;\n /**\n * Name of the request being performed.\n */\n requestName?: string;\n}\n\n/**\n * @internal\n */\nexport interface DeferredPromiseWithCallback {\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n /**\n * To be called before resolving or rejecting the deferred promise\n */\n cleanupBeforeResolveOrReject: () => void;\n}\n\n/**\n * Describes an amqp request(sender)-response(receiver) link that is created over an amqp session.\n */\nexport class RequestResponseLink implements ReqResLink {\n /**\n * @param session - The amqp session.\n * @param sender - The amqp sender link.\n * @param receiver - The amqp receiver link.\n */\n constructor(\n public session: Session,\n public sender: Sender,\n public receiver: Receiver,\n ) {\n this.session = session;\n this.sender = sender;\n this.receiver = receiver;\n this.receiver.on(ReceiverEvents.message, (context) => {\n onMessageReceived(context, this.connection.id, this._responsesMap);\n });\n this.sender.on(SenderEvents.senderError, (context) => {\n onSenderError(context, this.connection.id, this._responsesMap);\n });\n }\n\n /**\n * Maintains a map of responses that\n * are being actively returned. It acts as a store for correlating the responses received for\n * the send requests.\n */\n private _responsesMap: Map<string, DeferredPromiseWithCallback> = new Map<\n string,\n DeferredPromiseWithCallback\n >();\n\n /**\n * Provides the underlying amqp connection object.\n * @returns Connection.\n */\n get connection(): Connection {\n return this.session.connection;\n }\n\n /**\n * Indicates whether the session and the sender and receiver links are all open or closed.\n * @returns boolean - `true` - `open`, `false` - `closed`.\n */\n isOpen(): boolean {\n return this.session.isOpen() && this.sender.isOpen() && this.receiver.isOpen();\n }\n\n /**\n * Sends the given request message and returns the received response. If the operation is not\n * completed in the provided timeout in milliseconds `default: 60000`, then `OperationTimeoutError` is thrown.\n *\n * @param request - The AMQP (request) message.\n * @param options - Options that can be provided while sending a request.\n * @returns Promise<Message> The AMQP (response) message.\n */\n sendRequest(request: RheaMessage, options: SendRequestOptions = {}): Promise<RheaMessage> {\n const timeoutInMs = options.timeoutInMs || Constants.defaultOperationTimeoutInMs;\n\n const aborter: AbortSignalLike | undefined = options.abortSignal;\n\n // If message_id is not already set on the request, set it to a unique value\n // This helps in determining the right response for current request among multiple incoming messages\n if (!request.message_id) {\n request.message_id = generate_uuid();\n }\n\n return new Promise<RheaMessage>((resolve: any, reject: any) => {\n let timer: ReturnType<typeof setTimeout> | undefined = undefined;\n\n const rejectOnAbort = (): void => {\n this._responsesMap.delete(request.message_id as string);\n const address = this.receiver.address || \"address\";\n const requestName = options.requestName;\n const desc: string =\n `[${this.connection.id}] The request \"${requestName}\" ` +\n `to \"${address}\" has been cancelled by the user.`;\n // Cancellation is a user-intended action, so log to info instead of warning.\n logger.info(desc);\n const error = new AbortError(StandardAbortMessage);\n\n reject(error);\n };\n\n const onAbort = (): void => {\n // safe to clear the timeout if it hasn't already occurred.\n if (isDefined(timer)) {\n clearTimeout(timer);\n }\n aborter!.removeEventListener(\"abort\", onAbort);\n\n rejectOnAbort();\n };\n\n if (aborter) {\n // the aborter may have been triggered between request attempts\n // so check if it was triggered and reject if needed.\n if (aborter.aborted) {\n return rejectOnAbort();\n }\n aborter.addEventListener(\"abort\", onAbort);\n }\n\n timer = setTimeout(() => {\n this._responsesMap.delete(request.message_id as string);\n if (aborter) {\n aborter.removeEventListener(\"abort\", onAbort);\n }\n const address = this.receiver?.address || \"address\";\n const desc: string =\n `The request with message_id \"${request.message_id}\" to \"${address}\" ` +\n `endpoint timed out. Please try again later.`;\n const e: Error = {\n name: \"OperationTimeoutError\",\n message: desc,\n };\n return reject(translate(e));\n }, timeoutInMs);\n\n this._responsesMap.set(request.message_id as string, {\n resolve: resolve,\n reject: reject,\n cleanupBeforeResolveOrReject: () => {\n if (aborter) aborter.removeEventListener(\"abort\", onAbort);\n if (isDefined(timer)) {\n clearTimeout(timer);\n }\n },\n });\n\n logger.verbose(\n \"[%s] %s request sent: %O\",\n this.connection.id,\n request.to || \"$management\",\n request,\n );\n this.sender.send(request);\n });\n }\n\n /**\n * Closes the sender, receiver link and the underlying session.\n * @returns Promise<void>\n */\n async close(): Promise<void> {\n await this.sender.close({ closeSession: false });\n await this.receiver.close({ closeSession: false });\n await this.session.close();\n }\n\n /**\n * Removes the sender, receiver link and it's underlying session.\n * @returns void\n */\n remove(): void {\n this.sender.remove();\n this.receiver.remove();\n this.session.remove();\n }\n\n /**\n * Creates an amqp request/response link.\n *\n * @param connection - The amqp connection.\n * @param senderOptions - Options that must be provided to create the sender link.\n * @param receiverOptions - Options that must be provided to create the receiver link.\n * @param createOptions - Optional parameters that can be used to affect this method's behavior.\n * For example, `abortSignal` can be passed to allow cancelling an in-progress `create` invocation.\n * @returns Promise<RequestResponseLink>\n */\n static async create(\n connection: Connection,\n senderOptions: SenderOptions,\n receiverOptions: ReceiverOptions,\n createOptions: { abortSignal?: AbortSignalLike } = {},\n ): Promise<RequestResponseLink> {\n const { abortSignal } = createOptions;\n const session = await connection.createSession({ abortSignal });\n const sender = await session.createSender({ ...senderOptions, abortSignal });\n const receiver = await session.createReceiver({ ...receiverOptions, abortSignal });\n logger.verbose(\n \"[%s] Successfully created the sender and receiver links on the same session.\",\n connection.id,\n );\n return new RequestResponseLink(session, sender, receiver);\n }\n}\n/**\n * @internal\n *\n * Type used in getCodeDescriptionAndError to get the normalized info from the responses emitted by EventHubs and ServiceBus.\n */\ntype NormalizedInfo = {\n statusCode: number;\n statusDescription: string;\n errorCondition: string;\n};\n\n/**\n * @internal\n *\n * Handle different variations of property names in responses emitted by EventHubs and ServiceBus.\n */\nexport const getCodeDescriptionAndError = (\n props: { [key: string]: string | number | undefined } = {},\n): NormalizedInfo => {\n return {\n statusCode: (props[Constants.statusCode] || props.statusCode) as number,\n statusDescription: (props[Constants.statusDescription] || props.statusDescription) as string,\n errorCondition: (props[Constants.errorCondition] || props.errorCondition) as string,\n };\n};\n\n/**\n * This is used as the onMessage handler for the \"message\" event on the receiver.\n *\n * (This is inspired from the message settlement sequence in service-bus SDK which\n * relies on a single listener for settled event for all the messages.)\n * The sequence is as follows:\n * 1. User calls `await RequestResponseLink.sendRequest()`\n * 2. This creates a `Promise` that gets stored in the _responsesMap\n * 3. When the service acknowledges the response, this method gets called for that request.\n * 4. We resolve() the promise from the _responsesMap with the message.\n * 5. User's code after the sendRequest continues.\n *\n * @internal\n */\nexport function onMessageReceived(\n context: Pick<EventContext, \"message\">,\n connectionId: string,\n responsesMap: Map<string, DeferredPromiseWithCallback>,\n): void {\n const message = context.message;\n if (!message) {\n logger.verbose(\n `[${connectionId}] \"message\" property on the EventContext is \"undefined\" which is unexpected, ` +\n `returning from the \"onMessageReceived\" handler without resolving or rejecting the promise ` +\n `upon encountering the message event.`,\n );\n return;\n }\n\n const responseCorrelationId = message.correlation_id;\n if (!responsesMap.has(responseCorrelationId as string)) {\n logger.verbose(\n `[${connectionId}] correlationId \"${responseCorrelationId}\" property on the response does not match with ` +\n `any of the \"request-id\"s in the map, returning from the \"onMessageReceived\" handler without resolving ` +\n `or rejecting the promise upon encountering the message event.`,\n );\n return;\n }\n\n const promise = responsesMap.get(responseCorrelationId as string) as DeferredPromiseWithCallback;\n promise.cleanupBeforeResolveOrReject();\n\n const deleteResult = responsesMap.delete(responseCorrelationId as string);\n logger.verbose(\n `[${connectionId}] Successfully deleted the response with id ${responseCorrelationId} from the map. ` +\n `Delete result - ${deleteResult}`,\n );\n\n const info = getCodeDescriptionAndError(message.application_properties);\n let error;\n if (!info.statusCode) {\n error = new Error(\n `[${connectionId}] No statusCode in the \"application_properties\" in the returned response with correlation-id: ${responseCorrelationId}`,\n );\n }\n if (info.statusCode > 199 && info.statusCode < 300) {\n logger.verbose(\n `[${connectionId}] Resolving the response with correlation-id: ${responseCorrelationId}`,\n );\n return promise.resolve(message);\n }\n if (!error) {\n const condition =\n info.errorCondition || ConditionStatusMapper[info.statusCode] || \"amqp:internal-error\";\n error = translate({\n condition: condition,\n description: info.statusDescription,\n });\n logger.warning(`${error?.name}: ${error?.message}`);\n }\n logErrorStackTrace(error);\n return promise.reject(error);\n}\n\nfunction onSenderError(\n context: Pick<EventContext, \"sender\">,\n connectionId: string,\n responsesMap: Map<string, DeferredPromiseWithCallback>,\n): void {\n if (context.sender) {\n for (const [key, promise] of responsesMap.entries()) {\n logger.verbose(\n `[${connectionId}] Sender closed due to error when sending request with message_id \"${key}\"`,\n );\n promise.cleanupBeforeResolveOrReject();\n promise.reject(context.sender.error);\n }\n responsesMap.clear();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"requestResponseLink.js","sourceRoot":"","sources":["../../src/requestResponseLink.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport { ConditionStatusMapper, translate } from \"./errors.js\";\nimport type {\n Connection,\n EventContext,\n Receiver,\n ReceiverOptions,\n ReqResLink,\n Message as RheaMessage,\n Sender,\n SenderOptions,\n Session,\n} from \"rhea-promise\";\nimport { ReceiverEvents, SenderEvents, generate_uuid } from \"rhea-promise\";\nimport { Constants, StandardAbortMessage } from \"./util/constants.js\";\nimport { logErrorStackTrace, logger } from \"./log.js\";\nimport { isDefined } from \"@azure/core-util\";\n\n/**\n * Describes the options that can be specified while sending a request.\n */\nexport interface SendRequestOptions {\n /**\n * Cancels the operation.\n */\n abortSignal?: AbortSignalLike;\n /**\n * Max time to wait for the operation to complete.\n * Default: `60000 milliseconds`.\n */\n timeoutInMs?: number;\n /**\n * Name of the request being performed.\n */\n requestName?: string;\n}\n\n/**\n * @internal\n */\nexport interface DeferredPromiseWithCallback {\n resolve: (value?: any) => void;\n reject: (reason?: any) => void;\n /**\n * To be called before resolving or rejecting the deferred promise\n */\n cleanupBeforeResolveOrReject: () => void;\n}\n\n/**\n * Describes an amqp request(sender)-response(receiver) link that is created over an amqp session.\n */\nexport class RequestResponseLink implements ReqResLink {\n /**\n * @param session - The amqp session.\n * @param sender - The amqp sender link.\n * @param receiver - The amqp receiver link.\n */\n constructor(\n public session: Session,\n public sender: Sender,\n public receiver: Receiver,\n ) {\n this.session = session;\n this.sender = sender;\n this.receiver = receiver;\n this.receiver.on(ReceiverEvents.message, (context) => {\n onMessageReceived(context, this.connection.id, this._responsesMap);\n });\n this.sender.on(SenderEvents.senderError, (context) => {\n onSenderError(context, this.connection.id, this._responsesMap);\n });\n }\n\n /**\n * Maintains a map of responses that\n * are being actively returned. It acts as a store for correlating the responses received for\n * the send requests.\n */\n private _responsesMap: Map<string, DeferredPromiseWithCallback> = new Map<\n string,\n DeferredPromiseWithCallback\n >();\n\n /**\n * Provides the underlying amqp connection object.\n * @returns Connection.\n */\n get connection(): Connection {\n return this.session.connection;\n }\n\n /**\n * Indicates whether the session and the sender and receiver links are all open or closed.\n * @returns boolean - `true` - `open`, `false` - `closed`.\n */\n isOpen(): boolean {\n return this.session.isOpen() && this.sender.isOpen() && this.receiver.isOpen();\n }\n\n /**\n * Sends the given request message and returns the received response. If the operation is not\n * completed in the provided timeout in milliseconds `default: 60000`, then `OperationTimeoutError` is thrown.\n *\n * @param request - The AMQP (request) message.\n * @param options - Options that can be provided while sending a request.\n * @returns Promise<Message> The AMQP (response) message.\n */\n sendRequest(request: RheaMessage, options: SendRequestOptions = {}): Promise<RheaMessage> {\n const timeoutInMs = options.timeoutInMs || Constants.defaultOperationTimeoutInMs;\n\n const aborter: AbortSignalLike | undefined = options.abortSignal;\n\n // If message_id is not already set on the request, set it to a unique value\n // This helps in determining the right response for current request among multiple incoming messages\n if (!request.message_id) {\n request.message_id = generate_uuid();\n }\n\n return new Promise<RheaMessage>((resolve: any, reject: any) => {\n let timer: ReturnType<typeof setTimeout> | undefined = undefined;\n\n const rejectOnAbort = (): void => {\n this._responsesMap.delete(request.message_id as string);\n const address = this.receiver.address || \"address\";\n const requestName = options.requestName;\n const desc: string =\n `[${this.connection.id}] The request \"${requestName}\" ` +\n `to \"${address}\" has been cancelled by the user.`;\n // Cancellation is a user-intended action, so log to info instead of warning.\n logger.info(desc);\n const error = new AbortError(StandardAbortMessage);\n\n reject(error);\n };\n\n const onAbort = (): void => {\n // safe to clear the timeout if it hasn't already occurred.\n if (isDefined(timer)) {\n clearTimeout(timer);\n }\n aborter!.removeEventListener(\"abort\", onAbort);\n\n rejectOnAbort();\n };\n\n if (aborter) {\n // the aborter may have been triggered between request attempts\n // so check if it was triggered and reject if needed.\n if (aborter.aborted) {\n return rejectOnAbort();\n }\n aborter.addEventListener(\"abort\", onAbort);\n }\n\n timer = setTimeout(() => {\n this._responsesMap.delete(request.message_id as string);\n if (aborter) {\n aborter.removeEventListener(\"abort\", onAbort);\n }\n const address = this.receiver?.address || \"address\";\n const desc: string =\n `The request with message_id \"${request.message_id}\" to \"${address}\" ` +\n `endpoint timed out. Please try again later.`;\n const e: Error = {\n name: \"OperationTimeoutError\",\n message: desc,\n };\n return reject(translate(e));\n }, timeoutInMs);\n\n this._responsesMap.set(request.message_id as string, {\n resolve: resolve,\n reject: reject,\n cleanupBeforeResolveOrReject: () => {\n if (aborter) aborter.removeEventListener(\"abort\", onAbort);\n if (isDefined(timer)) {\n clearTimeout(timer);\n }\n },\n });\n\n logger.verbose(\"[%s] %s request sent: %O\", this.connection.id, request.to || \"$management\");\n this.sender.send(request);\n });\n }\n\n /**\n * Closes the sender, receiver link and the underlying session.\n * @returns Promise<void>\n */\n async close(): Promise<void> {\n await this.sender.close({ closeSession: false });\n await this.receiver.close({ closeSession: false });\n await this.session.close();\n }\n\n /**\n * Removes the sender, receiver link and it's underlying session.\n * @returns void\n */\n remove(): void {\n this.sender.remove();\n this.receiver.remove();\n this.session.remove();\n }\n\n /**\n * Creates an amqp request/response link.\n *\n * @param connection - The amqp connection.\n * @param senderOptions - Options that must be provided to create the sender link.\n * @param receiverOptions - Options that must be provided to create the receiver link.\n * @param createOptions - Optional parameters that can be used to affect this method's behavior.\n * For example, `abortSignal` can be passed to allow cancelling an in-progress `create` invocation.\n * @returns Promise<RequestResponseLink>\n */\n static async create(\n connection: Connection,\n senderOptions: SenderOptions,\n receiverOptions: ReceiverOptions,\n createOptions: { abortSignal?: AbortSignalLike } = {},\n ): Promise<RequestResponseLink> {\n const { abortSignal } = createOptions;\n const session = await connection.createSession({ abortSignal });\n const sender = await session.createSender({ ...senderOptions, abortSignal });\n const receiver = await session.createReceiver({ ...receiverOptions, abortSignal });\n logger.verbose(\n \"[%s] Successfully created the sender and receiver links on the same session.\",\n connection.id,\n );\n return new RequestResponseLink(session, sender, receiver);\n }\n}\n/**\n * @internal\n *\n * Type used in getCodeDescriptionAndError to get the normalized info from the responses emitted by EventHubs and ServiceBus.\n */\ntype NormalizedInfo = {\n statusCode: number;\n statusDescription: string;\n errorCondition: string;\n};\n\n/**\n * @internal\n *\n * Handle different variations of property names in responses emitted by EventHubs and ServiceBus.\n */\nexport const getCodeDescriptionAndError = (\n props: { [key: string]: string | number | undefined } = {},\n): NormalizedInfo => {\n return {\n statusCode: (props[Constants.statusCode] || props.statusCode) as number,\n statusDescription: (props[Constants.statusDescription] || props.statusDescription) as string,\n errorCondition: (props[Constants.errorCondition] || props.errorCondition) as string,\n };\n};\n\n/**\n * This is used as the onMessage handler for the \"message\" event on the receiver.\n *\n * (This is inspired from the message settlement sequence in service-bus SDK which\n * relies on a single listener for settled event for all the messages.)\n * The sequence is as follows:\n * 1. User calls `await RequestResponseLink.sendRequest()`\n * 2. This creates a `Promise` that gets stored in the _responsesMap\n * 3. When the service acknowledges the response, this method gets called for that request.\n * 4. We resolve() the promise from the _responsesMap with the message.\n * 5. User's code after the sendRequest continues.\n *\n * @internal\n */\nexport function onMessageReceived(\n context: Pick<EventContext, \"message\">,\n connectionId: string,\n responsesMap: Map<string, DeferredPromiseWithCallback>,\n): void {\n const message = context.message;\n if (!message) {\n logger.verbose(\n `[${connectionId}] \"message\" property on the EventContext is \"undefined\" which is unexpected, ` +\n `returning from the \"onMessageReceived\" handler without resolving or rejecting the promise ` +\n `upon encountering the message event.`,\n );\n return;\n }\n\n const responseCorrelationId = message.correlation_id;\n if (!responsesMap.has(responseCorrelationId as string)) {\n logger.verbose(\n `[${connectionId}] correlationId \"${responseCorrelationId}\" property on the response does not match with ` +\n `any of the \"request-id\"s in the map, returning from the \"onMessageReceived\" handler without resolving ` +\n `or rejecting the promise upon encountering the message event.`,\n );\n return;\n }\n\n const promise = responsesMap.get(responseCorrelationId as string) as DeferredPromiseWithCallback;\n promise.cleanupBeforeResolveOrReject();\n\n const deleteResult = responsesMap.delete(responseCorrelationId as string);\n logger.verbose(\n `[${connectionId}] Successfully deleted the response with id ${responseCorrelationId} from the map. ` +\n `Delete result - ${deleteResult}`,\n );\n\n const info = getCodeDescriptionAndError(message.application_properties);\n let error;\n if (!info.statusCode) {\n error = new Error(\n `[${connectionId}] No statusCode in the \"application_properties\" in the returned response with correlation-id: ${responseCorrelationId}`,\n );\n }\n if (info.statusCode > 199 && info.statusCode < 300) {\n logger.verbose(\n `[${connectionId}] Resolving the response with correlation-id: ${responseCorrelationId}`,\n );\n return promise.resolve(message);\n }\n if (!error) {\n const condition =\n info.errorCondition || ConditionStatusMapper[info.statusCode] || \"amqp:internal-error\";\n error = translate({\n condition: condition,\n description: info.statusDescription,\n });\n logger.warning(`${error?.name}: ${error?.message}`);\n }\n logErrorStackTrace(error);\n return promise.reject(error);\n}\n\nfunction onSenderError(\n context: Pick<EventContext, \"sender\">,\n connectionId: string,\n responsesMap: Map<string, DeferredPromiseWithCallback>,\n): void {\n if (context.sender) {\n for (const [key, promise] of responsesMap.entries()) {\n logger.verbose(\n `[${connectionId}] Sender closed due to error when sending request with message_id \"${key}\"`,\n );\n promise.cleanupBeforeResolveOrReject();\n promise.reject(context.sender.error);\n }\n responsesMap.clear();\n }\n}\n"]}
|
package/dist/esm/retry.d.ts
CHANGED
package/dist/esm/retry.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
3
|
/* eslint-disable eqeqeq */
|
|
4
4
|
import { translate } from "./errors.js";
|
|
5
5
|
import { Constants } from "./util/constants.js";
|
|
@@ -154,17 +154,10 @@ export async function retry(config) {
|
|
|
154
154
|
return result;
|
|
155
155
|
}
|
|
156
156
|
else {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
if (!errors.length) {
|
|
162
|
-
throw new RangeError("Error array is empty");
|
|
157
|
+
if (errors.length === 1) {
|
|
158
|
+
throw errors[0];
|
|
159
|
+
}
|
|
160
|
+
throw new AggregateError(errors);
|
|
163
161
|
}
|
|
164
|
-
let i = 0;
|
|
165
|
-
const str = errors.map((error) => `Error ${i++}: ${error}`).join("\n\n");
|
|
166
|
-
const lastError = errors[errors.length - 1];
|
|
167
|
-
lastError.message = str;
|
|
168
|
-
return lastError;
|
|
169
162
|
}
|
|
170
163
|
//# sourceMappingURL=retry.js.map
|
package/dist/esm/retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/* eslint-disable eqeqeq */\n\nimport { MessagingError, translate } from \"./errors.js\";\nimport { AbortSignalLike } from \"@azure/abort-controller\";\nimport { Constants } from \"./util/constants.js\";\nimport { checkNetworkConnection } from \"./util/checkNetworkConnection.js\";\nimport { delay } from \"@azure/core-util\";\nimport { logger } from \"./log.js\";\n\n/**\n * Determines whether the object is a Delivery object.\n * @internal\n */\nfunction isDelivery(obj: any): boolean {\n let result: boolean = false;\n if (\n obj &&\n typeof obj.id === \"number\" &&\n typeof obj.settled === \"boolean\" &&\n typeof obj.remote_settled === \"boolean\" &&\n typeof obj.format === \"number\"\n ) {\n result = true;\n }\n return result;\n}\n\n/**\n * Describes the Retry Mode type\n */\nexport enum RetryMode {\n Exponential,\n Fixed,\n}\n\n/**\n * Describes the retry operation type.\n */\nexport enum RetryOperationType {\n cbsAuth = \"cbsAuth\",\n connection = \"connection\",\n management = \"management\",\n receiverLink = \"receiverLink\",\n senderLink = \"senderLink\",\n sendMessage = \"sendMessage\",\n receiveMessage = \"receiveMessage\",\n session = \"session\",\n messageSettlement = \"settlement\",\n}\n\n/**\n * Retry policy options that determine the mode, number of retries, retry interval etc.\n */\nexport interface RetryOptions {\n /**\n * Number of times the operation needs to be retried in case\n * of retryable error. Default: 3.\n */\n maxRetries?: number;\n /**\n * Amount of time to wait in milliseconds before making the\n * next attempt. Default: `30000 milliseconds`.\n * When `mode` option is set to `Exponential`,\n * this is used to compute the exponentially increasing delays between retries.\n */\n retryDelayInMs?: number;\n /**\n * Number of milliseconds to wait before declaring that current attempt has timed out which will trigger a retry\n * A minimum value of `60000` milliseconds will be used if a value not greater than this is provided.\n */\n timeoutInMs?: number;\n /**\n * Denotes which retry mode to apply. If undefined, defaults to `Fixed`\n */\n mode?: RetryMode;\n /**\n * Denotes the maximum delay between retries\n * that the retry attempts will be capped at. Applicable only when performing exponential retry.\n */\n maxRetryDelayInMs?: number;\n}\n\n/**\n * Describes the parameters that need to be configured for the retry operation.\n */\nexport interface RetryConfig<T> {\n /**\n * The operation that needs to be retried.\n */\n operation: () => Promise<T>;\n /**\n * The connection identifier. Used in logging information.\n * Extremely useful when multiple connections are logged in the same file.\n */\n connectionId: string;\n /**\n * The name/type of operation to be performed.\n * Extremely useful in providing better debug logs.\n */\n operationType: RetryOperationType;\n /**\n * The host \"<yournamespace>.servicebus.windows.net\".\n * Used to check network connectivity.\n */\n connectionHost?: string;\n /**\n * The retry related options associated with given operation execution.\n */\n retryOptions?: RetryOptions;\n /**\n * The `AbortSignal` associated with the operation being retried on.\n * If this signal is fired during the wait time between retries, then the `retry()` method will ensure that the wait is abandoned and the retry process gets cancelled. If this signal is fired when the operation is in progress, then the operation is expected to react to it.\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Validates the retry config.\n * @internal\n */\nfunction validateRetryConfig<T>(config: RetryConfig<T>): void {\n if (!config.operation) {\n throw new TypeError(\"Missing 'operation' in retry configuration\");\n }\n\n if (!config.connectionId) {\n throw new TypeError(\"Missing 'connectionId' in retry configuration\");\n }\n\n if (!config.operationType) {\n throw new TypeError(\"Missing 'operationType' in retry configuration\");\n }\n}\n\n/**\n * Calculates delay between retries, in milliseconds.\n * @internal\n */\nfunction calculateDelay(\n attemptCount: number,\n retryDelayInMs: number,\n maxRetryDelayInMs: number,\n mode: RetryMode,\n): number {\n if (mode === RetryMode.Exponential) {\n const boundedRandDelta =\n retryDelayInMs * 0.8 +\n Math.floor(Math.random() * (retryDelayInMs * 1.2 - retryDelayInMs * 0.8));\n\n const incrementDelta = boundedRandDelta * (Math.pow(2, attemptCount) - 1);\n return Math.min(incrementDelta, maxRetryDelayInMs);\n }\n\n return retryDelayInMs;\n}\n\n/**\n * Every operation is attempted at least once. Additional attempts are made if the previous attempt failed\n * with a retryable error. The number of additional attempts is governed by the `maxRetries` property provided\n * on the `RetryConfig` argument.\n *\n * If `mode` option is set to `Fixed`, then the retries are made on the\n * given operation for a specified number of times, with a fixed delay in between each retry each time.\n *\n * If `mode` option is set to `Exponential`, then the delay between retries is adjusted to increase\n * exponentially with each attempt using back-off factor of power 2.\n *\n * @param config - Parameters to configure retry operation\n *\n * @returns Promise<T>.\n */\nexport async function retry<T>(config: RetryConfig<T>): Promise<T> {\n validateRetryConfig(config);\n const updatedConfig = { ...config };\n if (!updatedConfig.retryOptions) {\n updatedConfig.retryOptions = {};\n }\n if (\n updatedConfig.retryOptions.maxRetries == undefined ||\n updatedConfig.retryOptions.maxRetries < 0\n ) {\n updatedConfig.retryOptions.maxRetries = Constants.defaultMaxRetries;\n }\n if (\n updatedConfig.retryOptions.retryDelayInMs == undefined ||\n updatedConfig.retryOptions.retryDelayInMs < 0\n ) {\n updatedConfig.retryOptions.retryDelayInMs = Constants.defaultDelayBetweenOperationRetriesInMs;\n }\n if (\n updatedConfig.retryOptions.maxRetryDelayInMs == undefined ||\n updatedConfig.retryOptions.maxRetryDelayInMs < 0\n ) {\n updatedConfig.retryOptions.maxRetryDelayInMs = Constants.defaultMaxDelayForExponentialRetryInMs;\n }\n if (updatedConfig.retryOptions.mode == undefined) {\n updatedConfig.retryOptions.mode = RetryMode.Fixed;\n }\n const errors: (MessagingError | Error)[] = [];\n let result: any;\n let success = false;\n const totalNumberOfAttempts = updatedConfig.retryOptions.maxRetries + 1;\n for (let i = 1; i <= totalNumberOfAttempts; i++) {\n logger.verbose(\n \"[%s] Attempt number for '%s': %d.\",\n updatedConfig.connectionId,\n updatedConfig.operationType,\n i,\n );\n try {\n result = await updatedConfig.operation();\n success = true;\n logger.verbose(\n \"[%s] Success for '%s', after attempt number: %d.\",\n updatedConfig.connectionId,\n updatedConfig.operationType,\n i,\n );\n if (result && !isDelivery(result)) {\n logger.verbose(\n \"[%s] Success result for '%s': %O\",\n updatedConfig.connectionId,\n updatedConfig.operationType,\n result,\n );\n }\n break;\n } catch (_err) {\n const err = translate(_err);\n\n if (\n !(err as any).retryable &&\n err.name === \"ServiceCommunicationError\" &&\n updatedConfig.connectionHost\n ) {\n const isConnected = await checkNetworkConnection(updatedConfig.connectionHost);\n if (!isConnected) {\n err.name = \"ConnectionLostError\";\n (err as any).retryable = true;\n }\n }\n logger.verbose(\n \"[%s] Error occurred for '%s' in attempt number %d: %O\",\n updatedConfig.connectionId,\n updatedConfig.operationType,\n i,\n err,\n );\n\n errors.push(err);\n if ((errors[errors?.length - 1] as MessagingError).retryable && totalNumberOfAttempts > i) {\n const targetDelayInMs = calculateDelay(\n i,\n updatedConfig.retryOptions.retryDelayInMs,\n updatedConfig.retryOptions.maxRetryDelayInMs,\n updatedConfig.retryOptions.mode,\n );\n logger.verbose(\n \"[%s] Sleeping for %d milliseconds for '%s'.\",\n updatedConfig.connectionId,\n targetDelayInMs,\n updatedConfig.operationType,\n );\n await delay(targetDelayInMs, {\n abortSignal: updatedConfig.abortSignal,\n abortErrorMsg: `The retry operation has been cancelled by the user.`,\n });\n\n continue;\n } else {\n break;\n }\n }\n }\n if (success) {\n return result;\n } else {\n throw compileErrors(errors);\n }\n}\n\nfunction compileErrors(errors: (MessagingError | Error)[]): MessagingError | Error {\n if (!errors.length) {\n throw new RangeError(\"Error array is empty\");\n }\n let i = 0;\n const str = errors.map((error) => `Error ${i++}: ${error}`).join(\"\\n\\n\");\n const lastError = errors[errors.length - 1];\n lastError.message = str;\n return lastError;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n/* eslint-disable eqeqeq */\n\nimport type { MessagingError } from \"./errors.js\";\nimport { translate } from \"./errors.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { Constants } from \"./util/constants.js\";\nimport { checkNetworkConnection } from \"./util/checkNetworkConnection.js\";\nimport { delay } from \"@azure/core-util\";\nimport { logger } from \"./log.js\";\n\n/**\n * Determines whether the object is a Delivery object.\n * @internal\n */\nfunction isDelivery(obj: any): boolean {\n let result: boolean = false;\n if (\n obj &&\n typeof obj.id === \"number\" &&\n typeof obj.settled === \"boolean\" &&\n typeof obj.remote_settled === \"boolean\" &&\n typeof obj.format === \"number\"\n ) {\n result = true;\n }\n return result;\n}\n\n/**\n * Describes the Retry Mode type\n */\nexport enum RetryMode {\n Exponential,\n Fixed,\n}\n\n/**\n * Describes the retry operation type.\n */\nexport enum RetryOperationType {\n cbsAuth = \"cbsAuth\",\n connection = \"connection\",\n management = \"management\",\n receiverLink = \"receiverLink\",\n senderLink = \"senderLink\",\n sendMessage = \"sendMessage\",\n receiveMessage = \"receiveMessage\",\n session = \"session\",\n messageSettlement = \"settlement\",\n}\n\n/**\n * Retry policy options that determine the mode, number of retries, retry interval etc.\n */\nexport interface RetryOptions {\n /**\n * Number of times the operation needs to be retried in case\n * of retryable error. Default: 3.\n */\n maxRetries?: number;\n /**\n * Amount of time to wait in milliseconds before making the\n * next attempt. Default: `30000 milliseconds`.\n * When `mode` option is set to `Exponential`,\n * this is used to compute the exponentially increasing delays between retries.\n */\n retryDelayInMs?: number;\n /**\n * Number of milliseconds to wait before declaring that current attempt has timed out which will trigger a retry\n * A minimum value of `60000` milliseconds will be used if a value not greater than this is provided.\n */\n timeoutInMs?: number;\n /**\n * Denotes which retry mode to apply. If undefined, defaults to `Fixed`\n */\n mode?: RetryMode;\n /**\n * Denotes the maximum delay between retries\n * that the retry attempts will be capped at. Applicable only when performing exponential retry.\n */\n maxRetryDelayInMs?: number;\n}\n\n/**\n * Describes the parameters that need to be configured for the retry operation.\n */\nexport interface RetryConfig<T> {\n /**\n * The operation that needs to be retried.\n */\n operation: () => Promise<T>;\n /**\n * The connection identifier. Used in logging information.\n * Extremely useful when multiple connections are logged in the same file.\n */\n connectionId: string;\n /**\n * The name/type of operation to be performed.\n * Extremely useful in providing better debug logs.\n */\n operationType: RetryOperationType;\n /**\n * The host \"<yournamespace>.servicebus.windows.net\".\n * Used to check network connectivity.\n */\n connectionHost?: string;\n /**\n * The retry related options associated with given operation execution.\n */\n retryOptions?: RetryOptions;\n /**\n * The `AbortSignal` associated with the operation being retried on.\n * If this signal is fired during the wait time between retries, then the `retry()` method will ensure that the wait is abandoned and the retry process gets cancelled. If this signal is fired when the operation is in progress, then the operation is expected to react to it.\n */\n abortSignal?: AbortSignalLike;\n}\n\n/**\n * Validates the retry config.\n * @internal\n */\nfunction validateRetryConfig<T>(config: RetryConfig<T>): void {\n if (!config.operation) {\n throw new TypeError(\"Missing 'operation' in retry configuration\");\n }\n\n if (!config.connectionId) {\n throw new TypeError(\"Missing 'connectionId' in retry configuration\");\n }\n\n if (!config.operationType) {\n throw new TypeError(\"Missing 'operationType' in retry configuration\");\n }\n}\n\n/**\n * Calculates delay between retries, in milliseconds.\n * @internal\n */\nfunction calculateDelay(\n attemptCount: number,\n retryDelayInMs: number,\n maxRetryDelayInMs: number,\n mode: RetryMode,\n): number {\n if (mode === RetryMode.Exponential) {\n const boundedRandDelta =\n retryDelayInMs * 0.8 +\n Math.floor(Math.random() * (retryDelayInMs * 1.2 - retryDelayInMs * 0.8));\n\n const incrementDelta = boundedRandDelta * (Math.pow(2, attemptCount) - 1);\n return Math.min(incrementDelta, maxRetryDelayInMs);\n }\n\n return retryDelayInMs;\n}\n\n/**\n * Every operation is attempted at least once. Additional attempts are made if the previous attempt failed\n * with a retryable error. The number of additional attempts is governed by the `maxRetries` property provided\n * on the `RetryConfig` argument.\n *\n * If `mode` option is set to `Fixed`, then the retries are made on the\n * given operation for a specified number of times, with a fixed delay in between each retry each time.\n *\n * If `mode` option is set to `Exponential`, then the delay between retries is adjusted to increase\n * exponentially with each attempt using back-off factor of power 2.\n *\n * @param config - Parameters to configure retry operation\n *\n * @returns Promise<T>.\n */\nexport async function retry<T>(config: RetryConfig<T>): Promise<T> {\n validateRetryConfig(config);\n const updatedConfig = { ...config };\n if (!updatedConfig.retryOptions) {\n updatedConfig.retryOptions = {};\n }\n if (\n updatedConfig.retryOptions.maxRetries == undefined ||\n updatedConfig.retryOptions.maxRetries < 0\n ) {\n updatedConfig.retryOptions.maxRetries = Constants.defaultMaxRetries;\n }\n if (\n updatedConfig.retryOptions.retryDelayInMs == undefined ||\n updatedConfig.retryOptions.retryDelayInMs < 0\n ) {\n updatedConfig.retryOptions.retryDelayInMs = Constants.defaultDelayBetweenOperationRetriesInMs;\n }\n if (\n updatedConfig.retryOptions.maxRetryDelayInMs == undefined ||\n updatedConfig.retryOptions.maxRetryDelayInMs < 0\n ) {\n updatedConfig.retryOptions.maxRetryDelayInMs = Constants.defaultMaxDelayForExponentialRetryInMs;\n }\n if (updatedConfig.retryOptions.mode == undefined) {\n updatedConfig.retryOptions.mode = RetryMode.Fixed;\n }\n const errors: (MessagingError | Error)[] = [];\n let result: any;\n let success = false;\n const totalNumberOfAttempts = updatedConfig.retryOptions.maxRetries + 1;\n for (let i = 1; i <= totalNumberOfAttempts; i++) {\n logger.verbose(\n \"[%s] Attempt number for '%s': %d.\",\n updatedConfig.connectionId,\n updatedConfig.operationType,\n i,\n );\n try {\n result = await updatedConfig.operation();\n success = true;\n logger.verbose(\n \"[%s] Success for '%s', after attempt number: %d.\",\n updatedConfig.connectionId,\n updatedConfig.operationType,\n i,\n );\n if (result && !isDelivery(result)) {\n logger.verbose(\n \"[%s] Success result for '%s': %O\",\n updatedConfig.connectionId,\n updatedConfig.operationType,\n result,\n );\n }\n break;\n } catch (_err) {\n const err = translate(_err);\n\n if (\n !(err as any).retryable &&\n err.name === \"ServiceCommunicationError\" &&\n updatedConfig.connectionHost\n ) {\n const isConnected = await checkNetworkConnection(updatedConfig.connectionHost);\n if (!isConnected) {\n err.name = \"ConnectionLostError\";\n (err as any).retryable = true;\n }\n }\n logger.verbose(\n \"[%s] Error occurred for '%s' in attempt number %d: %O\",\n updatedConfig.connectionId,\n updatedConfig.operationType,\n i,\n err,\n );\n\n errors.push(err);\n if ((errors[errors?.length - 1] as MessagingError).retryable && totalNumberOfAttempts > i) {\n const targetDelayInMs = calculateDelay(\n i,\n updatedConfig.retryOptions.retryDelayInMs,\n updatedConfig.retryOptions.maxRetryDelayInMs,\n updatedConfig.retryOptions.mode,\n );\n logger.verbose(\n \"[%s] Sleeping for %d milliseconds for '%s'.\",\n updatedConfig.connectionId,\n targetDelayInMs,\n updatedConfig.operationType,\n );\n await delay(targetDelayInMs, {\n abortSignal: updatedConfig.abortSignal,\n abortErrorMsg: `The retry operation has been cancelled by the user.`,\n });\n\n continue;\n } else {\n break;\n }\n }\n }\n if (success) {\n return result;\n } else {\n if (errors.length === 1) {\n throw errors[0];\n }\n throw new AggregateError(errors);\n }\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
/**
|
|
4
|
+
* Checks whether a network connection is detected.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export function checkNetworkConnection() {
|
|
8
|
+
return Promise.resolve(self.navigator.onLine);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=checkNetworkConnection.common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkNetworkConnection.common.js","sourceRoot":"","sources":["../../../src/util/checkNetworkConnection.common.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Checks whether a network connection is detected.\n * @internal\n */\nexport function checkNetworkConnection(): Promise<boolean> {\n return Promise.resolve(self.navigator.onLine);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkNetworkConnection.js","sourceRoot":"","sources":["../../../src/util/checkNetworkConnection.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC;QAC9E,UAAU,CAAC,IAAI,EAAE,UAAU,GAAQ;YACjC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,OAAO,CACZ,qEAAqE,EACrE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EACpB,GAAG,CACJ,CAAC;gBACF,2GAA2G;gBAC3G,8GAA8G;gBAC9G,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAC;YAC5F,CAAC;YAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT
|
|
1
|
+
{"version":3,"file":"checkNetworkConnection.js","sourceRoot":"","sources":["../../../src/util/checkNetworkConnection.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC;QAC9E,UAAU,CAAC,IAAI,EAAE,UAAU,GAAQ;YACjC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,OAAO,CACZ,qEAAqE,EACrE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EACpB,GAAG,CACJ,CAAC;gBACF,2GAA2G;gBAC3G,8GAA8G;gBAC9G,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAC;YAC5F,CAAC;YAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CONNREFUSED, TIMEOUT, resolve as dnsResolve } from \"node:dns\";\nimport { logger } from \"../log.js\";\n\n/**\n * Checks whether a network connection is detected.\n * @internal\n */\nexport function checkNetworkConnection(host: string): Promise<boolean> {\n return new Promise((resolve) => {\n logger.verbose(\"Calling dns.resolve to determine network connection status.\");\n dnsResolve(host, function (err: any): void {\n if (err) {\n logger.verbose(\n \"Error thrown from dns.resolve in network connection check: '%s', %O\",\n err.code || err.name,\n err,\n );\n // List of possible DNS error codes: https://nodejs.org/dist/latest-v12.x/docs/api/dns.html#dns_error_codes\n // We only resolve with `false` when dnsResolve fails with an error we expect to see when the network is down.\n if (err.code === CONNREFUSED || err.code === TIMEOUT) {\n return resolve(false);\n }\n } else {\n logger.verbose(\"Successfully resolved host via dns.resolve in network connection check.\");\n }\n\n return resolve(true);\n });\n });\n}\n"]}
|
|
@@ -42,7 +42,6 @@ export declare const Constants: {
|
|
|
42
42
|
readonly attachEpoch: "com.microsoft:epoch";
|
|
43
43
|
readonly receiverIdentifierName: "com.microsoft:receiver-name";
|
|
44
44
|
readonly enableReceiverRuntimeMetricName: "com.microsoft:enable-receiver-runtime-metric";
|
|
45
|
-
readonly geoReplication: "com.microsoft:georeplication";
|
|
46
45
|
readonly timespan: "com.microsoft:timespan";
|
|
47
46
|
readonly uri: "com.microsoft:uri";
|
|
48
47
|
readonly dateTimeOffset: "com.microsoft:datetime-offset";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
3
|
export const Constants = {
|
|
4
4
|
associatedLinkName: "associated-link-name",
|
|
5
5
|
partitionKey: "x-opt-partition-key",
|
|
@@ -44,7 +44,6 @@ export const Constants = {
|
|
|
44
44
|
attachEpoch: `com.microsoft:epoch`,
|
|
45
45
|
receiverIdentifierName: `com.microsoft:receiver-name`,
|
|
46
46
|
enableReceiverRuntimeMetricName: `com.microsoft:enable-receiver-runtime-metric`,
|
|
47
|
-
geoReplication: `com.microsoft:georeplication`,
|
|
48
47
|
timespan: `com.microsoft:timespan`,
|
|
49
48
|
uri: `com.microsoft:uri`,
|
|
50
49
|
dateTimeOffset: `com.microsoft:datetime-offset`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/util/constants.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,kBAAkB,EAAE,sBAAsB;IAC1C,YAAY,EAAE,qBAAqB;IACnC,cAAc,EAAE,uBAAuB;IACvC,qBAAqB,EAAE,+BAA+B;IACtD,YAAY,EAAE,qBAAqB;IACnC,oBAAoB,EAAE,8BAA8B;IACpD,MAAM,EAAE,cAAc;IACtB,WAAW,EAAE,oBAAoB;IACjC,eAAe,EAAE,oBAAoB;IACrC,SAAS,EAAE,sBAAsB;IACjC,eAAe,EAAE,yBAAyB;IAC1C,gBAAgB,EAAE,yBAAyB;IAC3C,YAAY,EAAE,qBAAqB;IACnC,sBAAsB,EAAE,qCAAqC;IAC7D,gBAAgB,EAAE,8BAA8B;IAChD,wBAAwB,EAAE,uCAAuC;IACjE,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,aAAa;IACzB,iBAAiB,EAAE,oBAAoB;IACvC,cAAc,EAAE,iBAAiB;IACjC,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,MAAM;IACrB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,UAAU;IAChC,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,KAAK;IACjB,iBAAiB,EAAE,WAAW;IAC9B,oBAAoB,EAAE,8BAA8B;IACpD,iBAAiB,EAAE,uCAAuC;IAC1D,qBAAqB,EAAE,+BAA+B;IACtD,kBAAkB,EAAE,wCAAwC;IAC5D,kBAAkB,EAAE,GAAG;IACvB,YAAY,EAAE,eAAe;IAC7B,WAAW,EAAE,qBAAqB;IAClC,sBAAsB,EAAE,6BAA6B;IACrD,+BAA+B,EAAE,8CAA8C;IAC/E,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/util/constants.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const Constants = {\n associatedLinkName: \"associated-link-name\",\n partitionKey: \"x-opt-partition-key\",\n sequenceNumber: \"x-opt-sequence-number\",\n enqueueSequenceNumber: \"x-opt-enqueue-sequence-number\",\n enqueuedTime: \"x-opt-enqueued-time\",\n scheduledEnqueueTime: \"x-opt-scheduled-enqueue-time\",\n offset: \"x-opt-offset\",\n lockedUntil: \"x-opt-locked-until\",\n partitionIdName: \"x-opt-partition-id\",\n publisher: \"x-opt-publisher-name\",\n viaPartitionKey: \"x-opt-via-partition-key\",\n deadLetterSource: \"x-opt-deadletter-source\",\n messageState: \"x-opt-message-state\",\n enqueuedTimeAnnotation: `amqp.annotation.x-opt-enqueued-time`,\n offsetAnnotation: `amqp.annotation.x-opt-offset`,\n sequenceNumberAnnotation: `amqp.annotation.x-opt-sequence-number`,\n guidSize: 16,\n message: \"message\",\n error: \"error\",\n statusCode: \"status-code\",\n statusDescription: \"status-description\",\n errorCondition: \"error-condition\",\n management: \"$management\",\n partition: \"partition\",\n partitionId: \"partitionId\",\n readOperation: \"READ\",\n TLS: \"tls\",\n TCP: \"tcp\",\n establishConnection: \"establishConnection\",\n defaultConsumerGroup: \"$default\",\n eventHub: \"eventhub\",\n cbsEndpoint: \"$cbs\",\n cbsReplyTo: \"cbs\",\n operationPutToken: \"put-token\",\n aadEventHubsAudience: \"https://eventhubs.azure.net/\",\n aadEventHubsScope: \"https://eventhubs.azure.net//.default\",\n aadServiceBusAudience: \"https://servicebus.azure.net/\",\n aadServiceBusScope: \"https://servicebus.azure.net//.default\",\n maxUserAgentLength: 512,\n vendorString: \"com.microsoft\",\n attachEpoch: `com.microsoft:epoch`,\n receiverIdentifierName: `com.microsoft:receiver-name`,\n enableReceiverRuntimeMetricName: `com.microsoft:enable-receiver-runtime-metric`,\n timespan: `com.microsoft:timespan`,\n uri: `com.microsoft:uri`,\n dateTimeOffset: `com.microsoft:datetime-offset`,\n sessionFilterName: `com.microsoft:session-filter`,\n receiverError: \"receiver_error\",\n senderError: \"sender_error\",\n sessionError: \"session_error\",\n connectionError: \"connection_error\",\n defaultOperationTimeoutInMs: 60000,\n defaultConnectionIdleTimeoutInMs: 60000,\n managementRequestKey: \"managementRequest\",\n negotiateCbsKey: \"negotiateCbs\",\n negotiateClaim: \"negotiateClaim\",\n ensureContainerAndBlob: \"ensureContainerAndBlob\",\n defaultPrefetchCount: 1000,\n reconnectLimit: 100,\n maxMessageIdLength: 128,\n maxPartitionKeyLength: 128,\n maxSessionIdLength: 128,\n pathDelimiter: \"/\",\n ruleNameMaximumLength: 50,\n maximumSqlFilterStatementLength: 1024,\n maximumSqlRuleActionStatementLength: 1024,\n maxDeadLetterReasonLength: 4096,\n // https://stackoverflow.com/questions/11526504/minimum-and-maximum-date for js\n // However we are setting this to the TimeSpan.MaxValue of C#.\n maxDurationValue: 922337203685477,\n minDurationValue: -922337203685477,\n // https://github.com/Azure/azure-amqp/blob/master/Microsoft.Azure.Amqp/Amqp/AmqpConstants.cs#L47\n maxAbsoluteExpiryTime: new Date(\"9999-12-31T07:59:59.000Z\").getTime(),\n maxUint32Value: 4294967295,\n aadTokenValidityMarginInMs: 5000,\n connectionReconnectDelay: 300,\n defaultMaxRetries: 3,\n defaultMaxRetriesForConnection: 150,\n defaultDelayBetweenOperationRetriesInMs: 30000,\n defaultMaxDelayForExponentialRetryInMs: 90000,\n receiverSettleMode: \"receiver-settle-mode\",\n dispositionStatus: \"disposition-status\",\n fromSequenceNumber: \"from-sequence-number\",\n messageCount: \"message-count\",\n enqueuedTimeUtc: \"enqueued-time-utc\",\n lockTokens: \"lock-tokens\",\n messageIdMapKey: \"message-id\",\n sequenceNumberMapKey: \"sequence-number\",\n lockTokenMapKey: \"lock-token\",\n sessionIdMapKey: \"session-id\",\n sequenceNumbers: \"sequence-numbers\",\n deadLetterReason: \"deadletter-reason\",\n deadLetterDescription: \"deadletter-description\",\n propertiesToModify: \"properties-to-modify\",\n deadLetterName: \"com.microsoft:dead-letter\",\n trackingId: \"com.microsoft:tracking-id\",\n serverTimeout: \"com.microsoft:server-timeout\",\n operations: {\n putToken: \"put-token\",\n read: \"READ\",\n cancelScheduledMessage: \"com.microsoft:cancel-scheduled-message\",\n scheduleMessage: \"com.microsoft:schedule-message\",\n renewLock: \"com.microsoft:renew-lock\",\n peekMessage: \"com.microsoft:peek-message\",\n receiveBySequenceNumber: \"com.microsoft:receive-by-sequence-number\",\n deleteMessages: \"com.microsoft:batch-delete-messages\",\n updateDisposition: \"com.microsoft:update-disposition\",\n renewSessionLock: \"com.microsoft:renew-session-lock\",\n setSessionState: \"com.microsoft:set-session-state\",\n getSessionState: \"com.microsoft:get-session-state\",\n enumerateSessions: \"com.microsoft:get-message-sessions\",\n addRule: \"com.microsoft:add-rule\",\n removeRule: \"com.microsoft:remove-rule\",\n enumerateRules: \"com.microsoft:enumerate-rules\",\n },\n descriptorCodes: {\n ruleDescriptionList: 1335734829060,\n sqlFilterList: 83483426822,\n correlationFilterList: 83483426825,\n sqlRuleActionList: 1335734829062,\n trueFilterList: 83483426823,\n falseFilterList: 83483426824,\n },\n} as const;\n\n/**\n * The standard error message accompanying an AbortError.\n * @hidden\n */\nexport const StandardAbortMessage = \"The operation was aborted.\";\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
export async function signString(key, toSign) {
|
|
4
|
+
const enc = new TextEncoder();
|
|
5
|
+
const algorithm = { name: "HMAC", hash: { name: "SHA-256" } };
|
|
6
|
+
const extractedKey = await globalThis.crypto.subtle.importKey("raw", enc.encode(key), algorithm, false, ["sign", "verify"]);
|
|
7
|
+
const signature = await globalThis.crypto.subtle.sign(algorithm, extractedKey, enc.encode(toSign));
|
|
8
|
+
const digest = btoa(String.fromCharCode(...new Uint8Array(signature)));
|
|
9
|
+
return encodeURIComponent(digest);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=hmacSha256.common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmacSha256.common.js","sourceRoot":"","sources":["../../../src/util/hmacSha256.common.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC1D,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IAEhF,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAC3D,KAAK,EACL,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EACf,SAAS,EACT,KAAK,EACL,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACnD,SAAS,EACT,YAAY,EACZ,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CACnB,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEvE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport async function signString(key: string, toSign: string): Promise<string> {\n const enc = new TextEncoder();\n const algorithm: HmacImportParams = { name: \"HMAC\", hash: { name: \"SHA-256\" } };\n\n const extractedKey = await globalThis.crypto.subtle.importKey(\n \"raw\",\n enc.encode(key),\n algorithm,\n false,\n [\"sign\", \"verify\"],\n );\n const signature = await globalThis.crypto.subtle.sign(\n algorithm,\n extractedKey,\n enc.encode(toSign),\n );\n const digest = btoa(String.fromCharCode(...new Uint8Array(signature)));\n\n return encodeURIComponent(digest);\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
3
|
import { createHmac } from "node:crypto";
|
|
4
4
|
export async function signString(key, toSign) {
|
|
5
5
|
const hmac = createHmac("sha256", key).update(toSign).digest("base64");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hmacSha256.js","sourceRoot":"","sources":["../../../src/util/hmacSha256.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT
|
|
1
|
+
{"version":3,"file":"hmacSha256.js","sourceRoot":"","sources":["../../../src/util/hmacSha256.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createHmac } from \"node:crypto\";\n\nexport async function signString(key: string, toSign: string): Promise<string> {\n const hmac = createHmac(\"sha256\", key).update(toSign).digest(\"base64\");\n return encodeURIComponent(hmac);\n}\n"]}
|
package/dist/esm/util/lock.d.ts
CHANGED
package/dist/esm/util/lock.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
3
|
import { AbortError } from "@azure/abort-controller";
|
|
4
4
|
import { OperationTimeoutError } from "rhea-promise";
|
|
5
5
|
import { StandardAbortMessage } from "./constants.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/util/lock.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AbortError, AbortSignalLike } from \"@azure/abort-controller\";\nimport { OperationTimeoutError } from \"rhea-promise\";\nimport { StandardAbortMessage } from \"./constants.js\";\nimport { logger } from \"../log.js\";\n\n/**\n * Describes the properties that must be provided while acquiring a lock.\n */\nexport interface AcquireLockProperties {\n /**\n * An implementation of the `AbortSignalLike` interface to signal the request to cancel lock acquisition.\n * This only applies to the acquisition of a lock. Once the lock is acquired, the task is invoked and `acquire`\n * can no longer be cancelled.\n * This does not cancel running the task passed to `acquire()` if the lock has been acquired,\n * but will prevent it from running if cancelled before the task is invoked.\n */\n abortSignal: AbortSignalLike | undefined;\n /**\n * The allowed amount of time in milliseconds to acquire a lock.\n * If a lock isn't acquired within this time, the promise returned\n * by `acquire()` will be rejected with an Error.\n */\n timeoutInMs: number | undefined;\n}\n\n/**\n * Describes the components related to a specific task.\n * @internal\n */\ninterface TaskDetails {\n abortListener?: () => void;\n abortSignal?: AbortSignalLike;\n resolve: (value: unknown) => void;\n reject: (reason: Error) => void;\n task: (...args: any[]) => Promise<unknown>;\n tid?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * CancellableAsyncLock provides a mechanism for forcing tasks using the same\n * 'key' to be executed serially.\n *\n * Pending tasks can be manually cancelled via an abortSignal or automatically\n * cancelled by reach a provided timeout value.\n */\nexport interface CancellableAsyncLock {\n /**\n * Returns a promise that resolves to the value returned by the provided task function.\n * Only 1 task can be invoked at a time for a given `key` value.\n *\n * An acquire call can be cancelled via an `abortSignal`.\n * If cancelled, the promise will be rejected with an `AbortError`.\n *\n * `acquireTimeoutInMs` can also be provided to properties.\n * If the timeout is reached before the provided `task` is invoked,\n * then the promise will be rejected with an Error stating the task\n * timed out waiting to acquire a lock.\n *\n * @param key - All `acquire` calls are grouped by the provided `key`.\n * @param task - The function to invoke once the lock has been acquired.\n * @param properties - Additional properties to control the behavior of `acquire`.\n */\n acquire<T = void>(\n key: string,\n task: (...args: any[]) => Promise<T>,\n properties: AcquireLockProperties,\n ): Promise<T>;\n}\n\n/**\n * This class is used to coordinate executing tasks that should not be run in parallel.\n * @internal\n */\nexport class CancellableAsyncLockImpl {\n private _keyMap = new Map<string, TaskDetails[]>();\n private _executionRunningSet = new Set<string>();\n /**\n * Returns a promise that resolves to the value returned by the provided task function.\n * Only 1 task can be invoked at a time for a given `key` value.\n *\n * An acquire call can be cancelled via an `abortSignal`.\n * If cancelled, the promise will be rejected with an `AbortError`.\n *\n * `acquireTimeoutInMs` can also be provided to properties.\n * If the timeout is reached before the provided `task` is invoked,\n * then the promise will be rejected with an Error stating the task\n * timed out waiting to acquire a lock.\n *\n * @param key - All `acquire` calls are grouped by the provided `key`.\n * @param task - The function to invoke once the lock has been acquired.\n * @param properties - Additional properties to control the behavior of `acquire`.\n */\n acquire<T = void>(\n key: string,\n task: (...args: any[]) => Promise<T>,\n properties: AcquireLockProperties,\n ): Promise<T> {\n const { abortSignal, timeoutInMs } = properties;\n // Fast exit if the operation is already cancelled.\n if (abortSignal?.aborted) {\n return Promise.reject(new AbortError(StandardAbortMessage));\n }\n\n // Ensure we've got a task queue for the given key.\n const taskQueue = this._keyMap.get(key) ?? [];\n this._keyMap.set(key, taskQueue);\n\n // This method will return a promise that will be fulfilled outside this function.\n const { promise, rejecter, resolver } = getPromiseParts();\n\n const taskDetails: TaskDetails = {\n reject: rejecter,\n resolve: resolver,\n task,\n };\n\n // Handle timeouts by removing the task from the queue when hit.\n if (typeof timeoutInMs === \"number\") {\n const tid = setTimeout(() => {\n this._removeTaskDetails(key, taskDetails);\n rejecter(\n new OperationTimeoutError(`The task timed out waiting to acquire a lock for ${key}`),\n );\n }, timeoutInMs);\n taskDetails.tid = tid;\n }\n\n // Handle cancellation by removing the task from the queue when cancelled.\n if (abortSignal) {\n const abortListener = (): void => {\n this._removeTaskDetails(key, taskDetails);\n rejecter(new AbortError(StandardAbortMessage));\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n taskDetails.abortSignal = abortSignal;\n taskDetails.abortListener = abortListener;\n }\n\n // Enqueue the task!\n taskQueue.push(taskDetails);\n logger.verbose(\n `Called acquire() for lock \"${key}\". Lock \"${key}\" has ${taskQueue.length} pending tasks.`,\n );\n\n // Start a loop to iterate over the task queue.\n // This will run asynchronously and won't allow\n // more than 1 concurrent execution per key at a time.\n this._execute(key);\n\n return promise as Promise<T>;\n }\n\n /**\n * Iterates over all the pending tasks for a given `key` serially.\n *\n * Note: If the pending tasks are already being iterated by an early\n * _execute invocation, this returns immediately.\n * @returns\n */\n private async _execute(key: string): Promise<void> {\n // If the key already exists in the set, then exit because\n // tasks are already being processed.\n if (this._executionRunningSet.has(key)) {\n return;\n }\n\n const taskQueue = this._keyMap.get(key);\n // If the queue is empty, exit early!\n if (!taskQueue || !taskQueue.length) {\n return;\n }\n\n // Add the key to the set so we can tell the\n // task queue is already being processed.\n this._executionRunningSet.add(key);\n while (taskQueue.length) {\n // Remove tasks from the front of the queue.\n // Order matters!\n const taskDetails = taskQueue.shift();\n if (!taskDetails) {\n continue;\n }\n\n try {\n logger.verbose(`Acquired lock for \"${key}\", invoking task.`);\n cleanupTaskDetails(taskDetails);\n const value = await taskDetails.task();\n taskDetails.resolve(value);\n } catch (err: any) {\n taskDetails.reject(err);\n }\n logger.verbose(\n `Task completed for lock \"${key}\". Lock \"${key}\" has ${taskQueue.length} pending tasks.`,\n );\n }\n\n // Indicate that the task queue for the key is empty\n // and we're done processing it.\n this._executionRunningSet.delete(key);\n // clean up the key map\n this._keyMap.delete(key);\n }\n\n private _removeTaskDetails(key: string, taskDetails: TaskDetails): void {\n const taskQueue = this._keyMap.get(key);\n if (!taskQueue || !taskQueue.length) {\n // The task is already gone from the queue, so our work here is done!\n return;\n }\n\n const index = taskQueue.indexOf(taskDetails);\n if (index !== -1) {\n const [details] = taskQueue.splice(index, 1);\n // Cleanup the task rejection code paths.\n cleanupTaskDetails(details);\n }\n }\n}\n\n/**\n * @internal\n * Returns a promise and the promise's resolve and reject methods.\n */\nfunction getPromiseParts(): {\n promise: Promise<unknown>;\n resolver: (value: unknown) => void;\n rejecter: (reason: Error) => void;\n} {\n let resolver: (value: unknown) => void;\n let rejecter: (reason: Error) => void;\n\n const promise = new Promise<unknown>((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n\n return {\n promise,\n resolver: resolver!,\n rejecter: rejecter!,\n };\n}\n\n/**\n * @internal\n * Removes any abort listener or pending timeout from a task.\n */\nfunction cleanupTaskDetails(taskDetails: TaskDetails): void {\n // Cleanup the task rejection code paths.\n if (taskDetails.tid) clearTimeout(taskDetails.tid);\n if (taskDetails.abortSignal && taskDetails.abortListener) {\n taskDetails.abortSignal.removeEventListener(\"abort\", taskDetails.abortListener);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/util/lock.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport { OperationTimeoutError } from \"rhea-promise\";\nimport { StandardAbortMessage } from \"./constants.js\";\nimport { logger } from \"../log.js\";\n\n/**\n * Describes the properties that must be provided while acquiring a lock.\n */\nexport interface AcquireLockProperties {\n /**\n * An implementation of the `AbortSignalLike` interface to signal the request to cancel lock acquisition.\n * This only applies to the acquisition of a lock. Once the lock is acquired, the task is invoked and `acquire`\n * can no longer be cancelled.\n * This does not cancel running the task passed to `acquire()` if the lock has been acquired,\n * but will prevent it from running if cancelled before the task is invoked.\n */\n abortSignal: AbortSignalLike | undefined;\n /**\n * The allowed amount of time in milliseconds to acquire a lock.\n * If a lock isn't acquired within this time, the promise returned\n * by `acquire()` will be rejected with an Error.\n */\n timeoutInMs: number | undefined;\n}\n\n/**\n * Describes the components related to a specific task.\n * @internal\n */\ninterface TaskDetails {\n abortListener?: () => void;\n abortSignal?: AbortSignalLike;\n resolve: (value: unknown) => void;\n reject: (reason: Error) => void;\n task: (...args: any[]) => Promise<unknown>;\n tid?: ReturnType<typeof setTimeout>;\n}\n\n/**\n * CancellableAsyncLock provides a mechanism for forcing tasks using the same\n * 'key' to be executed serially.\n *\n * Pending tasks can be manually cancelled via an abortSignal or automatically\n * cancelled by reach a provided timeout value.\n */\nexport interface CancellableAsyncLock {\n /**\n * Returns a promise that resolves to the value returned by the provided task function.\n * Only 1 task can be invoked at a time for a given `key` value.\n *\n * An acquire call can be cancelled via an `abortSignal`.\n * If cancelled, the promise will be rejected with an `AbortError`.\n *\n * `acquireTimeoutInMs` can also be provided to properties.\n * If the timeout is reached before the provided `task` is invoked,\n * then the promise will be rejected with an Error stating the task\n * timed out waiting to acquire a lock.\n *\n * @param key - All `acquire` calls are grouped by the provided `key`.\n * @param task - The function to invoke once the lock has been acquired.\n * @param properties - Additional properties to control the behavior of `acquire`.\n */\n acquire<T = void>(\n key: string,\n task: (...args: any[]) => Promise<T>,\n properties: AcquireLockProperties,\n ): Promise<T>;\n}\n\n/**\n * This class is used to coordinate executing tasks that should not be run in parallel.\n * @internal\n */\nexport class CancellableAsyncLockImpl {\n private _keyMap = new Map<string, TaskDetails[]>();\n private _executionRunningSet = new Set<string>();\n /**\n * Returns a promise that resolves to the value returned by the provided task function.\n * Only 1 task can be invoked at a time for a given `key` value.\n *\n * An acquire call can be cancelled via an `abortSignal`.\n * If cancelled, the promise will be rejected with an `AbortError`.\n *\n * `acquireTimeoutInMs` can also be provided to properties.\n * If the timeout is reached before the provided `task` is invoked,\n * then the promise will be rejected with an Error stating the task\n * timed out waiting to acquire a lock.\n *\n * @param key - All `acquire` calls are grouped by the provided `key`.\n * @param task - The function to invoke once the lock has been acquired.\n * @param properties - Additional properties to control the behavior of `acquire`.\n */\n acquire<T = void>(\n key: string,\n task: (...args: any[]) => Promise<T>,\n properties: AcquireLockProperties,\n ): Promise<T> {\n const { abortSignal, timeoutInMs } = properties;\n // Fast exit if the operation is already cancelled.\n if (abortSignal?.aborted) {\n return Promise.reject(new AbortError(StandardAbortMessage));\n }\n\n // Ensure we've got a task queue for the given key.\n const taskQueue = this._keyMap.get(key) ?? [];\n this._keyMap.set(key, taskQueue);\n\n // This method will return a promise that will be fulfilled outside this function.\n const { promise, rejecter, resolver } = getPromiseParts();\n\n const taskDetails: TaskDetails = {\n reject: rejecter,\n resolve: resolver,\n task,\n };\n\n // Handle timeouts by removing the task from the queue when hit.\n if (typeof timeoutInMs === \"number\") {\n const tid = setTimeout(() => {\n this._removeTaskDetails(key, taskDetails);\n rejecter(\n new OperationTimeoutError(`The task timed out waiting to acquire a lock for ${key}`),\n );\n }, timeoutInMs);\n taskDetails.tid = tid;\n }\n\n // Handle cancellation by removing the task from the queue when cancelled.\n if (abortSignal) {\n const abortListener = (): void => {\n this._removeTaskDetails(key, taskDetails);\n rejecter(new AbortError(StandardAbortMessage));\n };\n abortSignal.addEventListener(\"abort\", abortListener);\n taskDetails.abortSignal = abortSignal;\n taskDetails.abortListener = abortListener;\n }\n\n // Enqueue the task!\n taskQueue.push(taskDetails);\n logger.verbose(\n `Called acquire() for lock \"${key}\". Lock \"${key}\" has ${taskQueue.length} pending tasks.`,\n );\n\n // Start a loop to iterate over the task queue.\n // This will run asynchronously and won't allow\n // more than 1 concurrent execution per key at a time.\n this._execute(key);\n\n return promise as Promise<T>;\n }\n\n /**\n * Iterates over all the pending tasks for a given `key` serially.\n *\n * Note: If the pending tasks are already being iterated by an early\n * _execute invocation, this returns immediately.\n * @returns\n */\n private async _execute(key: string): Promise<void> {\n // If the key already exists in the set, then exit because\n // tasks are already being processed.\n if (this._executionRunningSet.has(key)) {\n return;\n }\n\n const taskQueue = this._keyMap.get(key);\n // If the queue is empty, exit early!\n if (!taskQueue || !taskQueue.length) {\n return;\n }\n\n // Add the key to the set so we can tell the\n // task queue is already being processed.\n this._executionRunningSet.add(key);\n while (taskQueue.length) {\n // Remove tasks from the front of the queue.\n // Order matters!\n const taskDetails = taskQueue.shift();\n if (!taskDetails) {\n continue;\n }\n\n try {\n logger.verbose(`Acquired lock for \"${key}\", invoking task.`);\n cleanupTaskDetails(taskDetails);\n const value = await taskDetails.task();\n taskDetails.resolve(value);\n } catch (err: any) {\n taskDetails.reject(err);\n }\n logger.verbose(\n `Task completed for lock \"${key}\". Lock \"${key}\" has ${taskQueue.length} pending tasks.`,\n );\n }\n\n // Indicate that the task queue for the key is empty\n // and we're done processing it.\n this._executionRunningSet.delete(key);\n // clean up the key map\n this._keyMap.delete(key);\n }\n\n private _removeTaskDetails(key: string, taskDetails: TaskDetails): void {\n const taskQueue = this._keyMap.get(key);\n if (!taskQueue || !taskQueue.length) {\n // The task is already gone from the queue, so our work here is done!\n return;\n }\n\n const index = taskQueue.indexOf(taskDetails);\n if (index !== -1) {\n const [details] = taskQueue.splice(index, 1);\n // Cleanup the task rejection code paths.\n cleanupTaskDetails(details);\n }\n }\n}\n\n/**\n * @internal\n * Returns a promise and the promise's resolve and reject methods.\n */\nfunction getPromiseParts(): {\n promise: Promise<unknown>;\n resolver: (value: unknown) => void;\n rejecter: (reason: Error) => void;\n} {\n let resolver: (value: unknown) => void;\n let rejecter: (reason: Error) => void;\n\n const promise = new Promise<unknown>((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n\n return {\n promise,\n resolver: resolver!,\n rejecter: rejecter!,\n };\n}\n\n/**\n * @internal\n * Removes any abort listener or pending timeout from a task.\n */\nfunction cleanupTaskDetails(taskDetails: TaskDetails): void {\n // Cleanup the task rejection code paths.\n if (taskDetails.tid) clearTimeout(taskDetails.tid);\n if (taskDetails.abortSignal && taskDetails.abortListener) {\n taskDetails.abortSignal.removeEventListener(\"abort\", taskDetails.abortListener);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeInfo.js","sourceRoot":"","sources":["../../../src/util/runtimeInfo.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;AACnC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT
|
|
1
|
+
{"version":3,"file":"runtimeInfo.js","sourceRoot":"","sources":["../../../src/util/runtimeInfo.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;AACnC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as os from \"node:os\";\n\n/**\n * Returns information about the platform this function is being run on.\n * @internal\n */\nexport function getPlatformInfo(): string {\n return `(${os.arch()}-${os.type()}-${os.release()})`;\n}\n\n/**\n * Returns information about Node.js this function is being run on.\n * @internal\n */\nexport function getFrameworkInfo(): string {\n return `Node/${process.version}`;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../../src/util/typeGuards.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,sBAAsB,CAAC,KAAK,EAAE,CAAC,oBAAoB,CAAC,CAAC,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAAC;AACpG,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT
|
|
1
|
+
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../../src/util/typeGuards.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,sBAAsB,CAAC,KAAK,EAAE,CAAC,oBAAoB,CAAC,CAAC,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAAC;AACpG,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { SasTokenProvider } from \"../auth/tokenProvider.js\";\nimport { isObjectWithProperties } from \"@azure/core-util\";\n\n/**\n * Typeguard that checks if the input is a SasTokenProvider.\n * @param thing - Any object.\n * @hidden\n */\nexport function isSasTokenProvider(thing: unknown): thing is SasTokenProvider {\n return isObjectWithProperties(thing, [\"isSasTokenProvider\"]) && thing.isSasTokenProvider === true;\n}\n"]}
|
package/dist/esm/util/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CancellableAsyncLock } from "./lock.js";
|
|
2
|
-
import { AbortSignalLike } from "@azure/abort-controller";
|
|
3
|
-
import { WebSocketImpl } from "rhea-promise";
|
|
1
|
+
import type { CancellableAsyncLock } from "./lock.js";
|
|
2
|
+
import type { AbortSignalLike } from "@azure/abort-controller";
|
|
3
|
+
import type { WebSocketImpl } from "rhea-promise";
|
|
4
4
|
/**
|
|
5
5
|
* @internal
|
|
6
6
|
*
|
package/dist/esm/util/utils.js
CHANGED