@azure/core-amqp 4.4.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.
- package/dist/browser/ConnectionContextBase.js +1 -1
- package/dist/browser/ConnectionContextBase.js.map +1 -1
- package/dist/browser/retry.js +1 -1
- package/dist/browser/retry.js.map +1 -1
- package/dist/browser/util/{checkNetworkConnection.common.d.ts → checkNetworkConnection-web.d.mts} +1 -1
- package/dist/{esm/util/checkNetworkConnection.common.js → browser/util/checkNetworkConnection-web.mjs} +2 -2
- package/dist/browser/util/checkNetworkConnection-web.mjs.map +1 -0
- package/dist/browser/util/hmacSha256.d.ts +1 -1
- package/dist/browser/util/hmacSha256.js +9 -1
- package/dist/browser/util/hmacSha256.js.map +1 -1
- package/dist/browser/util/{runtimeInfo.d.ts → runtimeInfo-browser.d.mts} +1 -1
- package/dist/browser/util/{runtimeInfo.js → runtimeInfo-browser.mjs} +1 -1
- package/dist/browser/util/runtimeInfo-browser.mjs.map +1 -0
- package/dist/commonjs/ConnectionContextBase.js.map +1 -1
- package/dist/commonjs/retry.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/commonjs/util/hmacSha256.js +17 -3
- package/dist/commonjs/util/hmacSha256.js.map +2 -2
- package/dist/esm/ConnectionContextBase.js.map +1 -1
- package/dist/esm/retry.js.map +1 -1
- package/dist/esm/util/hmacSha256.js +7 -3
- package/dist/esm/util/hmacSha256.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/retry.js +1 -1
- package/dist/react-native/retry.js.map +1 -1
- package/dist/react-native/util/{checkNetworkConnection.common.d.ts → checkNetworkConnection-web.d.mts} +1 -1
- package/dist/{browser/util/checkNetworkConnection.common.js → react-native/util/checkNetworkConnection-web.mjs} +2 -2
- package/dist/react-native/util/checkNetworkConnection-web.mjs.map +1 -0
- package/dist/react-native/util/hmacSha256.d.ts +1 -1
- package/dist/react-native/util/hmacSha256.js +9 -1
- package/dist/react-native/util/hmacSha256.js.map +1 -1
- package/dist/react-native/util/{runtimeInfo.d.ts → runtimeInfo-react-native.d.mts} +1 -1
- package/dist/react-native/util/{runtimeInfo.js → runtimeInfo-react-native.mjs} +1 -1
- package/dist/react-native/util/runtimeInfo-react-native.mjs.map +1 -0
- package/package.json +27 -12
- package/dist/browser/util/checkNetworkConnection.common.js.map +0 -1
- package/dist/browser/util/checkNetworkConnection.d.ts +0 -2
- package/dist/browser/util/checkNetworkConnection.js +0 -4
- package/dist/browser/util/checkNetworkConnection.js.map +0 -1
- package/dist/browser/util/hmacSha256.common.d.ts +0 -2
- package/dist/browser/util/hmacSha256.common.js +0 -11
- package/dist/browser/util/hmacSha256.common.js.map +0 -1
- package/dist/browser/util/runtimeInfo.js.map +0 -1
- package/dist/commonjs/util/checkNetworkConnection.common.d.ts +0 -6
- package/dist/commonjs/util/checkNetworkConnection.common.js +0 -30
- package/dist/commonjs/util/checkNetworkConnection.common.js.map +0 -7
- package/dist/commonjs/util/hmacSha256.common.d.ts +0 -2
- package/dist/commonjs/util/hmacSha256.common.js +0 -45
- package/dist/commonjs/util/hmacSha256.common.js.map +0 -7
- package/dist/esm/util/checkNetworkConnection.common.d.ts +0 -6
- package/dist/esm/util/checkNetworkConnection.common.js.map +0 -1
- package/dist/esm/util/hmacSha256.common.d.ts +0 -2
- package/dist/esm/util/hmacSha256.common.js +0 -11
- package/dist/esm/util/hmacSha256.common.js.map +0 -1
- package/dist/react-native/util/checkNetworkConnection.common.js +0 -10
- package/dist/react-native/util/checkNetworkConnection.common.js.map +0 -1
- package/dist/react-native/util/checkNetworkConnection.d.ts +0 -2
- package/dist/react-native/util/checkNetworkConnection.js +0 -4
- package/dist/react-native/util/checkNetworkConnection.js.map +0 -1
- package/dist/react-native/util/hmacSha256.common.d.ts +0 -2
- package/dist/react-native/util/hmacSha256.common.js +0 -11
- package/dist/react-native/util/hmacSha256.common.js.map +0 -1
- package/dist/react-native/util/runtimeInfo.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
import { Connection, generate_uuid, } from "rhea-promise";
|
|
4
|
-
import { getFrameworkInfo, getPlatformInfo } from "./util/runtimeInfo.
|
|
4
|
+
import { getFrameworkInfo, getPlatformInfo } from "./util/runtimeInfo-browser.mjs";
|
|
5
5
|
import { getGlobalProperty } from "./util/utils.js";
|
|
6
6
|
import { CbsClient } from "./cbs.js";
|
|
7
7
|
import { ConnectionConfig } from "./connectionConfig/connectionConfig.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionContextBase.js","sourceRoot":"","sources":["../../src/ConnectionContextBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AwaitableSender, Receiver, Sender } from \"rhea-promise\";\nimport {\n Connection,\n type ConnectionOptions,\n type CreateAwaitableSenderOptions,\n type CreateReceiverOptions,\n type CreateSenderOptions,\n generate_uuid,\n} from \"rhea-promise\";\nimport { getFrameworkInfo, getPlatformInfo } from \"./util/runtimeInfo.js\";\nimport { getGlobalProperty } from \"./util/utils.js\";\nimport { CbsClient } from \"./cbs.js\";\nimport { ConnectionConfig } from \"./connectionConfig/connectionConfig.js\";\nimport { Constants } from \"./util/constants.js\";\nimport { isNodeLike } from \"@azure/core-util\";\n\n/**\n * Provides contextual information like the underlying amqp connection, cbs session, tokenProvider,\n * Connection config, data transformer, etc.\n */\nexport interface ConnectionContextBase {\n /**\n * The EventHub connection config that is created after\n * parsing the connection string.\n */\n readonly config: ConnectionConfig;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for establishing an amqp connection per client if one does not exist.\n */\n connectionLock: string;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for negotiating cbs claim by an entity on that connection.\n */\n negotiateClaimLock: string;\n /**\n * The underlying AMQP connection.\n */\n connection: Connection;\n /**\n * The amqp connection id that uniquely identifies the\n * connection within a process.\n */\n connectionId: string;\n /**\n * Indicates whether the close() method was\n * called on the connection object.\n */\n wasConnectionCloseCalled: boolean;\n /**\n * A reference to the cbs session ($cbs endpoint) on the\n * underlying AMQP connection for the EventHub Client.\n */\n cbsSession: CbsClient;\n /**\n * Updates the context to use a new underlying AMQP connection and new cbs session.\n */\n refreshConnection: () => void;\n}\n\n/**\n * Defines the properties that need to be set while establishing the AMQP connection.\n */\nexport interface ConnectionProperties {\n /**\n * The name of the product that will be populated as the AMQP\n * connection property. Example: \"MSJSClient\".\n */\n product: string;\n /**\n * The version of the package/sdk that is making the AMQP connection.\n */\n version: string;\n /**\n * The userAgent that needs to be set as the AMQP connection\n * property. Example: `\"/js-service-bus\"` or `\"/js-event-hubs,/js-event-processor-host=1.0.0\"`.\n */\n userAgent: string;\n}\n\n/**\n * Describes the parameters that can be provided to create the base connection context.\n */\nexport interface CreateConnectionContextBaseParameters {\n /**\n * The connection config that is created by parsing the\n * connection string.\n */\n config: ConnectionConfig;\n /**\n * Properties to be provided while creating\n * the AMQP connection.\n */\n connectionProperties: ConnectionProperties;\n /**\n * Determines whether entity path should be a part of\n * the connection config. If `true` it must be present, `false` otherwise. Default value false.\n */\n isEntityPathRequired?: boolean;\n /**\n * The duration in which the promise should\n * complete (resolve/reject). If it is not completed, then the Promise will be rejected after\n * timeout occurs. Default: `60000 milliseconds`.\n */\n operationTimeoutInMs?: number;\n}\n\nconst maxListenerLimit = 1000;\n\nclass CoreAmqpConnection extends Connection {\n /**\n * Creates an amqp sender link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a sender link.\n * @returns Promise<Sender>.\n */\n async createSender(options?: CreateSenderOptions): Promise<Sender> {\n const sender = await super.createSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an awaitable amqp sender. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create an awaitable sender link.\n * - If `onError` and `onSessionError` handlers are not provided then the `AwaitableSender` will\n * clear the timer and reject the Promise for all the entries of inflight send operation in its\n * `deliveryDispositionMap`.\n * - If the user is handling the reconnection of sender link or the underlying connection in it's\n * app, then the `onError` and `onSessionError` handlers must be provided by the user and (s)he\n * shall be responsible of clearing the `deliveryDispositionMap` of inflight `send()` operation.\n *\n * @returns Promise<AwaitableSender>.\n */\n async createAwaitableSender(options?: CreateAwaitableSenderOptions): Promise<AwaitableSender> {\n const sender = await super.createAwaitableSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an amqp receiver link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a receiver link.\n * @returns Promise<Receiver>.\n */\n async createReceiver(options?: CreateReceiverOptions): Promise<Receiver> {\n const receiver = await super.createReceiver(options);\n receiver.setMaxListeners(maxListenerLimit);\n return receiver;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- renaming constant would be a breaking change.\nexport const ConnectionContextBase = {\n /**\n * Creates the base connection context.\n * @param parameters - Parameters to be provided to create\n * the base connection context.\n */\n create(parameters: CreateConnectionContextBaseParameters): ConnectionContextBase {\n ConnectionConfig.validate(parameters.config, {\n isEntityPathRequired: parameters.isEntityPathRequired || false,\n });\n const userAgent = parameters.connectionProperties.userAgent;\n if (userAgent.length > Constants.maxUserAgentLength) {\n throw new Error(\n `The user-agent string cannot be more than ${Constants.maxUserAgentLength} characters in length.` +\n `The given user-agent string is: ${userAgent} with length: ${userAgent.length}`,\n );\n }\n\n const connectionOptions: ConnectionOptions = {\n transport: (parameters.config.useDevelopmentEmulator ? Constants.TCP : Constants.TLS) as any,\n host: parameters.config.host,\n hostname: parameters.config.amqpHostname ?? parameters.config.host,\n username: parameters.config.sharedAccessKeyName,\n port: parameters.config.port ?? (parameters.config.useDevelopmentEmulator ? 5672 : 5671),\n reconnect: false,\n properties: {\n product: parameters.connectionProperties.product,\n version: parameters.connectionProperties.version,\n \"user-agent\": userAgent,\n platform: getPlatformInfo(),\n framework: getFrameworkInfo(),\n },\n idle_time_out: Constants.defaultConnectionIdleTimeoutInMs,\n operationTimeoutInSeconds: parameters.operationTimeoutInMs\n ? parameters.operationTimeoutInMs / 1000\n : undefined,\n };\n\n const globalWebSocket = (!isNodeLike && getGlobalProperty(\"WebSocket\")) || undefined;\n if (parameters.config.webSocket || globalWebSocket) {\n const socket = parameters.config.webSocket || globalWebSocket;\n const host = parameters.config.host;\n const endpoint = parameters.config.webSocketEndpointPath || \"\";\n const socketOptions = parameters.config.webSocketConstructorOptions || {};\n const port = parameters.config.port ?? 443;\n\n connectionOptions.webSocketOptions = {\n webSocket: socket,\n url: `wss://${host}:${port}/${endpoint}`,\n protocol: [\"AMQPWSB10\"],\n options: socketOptions,\n };\n }\n\n const connection = new CoreAmqpConnection(connectionOptions);\n const connectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n const connectionContextBase: ConnectionContextBase = {\n wasConnectionCloseCalled: false,\n connectionLock: connectionLock,\n negotiateClaimLock: `${Constants.negotiateClaim}-${generate_uuid()}`,\n connection: connection,\n connectionId: connection.id,\n cbsSession: new CbsClient(connection, connectionLock),\n config: parameters.config,\n refreshConnection() {\n const newConnection = new CoreAmqpConnection(connectionOptions);\n const newConnectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n this.wasConnectionCloseCalled = false;\n this.connectionLock = newConnectionLock;\n this.negotiateClaimLock = `${Constants.negotiateClaim} - ${generate_uuid()}`;\n this.connection = newConnection;\n this.connectionId = newConnection.id;\n this.cbsSession = new CbsClient(newConnection, newConnectionLock);\n },\n };\n\n return connectionContextBase;\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"ConnectionContextBase.js","sourceRoot":"","sources":["../../src/ConnectionContextBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AwaitableSender, Receiver, Sender } from \"rhea-promise\";\nimport {\n Connection,\n type ConnectionOptions,\n type CreateAwaitableSenderOptions,\n type CreateReceiverOptions,\n type CreateSenderOptions,\n generate_uuid,\n} from \"rhea-promise\";\nimport { getFrameworkInfo, getPlatformInfo } from \"#platform/runtimeInfo\";\nimport { getGlobalProperty } from \"./util/utils.js\";\nimport { CbsClient } from \"./cbs.js\";\nimport { ConnectionConfig } from \"./connectionConfig/connectionConfig.js\";\nimport { Constants } from \"./util/constants.js\";\nimport { isNodeLike } from \"@azure/core-util\";\n\n/**\n * Provides contextual information like the underlying amqp connection, cbs session, tokenProvider,\n * Connection config, data transformer, etc.\n */\nexport interface ConnectionContextBase {\n /**\n * The EventHub connection config that is created after\n * parsing the connection string.\n */\n readonly config: ConnectionConfig;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for establishing an amqp connection per client if one does not exist.\n */\n connectionLock: string;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for negotiating cbs claim by an entity on that connection.\n */\n negotiateClaimLock: string;\n /**\n * The underlying AMQP connection.\n */\n connection: Connection;\n /**\n * The amqp connection id that uniquely identifies the\n * connection within a process.\n */\n connectionId: string;\n /**\n * Indicates whether the close() method was\n * called on the connection object.\n */\n wasConnectionCloseCalled: boolean;\n /**\n * A reference to the cbs session ($cbs endpoint) on the\n * underlying AMQP connection for the EventHub Client.\n */\n cbsSession: CbsClient;\n /**\n * Updates the context to use a new underlying AMQP connection and new cbs session.\n */\n refreshConnection: () => void;\n}\n\n/**\n * Defines the properties that need to be set while establishing the AMQP connection.\n */\nexport interface ConnectionProperties {\n /**\n * The name of the product that will be populated as the AMQP\n * connection property. Example: \"MSJSClient\".\n */\n product: string;\n /**\n * The version of the package/sdk that is making the AMQP connection.\n */\n version: string;\n /**\n * The userAgent that needs to be set as the AMQP connection\n * property. Example: `\"/js-service-bus\"` or `\"/js-event-hubs,/js-event-processor-host=1.0.0\"`.\n */\n userAgent: string;\n}\n\n/**\n * Describes the parameters that can be provided to create the base connection context.\n */\nexport interface CreateConnectionContextBaseParameters {\n /**\n * The connection config that is created by parsing the\n * connection string.\n */\n config: ConnectionConfig;\n /**\n * Properties to be provided while creating\n * the AMQP connection.\n */\n connectionProperties: ConnectionProperties;\n /**\n * Determines whether entity path should be a part of\n * the connection config. If `true` it must be present, `false` otherwise. Default value false.\n */\n isEntityPathRequired?: boolean;\n /**\n * The duration in which the promise should\n * complete (resolve/reject). If it is not completed, then the Promise will be rejected after\n * timeout occurs. Default: `60000 milliseconds`.\n */\n operationTimeoutInMs?: number;\n}\n\nconst maxListenerLimit = 1000;\n\nclass CoreAmqpConnection extends Connection {\n /**\n * Creates an amqp sender link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a sender link.\n * @returns Promise<Sender>.\n */\n async createSender(options?: CreateSenderOptions): Promise<Sender> {\n const sender = await super.createSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an awaitable amqp sender. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create an awaitable sender link.\n * - If `onError` and `onSessionError` handlers are not provided then the `AwaitableSender` will\n * clear the timer and reject the Promise for all the entries of inflight send operation in its\n * `deliveryDispositionMap`.\n * - If the user is handling the reconnection of sender link or the underlying connection in it's\n * app, then the `onError` and `onSessionError` handlers must be provided by the user and (s)he\n * shall be responsible of clearing the `deliveryDispositionMap` of inflight `send()` operation.\n *\n * @returns Promise<AwaitableSender>.\n */\n async createAwaitableSender(options?: CreateAwaitableSenderOptions): Promise<AwaitableSender> {\n const sender = await super.createAwaitableSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an amqp receiver link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a receiver link.\n * @returns Promise<Receiver>.\n */\n async createReceiver(options?: CreateReceiverOptions): Promise<Receiver> {\n const receiver = await super.createReceiver(options);\n receiver.setMaxListeners(maxListenerLimit);\n return receiver;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- renaming constant would be a breaking change.\nexport const ConnectionContextBase = {\n /**\n * Creates the base connection context.\n * @param parameters - Parameters to be provided to create\n * the base connection context.\n */\n create(parameters: CreateConnectionContextBaseParameters): ConnectionContextBase {\n ConnectionConfig.validate(parameters.config, {\n isEntityPathRequired: parameters.isEntityPathRequired || false,\n });\n const userAgent = parameters.connectionProperties.userAgent;\n if (userAgent.length > Constants.maxUserAgentLength) {\n throw new Error(\n `The user-agent string cannot be more than ${Constants.maxUserAgentLength} characters in length.` +\n `The given user-agent string is: ${userAgent} with length: ${userAgent.length}`,\n );\n }\n\n const connectionOptions: ConnectionOptions = {\n transport: (parameters.config.useDevelopmentEmulator ? Constants.TCP : Constants.TLS) as any,\n host: parameters.config.host,\n hostname: parameters.config.amqpHostname ?? parameters.config.host,\n username: parameters.config.sharedAccessKeyName,\n port: parameters.config.port ?? (parameters.config.useDevelopmentEmulator ? 5672 : 5671),\n reconnect: false,\n properties: {\n product: parameters.connectionProperties.product,\n version: parameters.connectionProperties.version,\n \"user-agent\": userAgent,\n platform: getPlatformInfo(),\n framework: getFrameworkInfo(),\n },\n idle_time_out: Constants.defaultConnectionIdleTimeoutInMs,\n operationTimeoutInSeconds: parameters.operationTimeoutInMs\n ? parameters.operationTimeoutInMs / 1000\n : undefined,\n };\n\n const globalWebSocket = (!isNodeLike && getGlobalProperty(\"WebSocket\")) || undefined;\n if (parameters.config.webSocket || globalWebSocket) {\n const socket = parameters.config.webSocket || globalWebSocket;\n const host = parameters.config.host;\n const endpoint = parameters.config.webSocketEndpointPath || \"\";\n const socketOptions = parameters.config.webSocketConstructorOptions || {};\n const port = parameters.config.port ?? 443;\n\n connectionOptions.webSocketOptions = {\n webSocket: socket,\n url: `wss://${host}:${port}/${endpoint}`,\n protocol: [\"AMQPWSB10\"],\n options: socketOptions,\n };\n }\n\n const connection = new CoreAmqpConnection(connectionOptions);\n const connectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n const connectionContextBase: ConnectionContextBase = {\n wasConnectionCloseCalled: false,\n connectionLock: connectionLock,\n negotiateClaimLock: `${Constants.negotiateClaim}-${generate_uuid()}`,\n connection: connection,\n connectionId: connection.id,\n cbsSession: new CbsClient(connection, connectionLock),\n config: parameters.config,\n refreshConnection() {\n const newConnection = new CoreAmqpConnection(connectionOptions);\n const newConnectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n this.wasConnectionCloseCalled = false;\n this.connectionLock = newConnectionLock;\n this.negotiateClaimLock = `${Constants.negotiateClaim} - ${generate_uuid()}`;\n this.connection = newConnection;\n this.connectionId = newConnection.id;\n this.cbsSession = new CbsClient(newConnection, newConnectionLock);\n },\n };\n\n return connectionContextBase;\n },\n};\n"]}
|
package/dist/browser/retry.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* eslint-disable eqeqeq */
|
|
4
4
|
import { translate } from "./errors.js";
|
|
5
5
|
import { Constants } from "./util/constants.js";
|
|
6
|
-
import { checkNetworkConnection } from "./util/checkNetworkConnection.
|
|
6
|
+
import { checkNetworkConnection } from "./util/checkNetworkConnection-web.mjs";
|
|
7
7
|
import { delay } from "@azure/core-util";
|
|
8
8
|
import { logger } from "./log.js";
|
|
9
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,2BAA2B;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;GAGG;AACH,SAAS,UAAU,CAAC,GAAQ;IAC1B,IAAI,MAAM,GAAY,KAAK,CAAC;IAC5B,IACE,GAAG;QACH,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;QAC1B,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS;QAChC,OAAO,GAAG,CAAC,cAAc,KAAK,SAAS;QACvC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAC9B,CAAC;QACD,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,uDAAW,CAAA;IACX,2CAAK,CAAA;AACP,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,kBAUX;AAVD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,+CAAyB,CAAA;IACzB,+CAAyB,CAAA;IACzB,mDAA6B,CAAA;IAC7B,+CAAyB,CAAA;IACzB,iDAA2B,CAAA;IAC3B,uDAAiC,CAAA;IACjC,yCAAmB,CAAA;IACnB,sDAAgC,CAAA;AAClC,CAAC,EAVW,kBAAkB,KAAlB,kBAAkB,QAU7B;AAoED;;;GAGG;AACH,SAAS,mBAAmB,CAAI,MAAsB;IACpD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACrB,YAAoB,EACpB,cAAsB,EACtB,iBAAyB,EACzB,IAAe;IAEf,IAAI,IAAI,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,gBAAgB,GACpB,cAAc,GAAG,GAAG;YACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC;QAE5E,MAAM,cAAc,GAAG,gBAAgB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAI,MAAsB;IACnD,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,aAAa,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IACpC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QAChC,aAAa,CAAC,YAAY,GAAG,EAAE,CAAC;IAClC,CAAC;IACD,IACE,aAAa,CAAC,YAAY,CAAC,UAAU,IAAI,SAAS;QAClD,aAAa,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,EACzC,CAAC;QACD,aAAa,CAAC,YAAY,CAAC,UAAU,GAAG,SAAS,CAAC,iBAAiB,CAAC;IACtE,CAAC;IACD,IACE,aAAa,CAAC,YAAY,CAAC,cAAc,IAAI,SAAS;QACtD,aAAa,CAAC,YAAY,CAAC,cAAc,GAAG,CAAC,EAC7C,CAAC;QACD,aAAa,CAAC,YAAY,CAAC,cAAc,GAAG,SAAS,CAAC,uCAAuC,CAAC;IAChG,CAAC;IACD,IACE,aAAa,CAAC,YAAY,CAAC,iBAAiB,IAAI,SAAS;QACzD,aAAa,CAAC,YAAY,CAAC,iBAAiB,GAAG,CAAC,EAChD,CAAC;QACD,aAAa,CAAC,YAAY,CAAC,iBAAiB,GAAG,SAAS,CAAC,sCAAsC,CAAC;IAClG,CAAC;IACD,IAAI,aAAa,CAAC,YAAY,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACjD,aAAa,CAAC,YAAY,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,IAAI,MAAW,CAAC;IAChB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,qBAAqB,GAAG,aAAa,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,qBAAqB,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,CAAC,OAAO,CACZ,mCAAmC,EACnC,aAAa,CAAC,YAAY,EAC1B,aAAa,CAAC,aAAa,EAC3B,CAAC,CACF,CAAC;QACF,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;YACzC,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,OAAO,CACZ,kDAAkD,EAClD,aAAa,CAAC,YAAY,EAC1B,aAAa,CAAC,aAAa,EAC3B,CAAC,CACF,CAAC;YACF,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,OAAO,CACZ,kCAAkC,EAClC,aAAa,CAAC,YAAY,EAC1B,aAAa,CAAC,aAAa,EAC3B,MAAM,CACP,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;QAAC,OAAO,IAAI,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAE5B,IACE,CAAE,GAAW,CAAC,SAAS;gBACvB,GAAG,CAAC,IAAI,KAAK,2BAA2B;gBACxC,aAAa,CAAC,cAAc,EAC5B,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBAC/E,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,GAAG,CAAC,IAAI,GAAG,qBAAqB,CAAC;oBAChC,GAAW,CAAC,SAAS,GAAG,IAAI,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,MAAM,CAAC,OAAO,CACZ,uDAAuD,EACvD,aAAa,CAAC,YAAY,EAC1B,aAAa,CAAC,aAAa,EAC3B,CAAC,EACD,GAAG,CACJ,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,IAAK,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAoB,CAAC,SAAS,IAAI,qBAAqB,GAAG,CAAC,EAAE,CAAC;gBAC1F,MAAM,eAAe,GAAG,cAAc,CACpC,CAAC,EACD,aAAa,CAAC,YAAY,CAAC,cAAc,EACzC,aAAa,CAAC,YAAY,CAAC,iBAAiB,EAC5C,aAAa,CAAC,YAAY,CAAC,IAAI,CAChC,CAAC;gBACF,MAAM,CAAC,OAAO,CACZ,6CAA6C,EAC7C,aAAa,CAAC,YAAY,EAC1B,eAAe,EACf,aAAa,CAAC,aAAa,CAC5B,CAAC;gBACF,MAAM,KAAK,CAAC,eAAe,EAAE;oBAC3B,WAAW,EAAE,aAAa,CAAC,WAAW;oBACtC,aAAa,EAAE,qDAAqD;iBACrE,CAAC,CAAC;gBAEH,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;AACH,CAAC","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"]}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
7
7
|
export function checkNetworkConnection(_host) {
|
|
8
|
-
return Promise.resolve(
|
|
8
|
+
return Promise.resolve(globalThis.navigator.onLine);
|
|
9
9
|
}
|
|
10
|
-
//# sourceMappingURL=checkNetworkConnection.
|
|
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
|
|
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
|
-
|
|
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,
|
|
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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeInfo-browser.mjs","sourceRoot":"","sources":["../../../src/util/runtimeInfo-browser.mts"],"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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/ConnectionContextBase.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AwaitableSender, Receiver, Sender } from \"rhea-promise\";\nimport {\n Connection,\n type ConnectionOptions,\n type CreateAwaitableSenderOptions,\n type CreateReceiverOptions,\n type CreateSenderOptions,\n generate_uuid,\n} from \"rhea-promise\";\nimport { getFrameworkInfo, getPlatformInfo } from \"
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AwaitableSender, Receiver, Sender } from \"rhea-promise\";\nimport {\n Connection,\n type ConnectionOptions,\n type CreateAwaitableSenderOptions,\n type CreateReceiverOptions,\n type CreateSenderOptions,\n generate_uuid,\n} from \"rhea-promise\";\nimport { getFrameworkInfo, getPlatformInfo } from \"#platform/runtimeInfo\";\nimport { getGlobalProperty } from \"./util/utils.js\";\nimport { CbsClient } from \"./cbs.js\";\nimport { ConnectionConfig } from \"./connectionConfig/connectionConfig.js\";\nimport { Constants } from \"./util/constants.js\";\nimport { isNodeLike } from \"@azure/core-util\";\n\n/**\n * Provides contextual information like the underlying amqp connection, cbs session, tokenProvider,\n * Connection config, data transformer, etc.\n */\nexport interface ConnectionContextBase {\n /**\n * The EventHub connection config that is created after\n * parsing the connection string.\n */\n readonly config: ConnectionConfig;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for establishing an amqp connection per client if one does not exist.\n */\n connectionLock: string;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for negotiating cbs claim by an entity on that connection.\n */\n negotiateClaimLock: string;\n /**\n * The underlying AMQP connection.\n */\n connection: Connection;\n /**\n * The amqp connection id that uniquely identifies the\n * connection within a process.\n */\n connectionId: string;\n /**\n * Indicates whether the close() method was\n * called on the connection object.\n */\n wasConnectionCloseCalled: boolean;\n /**\n * A reference to the cbs session ($cbs endpoint) on the\n * underlying AMQP connection for the EventHub Client.\n */\n cbsSession: CbsClient;\n /**\n * Updates the context to use a new underlying AMQP connection and new cbs session.\n */\n refreshConnection: () => void;\n}\n\n/**\n * Defines the properties that need to be set while establishing the AMQP connection.\n */\nexport interface ConnectionProperties {\n /**\n * The name of the product that will be populated as the AMQP\n * connection property. Example: \"MSJSClient\".\n */\n product: string;\n /**\n * The version of the package/sdk that is making the AMQP connection.\n */\n version: string;\n /**\n * The userAgent that needs to be set as the AMQP connection\n * property. Example: `\"/js-service-bus\"` or `\"/js-event-hubs,/js-event-processor-host=1.0.0\"`.\n */\n userAgent: string;\n}\n\n/**\n * Describes the parameters that can be provided to create the base connection context.\n */\nexport interface CreateConnectionContextBaseParameters {\n /**\n * The connection config that is created by parsing the\n * connection string.\n */\n config: ConnectionConfig;\n /**\n * Properties to be provided while creating\n * the AMQP connection.\n */\n connectionProperties: ConnectionProperties;\n /**\n * Determines whether entity path should be a part of\n * the connection config. If `true` it must be present, `false` otherwise. Default value false.\n */\n isEntityPathRequired?: boolean;\n /**\n * The duration in which the promise should\n * complete (resolve/reject). If it is not completed, then the Promise will be rejected after\n * timeout occurs. Default: `60000 milliseconds`.\n */\n operationTimeoutInMs?: number;\n}\n\nconst maxListenerLimit = 1000;\n\nclass CoreAmqpConnection extends Connection {\n /**\n * Creates an amqp sender link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a sender link.\n * @returns Promise<Sender>.\n */\n async createSender(options?: CreateSenderOptions): Promise<Sender> {\n const sender = await super.createSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an awaitable amqp sender. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create an awaitable sender link.\n * - If `onError` and `onSessionError` handlers are not provided then the `AwaitableSender` will\n * clear the timer and reject the Promise for all the entries of inflight send operation in its\n * `deliveryDispositionMap`.\n * - If the user is handling the reconnection of sender link or the underlying connection in it's\n * app, then the `onError` and `onSessionError` handlers must be provided by the user and (s)he\n * shall be responsible of clearing the `deliveryDispositionMap` of inflight `send()` operation.\n *\n * @returns Promise<AwaitableSender>.\n */\n async createAwaitableSender(options?: CreateAwaitableSenderOptions): Promise<AwaitableSender> {\n const sender = await super.createAwaitableSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an amqp receiver link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a receiver link.\n * @returns Promise<Receiver>.\n */\n async createReceiver(options?: CreateReceiverOptions): Promise<Receiver> {\n const receiver = await super.createReceiver(options);\n receiver.setMaxListeners(maxListenerLimit);\n return receiver;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- renaming constant would be a breaking change.\nexport const ConnectionContextBase = {\n /**\n * Creates the base connection context.\n * @param parameters - Parameters to be provided to create\n * the base connection context.\n */\n create(parameters: CreateConnectionContextBaseParameters): ConnectionContextBase {\n ConnectionConfig.validate(parameters.config, {\n isEntityPathRequired: parameters.isEntityPathRequired || false,\n });\n const userAgent = parameters.connectionProperties.userAgent;\n if (userAgent.length > Constants.maxUserAgentLength) {\n throw new Error(\n `The user-agent string cannot be more than ${Constants.maxUserAgentLength} characters in length.` +\n `The given user-agent string is: ${userAgent} with length: ${userAgent.length}`,\n );\n }\n\n const connectionOptions: ConnectionOptions = {\n transport: (parameters.config.useDevelopmentEmulator ? Constants.TCP : Constants.TLS) as any,\n host: parameters.config.host,\n hostname: parameters.config.amqpHostname ?? parameters.config.host,\n username: parameters.config.sharedAccessKeyName,\n port: parameters.config.port ?? (parameters.config.useDevelopmentEmulator ? 5672 : 5671),\n reconnect: false,\n properties: {\n product: parameters.connectionProperties.product,\n version: parameters.connectionProperties.version,\n \"user-agent\": userAgent,\n platform: getPlatformInfo(),\n framework: getFrameworkInfo(),\n },\n idle_time_out: Constants.defaultConnectionIdleTimeoutInMs,\n operationTimeoutInSeconds: parameters.operationTimeoutInMs\n ? parameters.operationTimeoutInMs / 1000\n : undefined,\n };\n\n const globalWebSocket = (!isNodeLike && getGlobalProperty(\"WebSocket\")) || undefined;\n if (parameters.config.webSocket || globalWebSocket) {\n const socket = parameters.config.webSocket || globalWebSocket;\n const host = parameters.config.host;\n const endpoint = parameters.config.webSocketEndpointPath || \"\";\n const socketOptions = parameters.config.webSocketConstructorOptions || {};\n const port = parameters.config.port ?? 443;\n\n connectionOptions.webSocketOptions = {\n webSocket: socket,\n url: `wss://${host}:${port}/${endpoint}`,\n protocol: [\"AMQPWSB10\"],\n options: socketOptions,\n };\n }\n\n const connection = new CoreAmqpConnection(connectionOptions);\n const connectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n const connectionContextBase: ConnectionContextBase = {\n wasConnectionCloseCalled: false,\n connectionLock: connectionLock,\n negotiateClaimLock: `${Constants.negotiateClaim}-${generate_uuid()}`,\n connection: connection,\n connectionId: connection.id,\n cbsSession: new CbsClient(connection, connectionLock),\n config: parameters.config,\n refreshConnection() {\n const newConnection = new CoreAmqpConnection(connectionOptions);\n const newConnectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n this.wasConnectionCloseCalled = false;\n this.connectionLock = newConnectionLock;\n this.negotiateClaimLock = `${Constants.negotiateClaim} - ${generate_uuid()}`;\n this.connection = newConnection;\n this.connectionId = newConnection.id;\n this.cbsSession = new CbsClient(newConnection, newConnectionLock);\n },\n };\n\n return connectionContextBase;\n },\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/retry.ts"],
|
|
4
|
-
"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 \"
|
|
4
|
+
"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"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["RetryMode", "RetryOperationType"]
|
|
7
7
|
}
|
|
@@ -20,10 +20,24 @@ __export(hmacSha256_exports, {
|
|
|
20
20
|
signString: () => signString
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(hmacSha256_exports);
|
|
23
|
-
var
|
|
23
|
+
var import_core_util = require("@azure/core-util");
|
|
24
24
|
async function signString(key, toSign) {
|
|
25
|
-
const
|
|
26
|
-
|
|
25
|
+
const enc = new TextEncoder();
|
|
26
|
+
const algorithm = { name: "HMAC", hash: { name: "SHA-256" } };
|
|
27
|
+
const extractedKey = await globalThis.crypto.subtle.importKey(
|
|
28
|
+
"raw",
|
|
29
|
+
enc.encode(key),
|
|
30
|
+
algorithm,
|
|
31
|
+
false,
|
|
32
|
+
["sign", "verify"]
|
|
33
|
+
);
|
|
34
|
+
const signature = await globalThis.crypto.subtle.sign(
|
|
35
|
+
algorithm,
|
|
36
|
+
extractedKey,
|
|
37
|
+
enc.encode(toSign)
|
|
38
|
+
);
|
|
39
|
+
const digest = (0, import_core_util.uint8ArrayToString)(new Uint8Array(signature), "base64");
|
|
40
|
+
return encodeURIComponent(digest);
|
|
27
41
|
}
|
|
28
42
|
// Annotate the CommonJS export names for ESM import in node:
|
|
29
43
|
0 && (module.exports = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/hmacSha256.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,
|
|
4
|
+
"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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAmC;AAEnC,eAAsB,WAAW,KAAa,QAAiC;AAC7E,QAAM,MAAM,IAAI,YAAY;AAC5B,QAAM,YAAY,EAAE,MAAM,QAAQ,MAAM,EAAE,MAAM,UAAU,EAAE;AAE5D,QAAM,eAAe,MAAM,WAAW,OAAO,OAAO;AAAA,IAClD;AAAA,IACA,IAAI,OAAO,GAAG;AAAA,IACd;AAAA,IACA;AAAA,IACA,CAAC,QAAQ,QAAQ;AAAA,EACnB;AACA,QAAM,YAAY,MAAM,WAAW,OAAO,OAAO;AAAA,IAC/C;AAAA,IACA;AAAA,IACA,IAAI,OAAO,MAAM;AAAA,EACnB;AACA,QAAM,aAAS,qCAAmB,IAAI,WAAW,SAAS,GAAG,QAAQ;AAErE,SAAO,mBAAmB,MAAM;AAClC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionContextBase.js","sourceRoot":"","sources":["../../src/ConnectionContextBase.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EACL,UAAU,EAKV,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA8F9C,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,MAAM,kBAAmB,SAAQ,UAAU;IACzC;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,OAA6B;QAC9C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,qBAAqB,CAAC,OAAsC;QAChE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,OAA+B;QAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACrD,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,4GAA4G;AAC5G,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC;;;;OAIG;IACH,MAAM,CAAC,UAAiD;QACtD,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE;YAC3C,oBAAoB,EAAE,UAAU,CAAC,oBAAoB,IAAI,KAAK;SAC/D,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC;QAC5D,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,6CAA6C,SAAS,CAAC,kBAAkB,wBAAwB;gBAC/F,mCAAmC,SAAS,iBAAiB,SAAS,CAAC,MAAM,EAAE,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,GAAsB;YAC3C,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAQ;YAC5F,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;YAC5B,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI;YAClE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,mBAAmB;YAC/C,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACxF,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE;gBACV,OAAO,EAAE,UAAU,CAAC,oBAAoB,CAAC,OAAO;gBAChD,OAAO,EAAE,UAAU,CAAC,oBAAoB,CAAC,OAAO;gBAChD,YAAY,EAAE,SAAS;gBACvB,QAAQ,EAAE,eAAe,EAAE;gBAC3B,SAAS,EAAE,gBAAgB,EAAE;aAC9B;YACD,aAAa,EAAE,SAAS,CAAC,gCAAgC;YACzD,yBAAyB,EAAE,UAAU,CAAC,oBAAoB;gBACxD,CAAC,CAAC,UAAU,CAAC,oBAAoB,GAAG,IAAI;gBACxC,CAAC,CAAC,SAAS;SACd,CAAC;QAEF,MAAM,eAAe,GAAG,CAAC,CAAC,UAAU,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC,IAAI,SAAS,CAAC;QACrF,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC;YAC9D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;YACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC;YAC/D,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,2BAA2B,IAAI,EAAE,CAAC;YAC1E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC;YAE3C,iBAAiB,CAAC,gBAAgB,GAAG;gBACnC,SAAS,EAAE,MAAM;gBACjB,GAAG,EAAE,SAAS,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE;gBACxC,QAAQ,EAAE,CAAC,WAAW,CAAC;gBACvB,OAAO,EAAE,aAAa;aACvB,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAG,GAAG,SAAS,CAAC,mBAAmB,IAAI,aAAa,EAAE,EAAE,CAAC;QAC7E,MAAM,qBAAqB,GAA0B;YACnD,wBAAwB,EAAE,KAAK;YAC/B,cAAc,EAAE,cAAc;YAC9B,kBAAkB,EAAE,GAAG,SAAS,CAAC,cAAc,IAAI,aAAa,EAAE,EAAE;YACpE,UAAU,EAAE,UAAU;YACtB,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,UAAU,EAAE,IAAI,SAAS,CAAC,UAAU,EAAE,cAAc,CAAC;YACrD,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,iBAAiB;gBACf,MAAM,aAAa,GAAG,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;gBAChE,MAAM,iBAAiB,GAAG,GAAG,SAAS,CAAC,mBAAmB,IAAI,aAAa,EAAE,EAAE,CAAC;gBAChF,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;gBACtC,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC;gBACxC,IAAI,CAAC,kBAAkB,GAAG,GAAG,SAAS,CAAC,cAAc,MAAM,aAAa,EAAE,EAAE,CAAC;gBAC7E,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;gBAChC,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;YACpE,CAAC;SACF,CAAC;QAEF,OAAO,qBAAqB,CAAC;IAC/B,CAAC;CACF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AwaitableSender, Receiver, Sender } from \"rhea-promise\";\nimport {\n Connection,\n type ConnectionOptions,\n type CreateAwaitableSenderOptions,\n type CreateReceiverOptions,\n type CreateSenderOptions,\n generate_uuid,\n} from \"rhea-promise\";\nimport { getFrameworkInfo, getPlatformInfo } from \"./util/runtimeInfo.js\";\nimport { getGlobalProperty } from \"./util/utils.js\";\nimport { CbsClient } from \"./cbs.js\";\nimport { ConnectionConfig } from \"./connectionConfig/connectionConfig.js\";\nimport { Constants } from \"./util/constants.js\";\nimport { isNodeLike } from \"@azure/core-util\";\n\n/**\n * Provides contextual information like the underlying amqp connection, cbs session, tokenProvider,\n * Connection config, data transformer, etc.\n */\nexport interface ConnectionContextBase {\n /**\n * The EventHub connection config that is created after\n * parsing the connection string.\n */\n readonly config: ConnectionConfig;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for establishing an amqp connection per client if one does not exist.\n */\n connectionLock: string;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for negotiating cbs claim by an entity on that connection.\n */\n negotiateClaimLock: string;\n /**\n * The underlying AMQP connection.\n */\n connection: Connection;\n /**\n * The amqp connection id that uniquely identifies the\n * connection within a process.\n */\n connectionId: string;\n /**\n * Indicates whether the close() method was\n * called on the connection object.\n */\n wasConnectionCloseCalled: boolean;\n /**\n * A reference to the cbs session ($cbs endpoint) on the\n * underlying AMQP connection for the EventHub Client.\n */\n cbsSession: CbsClient;\n /**\n * Updates the context to use a new underlying AMQP connection and new cbs session.\n */\n refreshConnection: () => void;\n}\n\n/**\n * Defines the properties that need to be set while establishing the AMQP connection.\n */\nexport interface ConnectionProperties {\n /**\n * The name of the product that will be populated as the AMQP\n * connection property. Example: \"MSJSClient\".\n */\n product: string;\n /**\n * The version of the package/sdk that is making the AMQP connection.\n */\n version: string;\n /**\n * The userAgent that needs to be set as the AMQP connection\n * property. Example: `\"/js-service-bus\"` or `\"/js-event-hubs,/js-event-processor-host=1.0.0\"`.\n */\n userAgent: string;\n}\n\n/**\n * Describes the parameters that can be provided to create the base connection context.\n */\nexport interface CreateConnectionContextBaseParameters {\n /**\n * The connection config that is created by parsing the\n * connection string.\n */\n config: ConnectionConfig;\n /**\n * Properties to be provided while creating\n * the AMQP connection.\n */\n connectionProperties: ConnectionProperties;\n /**\n * Determines whether entity path should be a part of\n * the connection config. If `true` it must be present, `false` otherwise. Default value false.\n */\n isEntityPathRequired?: boolean;\n /**\n * The duration in which the promise should\n * complete (resolve/reject). If it is not completed, then the Promise will be rejected after\n * timeout occurs. Default: `60000 milliseconds`.\n */\n operationTimeoutInMs?: number;\n}\n\nconst maxListenerLimit = 1000;\n\nclass CoreAmqpConnection extends Connection {\n /**\n * Creates an amqp sender link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a sender link.\n * @returns Promise<Sender>.\n */\n async createSender(options?: CreateSenderOptions): Promise<Sender> {\n const sender = await super.createSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an awaitable amqp sender. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create an awaitable sender link.\n * - If `onError` and `onSessionError` handlers are not provided then the `AwaitableSender` will\n * clear the timer and reject the Promise for all the entries of inflight send operation in its\n * `deliveryDispositionMap`.\n * - If the user is handling the reconnection of sender link or the underlying connection in it's\n * app, then the `onError` and `onSessionError` handlers must be provided by the user and (s)he\n * shall be responsible of clearing the `deliveryDispositionMap` of inflight `send()` operation.\n *\n * @returns Promise<AwaitableSender>.\n */\n async createAwaitableSender(options?: CreateAwaitableSenderOptions): Promise<AwaitableSender> {\n const sender = await super.createAwaitableSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an amqp receiver link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a receiver link.\n * @returns Promise<Receiver>.\n */\n async createReceiver(options?: CreateReceiverOptions): Promise<Receiver> {\n const receiver = await super.createReceiver(options);\n receiver.setMaxListeners(maxListenerLimit);\n return receiver;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- renaming constant would be a breaking change.\nexport const ConnectionContextBase = {\n /**\n * Creates the base connection context.\n * @param parameters - Parameters to be provided to create\n * the base connection context.\n */\n create(parameters: CreateConnectionContextBaseParameters): ConnectionContextBase {\n ConnectionConfig.validate(parameters.config, {\n isEntityPathRequired: parameters.isEntityPathRequired || false,\n });\n const userAgent = parameters.connectionProperties.userAgent;\n if (userAgent.length > Constants.maxUserAgentLength) {\n throw new Error(\n `The user-agent string cannot be more than ${Constants.maxUserAgentLength} characters in length.` +\n `The given user-agent string is: ${userAgent} with length: ${userAgent.length}`,\n );\n }\n\n const connectionOptions: ConnectionOptions = {\n transport: (parameters.config.useDevelopmentEmulator ? Constants.TCP : Constants.TLS) as any,\n host: parameters.config.host,\n hostname: parameters.config.amqpHostname ?? parameters.config.host,\n username: parameters.config.sharedAccessKeyName,\n port: parameters.config.port ?? (parameters.config.useDevelopmentEmulator ? 5672 : 5671),\n reconnect: false,\n properties: {\n product: parameters.connectionProperties.product,\n version: parameters.connectionProperties.version,\n \"user-agent\": userAgent,\n platform: getPlatformInfo(),\n framework: getFrameworkInfo(),\n },\n idle_time_out: Constants.defaultConnectionIdleTimeoutInMs,\n operationTimeoutInSeconds: parameters.operationTimeoutInMs\n ? parameters.operationTimeoutInMs / 1000\n : undefined,\n };\n\n const globalWebSocket = (!isNodeLike && getGlobalProperty(\"WebSocket\")) || undefined;\n if (parameters.config.webSocket || globalWebSocket) {\n const socket = parameters.config.webSocket || globalWebSocket;\n const host = parameters.config.host;\n const endpoint = parameters.config.webSocketEndpointPath || \"\";\n const socketOptions = parameters.config.webSocketConstructorOptions || {};\n const port = parameters.config.port ?? 443;\n\n connectionOptions.webSocketOptions = {\n webSocket: socket,\n url: `wss://${host}:${port}/${endpoint}`,\n protocol: [\"AMQPWSB10\"],\n options: socketOptions,\n };\n }\n\n const connection = new CoreAmqpConnection(connectionOptions);\n const connectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n const connectionContextBase: ConnectionContextBase = {\n wasConnectionCloseCalled: false,\n connectionLock: connectionLock,\n negotiateClaimLock: `${Constants.negotiateClaim}-${generate_uuid()}`,\n connection: connection,\n connectionId: connection.id,\n cbsSession: new CbsClient(connection, connectionLock),\n config: parameters.config,\n refreshConnection() {\n const newConnection = new CoreAmqpConnection(connectionOptions);\n const newConnectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n this.wasConnectionCloseCalled = false;\n this.connectionLock = newConnectionLock;\n this.negotiateClaimLock = `${Constants.negotiateClaim} - ${generate_uuid()}`;\n this.connection = newConnection;\n this.connectionId = newConnection.id;\n this.cbsSession = new CbsClient(newConnection, newConnectionLock);\n },\n };\n\n return connectionContextBase;\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"ConnectionContextBase.js","sourceRoot":"","sources":["../../src/ConnectionContextBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AwaitableSender, Receiver, Sender } from \"rhea-promise\";\nimport {\n Connection,\n type ConnectionOptions,\n type CreateAwaitableSenderOptions,\n type CreateReceiverOptions,\n type CreateSenderOptions,\n generate_uuid,\n} from \"rhea-promise\";\nimport { getFrameworkInfo, getPlatformInfo } from \"#platform/runtimeInfo\";\nimport { getGlobalProperty } from \"./util/utils.js\";\nimport { CbsClient } from \"./cbs.js\";\nimport { ConnectionConfig } from \"./connectionConfig/connectionConfig.js\";\nimport { Constants } from \"./util/constants.js\";\nimport { isNodeLike } from \"@azure/core-util\";\n\n/**\n * Provides contextual information like the underlying amqp connection, cbs session, tokenProvider,\n * Connection config, data transformer, etc.\n */\nexport interface ConnectionContextBase {\n /**\n * The EventHub connection config that is created after\n * parsing the connection string.\n */\n readonly config: ConnectionConfig;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for establishing an amqp connection per client if one does not exist.\n */\n connectionLock: string;\n /**\n * The unique lock name per connection that is used to\n * acquire the lock for negotiating cbs claim by an entity on that connection.\n */\n negotiateClaimLock: string;\n /**\n * The underlying AMQP connection.\n */\n connection: Connection;\n /**\n * The amqp connection id that uniquely identifies the\n * connection within a process.\n */\n connectionId: string;\n /**\n * Indicates whether the close() method was\n * called on the connection object.\n */\n wasConnectionCloseCalled: boolean;\n /**\n * A reference to the cbs session ($cbs endpoint) on the\n * underlying AMQP connection for the EventHub Client.\n */\n cbsSession: CbsClient;\n /**\n * Updates the context to use a new underlying AMQP connection and new cbs session.\n */\n refreshConnection: () => void;\n}\n\n/**\n * Defines the properties that need to be set while establishing the AMQP connection.\n */\nexport interface ConnectionProperties {\n /**\n * The name of the product that will be populated as the AMQP\n * connection property. Example: \"MSJSClient\".\n */\n product: string;\n /**\n * The version of the package/sdk that is making the AMQP connection.\n */\n version: string;\n /**\n * The userAgent that needs to be set as the AMQP connection\n * property. Example: `\"/js-service-bus\"` or `\"/js-event-hubs,/js-event-processor-host=1.0.0\"`.\n */\n userAgent: string;\n}\n\n/**\n * Describes the parameters that can be provided to create the base connection context.\n */\nexport interface CreateConnectionContextBaseParameters {\n /**\n * The connection config that is created by parsing the\n * connection string.\n */\n config: ConnectionConfig;\n /**\n * Properties to be provided while creating\n * the AMQP connection.\n */\n connectionProperties: ConnectionProperties;\n /**\n * Determines whether entity path should be a part of\n * the connection config. If `true` it must be present, `false` otherwise. Default value false.\n */\n isEntityPathRequired?: boolean;\n /**\n * The duration in which the promise should\n * complete (resolve/reject). If it is not completed, then the Promise will be rejected after\n * timeout occurs. Default: `60000 milliseconds`.\n */\n operationTimeoutInMs?: number;\n}\n\nconst maxListenerLimit = 1000;\n\nclass CoreAmqpConnection extends Connection {\n /**\n * Creates an amqp sender link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a sender link.\n * @returns Promise<Sender>.\n */\n async createSender(options?: CreateSenderOptions): Promise<Sender> {\n const sender = await super.createSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an awaitable amqp sender. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create an awaitable sender link.\n * - If `onError` and `onSessionError` handlers are not provided then the `AwaitableSender` will\n * clear the timer and reject the Promise for all the entries of inflight send operation in its\n * `deliveryDispositionMap`.\n * - If the user is handling the reconnection of sender link or the underlying connection in it's\n * app, then the `onError` and `onSessionError` handlers must be provided by the user and (s)he\n * shall be responsible of clearing the `deliveryDispositionMap` of inflight `send()` operation.\n *\n * @returns Promise<AwaitableSender>.\n */\n async createAwaitableSender(options?: CreateAwaitableSenderOptions): Promise<AwaitableSender> {\n const sender = await super.createAwaitableSender(options);\n sender.setMaxListeners(maxListenerLimit);\n return sender;\n }\n\n /**\n * Creates an amqp receiver link. Max listener limit on the sender is set to 1000 because the\n * default value of 10 in NodeJS is too low.\n * @param options - Optional parameters to create a receiver link.\n * @returns Promise<Receiver>.\n */\n async createReceiver(options?: CreateReceiverOptions): Promise<Receiver> {\n const receiver = await super.createReceiver(options);\n receiver.setMaxListeners(maxListenerLimit);\n return receiver;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- renaming constant would be a breaking change.\nexport const ConnectionContextBase = {\n /**\n * Creates the base connection context.\n * @param parameters - Parameters to be provided to create\n * the base connection context.\n */\n create(parameters: CreateConnectionContextBaseParameters): ConnectionContextBase {\n ConnectionConfig.validate(parameters.config, {\n isEntityPathRequired: parameters.isEntityPathRequired || false,\n });\n const userAgent = parameters.connectionProperties.userAgent;\n if (userAgent.length > Constants.maxUserAgentLength) {\n throw new Error(\n `The user-agent string cannot be more than ${Constants.maxUserAgentLength} characters in length.` +\n `The given user-agent string is: ${userAgent} with length: ${userAgent.length}`,\n );\n }\n\n const connectionOptions: ConnectionOptions = {\n transport: (parameters.config.useDevelopmentEmulator ? Constants.TCP : Constants.TLS) as any,\n host: parameters.config.host,\n hostname: parameters.config.amqpHostname ?? parameters.config.host,\n username: parameters.config.sharedAccessKeyName,\n port: parameters.config.port ?? (parameters.config.useDevelopmentEmulator ? 5672 : 5671),\n reconnect: false,\n properties: {\n product: parameters.connectionProperties.product,\n version: parameters.connectionProperties.version,\n \"user-agent\": userAgent,\n platform: getPlatformInfo(),\n framework: getFrameworkInfo(),\n },\n idle_time_out: Constants.defaultConnectionIdleTimeoutInMs,\n operationTimeoutInSeconds: parameters.operationTimeoutInMs\n ? parameters.operationTimeoutInMs / 1000\n : undefined,\n };\n\n const globalWebSocket = (!isNodeLike && getGlobalProperty(\"WebSocket\")) || undefined;\n if (parameters.config.webSocket || globalWebSocket) {\n const socket = parameters.config.webSocket || globalWebSocket;\n const host = parameters.config.host;\n const endpoint = parameters.config.webSocketEndpointPath || \"\";\n const socketOptions = parameters.config.webSocketConstructorOptions || {};\n const port = parameters.config.port ?? 443;\n\n connectionOptions.webSocketOptions = {\n webSocket: socket,\n url: `wss://${host}:${port}/${endpoint}`,\n protocol: [\"AMQPWSB10\"],\n options: socketOptions,\n };\n }\n\n const connection = new CoreAmqpConnection(connectionOptions);\n const connectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n const connectionContextBase: ConnectionContextBase = {\n wasConnectionCloseCalled: false,\n connectionLock: connectionLock,\n negotiateClaimLock: `${Constants.negotiateClaim}-${generate_uuid()}`,\n connection: connection,\n connectionId: connection.id,\n cbsSession: new CbsClient(connection, connectionLock),\n config: parameters.config,\n refreshConnection() {\n const newConnection = new CoreAmqpConnection(connectionOptions);\n const newConnectionLock = `${Constants.establishConnection}-${generate_uuid()}`;\n this.wasConnectionCloseCalled = false;\n this.connectionLock = newConnectionLock;\n this.negotiateClaimLock = `${Constants.negotiateClaim} - ${generate_uuid()}`;\n this.connection = newConnection;\n this.connectionId = newConnection.id;\n this.cbsSession = new CbsClient(newConnection, newConnectionLock);\n },\n };\n\n return connectionContextBase;\n },\n};\n"]}
|
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 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"]}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import {
|
|
3
|
+
import { uint8ArrayToString } from "@azure/core-util";
|
|
4
4
|
export async function signString(key, toSign) {
|
|
5
|
-
const
|
|
6
|
-
|
|
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);
|
|
7
11
|
}
|
|
8
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,OAAO,EAAE,
|
|
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"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
import { Connection, generate_uuid, } from "rhea-promise";
|
|
4
|
-
import { getFrameworkInfo, getPlatformInfo } from "./util/runtimeInfo.
|
|
4
|
+
import { getFrameworkInfo, getPlatformInfo } from "./util/runtimeInfo-react-native.mjs";
|
|
5
5
|
import { getGlobalProperty } from "./util/utils.js";
|
|
6
6
|
import { CbsClient } from "./cbs.js";
|
|
7
7
|
import { ConnectionConfig } from "./connectionConfig/connectionConfig.js";
|