@azure/cosmos 4.4.1 → 4.5.0-alpha.20250717.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/ClientContext.d.ts +19 -10
- package/dist/browser/ClientContext.d.ts.map +1 -1
- package/dist/browser/ClientContext.js +30 -11
- package/dist/browser/ClientContext.js.map +1 -1
- package/dist/browser/CosmosClient.d.ts.map +1 -1
- package/dist/browser/CosmosClient.js +10 -2
- package/dist/browser/CosmosClient.js.map +1 -1
- package/dist/browser/PartitionKeyRangeFailoverInfo.d.ts +49 -0
- package/dist/browser/PartitionKeyRangeFailoverInfo.d.ts.map +1 -0
- package/dist/browser/PartitionKeyRangeFailoverInfo.js +130 -0
- package/dist/browser/PartitionKeyRangeFailoverInfo.js.map +1 -0
- package/dist/browser/client/ClientUtils.d.ts +3 -1
- package/dist/browser/client/ClientUtils.d.ts.map +1 -1
- package/dist/browser/client/ClientUtils.js +10 -0
- package/dist/browser/client/ClientUtils.js.map +1 -1
- package/dist/browser/client/Item/Item.d.ts.map +1 -1
- package/dist/browser/client/Item/Item.js +13 -0
- package/dist/browser/client/Item/Item.js.map +1 -1
- package/dist/browser/client/Item/Items.d.ts +1 -0
- package/dist/browser/client/Item/Items.d.ts.map +1 -1
- package/dist/browser/client/Item/Items.js +20 -3
- package/dist/browser/client/Item/Items.js.map +1 -1
- package/dist/browser/common/constants.d.ts +20 -0
- package/dist/browser/common/constants.d.ts.map +1 -1
- package/dist/browser/common/constants.js +23 -1
- package/dist/browser/common/constants.js.map +1 -1
- package/dist/browser/common/platform.d.ts +6 -1
- package/dist/browser/common/platform.d.ts.map +1 -1
- package/dist/browser/common/platform.js +23 -4
- package/dist/browser/common/platform.js.map +1 -1
- package/dist/browser/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
- package/dist/browser/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
- package/dist/browser/diagnostics/DiagnosticNodeInternal.js.map +1 -1
- package/dist/browser/documents/ConnectionPolicy.d.ts +6 -0
- package/dist/browser/documents/ConnectionPolicy.d.ts.map +1 -1
- package/dist/browser/documents/ConnectionPolicy.js +2 -0
- package/dist/browser/documents/ConnectionPolicy.js.map +1 -1
- package/dist/browser/documents/DatabaseAccount.d.ts.map +1 -1
- package/dist/browser/documents/DatabaseAccount.js +3 -0
- package/dist/browser/documents/DatabaseAccount.js.map +1 -1
- package/dist/browser/documents/PartitionKeyDefinition.d.ts +1 -1
- package/dist/browser/documents/PartitionKeyDefinition.js.map +1 -1
- package/dist/browser/extractPartitionKey.d.ts.map +1 -1
- package/dist/browser/extractPartitionKey.js +33 -20
- package/dist/browser/extractPartitionKey.js.map +1 -1
- package/dist/browser/globalEndpointManager.d.ts +6 -0
- package/dist/browser/globalEndpointManager.d.ts.map +1 -1
- package/dist/browser/globalEndpointManager.js +9 -4
- package/dist/browser/globalEndpointManager.js.map +1 -1
- package/dist/browser/globalPartitionEndpointManager.d.ts +79 -0
- package/dist/browser/globalPartitionEndpointManager.d.ts.map +1 -0
- package/dist/browser/globalPartitionEndpointManager.js +279 -0
- package/dist/browser/globalPartitionEndpointManager.js.map +1 -0
- package/dist/browser/queryExecutionContext/Aggregators/index.d.ts.map +1 -1
- package/dist/browser/queryExecutionContext/Aggregators/index.js +1 -0
- package/dist/browser/queryExecutionContext/Aggregators/index.js.map +1 -1
- package/dist/browser/queryExecutionContext/documentProducer.d.ts +2 -3
- package/dist/browser/queryExecutionContext/documentProducer.d.ts.map +1 -1
- package/dist/browser/queryExecutionContext/documentProducer.js +16 -21
- package/dist/browser/queryExecutionContext/documentProducer.js.map +1 -1
- package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
- package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
- package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
- package/dist/browser/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
- package/dist/browser/queryExecutionContext/parallelQueryExecutionContextBase.d.ts.map +1 -1
- package/dist/browser/queryExecutionContext/parallelQueryExecutionContextBase.js +2 -1
- package/dist/browser/queryExecutionContext/parallelQueryExecutionContextBase.js.map +1 -1
- package/dist/browser/queryIterator.d.ts.map +1 -1
- package/dist/browser/queryIterator.js +2 -3
- package/dist/browser/queryIterator.js.map +1 -1
- package/dist/browser/request/ErrorResponse.d.ts +1 -1
- package/dist/browser/request/ErrorResponse.d.ts.map +1 -1
- package/dist/browser/request/ErrorResponse.js.map +1 -1
- package/dist/browser/request/RequestContext.d.ts +5 -0
- package/dist/browser/request/RequestContext.d.ts.map +1 -1
- package/dist/browser/request/RequestContext.js.map +1 -1
- package/dist/browser/request/RequestHandler.d.ts.map +1 -1
- package/dist/browser/request/RequestHandler.js +14 -4
- package/dist/browser/request/RequestHandler.js.map +1 -1
- package/dist/browser/retry/RetryPolicy.d.ts +2 -2
- package/dist/browser/retry/RetryPolicy.d.ts.map +1 -1
- package/dist/browser/retry/RetryPolicy.js.map +1 -1
- package/dist/browser/retry/defaultRetryPolicy.d.ts.map +1 -1
- package/dist/browser/retry/defaultRetryPolicy.js +4 -8
- package/dist/browser/retry/defaultRetryPolicy.js.map +1 -1
- package/dist/browser/retry/endpointDiscoveryRetryPolicy.d.ts +5 -3
- package/dist/browser/retry/endpointDiscoveryRetryPolicy.d.ts.map +1 -1
- package/dist/browser/retry/endpointDiscoveryRetryPolicy.js +9 -2
- package/dist/browser/retry/endpointDiscoveryRetryPolicy.js.map +1 -1
- package/dist/browser/retry/retryUtility.d.ts.map +1 -1
- package/dist/browser/retry/retryUtility.js +11 -5
- package/dist/browser/retry/retryUtility.js.map +1 -1
- package/dist/browser/retry/timeoutFailoverRetryPolicy.d.ts +6 -3
- package/dist/browser/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
- package/dist/browser/retry/timeoutFailoverRetryPolicy.js +12 -4
- package/dist/browser/retry/timeoutFailoverRetryPolicy.js.map +1 -1
- package/dist/browser/routing/partitionKeyRangeCache.d.ts.map +1 -1
- package/dist/browser/routing/partitionKeyRangeCache.js +11 -0
- package/dist/browser/routing/partitionKeyRangeCache.js.map +1 -1
- package/dist/browser/utils/checkURL.js +6 -0
- package/dist/browser/utils/checkURL.js.map +1 -1
- package/dist/browser/utils/hashing/hash.d.ts +2 -0
- package/dist/browser/utils/hashing/hash.d.ts.map +1 -1
- package/dist/browser/utils/hashing/hash.js +19 -0
- package/dist/browser/utils/hashing/hash.js.map +1 -1
- package/dist/commonjs/ClientContext.d.ts +19 -10
- package/dist/commonjs/ClientContext.d.ts.map +1 -1
- package/dist/commonjs/ClientContext.js +30 -11
- package/dist/commonjs/ClientContext.js.map +1 -1
- package/dist/commonjs/CosmosClient.d.ts.map +1 -1
- package/dist/commonjs/CosmosClient.js +10 -2
- package/dist/commonjs/CosmosClient.js.map +1 -1
- package/dist/commonjs/PartitionKeyRangeFailoverInfo.d.ts +49 -0
- package/dist/commonjs/PartitionKeyRangeFailoverInfo.d.ts.map +1 -0
- package/dist/commonjs/PartitionKeyRangeFailoverInfo.js +135 -0
- package/dist/commonjs/PartitionKeyRangeFailoverInfo.js.map +1 -0
- package/dist/commonjs/client/ClientUtils.d.ts +3 -1
- package/dist/commonjs/client/ClientUtils.d.ts.map +1 -1
- package/dist/commonjs/client/ClientUtils.js +11 -0
- package/dist/commonjs/client/ClientUtils.js.map +1 -1
- package/dist/commonjs/client/Item/Item.d.ts.map +1 -1
- package/dist/commonjs/client/Item/Item.js +13 -0
- package/dist/commonjs/client/Item/Item.js.map +1 -1
- package/dist/commonjs/client/Item/Items.d.ts +1 -0
- package/dist/commonjs/client/Item/Items.d.ts.map +1 -1
- package/dist/commonjs/client/Item/Items.js +18 -1
- package/dist/commonjs/client/Item/Items.js.map +1 -1
- package/dist/commonjs/common/constants.d.ts +20 -0
- package/dist/commonjs/common/constants.d.ts.map +1 -1
- package/dist/commonjs/common/constants.js +24 -2
- package/dist/commonjs/common/constants.js.map +1 -1
- package/dist/commonjs/common/platform.d.ts +6 -1
- package/dist/commonjs/common/platform.d.ts.map +1 -1
- package/dist/commonjs/common/platform.js +23 -3
- package/dist/commonjs/common/platform.js.map +1 -1
- package/dist/commonjs/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
- package/dist/commonjs/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
- package/dist/commonjs/diagnostics/DiagnosticNodeInternal.js.map +1 -1
- package/dist/commonjs/documents/ConnectionPolicy.d.ts +6 -0
- package/dist/commonjs/documents/ConnectionPolicy.d.ts.map +1 -1
- package/dist/commonjs/documents/ConnectionPolicy.js +2 -0
- package/dist/commonjs/documents/ConnectionPolicy.js.map +1 -1
- package/dist/commonjs/documents/DatabaseAccount.d.ts.map +1 -1
- package/dist/commonjs/documents/DatabaseAccount.js +3 -0
- package/dist/commonjs/documents/DatabaseAccount.js.map +1 -1
- package/dist/commonjs/documents/PartitionKeyDefinition.d.ts +1 -1
- package/dist/commonjs/documents/PartitionKeyDefinition.js.map +1 -1
- package/dist/commonjs/extractPartitionKey.d.ts.map +1 -1
- package/dist/commonjs/extractPartitionKey.js +33 -20
- package/dist/commonjs/extractPartitionKey.js.map +1 -1
- package/dist/commonjs/globalEndpointManager.d.ts +6 -0
- package/dist/commonjs/globalEndpointManager.d.ts.map +1 -1
- package/dist/commonjs/globalEndpointManager.js +10 -5
- package/dist/commonjs/globalEndpointManager.js.map +1 -1
- package/dist/commonjs/globalPartitionEndpointManager.d.ts +79 -0
- package/dist/commonjs/globalPartitionEndpointManager.d.ts.map +1 -0
- package/dist/commonjs/globalPartitionEndpointManager.js +283 -0
- package/dist/commonjs/globalPartitionEndpointManager.js.map +1 -0
- package/dist/commonjs/queryExecutionContext/Aggregators/index.d.ts.map +1 -1
- package/dist/commonjs/queryExecutionContext/Aggregators/index.js +1 -0
- package/dist/commonjs/queryExecutionContext/Aggregators/index.js.map +1 -1
- package/dist/commonjs/queryExecutionContext/documentProducer.d.ts +2 -3
- package/dist/commonjs/queryExecutionContext/documentProducer.d.ts.map +1 -1
- package/dist/commonjs/queryExecutionContext/documentProducer.js +15 -20
- package/dist/commonjs/queryExecutionContext/documentProducer.js.map +1 -1
- package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
- package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
- package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
- package/dist/commonjs/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
- package/dist/commonjs/queryExecutionContext/parallelQueryExecutionContextBase.d.ts.map +1 -1
- package/dist/commonjs/queryExecutionContext/parallelQueryExecutionContextBase.js +2 -1
- package/dist/commonjs/queryExecutionContext/parallelQueryExecutionContextBase.js.map +1 -1
- package/dist/commonjs/queryIterator.d.ts.map +1 -1
- package/dist/commonjs/queryIterator.js +2 -3
- package/dist/commonjs/queryIterator.js.map +1 -1
- package/dist/commonjs/request/ErrorResponse.d.ts +1 -1
- package/dist/commonjs/request/ErrorResponse.d.ts.map +1 -1
- package/dist/commonjs/request/ErrorResponse.js.map +1 -1
- package/dist/commonjs/request/RequestContext.d.ts +5 -0
- package/dist/commonjs/request/RequestContext.d.ts.map +1 -1
- package/dist/commonjs/request/RequestContext.js.map +1 -1
- package/dist/commonjs/request/RequestHandler.d.ts.map +1 -1
- package/dist/commonjs/request/RequestHandler.js +12 -2
- package/dist/commonjs/request/RequestHandler.js.map +1 -1
- package/dist/commonjs/request/defaultAgent.js +4 -4
- package/dist/commonjs/request/defaultAgent.js.map +1 -1
- package/dist/commonjs/retry/RetryPolicy.d.ts +2 -2
- package/dist/commonjs/retry/RetryPolicy.d.ts.map +1 -1
- package/dist/commonjs/retry/RetryPolicy.js.map +1 -1
- package/dist/commonjs/retry/defaultRetryPolicy.d.ts.map +1 -1
- package/dist/commonjs/retry/defaultRetryPolicy.js +3 -7
- package/dist/commonjs/retry/defaultRetryPolicy.js.map +1 -1
- package/dist/commonjs/retry/endpointDiscoveryRetryPolicy.d.ts +5 -3
- package/dist/commonjs/retry/endpointDiscoveryRetryPolicy.d.ts.map +1 -1
- package/dist/commonjs/retry/endpointDiscoveryRetryPolicy.js +9 -2
- package/dist/commonjs/retry/endpointDiscoveryRetryPolicy.js.map +1 -1
- package/dist/commonjs/retry/retryUtility.d.ts.map +1 -1
- package/dist/commonjs/retry/retryUtility.js +11 -5
- package/dist/commonjs/retry/retryUtility.js.map +1 -1
- package/dist/commonjs/retry/timeoutFailoverRetryPolicy.d.ts +6 -3
- package/dist/commonjs/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
- package/dist/commonjs/retry/timeoutFailoverRetryPolicy.js +12 -4
- package/dist/commonjs/retry/timeoutFailoverRetryPolicy.js.map +1 -1
- package/dist/commonjs/routing/partitionKeyRangeCache.d.ts.map +1 -1
- package/dist/commonjs/routing/partitionKeyRangeCache.js +11 -0
- package/dist/commonjs/routing/partitionKeyRangeCache.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/commonjs/utils/checkURL.js +7 -0
- package/dist/commonjs/utils/checkURL.js.map +1 -1
- package/dist/commonjs/utils/hashing/hash.d.ts +2 -0
- package/dist/commonjs/utils/hashing/hash.d.ts.map +1 -1
- package/dist/commonjs/utils/hashing/hash.js +20 -0
- package/dist/commonjs/utils/hashing/hash.js.map +1 -1
- package/dist/esm/ClientContext.d.ts +19 -10
- package/dist/esm/ClientContext.d.ts.map +1 -1
- package/dist/esm/ClientContext.js +30 -11
- package/dist/esm/ClientContext.js.map +1 -1
- package/dist/esm/CosmosClient.d.ts.map +1 -1
- package/dist/esm/CosmosClient.js +10 -2
- package/dist/esm/CosmosClient.js.map +1 -1
- package/dist/esm/PartitionKeyRangeFailoverInfo.d.ts +49 -0
- package/dist/esm/PartitionKeyRangeFailoverInfo.d.ts.map +1 -0
- package/dist/esm/PartitionKeyRangeFailoverInfo.js +130 -0
- package/dist/esm/PartitionKeyRangeFailoverInfo.js.map +1 -0
- package/dist/esm/client/ClientUtils.d.ts +3 -1
- package/dist/esm/client/ClientUtils.d.ts.map +1 -1
- package/dist/esm/client/ClientUtils.js +10 -0
- package/dist/esm/client/ClientUtils.js.map +1 -1
- package/dist/esm/client/Item/Item.d.ts.map +1 -1
- package/dist/esm/client/Item/Item.js +13 -0
- package/dist/esm/client/Item/Item.js.map +1 -1
- package/dist/esm/client/Item/Items.d.ts +1 -0
- package/dist/esm/client/Item/Items.d.ts.map +1 -1
- package/dist/esm/client/Item/Items.js +20 -3
- package/dist/esm/client/Item/Items.js.map +1 -1
- package/dist/esm/common/constants.d.ts +20 -0
- package/dist/esm/common/constants.d.ts.map +1 -1
- package/dist/esm/common/constants.js +23 -1
- package/dist/esm/common/constants.js.map +1 -1
- package/dist/esm/common/platform.d.ts +6 -1
- package/dist/esm/common/platform.d.ts.map +1 -1
- package/dist/esm/common/platform.js +23 -4
- package/dist/esm/common/platform.js.map +1 -1
- package/dist/esm/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
- package/dist/esm/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
- package/dist/esm/diagnostics/DiagnosticNodeInternal.js.map +1 -1
- package/dist/esm/documents/ConnectionPolicy.d.ts +6 -0
- package/dist/esm/documents/ConnectionPolicy.d.ts.map +1 -1
- package/dist/esm/documents/ConnectionPolicy.js +2 -0
- package/dist/esm/documents/ConnectionPolicy.js.map +1 -1
- package/dist/esm/documents/DatabaseAccount.d.ts.map +1 -1
- package/dist/esm/documents/DatabaseAccount.js +3 -0
- package/dist/esm/documents/DatabaseAccount.js.map +1 -1
- package/dist/esm/documents/PartitionKeyDefinition.d.ts +1 -1
- package/dist/esm/documents/PartitionKeyDefinition.js.map +1 -1
- package/dist/esm/extractPartitionKey.d.ts.map +1 -1
- package/dist/esm/extractPartitionKey.js +33 -20
- package/dist/esm/extractPartitionKey.js.map +1 -1
- package/dist/esm/globalEndpointManager.d.ts +6 -0
- package/dist/esm/globalEndpointManager.d.ts.map +1 -1
- package/dist/esm/globalEndpointManager.js +9 -4
- package/dist/esm/globalEndpointManager.js.map +1 -1
- package/dist/esm/globalPartitionEndpointManager.d.ts +79 -0
- package/dist/esm/globalPartitionEndpointManager.d.ts.map +1 -0
- package/dist/esm/globalPartitionEndpointManager.js +279 -0
- package/dist/esm/globalPartitionEndpointManager.js.map +1 -0
- package/dist/esm/queryExecutionContext/Aggregators/index.d.ts.map +1 -1
- package/dist/esm/queryExecutionContext/Aggregators/index.js +1 -0
- package/dist/esm/queryExecutionContext/Aggregators/index.js.map +1 -1
- package/dist/esm/queryExecutionContext/documentProducer.d.ts +2 -3
- package/dist/esm/queryExecutionContext/documentProducer.d.ts.map +1 -1
- package/dist/esm/queryExecutionContext/documentProducer.js +16 -21
- package/dist/esm/queryExecutionContext/documentProducer.js.map +1 -1
- package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
- package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
- package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
- package/dist/esm/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
- package/dist/esm/queryExecutionContext/parallelQueryExecutionContextBase.d.ts.map +1 -1
- package/dist/esm/queryExecutionContext/parallelQueryExecutionContextBase.js +2 -1
- package/dist/esm/queryExecutionContext/parallelQueryExecutionContextBase.js.map +1 -1
- package/dist/esm/queryIterator.d.ts.map +1 -1
- package/dist/esm/queryIterator.js +2 -3
- package/dist/esm/queryIterator.js.map +1 -1
- package/dist/esm/request/ErrorResponse.d.ts +1 -1
- package/dist/esm/request/ErrorResponse.d.ts.map +1 -1
- package/dist/esm/request/ErrorResponse.js.map +1 -1
- package/dist/esm/request/RequestContext.d.ts +5 -0
- package/dist/esm/request/RequestContext.d.ts.map +1 -1
- package/dist/esm/request/RequestContext.js.map +1 -1
- package/dist/esm/request/RequestHandler.d.ts.map +1 -1
- package/dist/esm/request/RequestHandler.js +14 -4
- package/dist/esm/request/RequestHandler.js.map +1 -1
- package/dist/esm/request/defaultAgent.js +2 -2
- package/dist/esm/request/defaultAgent.js.map +1 -1
- package/dist/esm/retry/RetryPolicy.d.ts +2 -2
- package/dist/esm/retry/RetryPolicy.d.ts.map +1 -1
- package/dist/esm/retry/RetryPolicy.js.map +1 -1
- package/dist/esm/retry/defaultRetryPolicy.d.ts.map +1 -1
- package/dist/esm/retry/defaultRetryPolicy.js +4 -8
- package/dist/esm/retry/defaultRetryPolicy.js.map +1 -1
- package/dist/esm/retry/endpointDiscoveryRetryPolicy.d.ts +5 -3
- package/dist/esm/retry/endpointDiscoveryRetryPolicy.d.ts.map +1 -1
- package/dist/esm/retry/endpointDiscoveryRetryPolicy.js +9 -2
- package/dist/esm/retry/endpointDiscoveryRetryPolicy.js.map +1 -1
- package/dist/esm/retry/retryUtility.d.ts.map +1 -1
- package/dist/esm/retry/retryUtility.js +11 -5
- package/dist/esm/retry/retryUtility.js.map +1 -1
- package/dist/esm/retry/timeoutFailoverRetryPolicy.d.ts +6 -3
- package/dist/esm/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
- package/dist/esm/retry/timeoutFailoverRetryPolicy.js +12 -4
- package/dist/esm/retry/timeoutFailoverRetryPolicy.js.map +1 -1
- package/dist/esm/routing/partitionKeyRangeCache.d.ts.map +1 -1
- package/dist/esm/routing/partitionKeyRangeCache.js +11 -0
- package/dist/esm/routing/partitionKeyRangeCache.js.map +1 -1
- package/dist/esm/utils/checkURL.js +6 -0
- package/dist/esm/utils/checkURL.js.map +1 -1
- package/dist/esm/utils/hashing/hash.d.ts +2 -0
- package/dist/esm/utils/hashing/hash.d.ts.map +1 -1
- package/dist/esm/utils/hashing/hash.js +19 -0
- package/dist/esm/utils/hashing/hash.js.map +1 -1
- package/dist/react-native/ClientContext.d.ts +19 -10
- package/dist/react-native/ClientContext.d.ts.map +1 -1
- package/dist/react-native/ClientContext.js +30 -11
- package/dist/react-native/ClientContext.js.map +1 -1
- package/dist/react-native/CosmosClient.d.ts.map +1 -1
- package/dist/react-native/CosmosClient.js +10 -2
- package/dist/react-native/CosmosClient.js.map +1 -1
- package/dist/react-native/PartitionKeyRangeFailoverInfo.d.ts +49 -0
- package/dist/react-native/PartitionKeyRangeFailoverInfo.d.ts.map +1 -0
- package/dist/react-native/PartitionKeyRangeFailoverInfo.js +130 -0
- package/dist/react-native/PartitionKeyRangeFailoverInfo.js.map +1 -0
- package/dist/react-native/client/ClientUtils.d.ts +3 -1
- package/dist/react-native/client/ClientUtils.d.ts.map +1 -1
- package/dist/react-native/client/ClientUtils.js +10 -0
- package/dist/react-native/client/ClientUtils.js.map +1 -1
- package/dist/react-native/client/Item/Item.d.ts.map +1 -1
- package/dist/react-native/client/Item/Item.js +13 -0
- package/dist/react-native/client/Item/Item.js.map +1 -1
- package/dist/react-native/client/Item/Items.d.ts +1 -0
- package/dist/react-native/client/Item/Items.d.ts.map +1 -1
- package/dist/react-native/client/Item/Items.js +20 -3
- package/dist/react-native/client/Item/Items.js.map +1 -1
- package/dist/react-native/common/constants.d.ts +20 -0
- package/dist/react-native/common/constants.d.ts.map +1 -1
- package/dist/react-native/common/constants.js +23 -1
- package/dist/react-native/common/constants.js.map +1 -1
- package/dist/react-native/common/platform.d.ts +6 -1
- package/dist/react-native/common/platform.d.ts.map +1 -1
- package/dist/react-native/common/platform.js +23 -4
- package/dist/react-native/common/platform.js.map +1 -1
- package/dist/react-native/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
- package/dist/react-native/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
- package/dist/react-native/diagnostics/DiagnosticNodeInternal.js.map +1 -1
- package/dist/react-native/documents/ConnectionPolicy.d.ts +6 -0
- package/dist/react-native/documents/ConnectionPolicy.d.ts.map +1 -1
- package/dist/react-native/documents/ConnectionPolicy.js +2 -0
- package/dist/react-native/documents/ConnectionPolicy.js.map +1 -1
- package/dist/react-native/documents/DatabaseAccount.d.ts.map +1 -1
- package/dist/react-native/documents/DatabaseAccount.js +3 -0
- package/dist/react-native/documents/DatabaseAccount.js.map +1 -1
- package/dist/react-native/documents/PartitionKeyDefinition.d.ts +1 -1
- package/dist/react-native/documents/PartitionKeyDefinition.js.map +1 -1
- package/dist/react-native/extractPartitionKey.d.ts.map +1 -1
- package/dist/react-native/extractPartitionKey.js +33 -20
- package/dist/react-native/extractPartitionKey.js.map +1 -1
- package/dist/react-native/globalEndpointManager.d.ts +6 -0
- package/dist/react-native/globalEndpointManager.d.ts.map +1 -1
- package/dist/react-native/globalEndpointManager.js +9 -4
- package/dist/react-native/globalEndpointManager.js.map +1 -1
- package/dist/react-native/globalPartitionEndpointManager.d.ts +79 -0
- package/dist/react-native/globalPartitionEndpointManager.d.ts.map +1 -0
- package/dist/react-native/globalPartitionEndpointManager.js +279 -0
- package/dist/react-native/globalPartitionEndpointManager.js.map +1 -0
- package/dist/react-native/queryExecutionContext/Aggregators/index.d.ts.map +1 -1
- package/dist/react-native/queryExecutionContext/Aggregators/index.js +1 -0
- package/dist/react-native/queryExecutionContext/Aggregators/index.js.map +1 -1
- package/dist/react-native/queryExecutionContext/documentProducer.d.ts +2 -3
- package/dist/react-native/queryExecutionContext/documentProducer.d.ts.map +1 -1
- package/dist/react-native/queryExecutionContext/documentProducer.js +16 -21
- package/dist/react-native/queryExecutionContext/documentProducer.js.map +1 -1
- package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.d.ts +3 -1
- package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.d.ts.map +1 -1
- package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.js +10 -2
- package/dist/react-native/queryExecutionContext/hybridQueryExecutionContext.js.map +1 -1
- package/dist/react-native/queryExecutionContext/parallelQueryExecutionContextBase.d.ts.map +1 -1
- package/dist/react-native/queryExecutionContext/parallelQueryExecutionContextBase.js +2 -1
- package/dist/react-native/queryExecutionContext/parallelQueryExecutionContextBase.js.map +1 -1
- package/dist/react-native/queryIterator.d.ts.map +1 -1
- package/dist/react-native/queryIterator.js +2 -3
- package/dist/react-native/queryIterator.js.map +1 -1
- package/dist/react-native/request/ErrorResponse.d.ts +1 -1
- package/dist/react-native/request/ErrorResponse.d.ts.map +1 -1
- package/dist/react-native/request/ErrorResponse.js.map +1 -1
- package/dist/react-native/request/RequestContext.d.ts +5 -0
- package/dist/react-native/request/RequestContext.d.ts.map +1 -1
- package/dist/react-native/request/RequestContext.js.map +1 -1
- package/dist/react-native/request/RequestHandler.d.ts.map +1 -1
- package/dist/react-native/request/RequestHandler.js +14 -4
- package/dist/react-native/request/RequestHandler.js.map +1 -1
- package/dist/react-native/request/defaultAgent.js +2 -2
- package/dist/react-native/request/defaultAgent.js.map +1 -1
- package/dist/react-native/retry/RetryPolicy.d.ts +2 -2
- package/dist/react-native/retry/RetryPolicy.d.ts.map +1 -1
- package/dist/react-native/retry/RetryPolicy.js.map +1 -1
- package/dist/react-native/retry/defaultRetryPolicy.d.ts.map +1 -1
- package/dist/react-native/retry/defaultRetryPolicy.js +4 -8
- package/dist/react-native/retry/defaultRetryPolicy.js.map +1 -1
- package/dist/react-native/retry/endpointDiscoveryRetryPolicy.d.ts +5 -3
- package/dist/react-native/retry/endpointDiscoveryRetryPolicy.d.ts.map +1 -1
- package/dist/react-native/retry/endpointDiscoveryRetryPolicy.js +9 -2
- package/dist/react-native/retry/endpointDiscoveryRetryPolicy.js.map +1 -1
- package/dist/react-native/retry/retryUtility.d.ts.map +1 -1
- package/dist/react-native/retry/retryUtility.js +11 -5
- package/dist/react-native/retry/retryUtility.js.map +1 -1
- package/dist/react-native/retry/timeoutFailoverRetryPolicy.d.ts +6 -3
- package/dist/react-native/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
- package/dist/react-native/retry/timeoutFailoverRetryPolicy.js +12 -4
- package/dist/react-native/retry/timeoutFailoverRetryPolicy.js.map +1 -1
- package/dist/react-native/routing/partitionKeyRangeCache.d.ts.map +1 -1
- package/dist/react-native/routing/partitionKeyRangeCache.js +11 -0
- package/dist/react-native/routing/partitionKeyRangeCache.js.map +1 -1
- package/dist/react-native/utils/checkURL.js +6 -0
- package/dist/react-native/utils/checkURL.js.map +1 -1
- package/dist/react-native/utils/hashing/hash.d.ts +2 -0
- package/dist/react-native/utils/hashing/hash.d.ts.map +1 -1
- package/dist/react-native/utils/hashing/hash.js +19 -0
- package/dist/react-native/utils/hashing/hash.js.map +1 -1
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientContext.js","sourceRoot":"","sources":["../../src/ClientContext.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { HttpClient, Pipeline } from \"@azure/core-rest-pipeline\";\nimport { bearerTokenAuthenticationPolicy, createEmptyPipeline } from \"@azure/core-rest-pipeline\";\nimport type { PartitionKeyRange } from \"./client/Container/PartitionKeyRange.js\";\nimport type { Resource } from \"./client/Resource.js\";\nimport { Constants, HTTPMethod, OperationType, ResourceType } from \"./common/constants.js\";\nimport { getIdFromLink, getPathFromLink, parseLink } from \"./common/helper.js\";\nimport { StatusCodes, SubStatusCodes } from \"./common/statusCodes.js\";\nimport type { Agent, CosmosClientOptions } from \"./CosmosClientOptions.js\";\nimport type { ConnectionPolicy, PartitionKey } from \"./documents/index.js\";\nimport {\n ConsistencyLevel,\n DatabaseAccount,\n convertToInternalPartitionKey,\n} from \"./documents/index.js\";\nimport type { GlobalEndpointManager } from \"./globalEndpointManager.js\";\nimport type { PluginConfig } from \"./plugins/Plugin.js\";\nimport { PluginOn, executePlugins } from \"./plugins/Plugin.js\";\nimport type { FetchFunctionCallback, SqlQuerySpec } from \"./queryExecutionContext/index.js\";\nimport type { CosmosHeaders } from \"./queryExecutionContext/CosmosHeaders.js\";\nimport { QueryIterator } from \"./queryIterator.js\";\nimport type { ErrorResponse } from \"./request/index.js\";\nimport type { FeedOptions, RequestOptions, Response } from \"./request/index.js\";\nimport type { PartitionedQueryExecutionInfo } from \"./request/ErrorResponse.js\";\nimport { getHeaders } from \"./request/request.js\";\nimport type { RequestContext } from \"./request/RequestContext.js\";\nimport { RequestHandler } from \"./request/RequestHandler.js\";\nimport { SessionContainer } from \"./session/sessionContainer.js\";\nimport type { SessionContext } from \"./session/SessionContext.js\";\nimport type { BulkOptions } from \"./utils/batch.js\";\nimport { sanitizeEndpoint } from \"./utils/checkURL.js\";\nimport { supportedQueryFeaturesBuilder } from \"./utils/supportedQueryFeaturesBuilder.js\";\nimport type { AzureLogger } from \"@azure/logger\";\nimport { createClientLogger } from \"@azure/logger\";\nimport type { ClientConfigDiagnostic, CosmosDiagnostics } from \"./CosmosDiagnostics.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport type { DiagnosticWriter } from \"./diagnostics/DiagnosticWriter.js\";\nimport { LogDiagnosticWriter, NoOpDiagnosticWriter } from \"./diagnostics/DiagnosticWriter.js\";\nimport type { DiagnosticFormatter } from \"./diagnostics/DiagnosticFormatter.js\";\nimport { DefaultDiagnosticFormatter } from \"./diagnostics/DiagnosticFormatter.js\";\nimport { CosmosDbDiagnosticLevel } from \"./diagnostics/CosmosDbDiagnosticLevel.js\";\nimport { randomUUID } from \"@azure/core-util\";\nimport { getUserAgent } from \"./common/platform.js\";\nimport type { RetryOptions } from \"./retry/retryOptions.js\";\nconst logger: AzureLogger = createClientLogger(\"ClientContext\");\n\nconst QueryJsonContentType = \"application/query+json\";\nconst HttpHeaders = Constants.HttpHeaders;\n/**\n * @hidden\n * @hidden\n */\nexport class ClientContext {\n private readonly sessionContainer: SessionContainer;\n private connectionPolicy: ConnectionPolicy;\n private pipeline: Pipeline;\n private diagnosticWriter: DiagnosticWriter;\n private diagnosticFormatter: DiagnosticFormatter;\n public partitionKeyDefinitionCache: { [containerUrl: string]: any }; // TODO: PartitionKeyDefinitionCache\n /** boolean flag to support operations with client-side encryption */\n public enableEncryption: boolean = false;\n\n public constructor(\n private cosmosClientOptions: CosmosClientOptions,\n private globalEndpointManager: GlobalEndpointManager,\n private clientConfig: ClientConfigDiagnostic,\n public diagnosticLevel: CosmosDbDiagnosticLevel,\n ) {\n if (cosmosClientOptions.clientEncryptionOptions) {\n this.enableEncryption = true;\n }\n this.connectionPolicy = cosmosClientOptions.connectionPolicy;\n this.sessionContainer = new SessionContainer();\n this.partitionKeyDefinitionCache = {};\n this.pipeline = null;\n if (cosmosClientOptions.aadCredentials) {\n this.pipeline = createEmptyPipeline();\n const hrefEndpoint = sanitizeEndpoint(cosmosClientOptions.endpoint);\n const scope = `${hrefEndpoint}/.default`;\n this.pipeline.addPolicy(\n bearerTokenAuthenticationPolicy({\n credential: cosmosClientOptions.aadCredentials,\n scopes: scope,\n challengeCallbacks: {\n async authorizeRequest({ request, getAccessToken }) {\n const tokenResponse = await getAccessToken([scope], {});\n const AUTH_PREFIX = `type=aad&ver=1.0&sig=`;\n const authorizationToken = `${AUTH_PREFIX}${tokenResponse.token}`;\n request.headers.set(\"Authorization\", authorizationToken);\n },\n },\n }),\n );\n }\n this.initializeDiagnosticSettings(diagnosticLevel);\n }\n\n /** @hidden */\n public async read<T>({\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n diagnosticNode,\n }: {\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<T & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.get,\n path,\n operationType: OperationType.Read,\n resourceId,\n options,\n resourceType,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Read,\n resourceType,\n });\n\n request.headers = await this.buildHeaders(request);\n if (resourceType === ResourceType.clientencryptionkey) {\n request.headers[HttpHeaders.AllowCachedReadsHeader] = true;\n if (options.databaseRid) {\n request.headers[HttpHeaders.DatabaseRidHeader] = options.databaseRid;\n }\n }\n this.applySessionToken(request);\n\n // read will use ReadEndpoint since it uses GET operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Read, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async queryFeed<T>({\n path,\n resourceType,\n resourceId,\n resultFn,\n query,\n options,\n diagnosticNode,\n partitionKeyRangeId,\n partitionKey,\n startEpk,\n endEpk,\n correlatedActivityId,\n }: {\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n resultFn: (result: { [key: string]: any }) => any[];\n query: SqlQuerySpec | string;\n options: FeedOptions;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n partitionKey?: PartitionKey;\n startEpk?: string | undefined;\n endEpk?: string | undefined;\n correlatedActivityId?: string;\n }): Promise<Response<T & Resource>> {\n // Query operations will use ReadEndpoint even though it uses\n // GET(for queryFeed) and POST(for regular query operations)\n\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.get,\n path,\n operationType: OperationType.Query,\n partitionKeyRangeId,\n resourceId,\n resourceType,\n options,\n body: query,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Query,\n resourceType,\n });\n const requestId = randomUUID();\n if (query !== undefined) {\n request.method = HTTPMethod.post;\n }\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n request.headers = await this.buildHeaders(request);\n\n if (startEpk !== undefined && endEpk !== undefined) {\n request.headers[HttpHeaders.StartEpk] = startEpk;\n request.headers[HttpHeaders.EndEpk] = endEpk;\n request.headers[HttpHeaders.ReadFeedKeyType] = \"EffectivePartitionKeyRange\";\n }\n\n if (query !== undefined) {\n if (correlatedActivityId !== undefined) {\n request.headers[HttpHeaders.CorrelatedActivityId] = correlatedActivityId;\n }\n request.headers[HttpHeaders.IsQuery] = \"true\";\n request.headers[HttpHeaders.ContentType] = QueryJsonContentType;\n if (typeof query === \"string\") {\n request.body = { query }; // Converts query text to query object.\n }\n }\n this.applySessionToken(request);\n logger.info(\n \"query \" +\n requestId +\n \" started\" +\n (request.partitionKeyRangeId ? \" pkrid: \" + request.partitionKeyRangeId : \"\"),\n );\n logger.verbose(request);\n const start = Date.now();\n const response = await RequestHandler.request(request, diagnosticNode);\n logger.info(\"query \" + requestId + \" finished - \" + (Date.now() - start) + \"ms\");\n this.captureSessionToken(undefined, path, OperationType.Query, response.headers);\n return this.processQueryFeedResponse(response, !!query, resultFn);\n }\n\n public async getQueryPlan(\n path: string,\n resourceType: ResourceType,\n resourceId: string,\n query: SqlQuerySpec | string,\n options: FeedOptions = {},\n diagnosticNode: DiagnosticNodeInternal,\n correlatedActivityId?: string,\n ): Promise<Response<PartitionedQueryExecutionInfo>> {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n path,\n operationType: OperationType.Read,\n resourceId,\n resourceType,\n options,\n body: query,\n };\n diagnosticNode.addData({\n operationType: OperationType.Read,\n resourceType,\n });\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n request.headers = await this.buildHeaders(request);\n if (correlatedActivityId !== undefined) {\n request.headers[HttpHeaders.CorrelatedActivityId] = correlatedActivityId;\n }\n request.headers[HttpHeaders.IsQueryPlan] = \"True\";\n request.headers[HttpHeaders.QueryVersion] = \"1.4\";\n request.headers[HttpHeaders.ContentType] = QueryJsonContentType;\n request.headers[HttpHeaders.SupportedQueryFeatures] = supportedQueryFeaturesBuilder(options);\n\n if (typeof query === \"string\") {\n request.body = { query }; // Converts query text to query object.\n }\n\n this.applySessionToken(request);\n const response = await RequestHandler.request(request, diagnosticNode);\n this.captureSessionToken(undefined, path, OperationType.Query, response.headers);\n return response as any;\n }\n\n public queryPartitionKeyRanges(\n collectionLink: string,\n query?: string | SqlQuerySpec,\n options?: FeedOptions,\n ): QueryIterator<PartitionKeyRange> {\n const path = getPathFromLink(collectionLink, ResourceType.pkranges);\n const id = getIdFromLink(collectionLink);\n const cb: FetchFunctionCallback = async (diagNode, innerOptions) => {\n const response = await this.queryFeed({\n path,\n resourceType: ResourceType.pkranges,\n resourceId: id,\n resultFn: (result) => result.PartitionKeyRanges,\n query,\n options: innerOptions,\n diagnosticNode: diagNode,\n });\n return response;\n };\n return new QueryIterator<PartitionKeyRange>(this, query, options, cb);\n }\n\n public async delete<T>({\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n method = HTTPMethod.delete,\n diagnosticNode,\n }: {\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n method?: HTTPMethod;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<T & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: method,\n operationType: OperationType.Delete,\n path,\n resourceType,\n options,\n resourceId,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Delete,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n this.applySessionToken(request);\n // deleteResource will use WriteEndpoint since it uses DELETE operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n if (parseLink(path).type !== \"colls\") {\n this.captureSessionToken(undefined, path, OperationType.Delete, response.headers);\n } else {\n this.clearSessionToken(path);\n }\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async patch<T>({\n body,\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n diagnosticNode,\n }: {\n body: any;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<T & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.patch,\n operationType: OperationType.Patch,\n path,\n resourceType,\n body,\n resourceId,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Patch,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n this.applySessionToken(request);\n\n // patch will use WriteEndpoint\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Patch, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async create<T, U = T>({\n body,\n path,\n resourceType,\n resourceId,\n diagnosticNode,\n options = {},\n partitionKey,\n }: {\n body: T;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n diagnosticNode: DiagnosticNodeInternal;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n }): Promise<Response<T & U & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Create,\n path,\n resourceType,\n resourceId,\n body,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Create,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n // create will use WriteEndpoint since it uses POST operation\n this.applySessionToken(request);\n\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Create, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n private processQueryFeedResponse(\n res: Response<any>,\n isQuery: boolean,\n resultFn: (result: { [key: string]: any }) => any[],\n ): Response<any> {\n if (isQuery) {\n return {\n result: resultFn(res.result),\n headers: res.headers,\n code: res.code,\n };\n } else {\n const newResult = resultFn(res.result).map((body: any) => body);\n return {\n result: newResult,\n headers: res.headers,\n code: res.code,\n };\n }\n }\n\n private applySessionToken(requestContext: RequestContext): void {\n const request = this.getSessionParams(requestContext.path);\n\n if (requestContext.headers && requestContext.headers[HttpHeaders.SessionToken]) {\n return;\n }\n\n const sessionConsistency: ConsistencyLevel = requestContext.headers[\n HttpHeaders.ConsistencyLevel\n ] as ConsistencyLevel;\n if (!sessionConsistency) {\n return;\n }\n\n if (sessionConsistency !== ConsistencyLevel.Session) {\n return;\n }\n\n if (request.resourceAddress) {\n const sessionToken = this.sessionContainer.get(request);\n if (sessionToken) {\n requestContext.headers[HttpHeaders.SessionToken] = sessionToken;\n }\n }\n }\n\n public async replace<T>({\n body,\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n diagnosticNode,\n }: {\n body: any;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<T & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.put,\n operationType: OperationType.Replace,\n path,\n resourceType,\n body,\n resourceId,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Replace,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n this.applySessionToken(request);\n\n // replace will use WriteEndpoint since it uses PUT operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Replace, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async upsert<T, U = T>({\n body,\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n diagnosticNode,\n }: {\n body: T;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<T & U & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Upsert,\n path,\n resourceType,\n body,\n resourceId,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Upsert,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n request.headers[HttpHeaders.IsUpsert] = true;\n this.applySessionToken(request);\n\n // upsert will use WriteEndpoint since it uses POST operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Upsert, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async execute<T>({\n sprocLink,\n params,\n options = {},\n partitionKey,\n diagnosticNode,\n }: {\n sprocLink: string;\n params?: any[];\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<T>> {\n // Accept a single parameter or an array of parameters.\n // Didn't add type annotation for this because we should legacy this behavior\n if (params !== null && params !== undefined && !Array.isArray(params)) {\n params = [params];\n }\n const path = getPathFromLink(sprocLink);\n const id = getIdFromLink(sprocLink);\n\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Execute,\n path,\n resourceType: ResourceType.sproc,\n options,\n resourceId: id,\n body: params,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Execute,\n resourceType: ResourceType.sproc,\n });\n request.headers = await this.buildHeaders(request);\n // executeStoredProcedure will use WriteEndpoint since it uses POST operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n return response;\n }\n\n /**\n * Gets the Database account information.\n * @param options - `urlConnection` in the options is the endpoint url whose database account needs to be retrieved.\n * If not present, current client's url will be used.\n */\n public async getDatabaseAccount(\n diagnosticNode: DiagnosticNodeInternal,\n options: RequestOptions = {},\n ): Promise<Response<DatabaseAccount>> {\n const endpoint = options.urlConnection || this.cosmosClientOptions.endpoint;\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n endpoint,\n method: HTTPMethod.get,\n operationType: OperationType.Read,\n path: \"\",\n resourceType: ResourceType.none,\n options,\n };\n diagnosticNode.addData({\n operationType: OperationType.Read,\n resourceType: ResourceType.none,\n });\n request.headers = await this.buildHeaders(request);\n // await options.beforeOperation({ endpoint, request, headers: requestHeaders });\n const { result, headers, code, substatus, diagnostics } = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n\n const databaseAccount = new DatabaseAccount(result, headers);\n return {\n result: databaseAccount,\n headers,\n diagnostics,\n code: code,\n substatus: substatus,\n };\n }\n\n public getWriteEndpoint(diagnosticNode: DiagnosticNodeInternal): Promise<string> {\n return this.globalEndpointManager.getWriteEndpoint(diagnosticNode);\n }\n\n public getReadEndpoint(diagnosticNode: DiagnosticNodeInternal): Promise<string> {\n return this.globalEndpointManager.getReadEndpoint(diagnosticNode);\n }\n\n public getWriteEndpoints(): Promise<readonly string[]> {\n return this.globalEndpointManager.getWriteEndpoints();\n }\n\n public getReadEndpoints(): Promise<readonly string[]> {\n return this.globalEndpointManager.getReadEndpoints();\n }\n\n public async batch<T>({\n body,\n path,\n partitionKey,\n resourceId,\n options = {},\n diagnosticNode,\n }: {\n body: T;\n path: string;\n partitionKey: PartitionKey;\n resourceId: string;\n options?: RequestOptions;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<any>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Batch,\n path,\n body,\n resourceType: ResourceType.item,\n resourceId,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Batch,\n resourceType: ResourceType.item,\n });\n request.headers = await this.buildHeaders(request);\n request.headers[HttpHeaders.IsBatchRequest] = true;\n request.headers[HttpHeaders.IsBatchAtomic] = true;\n\n this.applySessionToken(request);\n\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Batch, response.headers);\n response.diagnostics = diagnosticNode.toDiagnostic(this.getClientConfig());\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async bulk<T>({\n body,\n path,\n partitionKeyRangeId,\n resourceId,\n bulkOptions = {},\n options = {},\n diagnosticNode,\n }: {\n body: T;\n path: string;\n partitionKeyRangeId: string;\n resourceId: string;\n bulkOptions?: BulkOptions;\n options?: RequestOptions;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<any>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Batch,\n path,\n body,\n resourceType: ResourceType.item,\n resourceId,\n options,\n };\n diagnosticNode.addData({\n operationType: OperationType.Batch,\n resourceType: ResourceType.item,\n });\n request.headers = await this.buildHeaders(request);\n request.headers[HttpHeaders.IsBatchRequest] = true;\n request.headers[HttpHeaders.PartitionKeyRangeID] = partitionKeyRangeId;\n request.headers[HttpHeaders.IsBatchAtomic] = false;\n request.headers[HttpHeaders.BatchContinueOnError] = bulkOptions.continueOnError ?? true;\n this.applySessionToken(request);\n\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Batch, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n private captureSessionToken(\n err: ErrorResponse,\n path: string,\n operationType: OperationType,\n resHeaders: CosmosHeaders,\n ): void {\n const request = this.getSessionParams(path);\n request.operationType = operationType;\n if (\n !err ||\n (!this.isMasterResource(request.resourceType) &&\n (err.code === StatusCodes.PreconditionFailed ||\n err.code === StatusCodes.Conflict ||\n (err.code === StatusCodes.NotFound &&\n err.substatus !== SubStatusCodes.ReadSessionNotAvailable)))\n ) {\n this.sessionContainer.set(request, resHeaders);\n }\n }\n\n public clearSessionToken(path: string): void {\n const request = this.getSessionParams(path);\n this.sessionContainer.remove(request);\n }\n\n public recordDiagnostics(diagnostic: CosmosDiagnostics): void {\n const formatted = this.diagnosticFormatter.format(diagnostic);\n this.diagnosticWriter.write(formatted);\n }\n\n public initializeDiagnosticSettings(diagnosticLevel: CosmosDbDiagnosticLevel): void {\n this.diagnosticFormatter = new DefaultDiagnosticFormatter();\n switch (diagnosticLevel) {\n case CosmosDbDiagnosticLevel.info:\n this.diagnosticWriter = new NoOpDiagnosticWriter();\n break;\n default:\n this.diagnosticWriter = new LogDiagnosticWriter();\n }\n }\n\n // TODO: move\n private getSessionParams(resourceLink: string): SessionContext {\n const resourceId: string = null;\n let resourceAddress: string = null;\n const parserOutput = parseLink(resourceLink);\n\n resourceAddress = parserOutput.objectBody.self;\n\n const resourceType = parserOutput.type;\n return {\n resourceId,\n resourceAddress,\n resourceType,\n isNameBased: true,\n };\n }\n\n private isMasterResource(resourceType: string): boolean {\n if (\n resourceType === Constants.Path.OffersPathSegment ||\n resourceType === Constants.Path.DatabasesPathSegment ||\n resourceType === Constants.Path.UsersPathSegment ||\n resourceType === Constants.Path.PermissionsPathSegment ||\n resourceType === Constants.Path.TopologyPathSegment ||\n resourceType === Constants.Path.DatabaseAccountPathSegment ||\n resourceType === Constants.Path.PartitionKeyRangesPathSegment ||\n resourceType === Constants.Path.CollectionsPathSegment\n ) {\n return true;\n }\n\n return false;\n }\n\n private buildHeaders(requestContext: RequestContext): Promise<CosmosHeaders> {\n return getHeaders({\n clientOptions: this.cosmosClientOptions,\n defaultHeaders: {\n ...this.cosmosClientOptions.defaultHeaders,\n ...requestContext.options.initialHeaders,\n },\n verb: requestContext.method,\n path: requestContext.path,\n resourceId: requestContext.resourceId,\n resourceType: requestContext.resourceType,\n options: requestContext.options,\n partitionKeyRangeId: requestContext.partitionKeyRangeId,\n useMultipleWriteLocations: this.connectionPolicy.useMultipleWriteLocations,\n partitionKey:\n requestContext.partitionKey !== undefined\n ? convertToInternalPartitionKey(requestContext.partitionKey)\n : undefined, // TODO: Move this check from here to PartitionKey\n operationType: requestContext.operationType,\n });\n }\n\n /**\n * Returns collection of properties which are derived from the context for Request Creation.\n * These properties have client wide scope, as opposed to request specific scope.\n * @returns\n */\n private getContextDerivedPropsForRequestCreation(): {\n globalEndpointManager: GlobalEndpointManager;\n connectionPolicy: ConnectionPolicy;\n requestAgent: Agent;\n client?: ClientContext;\n pipeline?: Pipeline;\n plugins: PluginConfig[];\n httpClient?: HttpClient;\n } {\n return {\n globalEndpointManager: this.globalEndpointManager,\n requestAgent: this.cosmosClientOptions.agent,\n connectionPolicy: this.connectionPolicy,\n client: this,\n plugins: this.cosmosClientOptions.plugins,\n pipeline: this.pipeline,\n httpClient: this.cosmosClientOptions.httpClient,\n };\n }\n\n public getClientConfig(): ClientConfigDiagnostic {\n return this.clientConfig;\n }\n\n /**\n * @internal\n */\n public refreshUserAgent(hostFramework: string): void {\n const updatedUserAgent = getUserAgent(this.cosmosClientOptions.userAgentSuffix, hostFramework);\n this.cosmosClientOptions.defaultHeaders[Constants.HttpHeaders.UserAgent] = updatedUserAgent;\n this.cosmosClientOptions.defaultHeaders[Constants.HttpHeaders.CustomUserAgent] =\n updatedUserAgent;\n }\n\n /**\n * @internal\n */\n public getRetryOptions(): RetryOptions {\n return this.connectionPolicy.retryOptions;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ClientContext.js","sourceRoot":"","sources":["../../src/ClientContext.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { HttpClient, Pipeline } from \"@azure/core-rest-pipeline\";\nimport { bearerTokenAuthenticationPolicy, createEmptyPipeline } from \"@azure/core-rest-pipeline\";\nimport type { PartitionKeyRange } from \"./client/Container/PartitionKeyRange.js\";\nimport type { Resource } from \"./client/Resource.js\";\nimport { Constants, HTTPMethod, OperationType, ResourceType } from \"./common/constants.js\";\nimport { getIdFromLink, getPathFromLink, parseLink } from \"./common/helper.js\";\nimport { StatusCodes, SubStatusCodes } from \"./common/statusCodes.js\";\nimport type { Agent, CosmosClientOptions } from \"./CosmosClientOptions.js\";\nimport type { ConnectionPolicy, PartitionKey } from \"./documents/index.js\";\nimport {\n ConsistencyLevel,\n DatabaseAccount,\n convertToInternalPartitionKey,\n} from \"./documents/index.js\";\nimport type { GlobalEndpointManager } from \"./globalEndpointManager.js\";\nimport type { PluginConfig } from \"./plugins/Plugin.js\";\nimport { PluginOn, executePlugins } from \"./plugins/Plugin.js\";\nimport type { FetchFunctionCallback, SqlQuerySpec } from \"./queryExecutionContext/index.js\";\nimport type { CosmosHeaders } from \"./queryExecutionContext/CosmosHeaders.js\";\nimport { QueryIterator } from \"./queryIterator.js\";\nimport type { ErrorResponse } from \"./request/index.js\";\nimport type { FeedOptions, RequestOptions, Response } from \"./request/index.js\";\nimport type { PartitionedQueryExecutionInfo } from \"./request/ErrorResponse.js\";\nimport { getHeaders } from \"./request/request.js\";\nimport type { RequestContext } from \"./request/RequestContext.js\";\nimport { RequestHandler } from \"./request/RequestHandler.js\";\nimport { SessionContainer } from \"./session/sessionContainer.js\";\nimport type { SessionContext } from \"./session/SessionContext.js\";\nimport type { BulkOptions } from \"./utils/batch.js\";\nimport { sanitizeEndpoint } from \"./utils/checkURL.js\";\nimport { supportedQueryFeaturesBuilder } from \"./utils/supportedQueryFeaturesBuilder.js\";\nimport type { AzureLogger } from \"@azure/logger\";\nimport { createClientLogger } from \"@azure/logger\";\nimport type { ClientConfigDiagnostic, CosmosDiagnostics } from \"./CosmosDiagnostics.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport type { DiagnosticWriter } from \"./diagnostics/DiagnosticWriter.js\";\nimport { LogDiagnosticWriter, NoOpDiagnosticWriter } from \"./diagnostics/DiagnosticWriter.js\";\nimport type { DiagnosticFormatter } from \"./diagnostics/DiagnosticFormatter.js\";\nimport { DefaultDiagnosticFormatter } from \"./diagnostics/DiagnosticFormatter.js\";\nimport { CosmosDbDiagnosticLevel } from \"./diagnostics/CosmosDbDiagnosticLevel.js\";\nimport { randomUUID } from \"@azure/core-util\";\nimport { getUserAgent } from \"./common/platform.js\";\nimport type { GlobalPartitionEndpointManager } from \"./globalPartitionEndpointManager.js\";\nimport type { RetryOptions } from \"./retry/retryOptions.js\";\nimport { PartitionKeyRangeCache } from \"./routing/partitionKeyRangeCache.js\";\n\nconst logger: AzureLogger = createClientLogger(\"ClientContext\");\n\nconst QueryJsonContentType = \"application/query+json\";\nconst HttpHeaders = Constants.HttpHeaders;\n/**\n * @hidden\n */\nexport class ClientContext {\n private readonly sessionContainer: SessionContainer;\n private connectionPolicy: ConnectionPolicy;\n private pipeline: Pipeline;\n private diagnosticWriter: DiagnosticWriter;\n private diagnosticFormatter: DiagnosticFormatter;\n public partitionKeyDefinitionCache: { [containerUrl: string]: any }; // TODO: PartitionKeyDefinitionCache\n /** @internal */\n public partitionKeyRangeCache: PartitionKeyRangeCache;\n /** boolean flag to support operations with client-side encryption */\n public enableEncryption: boolean = false;\n\n public constructor(\n private cosmosClientOptions: CosmosClientOptions,\n private globalEndpointManager: GlobalEndpointManager,\n private clientConfig: ClientConfigDiagnostic,\n public diagnosticLevel: CosmosDbDiagnosticLevel,\n private globalPartitionEndpointManager?: GlobalPartitionEndpointManager,\n ) {\n if (cosmosClientOptions.clientEncryptionOptions) {\n this.enableEncryption = true;\n }\n this.connectionPolicy = cosmosClientOptions.connectionPolicy;\n this.sessionContainer = new SessionContainer();\n this.partitionKeyDefinitionCache = {};\n this.pipeline = null;\n if (cosmosClientOptions.aadCredentials) {\n this.pipeline = createEmptyPipeline();\n const hrefEndpoint = sanitizeEndpoint(cosmosClientOptions.endpoint);\n const scope = `${hrefEndpoint}/.default`;\n this.pipeline.addPolicy(\n bearerTokenAuthenticationPolicy({\n credential: cosmosClientOptions.aadCredentials,\n scopes: scope,\n challengeCallbacks: {\n async authorizeRequest({ request, getAccessToken }) {\n const tokenResponse = await getAccessToken([scope], {});\n const AUTH_PREFIX = `type=aad&ver=1.0&sig=`;\n const authorizationToken = `${AUTH_PREFIX}${tokenResponse.token}`;\n request.headers.set(\"Authorization\", authorizationToken);\n },\n },\n }),\n );\n }\n this.initializeDiagnosticSettings(diagnosticLevel);\n this.partitionKeyRangeCache = new PartitionKeyRangeCache(this);\n }\n\n /** @hidden */\n public async read<T>({\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n diagnosticNode,\n partitionKeyRangeId,\n }: {\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n }): Promise<Response<T & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.get,\n path,\n operationType: OperationType.Read,\n resourceId,\n options,\n resourceType,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Read,\n resourceType,\n });\n\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n if (resourceType === ResourceType.clientencryptionkey) {\n request.headers[HttpHeaders.AllowCachedReadsHeader] = true;\n if (options.databaseRid) {\n request.headers[HttpHeaders.DatabaseRidHeader] = options.databaseRid;\n }\n }\n this.applySessionToken(request);\n\n // read will use ReadEndpoint since it uses GET operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Read, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async queryFeed<T>({\n path,\n resourceType,\n resourceId,\n resultFn,\n query,\n options,\n diagnosticNode,\n partitionKeyRangeId,\n partitionKey,\n startEpk,\n endEpk,\n correlatedActivityId,\n }: {\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n resultFn: (result: { [key: string]: any }) => any[];\n query: SqlQuerySpec | string;\n options: FeedOptions;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n partitionKey?: PartitionKey;\n startEpk?: string | undefined;\n endEpk?: string | undefined;\n correlatedActivityId?: string;\n }): Promise<Response<T & Resource>> {\n // Query operations will use ReadEndpoint even though it uses\n // GET(for queryFeed) and POST(for regular query operations)\n\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.get,\n path,\n operationType: OperationType.Query,\n partitionKeyRangeId,\n resourceId,\n resourceType,\n options,\n body: query,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Query,\n resourceType,\n });\n const requestId = randomUUID();\n if (query !== undefined) {\n request.method = HTTPMethod.post;\n }\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n request.headers = await this.buildHeaders(request);\n\n if (startEpk !== undefined && endEpk !== undefined) {\n request.headers[HttpHeaders.StartEpk] = startEpk;\n request.headers[HttpHeaders.EndEpk] = endEpk;\n request.headers[HttpHeaders.ReadFeedKeyType] = \"EffectivePartitionKeyRange\";\n }\n\n if (query !== undefined) {\n if (correlatedActivityId !== undefined) {\n request.headers[HttpHeaders.CorrelatedActivityId] = correlatedActivityId;\n }\n request.headers[HttpHeaders.IsQuery] = \"true\";\n request.headers[HttpHeaders.ContentType] = QueryJsonContentType;\n if (typeof query === \"string\") {\n request.body = { query }; // Converts query text to query object.\n }\n }\n this.applySessionToken(request);\n logger.info(\n \"query \" +\n requestId +\n \" started\" +\n (request.partitionKeyRangeId ? \" pkrid: \" + request.partitionKeyRangeId : \"\"),\n );\n logger.verbose(request);\n const start = Date.now();\n const response = await RequestHandler.request(request, diagnosticNode);\n logger.info(\"query \" + requestId + \" finished - \" + (Date.now() - start) + \"ms\");\n this.captureSessionToken(undefined, path, OperationType.Query, response.headers);\n return this.processQueryFeedResponse(response, !!query, resultFn);\n }\n\n public async getQueryPlan(\n path: string,\n resourceType: ResourceType,\n resourceId: string,\n query: SqlQuerySpec | string,\n options: FeedOptions = {},\n diagnosticNode: DiagnosticNodeInternal,\n correlatedActivityId?: string,\n ): Promise<Response<PartitionedQueryExecutionInfo>> {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n path,\n operationType: OperationType.Read,\n resourceId,\n resourceType,\n options,\n body: query,\n };\n diagnosticNode.addData({\n operationType: OperationType.Read,\n resourceType,\n });\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n request.headers = await this.buildHeaders(request);\n if (correlatedActivityId !== undefined) {\n request.headers[HttpHeaders.CorrelatedActivityId] = correlatedActivityId;\n }\n request.headers[HttpHeaders.IsQueryPlan] = \"True\";\n request.headers[HttpHeaders.QueryVersion] = \"1.4\";\n request.headers[HttpHeaders.ContentType] = QueryJsonContentType;\n request.headers[HttpHeaders.SupportedQueryFeatures] = supportedQueryFeaturesBuilder(options);\n\n if (typeof query === \"string\") {\n request.body = { query }; // Converts query text to query object.\n }\n\n this.applySessionToken(request);\n const response = await RequestHandler.request(request, diagnosticNode);\n this.captureSessionToken(undefined, path, OperationType.Query, response.headers);\n return response as any;\n }\n\n public queryPartitionKeyRanges(\n collectionLink: string,\n query?: string | SqlQuerySpec,\n options?: FeedOptions,\n ): QueryIterator<PartitionKeyRange> {\n const path = getPathFromLink(collectionLink, ResourceType.pkranges);\n const id = getIdFromLink(collectionLink);\n const cb: FetchFunctionCallback = async (diagNode, innerOptions) => {\n const response = await this.queryFeed({\n path,\n resourceType: ResourceType.pkranges,\n resourceId: id,\n resultFn: (result) => result.PartitionKeyRanges,\n query,\n options: innerOptions,\n diagnosticNode: diagNode,\n });\n return response;\n };\n return new QueryIterator<PartitionKeyRange>(this, query, options, cb);\n }\n\n public async delete<T>({\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n method = HTTPMethod.delete,\n diagnosticNode,\n partitionKeyRangeId,\n }: {\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n method?: HTTPMethod;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n }): Promise<Response<T & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: method,\n operationType: OperationType.Delete,\n path,\n resourceType,\n options,\n resourceId,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Delete,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n this.applySessionToken(request);\n // deleteResource will use WriteEndpoint since it uses DELETE operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n if (parseLink(path).type !== \"colls\") {\n this.captureSessionToken(undefined, path, OperationType.Delete, response.headers);\n } else {\n this.clearSessionToken(path);\n }\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async patch<T>({\n body,\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n diagnosticNode,\n partitionKeyRangeId,\n }: {\n body: any;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n }): Promise<Response<T & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.patch,\n operationType: OperationType.Patch,\n path,\n resourceType,\n body,\n resourceId,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Patch,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n this.applySessionToken(request);\n\n // patch will use WriteEndpoint\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Patch, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async create<T, U = T>({\n body,\n path,\n resourceType,\n resourceId,\n diagnosticNode,\n options = {},\n partitionKey,\n partitionKeyRangeId,\n }: {\n body: T;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n diagnosticNode: DiagnosticNodeInternal;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n partitionKeyRangeId?: string;\n }): Promise<Response<T & U & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Create,\n path,\n resourceType,\n resourceId,\n body,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Create,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n // create will use WriteEndpoint since it uses POST operation\n this.applySessionToken(request);\n\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Create, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n private processQueryFeedResponse(\n res: Response<any>,\n isQuery: boolean,\n resultFn: (result: { [key: string]: any }) => any[],\n ): Response<any> {\n if (isQuery) {\n return {\n result: resultFn(res.result),\n headers: res.headers,\n code: res.code,\n };\n } else {\n const newResult = resultFn(res.result).map((body: any) => body);\n return {\n result: newResult,\n headers: res.headers,\n code: res.code,\n };\n }\n }\n\n private applySessionToken(requestContext: RequestContext): void {\n const request = this.getSessionParams(requestContext.path);\n\n if (requestContext.headers && requestContext.headers[HttpHeaders.SessionToken]) {\n return;\n }\n\n const sessionConsistency: ConsistencyLevel = requestContext.headers[\n HttpHeaders.ConsistencyLevel\n ] as ConsistencyLevel;\n if (!sessionConsistency) {\n return;\n }\n\n if (sessionConsistency !== ConsistencyLevel.Session) {\n return;\n }\n\n if (request.resourceAddress) {\n const sessionToken = this.sessionContainer.get(request);\n if (sessionToken) {\n requestContext.headers[HttpHeaders.SessionToken] = sessionToken;\n }\n }\n }\n\n public async replace<T>({\n body,\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n diagnosticNode,\n partitionKeyRangeId,\n }: {\n body: any;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n }): Promise<Response<T & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.put,\n operationType: OperationType.Replace,\n path,\n resourceType,\n body,\n resourceId,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Replace,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n this.applySessionToken(request);\n\n // replace will use WriteEndpoint since it uses PUT operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Replace, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async upsert<T, U = T>({\n body,\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n diagnosticNode,\n partitionKeyRangeId,\n }: {\n body: T;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n }): Promise<Response<T & U & Resource>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Upsert,\n path,\n resourceType,\n body,\n resourceId,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Upsert,\n resourceType,\n });\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n request.headers[HttpHeaders.IsUpsert] = true;\n this.applySessionToken(request);\n\n // upsert will use WriteEndpoint since it uses POST operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Upsert, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async execute<T>({\n sprocLink,\n params,\n options = {},\n partitionKey,\n diagnosticNode,\n partitionKeyRangeId,\n }: {\n sprocLink: string;\n params?: any[];\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n }): Promise<Response<T>> {\n // Accept a single parameter or an array of parameters.\n // Didn't add type annotation for this because we should legacy this behavior\n if (params !== null && params !== undefined && !Array.isArray(params)) {\n params = [params];\n }\n const path = getPathFromLink(sprocLink);\n const id = getIdFromLink(sprocLink);\n\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Execute,\n path,\n resourceType: ResourceType.sproc,\n options,\n resourceId: id,\n body: params,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Execute,\n resourceType: ResourceType.sproc,\n });\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n // executeStoredProcedure will use WriteEndpoint since it uses POST operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n return response;\n }\n\n /**\n * Gets the Database account information.\n * @param options - `urlConnection` in the options is the endpoint url whose database account needs to be retrieved.\n * If not present, current client's url will be used.\n */\n public async getDatabaseAccount(\n diagnosticNode: DiagnosticNodeInternal,\n options: RequestOptions = {},\n ): Promise<Response<DatabaseAccount>> {\n const endpoint = options.urlConnection || this.cosmosClientOptions.endpoint;\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n endpoint,\n method: HTTPMethod.get,\n operationType: OperationType.Read,\n path: \"\",\n resourceType: ResourceType.none,\n options,\n };\n diagnosticNode.addData({\n operationType: OperationType.Read,\n resourceType: ResourceType.none,\n });\n request.headers = await this.buildHeaders(request);\n // await options.beforeOperation({ endpoint, request, headers: requestHeaders });\n const { result, headers, code, substatus, diagnostics } = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n\n const databaseAccount = new DatabaseAccount(result, headers);\n return {\n result: databaseAccount,\n headers,\n diagnostics,\n code: code,\n substatus: substatus,\n };\n }\n\n public getWriteEndpoint(diagnosticNode: DiagnosticNodeInternal): Promise<string> {\n return this.globalEndpointManager.getWriteEndpoint(diagnosticNode);\n }\n\n public getReadEndpoint(diagnosticNode: DiagnosticNodeInternal): Promise<string> {\n return this.globalEndpointManager.getReadEndpoint(diagnosticNode);\n }\n\n public getWriteEndpoints(): Promise<readonly string[]> {\n return this.globalEndpointManager.getWriteEndpoints();\n }\n\n public getReadEndpoints(): Promise<readonly string[]> {\n return this.globalEndpointManager.getReadEndpoints();\n }\n\n public async batch<T>({\n body,\n path,\n partitionKey,\n resourceId,\n options = {},\n diagnosticNode,\n partitionKeyRangeId,\n }: {\n body: T;\n path: string;\n partitionKey: PartitionKey;\n resourceId: string;\n options?: RequestOptions;\n diagnosticNode: DiagnosticNodeInternal;\n partitionKeyRangeId?: string;\n }): Promise<Response<any>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Batch,\n path,\n body,\n resourceType: ResourceType.item,\n resourceId,\n options,\n partitionKey,\n };\n diagnosticNode.addData({\n operationType: OperationType.Batch,\n resourceType: ResourceType.item,\n });\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n request.headers[HttpHeaders.IsBatchRequest] = true;\n request.headers[HttpHeaders.IsBatchAtomic] = true;\n\n this.applySessionToken(request);\n\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Batch, response.headers);\n response.diagnostics = diagnosticNode.toDiagnostic(this.getClientConfig());\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n public async bulk<T>({\n body,\n path,\n partitionKeyRangeId,\n resourceId,\n bulkOptions = {},\n options = {},\n diagnosticNode,\n }: {\n body: T;\n path: string;\n partitionKeyRangeId: string;\n resourceId: string;\n bulkOptions?: BulkOptions;\n options?: RequestOptions;\n diagnosticNode: DiagnosticNodeInternal;\n }): Promise<Response<any>> {\n try {\n const request: RequestContext = {\n ...this.getContextDerivedPropsForRequestCreation(),\n method: HTTPMethod.post,\n operationType: OperationType.Batch,\n path,\n body,\n resourceType: ResourceType.item,\n resourceId,\n options,\n };\n diagnosticNode.addData({\n operationType: OperationType.Batch,\n resourceType: ResourceType.item,\n });\n request.headers = await this.buildHeaders(request);\n request.partitionKeyRangeId = partitionKeyRangeId;\n request.headers[HttpHeaders.IsBatchRequest] = true;\n request.headers[HttpHeaders.PartitionKeyRangeID] = partitionKeyRangeId;\n request.headers[HttpHeaders.IsBatchAtomic] = false;\n request.headers[HttpHeaders.BatchContinueOnError] = bulkOptions.continueOnError ?? true;\n this.applySessionToken(request);\n\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n diagnosticNode,\n request.resourceType,\n request.operationType,\n );\n const response = await executePlugins(\n diagnosticNode,\n request,\n RequestHandler.request,\n PluginOn.operation,\n );\n this.captureSessionToken(undefined, path, OperationType.Batch, response.headers);\n return response;\n } catch (err: any) {\n this.captureSessionToken(err, path, OperationType.Upsert, (err as ErrorResponse).headers);\n throw err;\n }\n }\n\n private captureSessionToken(\n err: ErrorResponse,\n path: string,\n operationType: OperationType,\n resHeaders: CosmosHeaders,\n ): void {\n const request = this.getSessionParams(path);\n request.operationType = operationType;\n if (\n !err ||\n (!this.isMasterResource(request.resourceType) &&\n (err.code === StatusCodes.PreconditionFailed ||\n err.code === StatusCodes.Conflict ||\n (err.code === StatusCodes.NotFound &&\n err.substatus !== SubStatusCodes.ReadSessionNotAvailable)))\n ) {\n this.sessionContainer.set(request, resHeaders);\n }\n }\n\n public clearSessionToken(path: string): void {\n const request = this.getSessionParams(path);\n this.sessionContainer.remove(request);\n }\n\n public recordDiagnostics(diagnostic: CosmosDiagnostics): void {\n const formatted = this.diagnosticFormatter.format(diagnostic);\n this.diagnosticWriter.write(formatted);\n }\n\n public initializeDiagnosticSettings(diagnosticLevel: CosmosDbDiagnosticLevel): void {\n this.diagnosticFormatter = new DefaultDiagnosticFormatter();\n switch (diagnosticLevel) {\n case CosmosDbDiagnosticLevel.info:\n this.diagnosticWriter = new NoOpDiagnosticWriter();\n break;\n default:\n this.diagnosticWriter = new LogDiagnosticWriter();\n }\n }\n\n // TODO: move\n private getSessionParams(resourceLink: string): SessionContext {\n const resourceId: string = null;\n let resourceAddress: string = null;\n const parserOutput = parseLink(resourceLink);\n\n resourceAddress = parserOutput.objectBody.self;\n\n const resourceType = parserOutput.type;\n return {\n resourceId,\n resourceAddress,\n resourceType,\n isNameBased: true,\n };\n }\n\n private isMasterResource(resourceType: string): boolean {\n if (\n resourceType === Constants.Path.OffersPathSegment ||\n resourceType === Constants.Path.DatabasesPathSegment ||\n resourceType === Constants.Path.UsersPathSegment ||\n resourceType === Constants.Path.PermissionsPathSegment ||\n resourceType === Constants.Path.TopologyPathSegment ||\n resourceType === Constants.Path.DatabaseAccountPathSegment ||\n resourceType === Constants.Path.PartitionKeyRangesPathSegment ||\n resourceType === Constants.Path.CollectionsPathSegment\n ) {\n return true;\n }\n\n return false;\n }\n\n private buildHeaders(requestContext: RequestContext): Promise<CosmosHeaders> {\n return getHeaders({\n clientOptions: this.cosmosClientOptions,\n defaultHeaders: {\n ...this.cosmosClientOptions.defaultHeaders,\n ...requestContext.options.initialHeaders,\n },\n verb: requestContext.method,\n path: requestContext.path,\n resourceId: requestContext.resourceId,\n resourceType: requestContext.resourceType,\n options: requestContext.options,\n partitionKeyRangeId: requestContext.partitionKeyRangeId,\n useMultipleWriteLocations: this.connectionPolicy.useMultipleWriteLocations,\n partitionKey:\n requestContext.partitionKey !== undefined\n ? convertToInternalPartitionKey(requestContext.partitionKey)\n : undefined, // TODO: Move this check from here to PartitionKey\n operationType: requestContext.operationType,\n });\n }\n\n /**\n * Returns collection of properties which are derived from the context for Request Creation.\n * These properties have client wide scope, as opposed to request specific scope.\n * @returns\n */\n private getContextDerivedPropsForRequestCreation(): {\n globalEndpointManager: GlobalEndpointManager;\n connectionPolicy: ConnectionPolicy;\n requestAgent: Agent;\n client?: ClientContext;\n pipeline?: Pipeline;\n plugins: PluginConfig[];\n httpClient?: HttpClient;\n globalPartitionEndpointManager?: GlobalPartitionEndpointManager;\n } {\n return {\n globalEndpointManager: this.globalEndpointManager,\n requestAgent: this.cosmosClientOptions.agent,\n connectionPolicy: this.connectionPolicy,\n client: this,\n plugins: this.cosmosClientOptions.plugins,\n pipeline: this.pipeline,\n httpClient: this.cosmosClientOptions.httpClient,\n globalPartitionEndpointManager: this.globalPartitionEndpointManager,\n };\n }\n\n public getClientConfig(): ClientConfigDiagnostic {\n return this.clientConfig;\n }\n\n /**\n * @internal\n */\n public refreshUserAgent(hostFramework: string): void {\n const updatedUserAgent = getUserAgent(this.cosmosClientOptions, hostFramework);\n this.cosmosClientOptions.defaultHeaders[Constants.HttpHeaders.UserAgent] = updatedUserAgent;\n this.cosmosClientOptions.defaultHeaders[Constants.HttpHeaders.CustomUserAgent] =\n updatedUserAgent;\n }\n\n /**\n * @internal\n */\n public getRetryOptions(): RetryOptions {\n return this.connectionPolicy.retryOptions;\n }\n\n /**\n * @internal\n */\n public isPartitionLevelFailOverEnabled(): boolean {\n return (\n this.connectionPolicy.enablePartitionLevelFailover ||\n this.connectionPolicy.enablePartitionLevelCircuitBreaker\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CosmosClient.d.ts","sourceRoot":"","sources":["../../src/CosmosClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAKxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"CosmosClient.d.ts","sourceRoot":"","sources":["../../src/CosmosClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAKxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKtD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,YAAY;IACvB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC;;;;OAIG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAiB;IAO1C;;OAEG;gBACS,gBAAgB,EAAE,MAAM;IACpC;;;OAGG;gBACS,OAAO,EAAE,mBAAmB;IAqGxC,OAAO,CAAC,gCAAgC;IAmBxC;;OAEG;IACU,kBAAkB,CAC7B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAM7C;;OAEG;IACU,0BAA0B,CACrC,cAAc,EAAE,sBAAsB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAW7C;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMhD;;;;OAIG;IACU,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAM/C;;;;OAIG;IACI,iBAAiB,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAItD;;;;OAIG;IACI,gBAAgB,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAIrC;;;OAGG;IACI,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK;IAI/B;;OAEG;IACI,OAAO,IAAI,IAAI;YAWR,6BAA6B;CA8B5C"}
|
package/dist/esm/CosmosClient.js
CHANGED
|
@@ -14,6 +14,7 @@ import { GlobalEndpointManager } from "./globalEndpointManager.js";
|
|
|
14
14
|
import { ResourceResponse } from "./request/index.js";
|
|
15
15
|
import { checkURL } from "./utils/checkURL.js";
|
|
16
16
|
import { getEmptyCosmosDiagnostics, withDiagnostics } from "./utils/diagnostics.js";
|
|
17
|
+
import { GlobalPartitionEndpointManager } from "./globalPartitionEndpointManager.js";
|
|
17
18
|
/**
|
|
18
19
|
* Provides a client-side logical representation of the Azure Cosmos DB database account.
|
|
19
20
|
* This client is used to configure and execute requests in the Azure Cosmos DB database service.
|
|
@@ -79,11 +80,15 @@ export class CosmosClient {
|
|
|
79
80
|
optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ThroughputBucket] =
|
|
80
81
|
optionsOrConnectionString.throughputBucket;
|
|
81
82
|
}
|
|
82
|
-
const userAgent = getUserAgent(optionsOrConnectionString
|
|
83
|
+
const userAgent = getUserAgent(optionsOrConnectionString);
|
|
83
84
|
optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.UserAgent] = userAgent;
|
|
84
85
|
optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CustomUserAgent] = userAgent;
|
|
85
86
|
const globalEndpointManager = new GlobalEndpointManager(optionsOrConnectionString, async (diagnosticNode, opts) => this.getDatabaseAccountInternal(diagnosticNode, opts));
|
|
86
|
-
|
|
87
|
+
if (optionsOrConnectionString.connectionPolicy.enablePartitionLevelFailover ||
|
|
88
|
+
optionsOrConnectionString.connectionPolicy.enablePartitionLevelCircuitBreaker) {
|
|
89
|
+
this.globalPartitionEndpointManager = new GlobalPartitionEndpointManager(optionsOrConnectionString, globalEndpointManager);
|
|
90
|
+
}
|
|
91
|
+
this.clientContext = new ClientContext(optionsOrConnectionString, globalEndpointManager, clientConfig, determineDiagnosticLevel(optionsOrConnectionString.diagnosticLevel, getDiagnosticLevelFromEnvironment()), this.globalPartitionEndpointManager);
|
|
87
92
|
if (((_a = optionsOrConnectionString.connectionPolicy) === null || _a === void 0 ? void 0 : _a.enableEndpointDiscovery) &&
|
|
88
93
|
((_b = optionsOrConnectionString.connectionPolicy) === null || _b === void 0 ? void 0 : _b.enableBackgroundEndpointRefreshing)) {
|
|
89
94
|
this.backgroundRefreshEndpointList(globalEndpointManager, optionsOrConnectionString.connectionPolicy.endpointRefreshRateInMs ||
|
|
@@ -206,6 +211,9 @@ export class CosmosClient {
|
|
|
206
211
|
clearTimeout(this.encryptionManager.encryptionKeyStoreProvider.cacheRefresher);
|
|
207
212
|
clearTimeout(this.encryptionManager.protectedDataEncryptionKeyCache.cacheRefresher);
|
|
208
213
|
}
|
|
214
|
+
if (this.globalPartitionEndpointManager) {
|
|
215
|
+
this.globalPartitionEndpointManager.dispose();
|
|
216
|
+
}
|
|
209
217
|
}
|
|
210
218
|
async backgroundRefreshEndpointList(globalEndpointManager, refreshRate) {
|
|
211
219
|
this.endpointRefresher = setInterval(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CosmosClient.js","sourceRoot":"","sources":["../../src/CosmosClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Database, Databases } from \"./client/Database/index.js\";\nimport { Offer, Offers } from \"./client/Offer/index.js\";\nimport { ClientContext } from \"./ClientContext.js\";\nimport { parseConnectionString } from \"./common/index.js\";\nimport { Constants } from \"./common/constants.js\";\nimport { getUserAgent } from \"./common/platform.js\";\nimport type { CosmosClientOptions } from \"./CosmosClientOptions.js\";\nimport type { ClientConfigDiagnostic } from \"./CosmosDiagnostics.js\";\nimport {\n determineDiagnosticLevel,\n getDiagnosticLevelFromEnvironment,\n} from \"./diagnostics/index.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport { DiagnosticNodeType } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport type { DatabaseAccount } from \"./documents/index.js\";\nimport { defaultConnectionPolicy } from \"./documents/index.js\";\nimport { EncryptionManager } from \"./encryption/EncryptionManager.js\";\nimport { GlobalEndpointManager } from \"./globalEndpointManager.js\";\nimport type { RequestOptions } from \"./request/index.js\";\nimport { ResourceResponse } from \"./request/index.js\";\nimport { checkURL } from \"./utils/checkURL.js\";\nimport { getEmptyCosmosDiagnostics, withDiagnostics } from \"./utils/diagnostics.js\";\n\n/**\n * Provides a client-side logical representation of the Azure Cosmos DB database account.\n * This client is used to configure and execute requests in the Azure Cosmos DB database service.\n * @example Instantiate a client and create a new database\n * ```ts snippet:CosmosClientCreate\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * ```\n * @example Instantiate a client with custom Connection Policy\n * ```ts snippet:CosmosClientWithConnectionPolicy\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({\n * endpoint,\n * key,\n * connectionPolicy: {\n * requestTimeout: 10000,\n * },\n * });\n * ```\n */\nexport class CosmosClient {\n /**\n * Used for creating new databases, or querying/reading all databases.\n *\n * Use `.database(id)` to read, replace, or delete a specific, existing database by id.\n *\n * @example Create a new database\n * ```ts snippet:CosmosClientDatabases\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const { resource: databaseDefinition, database } = await client.databases.create({\n * id: \"<name here>\",\n * });\n * ```\n */\n public readonly databases: Databases;\n /**\n * Used for querying & reading all offers.\n *\n * Use `.offer(id)` to read, or replace existing offers.\n */\n public readonly offers: Offers;\n private clientContext: ClientContext;\n private endpointRefresher: NodeJS.Timeout;\n /**\n * @internal\n */\n private encryptionManager: EncryptionManager;\n /**\n * Creates a new {@link CosmosClient} object from a connection string. Your database connection string can be found in the Azure Portal\n */\n constructor(connectionString: string);\n /**\n * Creates a new {@link CosmosClient} object. See {@link CosmosClientOptions} for more details on what options you can use.\n * @param options - bag of options; require at least endpoint and auth to be configured\n */\n constructor(options: CosmosClientOptions);\n constructor(optionsOrConnectionString: string | CosmosClientOptions) {\n if (typeof optionsOrConnectionString === \"string\") {\n optionsOrConnectionString = parseConnectionString(optionsOrConnectionString);\n } else if (optionsOrConnectionString.connectionString) {\n const { endpoint, key } = parseConnectionString(optionsOrConnectionString.connectionString);\n optionsOrConnectionString.endpoint = endpoint;\n optionsOrConnectionString.key = key;\n }\n\n const endpoint = checkURL(optionsOrConnectionString.endpoint);\n if (!endpoint) {\n throw new Error(\"Invalid endpoint specified\");\n }\n\n if (optionsOrConnectionString.clientEncryptionOptions) {\n if (!optionsOrConnectionString.clientEncryptionOptions.keyEncryptionKeyResolver) {\n throw new Error(\n \"KeyEncryptionKeyResolver needs to be provided to enable client-side encryption.\",\n );\n }\n if (\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds &&\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds < 60\n ) {\n throw new Error(\"EncryptionKeyTimeToLiveInSeconds needs to be >= 60 seconds.\");\n }\n this.encryptionManager = new EncryptionManager(\n optionsOrConnectionString.clientEncryptionOptions.keyEncryptionKeyResolver,\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds,\n );\n }\n\n const clientConfig: ClientConfigDiagnostic =\n this.initializeClientConfigDiagnostic(optionsOrConnectionString);\n\n optionsOrConnectionString.connectionPolicy = Object.assign(\n {},\n defaultConnectionPolicy,\n optionsOrConnectionString.connectionPolicy,\n );\n\n optionsOrConnectionString.defaultHeaders = optionsOrConnectionString.defaultHeaders || {};\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CacheControl] = \"no-cache\";\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.Version] =\n Constants.CurrentVersion;\n if (optionsOrConnectionString.consistencyLevel !== undefined) {\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ConsistencyLevel] =\n optionsOrConnectionString.consistencyLevel;\n }\n\n if (optionsOrConnectionString.throughputBucket !== undefined) {\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ThroughputBucket] =\n optionsOrConnectionString.throughputBucket;\n }\n\n const userAgent = getUserAgent(optionsOrConnectionString.userAgentSuffix);\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.UserAgent] = userAgent;\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CustomUserAgent] = userAgent;\n\n const globalEndpointManager = new GlobalEndpointManager(\n optionsOrConnectionString,\n async (diagnosticNode: DiagnosticNodeInternal, opts: RequestOptions) =>\n this.getDatabaseAccountInternal(diagnosticNode, opts),\n );\n\n this.clientContext = new ClientContext(\n optionsOrConnectionString,\n globalEndpointManager,\n clientConfig,\n determineDiagnosticLevel(\n optionsOrConnectionString.diagnosticLevel,\n getDiagnosticLevelFromEnvironment(),\n ),\n );\n if (\n optionsOrConnectionString.connectionPolicy?.enableEndpointDiscovery &&\n optionsOrConnectionString.connectionPolicy?.enableBackgroundEndpointRefreshing\n ) {\n this.backgroundRefreshEndpointList(\n globalEndpointManager,\n optionsOrConnectionString.connectionPolicy.endpointRefreshRateInMs ||\n defaultConnectionPolicy.endpointRefreshRateInMs,\n );\n }\n\n this.databases = new Databases(this, this.clientContext, this.encryptionManager);\n this.offers = new Offers(this, this.clientContext);\n }\n\n private initializeClientConfigDiagnostic(\n optionsOrConnectionString: CosmosClientOptions,\n ): ClientConfigDiagnostic {\n return {\n endpoint: optionsOrConnectionString.endpoint,\n resourceTokensConfigured: optionsOrConnectionString.resourceTokens !== undefined,\n tokenProviderConfigured: optionsOrConnectionString.tokenProvider !== undefined,\n aadCredentialsConfigured: optionsOrConnectionString.aadCredentials !== undefined,\n connectionPolicyConfigured: optionsOrConnectionString.connectionPolicy !== undefined,\n consistencyLevel: optionsOrConnectionString.consistencyLevel,\n defaultHeaders: optionsOrConnectionString.defaultHeaders,\n agentConfigured: optionsOrConnectionString.agent !== undefined,\n userAgentSuffix: optionsOrConnectionString.userAgentSuffix,\n diagnosticLevel: optionsOrConnectionString.diagnosticLevel,\n pluginsConfigured: optionsOrConnectionString.plugins !== undefined,\n sDKVersion: Constants.SDKVersion,\n };\n }\n\n /**\n * Get information about the current {@link DatabaseAccount} (including which regions are supported, etc.)\n */\n public async getDatabaseAccount(\n options?: RequestOptions,\n ): Promise<ResourceResponse<DatabaseAccount>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.getDatabaseAccountInternal(diagnosticNode, options);\n }, this.clientContext);\n }\n\n /**\n * @hidden\n */\n public async getDatabaseAccountInternal(\n diagnosticNode: DiagnosticNodeInternal,\n options?: RequestOptions,\n ): Promise<ResourceResponse<DatabaseAccount>> {\n const response = await this.clientContext.getDatabaseAccount(diagnosticNode, options);\n return new ResourceResponse<DatabaseAccount>(\n response.result,\n response.headers,\n response.code,\n getEmptyCosmosDiagnostics(),\n response.substatus,\n );\n }\n\n /**\n * Gets the currently used write endpoint url. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public async getWriteEndpoint(): Promise<string> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.clientContext.getWriteEndpoint(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * Gets the currently used read endpoint. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public async getReadEndpoint(): Promise<string> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.clientContext.getReadEndpoint(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * Gets the known write endpoints. Useful for troubleshooting purposes.\n *\n * The urls may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public getWriteEndpoints(): Promise<readonly string[]> {\n return this.clientContext.getWriteEndpoints();\n }\n\n /**\n * Gets the currently used read endpoint. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public getReadEndpoints(): Promise<readonly string[]> {\n return this.clientContext.getReadEndpoints();\n }\n\n /**\n * Used for reading, updating, or deleting a existing database by id or accessing containers belonging to that database.\n *\n * This does not make a network call. Use `.read` to get info about the database after getting the {@link Database} object.\n *\n * @param id - The id of the database.\n * @example Create a new container off of an existing database\n * ```ts snippet:CosmosClientDatabaseCreateContainer\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const container = client.database(\"<database id>\").containers.create({\n * id: \"<name here>\",\n * });\n * ```\n *\n * @example Delete an existing database\n * ```ts snippet:CosmosClientDatabaseDelete\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * await client.database(\"<id here>\").delete();\n * ```\n */\n public database(id: string): Database {\n return new Database(this, id, this.clientContext, this.encryptionManager);\n }\n\n /**\n * Used for reading, or updating a existing offer by id.\n * @param id - The id of the offer.\n */\n public offer(id: string): Offer {\n return new Offer(this, id, this.clientContext);\n }\n\n /**\n * Clears background endpoint refresher. Use client.dispose() when destroying the CosmosClient within another process.\n */\n public dispose(): void {\n clearTimeout(this.endpointRefresher);\n if (this.clientContext.enableEncryption) {\n clearTimeout(this.encryptionManager.encryptionKeyStoreProvider.cacheRefresher);\n clearTimeout(this.encryptionManager.protectedDataEncryptionKeyCache.cacheRefresher);\n }\n }\n\n private async backgroundRefreshEndpointList(\n globalEndpointManager: GlobalEndpointManager,\n refreshRate: number,\n ) {\n this.endpointRefresher = setInterval(() => {\n try {\n return withDiagnostics(\n async (diagnosticNode: DiagnosticNodeInternal) => {\n return globalEndpointManager.refreshEndpointList(diagnosticNode);\n },\n this.clientContext,\n DiagnosticNodeType.BACKGROUND_REFRESH_THREAD,\n );\n } catch (e: any) {\n console.warn(\"Failed to refresh endpoints\", e);\n }\n }, refreshRate);\n if (this.endpointRefresher.unref && typeof this.endpointRefresher.unref === \"function\") {\n this.endpointRefresher.unref();\n }\n }\n\n /**\n * Update the host framework. If provided host framework will be used to generate the defualt SDK user agent.\n * @param hostFramework - A custom string.\n * @internal\n */\n public async updateHostFramework(hostFramework: string): Promise<void> {\n this.clientContext.refreshUserAgent(hostFramework);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CosmosClient.js","sourceRoot":"","sources":["../../src/CosmosClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Database, Databases } from \"./client/Database/index.js\";\nimport { Offer, Offers } from \"./client/Offer/index.js\";\nimport { ClientContext } from \"./ClientContext.js\";\nimport { parseConnectionString } from \"./common/index.js\";\nimport { Constants } from \"./common/constants.js\";\nimport { getUserAgent } from \"./common/platform.js\";\nimport type { CosmosClientOptions } from \"./CosmosClientOptions.js\";\nimport type { ClientConfigDiagnostic } from \"./CosmosDiagnostics.js\";\nimport {\n determineDiagnosticLevel,\n getDiagnosticLevelFromEnvironment,\n} from \"./diagnostics/index.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport { DiagnosticNodeType } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport type { DatabaseAccount } from \"./documents/index.js\";\nimport { defaultConnectionPolicy } from \"./documents/index.js\";\nimport { EncryptionManager } from \"./encryption/EncryptionManager.js\";\nimport { GlobalEndpointManager } from \"./globalEndpointManager.js\";\nimport type { RequestOptions } from \"./request/index.js\";\nimport { ResourceResponse } from \"./request/index.js\";\nimport { checkURL } from \"./utils/checkURL.js\";\nimport { getEmptyCosmosDiagnostics, withDiagnostics } from \"./utils/diagnostics.js\";\nimport { GlobalPartitionEndpointManager } from \"./globalPartitionEndpointManager.js\";\n\n/**\n * Provides a client-side logical representation of the Azure Cosmos DB database account.\n * This client is used to configure and execute requests in the Azure Cosmos DB database service.\n * @example Instantiate a client and create a new database\n * ```ts snippet:CosmosClientCreate\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * ```\n * @example Instantiate a client with custom Connection Policy\n * ```ts snippet:CosmosClientWithConnectionPolicy\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({\n * endpoint,\n * key,\n * connectionPolicy: {\n * requestTimeout: 10000,\n * },\n * });\n * ```\n */\nexport class CosmosClient {\n /**\n * Used for creating new databases, or querying/reading all databases.\n *\n * Use `.database(id)` to read, replace, or delete a specific, existing database by id.\n *\n * @example Create a new database\n * ```ts snippet:CosmosClientDatabases\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const { resource: databaseDefinition, database } = await client.databases.create({\n * id: \"<name here>\",\n * });\n * ```\n */\n public readonly databases: Databases;\n /**\n * Used for querying & reading all offers.\n *\n * Use `.offer(id)` to read, or replace existing offers.\n */\n public readonly offers: Offers;\n private clientContext: ClientContext;\n private endpointRefresher: NodeJS.Timeout;\n /**\n * @internal\n */\n private encryptionManager: EncryptionManager;\n /** @internal */\n private globalPartitionEndpointManager: GlobalPartitionEndpointManager;\n /**\n * Creates a new {@link CosmosClient} object from a connection string. Your database connection string can be found in the Azure Portal\n */\n constructor(connectionString: string);\n /**\n * Creates a new {@link CosmosClient} object. See {@link CosmosClientOptions} for more details on what options you can use.\n * @param options - bag of options; require at least endpoint and auth to be configured\n */\n constructor(options: CosmosClientOptions);\n constructor(optionsOrConnectionString: string | CosmosClientOptions) {\n if (typeof optionsOrConnectionString === \"string\") {\n optionsOrConnectionString = parseConnectionString(optionsOrConnectionString);\n } else if (optionsOrConnectionString.connectionString) {\n const { endpoint, key } = parseConnectionString(optionsOrConnectionString.connectionString);\n optionsOrConnectionString.endpoint = endpoint;\n optionsOrConnectionString.key = key;\n }\n\n const endpoint = checkURL(optionsOrConnectionString.endpoint);\n if (!endpoint) {\n throw new Error(\"Invalid endpoint specified\");\n }\n\n if (optionsOrConnectionString.clientEncryptionOptions) {\n if (!optionsOrConnectionString.clientEncryptionOptions.keyEncryptionKeyResolver) {\n throw new Error(\n \"KeyEncryptionKeyResolver needs to be provided to enable client-side encryption.\",\n );\n }\n if (\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds &&\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds < 60\n ) {\n throw new Error(\"EncryptionKeyTimeToLiveInSeconds needs to be >= 60 seconds.\");\n }\n this.encryptionManager = new EncryptionManager(\n optionsOrConnectionString.clientEncryptionOptions.keyEncryptionKeyResolver,\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds,\n );\n }\n\n const clientConfig: ClientConfigDiagnostic =\n this.initializeClientConfigDiagnostic(optionsOrConnectionString);\n\n optionsOrConnectionString.connectionPolicy = Object.assign(\n {},\n defaultConnectionPolicy,\n optionsOrConnectionString.connectionPolicy,\n );\n\n optionsOrConnectionString.defaultHeaders = optionsOrConnectionString.defaultHeaders || {};\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CacheControl] = \"no-cache\";\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.Version] =\n Constants.CurrentVersion;\n if (optionsOrConnectionString.consistencyLevel !== undefined) {\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ConsistencyLevel] =\n optionsOrConnectionString.consistencyLevel;\n }\n\n if (optionsOrConnectionString.throughputBucket !== undefined) {\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ThroughputBucket] =\n optionsOrConnectionString.throughputBucket;\n }\n\n const userAgent = getUserAgent(optionsOrConnectionString);\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.UserAgent] = userAgent;\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CustomUserAgent] = userAgent;\n\n const globalEndpointManager = new GlobalEndpointManager(\n optionsOrConnectionString,\n async (diagnosticNode: DiagnosticNodeInternal, opts: RequestOptions) =>\n this.getDatabaseAccountInternal(diagnosticNode, opts),\n );\n\n if (\n optionsOrConnectionString.connectionPolicy.enablePartitionLevelFailover ||\n optionsOrConnectionString.connectionPolicy.enablePartitionLevelCircuitBreaker\n ) {\n this.globalPartitionEndpointManager = new GlobalPartitionEndpointManager(\n optionsOrConnectionString,\n globalEndpointManager,\n );\n }\n\n this.clientContext = new ClientContext(\n optionsOrConnectionString,\n globalEndpointManager,\n clientConfig,\n determineDiagnosticLevel(\n optionsOrConnectionString.diagnosticLevel,\n getDiagnosticLevelFromEnvironment(),\n ),\n this.globalPartitionEndpointManager,\n );\n if (\n optionsOrConnectionString.connectionPolicy?.enableEndpointDiscovery &&\n optionsOrConnectionString.connectionPolicy?.enableBackgroundEndpointRefreshing\n ) {\n this.backgroundRefreshEndpointList(\n globalEndpointManager,\n optionsOrConnectionString.connectionPolicy.endpointRefreshRateInMs ||\n defaultConnectionPolicy.endpointRefreshRateInMs,\n );\n }\n\n this.databases = new Databases(this, this.clientContext, this.encryptionManager);\n this.offers = new Offers(this, this.clientContext);\n }\n\n private initializeClientConfigDiagnostic(\n optionsOrConnectionString: CosmosClientOptions,\n ): ClientConfigDiagnostic {\n return {\n endpoint: optionsOrConnectionString.endpoint,\n resourceTokensConfigured: optionsOrConnectionString.resourceTokens !== undefined,\n tokenProviderConfigured: optionsOrConnectionString.tokenProvider !== undefined,\n aadCredentialsConfigured: optionsOrConnectionString.aadCredentials !== undefined,\n connectionPolicyConfigured: optionsOrConnectionString.connectionPolicy !== undefined,\n consistencyLevel: optionsOrConnectionString.consistencyLevel,\n defaultHeaders: optionsOrConnectionString.defaultHeaders,\n agentConfigured: optionsOrConnectionString.agent !== undefined,\n userAgentSuffix: optionsOrConnectionString.userAgentSuffix,\n diagnosticLevel: optionsOrConnectionString.diagnosticLevel,\n pluginsConfigured: optionsOrConnectionString.plugins !== undefined,\n sDKVersion: Constants.SDKVersion,\n };\n }\n\n /**\n * Get information about the current {@link DatabaseAccount} (including which regions are supported, etc.)\n */\n public async getDatabaseAccount(\n options?: RequestOptions,\n ): Promise<ResourceResponse<DatabaseAccount>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.getDatabaseAccountInternal(diagnosticNode, options);\n }, this.clientContext);\n }\n\n /**\n * @hidden\n */\n public async getDatabaseAccountInternal(\n diagnosticNode: DiagnosticNodeInternal,\n options?: RequestOptions,\n ): Promise<ResourceResponse<DatabaseAccount>> {\n const response = await this.clientContext.getDatabaseAccount(diagnosticNode, options);\n return new ResourceResponse<DatabaseAccount>(\n response.result,\n response.headers,\n response.code,\n getEmptyCosmosDiagnostics(),\n response.substatus,\n );\n }\n\n /**\n * Gets the currently used write endpoint url. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public async getWriteEndpoint(): Promise<string> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.clientContext.getWriteEndpoint(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * Gets the currently used read endpoint. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public async getReadEndpoint(): Promise<string> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.clientContext.getReadEndpoint(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * Gets the known write endpoints. Useful for troubleshooting purposes.\n *\n * The urls may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public getWriteEndpoints(): Promise<readonly string[]> {\n return this.clientContext.getWriteEndpoints();\n }\n\n /**\n * Gets the currently used read endpoint. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public getReadEndpoints(): Promise<readonly string[]> {\n return this.clientContext.getReadEndpoints();\n }\n\n /**\n * Used for reading, updating, or deleting a existing database by id or accessing containers belonging to that database.\n *\n * This does not make a network call. Use `.read` to get info about the database after getting the {@link Database} object.\n *\n * @param id - The id of the database.\n * @example Create a new container off of an existing database\n * ```ts snippet:CosmosClientDatabaseCreateContainer\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const container = client.database(\"<database id>\").containers.create({\n * id: \"<name here>\",\n * });\n * ```\n *\n * @example Delete an existing database\n * ```ts snippet:CosmosClientDatabaseDelete\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * await client.database(\"<id here>\").delete();\n * ```\n */\n public database(id: string): Database {\n return new Database(this, id, this.clientContext, this.encryptionManager);\n }\n\n /**\n * Used for reading, or updating a existing offer by id.\n * @param id - The id of the offer.\n */\n public offer(id: string): Offer {\n return new Offer(this, id, this.clientContext);\n }\n\n /**\n * Clears background endpoint refresher. Use client.dispose() when destroying the CosmosClient within another process.\n */\n public dispose(): void {\n clearTimeout(this.endpointRefresher);\n if (this.clientContext.enableEncryption) {\n clearTimeout(this.encryptionManager.encryptionKeyStoreProvider.cacheRefresher);\n clearTimeout(this.encryptionManager.protectedDataEncryptionKeyCache.cacheRefresher);\n }\n if (this.globalPartitionEndpointManager) {\n this.globalPartitionEndpointManager.dispose();\n }\n }\n\n private async backgroundRefreshEndpointList(\n globalEndpointManager: GlobalEndpointManager,\n refreshRate: number,\n ) {\n this.endpointRefresher = setInterval(() => {\n try {\n return withDiagnostics(\n async (diagnosticNode: DiagnosticNodeInternal) => {\n return globalEndpointManager.refreshEndpointList(diagnosticNode);\n },\n this.clientContext,\n DiagnosticNodeType.BACKGROUND_REFRESH_THREAD,\n );\n } catch (e: any) {\n console.warn(\"Failed to refresh endpoints\", e);\n }\n }, refreshRate);\n if (this.endpointRefresher.unref && typeof this.endpointRefresher.unref === \"function\") {\n this.endpointRefresher.unref();\n }\n }\n\n /**\n * Update the host framework. If provided host framework will be used to generate the defualt SDK user agent.\n * @param hostFramework - A custom string.\n * @internal\n */\n public async updateHostFramework(hostFramework: string): Promise<void> {\n this.clientContext.refreshUserAgent(hostFramework);\n }\n}\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DiagnosticNodeInternal } from "./index.js";
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
* This class manages the failover information for partition key ranges in Cosmos DB.
|
|
5
|
+
* It tracks the current endpoint, failed endpoints, and the number of consecutive read/write request failures.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PartitionKeyRangeFailoverInfo {
|
|
8
|
+
private failedEndPoints;
|
|
9
|
+
private currentEndPoint;
|
|
10
|
+
private consecutiveReadRequestFailureCount;
|
|
11
|
+
private consecutiveWriteRequestFailureCount;
|
|
12
|
+
private firstRequestFailureTime;
|
|
13
|
+
private lastRequestFailureTime;
|
|
14
|
+
private failureCountSemaphore;
|
|
15
|
+
private tryMoveNextLocationSemaphore;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if the circuit breaker can trigger a partition failover based on the failure counts.
|
|
18
|
+
* Returns true if the number of consecutive failures exceeds the defined thresholds for read or write requests.
|
|
19
|
+
*/
|
|
20
|
+
canCircuitBreakerTriggerPartitionFailOver(isReadOnlyRequest: boolean): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Increments the failure counts for read or write requests and updates the timestamps.
|
|
23
|
+
* If the time since the last failure exceeds the reset window, it resets the failure counts.
|
|
24
|
+
*/
|
|
25
|
+
incrementRequestFailureCounts(isReadOnlyRequest: boolean, currentTimeInMilliseconds: number): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Returns a snapshot of the first and last request failure timestamps.
|
|
28
|
+
* This method is used to retrieve the current state of failure timestamps without modifying them.
|
|
29
|
+
*/
|
|
30
|
+
snapshotPartitionFailoverTimestamps(): Promise<{
|
|
31
|
+
firstRequestFailureTime: number;
|
|
32
|
+
lastRequestFailureTime: number;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Attempts to move to the next available location for the partition key range.
|
|
36
|
+
* If the current endpoint is the same as the failed endpoint, it tries to find a new endpoint
|
|
37
|
+
* from the provided list of endpoints. If a new endpoint is found, it updates the current endpoint
|
|
38
|
+
* and returns true. If no new endpoint is found, it returns false.
|
|
39
|
+
*/
|
|
40
|
+
tryMoveNextLocation(endPoints: readonly string[], failedEndPoint: string, diagnosticNode: DiagnosticNodeInternal, partitionKeyRangeId: string): Promise<boolean>;
|
|
41
|
+
/** Returns the current endpoint being used for partition key range operations.*/
|
|
42
|
+
getCurrentEndPoint(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Returns a snapshot of the current consecutive request failure counts for read and write requests.
|
|
45
|
+
* This method is used to retrieve the current state of failure counts without modifying them.
|
|
46
|
+
*/
|
|
47
|
+
private snapshotConsecutiveRequestFailureCount;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=PartitionKeyRangeFailoverInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PartitionKeyRangeFailoverInfo.d.ts","sourceRoot":"","sources":["../../src/PartitionKeyRangeFailoverInfo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG/D;;;;GAIG;AACH,qBAAa,6BAA6B;IACxC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,kCAAkC,CAAa;IACvD,OAAO,CAAC,mCAAmC,CAAa;IACxD,OAAO,CAAC,uBAAuB,CAAsB;IACrD,OAAO,CAAC,sBAAsB,CAAsB;IAEpD,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,4BAA4B,CAAsB;IAW1D;;;OAGG;IACU,yCAAyC,CACpD,iBAAiB,EAAE,OAAO,GACzB,OAAO,CAAC,OAAO,CAAC;IASnB;;;OAGG;IACU,6BAA6B,CACxC,iBAAiB,EAAE,OAAO,EAC1B,yBAAyB,EAAE,MAAM,GAChC,OAAO,CAAC,IAAI,CAAC;IA+BhB;;;OAGG;IACU,mCAAmC,IAAI,OAAO,CAAC;QAC1D,uBAAuB,EAAE,MAAM,CAAC;QAChC,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IAOF;;;;;OAKG;IACU,mBAAmB,CAC9B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,sBAAsB,EACtC,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,OAAO,CAAC;IAiCnB,iFAAiF;IAC1E,kBAAkB,IAAI,MAAM;IAInC;;;OAGG;YACW,sCAAsC;CASrD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { Constants } from "./index.js";
|
|
4
|
+
import semaphore from "semaphore";
|
|
5
|
+
/**
|
|
6
|
+
* @hidden
|
|
7
|
+
* This class manages the failover information for partition key ranges in Cosmos DB.
|
|
8
|
+
* It tracks the current endpoint, failed endpoints, and the number of consecutive read/write request failures.
|
|
9
|
+
*/
|
|
10
|
+
export class PartitionKeyRangeFailoverInfo {
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
constructor(currentEndpoint) {
|
|
15
|
+
this.failedEndPoints = [];
|
|
16
|
+
this.consecutiveReadRequestFailureCount = 0;
|
|
17
|
+
this.consecutiveWriteRequestFailureCount = 0;
|
|
18
|
+
this.firstRequestFailureTime = Date.now();
|
|
19
|
+
this.lastRequestFailureTime = Date.now();
|
|
20
|
+
this.currentEndPoint = currentEndpoint;
|
|
21
|
+
this.failureCountSemaphore = semaphore(1);
|
|
22
|
+
this.tryMoveNextLocationSemaphore = semaphore(1);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Checks if the circuit breaker can trigger a partition failover based on the failure counts.
|
|
26
|
+
* Returns true if the number of consecutive failures exceeds the defined thresholds for read or write requests.
|
|
27
|
+
*/
|
|
28
|
+
async canCircuitBreakerTriggerPartitionFailOver(isReadOnlyRequest) {
|
|
29
|
+
const { consecutiveReadRequestFailureCount, consecutiveWriteRequestFailureCount } = await this.snapshotConsecutiveRequestFailureCount();
|
|
30
|
+
return isReadOnlyRequest
|
|
31
|
+
? consecutiveReadRequestFailureCount > Constants.ReadRequestFailureCountThreshold
|
|
32
|
+
: consecutiveWriteRequestFailureCount > Constants.WriteRequestFailureCountThreshold;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Increments the failure counts for read or write requests and updates the timestamps.
|
|
36
|
+
* If the time since the last failure exceeds the reset window, it resets the failure counts.
|
|
37
|
+
*/
|
|
38
|
+
async incrementRequestFailureCounts(isReadOnlyRequest, currentTimeInMilliseconds) {
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
this.failureCountSemaphore.take(async () => {
|
|
41
|
+
try {
|
|
42
|
+
const { lastRequestFailureTime } = await this.snapshotPartitionFailoverTimestamps();
|
|
43
|
+
if (currentTimeInMilliseconds - lastRequestFailureTime >
|
|
44
|
+
Constants.ConsecutiveFailureCountResetIntervalInMS) {
|
|
45
|
+
this.consecutiveReadRequestFailureCount = 0;
|
|
46
|
+
this.consecutiveWriteRequestFailureCount = 0;
|
|
47
|
+
}
|
|
48
|
+
if (isReadOnlyRequest) {
|
|
49
|
+
this.consecutiveReadRequestFailureCount++;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.consecutiveWriteRequestFailureCount++;
|
|
53
|
+
}
|
|
54
|
+
this.lastRequestFailureTime = currentTimeInMilliseconds;
|
|
55
|
+
return resolve();
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
reject(error);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
// Release the semaphore lock
|
|
62
|
+
this.failureCountSemaphore.leave();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns a snapshot of the first and last request failure timestamps.
|
|
69
|
+
* This method is used to retrieve the current state of failure timestamps without modifying them.
|
|
70
|
+
*/
|
|
71
|
+
async snapshotPartitionFailoverTimestamps() {
|
|
72
|
+
return {
|
|
73
|
+
firstRequestFailureTime: this.firstRequestFailureTime,
|
|
74
|
+
lastRequestFailureTime: this.lastRequestFailureTime,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Attempts to move to the next available location for the partition key range.
|
|
79
|
+
* If the current endpoint is the same as the failed endpoint, it tries to find a new endpoint
|
|
80
|
+
* from the provided list of endpoints. If a new endpoint is found, it updates the current endpoint
|
|
81
|
+
* and returns true. If no new endpoint is found, it returns false.
|
|
82
|
+
*/
|
|
83
|
+
async tryMoveNextLocation(endPoints, failedEndPoint, diagnosticNode, partitionKeyRangeId) {
|
|
84
|
+
if (failedEndPoint !== this.currentEndPoint) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
return new Promise((resolve, reject) => {
|
|
88
|
+
this.tryMoveNextLocationSemaphore.take(() => {
|
|
89
|
+
try {
|
|
90
|
+
for (const endpoint of endPoints) {
|
|
91
|
+
if (this.currentEndPoint === endpoint) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (this.failedEndPoints.includes(endpoint)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
this.failedEndPoints.push(failedEndPoint);
|
|
98
|
+
this.currentEndPoint = endpoint;
|
|
99
|
+
return resolve(true);
|
|
100
|
+
}
|
|
101
|
+
diagnosticNode.addData({
|
|
102
|
+
partitionKeyRangeFailoverInfo: `PartitionKeyRangeId: ${partitionKeyRangeId}, failedLocations: ${this.failedEndPoints}, newLocation: ${this.currentEndPoint}`,
|
|
103
|
+
});
|
|
104
|
+
return resolve(false);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
reject(err);
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
this.tryMoveNextLocationSemaphore.leave();
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/** Returns the current endpoint being used for partition key range operations.*/
|
|
116
|
+
getCurrentEndPoint() {
|
|
117
|
+
return this.currentEndPoint;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Returns a snapshot of the current consecutive request failure counts for read and write requests.
|
|
121
|
+
* This method is used to retrieve the current state of failure counts without modifying them.
|
|
122
|
+
*/
|
|
123
|
+
async snapshotConsecutiveRequestFailureCount() {
|
|
124
|
+
return {
|
|
125
|
+
consecutiveReadRequestFailureCount: this.consecutiveReadRequestFailureCount,
|
|
126
|
+
consecutiveWriteRequestFailureCount: this.consecutiveWriteRequestFailureCount,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=PartitionKeyRangeFailoverInfo.js.map
|