@azure/core-amqp 4.4.2-alpha.20260311.2 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/browser/ConnectionContextBase.js +1 -1
  2. package/dist/browser/ConnectionContextBase.js.map +1 -1
  3. package/dist/browser/errors.js +14 -0
  4. package/dist/browser/errors.js.map +1 -1
  5. package/dist/browser/requestResponseLink.js +3 -1
  6. package/dist/browser/requestResponseLink.js.map +1 -1
  7. package/dist/browser/retry.js +1 -1
  8. package/dist/browser/retry.js.map +1 -1
  9. package/dist/browser/util/{checkNetworkConnection.common.d.ts → checkNetworkConnection-web.d.mts} +1 -1
  10. package/dist/{esm/util/checkNetworkConnection.common.js → browser/util/checkNetworkConnection-web.mjs} +2 -2
  11. package/dist/browser/util/checkNetworkConnection-web.mjs.map +1 -0
  12. package/dist/browser/util/hmacSha256.d.ts +1 -1
  13. package/dist/browser/util/hmacSha256.js +9 -1
  14. package/dist/browser/util/hmacSha256.js.map +1 -1
  15. package/dist/browser/util/lock.js +1 -1
  16. package/dist/browser/util/lock.js.map +1 -1
  17. package/dist/browser/util/{runtimeInfo.d.ts → runtimeInfo-browser.d.mts} +1 -1
  18. package/dist/browser/util/{runtimeInfo.js → runtimeInfo-browser.mjs} +1 -1
  19. package/dist/browser/util/runtimeInfo-browser.mjs.map +1 -0
  20. package/dist/browser/util/utils.d.ts +0 -76
  21. package/dist/browser/util/utils.js +0 -89
  22. package/dist/browser/util/utils.js.map +1 -1
  23. package/dist/commonjs/ConnectionContextBase.js +1 -0
  24. package/dist/commonjs/ConnectionContextBase.js.map +2 -2
  25. package/dist/commonjs/amqpAnnotatedMessage.js +1 -0
  26. package/dist/commonjs/amqpAnnotatedMessage.js.map +1 -1
  27. package/dist/commonjs/auth/token.js +1 -0
  28. package/dist/commonjs/auth/token.js.map +1 -1
  29. package/dist/commonjs/auth/tokenProvider.js +1 -0
  30. package/dist/commonjs/auth/tokenProvider.js.map +1 -1
  31. package/dist/commonjs/cbs.js +1 -0
  32. package/dist/commonjs/cbs.js.map +1 -1
  33. package/dist/commonjs/connectionConfig/connectionConfig.js +1 -0
  34. package/dist/commonjs/connectionConfig/connectionConfig.js.map +1 -1
  35. package/dist/commonjs/errors.js +9 -0
  36. package/dist/commonjs/errors.js.map +3 -3
  37. package/dist/commonjs/index.js +1 -0
  38. package/dist/commonjs/index.js.map +1 -1
  39. package/dist/commonjs/internals.js +1 -0
  40. package/dist/commonjs/internals.js.map +1 -1
  41. package/dist/commonjs/log.js +1 -0
  42. package/dist/commonjs/log.js.map +1 -1
  43. package/dist/commonjs/messageHeader.js +1 -0
  44. package/dist/commonjs/messageHeader.js.map +1 -1
  45. package/dist/commonjs/messageProperties.js +1 -0
  46. package/dist/commonjs/messageProperties.js.map +1 -1
  47. package/dist/commonjs/requestResponseLink.js +5 -1
  48. package/dist/commonjs/requestResponseLink.js.map +3 -3
  49. package/dist/commonjs/retry.js +1 -0
  50. package/dist/commonjs/retry.js.map +2 -2
  51. package/dist/commonjs/tsdoc-metadata.json +1 -1
  52. package/dist/commonjs/util/checkNetworkConnection.js +1 -0
  53. package/dist/commonjs/util/checkNetworkConnection.js.map +1 -1
  54. package/dist/commonjs/util/constants.js +1 -0
  55. package/dist/commonjs/util/constants.js.map +1 -1
  56. package/dist/commonjs/util/hmacSha256.js +18 -3
  57. package/dist/commonjs/util/hmacSha256.js.map +3 -3
  58. package/dist/commonjs/util/lock.js +10 -6
  59. package/dist/commonjs/util/lock.js.map +3 -3
  60. package/dist/commonjs/util/runtimeInfo.js +1 -0
  61. package/dist/commonjs/util/runtimeInfo.js.map +1 -1
  62. package/dist/commonjs/util/typeGuards.js +1 -0
  63. package/dist/commonjs/util/typeGuards.js.map +1 -1
  64. package/dist/commonjs/util/utils.d.ts +0 -76
  65. package/dist/commonjs/util/utils.js +3 -66
  66. package/dist/commonjs/util/utils.js.map +3 -3
  67. package/dist/esm/ConnectionContextBase.js.map +1 -1
  68. package/dist/esm/errors.js +14 -0
  69. package/dist/esm/errors.js.map +1 -1
  70. package/dist/esm/requestResponseLink.js +3 -1
  71. package/dist/esm/requestResponseLink.js.map +1 -1
  72. package/dist/esm/retry.js.map +1 -1
  73. package/dist/esm/util/hmacSha256.js +7 -3
  74. package/dist/esm/util/hmacSha256.js.map +1 -1
  75. package/dist/esm/util/lock.js +1 -1
  76. package/dist/esm/util/lock.js.map +1 -1
  77. package/dist/esm/util/utils.d.ts +0 -76
  78. package/dist/esm/util/utils.js +0 -89
  79. package/dist/esm/util/utils.js.map +1 -1
  80. package/dist/react-native/ConnectionContextBase.js +1 -1
  81. package/dist/react-native/ConnectionContextBase.js.map +1 -1
  82. package/dist/react-native/errors.js +14 -0
  83. package/dist/react-native/errors.js.map +1 -1
  84. package/dist/react-native/requestResponseLink.js +3 -1
  85. package/dist/react-native/requestResponseLink.js.map +1 -1
  86. package/dist/react-native/retry.js +1 -1
  87. package/dist/react-native/retry.js.map +1 -1
  88. package/dist/react-native/util/{checkNetworkConnection.common.d.ts → checkNetworkConnection-web.d.mts} +1 -1
  89. package/dist/{browser/util/checkNetworkConnection.common.js → react-native/util/checkNetworkConnection-web.mjs} +2 -2
  90. package/dist/react-native/util/checkNetworkConnection-web.mjs.map +1 -0
  91. package/dist/react-native/util/hmacSha256.d.ts +1 -1
  92. package/dist/react-native/util/hmacSha256.js +9 -1
  93. package/dist/react-native/util/hmacSha256.js.map +1 -1
  94. package/dist/react-native/util/lock.js +1 -1
  95. package/dist/react-native/util/lock.js.map +1 -1
  96. package/dist/react-native/util/{runtimeInfo.d.ts → runtimeInfo-react-native.d.mts} +1 -1
  97. package/dist/react-native/util/{runtimeInfo.js → runtimeInfo-react-native.mjs} +1 -1
  98. package/dist/react-native/util/runtimeInfo-react-native.mjs.map +1 -0
  99. package/dist/react-native/util/utils.d.ts +0 -76
  100. package/dist/react-native/util/utils.js +0 -89
  101. package/dist/react-native/util/utils.js.map +1 -1
  102. package/package.json +38 -21
  103. package/dist/browser/util/checkNetworkConnection.common.js.map +0 -1
  104. package/dist/browser/util/checkNetworkConnection.d.ts +0 -2
  105. package/dist/browser/util/checkNetworkConnection.js +0 -4
  106. package/dist/browser/util/checkNetworkConnection.js.map +0 -1
  107. package/dist/browser/util/hmacSha256.common.d.ts +0 -2
  108. package/dist/browser/util/hmacSha256.common.js +0 -11
  109. package/dist/browser/util/hmacSha256.common.js.map +0 -1
  110. package/dist/browser/util/runtimeInfo.js.map +0 -1
  111. package/dist/commonjs/util/checkNetworkConnection.common.d.ts +0 -6
  112. package/dist/commonjs/util/checkNetworkConnection.common.js +0 -29
  113. package/dist/commonjs/util/checkNetworkConnection.common.js.map +0 -7
  114. package/dist/commonjs/util/hmacSha256.common.d.ts +0 -2
  115. package/dist/commonjs/util/hmacSha256.common.js +0 -44
  116. package/dist/commonjs/util/hmacSha256.common.js.map +0 -7
  117. package/dist/esm/util/checkNetworkConnection.common.d.ts +0 -6
  118. package/dist/esm/util/checkNetworkConnection.common.js.map +0 -1
  119. package/dist/esm/util/hmacSha256.common.d.ts +0 -2
  120. package/dist/esm/util/hmacSha256.common.js +0 -11
  121. package/dist/esm/util/hmacSha256.common.js.map +0 -1
  122. package/dist/react-native/util/checkNetworkConnection.common.js +0 -10
  123. package/dist/react-native/util/checkNetworkConnection.common.js.map +0 -1
  124. package/dist/react-native/util/checkNetworkConnection.d.ts +0 -2
  125. package/dist/react-native/util/checkNetworkConnection.js +0 -4
  126. package/dist/react-native/util/checkNetworkConnection.js.map +0 -1
  127. package/dist/react-native/util/hmacSha256.common.d.ts +0 -2
  128. package/dist/react-native/util/hmacSha256.common.js +0 -11
  129. package/dist/react-native/util/hmacSha256.common.js.map +0 -1
  130. package/dist/react-native/util/runtimeInfo.js.map +0 -1
@@ -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 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"]}
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 \"#platform/checkNetworkConnection\";\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"]}
@@ -3,4 +3,4 @@
3
3
  * @internal
4
4
  */
5
5
  export declare function checkNetworkConnection(_host: string): Promise<boolean>;
6
- //# sourceMappingURL=checkNetworkConnection.common.d.ts.map
6
+ //# sourceMappingURL=checkNetworkConnection-web.d.mts.map
@@ -5,6 +5,6 @@
5
5
  * @internal
6
6
  */
7
7
  export function checkNetworkConnection(_host) {
8
- return Promise.resolve(self.navigator.onLine);
8
+ return Promise.resolve(globalThis.navigator.onLine);
9
9
  }
10
- //# sourceMappingURL=checkNetworkConnection.common.js.map
10
+ //# sourceMappingURL=checkNetworkConnection-web.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkNetworkConnection-web.mjs","sourceRoot":"","sources":["../../../src/util/checkNetworkConnection-web.mts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,OAAO,CAAC,OAAO,CACnB,UAAqE,CAAC,SAAS,CAAC,MAAM,CACxF,CAAC;AACJ,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(_host: string): Promise<boolean> {\n return Promise.resolve(\n (globalThis as typeof globalThis & { navigator: { onLine: boolean } }).navigator.onLine,\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
- export * from "./hmacSha256.common.js";
1
+ export declare function signString(key: string, toSign: string): Promise<string>;
2
2
  //# sourceMappingURL=hmacSha256.d.ts.map
@@ -1,4 +1,12 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- export * from "./hmacSha256.common.js";
3
+ import { uint8ArrayToString } from "@azure/core-util";
4
+ export async function signString(key, toSign) {
5
+ const enc = new TextEncoder();
6
+ const algorithm = { name: "HMAC", hash: { name: "SHA-256" } };
7
+ const extractedKey = await globalThis.crypto.subtle.importKey("raw", enc.encode(key), algorithm, false, ["sign", "verify"]);
8
+ const signature = await globalThis.crypto.subtle.sign(algorithm, extractedKey, enc.encode(toSign));
9
+ const digest = uint8ArrayToString(new Uint8Array(signature), "base64");
10
+ return encodeURIComponent(digest);
11
+ }
4
12
  //# sourceMappingURL=hmacSha256.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hmacSha256.js","sourceRoot":"","sources":["../../../src/util/hmacSha256.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,cAAc,wBAAwB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport * from \"./hmacSha256.common.js\";\n"]}
1
+ {"version":3,"file":"hmacSha256.js","sourceRoot":"","sources":["../../../src/util/hmacSha256.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC1D,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IAE9D,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,kBAAkB,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEvE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { uint8ArrayToString } from \"@azure/core-util\";\n\nexport async function signString(key: string, toSign: string): Promise<string> {\n const enc = new TextEncoder();\n const algorithm = { 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 = uint8ArrayToString(new Uint8Array(signature), \"base64\");\n\n return encodeURIComponent(digest);\n}\n"]}
@@ -48,7 +48,7 @@ export class CancellableAsyncLockImpl {
48
48
  const tid = setTimeout(() => {
49
49
  this._removeTaskDetails(key, taskDetails);
50
50
  rejecter(new OperationTimeoutError(`The task timed out waiting to acquire a lock for ${key}`));
51
- }, timeoutInMs);
51
+ }, Math.max(timeoutInMs, 0));
52
52
  taskDetails.tid = tid;
53
53
  }
54
54
  // Handle cancellation by removing the task from the queue when cancelled.
@@ -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 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
+ {"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 () => {\n this._removeTaskDetails(key, taskDetails);\n rejecter(\n new OperationTimeoutError(`The task timed out waiting to acquire a lock for ${key}`),\n );\n },\n Math.max(timeoutInMs, 0),\n );\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"]}
@@ -8,4 +8,4 @@ export declare function getPlatformInfo(): string;
8
8
  * @internal
9
9
  */
10
10
  export declare function getFrameworkInfo(): string;
11
- //# sourceMappingURL=runtimeInfo.d.ts.map
11
+ //# sourceMappingURL=runtimeInfo-react-native.d.mts.map
@@ -19,4 +19,4 @@ export function getFrameworkInfo() {
19
19
  }
20
20
  return `react-native/unknown`;
21
21
  }
22
- //# sourceMappingURL=runtimeInfo.js.map
22
+ //# sourceMappingURL=runtimeInfo-react-native.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeInfo-react-native.mjs","sourceRoot":"","sources":["../../../src/util/runtimeInfo-react-native.mts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,GAAG,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,QAAQ,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC;QAC3C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC;QACtE,OAAO,gBAAgB,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Platform } from \"react-native\";\n\n/**\n * Returns information about the platform this function is being run on.\n * @internal\n */\nexport function getPlatformInfo(): string {\n return `(${Platform.OS}-${Platform.Version})`;\n}\n\n/**\n * Returns information about React-Native this function is being run on.\n * @internal\n */\nexport function getFrameworkInfo(): string {\n if (Platform.constants?.reactNativeVersion) {\n const { major, minor, patch } = Platform.constants.reactNativeVersion;\n return `react-native/${major}.${minor}.${patch}`;\n }\n return `react-native/unknown`;\n}\n"]}
@@ -1,30 +1,6 @@
1
1
  import type { CancellableAsyncLock } from "./lock.js";
2
2
  import type { AbortSignalLike } from "@azure/abort-controller";
3
3
  import type { WebSocketImpl } from "rhea-promise";
4
- /**
5
- * @internal
6
- *
7
- * Describes the options that can be provided to create an async lock.
8
- */
9
- export interface AsyncLockOptions {
10
- /**
11
- * The max timeout. Default is: 0 (never timeout).
12
- */
13
- timeout?: number;
14
- /**
15
- * Maximum pending tasks. Default is: 1000.
16
- */
17
- maxPending?: number;
18
- /**
19
- * Whether lock can reenter in the same domain.
20
- * Default is: false.
21
- */
22
- domainReentrant?: boolean;
23
- /**
24
- * Your implementation of the promise. Default is: global promise.
25
- */
26
- Promise?: any;
27
- }
28
4
  /**
29
5
  * Options to configure the channelling of the AMQP connection over Web Sockets.
30
6
  */
@@ -69,21 +45,6 @@ export declare function parseConnectionString<T>(connectionString: string): Pars
69
45
  * The cancellable async lock instance.
70
46
  */
71
47
  export declare const defaultCancellableLock: CancellableAsyncLock;
72
- /**
73
- * @internal
74
- *
75
- * Describes a Timeout class that can wait for the specified amount of time and then resolve/reject
76
- * the promise with the given value.
77
- */
78
- export declare class Timeout {
79
- private _timer?;
80
- set<T>(t: number, value?: T): Promise<T>;
81
- clear(): void;
82
- wrap<T>(promise: Promise<T>, t: number, value?: T): Promise<T>;
83
- private _promiseFinally;
84
- static set<T>(t: number, value?: T): Promise<T>;
85
- static wrap<T>(promise: Promise<T>, t: number, value?: T): Promise<T>;
86
- }
87
48
  /**
88
49
  * A wrapper for setTimeout that resolves a promise after t milliseconds.
89
50
  * @param delayInMs - The number of milliseconds to be delayed.
@@ -99,43 +60,6 @@ export declare function delay<T>(delayInMs: number, abortSignal?: AbortSignalLik
99
60
  * @returns true if the address is localhost, false otherwise.
100
61
  */
101
62
  export declare function isLoopbackAddress(address: string): boolean;
102
- /**
103
- * @internal
104
- *
105
- * Generates a random number between the given interval
106
- * @param min - Min number of the range (inclusive).
107
- * @param max - Max number of the range (inclusive).
108
- */
109
- export declare function randomNumberFromInterval(min: number, max: number): number;
110
- /**
111
- * @internal
112
- *
113
- * Type declaration for a Function type where T is the input to the function and V is the output
114
- * of the function.
115
- */
116
- export type Func<T, V> = (a: T) => V;
117
- /**
118
- * @internal
119
- *
120
- * Executes an array of promises sequentially. Inspiration of this method is here:
121
- * https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises!
122
- *
123
- * @param promiseFactories - An array of promise factories(A function that return a promise)
124
- *
125
- * @param kickstart - Input to the first promise that is used to kickstart the promise chain.
126
- * If not provided then the promise chain starts with undefined.
127
- *
128
- * @returns A chain of resolved or rejected promises
129
- */
130
- export declare function executePromisesSequentially(promiseFactories: Array<any>, kickstart?: unknown): Promise<any>;
131
- /**
132
- * @internal
133
- *
134
- * Determines whether the given connection string is an iothub connection string.
135
- * @param connectionString - The connection string.
136
- * @returns boolean.
137
- */
138
- export declare function isIotHubConnectionString(connectionString: string): boolean;
139
63
  /**
140
64
  * @internal
141
65
  */
@@ -42,49 +42,6 @@ export function parseConnectionString(connectionString) {
42
42
  * The cancellable async lock instance.
43
43
  */
44
44
  export const defaultCancellableLock = new CancellableAsyncLockImpl();
45
- /**
46
- * @internal
47
- *
48
- * Describes a Timeout class that can wait for the specified amount of time and then resolve/reject
49
- * the promise with the given value.
50
- */
51
- export class Timeout {
52
- _timer;
53
- set(t, value) {
54
- return new Promise((resolve, reject) => {
55
- this.clear();
56
- const callback = value ? () => reject(new Error(`${value}`)) : resolve;
57
- this._timer = setTimeout(callback, t);
58
- });
59
- }
60
- clear() {
61
- if (this._timer) {
62
- clearTimeout(this._timer);
63
- }
64
- }
65
- wrap(promise, t, value) {
66
- const wrappedPromise = this._promiseFinally(promise, () => this.clear());
67
- const timer = this.set(t, value);
68
- return Promise.race([wrappedPromise, timer]);
69
- }
70
- _promiseFinally(promise, fn) {
71
- const success = (result) => {
72
- fn();
73
- return result;
74
- };
75
- const error = (e) => {
76
- fn();
77
- return Promise.reject(e);
78
- };
79
- return Promise.resolve(promise).then(success, error);
80
- }
81
- static set(t, value) {
82
- return new Timeout().set(t, value);
83
- }
84
- static wrap(promise, t, value) {
85
- return new Timeout().wrap(promise, t, value);
86
- }
87
- }
88
45
  /**
89
46
  * A wrapper for setTimeout that resolves a promise after t milliseconds.
90
47
  * @param delayInMs - The number of milliseconds to be delayed.
@@ -110,52 +67,6 @@ export async function delay(delayInMs, abortSignal, abortErrorMsg, value) {
110
67
  export function isLoopbackAddress(address) {
111
68
  return /^(.*:\/\/)?(127\.[\d.]+|[0:]+1|localhost)/.test(address.toLowerCase());
112
69
  }
113
- /**
114
- * @internal
115
- *
116
- * Generates a random number between the given interval
117
- * @param min - Min number of the range (inclusive).
118
- * @param max - Max number of the range (inclusive).
119
- */
120
- export function randomNumberFromInterval(min, max) {
121
- return Math.floor(Math.random() * (max - min + 1) + min);
122
- }
123
- /**
124
- * @internal
125
- *
126
- * Executes an array of promises sequentially. Inspiration of this method is here:
127
- * https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises!
128
- *
129
- * @param promiseFactories - An array of promise factories(A function that return a promise)
130
- *
131
- * @param kickstart - Input to the first promise that is used to kickstart the promise chain.
132
- * If not provided then the promise chain starts with undefined.
133
- *
134
- * @returns A chain of resolved or rejected promises
135
- */
136
- export function executePromisesSequentially(promiseFactories, kickstart) {
137
- let result = Promise.resolve(kickstart);
138
- promiseFactories.forEach((promiseFactory) => {
139
- result = result.then(promiseFactory);
140
- });
141
- return result;
142
- }
143
- /**
144
- * @internal
145
- *
146
- * Determines whether the given connection string is an iothub connection string.
147
- * @param connectionString - The connection string.
148
- * @returns boolean.
149
- */
150
- export function isIotHubConnectionString(connectionString) {
151
- const cs = String(connectionString);
152
- let result = false;
153
- const model = parseConnectionString(cs);
154
- if (model && model.HostName && model.SharedAccessKey && model.SharedAccessKeyName) {
155
- result = true;
156
- }
157
- return result;
158
- }
159
70
  /**
160
71
  * @internal
161
72
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/util/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { CancellableAsyncLock } from \"./lock.js\";\nimport { CancellableAsyncLockImpl } from \"./lock.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { WebSocketImpl } from \"rhea-promise\";\nimport { delay as wrapperDelay } from \"@azure/core-util\";\n\n/**\n * @internal\n *\n * Describes the options that can be provided to create an async lock.\n */\nexport interface AsyncLockOptions {\n /**\n * The max timeout. Default is: 0 (never timeout).\n */\n timeout?: number;\n /**\n * Maximum pending tasks. Default is: 1000.\n */\n maxPending?: number;\n /**\n * Whether lock can reenter in the same domain.\n * Default is: false.\n */\n domainReentrant?: boolean;\n /**\n * Your implementation of the promise. Default is: global promise.\n */\n Promise?: any;\n}\n\n/**\n * Options to configure the channelling of the AMQP connection over Web Sockets.\n */\nexport interface WebSocketOptions {\n /**\n * The WebSocket constructor used to create an AMQP connection over a WebSocket.\n * This option should be provided in the below scenarios:\n * - The TCP port 5671 which is that is used by the AMQP connection to Event Hubs is blocked in your environment.\n * - Your application needs to be run behind a proxy server.\n * - Your application needs to run in the browser and you want to provide your own choice of Websocket implementation\n * instead of the built-in WebSocket in the browser.\n */\n webSocket?: WebSocketImpl;\n /**\n * Options to be passed to the WebSocket constructor when the underlying `rhea` library instantiates\n * the WebSocket.\n */\n webSocketConstructorOptions?: any;\n}\n\n/**\n * Defines an object with possible properties defined in T.\n */\nexport type ParsedOutput<T> = { [P in keyof T]: T[P] };\n\n/**\n * Parses the connection string and returns an object of type T.\n *\n * Connection strings have the following syntax:\n *\n * ConnectionString ::= `Part { \";\" Part } [ \";\" ] [ WhiteSpace ]`\n * Part ::= [ PartLiteral [ \"=\" PartLiteral ] ]\n * PartLiteral ::= [ WhiteSpace ] Literal [ WhiteSpace ]\n * Literal ::= ? any sequence of characters except ; or = or WhiteSpace ?\n * WhiteSpace ::= ? all whitespace characters including `\\r` and `\\n` ?\n *\n * @param connectionString - The connection string to be parsed.\n * @returns ParsedOutput<T>.\n */\nexport function parseConnectionString<T>(connectionString: string): ParsedOutput<T> {\n const output: { [k: string]: string } = {};\n const parts = connectionString.trim().split(\";\");\n\n for (let part of parts) {\n part = part.trim();\n\n if (part === \"\") {\n // parts can be empty\n continue;\n }\n\n const splitIndex = part.indexOf(\"=\");\n if (splitIndex === -1) {\n throw new Error(\n \"Connection string malformed: each part of the connection string must have an `=` assignment.\",\n );\n }\n\n const key = part.substring(0, splitIndex).trim();\n if (key === \"\") {\n throw new Error(\"Connection string malformed: missing key for assignment\");\n }\n\n const value = part.substring(splitIndex + 1).trim();\n\n output[key] = value;\n }\n\n return output as any;\n}\n\n/**\n * The cancellable async lock instance.\n */\nexport const defaultCancellableLock: CancellableAsyncLock = new CancellableAsyncLockImpl();\n\n/**\n * @internal\n *\n * Describes a Timeout class that can wait for the specified amount of time and then resolve/reject\n * the promise with the given value.\n */\nexport class Timeout {\n private _timer?: ReturnType<typeof setTimeout>;\n\n set<T>(t: number, value?: T): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this.clear();\n const callback: (args: any) => void = value ? () => reject(new Error(`${value}`)) : resolve;\n this._timer = setTimeout(callback, t);\n });\n }\n\n clear(): void {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n }\n\n wrap<T>(promise: Promise<T>, t: number, value?: T): Promise<T> {\n const wrappedPromise = this._promiseFinally(promise, () => this.clear());\n const timer = this.set(t, value);\n return Promise.race([wrappedPromise, timer]);\n }\n\n private _promiseFinally<T>(promise: Promise<T>, fn: (...args: any[]) => void): Promise<T> {\n const success = (result: T): T => {\n fn();\n return result;\n };\n const error = (e: Error): Promise<never> => {\n fn();\n return Promise.reject(e);\n };\n return Promise.resolve(promise).then(success, error);\n }\n\n static set<T>(t: number, value?: T): Promise<T> {\n return new Timeout().set(t, value);\n }\n\n static wrap<T>(promise: Promise<T>, t: number, value?: T): Promise<T> {\n return new Timeout().wrap(promise, t, value);\n }\n}\n\n/**\n * A wrapper for setTimeout that resolves a promise after t milliseconds.\n * @param delayInMs - The number of milliseconds to be delayed.\n * @param abortSignal - The abortSignal associated with containing operation.\n * @param abortErrorMsg - The abort error message associated with containing operation.\n * @param value - The value to be resolved with after a timeout of t milliseconds.\n * @returns - Resolved promise\n */\nexport async function delay<T>(\n delayInMs: number,\n abortSignal?: AbortSignalLike,\n abortErrorMsg?: string,\n value?: T,\n): Promise<T | void> {\n await wrapperDelay(delayInMs, {\n abortSignal: abortSignal,\n abortErrorMsg: abortErrorMsg,\n });\n if (value !== undefined) {\n return value;\n }\n}\n\n/**\n * Checks if an address is localhost.\n * @param address - The address to check.\n * @returns true if the address is localhost, false otherwise.\n */\nexport function isLoopbackAddress(address: string): boolean {\n return /^(.*:\\/\\/)?(127\\.[\\d.]+|[0:]+1|localhost)/.test(address.toLowerCase());\n}\n\n/**\n * @internal\n *\n * Generates a random number between the given interval\n * @param min - Min number of the range (inclusive).\n * @param max - Max number of the range (inclusive).\n */\nexport function randomNumberFromInterval(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\n\n/**\n * @internal\n *\n * Type declaration for a Function type where T is the input to the function and V is the output\n * of the function.\n */\nexport type Func<T, V> = (a: T) => V;\n\n/**\n * @internal\n *\n * Executes an array of promises sequentially. Inspiration of this method is here:\n * https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises!\n *\n * @param promiseFactories - An array of promise factories(A function that return a promise)\n *\n * @param kickstart - Input to the first promise that is used to kickstart the promise chain.\n * If not provided then the promise chain starts with undefined.\n *\n * @returns A chain of resolved or rejected promises\n */\nexport function executePromisesSequentially(\n promiseFactories: Array<any>,\n kickstart?: unknown,\n): Promise<any> {\n let result = Promise.resolve(kickstart);\n promiseFactories.forEach((promiseFactory) => {\n result = result.then(promiseFactory);\n });\n return result;\n}\n\n/**\n * @internal\n *\n * Determines whether the given connection string is an iothub connection string.\n * @param connectionString - The connection string.\n * @returns boolean.\n */\nexport function isIotHubConnectionString(connectionString: string): boolean {\n const cs = String(connectionString);\n\n let result: boolean = false;\n const model: any = parseConnectionString<any>(cs);\n if (model && model.HostName && model.SharedAccessKey && model.SharedAccessKeyName) {\n result = true;\n }\n return result;\n}\n\n/**\n * @internal\n */\nexport function isString(s: unknown): s is string {\n return typeof s === \"string\";\n}\n\n/**\n * @internal\n */\nexport function isNumber(n: unknown): n is number {\n return typeof n === \"number\";\n}\n\n/**\n * @internal\n * Safely read a property from the global object by key.\n * Returns undefined if the property or global object is unavailable.\n */\nexport function getGlobalProperty<T = any>(key: string): T | undefined {\n try {\n const g: any = globalThis as any;\n return g?.[key] as T | undefined;\n } catch {\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/util/utils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2BzD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAI,gBAAwB;IAC/D,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjD,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEnB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,qBAAqB;YACrB,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAyB,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAyB,IAAI,wBAAwB,EAAE,CAAC;AAE3F;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,SAAiB,EACjB,WAA6B,EAC7B,aAAsB,EACtB,KAAS;IAET,MAAM,YAAY,CAAC,SAAS,EAAE;QAC5B,WAAW,EAAE,WAAW;QACxB,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAU,GAAW;IACpD,IAAI,CAAC;QACH,MAAM,CAAC,GAAQ,UAAiB,CAAC;QACjC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAkB,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { CancellableAsyncLock } from \"./lock.js\";\nimport { CancellableAsyncLockImpl } from \"./lock.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { WebSocketImpl } from \"rhea-promise\";\nimport { delay as wrapperDelay } from \"@azure/core-util\";\n\n/**\n * Options to configure the channelling of the AMQP connection over Web Sockets.\n */\nexport interface WebSocketOptions {\n /**\n * The WebSocket constructor used to create an AMQP connection over a WebSocket.\n * This option should be provided in the below scenarios:\n * - The TCP port 5671 which is that is used by the AMQP connection to Event Hubs is blocked in your environment.\n * - Your application needs to be run behind a proxy server.\n * - Your application needs to run in the browser and you want to provide your own choice of Websocket implementation\n * instead of the built-in WebSocket in the browser.\n */\n webSocket?: WebSocketImpl;\n /**\n * Options to be passed to the WebSocket constructor when the underlying `rhea` library instantiates\n * the WebSocket.\n */\n webSocketConstructorOptions?: any;\n}\n\n/**\n * Defines an object with possible properties defined in T.\n */\nexport type ParsedOutput<T> = { [P in keyof T]: T[P] };\n\n/**\n * Parses the connection string and returns an object of type T.\n *\n * Connection strings have the following syntax:\n *\n * ConnectionString ::= `Part { \";\" Part } [ \";\" ] [ WhiteSpace ]`\n * Part ::= [ PartLiteral [ \"=\" PartLiteral ] ]\n * PartLiteral ::= [ WhiteSpace ] Literal [ WhiteSpace ]\n * Literal ::= ? any sequence of characters except ; or = or WhiteSpace ?\n * WhiteSpace ::= ? all whitespace characters including `\\r` and `\\n` ?\n *\n * @param connectionString - The connection string to be parsed.\n * @returns ParsedOutput<T>.\n */\nexport function parseConnectionString<T>(connectionString: string): ParsedOutput<T> {\n const output: Record<string, string> = {};\n const parts = connectionString.trim().split(\";\");\n\n for (let part of parts) {\n part = part.trim();\n\n if (part === \"\") {\n // parts can be empty\n continue;\n }\n\n const splitIndex = part.indexOf(\"=\");\n if (splitIndex === -1) {\n throw new Error(\n \"Connection string malformed: each part of the connection string must have an `=` assignment.\",\n );\n }\n\n const key = part.substring(0, splitIndex).trim();\n if (key === \"\") {\n throw new Error(\"Connection string malformed: missing key for assignment\");\n }\n\n const value = part.substring(splitIndex + 1).trim();\n\n output[key] = value;\n }\n\n return output as ParsedOutput<T>;\n}\n\n/**\n * The cancellable async lock instance.\n */\nexport const defaultCancellableLock: CancellableAsyncLock = new CancellableAsyncLockImpl();\n\n/**\n * A wrapper for setTimeout that resolves a promise after t milliseconds.\n * @param delayInMs - The number of milliseconds to be delayed.\n * @param abortSignal - The abortSignal associated with containing operation.\n * @param abortErrorMsg - The abort error message associated with containing operation.\n * @param value - The value to be resolved with after a timeout of t milliseconds.\n * @returns - Resolved promise\n */\nexport async function delay<T>(\n delayInMs: number,\n abortSignal?: AbortSignalLike,\n abortErrorMsg?: string,\n value?: T,\n): Promise<T | void> {\n await wrapperDelay(delayInMs, {\n abortSignal: abortSignal,\n abortErrorMsg: abortErrorMsg,\n });\n if (value !== undefined) {\n return value;\n }\n}\n\n/**\n * Checks if an address is localhost.\n * @param address - The address to check.\n * @returns true if the address is localhost, false otherwise.\n */\nexport function isLoopbackAddress(address: string): boolean {\n return /^(.*:\\/\\/)?(127\\.[\\d.]+|[0:]+1|localhost)/.test(address.toLowerCase());\n}\n\n/**\n * @internal\n */\nexport function isString(s: unknown): s is string {\n return typeof s === \"string\";\n}\n\n/**\n * @internal\n */\nexport function isNumber(n: unknown): n is number {\n return typeof n === \"number\";\n}\n\n/**\n * @internal\n * Safely read a property from the global object by key.\n * Returns undefined if the property or global object is unavailable.\n */\nexport function getGlobalProperty<T = any>(key: string): T | undefined {\n try {\n const g: any = globalThis as any;\n return g?.[key] as T | undefined;\n } catch {\n return undefined;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@azure/core-amqp",
3
3
  "sdk-type": "client",
4
- "version": "4.4.2-alpha.20260311.2",
4
+ "version": "4.5.0",
5
5
  "description": "Common library for amqp based azure sdks like @azure/event-hubs.",
6
6
  "author": "Microsoft Corporation",
7
7
  "license": "MIT",
@@ -43,19 +43,23 @@
43
43
  "LICENSE"
44
44
  ],
45
45
  "engines": {
46
- "node": ">=20.0.0"
46
+ "node": ">=22.0.0"
47
47
  },
48
- "homepage": "https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-amqp/README.md",
48
+ "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/core-amqp/README.md",
49
49
  "sideEffects": false,
50
- "repository": "github:Azure/azure-sdk-for-js",
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "git+https://github.com/Azure/azure-sdk-for-js",
53
+ "directory": "sdk/core/core-amqp"
54
+ },
51
55
  "bugs": {
52
56
  "url": "https://github.com/Azure/azure-sdk-for-js/issues"
53
57
  },
54
58
  "dependencies": {
55
- "@azure/abort-controller": ">=2.1.3-alpha <2.1.3-alphb",
56
- "@azure/core-auth": ">=1.10.2-alpha <1.10.2-alphb",
57
- "@azure/core-util": ">=1.13.2-alpha <1.13.2-alphb",
58
- "@azure/logger": ">=1.3.1-alpha <1.3.1-alphb",
59
+ "@azure/abort-controller": "^2.1.2",
60
+ "@azure/core-auth": "^1.10.0",
61
+ "@azure/core-util": "^1.13.0",
62
+ "@azure/logger": "^1.3.0",
59
63
  "buffer": "^6.0.3",
60
64
  "events": "^3.3.0",
61
65
  "process": "^0.11.10",
@@ -67,27 +71,40 @@
67
71
  "devDependencies": {
68
72
  "@rollup/plugin-inject": "^5.0.5",
69
73
  "@types/debug": "^4.1.12",
70
- "@types/node": "^20.19.25",
74
+ "@types/node": "^22.0.0",
75
+ "@types/react": "^19.2.14",
71
76
  "@types/ws": "^8.5.10",
72
- "@vitest/browser-playwright": "^4.0.8",
73
- "@vitest/coverage-istanbul": "^4.0.8",
77
+ "@vitest/browser-playwright": "^4.1.2",
78
+ "@vitest/coverage-istanbul": "^4.1.2",
74
79
  "cross-env": "^10.1.0",
75
80
  "debug": "^4.3.4",
76
81
  "eslint": "^9.39.1",
77
- "playwright": "^1.56.1",
78
- "prettier": "^3.6.2",
82
+ "playwright": "^1.60.0",
83
+ "prettier": "^3.9.1",
84
+ "react-native": "^0.84.1",
79
85
  "rimraf": "^6.1.0",
80
- "typescript": "~5.9.3",
81
- "vitest": "^4.0.8",
86
+ "typescript": "~6.0.2",
87
+ "vitest": "^4.1.2",
82
88
  "ws": "^8.17.0",
83
- "@azure-tools/vite-plugin-browser-test-map": "^1.0.0",
84
- "@azure/eslint-plugin-azure-sdk": "^3.0.0",
85
- "@azure/dev-tool": "^1.0.0"
89
+ "@azure/dev-tool": "^1.0.0",
90
+ "@azure/eslint-plugin-azure-sdk": "^3.0.0"
86
91
  },
87
92
  "//metadata": {
88
93
  "migrationDate": "2023-03-08T18:36:03.000Z"
89
94
  },
90
95
  "module": "./dist/esm/index.js",
96
+ "imports": {
97
+ "#platform/checkNetworkConnection": {
98
+ "browser": "./src/util/checkNetworkConnection-web.mts",
99
+ "react-native": "./src/util/checkNetworkConnection-web.mts",
100
+ "default": "./src/util/checkNetworkConnection.ts"
101
+ },
102
+ "#platform/runtimeInfo": {
103
+ "browser": "./src/util/runtimeInfo-browser.mts",
104
+ "react-native": "./src/util/runtimeInfo-react-native.mts",
105
+ "default": "./src/util/runtimeInfo.ts"
106
+ }
107
+ },
91
108
  "scripts": {
92
109
  "build": "npm run clean && dev-tool run build-package && dev-tool run extract-api",
93
110
  "build:samples": "echo Skipped.",
@@ -99,9 +116,9 @@
99
116
  "lint": "eslint package.json src test",
100
117
  "lint:fix": "eslint package.json src test --fix --fix-type [problem,suggestion]",
101
118
  "pack": "pnpm pack 2>&1",
102
- "test": "npm run test:node && npm run test:browser",
103
- "test:browser": "npm run clean && dev-tool run build-package && dev-tool run build-test && dev-tool run test:vitest --no-test-proxy --browser",
104
- "test:node": "dev-tool run build-test --no-browser-test && dev-tool run test:vitest --no-test-proxy",
119
+ "test": "tsc -b --noEmit && npm run test:node && npm run test:browser",
120
+ "test:browser": "dev-tool run test:vitest --no-test-proxy --browser",
121
+ "test:node": "dev-tool run test:vitest --no-test-proxy",
105
122
  "update-snippets": "dev-tool run update-snippets"
106
123
  }
107
124
  }
@@ -1 +0,0 @@
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,CAAC,KAAa;IAClD,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(_host: string): Promise<boolean> {\n return Promise.resolve(self.navigator.onLine);\n}\n"]}
@@ -1,2 +0,0 @@
1
- export * from "./checkNetworkConnection.common.js";
2
- //# sourceMappingURL=checkNetworkConnection.d.ts.map
@@ -1,4 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
- export * from "./checkNetworkConnection.common.js";
4
- //# sourceMappingURL=checkNetworkConnection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkNetworkConnection.js","sourceRoot":"","sources":["../../../src/util/checkNetworkConnection.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,cAAc,oCAAoC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport * from \"./checkNetworkConnection.common.js\";\n"]}
@@ -1,2 +0,0 @@
1
- export declare function signString(key: string, toSign: string): Promise<string>;
2
- //# sourceMappingURL=hmacSha256.common.d.ts.map
@@ -1,11 +0,0 @@
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
@@ -1 +0,0 @@
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,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IAE9D,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 = { 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 +0,0 @@
1
- {"version":3,"file":"runtimeInfo.js","sourceRoot":"","sources":["../../../src/util/runtimeInfo.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,uBAAuB,cAAc,EAAE,GAAG,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,WAAW,cAAc,EAAE,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc;IACrB,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,OAAO,SAAS,CAAC,UAAU,CAAC;AAC9B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Returns information about the platform this function is being run on.\n * @internal\n */\nexport function getPlatformInfo(): string {\n return `(javascript-Browser-${getReleaseInfo()})`;\n}\n\n/**\n * Returns information about Node.js this function is being run on.\n * @internal\n */\nexport function getFrameworkInfo(): string {\n return `Browser/${getReleaseInfo()}`;\n}\n\n/**\n * @internal\n *\n * @returns\n */\nfunction getReleaseInfo(): string {\n if (typeof self === \"undefined\") {\n return \"\";\n }\n\n const navigator = self.navigator;\n return navigator.appVersion;\n}\n"]}
@@ -1,6 +0,0 @@
1
- /**
2
- * Checks whether a network connection is detected.
3
- * @internal
4
- */
5
- export declare function checkNetworkConnection(_host: string): Promise<boolean>;
6
- //# sourceMappingURL=checkNetworkConnection.common.d.ts.map