@azure/event-hubs 6.0.2-alpha.20251014.1 → 6.0.2-alpha.20251021.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/batchingPartitionChannel.d.ts.map +1 -1
- package/dist/browser/batchingPartitionChannel.js +2 -1
- package/dist/browser/batchingPartitionChannel.js.map +1 -1
- package/dist/browser/connectionContext.d.ts.map +1 -1
- package/dist/browser/connectionContext.js +10 -4
- package/dist/browser/connectionContext.js.map +1 -1
- package/dist/browser/eventHubBufferedProducerClient.d.ts.map +1 -1
- package/dist/browser/eventHubBufferedProducerClient.js +2 -1
- package/dist/browser/eventHubBufferedProducerClient.js.map +1 -1
- package/dist/browser/eventHubConsumerClient.d.ts.map +1 -1
- package/dist/browser/eventHubConsumerClient.js +3 -6
- package/dist/browser/eventHubConsumerClient.js.map +1 -1
- package/dist/browser/eventHubProducerClient.d.ts.map +1 -1
- package/dist/browser/eventHubProducerClient.js +3 -6
- package/dist/browser/eventHubProducerClient.js.map +1 -1
- package/dist/browser/eventHubSender.d.ts.map +1 -1
- package/dist/browser/eventHubSender.js +6 -4
- package/dist/browser/eventHubSender.js.map +1 -1
- package/dist/browser/partitionReceiver.js +4 -4
- package/dist/browser/partitionReceiver.js.map +1 -1
- package/dist/browser/util/timerLoop.d.ts.map +1 -1
- package/dist/browser/util/timerLoop.js +12 -5
- package/dist/browser/util/timerLoop.js.map +1 -1
- package/dist/commonjs/batchingPartitionChannel.d.ts.map +1 -1
- package/dist/commonjs/batchingPartitionChannel.js +2 -1
- package/dist/commonjs/batchingPartitionChannel.js.map +1 -1
- package/dist/commonjs/connectionContext.d.ts.map +1 -1
- package/dist/commonjs/connectionContext.js +10 -4
- package/dist/commonjs/connectionContext.js.map +1 -1
- package/dist/commonjs/eventHubBufferedProducerClient.d.ts.map +1 -1
- package/dist/commonjs/eventHubBufferedProducerClient.js +2 -1
- package/dist/commonjs/eventHubBufferedProducerClient.js.map +1 -1
- package/dist/commonjs/eventHubConsumerClient.d.ts.map +1 -1
- package/dist/commonjs/eventHubConsumerClient.js +3 -6
- package/dist/commonjs/eventHubConsumerClient.js.map +1 -1
- package/dist/commonjs/eventHubProducerClient.d.ts.map +1 -1
- package/dist/commonjs/eventHubProducerClient.js +3 -6
- package/dist/commonjs/eventHubProducerClient.js.map +1 -1
- package/dist/commonjs/eventHubSender.d.ts.map +1 -1
- package/dist/commonjs/eventHubSender.js +6 -4
- package/dist/commonjs/eventHubSender.js.map +1 -1
- package/dist/commonjs/partitionReceiver.js +4 -4
- package/dist/commonjs/partitionReceiver.js.map +1 -1
- package/dist/commonjs/util/timerLoop.d.ts.map +1 -1
- package/dist/commonjs/util/timerLoop.js +12 -5
- package/dist/commonjs/util/timerLoop.js.map +1 -1
- package/dist/esm/batchingPartitionChannel.d.ts.map +1 -1
- package/dist/esm/batchingPartitionChannel.js +2 -1
- package/dist/esm/batchingPartitionChannel.js.map +1 -1
- package/dist/esm/connectionContext.d.ts.map +1 -1
- package/dist/esm/connectionContext.js +10 -4
- package/dist/esm/connectionContext.js.map +1 -1
- package/dist/esm/eventHubBufferedProducerClient.d.ts.map +1 -1
- package/dist/esm/eventHubBufferedProducerClient.js +2 -1
- package/dist/esm/eventHubBufferedProducerClient.js.map +1 -1
- package/dist/esm/eventHubConsumerClient.d.ts.map +1 -1
- package/dist/esm/eventHubConsumerClient.js +3 -6
- package/dist/esm/eventHubConsumerClient.js.map +1 -1
- package/dist/esm/eventHubProducerClient.d.ts.map +1 -1
- package/dist/esm/eventHubProducerClient.js +3 -6
- package/dist/esm/eventHubProducerClient.js.map +1 -1
- package/dist/esm/eventHubSender.d.ts.map +1 -1
- package/dist/esm/eventHubSender.js +6 -4
- package/dist/esm/eventHubSender.js.map +1 -1
- package/dist/esm/partitionReceiver.js +4 -4
- package/dist/esm/partitionReceiver.js.map +1 -1
- package/dist/esm/util/timerLoop.d.ts.map +1 -1
- package/dist/esm/util/timerLoop.js +12 -5
- package/dist/esm/util/timerLoop.js.map +1 -1
- package/dist/react-native/batchingPartitionChannel.d.ts +94 -0
- package/dist/react-native/batchingPartitionChannel.d.ts.map +1 -0
- package/dist/react-native/batchingPartitionChannel.js +255 -0
- package/dist/react-native/batchingPartitionChannel.js.map +1 -0
- package/dist/react-native/connectionContext.d.ts +108 -0
- package/dist/react-native/connectionContext.d.ts.map +1 -0
- package/dist/react-native/connectionContext.js +310 -0
- package/dist/react-native/connectionContext.js.map +1 -0
- package/dist/react-native/dataTransformer.d.ts +53 -0
- package/dist/react-native/dataTransformer.d.ts.map +1 -0
- package/dist/react-native/dataTransformer.js +133 -0
- package/dist/react-native/dataTransformer.js.map +1 -0
- package/dist/react-native/diagnostics/instrumentEventData.d.ts +28 -0
- package/dist/react-native/diagnostics/instrumentEventData.d.ts.map +1 -0
- package/dist/react-native/diagnostics/instrumentEventData.js +67 -0
- package/dist/react-native/diagnostics/instrumentEventData.js.map +1 -0
- package/dist/react-native/diagnostics/tracing.d.ts +19 -0
- package/dist/react-native/diagnostics/tracing.d.ts.map +1 -0
- package/dist/react-native/diagnostics/tracing.js +40 -0
- package/dist/react-native/diagnostics/tracing.js.map +1 -0
- package/dist/react-native/eventData.d.ts +295 -0
- package/dist/react-native/eventData.d.ts.map +1 -0
- package/dist/react-native/eventData.js +247 -0
- package/dist/react-native/eventData.js.map +1 -0
- package/dist/react-native/eventDataAdapter.d.ts +69 -0
- package/dist/react-native/eventDataAdapter.d.ts.map +1 -0
- package/dist/react-native/eventDataAdapter.js +38 -0
- package/dist/react-native/eventDataAdapter.js.map +1 -0
- package/dist/react-native/eventDataBatch.d.ts +225 -0
- package/dist/react-native/eventDataBatch.d.ts.map +1 -0
- package/dist/react-native/eventDataBatch.js +301 -0
- package/dist/react-native/eventDataBatch.js.map +1 -0
- package/dist/react-native/eventHubBufferedProducerClient.d.ts +323 -0
- package/dist/react-native/eventHubBufferedProducerClient.d.ts.map +1 -0
- package/dist/react-native/eventHubBufferedProducerClient.js +301 -0
- package/dist/react-native/eventHubBufferedProducerClient.js.map +1 -0
- package/dist/react-native/eventHubConsumerClient.d.ts +293 -0
- package/dist/react-native/eventHubConsumerClient.d.ts.map +1 -0
- package/dist/react-native/eventHubConsumerClient.js +336 -0
- package/dist/react-native/eventHubConsumerClient.js.map +1 -0
- package/dist/react-native/eventHubConsumerClientModels.d.ts +218 -0
- package/dist/react-native/eventHubConsumerClientModels.d.ts.map +1 -0
- package/dist/react-native/eventHubConsumerClientModels.js +4 -0
- package/dist/react-native/eventHubConsumerClientModels.js.map +1 -0
- package/dist/react-native/eventHubProducerClient.d.ts +299 -0
- package/dist/react-native/eventHubProducerClient.d.ts.map +1 -0
- package/dist/react-native/eventHubProducerClient.js +366 -0
- package/dist/react-native/eventHubProducerClient.js.map +1 -0
- package/dist/react-native/eventHubSender.d.ts +227 -0
- package/dist/react-native/eventHubSender.d.ts.map +1 -0
- package/dist/react-native/eventHubSender.js +626 -0
- package/dist/react-native/eventHubSender.js.map +1 -0
- package/dist/react-native/eventPosition.d.ts +73 -0
- package/dist/react-native/eventPosition.d.ts.map +1 -0
- package/dist/react-native/eventPosition.js +121 -0
- package/dist/react-native/eventPosition.js.map +1 -0
- package/dist/react-native/eventProcessor.d.ts +232 -0
- package/dist/react-native/eventProcessor.d.ts.map +1 -0
- package/dist/react-native/eventProcessor.js +389 -0
- package/dist/react-native/eventProcessor.js.map +1 -0
- package/dist/react-native/eventhubConnectionConfig.d.ts +96 -0
- package/dist/react-native/eventhubConnectionConfig.d.ts.map +1 -0
- package/dist/react-native/eventhubConnectionConfig.js +98 -0
- package/dist/react-native/eventhubConnectionConfig.js.map +1 -0
- package/dist/react-native/impl/awaitableQueue.d.ts +25 -0
- package/dist/react-native/impl/awaitableQueue.d.ts.map +1 -0
- package/dist/react-native/impl/awaitableQueue.js +51 -0
- package/dist/react-native/impl/awaitableQueue.js.map +1 -0
- package/dist/react-native/impl/partitionAssigner.d.ts +29 -0
- package/dist/react-native/impl/partitionAssigner.d.ts.map +1 -0
- package/dist/react-native/impl/partitionAssigner.js +52 -0
- package/dist/react-native/impl/partitionAssigner.js.map +1 -0
- package/dist/react-native/impl/partitionGate.d.ts +27 -0
- package/dist/react-native/impl/partitionGate.d.ts.map +1 -0
- package/dist/react-native/impl/partitionGate.js +38 -0
- package/dist/react-native/impl/partitionGate.js.map +1 -0
- package/dist/react-native/impl/partitionKeyToIdMapper.d.ts +6 -0
- package/dist/react-native/impl/partitionKeyToIdMapper.d.ts.map +1 -0
- package/dist/react-native/impl/partitionKeyToIdMapper.js +111 -0
- package/dist/react-native/impl/partitionKeyToIdMapper.js.map +1 -0
- package/dist/react-native/inMemoryCheckpointStore.d.ts +44 -0
- package/dist/react-native/inMemoryCheckpointStore.d.ts.map +1 -0
- package/dist/react-native/inMemoryCheckpointStore.js +94 -0
- package/dist/react-native/inMemoryCheckpointStore.js.map +1 -0
- package/dist/react-native/index.d.ts +21 -0
- package/dist/react-native/index.d.ts.map +1 -0
- package/dist/react-native/index.js +12 -0
- package/dist/react-native/index.js.map +1 -0
- package/dist/react-native/loadBalancerStrategies/balancedStrategy.d.ts +30 -0
- package/dist/react-native/loadBalancerStrategies/balancedStrategy.d.ts.map +1 -0
- package/dist/react-native/loadBalancerStrategies/balancedStrategy.js +40 -0
- package/dist/react-native/loadBalancerStrategies/balancedStrategy.js.map +1 -0
- package/dist/react-native/loadBalancerStrategies/greedyStrategy.d.ts +24 -0
- package/dist/react-native/loadBalancerStrategies/greedyStrategy.d.ts.map +1 -0
- package/dist/react-native/loadBalancerStrategies/greedyStrategy.js +29 -0
- package/dist/react-native/loadBalancerStrategies/greedyStrategy.js.map +1 -0
- package/dist/react-native/loadBalancerStrategies/loadBalancingStrategy.d.ts +28 -0
- package/dist/react-native/loadBalancerStrategies/loadBalancingStrategy.d.ts.map +1 -0
- package/dist/react-native/loadBalancerStrategies/loadBalancingStrategy.js +245 -0
- package/dist/react-native/loadBalancerStrategies/loadBalancingStrategy.js.map +1 -0
- package/dist/react-native/loadBalancerStrategies/unbalancedStrategy.d.ts +20 -0
- package/dist/react-native/loadBalancerStrategies/unbalancedStrategy.d.ts.map +1 -0
- package/dist/react-native/loadBalancerStrategies/unbalancedStrategy.js +22 -0
- package/dist/react-native/loadBalancerStrategies/unbalancedStrategy.js.map +1 -0
- package/dist/react-native/logger.d.ts +37 -0
- package/dist/react-native/logger.d.ts.map +1 -0
- package/dist/react-native/logger.js +56 -0
- package/dist/react-native/logger.js.map +1 -0
- package/dist/react-native/managementClient.d.ts +145 -0
- package/dist/react-native/managementClient.d.ts.map +1 -0
- package/dist/react-native/managementClient.js +305 -0
- package/dist/react-native/managementClient.js.map +1 -0
- package/dist/react-native/models/private.d.ts +185 -0
- package/dist/react-native/models/private.d.ts.map +1 -0
- package/dist/react-native/models/private.js +4 -0
- package/dist/react-native/models/private.js.map +1 -0
- package/dist/react-native/models/public.d.ts +240 -0
- package/dist/react-native/models/public.d.ts.map +1 -0
- package/dist/react-native/models/public.js +18 -0
- package/dist/react-native/models/public.js.map +1 -0
- package/dist/react-native/package.json +3 -0
- package/dist/react-native/partitionProcessor.d.ts +134 -0
- package/dist/react-native/partitionProcessor.d.ts.map +1 -0
- package/dist/react-native/partitionProcessor.js +137 -0
- package/dist/react-native/partitionProcessor.js.map +1 -0
- package/dist/react-native/partitionPump.d.ts +38 -0
- package/dist/react-native/partitionPump.d.ts.map +1 -0
- package/dist/react-native/partitionPump.js +175 -0
- package/dist/react-native/partitionPump.js.map +1 -0
- package/dist/react-native/partitionReceiver.d.ts +82 -0
- package/dist/react-native/partitionReceiver.d.ts.map +1 -0
- package/dist/react-native/partitionReceiver.js +335 -0
- package/dist/react-native/partitionReceiver.js.map +1 -0
- package/dist/react-native/pumpManager.d.ts +72 -0
- package/dist/react-native/pumpManager.d.ts.map +1 -0
- package/dist/react-native/pumpManager.js +120 -0
- package/dist/react-native/pumpManager.js.map +1 -0
- package/dist/react-native/util/connectionStringUtils.d.ts +52 -0
- package/dist/react-native/util/connectionStringUtils.d.ts.map +1 -0
- package/dist/react-native/util/connectionStringUtils.js +48 -0
- package/dist/react-native/util/connectionStringUtils.js.map +1 -0
- package/dist/react-native/util/constants.d.ts +25 -0
- package/dist/react-native/util/constants.d.ts.map +1 -0
- package/dist/react-native/util/constants.js +27 -0
- package/dist/react-native/util/constants.js.map +1 -0
- package/dist/react-native/util/delayWithoutThrow.d.ts +8 -0
- package/dist/react-native/util/delayWithoutThrow.d.ts.map +1 -0
- package/dist/react-native/util/delayWithoutThrow.js +17 -0
- package/dist/react-native/util/delayWithoutThrow.js.map +1 -0
- package/dist/react-native/util/error.d.ts +39 -0
- package/dist/react-native/util/error.d.ts.map +1 -0
- package/dist/react-native/util/error.js +103 -0
- package/dist/react-native/util/error.js.map +1 -0
- package/dist/react-native/util/getPromiseParts.d.ts +10 -0
- package/dist/react-native/util/getPromiseParts.d.ts.map +1 -0
- package/dist/react-native/util/getPromiseParts.js +20 -0
- package/dist/react-native/util/getPromiseParts.js.map +1 -0
- package/dist/react-native/util/operationOptions.d.ts +16 -0
- package/dist/react-native/util/operationOptions.d.ts.map +1 -0
- package/dist/react-native/util/operationOptions.js +4 -0
- package/dist/react-native/util/operationOptions.js.map +1 -0
- package/dist/react-native/util/parseEndpoint.d.ts +11 -0
- package/dist/react-native/util/parseEndpoint.d.ts.map +1 -0
- package/dist/react-native/util/parseEndpoint.js +17 -0
- package/dist/react-native/util/parseEndpoint.js.map +1 -0
- package/dist/react-native/util/retries.d.ts +6 -0
- package/dist/react-native/util/retries.d.ts.map +1 -0
- package/dist/react-native/util/retries.js +13 -0
- package/dist/react-native/util/retries.js.map +1 -0
- package/dist/react-native/util/runtimeInfo-react-native.d.mts.map +1 -0
- package/dist/react-native/util/runtimeInfo-react-native.mjs.map +1 -0
- package/dist/react-native/util/runtimeInfo.d.ts +6 -0
- package/dist/react-native/util/runtimeInfo.js +20 -0
- package/dist/react-native/util/timerLoop.d.ts +26 -0
- package/dist/react-native/util/timerLoop.d.ts.map +1 -0
- package/dist/react-native/util/timerLoop.js +34 -0
- package/dist/react-native/util/timerLoop.js.map +1 -0
- package/dist/react-native/util/typeGuards.d.ts +8 -0
- package/dist/react-native/util/typeGuards.d.ts.map +1 -0
- package/dist/react-native/util/typeGuards.js +12 -0
- package/dist/react-native/util/typeGuards.js.map +1 -0
- package/dist/react-native/util/utils.d.ts +7 -0
- package/dist/react-native/util/utils.d.ts.map +1 -0
- package/dist/react-native/util/utils.js +13 -0
- package/dist/react-native/util/utils.js.map +1 -0
- package/dist/react-native/withAuth.d.ts +25 -0
- package/dist/react-native/withAuth.d.ts.map +1 -0
- package/dist/react-native/withAuth.js +84 -0
- package/dist/react-native/withAuth.js.map +1 -0
- package/package.json +16 -11
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { logErrorStackTrace, logger } from "../logger.js";
|
|
4
|
+
import { isDefined } from "@azure/core-util";
|
|
5
|
+
import { isAmqpError } from "rhea-promise";
|
|
6
|
+
import { isMessagingError, translate } from "@azure/core-amqp";
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
* Logs and throws Error if the current AMQP connection is closed.
|
|
10
|
+
* @param context - The ConnectionContext associated with the current AMQP connection.
|
|
11
|
+
*/
|
|
12
|
+
export function throwErrorIfConnectionClosed(context) {
|
|
13
|
+
if (context && context.wasConnectionCloseCalled) {
|
|
14
|
+
const errorMessage = "The underlying AMQP connection is closed.";
|
|
15
|
+
const error = new Error(errorMessage);
|
|
16
|
+
logger.warning(`[${context.connectionId}] ${error.name}: ${error.message}`);
|
|
17
|
+
logErrorStackTrace(error);
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @internal
|
|
23
|
+
* Logs and Throws TypeError if given parameter is undefined or null
|
|
24
|
+
* @param connectionId - Id of the underlying AMQP connection used for logging
|
|
25
|
+
* @param methodName - Name of the method that was passed the parameter
|
|
26
|
+
* @param parameterName - Name of the parameter to check
|
|
27
|
+
* @param parameterValue - Value of the parameter to check
|
|
28
|
+
*/
|
|
29
|
+
export function throwTypeErrorIfParameterMissing(connectionId, methodName, parameterName, parameterValue) {
|
|
30
|
+
if (!isDefined(parameterValue)) {
|
|
31
|
+
const error = new TypeError(`${methodName} called without required argument "${parameterName}"`);
|
|
32
|
+
logger.warning(`[${connectionId}] ${error.name}: ${error.message}`);
|
|
33
|
+
logErrorStackTrace(error);
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Maps the amqp error conditions to the Error names.
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
var ConditionErrorNameMapper;
|
|
42
|
+
(function (ConditionErrorNameMapper) {
|
|
43
|
+
/**
|
|
44
|
+
* Indicates that a sequenc enumber was out of order.
|
|
45
|
+
*/
|
|
46
|
+
ConditionErrorNameMapper["com.microsoft:out-of-order-sequence"] = "SequenceOutOfOrderError";
|
|
47
|
+
/**
|
|
48
|
+
* Error is thrown when two or more instances connect to the same partition
|
|
49
|
+
* with different epoch values.
|
|
50
|
+
*/
|
|
51
|
+
ConditionErrorNameMapper["com.microsoft:producer-epoch-stolen"] = "ProducerDisconnectedError";
|
|
52
|
+
})(ConditionErrorNameMapper || (ConditionErrorNameMapper = {}));
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
const nonRetryableErrors = new Set([
|
|
57
|
+
"ProducerDisconnectedError",
|
|
58
|
+
"SequenceOutOfOrderError",
|
|
59
|
+
]);
|
|
60
|
+
/**
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
63
|
+
export function translateError(err) {
|
|
64
|
+
const translatedError = translate(err);
|
|
65
|
+
// If we're not dealing with a messaging error, or the original error wasn't an AMQP error,
|
|
66
|
+
// or we have a resolved code on the messaging error, just return the translated error.
|
|
67
|
+
if (!isMessagingError(translatedError) || !isAmqpError(err) || translatedError.code) {
|
|
68
|
+
return translatedError;
|
|
69
|
+
}
|
|
70
|
+
const amqpError = err;
|
|
71
|
+
const condition = amqpError.condition;
|
|
72
|
+
// If we don't have a condition, we can't map the condition to a code.
|
|
73
|
+
if (!condition) {
|
|
74
|
+
return translatedError;
|
|
75
|
+
}
|
|
76
|
+
// Attempt to resolve codes core-amqp doesn't know about.
|
|
77
|
+
translatedError.code =
|
|
78
|
+
ConditionErrorNameMapper[condition];
|
|
79
|
+
if (translatedError.code) {
|
|
80
|
+
translatedError.retryable = !nonRetryableErrors.has(translatedError.code);
|
|
81
|
+
}
|
|
82
|
+
return translatedError;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
export const idempotentAlreadyPublished = "These events have already been successfully published. When idempotent publishing is enabled, events that were acknowledged by the Event Hubs service may not be published again.";
|
|
88
|
+
/**
|
|
89
|
+
* @internal
|
|
90
|
+
*/
|
|
91
|
+
export const idempotentSomeAlreadyPublished = "1 or more of these events have already been successfully published. When idempotent publishing is enabled, events that were acknowledged by the Event Hubs service may not be published again.";
|
|
92
|
+
/**
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
export function validateProducerPartitionSettings({ enableIdempotentRetries, partitionId, partitionKey, }) {
|
|
96
|
+
if (enableIdempotentRetries && (isDefined(partitionKey) || !isDefined(partitionId))) {
|
|
97
|
+
throw new Error(`The "partitionId" must be supplied and "partitionKey" must not be provided when the EventHubProducerClient has "enableIdempotentRetries" set to true.`);
|
|
98
|
+
}
|
|
99
|
+
if (isDefined(partitionId) && isDefined(partitionKey)) {
|
|
100
|
+
throw new Error(`The partitionId (${partitionId}) and partitionKey (${partitionKey}) cannot both be specified.`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../src/util/error.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { logErrorStackTrace, logger } from \"../logger.js\";\nimport type { ConnectionContext } from \"../connectionContext.js\";\nimport { isDefined } from \"@azure/core-util\";\nimport type { AmqpError } from \"rhea-promise\";\nimport { isAmqpError } from \"rhea-promise\";\nimport type { MessagingError } from \"@azure/core-amqp\";\nimport { isMessagingError, translate } from \"@azure/core-amqp\";\n\n/**\n * @internal\n * Logs and throws Error if the current AMQP connection is closed.\n * @param context - The ConnectionContext associated with the current AMQP connection.\n */\nexport function throwErrorIfConnectionClosed(context: ConnectionContext): void {\n if (context && context.wasConnectionCloseCalled) {\n const errorMessage = \"The underlying AMQP connection is closed.\";\n const error = new Error(errorMessage);\n logger.warning(`[${context.connectionId}] ${error.name}: ${error.message}`);\n logErrorStackTrace(error);\n throw error;\n }\n}\n\n/**\n * @internal\n * Logs and Throws TypeError if given parameter is undefined or null\n * @param connectionId - Id of the underlying AMQP connection used for logging\n * @param methodName - Name of the method that was passed the parameter\n * @param parameterName - Name of the parameter to check\n * @param parameterValue - Value of the parameter to check\n */\nexport function throwTypeErrorIfParameterMissing(\n connectionId: string,\n methodName: string,\n parameterName: string,\n parameterValue: unknown,\n): void {\n if (!isDefined(parameterValue)) {\n const error = new TypeError(\n `${methodName} called without required argument \"${parameterName}\"`,\n );\n logger.warning(`[${connectionId}] ${error.name}: ${error.message}`);\n logErrorStackTrace(error);\n throw error;\n }\n}\n\n/**\n * Maps the amqp error conditions to the Error names.\n * @internal\n */\nenum ConditionErrorNameMapper {\n /**\n * Indicates that a sequenc enumber was out of order.\n */\n \"com.microsoft:out-of-order-sequence\" = \"SequenceOutOfOrderError\",\n /**\n * Error is thrown when two or more instances connect to the same partition\n * with different epoch values.\n */\n \"com.microsoft:producer-epoch-stolen\" = \"ProducerDisconnectedError\",\n}\n\n/**\n * @internal\n */\nconst nonRetryableErrors: Set<string> = new Set([\n \"ProducerDisconnectedError\",\n \"SequenceOutOfOrderError\",\n]);\n\n/**\n * @internal\n */\nexport function translateError(err: AmqpError | Error): MessagingError | Error {\n const translatedError = translate(err);\n // If we're not dealing with a messaging error, or the original error wasn't an AMQP error,\n // or we have a resolved code on the messaging error, just return the translated error.\n if (!isMessagingError(translatedError) || !isAmqpError(err) || translatedError.code) {\n return translatedError;\n }\n\n const amqpError = err as AmqpError;\n const condition = amqpError.condition;\n\n // If we don't have a condition, we can't map the condition to a code.\n if (!condition) {\n return translatedError;\n }\n\n // Attempt to resolve codes core-amqp doesn't know about.\n translatedError.code =\n ConditionErrorNameMapper[condition as keyof typeof ConditionErrorNameMapper];\n if (translatedError.code) {\n translatedError.retryable = !nonRetryableErrors.has(translatedError.code);\n }\n\n return translatedError;\n}\n\n/**\n * @internal\n */\nexport const idempotentAlreadyPublished =\n \"These events have already been successfully published. When idempotent publishing is enabled, events that were acknowledged by the Event Hubs service may not be published again.\";\n\n/**\n * @internal\n */\nexport const idempotentSomeAlreadyPublished =\n \"1 or more of these events have already been successfully published. When idempotent publishing is enabled, events that were acknowledged by the Event Hubs service may not be published again.\";\n\n/**\n * @internal\n */\nexport function validateProducerPartitionSettings({\n enableIdempotentRetries,\n partitionId,\n partitionKey,\n}: {\n enableIdempotentRetries?: boolean;\n partitionId?: string;\n partitionKey?: string;\n}): void {\n if (enableIdempotentRetries && (isDefined(partitionKey) || !isDefined(partitionId))) {\n throw new Error(\n `The \"partitionId\" must be supplied and \"partitionKey\" must not be provided when the EventHubProducerClient has \"enableIdempotentRetries\" set to true.`,\n );\n }\n\n if (isDefined(partitionId) && isDefined(partitionKey)) {\n throw new Error(\n `The partitionId (${partitionId}) and partitionKey (${partitionKey}) cannot both be specified.`,\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
* Returns a promise and the promise's resolve and reject methods.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getPromiseParts<T = unknown>(): {
|
|
6
|
+
promise: Promise<T>;
|
|
7
|
+
resolve: (value: T) => void;
|
|
8
|
+
reject: (reason: Error) => void;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=getPromiseParts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPromiseParts.d.ts","sourceRoot":"","sources":["../../../src/util/getPromiseParts.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,KAAK;IAC9C,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC,CAYA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
* Returns a promise and the promise's resolve and reject methods.
|
|
6
|
+
*/
|
|
7
|
+
export function getPromiseParts() {
|
|
8
|
+
let resolver;
|
|
9
|
+
let rejector;
|
|
10
|
+
const promise = new Promise((resolve, reject) => {
|
|
11
|
+
resolver = resolve;
|
|
12
|
+
rejector = reject;
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
promise,
|
|
16
|
+
resolve: resolver,
|
|
17
|
+
reject: rejector,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=getPromiseParts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPromiseParts.js","sourceRoot":"","sources":["../../../src/util/getPromiseParts.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;GAGG;AACH,MAAM,UAAU,eAAe;IAK7B,IAAI,QAA4B,CAAC;IACjC,IAAI,QAAgC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACjD,QAAQ,GAAG,OAAO,CAAC;QACnB,QAAQ,GAAG,MAAM,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,OAAO;QACP,OAAO,EAAE,QAAS;QAClB,MAAM,EAAE,QAAS;KAClB,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @internal\n * Returns a promise and the promise's resolve and reject methods.\n */\nexport function getPromiseParts<T = unknown>(): {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (reason: Error) => void;\n} {\n let resolver: (value: T) => void;\n let rejector: (reason?: any) => void;\n const promise = new Promise<T>((resolve, reject) => {\n resolver = resolve;\n rejector = reject;\n });\n return {\n promise,\n resolve: resolver!,\n reject: rejector!,\n };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AbortSignalLike } from "@azure/abort-controller";
|
|
2
|
+
import type { OperationTracingOptions } from "@azure/core-tracing";
|
|
3
|
+
/**
|
|
4
|
+
* Options for configuring tracing and the abortSignal.
|
|
5
|
+
*/
|
|
6
|
+
export interface OperationOptions {
|
|
7
|
+
/**
|
|
8
|
+
* The signal which can be used to abort requests.
|
|
9
|
+
*/
|
|
10
|
+
abortSignal?: AbortSignalLike;
|
|
11
|
+
/**
|
|
12
|
+
* Options for configuring tracing.
|
|
13
|
+
*/
|
|
14
|
+
tracingOptions?: OperationTracingOptions;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=operationOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operationOptions.d.ts","sourceRoot":"","sources":["../../../src/util/operationOptions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE;;GAEG;AAGH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;OAEG;IACH,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operationOptions.js","sourceRoot":"","sources":["../../../src/util/operationOptions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { OperationTracingOptions } from \"@azure/core-tracing\";\n\n/**\n * Options for configuring tracing and the abortSignal.\n */\n// NOTE: This class is intended to mirror the relevant fields and structure from\n// @azure/core-http OperationOptions\nexport interface OperationOptions {\n /**\n * The signal which can be used to abort requests.\n */\n abortSignal?: AbortSignalLike;\n /**\n * Options for configuring tracing.\n */\n tracingOptions?: OperationTracingOptions;\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses the host, hostname, and port from an endpoint.
|
|
3
|
+
* @param endpoint - And endpoint to parse.
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseEndpoint(endpoint: string): {
|
|
7
|
+
host: string;
|
|
8
|
+
hostname: string;
|
|
9
|
+
port?: string;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=parseEndpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEndpoint.d.ts","sourceRoot":"","sources":["../../../src/util/parseEndpoint.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAUjG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
/**
|
|
4
|
+
* Parses the host, hostname, and port from an endpoint.
|
|
5
|
+
* @param endpoint - And endpoint to parse.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export function parseEndpoint(endpoint) {
|
|
9
|
+
const hostMatch = endpoint.match(/.*:\/\/([^/]*)/);
|
|
10
|
+
if (!hostMatch) {
|
|
11
|
+
throw new TypeError(`Invalid endpoint missing host: ${endpoint}`);
|
|
12
|
+
}
|
|
13
|
+
const [, host] = hostMatch;
|
|
14
|
+
const [hostname, port] = host.split(":");
|
|
15
|
+
return { host, hostname, port };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=parseEndpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEndpoint.js","sourceRoot":"","sources":["../../../src/util/parseEndpoint.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACnD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,SAAS,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Parses the host, hostname, and port from an endpoint.\n * @param endpoint - And endpoint to parse.\n * @internal\n */\nexport function parseEndpoint(endpoint: string): { host: string; hostname: string; port?: string } {\n const hostMatch = endpoint.match(/.*:\\/\\/([^/]*)/);\n if (!hostMatch) {\n throw new TypeError(`Invalid endpoint missing host: ${endpoint}`);\n }\n\n const [, host] = hostMatch;\n const [hostname, port] = host.split(\":\");\n\n return { host, hostname, port };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retries.d.ts","sourceRoot":"","sources":["../../../src/util/retries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,GAAE,YAAiB,GAAG,MAAM,CAKlF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { Constants } from "@azure/core-amqp";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export function getRetryAttemptTimeoutInMs(retryOptions = {}) {
|
|
8
|
+
const { timeoutInMs } = retryOptions;
|
|
9
|
+
return typeof timeoutInMs !== "number" || !isFinite(timeoutInMs)
|
|
10
|
+
? Constants.defaultOperationTimeoutInMs
|
|
11
|
+
: timeoutInMs;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=retries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retries.js","sourceRoot":"","sources":["../../../src/util/retries.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,eAA6B,EAAE;IACxE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IACrC,OAAO,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC9D,CAAC,CAAC,SAAS,CAAC,2BAA2B;QACvC,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { RetryOptions } from \"@azure/core-amqp\";\nimport { Constants } from \"@azure/core-amqp\";\n\n/**\n * @internal\n */\nexport function getRetryAttemptTimeoutInMs(retryOptions: RetryOptions = {}): number {\n const { timeoutInMs } = retryOptions;\n return typeof timeoutInMs !== \"number\" || !isFinite(timeoutInMs)\n ? Constants.defaultOperationTimeoutInMs\n : timeoutInMs;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeInfo-react-native.d.mts","sourceRoot":"","sources":["../../../src/util/runtimeInfo-react-native.mts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAavC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeInfo-react-native.mjs","sourceRoot":"","sources":["../../../src/util/runtimeInfo-react-native.mts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,4DAA4D;AAE1G;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC;IACtE,MAAM,WAAW,GAAG;QAClB,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;KACpC,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE;KAC5C,CAAC;IAEF,OAAO,GAAG,WAAW,CAAC,GAAG,IAAI,WAAW,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACjF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nconst { Platform } = require(\"react-native\"); // eslint-disable-line @typescript-eslint/no-require-imports\n\n/**\n * Returns information about the platform this function is being run on.\n * @internal\n */\nexport function getRuntimeInfo(): string {\n const { major, minor, patch } = Platform.constants.reactNativeVersion;\n const runtimeInfo = {\n key: \"react-native\",\n value: `${major}.${minor}.${patch}`,\n };\n\n const osInfo = {\n key: \"OS\",\n value: `${Platform.OS}-${Platform.Version}`,\n };\n\n return `${runtimeInfo.key}/${runtimeInfo.value} ${osInfo.key}/${osInfo.value}`;\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
const { Platform } = require("react-native"); // eslint-disable-line @typescript-eslint/no-require-imports
|
|
4
|
+
/**
|
|
5
|
+
* Returns information about the platform this function is being run on.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export function getRuntimeInfo() {
|
|
9
|
+
const { major, minor, patch } = Platform.constants.reactNativeVersion;
|
|
10
|
+
const runtimeInfo = {
|
|
11
|
+
key: "react-native",
|
|
12
|
+
value: `${major}.${minor}.${patch}`,
|
|
13
|
+
};
|
|
14
|
+
const osInfo = {
|
|
15
|
+
key: "OS",
|
|
16
|
+
value: `${Platform.OS}-${Platform.Version}`,
|
|
17
|
+
};
|
|
18
|
+
return `${runtimeInfo.key}/${runtimeInfo.value} ${osInfo.key}/${osInfo.value}`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=runtimeInfo-react-native.mjs.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A timer loop is a loop over multiple instances of a promise every specific
|
|
3
|
+
* time interval. It is different from `setInterval` in that it waits until the
|
|
4
|
+
* promise is settled before it goes to the next iteration.
|
|
5
|
+
* */
|
|
6
|
+
export interface TimerLoop {
|
|
7
|
+
/**
|
|
8
|
+
* Starts the timer loop. If the loop is already running, the loop will be
|
|
9
|
+
* restarted.
|
|
10
|
+
*/
|
|
11
|
+
start: () => void;
|
|
12
|
+
/**
|
|
13
|
+
* Stops the timer loop. If the loop is not running, it is a no-op.
|
|
14
|
+
*/
|
|
15
|
+
stop: () => void;
|
|
16
|
+
/**
|
|
17
|
+
* Whether the loop is running.
|
|
18
|
+
*/
|
|
19
|
+
isRunning: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates a timer loop with the given timeout and task.
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare function createTimerLoop(timeoutInMs: number, createTask: () => Promise<unknown>): TimerLoop;
|
|
26
|
+
//# sourceMappingURL=timerLoop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timerLoop.d.ts","sourceRoot":"","sources":["../../../src/util/timerLoop.ts"],"names":[],"mappings":"AAKA;;;;KAIK;AACL,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GACjC,SAAS,CAyBX"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { logger } from "../logger.js";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a timer loop with the given timeout and task.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export function createTimerLoop(timeoutInMs, createTask) {
|
|
9
|
+
let token;
|
|
10
|
+
const loop = {
|
|
11
|
+
start: () => {
|
|
12
|
+
clearTimeout(token);
|
|
13
|
+
token = setTimeout(() => {
|
|
14
|
+
// Fire-and-forget background task with error handling
|
|
15
|
+
createTask()
|
|
16
|
+
.catch((err) => {
|
|
17
|
+
logger.verbose("Error in timer loop task: %O", err);
|
|
18
|
+
})
|
|
19
|
+
.finally(loop.start)
|
|
20
|
+
.catch((err) => {
|
|
21
|
+
logger.verbose("Error in timer loop finally block: %O", err);
|
|
22
|
+
});
|
|
23
|
+
}, timeoutInMs);
|
|
24
|
+
loop.isRunning = true;
|
|
25
|
+
},
|
|
26
|
+
stop: () => {
|
|
27
|
+
clearTimeout(token);
|
|
28
|
+
loop.isRunning = false;
|
|
29
|
+
},
|
|
30
|
+
isRunning: false,
|
|
31
|
+
};
|
|
32
|
+
return loop;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=timerLoop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timerLoop.js","sourceRoot":"","sources":["../../../src/util/timerLoop.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAuBtC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,UAAkC;IAElC,IAAI,KAAoC,CAAC;IACzC,MAAM,IAAI,GAAG;QACX,KAAK,EAAE,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,sDAAsD;gBACtD,UAAU,EAAE;qBACT,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,CAAC,OAAO,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;gBACtD,CAAC,CAAC;qBACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;qBACnB,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,CAAC,OAAO,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;YACP,CAAC,EAAE,WAAW,CAAC,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;QACD,SAAS,EAAE,KAAK;KACjB,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { logger } from \"../logger.js\";\n\n/**\n * A timer loop is a loop over multiple instances of a promise every specific\n * time interval. It is different from `setInterval` in that it waits until the\n * promise is settled before it goes to the next iteration.\n * */\nexport interface TimerLoop {\n /**\n * Starts the timer loop. If the loop is already running, the loop will be\n * restarted.\n */\n start: () => void;\n /**\n * Stops the timer loop. If the loop is not running, it is a no-op.\n */\n stop: () => void;\n /**\n * Whether the loop is running.\n */\n isRunning: boolean;\n}\n\n/**\n * Creates a timer loop with the given timeout and task.\n * @internal\n */\nexport function createTimerLoop(\n timeoutInMs: number,\n createTask: () => Promise<unknown>,\n): TimerLoop {\n let token: ReturnType<typeof setTimeout>;\n const loop = {\n start: () => {\n clearTimeout(token);\n token = setTimeout(() => {\n // Fire-and-forget background task with error handling\n createTask()\n .catch((err) => {\n logger.verbose(\"Error in timer loop task: %O\", err);\n })\n .finally(loop.start)\n .catch((err) => {\n logger.verbose(\"Error in timer loop finally block: %O\", err);\n });\n }, timeoutInMs);\n loop.isRunning = true;\n },\n stop: () => {\n clearTimeout(token);\n loop.isRunning = false;\n },\n isRunning: false,\n };\n return loop;\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NamedKeyCredential, SASCredential, TokenCredential } from "@azure/core-auth";
|
|
2
|
+
/**
|
|
3
|
+
* Typeguard that checks if the input is a credential type the clients accept.
|
|
4
|
+
* @param thing - Any object.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare function isCredential(thing: unknown): thing is TokenCredential | NamedKeyCredential | SASCredential;
|
|
8
|
+
//# sourceMappingURL=typeGuards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeGuards.d.ts","sourceRoot":"","sources":["../../../src/util/typeGuards.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG3F;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,eAAe,GAAG,kBAAkB,GAAG,aAAa,CAE/D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { isNamedKeyCredential, isSASCredential, isTokenCredential } from "@azure/core-auth";
|
|
4
|
+
/**
|
|
5
|
+
* Typeguard that checks if the input is a credential type the clients accept.
|
|
6
|
+
* @param thing - Any object.
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export function isCredential(thing) {
|
|
10
|
+
return isTokenCredential(thing) || isNamedKeyCredential(thing) || isSASCredential(thing);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=typeGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../../src/util/typeGuards.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE5F;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAc;IAEd,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { NamedKeyCredential, SASCredential, TokenCredential } from \"@azure/core-auth\";\nimport { isNamedKeyCredential, isSASCredential, isTokenCredential } from \"@azure/core-auth\";\n\n/**\n * Typeguard that checks if the input is a credential type the clients accept.\n * @param thing - Any object.\n * @internal\n */\nexport function isCredential(\n thing: unknown,\n): thing is TokenCredential | NamedKeyCredential | SASCredential {\n return isTokenCredential(thing) || isNamedKeyCredential(thing) || isSASCredential(thing);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/util/utils.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { randomUUID } from "@azure/core-util";
|
|
4
|
+
/**
|
|
5
|
+
* Returns a random name by appending a guid to the input string as follows:
|
|
6
|
+
* `{name}-{uuid}`.
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export function getRandomName(prefix) {
|
|
10
|
+
const str = randomUUID();
|
|
11
|
+
return prefix ? `${prefix}-${str}` : str;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/util/utils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { randomUUID } from \"@azure/core-util\";\n\n/**\n * Returns a random name by appending a guid to the input string as follows:\n * `{name}-{uuid}`.\n * @internal\n */\nexport function getRandomName(prefix?: string): string {\n const str = randomUUID();\n return prefix ? `${prefix}-${str}` : str;\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CbsClient } from "@azure/core-amqp";
|
|
2
|
+
import type { AbortSignalLike } from "@azure/abort-controller";
|
|
3
|
+
import type { ConnectionContext } from "./connectionContext.js";
|
|
4
|
+
import type { TimerLoop } from "./util/timerLoop.js";
|
|
5
|
+
import type { SimpleLogger } from "./logger.js";
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
* @param callback - The callback to be executed after the token is obtained.
|
|
9
|
+
* @param context - The connection context.
|
|
10
|
+
* @param audience - The audience for which the token is needed.
|
|
11
|
+
* @param timeoutInMs - The timeout in milliseconds.
|
|
12
|
+
* @param logger - The logger to be used for logging.
|
|
13
|
+
* @returns A TimerLoop that keeps the token refreshed.
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export declare function withAuth(callback: () => Promise<void>, context: ConnectionContext, audience: string, timeoutInMs: number, logger: SimpleLogger, options: {
|
|
17
|
+
abortSignal?: AbortSignalLike;
|
|
18
|
+
}): Promise<TimerLoop>;
|
|
19
|
+
/**
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export declare function openCbsSession(client: CbsClient, timeoutAfterStartTime: number, { abortSignal }?: {
|
|
23
|
+
abortSignal?: AbortSignalLike;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=withAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withAuth.d.ts","sourceRoot":"","sources":["../../src/withAuth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,SAAS,EAAe,MAAM,kBAAkB,CAAC;AAEjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,GACA,OAAO,CAAC,SAAS,CAAC,CAoBpB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,qBAAqB,EAAE,MAAM,EAC7B,EAAE,WAAW,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,eAAe,CAAA;CAAO,GACtD,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { Constants, TokenType, defaultCancellableLock, isSasTokenProvider } from "@azure/core-amqp";
|
|
4
|
+
import { createTimerLoop } from "./util/timerLoop.js";
|
|
5
|
+
import { logObj } from "./logger.js";
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
* @param callback - The callback to be executed after the token is obtained.
|
|
9
|
+
* @param context - The connection context.
|
|
10
|
+
* @param audience - The audience for which the token is needed.
|
|
11
|
+
* @param timeoutInMs - The timeout in milliseconds.
|
|
12
|
+
* @param logger - The logger to be used for logging.
|
|
13
|
+
* @returns A TimerLoop that keeps the token refreshed.
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export async function withAuth(callback, context, audience, timeoutInMs, logger, options) {
|
|
17
|
+
const info = await getTokenInfo(context.tokenCredential, audience);
|
|
18
|
+
await setupClaimNegotiation(context, audience, info, timeoutInMs, logger, options);
|
|
19
|
+
await callback();
|
|
20
|
+
async function createTask() {
|
|
21
|
+
try {
|
|
22
|
+
const info2 = await getTokenInfo(context.tokenCredential, audience);
|
|
23
|
+
await setupClaimNegotiation(context, audience, info2, timeoutInMs, logger, options);
|
|
24
|
+
logger.verbose(`next token renewal is in ${info2.timeToLiveInMs} milliseconds @(${new Date(Date.now() + info2.timeToLiveInMs).toString()}).`);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
logger.verbose(`an error occurred while renewing the token: ${logObj(err)}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const loop = createTimerLoop(info.timeToLiveInMs, createTask);
|
|
31
|
+
loop.start();
|
|
32
|
+
return loop;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export async function openCbsSession(client, timeoutAfterStartTime, { abortSignal } = {}) {
|
|
38
|
+
return defaultCancellableLock.acquire(client.cbsLock, () => client.init({
|
|
39
|
+
abortSignal,
|
|
40
|
+
timeoutInMs: timeoutAfterStartTime - Date.now(),
|
|
41
|
+
}), {
|
|
42
|
+
abortSignal,
|
|
43
|
+
timeoutInMs: timeoutAfterStartTime - Date.now(),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async function getAadToken(cred) {
|
|
47
|
+
const token = await cred.getToken(Constants.aadEventHubsScope);
|
|
48
|
+
if (!token) {
|
|
49
|
+
throw new Error(`Failed to get token from the provided "TokenCredential" object`);
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
token,
|
|
53
|
+
type: TokenType.CbsTokenTypeJwt,
|
|
54
|
+
timeToLiveInMs: token.expiresOnTimestamp - Date.now() - 2 * 60 * 1000,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async function getSharedKeyBasedToken(cred, audience) {
|
|
58
|
+
return {
|
|
59
|
+
token: await cred.getToken(audience),
|
|
60
|
+
type: TokenType.CbsTokenTypeSas,
|
|
61
|
+
timeToLiveInMs: 45 * 60 * 1000,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function getTokenInfo(cred, audience) {
|
|
65
|
+
return isSasTokenProvider(cred) ? getSharedKeyBasedToken(cred, audience) : getAadToken(cred);
|
|
66
|
+
}
|
|
67
|
+
function negotiateClaim({ token, type }, audience, cbsSession, timeoutAfterStartTime, lock, abortSignal) {
|
|
68
|
+
return defaultCancellableLock.acquire(lock, () => cbsSession.negotiateClaim(audience, token.token, type, {
|
|
69
|
+
abortSignal,
|
|
70
|
+
timeoutInMs: timeoutAfterStartTime - Date.now(),
|
|
71
|
+
}), {
|
|
72
|
+
abortSignal,
|
|
73
|
+
timeoutInMs: timeoutAfterStartTime - Date.now(),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async function setupClaimNegotiation(context, audience, info, timeoutInMs, logger, { abortSignal, }) {
|
|
77
|
+
const startTime = Date.now();
|
|
78
|
+
logger.verbose(`acquiring cbs lock: '${context.cbsSession.cbsLock}' for creating the cbs session`);
|
|
79
|
+
await openCbsSession(context.cbsSession, timeoutInMs + startTime, { abortSignal });
|
|
80
|
+
logger.verbose(`acquiring cbs lock: '${context.negotiateClaimLock}' for cbs auth`);
|
|
81
|
+
await negotiateClaim(info, audience, context.cbsSession, timeoutInMs + startTime, context.negotiateClaimLock, abortSignal);
|
|
82
|
+
logger.verbose("claim negotiation succeeded");
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=withAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withAuth.js","sourceRoot":"","sources":["../../src/withAuth.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAKpG,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAA6B,EAC7B,OAA0B,EAC1B,QAAgB,EAChB,WAAmB,EACnB,MAAoB,EACpB,OAEC;IAED,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACnF,MAAM,QAAQ,EAAE,CAAC;IACjB,KAAK,UAAU,UAAU;QACvB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YACpE,MAAM,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACpF,MAAM,CAAC,OAAO,CACZ,4BAA4B,KAAK,CAAC,cAAc,mBAAmB,IAAI,IAAI,CACzE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,CAClC,CAAC,QAAQ,EAAE,IAAI,CACjB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,OAAO,CAAC,+CAA+C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAiB,EACjB,qBAA6B,EAC7B,EAAE,WAAW,KAAwC,EAAE;IAEvD,OAAO,sBAAsB,CAAC,OAAO,CACnC,MAAM,CAAC,OAAO,EACd,GAAG,EAAE,CACH,MAAM,CAAC,IAAI,CAAC;QACV,WAAW;QACX,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE;KAChD,CAAC,EACJ;QACE,WAAW;QACX,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE;KAChD,CACF,CAAC;AACJ,CAAC;AAeD,KAAK,UAAU,WAAW,CAAC,IAAqB;IAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO;QACL,KAAK;QACL,IAAI,EAAE,SAAS,CAAC,eAAe;QAC/B,cAAc,EAAE,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;KACtE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAAsB,EACtB,QAAgB;IAEhB,OAAO;QACL,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACpC,IAAI,EAAE,SAAS,CAAC,eAAe;QAC/B,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;KAC/B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,IAAwC,EACxC,QAAgB;IAEhB,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,cAAc,CACrB,EAAE,KAAK,EAAE,IAAI,EAAa,EAC1B,QAAgB,EAChB,UAAqB,EACrB,qBAA6B,EAC7B,IAAY,EACZ,WAA6B;IAE7B,OAAO,sBAAsB,CAAC,OAAO,CACnC,IAAI,EACJ,GAAG,EAAE,CACH,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;QACrD,WAAW;QACX,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE;KAChD,CAAC,EACJ;QACE,WAAW;QACX,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE;KAChD,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAA0B,EAC1B,QAAgB,EAChB,IAAe,EACf,WAAmB,EACnB,MAAoB,EACpB,EACE,WAAW,GAGZ;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,CAAC,OAAO,CACZ,wBAAwB,OAAO,CAAC,UAAU,CAAC,OAAO,gCAAgC,CACnF,CAAC;IAEF,MAAM,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,GAAG,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACnF,MAAM,CAAC,OAAO,CAAC,wBAAwB,OAAO,CAAC,kBAAkB,gBAAgB,CAAC,CAAC;IACnF,MAAM,cAAc,CAClB,IAAI,EACJ,QAAQ,EACR,OAAO,CAAC,UAAU,EAClB,WAAW,GAAG,SAAS,EACvB,OAAO,CAAC,kBAAkB,EAC1B,WAAW,CACZ,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAChD,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { SasTokenProvider, CbsClient, CbsResponse } from \"@azure/core-amqp\";\nimport { Constants, TokenType, defaultCancellableLock, isSasTokenProvider } from \"@azure/core-amqp\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport type { AccessToken, TokenCredential } from \"@azure/core-auth\";\nimport type { ConnectionContext } from \"./connectionContext.js\";\nimport type { TimerLoop } from \"./util/timerLoop.js\";\nimport { createTimerLoop } from \"./util/timerLoop.js\";\nimport type { SimpleLogger } from \"./logger.js\";\nimport { logObj } from \"./logger.js\";\n\n/**\n *\n * @param callback - The callback to be executed after the token is obtained.\n * @param context - The connection context.\n * @param audience - The audience for which the token is needed.\n * @param timeoutInMs - The timeout in milliseconds.\n * @param logger - The logger to be used for logging.\n * @returns A TimerLoop that keeps the token refreshed.\n * @internal\n */\nexport async function withAuth(\n callback: () => Promise<void>,\n context: ConnectionContext,\n audience: string,\n timeoutInMs: number,\n logger: SimpleLogger,\n options: {\n abortSignal?: AbortSignalLike;\n },\n): Promise<TimerLoop> {\n const info = await getTokenInfo(context.tokenCredential, audience);\n await setupClaimNegotiation(context, audience, info, timeoutInMs, logger, options);\n await callback();\n async function createTask(): Promise<void> {\n try {\n const info2 = await getTokenInfo(context.tokenCredential, audience);\n await setupClaimNegotiation(context, audience, info2, timeoutInMs, logger, options);\n logger.verbose(\n `next token renewal is in ${info2.timeToLiveInMs} milliseconds @(${new Date(\n Date.now() + info2.timeToLiveInMs,\n ).toString()}).`,\n );\n } catch (err) {\n logger.verbose(`an error occurred while renewing the token: ${logObj(err)}`);\n }\n }\n const loop = createTimerLoop(info.timeToLiveInMs, createTask);\n loop.start();\n return loop;\n}\n\n/**\n * @internal\n */\nexport async function openCbsSession(\n client: CbsClient,\n timeoutAfterStartTime: number,\n { abortSignal }: { abortSignal?: AbortSignalLike } = {},\n): Promise<void> {\n return defaultCancellableLock.acquire(\n client.cbsLock,\n () =>\n client.init({\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n }),\n {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n },\n );\n}\n\n/**\n * A representation of an access token.\n * @internal\n */\ninterface TokenInfo {\n /** The access token */\n token: AccessToken;\n /** The type of the token */\n type: TokenType;\n /** The time duration after which the token should be refreshed */\n timeToLiveInMs: number;\n}\n\nasync function getAadToken(cred: TokenCredential): Promise<TokenInfo> {\n const token = await cred.getToken(Constants.aadEventHubsScope);\n if (!token) {\n throw new Error(`Failed to get token from the provided \"TokenCredential\" object`);\n }\n return {\n token,\n type: TokenType.CbsTokenTypeJwt,\n timeToLiveInMs: token.expiresOnTimestamp - Date.now() - 2 * 60 * 1000,\n };\n}\n\nasync function getSharedKeyBasedToken(\n cred: SasTokenProvider,\n audience: string,\n): Promise<TokenInfo> {\n return {\n token: await cred.getToken(audience),\n type: TokenType.CbsTokenTypeSas,\n timeToLiveInMs: 45 * 60 * 1000,\n };\n}\n\nasync function getTokenInfo(\n cred: SasTokenProvider | TokenCredential,\n audience: string,\n): Promise<TokenInfo> {\n return isSasTokenProvider(cred) ? getSharedKeyBasedToken(cred, audience) : getAadToken(cred);\n}\n\nfunction negotiateClaim(\n { token, type }: TokenInfo,\n audience: string,\n cbsSession: CbsClient,\n timeoutAfterStartTime: number,\n lock: string,\n abortSignal?: AbortSignalLike,\n): Promise<CbsResponse> {\n return defaultCancellableLock.acquire(\n lock,\n () =>\n cbsSession.negotiateClaim(audience, token.token, type, {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n }),\n {\n abortSignal,\n timeoutInMs: timeoutAfterStartTime - Date.now(),\n },\n );\n}\n\nasync function setupClaimNegotiation(\n context: ConnectionContext,\n audience: string,\n info: TokenInfo,\n timeoutInMs: number,\n logger: SimpleLogger,\n {\n abortSignal,\n }: {\n abortSignal?: AbortSignalLike;\n },\n): Promise<void> {\n const startTime = Date.now();\n logger.verbose(\n `acquiring cbs lock: '${context.cbsSession.cbsLock}' for creating the cbs session`,\n );\n\n await openCbsSession(context.cbsSession, timeoutInMs + startTime, { abortSignal });\n logger.verbose(`acquiring cbs lock: '${context.negotiateClaimLock}' for cbs auth`);\n await negotiateClaim(\n info,\n audience,\n context.cbsSession,\n timeoutInMs + startTime,\n context.negotiateClaimLock,\n abortSignal,\n );\n logger.verbose(\"claim negotiation succeeded\");\n}\n"]}
|