UNPKG

729 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sources":["../src/common/partitionKeys.ts","../src/common/constants.ts","../src/common/helper.ts","../src/common/statusCodes.ts","../src/common/uriFactory.ts","../src/extractPartitionKey.ts","../src/utils/hmac.ts","../src/utils/headers.ts","../src/auth.ts","../src/common/logger.ts","../src/request/request.ts","../src/utils/batch.ts","../src/utils/patch.ts","../src/documents/ConnectionMode.ts","../src/documents/ConnectionPolicy.ts","../src/documents/ConsistencyLevel.ts","../src/documents/DatabaseAccount.ts","../src/documents/DataType.ts","../src/documents/IndexingMode.ts","../src/documents/IndexingPolicy.ts","../src/documents/IndexKind.ts","../src/documents/PermissionMode.ts","../src/documents/TriggerOperation.ts","../src/documents/TriggerType.ts","../src/documents/UserDefinedFunctionType.ts","../src/documents/GeospatialType.ts","../src/request/ErrorResponse.ts","../src/request/ResourceResponse.ts","../src/request/FeedResponse.ts","../src/request/TimeoutError.ts","../src/queryMetrics/clientSideMetrics.ts","../src/queryMetrics/queryMetricsConstants.ts","../src/queryMetrics/timeSpan.ts","../src/queryMetrics/queryMetricsUtils.ts","../src/queryMetrics/queryPreparationTime.ts","../src/queryMetrics/runtimeExecutionTimes.ts","../src/queryMetrics/queryMetrics.ts","../src/queryExecutionContext/headerUtils.ts","../src/queryExecutionContext/defaultQueryExecutionContext.ts","../src/queryExecutionContext/Aggregators/AverageAggregator.ts","../src/queryExecutionContext/Aggregators/CountAggregator.ts","../src/queryExecutionContext/orderByDocumentProducerComparator.ts","../src/queryExecutionContext/Aggregators/MaxAggregator.ts","../src/queryExecutionContext/Aggregators/MinAggregator.ts","../src/queryExecutionContext/Aggregators/SumAggregator.ts","../src/queryExecutionContext/Aggregators/StaticValueAggregator.ts","../src/queryExecutionContext/Aggregators/index.ts","../src/queryExecutionContext/FetchResult.ts","../src/queryExecutionContext/documentProducer.ts","../src/routing/QueryRange.ts","../src/routing/inMemoryCollectionRoutingMap.ts","../src/routing/CollectionRoutingMapFactory.ts","../src/routing/partitionKeyRangeCache.ts","../src/routing/smartRoutingMapProvider.ts","../src/queryExecutionContext/parallelQueryExecutionContextBase.ts","../src/queryExecutionContext/parallelQueryExecutionContext.ts","../src/queryExecutionContext/orderByQueryExecutionContext.ts","../src/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.ts","../src/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.ts","../src/utils/digest.ts","../src/utils/hashObject.ts","../src/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.ts","../src/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.ts","../src/queryExecutionContext/EndpointComponent/emptyGroup.ts","../src/queryExecutionContext/EndpointComponent/GroupByEndpointComponent.ts","../src/queryExecutionContext/EndpointComponent/GroupByValueEndpointComponent.ts","../src/queryExecutionContext/pipelinedQueryExecutionContext.ts","../src/queryIterator.ts","../src/client/Conflict/ConflictResponse.ts","../src/client/Conflict/Conflict.ts","../src/client/Conflict/Conflicts.ts","../src/client/Conflict/ConflictResolutionMode.ts","../src/client/Item/ItemResponse.ts","../src/client/Item/Item.ts","../src/ChangeFeedResponse.ts","../src/ChangeFeedIterator.ts","../src/utils/hashing/encoding/prefix.ts","../src/utils/hashing/encoding/number.ts","../src/utils/hashing/encoding/string.ts","../src/utils/hashing/murmurHash.ts","../src/utils/hashing/v1.ts","../src/utils/hashing/v2.ts","../src/client/Item/Items.ts","../src/client/StoredProcedure/StoredProcedureResponse.ts","../src/client/StoredProcedure/StoredProcedure.ts","../src/client/StoredProcedure/StoredProcedures.ts","../src/client/Trigger/TriggerResponse.ts","../src/client/Trigger/Trigger.ts","../src/client/Trigger/Triggers.ts","../src/client/UserDefinedFunction/UserDefinedFunctionResponse.ts","../src/client/UserDefinedFunction/UserDefinedFunction.ts","../src/client/UserDefinedFunction/UserDefinedFunctions.ts","../src/client/Script/Scripts.ts","../src/client/Container/ContainerResponse.ts","../src/client/Offer/OfferResponse.ts","../src/client/Offer/Offer.ts","../src/client/Offer/Offers.ts","../src/client/Container/Container.ts","../src/utils/offers.ts","../src/client/Container/Containers.ts","../src/client/Permission/PermissionResponse.ts","../src/client/Permission/Permission.ts","../src/client/Permission/Permissions.ts","../src/client/User/UserResponse.ts","../src/client/User/User.ts","../src/client/User/Users.ts","../src/client/Database/DatabaseResponse.ts","../src/client/Database/Database.ts","../src/client/Database/Databases.ts","../src/plugins/Plugin.ts","../src/retry/defaultRetryPolicy.ts","../src/retry/endpointDiscoveryRetryPolicy.ts","../src/retry/resourceThrottleRetryPolicy.ts","../src/retry/sessionRetryPolicy.ts","../src/retry/retryUtility.ts","../src/request/defaultAgent.ts","../src/utils/cachedClient.ts","../src/request/RequestHandler.ts","../src/utils/atob.ts","../src/session/VectorSessionToken.ts","../src/session/sessionContainer.ts","../src/utils/checkURL.ts","../src/ClientContext.ts","../src/common/platform.ts","../src/globalEndpointManager.ts","../src/CosmosClient.ts","../src/client/SasToken/SasTokenProperties.ts","../src/utils/encode.ts","../src/utils/SasToken.ts"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport const DEFAULT_PARTITION_KEY_PATH = \"/_partitionKey\" as \"/_partitionKey\"; // eslint-disable-line @typescript-eslint/prefer-as-const\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport interface PartitionKeyRangePropertiesNames {\n // Partition Key Range Constants\n MinInclusive: \"minInclusive\";\n MaxExclusive: \"maxExclusive\";\n Id: \"id\";\n}\n\n/**\n * @hidden\n */\nexport const Constants = {\n HttpHeaders: {\n Authorization: \"authorization\",\n ETag: \"etag\",\n MethodOverride: \"X-HTTP-Method\",\n Slug: \"Slug\",\n ContentType: \"Content-Type\",\n LastModified: \"Last-Modified\",\n ContentEncoding: \"Content-Encoding\",\n CharacterSet: \"CharacterSet\",\n UserAgent: \"User-Agent\",\n IfModifiedSince: \"If-Modified-Since\",\n IfMatch: \"If-Match\",\n IfNoneMatch: \"If-None-Match\",\n ContentLength: \"Content-Length\",\n AcceptEncoding: \"Accept-Encoding\",\n KeepAlive: \"Keep-Alive\",\n CacheControl: \"Cache-Control\",\n TransferEncoding: \"Transfer-Encoding\",\n ContentLanguage: \"Content-Language\",\n ContentLocation: \"Content-Location\",\n ContentMd5: \"Content-Md5\",\n ContentRange: \"Content-Range\",\n Accept: \"Accept\",\n AcceptCharset: \"Accept-Charset\",\n AcceptLanguage: \"Accept-Language\",\n IfRange: \"If-Range\",\n IfUnmodifiedSince: \"If-Unmodified-Since\",\n MaxForwards: \"Max-Forwards\",\n ProxyAuthorization: \"Proxy-Authorization\",\n AcceptRanges: \"Accept-Ranges\",\n ProxyAuthenticate: \"Proxy-Authenticate\",\n RetryAfter: \"Retry-After\",\n SetCookie: \"Set-Cookie\",\n WwwAuthenticate: \"Www-Authenticate\",\n Origin: \"Origin\",\n Host: \"Host\",\n AccessControlAllowOrigin: \"Access-Control-Allow-Origin\",\n AccessControlAllowHeaders: \"Access-Control-Allow-Headers\",\n KeyValueEncodingFormat: \"application/x-www-form-urlencoded\",\n WrapAssertionFormat: \"wrap_assertion_format\",\n WrapAssertion: \"wrap_assertion\",\n WrapScope: \"wrap_scope\",\n SimpleToken: \"SWT\",\n HttpDate: \"date\",\n Prefer: \"Prefer\",\n Location: \"Location\",\n Referer: \"referer\",\n A_IM: \"A-IM\",\n\n // Query\n Query: \"x-ms-documentdb-query\",\n IsQuery: \"x-ms-documentdb-isquery\",\n IsQueryPlan: \"x-ms-cosmos-is-query-plan-request\",\n SupportedQueryFeatures: \"x-ms-cosmos-supported-query-features\",\n QueryVersion: \"x-ms-cosmos-query-version\",\n\n // Our custom Azure Cosmos DB headers\n Continuation: \"x-ms-continuation\",\n PageSize: \"x-ms-max-item-count\",\n ItemCount: \"x-ms-item-count\",\n\n // Request sender generated. Simply echoed by backend.\n ActivityId: \"x-ms-activity-id\",\n PreTriggerInclude: \"x-ms-documentdb-pre-trigger-include\",\n PreTriggerExclude: \"x-ms-documentdb-pre-trigger-exclude\",\n PostTriggerInclude: \"x-ms-documentdb-post-trigger-include\",\n PostTriggerExclude: \"x-ms-documentdb-post-trigger-exclude\",\n IndexingDirective: \"x-ms-indexing-directive\",\n SessionToken: \"x-ms-session-token\",\n ConsistencyLevel: \"x-ms-consistency-level\",\n XDate: \"x-ms-date\",\n CollectionPartitionInfo: \"x-ms-collection-partition-info\",\n CollectionServiceInfo: \"x-ms-collection-service-info\",\n // Deprecated, use RetryAfterInMs instead.\n RetryAfterInMilliseconds: \"x-ms-retry-after-ms\",\n RetryAfterInMs: \"x-ms-retry-after-ms\",\n IsFeedUnfiltered: \"x-ms-is-feed-unfiltered\",\n ResourceTokenExpiry: \"x-ms-documentdb-expiry-seconds\",\n EnableScanInQuery: \"x-ms-documentdb-query-enable-scan\",\n EmitVerboseTracesInQuery: \"x-ms-documentdb-query-emit-traces\",\n EnableCrossPartitionQuery: \"x-ms-documentdb-query-enablecrosspartition\",\n ParallelizeCrossPartitionQuery: \"x-ms-documentdb-query-parallelizecrosspartitionquery\",\n ResponseContinuationTokenLimitInKB: \"x-ms-documentdb-responsecontinuationtokenlimitinkb\",\n\n // QueryMetrics\n // Request header to tell backend to give you query metrics.\n PopulateQueryMetrics: \"x-ms-documentdb-populatequerymetrics\",\n // Response header that holds the serialized version of query metrics.\n QueryMetrics: \"x-ms-documentdb-query-metrics\",\n\n // Version headers and values\n Version: \"x-ms-version\",\n\n // Owner name\n OwnerFullName: \"x-ms-alt-content-path\",\n\n // Owner ID used for name based request in session token.\n OwnerId: \"x-ms-content-path\",\n\n // Partition Key\n PartitionKey: \"x-ms-documentdb-partitionkey\",\n PartitionKeyRangeID: \"x-ms-documentdb-partitionkeyrangeid\",\n\n // Quota Info\n MaxEntityCount: \"x-ms-root-entity-max-count\",\n CurrentEntityCount: \"x-ms-root-entity-current-count\",\n CollectionQuotaInMb: \"x-ms-collection-quota-mb\",\n CollectionCurrentUsageInMb: \"x-ms-collection-usage-mb\",\n MaxMediaStorageUsageInMB: \"x-ms-max-media-storage-usage-mb\",\n CurrentMediaStorageUsageInMB: \"x-ms-media-storage-usage-mb\",\n RequestCharge: \"x-ms-request-charge\",\n PopulateQuotaInfo: \"x-ms-documentdb-populatequotainfo\",\n MaxResourceQuota: \"x-ms-resource-quota\",\n\n // Offer header\n OfferType: \"x-ms-offer-type\",\n OfferThroughput: \"x-ms-offer-throughput\",\n AutoscaleSettings: \"x-ms-cosmos-offer-autopilot-settings\",\n\n // Custom RUs/minute headers\n DisableRUPerMinuteUsage: \"x-ms-documentdb-disable-ru-per-minute-usage\",\n IsRUPerMinuteUsed: \"x-ms-documentdb-is-ru-per-minute-used\",\n OfferIsRUPerMinuteThroughputEnabled: \"x-ms-offer-is-ru-per-minute-throughput-enabled\",\n\n // Index progress headers\n IndexTransformationProgress: \"x-ms-documentdb-collection-index-transformation-progress\",\n LazyIndexingProgress: \"x-ms-documentdb-collection-lazy-indexing-progress\",\n\n // Upsert header\n IsUpsert: \"x-ms-documentdb-is-upsert\",\n\n // Sub status of the error\n SubStatus: \"x-ms-substatus\",\n\n // StoredProcedure related headers\n EnableScriptLogging: \"x-ms-documentdb-script-enable-logging\",\n ScriptLogResults: \"x-ms-documentdb-script-log-results\",\n\n // Multi-Region Write\n ALLOW_MULTIPLE_WRITES: \"x-ms-cosmos-allow-tentative-writes\",\n\n // Bulk/Batch header\n IsBatchRequest: \"x-ms-cosmos-is-batch-request\",\n IsBatchAtomic: \"x-ms-cosmos-batch-atomic\",\n BatchContinueOnError: \"x-ms-cosmos-batch-continue-on-error\",\n\n // Dedicated Gateway Headers\n DedicatedGatewayPerRequestCacheStaleness: \"x-ms-dedicatedgateway-max-age\",\n\n // Cache Refresh header\n ForceRefresh: \"x-ms-force-refresh\",\n },\n\n // GlobalDB related constants\n WritableLocations: \"writableLocations\",\n ReadableLocations: \"readableLocations\",\n LocationUnavailableExpirationTimeInMs: 5 * 60 * 1000, // 5 minutes\n\n // ServiceDocument Resource\n ENABLE_MULTIPLE_WRITABLE_LOCATIONS: \"enableMultipleWriteLocations\",\n\n // Background refresh time\n DefaultUnavailableLocationExpirationTimeMS: 5 * 60 * 1000,\n\n // Client generated retry count response header\n ThrottleRetryCount: \"x-ms-throttle-retry-count\",\n ThrottleRetryWaitTimeInMs: \"x-ms-throttle-retry-wait-time-ms\",\n\n // Platform\n CurrentVersion: \"2020-07-15\",\n AzureNamespace: \"Azure.Cosmos\",\n AzurePackageName: \"@azure/cosmos\",\n SDKName: \"azure-cosmos-js\",\n SDKVersion: \"3.17.3\",\n\n // Bulk Operations\n DefaultMaxBulkRequestBodySizeInBytes: 220201,\n\n Quota: {\n CollectionSize: \"collectionSize\",\n },\n\n Path: {\n Root: \"/\",\n DatabasesPathSegment: \"dbs\",\n CollectionsPathSegment: \"colls\",\n UsersPathSegment: \"users\",\n DocumentsPathSegment: \"docs\",\n PermissionsPathSegment: \"permissions\",\n StoredProceduresPathSegment: \"sprocs\",\n TriggersPathSegment: \"triggers\",\n UserDefinedFunctionsPathSegment: \"udfs\",\n ConflictsPathSegment: \"conflicts\",\n AttachmentsPathSegment: \"attachments\",\n PartitionKeyRangesPathSegment: \"pkranges\",\n SchemasPathSegment: \"schemas\",\n OffersPathSegment: \"offers\",\n TopologyPathSegment: \"topology\",\n DatabaseAccountPathSegment: \"databaseaccount\",\n },\n\n PartitionKeyRange: {\n // Partition Key Range Constants\n MinInclusive: \"minInclusive\",\n MaxExclusive: \"maxExclusive\",\n Id: \"id\",\n } as PartitionKeyRangePropertiesNames,\n\n QueryRangeConstants: {\n // Partition Key Range Constants\n MinInclusive: \"minInclusive\",\n MaxExclusive: \"maxExclusive\",\n min: \"min\",\n },\n\n /**\n * @deprecated Use EffectivePartitionKeyConstants instead\n */\n EffectiveParitionKeyConstants: {\n MinimumInclusiveEffectivePartitionKey: \"\",\n MaximumExclusiveEffectivePartitionKey: \"FF\",\n },\n\n EffectivePartitionKeyConstants: {\n MinimumInclusiveEffectivePartitionKey: \"\",\n MaximumExclusiveEffectivePartitionKey: \"FF\",\n },\n};\n\n/**\n * @hidden\n */\nexport enum ResourceType {\n none = \"\",\n database = \"dbs\",\n offer = \"offers\",\n user = \"users\",\n permission = \"permissions\",\n container = \"colls\",\n conflicts = \"conflicts\",\n sproc = \"sprocs\",\n udf = \"udfs\",\n trigger = \"triggers\",\n item = \"docs\",\n pkranges = \"pkranges\",\n partitionkey = \"partitionKey\",\n}\n\n/**\n * @hidden\n */\nexport enum HTTPMethod {\n get = \"GET\",\n patch = \"PATCH\",\n post = \"POST\",\n put = \"PUT\",\n delete = \"DELETE\",\n}\n\n/**\n * @hidden\n */\nexport enum OperationType {\n Create = \"create\",\n Replace = \"replace\",\n Upsert = \"upsert\",\n Delete = \"delete\",\n Read = \"read\",\n Query = \"query\",\n Execute = \"execute\",\n Batch = \"batch\",\n Patch = \"patch\",\n}\n\n/**\n * @hidden\n */\nexport enum CosmosKeyType {\n PrimaryMaster = \"PRIMARY_MASTER\",\n SecondaryMaster = \"SECONDARY_MASTER\",\n PrimaryReadOnly = \"PRIMARY_READONLY\",\n SecondaryReadOnly = \"SECONDARY_READONLY\",\n}\n\n/**\n * @hidden\n */\nexport enum CosmosContainerChildResourceKind {\n Item = \"ITEM\",\n StoredProcedure = \"STORED_PROCEDURE\",\n UserDefinedFunction = \"USER_DEFINED_FUNCTION\",\n Trigger = \"TRIGGER\",\n}\n/**\n * @hidden\n */\nexport enum PermissionScopeValues {\n /**\n * Values which set permission Scope applicable to control plane related operations.\n */\n ScopeAccountReadValue = 0x0001,\n ScopeAccountListDatabasesValue = 0x0002,\n ScopeDatabaseReadValue = 0x0004,\n ScopeDatabaseReadOfferValue = 0x0008,\n ScopeDatabaseListContainerValue = 0x0010,\n ScopeContainerReadValue = 0x0020,\n ScopeContainerReadOfferValue = 0x0040,\n\n ScopeAccountCreateDatabasesValue = 0x0001,\n ScopeAccountDeleteDatabasesValue = 0x0002,\n ScopeDatabaseDeleteValue = 0x0004,\n ScopeDatabaseReplaceOfferValue = 0x0008,\n ScopeDatabaseCreateContainerValue = 0x0010,\n ScopeDatabaseDeleteContainerValue = 0x0020,\n ScopeContainerReplaceValue = 0x0040,\n ScopeContainerDeleteValue = 0x0080,\n ScopeContainerReplaceOfferValue = 0x0100,\n\n ScopeAccountReadAllAccessValue = 0xffff,\n ScopeDatabaseReadAllAccessValue = PermissionScopeValues.ScopeDatabaseReadValue |\n PermissionScopeValues.ScopeDatabaseReadOfferValue |\n PermissionScopeValues.ScopeDatabaseListContainerValue |\n PermissionScopeValues.ScopeContainerReadValue |\n PermissionScopeValues.ScopeContainerReadOfferValue,\n\n ScopeContainersReadAllAccessValue = PermissionScopeValues.ScopeContainerReadValue |\n PermissionScopeValues.ScopeContainerReadOfferValue,\n\n ScopeAccountWriteAllAccessValue = 0xffff,\n ScopeDatabaseWriteAllAccessValue = PermissionScopeValues.ScopeDatabaseDeleteValue |\n PermissionScopeValues.ScopeDatabaseReplaceOfferValue |\n PermissionScopeValues.ScopeDatabaseCreateContainerValue |\n PermissionScopeValues.ScopeDatabaseDeleteContainerValue |\n PermissionScopeValues.ScopeContainerReplaceValue |\n PermissionScopeValues.ScopeContainerDeleteValue |\n PermissionScopeValues.ScopeContainerReplaceOfferValue,\n\n ScopeContainersWriteAllAccessValue = PermissionScopeValues.ScopeContainerReplaceValue |\n PermissionScopeValues.ScopeContainerDeleteValue |\n PermissionScopeValues.ScopeContainerReplaceOfferValue,\n\n /**\n * Values which set permission Scope applicable to data plane related operations.\n */\n ScopeContainerExecuteQueriesValue = 0x00000001,\n ScopeContainerReadFeedsValue = 0x00000002,\n ScopeContainerReadStoredProceduresValue = 0x00000004,\n ScopeContainerReadUserDefinedFunctionsValue = 0x00000008,\n ScopeContainerReadTriggersValue = 0x00000010,\n ScopeContainerReadConflictsValue = 0x00000020,\n ScopeItemReadValue = 0x00000040,\n ScopeStoredProcedureReadValue = 0x00000080,\n ScopeUserDefinedFunctionReadValue = 0x00000100,\n ScopeTriggerReadValue = 0x00000200,\n\n ScopeContainerCreateItemsValue = 0x00000001,\n ScopeContainerReplaceItemsValue = 0x00000002,\n ScopeContainerUpsertItemsValue = 0x00000004,\n ScopeContainerDeleteItemsValue = 0x00000008,\n ScopeContainerCreateStoredProceduresValue = 0x00000010,\n ScopeContainerReplaceStoredProceduresValue = 0x00000020,\n ScopeContainerDeleteStoredProceduresValue = 0x00000040,\n ScopeContainerExecuteStoredProceduresValue = 0x00000080,\n ScopeContainerCreateTriggersValue = 0x00000100,\n ScopeContainerReplaceTriggersValue = 0x00000200,\n ScopeContainerDeleteTriggersValue = 0x00000400,\n ScopeContainerCreateUserDefinedFunctionsValue = 0x00000800,\n ScopeContainerReplaceUserDefinedFunctionsValue = 0x00001000,\n ScopeContainerDeleteUserDefinedFunctionSValue = 0x00002000,\n ScopeContainerDeleteCONFLICTSValue = 0x00004000,\n ScopeItemReplaceValue = 0x00010000,\n ScopeItemUpsertValue = 0x00020000,\n ScopeItemDeleteValue = 0x00040000,\n ScopeStoredProcedureReplaceValue = 0x00100000,\n ScopeStoredProcedureDeleteValue = 0x00200000,\n ScopeStoredProcedureExecuteValue = 0x00400000,\n ScopeUserDefinedFunctionReplaceValue = 0x00800000,\n ScopeUserDefinedFunctionDeleteValue = 0x01000000,\n ScopeTriggerReplaceValue = 0x02000000,\n ScopeTriggerDeleteValue = 0x04000000,\n\n ScopeContainerReadAllAccessValue = 0xffffffff,\n ScopeItemReadAllAccessValue = PermissionScopeValues.ScopeContainerExecuteQueriesValue |\n PermissionScopeValues.ScopeItemReadValue,\n ScopeContainerWriteAllAccessValue = 0xffffffff,\n ScopeItemWriteAllAccessValue = PermissionScopeValues.ScopeContainerCreateItemsValue |\n PermissionScopeValues.ScopeContainerReplaceItemsValue |\n PermissionScopeValues.ScopeContainerUpsertItemsValue |\n PermissionScopeValues.ScopeContainerDeleteItemsValue |\n PermissionScopeValues.ScopeItemReplaceValue |\n PermissionScopeValues.ScopeItemUpsertValue |\n PermissionScopeValues.ScopeItemDeleteValue,\n\n NoneValue = 0,\n}\n/**\n * @hidden\n */\nexport enum SasTokenPermissionKind {\n ContainerCreateItems = PermissionScopeValues.ScopeContainerCreateItemsValue,\n ContainerReplaceItems = PermissionScopeValues.ScopeContainerReplaceItemsValue,\n ContainerUpsertItems = PermissionScopeValues.ScopeContainerUpsertItemsValue,\n ContainerDeleteItems = PermissionScopeValues.ScopeContainerDeleteValue,\n ContainerExecuteQueries = PermissionScopeValues.ScopeContainerExecuteQueriesValue,\n ContainerReadFeeds = PermissionScopeValues.ScopeContainerReadFeedsValue,\n ContainerCreateStoreProcedure = PermissionScopeValues.ScopeContainerCreateStoredProceduresValue,\n ContainerReadStoreProcedure = PermissionScopeValues.ScopeContainerReadStoredProceduresValue,\n ContainerReplaceStoreProcedure = PermissionScopeValues.ScopeContainerReplaceStoredProceduresValue,\n ContainerDeleteStoreProcedure = PermissionScopeValues.ScopeContainerDeleteStoredProceduresValue,\n ContainerCreateTriggers = PermissionScopeValues.ScopeContainerCreateTriggersValue,\n ContainerReadTriggers = PermissionScopeValues.ScopeContainerReadTriggersValue,\n ContainerReplaceTriggers = PermissionScopeValues.ScopeContainerReplaceTriggersValue,\n ContainerDeleteTriggers = PermissionScopeValues.ScopeContainerDeleteTriggersValue,\n ContainerCreateUserDefinedFunctions = PermissionScopeValues.ScopeContainerCreateUserDefinedFunctionsValue,\n ContainerReadUserDefinedFunctions = PermissionScopeValues.ScopeContainerReadUserDefinedFunctionsValue,\n ContainerReplaceUserDefinedFunctions = PermissionScopeValues.ScopeContainerReplaceUserDefinedFunctionsValue,\n ContainerDeleteUserDefinedFunctions = PermissionScopeValues.ScopeContainerDeleteUserDefinedFunctionSValue,\n ContainerExecuteStoredProcedure = PermissionScopeValues.ScopeContainerExecuteStoredProceduresValue,\n ContainerReadConflicts = PermissionScopeValues.ScopeContainerReadConflictsValue,\n ContainerDeleteConflicts = PermissionScopeValues.ScopeContainerDeleteCONFLICTSValue,\n ContainerReadAny = PermissionScopeValues.ScopeContainerReadOfferValue,\n ContainerFullAccess = PermissionScopeValues.ScopeContainerReadAllAccessValue,\n ItemReadAny = PermissionScopeValues.ScopeItemReplaceValue,\n ItemFullAccess = PermissionScopeValues.ScopeItemReadAllAccessValue,\n ItemRead = PermissionScopeValues.ScopeItemReadValue,\n ItemReplace = PermissionScopeValues.ScopeItemReplaceValue,\n ItemUpsert = PermissionScopeValues.ScopeItemUpsertValue,\n ItemDelete = PermissionScopeValues.ScopeItemDeleteValue,\n StoreProcedureRead = PermissionScopeValues.ScopeStoredProcedureReadValue,\n StoreProcedureReplace = PermissionScopeValues.ScopeStoredProcedureReplaceValue,\n StoreProcedureDelete = PermissionScopeValues.ScopeStoredProcedureDeleteValue,\n StoreProcedureExecute = PermissionScopeValues.ScopeStoredProcedureExecuteValue,\n UserDefinedFuntionRead = PermissionScopeValues.ScopeUserDefinedFunctionReadValue,\n UserDefinedFuntionReplace = PermissionScopeValues.ScopeUserDefinedFunctionReplaceValue,\n UserDefinedFuntionDelete = PermissionScopeValues.ScopeUserDefinedFunctionDeleteValue,\n TriggerRead = PermissionScopeValues.ScopeTriggerReadValue,\n TriggerReplace = PermissionScopeValues.ScopeTriggerReplaceValue,\n TriggerDelete = PermissionScopeValues.ScopeTriggerDeleteValue,\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosClientOptions } from \"../CosmosClientOptions\";\nimport { OperationType, ResourceType } from \"./constants\";\n\nconst trimLeftSlashes = new RegExp(\"^[/]+\");\nconst trimRightSlashes = new RegExp(\"[/]+$\");\nconst illegalResourceIdCharacters = new RegExp(\"[/\\\\\\\\?#]\");\nconst illegalItemResourceIdCharacters = new RegExp(\"[/\\\\\\\\#]\");\n\n/** @hidden */\nexport function jsonStringifyAndEscapeNonASCII(arg: unknown): string {\n // TODO: better way for this? Not sure.\n // escapes non-ASCII characters as \\uXXXX\n return JSON.stringify(arg).replace(/[\\u007F-\\uFFFF]/g, (m) => {\n return \"\\\\u\" + (\"0000\" + m.charCodeAt(0).toString(16)).slice(-4);\n });\n}\n\n/**\n * @hidden\n */\nexport function parseLink(resourcePath: string): {\n type: ResourceType;\n objectBody: {\n id: string;\n self: string;\n };\n} {\n if (resourcePath.length === 0) {\n /* for DatabaseAccount case, both type and objectBody will be undefined. */\n return {\n type: undefined,\n objectBody: undefined,\n };\n }\n\n if (resourcePath[resourcePath.length - 1] !== \"/\") {\n resourcePath = resourcePath + \"/\";\n }\n\n if (resourcePath[0] !== \"/\") {\n resourcePath = \"/\" + resourcePath;\n }\n\n /*\n The path will be in the form of /[resourceType]/[resourceId]/ ....\n /[resourceType]//[resourceType]/[resourceId]/ .... /[resourceType]/[resourceId]/\n or /[resourceType]/[resourceId]/ .... /[resourceType]/[resourceId]/[resourceType]/[resourceId]/ ....\n /[resourceType]/[resourceId]/\n The result of split will be in the form of\n [[[resourceType], [resourceId] ... ,[resourceType], [resourceId], \"\"]\n In the first case, to extract the resourceId it will the element before last ( at length -2 )\n and the type will be before it ( at length -3 )\n In the second case, to extract the resource type it will the element before last ( at length -2 )\n */\n const pathParts = resourcePath.split(\"/\");\n let id;\n let type: ResourceType;\n if (pathParts.length % 2 === 0) {\n // request in form /[resourceType]/[resourceId]/ .... /[resourceType]/[resourceId].\n id = pathParts[pathParts.length - 2];\n type = pathParts[pathParts.length - 3] as ResourceType;\n } else {\n // request in form /[resourceType]/[resourceId]/ .... /[resourceType]/.\n id = pathParts[pathParts.length - 3];\n type = pathParts[pathParts.length - 2] as ResourceType;\n }\n\n const result = {\n type,\n objectBody: {\n id,\n self: resourcePath,\n },\n };\n\n return result;\n}\n\n/**\n * @hidden\n */\nexport function isReadRequest(operationType: OperationType): boolean {\n return operationType === OperationType.Read || operationType === OperationType.Query;\n}\n\n/**\n * @hidden\n */\nexport function sleep(time: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, time);\n });\n}\n\n/**\n * @hidden\n */\nexport function getContainerLink(link: string): string {\n return link.split(\"/\").slice(0, 4).join(\"/\");\n}\n\n/**\n * @hidden\n */\nexport function trimSlashes(source: string): string {\n return source.replace(trimLeftSlashes, \"\").replace(trimRightSlashes, \"\");\n}\n\n/**\n * @hidden\n */\nexport function getHexaDigit(): string {\n return Math.floor(Math.random() * 16).toString(16);\n}\n\n/**\n * @hidden\n */\nexport function parsePath(path: string): string[] {\n const pathParts = [];\n let currentIndex = 0;\n\n const throwError = (): never => {\n throw new Error(\"Path \" + path + \" is invalid at index \" + currentIndex);\n };\n\n const getEscapedToken = (): string => {\n const quote = path[currentIndex];\n let newIndex = ++currentIndex;\n\n for (;;) {\n newIndex = path.indexOf(quote, newIndex);\n if (newIndex === -1) {\n throwError();\n }\n\n if (path[newIndex - 1] !== \"\\\\\") {\n break;\n }\n\n ++newIndex;\n }\n\n const token = path.substr(currentIndex, newIndex - currentIndex);\n currentIndex = newIndex + 1;\n return token;\n };\n\n const getToken = (): string => {\n const newIndex = path.indexOf(\"/\", currentIndex);\n let token = null;\n if (newIndex === -1) {\n token = path.substr(currentIndex);\n currentIndex = path.length;\n } else {\n token = path.substr(currentIndex, newIndex - currentIndex);\n currentIndex = newIndex;\n }\n\n token = token.trim();\n return token;\n };\n\n while (currentIndex < path.length) {\n if (path[currentIndex] !== \"/\") {\n throwError();\n }\n\n if (++currentIndex === path.length) {\n break;\n }\n\n if (path[currentIndex] === '\"' || path[currentIndex] === \"'\") {\n pathParts.push(getEscapedToken());\n } else {\n pathParts.push(getToken());\n }\n }\n\n return pathParts;\n}\n\n/**\n * @hidden\n */\nexport function isResourceValid(resource: { id?: string }, err: { message?: string }): boolean {\n // TODO: fix strictness issues so that caller contexts respects the types of the functions\n if (resource.id) {\n if (typeof resource.id !== \"string\") {\n err.message = \"Id must be a string.\";\n return false;\n }\n\n if (\n resource.id.indexOf(\"/\") !== -1 ||\n resource.id.indexOf(\"\\\\\") !== -1 ||\n resource.id.indexOf(\"?\") !== -1 ||\n resource.id.indexOf(\"#\") !== -1\n ) {\n err.message = \"Id contains illegal chars.\";\n return false;\n }\n\n if (resource.id[resource.id.length - 1] === \" \") {\n err.message = \"Id ends with a space.\";\n return false;\n }\n }\n return true;\n}\n\n/**\n * @hidden\n */\nexport function isItemResourceValid(resource: { id?: string }, err: { message?: string }): boolean {\n // TODO: fix strictness issues so that caller contexts respects the types of the functions\n if (resource.id) {\n if (typeof resource.id !== \"string\") {\n err.message = \"Id must be a string.\";\n return false;\n }\n\n if (\n resource.id.indexOf(\"/\") !== -1 ||\n resource.id.indexOf(\"\\\\\") !== -1 ||\n resource.id.indexOf(\"#\") !== -1\n ) {\n err.message = \"Id contains illegal chars.\";\n return false;\n }\n }\n return true;\n}\n\n/** @hidden */\nexport function getIdFromLink(resourceLink: string): string {\n resourceLink = trimSlashes(resourceLink);\n return resourceLink;\n}\n\n/** @hidden */\nexport function getPathFromLink(resourceLink: string, resourceType?: string): string {\n resourceLink = trimSlashes(resourceLink);\n if (resourceType) {\n return \"/\" + encodeURI(resourceLink) + \"/\" + resourceType;\n } else {\n return \"/\" + encodeURI(resourceLink);\n }\n}\n\n/**\n * @hidden\n */\nexport function isStringNullOrEmpty(inputString: string): boolean {\n // checks whether string is null, undefined, empty or only contains space\n return !inputString || /^\\s*$/.test(inputString);\n}\n\n/**\n * @hidden\n */\nexport function trimSlashFromLeftAndRight(inputString: string): string {\n if (typeof inputString !== \"string\") {\n throw new Error(\"invalid input: input is not string\");\n }\n\n return inputString.replace(trimLeftSlashes, \"\").replace(trimRightSlashes, \"\");\n}\n\n/**\n * @hidden\n */\nexport function validateResourceId(resourceId: string): boolean {\n // if resourceId is not a string or is empty throw an error\n if (typeof resourceId !== \"string\" || isStringNullOrEmpty(resourceId)) {\n throw new Error(\"Resource ID must be a string and cannot be undefined, null or empty\");\n }\n\n // if resource id contains illegal characters throw an error\n if (illegalResourceIdCharacters.test(resourceId)) {\n throw new Error(\"Illegal characters ['/', '\\\\', '#', '?'] cannot be used in Resource ID\");\n }\n\n return true;\n}\n\n/**\n * @hidden\n */\nexport function validateItemResourceId(resourceId: string): boolean {\n // if resourceId is not a string or is empty throw an error\n if (typeof resourceId !== \"string\" || isStringNullOrEmpty(resourceId)) {\n throw new Error(\"Resource ID must be a string and cannot be undefined, null or empty\");\n }\n\n // if resource id contains illegal characters throw an error\n if (illegalItemResourceIdCharacters.test(resourceId)) {\n throw new Error(\"Illegal characters ['/', '\\\\', '#'] cannot be used in Resource ID\");\n }\n\n return true;\n}\n\n/**\n * @hidden\n */\nexport function getResourceIdFromPath(resourcePath: string): string {\n if (!resourcePath || typeof resourcePath !== \"string\") {\n return null;\n }\n\n const trimmedPath = trimSlashFromLeftAndRight(resourcePath);\n const pathSegments = trimmedPath.split(\"/\");\n\n // number of segments of a path must always be even\n if (pathSegments.length % 2 !== 0) {\n return null;\n }\n\n return pathSegments[pathSegments.length - 1];\n}\n\n/**\n * @hidden\n */\ninterface ConnectionObject {\n AccountEndpoint: string;\n AccountKey: string;\n}\n\n/**\n * @hidden\n */\nexport function parseConnectionString(connectionString: string): CosmosClientOptions {\n const keyValueStrings = connectionString.split(\";\");\n const { AccountEndpoint, AccountKey } = keyValueStrings.reduce(\n (connectionObject, keyValueString: string) => {\n const [key, ...value] = keyValueString.split(\"=\");\n (connectionObject as any)[key] = value.join(\"=\");\n return connectionObject;\n },\n {} as ConnectionObject\n );\n if (!AccountEndpoint || !AccountKey) {\n throw new Error(\"Could not parse the provided connection string\");\n }\n return {\n endpoint: AccountEndpoint,\n key: AccountKey,\n };\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * @hidden\n */\nexport interface StatusCodesType {\n // Success\n Ok: 200;\n Created: 201;\n Accepted: 202;\n NoContent: 204;\n NotModified: 304;\n\n // Client error\n BadRequest: 400;\n Unauthorized: 401;\n Forbidden: 403;\n NotFound: 404;\n MethodNotAllowed: 405;\n RequestTimeout: 408;\n Conflict: 409;\n Gone: 410;\n PreconditionFailed: 412;\n RequestEntityTooLarge: 413;\n TooManyRequests: 429;\n RetryWith: 449;\n\n // Server Error\n InternalServerError: 500;\n ServiceUnavailable: 503;\n\n // System codes\n ENOTFOUND: \"ENOTFOUND\";\n\n // Operation pause and cancel. These are FAKE status codes for QOS logging purpose only.\n OperationPaused: 1200;\n OperationCancelled: 1201;\n}\n\n/**\n * @hidden\n */\nexport const StatusCodes: StatusCodesType = {\n // Success\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NoContent: 204,\n NotModified: 304,\n\n // Client error\n BadRequest: 400,\n Unauthorized: 401,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n PreconditionFailed: 412,\n RequestEntityTooLarge: 413,\n TooManyRequests: 429,\n RetryWith: 449,\n\n // Server Error\n InternalServerError: 500,\n ServiceUnavailable: 503,\n\n // System codes\n ENOTFOUND: \"ENOTFOUND\",\n\n // Operation pause and cancel. These are FAKE status codes for QOS logging purpose only.\n OperationPaused: 1200,\n OperationCancelled: 1201,\n};\n\n/**\n * @hidden\n */\nexport interface SubStatusCodesType {\n Unknown: 0;\n\n // 400: Bad Request Substatus\n CrossPartitionQueryNotServable: 1004;\n\n // 410: StatusCodeType_Gone: substatus\n PartitionKeyRangeGone: 1002;\n\n // 404: NotFound Substatus\n ReadSessionNotAvailable: 1002;\n\n // 403: Forbidden Substatus\n WriteForbidden: 3;\n DatabaseAccountNotFound: 1008;\n}\n\n/**\n * @hidden\n */\nexport const SubStatusCodes: SubStatusCodesType = {\n Unknown: 0,\n\n // 400: Bad Request Substatus\n CrossPartitionQueryNotServable: 1004,\n\n // 410: StatusCodeType_Gone: substatus\n PartitionKeyRangeGone: 1002,\n\n // 404: NotFound Substatus\n ReadSessionNotAvailable: 1002,\n\n // 403: Forbidden Substatus\n WriteForbidden: 3,\n DatabaseAccountNotFound: 1008,\n};\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"./constants\";\nimport { trimSlashFromLeftAndRight, validateResourceId, validateItemResourceId } from \"./helper\";\n\n/**\n * Would be used when creating or deleting a DocumentCollection\n * or a User in Azure Cosmos DB database service\n * @hidden\n * Given a database id, this creates a database link.\n * @param databaseId - The database id\n * @returns A database link in the format of `dbs/{0}`\n * with `{0}` being a Uri escaped version of the databaseId\n */\nexport function createDatabaseUri(databaseId: string): string {\n databaseId = trimSlashFromLeftAndRight(databaseId);\n validateResourceId(databaseId);\n\n return Constants.Path.DatabasesPathSegment + \"/\" + databaseId;\n}\n\n/**\n * Given a database and collection id, this creates a collection link.\n * Would be used when updating or deleting a DocumentCollection, creating a\n * Document, a StoredProcedure, a Trigger, a UserDefinedFunction, or when executing a query\n * with CreateDocumentQuery in Azure Cosmos DB database service.\n * @param databaseId - The database id\n * @param collectionId - The collection id\n * @returns A collection link in the format of `dbs/{0}/colls/{1}`\n * with `{0}` being a Uri escaped version of the databaseId and `{1}` being collectionId\n * @hidden\n */\nexport function createDocumentCollectionUri(databaseId: string, collectionId: string): string {\n collectionId = trimSlashFromLeftAndRight(collectionId);\n validateResourceId(collectionId);\n\n return (\n createDatabaseUri(databaseId) + \"/\" + Constants.Path.CollectionsPathSegment + \"/\" + collectionId\n );\n}\n\n/**\n * Given a database and user id, this creates a user link.\n * Would be used when creating a Permission, or when replacing or deleting\n * a User in Azure Cosmos DB database service\n * @param databaseId - The database id\n * @param userId - The user id\n * @returns A user link in the format of `dbs/{0}/users/{1}`\n * with `{0}` being a Uri escaped version of the databaseId and `{1}` being userId\n * @hidden\n */\nexport function createUserUri(databaseId: string, userId: string): string {\n userId = trimSlashFromLeftAndRight(userId);\n validateResourceId(userId);\n\n return createDatabaseUri(databaseId) + \"/\" + Constants.Path.UsersPathSegment + \"/\" + userId;\n}\n\n/**\n * Given a database and collection id, this creates a collection link.\n * Would be used when creating an Attachment, or when replacing\n * or deleting a Document in Azure Cosmos DB database service\n * @param databaseId - The database id\n * @param collectionId - The collection id\n * @param documentId - The document id\n * @returns A document link in the format of\n * `dbs/{0}/colls/{1}/docs/{2}` with `{0}` being a Uri escaped version of\n * the databaseId, `{1}` being collectionId and `{2}` being the documentId\n * @hidden\n */\nexport function createDocumentUri(\n databaseId: string,\n collectionId: string,\n documentId: string\n): string {\n documentId = trimSlashFromLeftAndRight(documentId);\n validateItemResourceId(documentId);\n\n return (\n createDocumentCollectionUri(databaseId, collectionId) +\n \"/\" +\n Constants.Path.DocumentsPathSegment +\n \"/\" +\n documentId\n );\n}\n\n/**\n * Given a database, collection and document id, this creates a document link.\n * Would be used when replacing or deleting a Permission in Azure Cosmos DB database service.\n * @param databaseId -The database Id\n * @param userId -The user Id\n * @param permissionId - The permissionId\n * @returns A permission link in the format of `dbs/{0}/users/{1}/permissions/{2}`\n * with `{0}` being a Uri escaped version of the databaseId, `{1}` being userId and `{2}` being permissionId\n * @hidden\n */\nexport function createPermissionUri(\n databaseId: string,\n userId: string,\n permissionId: string\n): string {\n permissionId = trimSlashFromLeftAndRight(permissionId);\n validateResourceId(permissionId);\n\n return (\n createUserUri(databaseId, userId) +\n \"/\" +\n Constants.Path.PermissionsPathSegment +\n \"/\" +\n permissionId\n );\n}\n\n/**\n * Given a database, collection and stored proc id, this creates a stored proc link.\n * Would be used when replacing, executing, or deleting a StoredProcedure in\n * Azure Cosmos DB database service.\n * @param databaseId -The database Id\n * @param collectionId -The collection Id\n * @param storedProcedureId -The stored procedure Id\n * @returns A stored procedure link in the format of\n * `dbs/{0}/colls/{1}/sprocs/{2}` with `{0}` being a Uri escaped version of the databaseId,\n * `{1}` being collectionId and `{2}` being the storedProcedureId\n * @hidden\n */\nexport function createStoredProcedureUri(\n databaseId: string,\n collectionId: string,\n storedProcedureId: string\n): string {\n storedProcedureId = trimSlashFromLeftAndRight(storedProcedureId);\n validateResourceId(storedProcedureId);\n\n return (\n createDocumentCollectionUri(databaseId, collectionId) +\n \"/\" +\n Constants.Path.StoredProceduresPathSegment +\n \"/\" +\n storedProcedureId\n );\n}\n\n/**\n * Given a database, collection and trigger id, this creates a trigger link.\n * Would be used when replacing, executing, or deleting a Trigger in Azure Cosmos DB database service\n * @param databaseId -The database Id\n * @param collectionId -The collection Id\n * @param triggerId -The trigger Id\n * @returns A trigger link in the format of\n * `dbs/{0}/colls/{1}/triggers/{2}` with `{0}` being a Uri escaped version of the databaseId,\n * `{1}` being collectionId and `{2}` being the triggerId\n * @hidden\n */\nexport function createTriggerUri(\n databaseId: string,\n collectionId: string,\n triggerId: string\n): string {\n triggerId = trimSlashFromLeftAndRight(triggerId);\n validateResourceId(triggerId);\n\n return (\n createDocumentCollectionUri(databaseId, collectionId) +\n \"/\" +\n Constants.Path.TriggersPathSegment +\n \"/\" +\n triggerId\n );\n}\n\n/**\n * Given a database, collection and udf id, this creates a udf link.\n * Would be used when replacing, executing, or deleting a UserDefinedFunction in\n * Azure Cosmos DB database service\n * @param databaseId -The database Id\n * @param collectionId -The collection Id\n * @param udfId -The User Defined Function Id\n * @returns A udf link in the format of `dbs/{0}/colls/{1}/udfs/{2}`\n * with `{0}` being a Uri escaped version of the databaseId, `{1}` being collectionId and `{2}` being the udfId\n * @hidden\n */\nexport function createUserDefinedFunctionUri(\n databaseId: string,\n collectionId: string,\n udfId: string\n): string {\n udfId = trimSlashFromLeftAndRight(udfId);\n validateResourceId(udfId);\n\n return (\n createDocumentCollectionUri(databaseId, collectionId) +\n \"/\" +\n Constants.Path.UserDefinedFunctionsPathSegment +\n \"/\" +\n udfId\n );\n}\n\n/**\n * Given a database, collection and conflict id, this creates a conflict link.\n * Would be used when creating a Conflict in Azure Cosmos DB database service.\n * @param databaseId -The database Id\n * @param collectionId -The collection Id\n * @param conflictId -The conflict Id\n * @returns A conflict link in the format of `dbs/{0}/colls/{1}/conflicts/{2}`\n * with `{0}` being a Uri escaped version of the databaseId, `{1}` being collectionId and `{2}` being the conflictId\n * @hidden\n */\nexport function createConflictUri(\n databaseId: string,\n collectionId: string,\n conflictId: string\n): string {\n conflictId = trimSlashFromLeftAndRight(conflictId);\n validateResourceId(conflictId);\n\n return (\n createDocumentCollectionUri(databaseId, collectionId) +\n \"/\" +\n Constants.Path.ConflictsPathSegment +\n \"/\" +\n conflictId\n );\n}\n\n/**\n * Given a database, collection and conflict id, this creates a conflict link.\n * Would be used when creating a Conflict in Azure Cosmos DB database service.\n * @param databaseId -The database Id\n * @param collectionId -The collection Id\n * @param documentId -The document Id\n * @param attachmentId -The attachment Id\n * @returns A conflict link in the format of `dbs/{0}/colls/{1}/conflicts/{2}`\n * with `{0}` being a Uri escaped version of the databaseId, `{1}` being collectionId and `{2}` being the conflictId\n * @hidden\n */\nexport function createAttachmentUri(\n databaseId: string,\n collectionId: string,\n documentId: string,\n attachmentId: string\n): string {\n attachmentId = trimSlashFromLeftAndRight(attachmentId);\n validateResourceId(attachmentId);\n\n return (\n createDocumentUri(databaseId, collectionId, documentId) +\n \"/\" +\n Constants.Path.AttachmentsPathSegment +\n \"/\" +\n attachmentId\n );\n}\n\n/**\n * Given a database and collection, this creates a partition key ranges link in\n * the Azure Cosmos DB database service.\n * @param databaseId - The database Id\n * @param collectionId - The collection Id\n * @returns A partition key ranges link in the format of\n * `dbs/{0}/colls/{1}/pkranges` with `{0}` being a Uri escaped version of the databaseId and `{1}` being collectionId\n * @hidden\n */\nexport function createPartitionKeyRangesUri(databaseId: string, collectionId: string): string {\n return (\n createDocumentCollectionUri(databaseId, collectionId) +\n \"/\" +\n Constants.Path.PartitionKeyRangesPathSegment\n );\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { parsePath } from \"./common\";\nimport { PartitionKey, PartitionKeyDefinition } from \"./documents\";\n\n/**\n * @hidden\n */\nexport function extractPartitionKey(\n document: unknown,\n partitionKeyDefinition: PartitionKeyDefinition\n): PartitionKey[] {\n if (\n partitionKeyDefinition &&\n partitionKeyDefinition.paths &&\n partitionKeyDefinition.paths.length > 0\n ) {\n const partitionKey: PartitionKey[] = [];\n partitionKeyDefinition.paths.forEach((path: string) => {\n const pathParts = parsePath(path);\n let obj = document;\n for (const part of pathParts) {\n if (typeof obj === \"object\" && part in obj) {\n obj = (obj as Record<string, unknown>)[part];\n } else {\n obj = undefined;\n break;\n }\n }\n partitionKey.push(obj);\n });\n if (partitionKey.length === 1 && partitionKey[0] === undefined) {\n return undefinedPartitionKey(partitionKeyDefinition);\n }\n return partitionKey;\n }\n}\n/**\n * @hidden\n */\nexport function undefinedPartitionKey(partitionKeyDefinition: PartitionKeyDefinition): unknown[] {\n if (partitionKeyDefinition.systemKey === true) {\n return [];\n } else {\n return [{}];\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createHmac } from \"crypto\";\n\nexport async function hmac(key: string, message: string): Promise<string> {\n return createHmac(\"sha256\", Buffer.from(key, \"base64\")).update(message).digest(\"base64\");\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { hmac } from \"./hmac\";\nimport { HTTPMethod, ResourceType, Constants } from \"../common\";\n\nexport async function generateHeaders(\n masterKey: string,\n method: HTTPMethod,\n resourceType: ResourceType = ResourceType.none,\n resourceId: string = \"\",\n date = new Date()\n): Promise<{\n [x: string]: string;\n}> {\n if (masterKey.startsWith(\"type=sas&\")) {\n return {\n [Constants.HttpHeaders.Authorization]: encodeURIComponent(masterKey),\n [Constants.HttpHeaders.XDate]: date.toUTCString(),\n };\n }\n const sig = await signature(masterKey, method, resourceType, resourceId, date);\n\n return {\n [Constants.HttpHeaders.Authorization]: sig,\n [Constants.HttpHeaders.XDate]: date.toUTCString(),\n };\n}\n\nasync function signature(\n masterKey: string,\n method: HTTPMethod,\n resourceType: ResourceType,\n resourceId: string = \"\",\n date = new Date()\n): Promise<string> {\n const type = \"master\";\n const version = \"1.0\";\n const text =\n method.toLowerCase() +\n \"\\n\" +\n resourceType.toLowerCase() +\n \"\\n\" +\n resourceId +\n \"\\n\" +\n date.toUTCString().toLowerCase() +\n \"\\n\" +\n \"\" +\n \"\\n\";\n\n const signed = await hmac(masterKey, text);\n\n return encodeURIComponent(\"type=\" + type + \"&ver=\" + version + \"&sig=\" + signed);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { generateHeaders } from \"./utils/headers\";\nimport {\n Constants,\n getResourceIdFromPath,\n HTTPMethod,\n ResourceType,\n trimSlashFromLeftAndRight,\n} from \"./common\";\nimport { CosmosClientOptions } from \"./CosmosClientOptions\";\nimport { CosmosHeaders } from \"./queryExecutionContext\";\n\n/** @hidden */\nexport interface RequestInfo {\n verb: HTTPMethod;\n path: string;\n resourceId: string;\n resourceType: ResourceType;\n headers: CosmosHeaders;\n}\n\nexport type TokenProvider = (requestInfo: RequestInfo) => Promise<string>;\n\n/**\n * @hidden\n */\nexport async function setAuthorizationHeader(\n clientOptions: CosmosClientOptions,\n verb: HTTPMethod,\n path: string,\n resourceId: string,\n resourceType: ResourceType,\n headers: CosmosHeaders\n): Promise<void> {\n if (clientOptions.permissionFeed) {\n clientOptions.resourceTokens = {};\n for (const permission of clientOptions.permissionFeed) {\n const id = getResourceIdFromPath(permission.resource);\n if (!id) {\n throw new Error(`authorization error: ${id} \\\n is an invalid resourceId in permissionFeed`);\n }\n\n clientOptions.resourceTokens[id] = (permission as any)._token; // TODO: any\n }\n }\n\n if (clientOptions.key) {\n await setAuthorizationTokenHeaderUsingMasterKey(\n verb,\n resourceId,\n resourceType,\n headers,\n clientOptions.key\n );\n } else if (clientOptions.resourceTokens) {\n headers[Constants.HttpHeaders.Authorization] = encodeURIComponent(\n getAuthorizationTokenUsingResourceTokens(clientOptions.resourceTokens, path, resourceId)\n );\n } else if (clientOptions.tokenProvider) {\n headers[Constants.HttpHeaders.Authorization] = encodeURIComponent(\n await clientOptions.tokenProvider({ verb, path, resourceId, resourceType, headers })\n );\n }\n}\n\n/**\n * The default function for setting header token using the masterKey\n * @hidden\n */\nexport async function setAuthorizationTokenHeaderUsingMasterKey(\n verb: HTTPMethod,\n resourceId: string,\n resourceType: ResourceType,\n headers: CosmosHeaders,\n masterKey: string\n): Promise<void> {\n // TODO This should live in cosmos-sign\n if (resourceType === ResourceType.offer) {\n resourceId = resourceId && resourceId.toLowerCase();\n }\n headers = Object.assign(\n headers,\n await generateHeaders(masterKey, verb, resourceType, resourceId)\n );\n}\n\n/**\n * @hidden\n */\n// TODO: Resource tokens\nexport function getAuthorizationTokenUsingResourceTokens(\n resourceTokens: { [resourceId: string]: string },\n path: string,\n resourceId: string\n): string {\n if (resourceTokens && Object.keys(resourceTokens).length > 0) {\n // For database account access(through getDatabaseAccount API), path and resourceId are \"\",\n // so in this case we return the first token to be used for creating the auth header as the\n // service will accept any token in this case\n if (!path && !resourceId) {\n return resourceTokens[Object.keys(resourceTokens)[0]];\n }\n\n // If we have exact resource token for the path use it\n if (resourceId && resourceTokens[resourceId]) {\n return resourceTokens[resourceId];\n }\n\n // minimum valid path /dbs\n if (!path || path.length < 4) {\n // TODO: This should throw an error\n return null;\n }\n\n path = trimSlashFromLeftAndRight(path);\n const pathSegments = (path && path.split(\"/\")) || [];\n\n // Item path\n if (pathSegments.length === 6) {\n // Look for a container token matching the item path\n const containerPath = pathSegments.slice(0, 4).map(decodeURIComponent).join(\"/\");\n if (resourceTokens[containerPath]) {\n return resourceTokens[containerPath];\n }\n }\n\n // TODO remove in v4: This is legacy behavior that lets someone use a resource token pointing ONLY at an ID\n // It was used when _rid was exposed by the SDK, but now that we are using user provided ids it is not needed\n // However removing it now would be a breaking change\n // if it's an incomplete path like /dbs/db1/colls/, start from the parent resource\n let index = pathSegments.length % 2 === 0 ? pathSegments.length - 1 : pathSegments.length - 2;\n for (; index > 0; index -= 2) {\n const id = decodeURI(pathSegments[index]);\n if (resourceTokens[id]) {\n return resourceTokens[id];\n }\n }\n }\n\n // TODO: This should throw an error\n return null;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { createClientLogger, AzureLogger } from \"@azure/logger\";\n\n/**\n * The \\@azure/logger configuration for this package.\n */\nexport const defaultLogger: AzureLogger = createClientLogger(\"cosmosdb\");\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { setAuthorizationHeader } from \"../auth\";\nimport { Constants, HTTPMethod, jsonStringifyAndEscapeNonASCII, ResourceType } from \"../common\";\nimport { CosmosClientOptions } from \"../CosmosClientOptions\";\nimport { PartitionKey } from \"../documents\";\nimport { CosmosHeaders } from \"../queryExecutionContext\";\nimport { FeedOptions, RequestOptions } from \"./index\";\nimport { defaultLogger } from \"../common/logger\";\n// ----------------------------------------------------------------------------\n// Utility methods\n//\n\n/** @hidden */\nfunction javaScriptFriendlyJSONStringify(s: unknown): string {\n // two line terminators (Line separator and Paragraph separator) are not needed to be escaped in JSON\n // but are needed to be escaped in JavaScript.\n return JSON.stringify(s)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\n/** @hidden */\nexport function bodyFromData(data: Buffer | string | Record<string, unknown>): string {\n if (typeof data === \"object\") {\n return javaScriptFriendlyJSONStringify(data);\n }\n return data;\n}\n\n/**\n * @hidden\n */\ninterface GetHeadersOptions {\n clientOptions: CosmosClientOptions;\n defaultHeaders: CosmosHeaders;\n verb: HTTPMethod;\n path: string;\n resourceId: string;\n resourceType: ResourceType;\n options: RequestOptions & FeedOptions;\n partitionKeyRangeId?: string;\n useMultipleWriteLocations?: boolean;\n partitionKey?: PartitionKey;\n}\n\nconst JsonContentType = \"application/json\";\n\n/**\n * @hidden\n */\nexport async function getHeaders({\n clientOptions,\n defaultHeaders,\n verb,\n path,\n resourceId,\n resourceType,\n options = {},\n partitionKeyRangeId,\n useMultipleWriteLocations,\n partitionKey,\n}: GetHeadersOptions): Promise<CosmosHeaders> {\n const headers: CosmosHeaders = {\n [Constants.HttpHeaders.ResponseContinuationTokenLimitInKB]: 1,\n [Constants.HttpHeaders.EnableCrossPartitionQuery]: true,\n ...defaultHeaders,\n };\n\n if (useMultipleWriteLocations) {\n headers[Constants.HttpHeaders.ALLOW_MULTIPLE_WRITES] = true;\n }\n\n if (options.continuationTokenLimitInKB) {\n headers[Constants.HttpHeaders.ResponseContinuationTokenLimitInKB] =\n options.continuationTokenLimitInKB;\n }\n if (options.continuationToken) {\n headers[Constants.HttpHeaders.Continuation] = options.continuationToken;\n } else if (options.continuation) {\n headers[Constants.HttpHeaders.Continuation] = options.continuation;\n }\n\n if (options.preTriggerInclude) {\n headers[Constants.HttpHeaders.PreTriggerInclude] =\n options.preTriggerInclude.constructor === Array\n ? (options.preTriggerInclude as string[]).join(\",\")\n : (options.preTriggerInclude as string);\n }\n\n if (options.postTriggerInclude) {\n headers[Constants.HttpHeaders.PostTriggerInclude] =\n options.postTriggerInclude.constructor === Array\n ? (options.postTriggerInclude as string[]).join(\",\")\n : (options.postTriggerInclude as string);\n }\n\n if (options.offerType) {\n headers[Constants.HttpHeaders.OfferType] = options.offerType;\n }\n\n if (options.offerThroughput) {\n headers[Constants.HttpHeaders.OfferThroughput] = options.offerThroughput;\n }\n\n if (options.maxItemCount) {\n headers[Constants.HttpHeaders.PageSize] = options.maxItemCount;\n }\n\n if (options.accessCondition) {\n if (options.accessCondition.type === \"IfMatch\") {\n headers[Constants.HttpHeaders.IfMatch] = options.accessCondition.condition;\n } else {\n headers[Constants.HttpHeaders.IfNoneMatch] = options.accessCondition.condition;\n }\n }\n\n if (options.useIncrementalFeed) {\n headers[Constants.HttpHeaders.A_IM] = \"Incremental Feed\";\n }\n\n if (options.indexingDirective) {\n headers[Constants.HttpHeaders.IndexingDirective] = options.indexingDirective;\n }\n\n if (options.consistencyLevel) {\n headers[Constants.HttpHeaders.ConsistencyLevel] = options.consistencyLevel;\n }\n\n if (options.maxIntegratedCacheStalenessInMs && resourceType === ResourceType.item) {\n if (typeof options.maxIntegratedCacheStalenessInMs === \"number\") {\n headers[Constants.HttpHeaders.DedicatedGatewayPerRequestCacheStaleness] =\n options.maxIntegratedCacheStalenessInMs.toString();\n } else {\n defaultLogger.error(\n `RangeError: maxIntegratedCacheStalenessInMs \"${options.maxIntegratedCacheStalenessInMs}\" is not a valid parameter.`\n );\n headers[Constants.HttpHeaders.DedicatedGatewayPerRequestCacheStaleness] = \"null\";\n }\n }\n\n if (options.resourceTokenExpirySeconds) {\n headers[Constants.HttpHeaders.ResourceTokenExpiry] = options.resourceTokenExpirySeconds;\n }\n\n if (options.sessionToken) {\n headers[Constants.HttpHeaders.SessionToken] = options.sessionToken;\n }\n\n if (options.enableScanInQuery) {\n headers[Constants.HttpHeaders.EnableScanInQuery] = options.enableScanInQuery;\n }\n\n if (options.populateQuotaInfo) {\n headers[Constants.HttpHeaders.PopulateQuotaInfo] = options.populateQuotaInfo;\n }\n\n if (options.populateQueryMetrics) {\n headers[Constants.HttpHeaders.PopulateQueryMetrics] = options.populateQueryMetrics;\n }\n\n if (options.maxDegreeOfParallelism !== undefined) {\n headers[Constants.HttpHeaders.ParallelizeCrossPartitionQuery] = true;\n }\n\n if (options.populateQuotaInfo) {\n headers[Constants.HttpHeaders.PopulateQuotaInfo] = true;\n }\n\n if (partitionKey !== undefined && !headers[Constants.HttpHeaders.PartitionKey]) {\n if (partitionKey === null || !Array.isArray(partitionKey)) {\n partitionKey = [partitionKey as string];\n }\n headers[Constants.HttpHeaders.PartitionKey] = jsonStringifyAndEscapeNonASCII(partitionKey);\n }\n\n if (clientOptions.key || clientOptions.tokenProvider) {\n headers[Constants.HttpHeaders.XDate] = new Date().toUTCString();\n }\n\n if (verb === HTTPMethod.post || verb === HTTPMethod.put) {\n if (!headers[Constants.HttpHeaders.ContentType]) {\n headers[Constants.HttpHeaders.ContentType] = JsonContentType;\n }\n }\n\n if (!headers[Constants.HttpHeaders.Accept]) {\n headers[Constants.HttpHeaders.Accept] = JsonContentType;\n }\n\n if (partitionKeyRangeId !== undefined) {\n headers[Constants.HttpHeaders.PartitionKeyRangeID] = partitionKeyRangeId;\n }\n\n if (options.enableScriptLogging) {\n headers[Constants.HttpHeaders.EnableScriptLogging] = options.enableScriptLogging;\n }\n\n if (options.disableRUPerMinuteUsage) {\n headers[Constants.HttpHeaders.DisableRUPerMinuteUsage] = true;\n }\n\n if (\n clientOptions.key ||\n clientOptions.resourceTokens ||\n clientOptions.tokenProvider ||\n clientOptions.permissionFeed\n ) {\n await setAuthorizationHeader(clientOptions, verb, path, resourceId, resourceType, headers);\n }\n return headers;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { JSONObject } from \"../queryExecutionContext\";\nimport { extractPartitionKey } from \"../extractPartitionKey\";\nimport { PartitionKeyDefinition } from \"../documents\";\nimport { RequestOptions } from \"..\";\nimport { PatchRequestBody } from \"./patch\";\nimport { v4 } from \"uuid\";\nimport { bodyFromData } from \"../request/request\";\nimport { Constants } from \"../common/constants\";\nconst uuid = v4;\n\nexport type Operation =\n | CreateOperation\n | UpsertOperation\n | ReadOperation\n | DeleteOperation\n | ReplaceOperation\n | BulkPatchOperation;\n\nexport interface Batch {\n min: string;\n max: string;\n rangeId: string;\n indexes: number[];\n operations: Operation[];\n}\n\nexport interface OperationResponse {\n statusCode: number;\n requestCharge: number;\n eTag?: string;\n resourceBody?: JSONObject;\n}\n\n/**\n * Options object used to modify bulk execution.\n * continueOnError (Default value: false) - Continues bulk execution when an operation fails ** NOTE THIS WILL DEFAULT TO TRUE IN the 4.0 RELEASE\n */\nexport interface BulkOptions {\n continueOnError?: boolean;\n}\n\nexport function isKeyInRange(min: string, max: string, key: string): boolean {\n const isAfterMinInclusive = key.localeCompare(min) >= 0;\n const isBeforeMax = key.localeCompare(max) < 0;\n return isAfterMinInclusive && isBeforeMax;\n}\n\nexport interface OperationBase {\n partitionKey?: string;\n ifMatch?: string;\n ifNoneMatch?: string;\n}\n\nexport const BulkOperationType = {\n Create: \"Create\",\n Upsert: \"Upsert\",\n Read: \"Read\",\n Delete: \"Delete\",\n Replace: \"Replace\",\n Patch: \"Patch\",\n} as const;\n\nexport type OperationInput =\n | CreateOperationInput\n | UpsertOperationInput\n | ReadOperationInput\n | DeleteOperationInput\n | ReplaceOperationInput\n | PatchOperationInput;\n\nexport interface CreateOperationInput {\n partitionKey?: string | number | null | Record<string, unknown> | undefined;\n ifMatch?: string;\n ifNoneMatch?: string;\n operationType: typeof BulkOperationType.Create;\n resourceBody: JSONObject;\n}\n\nexport interface UpsertOperationInput {\n partitionKey?: string | number | null | Record<string, unknown> | undefined;\n ifMatch?: string;\n ifNoneMatch?: string;\n operationType: typeof BulkOperationType.Upsert;\n resourceBody: JSONObject;\n}\n\nexport interface ReadOperationInput {\n partitionKey?: string | number | boolean | null | Record<string, unknown> | undefined;\n operationType: typeof BulkOperationType.Read;\n id: string;\n}\n\nexport interface DeleteOperationInput {\n partitionKey?: string | number | null | Record<string, unknown> | undefined;\n operationType: typeof BulkOperationType.Delete;\n id: string;\n}\n\nexport interface ReplaceOperationInput {\n partitionKey?: string | number | null | Record<string, unknown> | undefined;\n ifMatch?: string;\n ifNoneMatch?: string;\n operationType: typeof BulkOperationType.Replace;\n resourceBody: JSONObject;\n id: string;\n}\n\nexport interface PatchOperationInput {\n partitionKey?: string | number | null | Record<string, unknown> | undefined;\n ifMatch?: string;\n ifNoneMatch?: string;\n operationType: typeof BulkOperationType.Patch;\n resourceBody: PatchRequestBody;\n id: string;\n}\n\nexport type OperationWithItem = OperationBase & {\n resourceBody: JSONObject;\n};\n\nexport type CreateOperation = OperationWithItem & {\n operationType: typeof BulkOperationType.Create;\n};\n\nexport type UpsertOperation = OperationWithItem & {\n operationType: typeof BulkOperationType.Upsert;\n};\n\nexport type ReadOperation = OperationBase & {\n operationType: typeof BulkOperationType.Read;\n id: string;\n};\n\nexport type DeleteOperation = OperationBase & {\n operationType: typeof BulkOperationType.Delete;\n id: string;\n};\n\nexport type ReplaceOperation = OperationWithItem & {\n operationType: typeof BulkOperationType.Replace;\n id: string;\n};\n\nexport type BulkPatchOperation = OperationBase & {\n operationType: typeof BulkOperationType.Patch;\n id: string;\n};\n\nexport function hasResource(\n operation: Operation\n): operation is CreateOperation | UpsertOperation | ReplaceOperation {\n return (\n operation.operationType !== \"Patch\" &&\n (operation as OperationWithItem).resourceBody !== undefined\n );\n}\n\nexport function getPartitionKeyToHash(operation: Operation, partitionProperty: string): any {\n const toHashKey = hasResource(operation)\n ? deepFind(operation.resourceBody, partitionProperty)\n : (operation.partitionKey && operation.partitionKey.replace(/[[\\]\"']/g, \"\")) ||\n operation.partitionKey;\n // We check for empty object since replace will stringify the value\n // The second check avoids cases where the partitionKey value is actually the string '{}'\n if (toHashKey === \"{}\" && operation.partitionKey === \"[{}]\") {\n return {};\n }\n if (toHashKey === \"null\" && operation.partitionKey === \"[null]\") {\n return null;\n }\n if (toHashKey === \"0\" && operation.partitionKey === \"[0]\") {\n return 0;\n }\n return toHashKey;\n}\n\nexport function decorateOperation(\n operation: OperationInput,\n definition: PartitionKeyDefinition,\n options: RequestOptions = {}\n): Operation {\n if (\n operation.operationType === BulkOperationType.Create ||\n operation.operationType === BulkOperationType.Upsert\n ) {\n if (\n (operation.resourceBody.id === undefined || operation.resourceBody.id === \"\") &&\n !options.disableAutomaticIdGeneration\n ) {\n operation.resourceBody.id = uuid();\n }\n }\n if (\"partitionKey\" in operation) {\n const extracted = extractPartitionKey(operation, { paths: [\"/partitionKey\"] });\n return { ...operation, partitionKey: JSON.stringify(extracted) } as Operation;\n } else if (\n operation.operationType === BulkOperationType.Create ||\n operation.operationType === BulkOperationType.Replace ||\n operation.operationType === BulkOperationType.Upsert\n ) {\n const pk = extractPartitionKey(operation.resourceBody, definition);\n return { ...operation, partitionKey: JSON.stringify(pk) } as Operation;\n } else if (\n operation.operationType === BulkOperationType.Read ||\n operation.operationType === BulkOperationType.Delete\n ) {\n return { ...operation, partitionKey: \"[{}]\" };\n }\n return operation as Operation;\n}\n\n/**\n * Splits a batch into array of batches based on cumulative size of its operations by making sure\n * cumulative size of an individual batch is not larger than {@link Constants.DefaultMaxBulkRequestBodySizeInBytes}.\n * If a single operation itself is larger than {@link Constants.DefaultMaxBulkRequestBodySizeInBytes}, that\n * operation would be moved into a batch containing only that operation.\n * @param originalBatch - A batch of operations needed to be checked.\n * @returns\n * @hidden\n */\nexport function splitBatchBasedOnBodySize(originalBatch: Batch): Batch[] {\n if (originalBatch?.operations === undefined || originalBatch.operations.length < 1) return [];\n let currentBatchSize = calculateObjectSizeInBytes(originalBatch.operations[0]);\n let currentBatch: Batch = {\n ...originalBatch,\n operations: [originalBatch.operations[0]],\n indexes: [originalBatch.indexes[0]],\n };\n const processedBatches: Batch[] = [];\n processedBatches.push(currentBatch);\n\n for (let index = 1; index < originalBatch.operations.length; index++) {\n const operation = originalBatch.operations[index];\n const currentOpSize = calculateObjectSizeInBytes(operation);\n if (currentBatchSize + currentOpSize > Constants.DefaultMaxBulkRequestBodySizeInBytes) {\n currentBatch = {\n ...originalBatch,\n operations: [],\n indexes: [],\n };\n processedBatches.push(currentBatch);\n currentBatchSize = 0;\n }\n currentBatch.operations.push(operation);\n currentBatch.indexes.push(originalBatch.indexes[index]);\n currentBatchSize += currentOpSize;\n }\n return processedBatches;\n}\n\n/**\n * Calculates size of an JSON object in bytes with utf-8 encoding.\n * @hidden\n */\nexport function calculateObjectSizeInBytes(obj: unknown): number {\n return new TextEncoder().encode(bodyFromData(obj as any)).length;\n}\n\nexport function decorateBatchOperation(\n operation: OperationInput,\n options: RequestOptions = {}\n): Operation {\n if (\n operation.operationType === BulkOperationType.Create ||\n operation.operationType === BulkOperationType.Upsert\n ) {\n if (\n (operation.resourceBody.id === undefined || operation.resourceBody.id === \"\") &&\n !options.disableAutomaticIdGeneration\n ) {\n operation.resourceBody.id = uuid();\n }\n }\n return operation as Operation;\n}\n/**\n * Util function for finding partition key values nested in objects at slash (/) separated paths\n * @hidden\n */\nexport function deepFind<T, P extends string>(document: T, path: P): string | JSONObject {\n const apath = path.split(\"/\");\n let h: any = document;\n for (const p of apath) {\n if (p in h) h = h[p];\n else {\n if (p !== \"_partitionKey\") {\n console.warn(`Partition key not found, using undefined: ${path} at ${p}`);\n }\n return \"{}\";\n }\n }\n return h;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport type PatchOperation = ExistingKeyOperation | RemoveOperation;\n\nexport const PatchOperationType = {\n add: \"add\",\n replace: \"replace\",\n remove: \"remove\",\n set: \"set\",\n incr: \"incr\",\n} as const;\n\nexport type ExistingKeyOperation = {\n op: keyof typeof PatchOperationType;\n value: any;\n path: string;\n};\n\nexport type RemoveOperation = {\n op: \"remove\";\n path: string;\n};\n\nexport type PatchRequestBody =\n | {\n operations: PatchOperation[];\n condition?: string;\n }\n | PatchOperation[];\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/** Determines the connection behavior of the CosmosClient. Note, we currently only support Gateway Mode. */\nexport enum ConnectionMode {\n /** Gateway mode talks to an intermediate gateway which handles the direct communication with your individual partitions. */\n Gateway = 0,\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { RetryOptions } from \"../retry/retryOptions\";\nimport { ConnectionMode } from \"./ConnectionMode\";\n/**\n * Represents the Connection policy associated with a CosmosClient in the Azure Cosmos DB database service.\n */\nexport interface ConnectionPolicy {\n /** Determines which mode to connect to Cosmos with. (Currently only supports Gateway option) */\n connectionMode?: ConnectionMode;\n /** Request timeout (time to wait for response from network peer). Represented in milliseconds. */\n requestTimeout?: number;\n /**\n * Flag to enable/disable automatic redirecting of requests based on read/write operations. Default true.\n * Required to call client.dispose() when this is set to true after destroying the CosmosClient inside another process or in the browser.\n */\n enableEndpointDiscovery?: boolean;\n /** List of azure regions to be used as preferred locations for read requests. */\n preferredLocations?: string[];\n /** RetryOptions object which defines several configurable properties used during retry. */\n retryOptions?: RetryOptions;\n /**\n * The flag that enables writes on any locations (regions) for geo-replicated database accounts in the Azure Cosmos DB service.\n * Default is `false`.\n */\n useMultipleWriteLocations?: boolean;\n /** Rate in milliseconds at which the client will refresh the endpoints list in the background */\n endpointRefreshRateInMs?: number;\n /** Flag to enable/disable background refreshing of endpoints. Defaults to false.\n * Endpoint discovery using `enableEndpointsDiscovery` will still work for failed requests. */\n enableBackgroundEndpointRefreshing?: boolean;\n}\n\n/**\n * @hidden\n */\nexport const defaultConnectionPolicy: ConnectionPolicy = Object.freeze({\n connectionMode: ConnectionMode.Gateway,\n requestTimeout: 60000,\n enableEndpointDiscovery: true,\n preferredLocations: [],\n retryOptions: {\n maxRetryAttemptCount: 9,\n fixedRetryIntervalInMilliseconds: 0,\n maxWaitTimeInSeconds: 30,\n },\n useMultipleWriteLocations: true,\n endpointRefreshRateInMs: 300000,\n enableBackgroundEndpointRefreshing: true,\n});\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Represents the consistency levels supported for Azure Cosmos DB client operations.<br>\n * The requested ConsistencyLevel must match or be weaker than that provisioned for the database account.\n * Consistency levels.\n *\n * Consistency levels by order of strength are Strong, BoundedStaleness, Session, Consistent Prefix, and Eventual.\n *\n * See https://aka.ms/cosmos-consistency for more detailed documentation on Consistency Levels.\n */\nexport enum ConsistencyLevel {\n /**\n * Strong Consistency guarantees that read operations always return the value that was last written.\n */\n Strong = \"Strong\",\n /**\n * Bounded Staleness guarantees that reads are not too out-of-date.\n * This can be configured based on number of operations (MaxStalenessPrefix) or time (MaxStalenessIntervalInSeconds).\n */\n BoundedStaleness = \"BoundedStaleness\",\n /**\n * Session Consistency guarantees monotonic reads (you never read old data, then new, then old again),\n * monotonic writes (writes are ordered) and read your writes (your writes are immediately visible to your reads)\n * within any single session.\n */\n Session = \"Session\",\n /**\n * Eventual Consistency guarantees that reads will return a subset of writes.\n * All writes will be eventually be available for reads.\n */\n Eventual = \"Eventual\",\n /**\n * ConsistentPrefix Consistency guarantees that reads will return some prefix of all writes with no gaps.\n * All writes will be eventually be available for reads.\n */\n ConsistentPrefix = \"ConsistentPrefix\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"../common\";\nimport { CosmosHeaders } from \"../queryExecutionContext\";\nimport { ConsistencyLevel } from \"./ConsistencyLevel\";\n\n/**\n * Represents a DatabaseAccount in the Azure Cosmos DB database service.\n */\nexport class DatabaseAccount {\n /** The list of writable locations for a geo-replicated database account. */\n public readonly writableLocations: Location[] = [];\n /** The list of readable locations for a geo-replicated database account. */\n public readonly readableLocations: Location[] = [];\n /**\n * The self-link for Databases in the databaseAccount.\n * @deprecated Use `databasesLink`\n */\n public get DatabasesLink(): string {\n return this.databasesLink;\n }\n /** The self-link for Databases in the databaseAccount. */\n public readonly databasesLink: string;\n /**\n * The self-link for Media in the databaseAccount.\n * @deprecated Use `mediaLink`\n */\n public get MediaLink(): string {\n return this.mediaLink;\n }\n /** The self-link for Media in the databaseAccount. */\n public readonly mediaLink: string;\n /**\n * Attachment content (media) storage quota in MBs ( Retrieved from gateway ).\n * @deprecated use `maxMediaStorageUsageInMB`\n */\n public get MaxMediaStorageUsageInMB(): number {\n return this.maxMediaStorageUsageInMB;\n }\n /** Attachment content (media) storage quota in MBs ( Retrieved from gateway ). */\n public readonly maxMediaStorageUsageInMB: number;\n /**\n * Current attachment content (media) usage in MBs (Retrieved from gateway )\n *\n * Value is returned from cached information updated periodically and is not guaranteed\n * to be real time.\n *\n * @deprecated use `currentMediaStorageUsageInMB`\n */\n public get CurrentMediaStorageUsageInMB(): number {\n return this.currentMediaStorageUsageInMB;\n }\n /**\n * Current attachment content (media) usage in MBs (Retrieved from gateway )\n *\n * Value is returned from cached information updated periodically and is not guaranteed\n * to be real time.\n */\n public readonly currentMediaStorageUsageInMB: number;\n /**\n * Gets the UserConsistencyPolicy settings.\n * @deprecated use `consistencyPolicy`\n */\n public get ConsistencyPolicy(): ConsistencyLevel {\n return this.consistencyPolicy;\n }\n /** Gets the UserConsistencyPolicy settings. */\n public readonly consistencyPolicy: ConsistencyLevel;\n public readonly enableMultipleWritableLocations: boolean;\n\n // TODO: body - any\n public constructor(body: { [key: string]: any }, headers: CosmosHeaders) {\n this.databasesLink = \"/dbs/\";\n this.mediaLink = \"/media/\";\n this.maxMediaStorageUsageInMB = headers[Constants.HttpHeaders.MaxMediaStorageUsageInMB];\n this.currentMediaStorageUsageInMB = headers[Constants.HttpHeaders.CurrentMediaStorageUsageInMB];\n this.consistencyPolicy = body.userConsistencyPolicy\n ? (body.userConsistencyPolicy.defaultConsistencyLevel as ConsistencyLevel)\n : ConsistencyLevel.Session;\n if (body[Constants.WritableLocations] && body.id !== \"localhost\") {\n this.writableLocations = body[Constants.WritableLocations] as Location[];\n }\n if (body[Constants.ReadableLocations] && body.id !== \"localhost\") {\n this.readableLocations = body[Constants.ReadableLocations] as Location[];\n }\n if (body[Constants.ENABLE_MULTIPLE_WRITABLE_LOCATIONS]) {\n this.enableMultipleWritableLocations =\n body[Constants.ENABLE_MULTIPLE_WRITABLE_LOCATIONS] === true ||\n body[Constants.ENABLE_MULTIPLE_WRITABLE_LOCATIONS] === \"true\";\n }\n }\n}\n\n/**\n * Used to specify the locations that are available, read is index 1 and write is index 0.\n */\nexport interface Location {\n name: string;\n databaseAccountEndpoint: string;\n unavailable?: boolean;\n lastUnavailabilityTimestampInMs?: number;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/** Defines a target data type of an index path specification in the Azure Cosmos DB service. */\nexport enum DataType {\n /** Represents a numeric data type. */\n Number = \"Number\",\n /** Represents a string data type. */\n String = \"String\",\n /** Represents a point data type. */\n Point = \"Point\",\n /** Represents a line string data type. */\n LineString = \"LineString\",\n /** Represents a polygon data type. */\n Polygon = \"Polygon\",\n /** Represents a multi-polygon data type. */\n MultiPolygon = \"MultiPolygon\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Specifies the supported indexing modes.\n */\nexport enum IndexingMode {\n /**\n * Index is updated synchronously with a create or update operation.\n *\n * With consistent indexing, query behavior is the same as the default consistency level for the container.\n * The index is always kept up to date with the data.\n */\n consistent = \"consistent\",\n /**\n * Index is updated asynchronously with respect to a create or update operation.\n *\n * With lazy indexing, queries are eventually consistent. The index is updated when the container is idle.\n */\n lazy = \"lazy\",\n /** No Index is provided. */\n none = \"none\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { DataType, IndexingMode, IndexKind } from \"./index\";\n\nexport interface IndexingPolicy {\n /** The indexing mode (consistent or lazy) {@link IndexingMode}. */\n indexingMode?: keyof typeof IndexingMode;\n automatic?: boolean;\n /** An array of {@link IncludedPath} represents the paths to be included for indexing. */\n includedPaths?: IndexedPath[];\n /** An array of {@link IncludedPath} represents the paths to be excluded for indexing. */\n excludedPaths?: IndexedPath[];\n spatialIndexes?: SpatialIndex[];\n}\n\n/* The target data type of a spatial path */\nexport enum SpatialType {\n LineString = \"LineString\",\n MultiPolygon = \"MultiPolygon\",\n Point = \"Point\",\n Polygon = \"Polygon\",\n}\n\nexport interface SpatialIndex {\n /* Path in JSON document to index */\n path: string;\n types: SpatialType[];\n /* Bounding box for geometry spatial path */\n boundingBox: {\n /* X-coordinate of the lower-left corner of the bounding box. */\n xmin: number;\n /* Y-coordinate of the lower-left corner of the bounding box. */\n ymin: number;\n /* X-coordinate of the upper-right corner of the bounding box. */\n xmax: number;\n /* Y-coordinate of the upper-right corner of the bounding box. */\n ymax: number;\n };\n}\n\nexport interface IndexedPath {\n path: string;\n indexes?: Index[];\n}\n\nexport interface Index {\n kind: keyof typeof IndexKind;\n dataType: keyof typeof DataType;\n precision?: number;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Specifies the supported Index types.\n */\nexport enum IndexKind {\n /**\n * This is supplied for a path which requires sorting.\n */\n Range = \"Range\",\n /**\n * This is supplied for a path which requires geospatial indexing.\n */\n Spatial = \"Spatial\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Enum for permission mode values.\n */\nexport enum PermissionMode {\n /** Permission not valid. */\n None = \"none\",\n /** Permission applicable for read operations only. */\n Read = \"read\",\n /** Permission applicable for all operations. */\n All = \"all\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Enum for trigger operation values.\n * specifies the operations on which a trigger should be executed.\n */\nexport enum TriggerOperation {\n /** All operations. */\n All = \"all\",\n /** Create operations only. */\n Create = \"create\",\n /** Update operations only. */\n Update = \"update\",\n /** Delete operations only. */\n Delete = \"delete\",\n /** Replace operations only. */\n Replace = \"replace\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Enum for trigger type values.\n * Specifies the type of the trigger.\n */\nexport enum TriggerType {\n /** Trigger should be executed before the associated operation(s). */\n Pre = \"pre\",\n /** Trigger should be executed after the associated operation(s). */\n Post = \"post\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Enum for udf type values.\n * Specifies the types of user defined functions.\n */\nexport enum UserDefinedFunctionType {\n /** The User Defined Function is written in JavaScript. This is currently the only option. */\n Javascript = \"Javascript\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport enum GeospatialType {\n /** Represents data in round-earth coordinate system. */\n Geography = \"Geography\",\n /** Represents data in Eucledian(flat) coordinate system. */\n Geometry = \"Geometry\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../index\";\n\nexport interface ErrorBody {\n code: string;\n message: string;\n /**\n * @hidden\n */\n additionalErrorInfo?: PartitionedQueryExecutionInfo;\n}\n\n/**\n * @hidden\n */\nexport interface PartitionedQueryExecutionInfo {\n partitionedQueryExecutionInfoVersion: number;\n queryInfo: QueryInfo;\n queryRanges: QueryRange[];\n}\n\n/**\n * @hidden\n */\nexport interface QueryRange {\n min: string;\n max: string;\n isMinInclusive: boolean;\n isMaxInclusive: boolean;\n}\n\n/**\n * @hidden\n */\nexport interface QueryInfo {\n top?: any;\n orderBy?: any[];\n orderByExpressions?: any[];\n offset?: number;\n limit?: number;\n aggregates?: AggregateType[];\n groupByExpressions?: GroupByExpressions;\n groupByAliasToAggregateType: GroupByAliasToAggregateType;\n rewrittenQuery?: any;\n distinctType: string;\n hasSelectValue: boolean;\n}\n\nexport type GroupByExpressions = string[];\n\nexport type AggregateType = \"Average\" | \"Count\" | \"Max\" | \"Min\" | \"Sum\";\n\nexport interface GroupByAliasToAggregateType {\n [key: string]: AggregateType;\n}\n\nexport class ErrorResponse extends Error {\n code?: number;\n substatus?: number;\n body?: ErrorBody;\n headers?: CosmosHeaders;\n activityId?: string;\n retryAfterInMs?: number;\n retryAfterInMilliseconds?: number;\n [key: string]: any;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"../common\";\nimport { CosmosHeaders } from \"../queryExecutionContext/CosmosHeaders\";\nimport { StatusCode, SubStatusCode } from \"./StatusCodes\";\n\nexport class ResourceResponse<TResource> {\n constructor(\n public readonly resource: TResource | undefined,\n public readonly headers: CosmosHeaders,\n public readonly statusCode: StatusCode,\n public readonly substatus?: SubStatusCode\n ) {}\n public get requestCharge(): number {\n return Number(this.headers[Constants.HttpHeaders.RequestCharge]) || 0;\n }\n public get activityId(): string {\n return this.headers[Constants.HttpHeaders.ActivityId] as string;\n }\n public get etag(): string {\n return this.headers[Constants.HttpHeaders.ETag] as string;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"../common\";\nimport { CosmosHeaders } from \"../queryExecutionContext\";\n\nexport class FeedResponse<TResource> {\n constructor(\n public readonly resources: TResource[],\n private readonly headers: CosmosHeaders,\n public readonly hasMoreResults: boolean\n ) {}\n public get continuation(): string {\n return this.continuationToken;\n }\n public get continuationToken(): string {\n return this.headers[Constants.HttpHeaders.Continuation];\n }\n public get queryMetrics(): string {\n return this.headers[Constants.HttpHeaders.QueryMetrics];\n }\n public get requestCharge(): number {\n return this.headers[Constants.HttpHeaders.RequestCharge];\n }\n public get activityId(): string {\n return this.headers[Constants.HttpHeaders.ActivityId];\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * @hidden\n */\nexport const TimeoutErrorCode = \"TimeoutError\";\n\nexport class TimeoutError extends Error {\n public readonly code: string = TimeoutErrorCode;\n constructor(message: string = \"Timeout Error\") {\n super(message);\n this.name = TimeoutErrorCode;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport class ClientSideMetrics {\n constructor(public readonly requestCharge: number) {}\n\n /**\n * Adds one or more ClientSideMetrics to a copy of this instance and returns the result.\n */\n public add(...clientSideMetricsArray: ClientSideMetrics[]): ClientSideMetrics {\n let requestCharge = this.requestCharge;\n for (const clientSideMetrics of clientSideMetricsArray) {\n if (clientSideMetrics == null) {\n throw new Error(\"clientSideMetrics has null or undefined item(s)\");\n }\n\n requestCharge += clientSideMetrics.requestCharge;\n }\n\n return new ClientSideMetrics(requestCharge);\n }\n\n public static readonly zero = new ClientSideMetrics(0);\n\n public static createFromArray(...clientSideMetricsArray: ClientSideMetrics[]): ClientSideMetrics {\n if (clientSideMetricsArray == null) {\n throw new Error(\"clientSideMetricsArray is null or undefined item(s)\");\n }\n\n return this.zero.add(...clientSideMetricsArray);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport default {\n // QueryMetrics\n RetrievedDocumentCount: \"retrievedDocumentCount\",\n RetrievedDocumentSize: \"retrievedDocumentSize\",\n OutputDocumentCount: \"outputDocumentCount\",\n OutputDocumentSize: \"outputDocumentSize\",\n IndexHitRatio: \"indexUtilizationRatio\",\n IndexHitDocumentCount: \"indexHitDocumentCount\",\n TotalQueryExecutionTimeInMs: \"totalExecutionTimeInMs\",\n\n // QueryPreparationTimes\n QueryCompileTimeInMs: \"queryCompileTimeInMs\",\n LogicalPlanBuildTimeInMs: \"queryLogicalPlanBuildTimeInMs\",\n PhysicalPlanBuildTimeInMs: \"queryPhysicalPlanBuildTimeInMs\",\n QueryOptimizationTimeInMs: \"queryOptimizationTimeInMs\",\n\n // QueryTimes\n IndexLookupTimeInMs: \"indexLookupTimeInMs\",\n DocumentLoadTimeInMs: \"documentLoadTimeInMs\",\n VMExecutionTimeInMs: \"VMExecutionTimeInMs\",\n DocumentWriteTimeInMs: \"writeOutputTimeInMs\",\n\n // RuntimeExecutionTimes\n QueryEngineTimes: \"queryEngineTimes\",\n SystemFunctionExecuteTimeInMs: \"systemFunctionExecuteTimeInMs\",\n UserDefinedFunctionExecutionTimeInMs: \"userFunctionExecuteTimeInMs\",\n\n // QueryMetrics Text\n RetrievedDocumentCountText: \"Retrieved Document Count\",\n RetrievedDocumentSizeText: \"Retrieved Document Size\",\n OutputDocumentCountText: \"Output Document Count\",\n OutputDocumentSizeText: \"Output Document Size\",\n IndexUtilizationText: \"Index Utilization\",\n TotalQueryExecutionTimeText: \"Total Query Execution Time\",\n\n // QueryPreparationTimes Text\n QueryPreparationTimesText: \"Query Preparation Times\",\n QueryCompileTimeText: \"Query Compilation Time\",\n LogicalPlanBuildTimeText: \"Logical Plan Build Time\",\n PhysicalPlanBuildTimeText: \"Physical Plan Build Time\",\n QueryOptimizationTimeText: \"Query Optimization Time\",\n\n // QueryTimes Text\n QueryEngineTimesText: \"Query Engine Times\",\n IndexLookupTimeText: \"Index Lookup Time\",\n DocumentLoadTimeText: \"Document Load Time\",\n WriteOutputTimeText: \"Document Write Time\",\n\n // RuntimeExecutionTimes Text\n RuntimeExecutionTimesText: \"Runtime Execution Times\",\n TotalExecutionTimeText: \"Query Engine Execution Time\",\n SystemFunctionExecuteTimeText: \"System Function Execution Time\",\n UserDefinedFunctionExecutionTimeText: \"User-defined Function Execution Time\",\n\n // ClientSideQueryMetrics Text\n ClientSideQueryMetricsText: \"Client Side Metrics\",\n RetriesText: \"Retry Count\",\n RequestChargeText: \"Request Charge\",\n FetchExecutionRangesText: \"Partition Execution Timeline\",\n SchedulingMetricsText: \"Scheduling Metrics\",\n};\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// Ported this implementation to javascript:\n// https://referencesource.microsoft.com/#mscorlib/system/timespan.cs,83e476c1ae112117\n/** @hidden */\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nconst ticksPerMillisecond = 10000;\n/** @hidden */\nconst millisecondsPerTick = 1.0 / ticksPerMillisecond;\n\n/** @hidden */\nconst ticksPerSecond = ticksPerMillisecond * 1000; // 10,000,000\n/** @hidden */\nconst secondsPerTick = 1.0 / ticksPerSecond; // 0.0001\n\n/** @hidden */\nconst ticksPerMinute = ticksPerSecond * 60; // 600,000,000\n/** @hidden */\nconst minutesPerTick = 1.0 / ticksPerMinute; // 1.6666666666667e-9\n\n/** @hidden */\nconst ticksPerHour = ticksPerMinute * 60; // 36,000,000,000\n/** @hidden */\nconst hoursPerTick = 1.0 / ticksPerHour; // 2.77777777777777778e-11\n\n/** @hidden */\nconst ticksPerDay = ticksPerHour * 24; // 864,000,000,000\n/** @hidden */\nconst daysPerTick = 1.0 / ticksPerDay; // 1.1574074074074074074e-12\n\n/** @hidden */\nconst millisPerSecond = 1000;\n/** @hidden */\nconst millisPerMinute = millisPerSecond * 60; // 60,000\n/** @hidden */\nconst millisPerHour = millisPerMinute * 60; // 3,600,000\n/** @hidden */\nconst millisPerDay = millisPerHour * 24; // 86,400,000\n\n/** @hidden */\nconst maxMilliSeconds = Number.MAX_SAFE_INTEGER / ticksPerMillisecond;\n/** @hidden */\nconst minMilliSeconds = Number.MIN_SAFE_INTEGER / ticksPerMillisecond;\n\n/**\n * Represents a time interval.\n *\n * @param days - Number of days.\n * @param hours - Number of hours.\n * @param minutes - Number of minutes.\n * @param seconds - Number of seconds.\n * @param milliseconds - Number of milliseconds.\n * @hidden\n */\nexport class TimeSpan {\n protected _ticks: number;\n constructor(days: number, hours: number, minutes: number, seconds: number, milliseconds: number) {\n // Constructor\n if (!Number.isInteger(days)) {\n throw new Error(\"days is not an integer\");\n }\n\n if (!Number.isInteger(hours)) {\n throw new Error(\"hours is not an integer\");\n }\n\n if (!Number.isInteger(minutes)) {\n throw new Error(\"minutes is not an integer\");\n }\n\n if (!Number.isInteger(seconds)) {\n throw new Error(\"seconds is not an integer\");\n }\n\n if (!Number.isInteger(milliseconds)) {\n throw new Error(\"milliseconds is not an integer\");\n }\n\n const totalMilliSeconds =\n (days * 3600 * 24 + hours * 3600 + minutes * 60 + seconds) * 1000 + milliseconds;\n if (totalMilliSeconds > maxMilliSeconds || totalMilliSeconds < minMilliSeconds) {\n throw new Error(\"Total number of milliseconds was either too large or too small\");\n }\n\n this._ticks = totalMilliSeconds * ticksPerMillisecond;\n }\n\n /**\n * Returns a new TimeSpan object whose value is the sum of the specified TimeSpan object and this instance.\n * @param ts - The time interval to add.\n */\n public add(ts: TimeSpan): TimeSpan {\n if (TimeSpan.additionDoesOverflow(this._ticks, ts._ticks)) {\n throw new Error(\"Adding the two timestamps causes an overflow.\");\n }\n\n const results = this._ticks + ts._ticks;\n return TimeSpan.fromTicks(results);\n }\n\n /**\n * Returns a new TimeSpan object whose value is the difference of the specified TimeSpan object and this instance.\n * @param ts - The time interval to subtract.\n */\n public subtract(ts: TimeSpan): TimeSpan {\n if (TimeSpan.subtractionDoesUnderflow(this._ticks, ts._ticks)) {\n throw new Error(\"Subtracting the two timestamps causes an underflow.\");\n }\n\n const results = this._ticks - ts._ticks;\n return TimeSpan.fromTicks(results);\n }\n\n /**\n * Compares this instance to a specified object and returns an integer that indicates whether this\n * instance is shorter than, equal to, or longer than the specified object.\n * @param value - The time interval to add.\n */\n public compareTo(value: TimeSpan): 1 | -1 | 0 {\n if (value == null) {\n return 1;\n }\n\n if (!TimeSpan.isTimeSpan(value)) {\n throw new Error(\"Argument must be a TimeSpan object\");\n }\n\n return TimeSpan.compare(this, value);\n }\n\n /**\n * Returns a new TimeSpan object whose value is the absolute value of the current TimeSpan object.\n */\n public duration(): TimeSpan {\n return TimeSpan.fromTicks(this._ticks >= 0 ? this._ticks : -this._ticks);\n }\n\n /**\n * Returns a value indicating whether this instance is equal to a specified object.\n * @param value - The time interval to check for equality.\n */\n public equals(value: TimeSpan): boolean {\n if (TimeSpan.isTimeSpan(value)) {\n return this._ticks === value._ticks;\n }\n\n return false;\n }\n\n /**\n * Returns a new TimeSpan object whose value is the negated value of this instance.\n * @param value - The time interval to check for equality.\n */\n public negate(): TimeSpan {\n return TimeSpan.fromTicks(-this._ticks);\n }\n\n public days(): number {\n return Math.floor(this._ticks / ticksPerDay);\n }\n\n public hours(): number {\n return Math.floor(this._ticks / ticksPerHour);\n }\n\n public milliseconds(): number {\n return Math.floor(this._ticks / ticksPerMillisecond);\n }\n\n public seconds(): number {\n return Math.floor(this._ticks / ticksPerSecond);\n }\n\n public ticks(): number {\n return this._ticks;\n }\n\n public totalDays(): number {\n return this._ticks * daysPerTick;\n }\n public totalHours(): number {\n return this._ticks * hoursPerTick;\n }\n\n public totalMilliseconds(): number {\n return this._ticks * millisecondsPerTick;\n }\n\n public totalMinutes(): number {\n return this._ticks * minutesPerTick;\n }\n\n public totalSeconds(): number {\n return this._ticks * secondsPerTick;\n }\n\n public static fromTicks(value: number): TimeSpan {\n const timeSpan = new TimeSpan(0, 0, 0, 0, 0);\n timeSpan._ticks = value;\n return timeSpan;\n }\n\n public static readonly zero = new TimeSpan(0, 0, 0, 0, 0);\n public static readonly maxValue = TimeSpan.fromTicks(Number.MAX_SAFE_INTEGER);\n public static readonly minValue = TimeSpan.fromTicks(Number.MIN_SAFE_INTEGER);\n\n public static isTimeSpan(timespan: TimeSpan): number {\n return timespan._ticks;\n }\n\n public static additionDoesOverflow(a: number, b: number): boolean {\n const c = a + b;\n return a !== c - b || b !== c - a;\n }\n\n public static subtractionDoesUnderflow(a: number, b: number): boolean {\n const c = a - b;\n return a !== c + b || b !== a - c;\n }\n\n public static compare(t1: TimeSpan, t2: TimeSpan): 1 | 0 | -1 {\n if (t1._ticks > t2._ticks) {\n return 1;\n }\n if (t1._ticks < t2._ticks) {\n return -1;\n }\n return 0;\n }\n\n public static interval(value: number, scale: number): TimeSpan {\n if (isNaN(value)) {\n throw new Error(\"value must be a number\");\n }\n\n const milliseconds = value * scale;\n if (milliseconds > maxMilliSeconds || milliseconds < minMilliSeconds) {\n throw new Error(\"timespan too long\");\n }\n\n return TimeSpan.fromTicks(Math.floor(milliseconds * ticksPerMillisecond));\n }\n\n public static fromMilliseconds(value: number): TimeSpan {\n return TimeSpan.interval(value, 1);\n }\n\n public static fromSeconds(value: number): TimeSpan {\n return TimeSpan.interval(value, millisPerSecond);\n }\n\n public static fromMinutes(value: number): TimeSpan {\n return TimeSpan.interval(value, millisPerMinute);\n }\n\n public static fromHours(value: number): TimeSpan {\n return TimeSpan.interval(value, millisPerHour);\n }\n\n public static fromDays(value: number): TimeSpan {\n return TimeSpan.interval(value, millisPerDay);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { TimeSpan } from \"./timeSpan\";\n\n/**\n * @hidden\n */\nexport function parseDelimitedString(delimitedString: string): {\n [key: string]: any;\n} {\n if (delimitedString == null) {\n throw new Error(\"delimitedString is null or undefined\");\n }\n\n const metrics: { [key: string]: any } = {};\n\n const headerAttributes = delimitedString.split(\";\");\n for (const attribute of headerAttributes) {\n const attributeKeyValue = attribute.split(\"=\");\n\n if (attributeKeyValue.length !== 2) {\n throw new Error(\"recieved a malformed delimited string\");\n }\n\n const attributeKey = attributeKeyValue[0];\n const attributeValue = parseFloat(attributeKeyValue[1]);\n\n metrics[attributeKey] = attributeValue;\n }\n\n return metrics;\n}\n\n/**\n * @hidden\n */\nexport function timeSpanFromMetrics(\n metrics: { [key: string]: any } /* TODO: any */,\n key: string\n): TimeSpan {\n if (key in metrics) {\n return TimeSpan.fromMilliseconds(metrics[key]);\n }\n\n return TimeSpan.zero;\n}\n\n/**\n * @hidden\n */\nexport function isNumeric(input: unknown): boolean {\n return !isNaN(parseFloat(input as string)) && isFinite(input as number);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport QueryMetricsConstants from \"./queryMetricsConstants\";\nimport { parseDelimitedString, timeSpanFromMetrics } from \"./queryMetricsUtils\";\nimport { TimeSpan } from \"./timeSpan\";\n\nexport class QueryPreparationTimes {\n constructor(\n public readonly queryCompilationTime: TimeSpan,\n public readonly logicalPlanBuildTime: TimeSpan,\n public readonly physicalPlanBuildTime: TimeSpan,\n public readonly queryOptimizationTime: TimeSpan\n ) {}\n\n /**\n * returns a new QueryPreparationTimes instance that is the addition of this and the arguments.\n */\n public add(...queryPreparationTimesArray: QueryPreparationTimes[]): QueryPreparationTimes {\n let queryCompilationTime = this.queryCompilationTime;\n let logicalPlanBuildTime = this.logicalPlanBuildTime;\n let physicalPlanBuildTime = this.physicalPlanBuildTime;\n let queryOptimizationTime = this.queryOptimizationTime;\n\n for (const queryPreparationTimes of queryPreparationTimesArray) {\n if (queryPreparationTimes == null) {\n throw new Error(\"queryPreparationTimesArray has null or undefined item(s)\");\n }\n\n queryCompilationTime = queryCompilationTime.add(queryPreparationTimes.queryCompilationTime);\n logicalPlanBuildTime = logicalPlanBuildTime.add(queryPreparationTimes.logicalPlanBuildTime);\n physicalPlanBuildTime = physicalPlanBuildTime.add(\n queryPreparationTimes.physicalPlanBuildTime\n );\n queryOptimizationTime = queryOptimizationTime.add(\n queryPreparationTimes.queryOptimizationTime\n );\n }\n\n return new QueryPreparationTimes(\n queryCompilationTime,\n logicalPlanBuildTime,\n physicalPlanBuildTime,\n queryOptimizationTime\n );\n }\n\n /**\n * Output the QueryPreparationTimes as a delimited string.\n */\n public toDelimitedString(): string {\n return (\n `${\n QueryMetricsConstants.QueryCompileTimeInMs\n }=${this.queryCompilationTime.totalMilliseconds()};` +\n `${\n QueryMetricsConstants.LogicalPlanBuildTimeInMs\n }=${this.logicalPlanBuildTime.totalMilliseconds()};` +\n `${\n QueryMetricsConstants.PhysicalPlanBuildTimeInMs\n }=${this.physicalPlanBuildTime.totalMilliseconds()};` +\n `${\n QueryMetricsConstants.QueryOptimizationTimeInMs\n }=${this.queryOptimizationTime.totalMilliseconds()}`\n );\n }\n\n public static readonly zero = new QueryPreparationTimes(\n TimeSpan.zero,\n TimeSpan.zero,\n TimeSpan.zero,\n TimeSpan.zero\n );\n\n /**\n * Returns a new instance of the QueryPreparationTimes class that is the\n * aggregation of an array of QueryPreparationTimes.\n */\n public static createFromArray(\n queryPreparationTimesArray: QueryPreparationTimes[]\n ): QueryPreparationTimes {\n if (queryPreparationTimesArray == null) {\n throw new Error(\"queryPreparationTimesArray is null or undefined item(s)\");\n }\n\n return QueryPreparationTimes.zero.add(...queryPreparationTimesArray);\n }\n\n /**\n * Returns a new instance of the QueryPreparationTimes class this is deserialized from a delimited string.\n */\n public static createFromDelimitedString(delimitedString: string): QueryPreparationTimes {\n const metrics = parseDelimitedString(delimitedString);\n\n return new QueryPreparationTimes(\n timeSpanFromMetrics(metrics, QueryMetricsConstants.QueryCompileTimeInMs),\n timeSpanFromMetrics(metrics, QueryMetricsConstants.LogicalPlanBuildTimeInMs),\n timeSpanFromMetrics(metrics, QueryMetricsConstants.PhysicalPlanBuildTimeInMs),\n timeSpanFromMetrics(metrics, QueryMetricsConstants.QueryOptimizationTimeInMs)\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport QueryMetricsConstants from \"./queryMetricsConstants\";\nimport { parseDelimitedString, timeSpanFromMetrics } from \"./queryMetricsUtils\";\nimport { TimeSpan } from \"./timeSpan\";\n\nexport class RuntimeExecutionTimes {\n constructor(\n public readonly queryEngineExecutionTime: TimeSpan,\n public readonly systemFunctionExecutionTime: TimeSpan,\n public readonly userDefinedFunctionExecutionTime: TimeSpan\n ) {}\n\n /**\n * returns a new RuntimeExecutionTimes instance that is the addition of this and the arguments.\n */\n public add(...runtimeExecutionTimesArray: RuntimeExecutionTimes[]): RuntimeExecutionTimes {\n let queryEngineExecutionTime = this.queryEngineExecutionTime;\n let systemFunctionExecutionTime = this.systemFunctionExecutionTime;\n let userDefinedFunctionExecutionTime = this.userDefinedFunctionExecutionTime;\n\n for (const runtimeExecutionTimes of runtimeExecutionTimesArray) {\n if (runtimeExecutionTimes == null) {\n throw new Error(\"runtimeExecutionTimes has null or undefined item(s)\");\n }\n\n queryEngineExecutionTime = queryEngineExecutionTime.add(\n runtimeExecutionTimes.queryEngineExecutionTime\n );\n systemFunctionExecutionTime = systemFunctionExecutionTime.add(\n runtimeExecutionTimes.systemFunctionExecutionTime\n );\n userDefinedFunctionExecutionTime = userDefinedFunctionExecutionTime.add(\n runtimeExecutionTimes.userDefinedFunctionExecutionTime\n );\n }\n\n return new RuntimeExecutionTimes(\n queryEngineExecutionTime,\n systemFunctionExecutionTime,\n userDefinedFunctionExecutionTime\n );\n }\n\n /**\n * Output the RuntimeExecutionTimes as a delimited string.\n */\n public toDelimitedString(): string {\n return (\n `${\n QueryMetricsConstants.SystemFunctionExecuteTimeInMs\n }=${this.systemFunctionExecutionTime.totalMilliseconds()};` +\n `${\n QueryMetricsConstants.UserDefinedFunctionExecutionTimeInMs\n }=${this.userDefinedFunctionExecutionTime.totalMilliseconds()}`\n );\n }\n\n public static readonly zero = new RuntimeExecutionTimes(\n TimeSpan.zero,\n TimeSpan.zero,\n TimeSpan.zero\n );\n\n /**\n * Returns a new instance of the RuntimeExecutionTimes class that is\n * the aggregation of an array of RuntimeExecutionTimes.\n */\n public static createFromArray(\n runtimeExecutionTimesArray: RuntimeExecutionTimes[]\n ): RuntimeExecutionTimes {\n if (runtimeExecutionTimesArray == null) {\n throw new Error(\"runtimeExecutionTimesArray is null or undefined item(s)\");\n }\n\n return RuntimeExecutionTimes.zero.add(...runtimeExecutionTimesArray);\n }\n\n /**\n * Returns a new instance of the RuntimeExecutionTimes class this is deserialized from a delimited string.\n */\n public static createFromDelimitedString(delimitedString: string): RuntimeExecutionTimes {\n const metrics = parseDelimitedString(delimitedString);\n\n const vmExecutionTime = timeSpanFromMetrics(metrics, QueryMetricsConstants.VMExecutionTimeInMs);\n const indexLookupTime = timeSpanFromMetrics(metrics, QueryMetricsConstants.IndexLookupTimeInMs);\n const documentLoadTime = timeSpanFromMetrics(\n metrics,\n QueryMetricsConstants.DocumentLoadTimeInMs\n );\n const documentWriteTime = timeSpanFromMetrics(\n metrics,\n QueryMetricsConstants.DocumentWriteTimeInMs\n );\n\n let queryEngineExecutionTime = TimeSpan.zero;\n queryEngineExecutionTime = queryEngineExecutionTime.add(vmExecutionTime);\n queryEngineExecutionTime = queryEngineExecutionTime.subtract(indexLookupTime);\n queryEngineExecutionTime = queryEngineExecutionTime.subtract(documentLoadTime);\n queryEngineExecutionTime = queryEngineExecutionTime.subtract(documentWriteTime);\n return new RuntimeExecutionTimes(\n queryEngineExecutionTime,\n timeSpanFromMetrics(metrics, QueryMetricsConstants.SystemFunctionExecuteTimeInMs),\n timeSpanFromMetrics(metrics, QueryMetricsConstants.UserDefinedFunctionExecutionTimeInMs)\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientSideMetrics } from \"./clientSideMetrics\";\nimport QueryMetricsConstants from \"./queryMetricsConstants\";\nimport { parseDelimitedString, timeSpanFromMetrics } from \"./queryMetricsUtils\";\nimport { QueryPreparationTimes } from \"./queryPreparationTime\";\nimport { RuntimeExecutionTimes } from \"./runtimeExecutionTimes\";\nimport { TimeSpan } from \"./timeSpan\";\n\nexport class QueryMetrics {\n constructor(\n public readonly retrievedDocumentCount: number,\n public readonly retrievedDocumentSize: number,\n public readonly outputDocumentCount: number,\n public readonly outputDocumentSize: number,\n public readonly indexHitDocumentCount: number,\n public readonly totalQueryExecutionTime: TimeSpan,\n public readonly queryPreparationTimes: QueryPreparationTimes,\n public readonly indexLookupTime: TimeSpan,\n public readonly documentLoadTime: TimeSpan,\n public readonly vmExecutionTime: TimeSpan,\n public readonly runtimeExecutionTimes: RuntimeExecutionTimes,\n public readonly documentWriteTime: TimeSpan,\n public readonly clientSideMetrics: ClientSideMetrics\n ) {}\n\n /**\n * Gets the IndexHitRatio\n * @hidden\n */\n public get indexHitRatio(): number {\n return this.retrievedDocumentCount === 0\n ? 1\n : this.indexHitDocumentCount / this.retrievedDocumentCount;\n }\n\n /**\n * returns a new QueryMetrics instance that is the addition of this and the arguments.\n */\n public add(queryMetricsArray: QueryMetrics[]): QueryMetrics {\n let retrievedDocumentCount = 0;\n let retrievedDocumentSize = 0;\n let outputDocumentCount = 0;\n let outputDocumentSize = 0;\n let indexHitDocumentCount = 0;\n let totalQueryExecutionTime = TimeSpan.zero;\n const queryPreparationTimesArray = [];\n let indexLookupTime = TimeSpan.zero;\n let documentLoadTime = TimeSpan.zero;\n let vmExecutionTime = TimeSpan.zero;\n const runtimeExecutionTimesArray = [];\n let documentWriteTime = TimeSpan.zero;\n const clientSideQueryMetricsArray = [];\n\n queryMetricsArray.push(this);\n\n for (const queryMetrics of queryMetricsArray) {\n if (queryMetrics) {\n retrievedDocumentCount += queryMetrics.retrievedDocumentCount;\n retrievedDocumentSize += queryMetrics.retrievedDocumentSize;\n outputDocumentCount += queryMetrics.outputDocumentCount;\n outputDocumentSize += queryMetrics.outputDocumentSize;\n indexHitDocumentCount += queryMetrics.indexHitDocumentCount;\n totalQueryExecutionTime = totalQueryExecutionTime.add(queryMetrics.totalQueryExecutionTime);\n queryPreparationTimesArray.push(queryMetrics.queryPreparationTimes);\n indexLookupTime = indexLookupTime.add(queryMetrics.indexLookupTime);\n documentLoadTime = documentLoadTime.add(queryMetrics.documentLoadTime);\n vmExecutionTime = vmExecutionTime.add(queryMetrics.vmExecutionTime);\n runtimeExecutionTimesArray.push(queryMetrics.runtimeExecutionTimes);\n documentWriteTime = documentWriteTime.add(queryMetrics.documentWriteTime);\n clientSideQueryMetricsArray.push(queryMetrics.clientSideMetrics);\n }\n }\n\n return new QueryMetrics(\n retrievedDocumentCount,\n retrievedDocumentSize,\n outputDocumentCount,\n outputDocumentSize,\n indexHitDocumentCount,\n totalQueryExecutionTime,\n QueryPreparationTimes.createFromArray(queryPreparationTimesArray),\n indexLookupTime,\n documentLoadTime,\n vmExecutionTime,\n RuntimeExecutionTimes.createFromArray(runtimeExecutionTimesArray),\n documentWriteTime,\n ClientSideMetrics.createFromArray(...clientSideQueryMetricsArray)\n );\n }\n\n /**\n * Output the QueryMetrics as a delimited string.\n * @hidden\n */\n public toDelimitedString(): string {\n return (\n QueryMetricsConstants.RetrievedDocumentCount +\n \"=\" +\n this.retrievedDocumentCount +\n \";\" +\n QueryMetricsConstants.RetrievedDocumentSize +\n \"=\" +\n this.retrievedDocumentSize +\n \";\" +\n QueryMetricsConstants.OutputDocumentCount +\n \"=\" +\n this.outputDocumentCount +\n \";\" +\n QueryMetricsConstants.OutputDocumentSize +\n \"=\" +\n this.outputDocumentSize +\n \";\" +\n QueryMetricsConstants.IndexHitRatio +\n \"=\" +\n this.indexHitRatio +\n \";\" +\n QueryMetricsConstants.TotalQueryExecutionTimeInMs +\n \"=\" +\n this.totalQueryExecutionTime.totalMilliseconds() +\n \";\" +\n this.queryPreparationTimes.toDelimitedString() +\n \";\" +\n QueryMetricsConstants.IndexLookupTimeInMs +\n \"=\" +\n this.indexLookupTime.totalMilliseconds() +\n \";\" +\n QueryMetricsConstants.DocumentLoadTimeInMs +\n \"=\" +\n this.documentLoadTime.totalMilliseconds() +\n \";\" +\n QueryMetricsConstants.VMExecutionTimeInMs +\n \"=\" +\n this.vmExecutionTime.totalMilliseconds() +\n \";\" +\n this.runtimeExecutionTimes.toDelimitedString() +\n \";\" +\n QueryMetricsConstants.DocumentWriteTimeInMs +\n \"=\" +\n this.documentWriteTime.totalMilliseconds()\n );\n }\n\n public static readonly zero = new QueryMetrics(\n 0,\n 0,\n 0,\n 0,\n 0,\n TimeSpan.zero,\n QueryPreparationTimes.zero,\n TimeSpan.zero,\n TimeSpan.zero,\n TimeSpan.zero,\n RuntimeExecutionTimes.zero,\n TimeSpan.zero,\n ClientSideMetrics.zero\n );\n\n /**\n * Returns a new instance of the QueryMetrics class that is the aggregation of an array of query metrics.\n */\n public static createFromArray(queryMetricsArray: QueryMetrics[]): QueryMetrics {\n if (!queryMetricsArray) {\n throw new Error(\"queryMetricsArray is null or undefined item(s)\");\n }\n\n return QueryMetrics.zero.add(queryMetricsArray);\n }\n\n /**\n * Returns a new instance of the QueryMetrics class this is deserialized from a delimited string.\n */\n public static createFromDelimitedString(\n delimitedString: string,\n clientSideMetrics?: ClientSideMetrics\n ): QueryMetrics {\n const metrics = parseDelimitedString(delimitedString);\n\n const indexHitRatio = metrics[QueryMetricsConstants.IndexHitRatio] || 0;\n const retrievedDocumentCount = metrics[QueryMetricsConstants.RetrievedDocumentCount] || 0;\n const indexHitCount = indexHitRatio * retrievedDocumentCount;\n const outputDocumentCount = metrics[QueryMetricsConstants.OutputDocumentCount] || 0;\n const outputDocumentSize = metrics[QueryMetricsConstants.OutputDocumentSize] || 0;\n const retrievedDocumentSize = metrics[QueryMetricsConstants.RetrievedDocumentSize] || 0;\n const totalQueryExecutionTime = timeSpanFromMetrics(\n metrics,\n QueryMetricsConstants.TotalQueryExecutionTimeInMs\n );\n return new QueryMetrics(\n retrievedDocumentCount,\n retrievedDocumentSize,\n outputDocumentCount,\n outputDocumentSize,\n indexHitCount,\n totalQueryExecutionTime,\n QueryPreparationTimes.createFromDelimitedString(delimitedString),\n timeSpanFromMetrics(metrics, QueryMetricsConstants.IndexLookupTimeInMs),\n timeSpanFromMetrics(metrics, QueryMetricsConstants.DocumentLoadTimeInMs),\n timeSpanFromMetrics(metrics, QueryMetricsConstants.VMExecutionTimeInMs),\n RuntimeExecutionTimes.createFromDelimitedString(delimitedString),\n timeSpanFromMetrics(metrics, QueryMetricsConstants.DocumentWriteTimeInMs),\n clientSideMetrics || ClientSideMetrics.zero\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"../common\";\nimport { QueryMetrics } from \"../queryMetrics/queryMetrics\";\n\nexport interface CosmosHeaders {\n [key: string]: any;\n}\n\n/** @hidden */\n// TODO: docs\nexport function getRequestChargeIfAny(headers: CosmosHeaders | number): number {\n if (typeof headers === \"number\") {\n return headers;\n } else if (typeof headers === \"string\") {\n return parseFloat(headers);\n }\n\n if (headers) {\n const rc = headers[Constants.HttpHeaders.RequestCharge];\n if (rc) {\n return parseFloat(rc as string);\n } else {\n return 0;\n }\n } else {\n return 0;\n }\n}\n\n/**\n * @hidden\n */\nexport function getInitialHeader(): CosmosHeaders {\n const headers: CosmosHeaders = {};\n headers[Constants.HttpHeaders.RequestCharge] = 0;\n headers[Constants.HttpHeaders.QueryMetrics] = {};\n return headers;\n}\n\n/**\n * @hidden\n */\n// TODO: The name of this method isn't very accurate to what it does\nexport function mergeHeaders(headers: CosmosHeaders, toBeMergedHeaders: CosmosHeaders): void {\n if (headers[Constants.HttpHeaders.RequestCharge] === undefined) {\n headers[Constants.HttpHeaders.RequestCharge] = 0;\n }\n\n if (headers[Constants.HttpHeaders.QueryMetrics] === undefined) {\n headers[Constants.HttpHeaders.QueryMetrics] = QueryMetrics.zero;\n }\n\n if (!toBeMergedHeaders) {\n return;\n }\n\n headers[Constants.HttpHeaders.RequestCharge] += getRequestChargeIfAny(toBeMergedHeaders);\n if (toBeMergedHeaders[Constants.HttpHeaders.IsRUPerMinuteUsed]) {\n headers[Constants.HttpHeaders.IsRUPerMinuteUsed] =\n toBeMergedHeaders[Constants.HttpHeaders.IsRUPerMinuteUsed];\n }\n\n if (Constants.HttpHeaders.QueryMetrics in toBeMergedHeaders) {\n const headerQueryMetrics = headers[Constants.HttpHeaders.QueryMetrics];\n const toBeMergedHeaderQueryMetrics = toBeMergedHeaders[Constants.HttpHeaders.QueryMetrics];\n\n for (const partitionId in toBeMergedHeaderQueryMetrics) {\n if (headerQueryMetrics[partitionId]) {\n const combinedQueryMetrics = headerQueryMetrics[partitionId].add([\n toBeMergedHeaderQueryMetrics[partitionId],\n ]);\n headerQueryMetrics[partitionId] = combinedQueryMetrics;\n } else {\n headerQueryMetrics[partitionId] = toBeMergedHeaderQueryMetrics[partitionId];\n }\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { AzureLogger, createClientLogger } from \"@azure/logger\";\nimport { Constants } from \"../common\";\nimport { ClientSideMetrics, QueryMetrics } from \"../queryMetrics\";\nimport { FeedOptions, Response } from \"../request\";\nimport { getInitialHeader } from \"./headerUtils\";\nimport { ExecutionContext } from \"./index\";\n\nconst logger: AzureLogger = createClientLogger(\"ClientContext\");\n/** @hidden */\nexport type FetchFunctionCallback = (options: FeedOptions) => Promise<Response<any>>;\n\n/** @hidden */\nenum STATES {\n start = \"start\",\n inProgress = \"inProgress\",\n ended = \"ended\",\n}\n\n/** @hidden */\nexport class DefaultQueryExecutionContext implements ExecutionContext {\n private static readonly STATES = STATES;\n private resources: any[]; // TODO: any resources\n private currentIndex: number;\n private currentPartitionIndex: number;\n private fetchFunctions: FetchFunctionCallback[];\n private options: FeedOptions; // TODO: any options\n public continuationToken: string; // TODO: any continuation\n public get continuation(): string {\n return this.continuationToken;\n }\n private state: STATES;\n private nextFetchFunction: Promise<Response<any>>;\n /**\n * Provides the basic Query Execution Context.\n * This wraps the internal logic query execution using provided fetch functions\n *\n * @param clientContext - Is used to read the partitionKeyRanges for split proofing\n * @param query - A SQL query.\n * @param options - Represents the feed options.\n * @param fetchFunctions - A function to retrieve each page of data.\n * An array of functions may be used to query more than one partition.\n * @hidden\n */\n constructor(\n options: FeedOptions,\n fetchFunctions: FetchFunctionCallback | FetchFunctionCallback[]\n ) {\n this.resources = [];\n this.currentIndex = 0;\n this.currentPartitionIndex = 0;\n this.fetchFunctions = Array.isArray(fetchFunctions) ? fetchFunctions : [fetchFunctions];\n this.options = options || {};\n this.continuationToken = this.options.continuationToken || this.options.continuation || null;\n this.state = DefaultQueryExecutionContext.STATES.start;\n }\n\n /**\n * Execute a provided callback on the next element in the execution context.\n */\n public async nextItem(): Promise<Response<any>> {\n ++this.currentIndex;\n const response = await this.current();\n return response;\n }\n\n /**\n * Retrieve the current element on the execution context.\n */\n public async current(): Promise<Response<any>> {\n if (this.currentIndex < this.resources.length) {\n return {\n result: this.resources[this.currentIndex],\n headers: getInitialHeader(),\n };\n }\n\n if (this._canFetchMore()) {\n const { result: resources, headers } = await this.fetchMore();\n this.resources = resources;\n if (this.resources.length === 0) {\n if (!this.continuationToken && this.currentPartitionIndex >= this.fetchFunctions.length) {\n this.state = DefaultQueryExecutionContext.STATES.ended;\n return { result: undefined, headers };\n } else {\n return this.current();\n }\n }\n return { result: this.resources[this.currentIndex], headers };\n } else {\n this.state = DefaultQueryExecutionContext.STATES.ended;\n return { result: undefined, headers: getInitialHeader() };\n }\n }\n\n /**\n * Determine if there are still remaining resources to processs based on\n * the value of the continuation token or the elements remaining on the current batch in the execution context.\n *\n * @returns true if there is other elements to process in the DefaultQueryExecutionContext.\n */\n public hasMoreResults(): boolean {\n return (\n this.state === DefaultQueryExecutionContext.STATES.start ||\n this.continuationToken !== undefined ||\n this.currentIndex < this.resources.length - 1 ||\n this.currentPartitionIndex < this.fetchFunctions.length\n );\n }\n\n /**\n * Fetches the next batch of the feed and pass them as an array to a callback\n */\n public async fetchMore(): Promise<Response<any>> {\n if (this.currentPartitionIndex >= this.fetchFunctions.length) {\n return { headers: getInitialHeader(), result: undefined };\n }\n\n // Keep to the original continuation and to restore the value after fetchFunction call\n const originalContinuation = this.options.continuationToken || this.options.continuation;\n this.options.continuationToken = this.continuationToken;\n\n // Return undefined if there is no more results\n if (this.currentPartitionIndex >= this.fetchFunctions.length) {\n return { headers: getInitialHeader(), result: undefined };\n }\n\n let resources;\n let responseHeaders;\n try {\n let p: Promise<Response<any>>;\n if (this.nextFetchFunction !== undefined) {\n logger.verbose(\"using prefetch\");\n p = this.nextFetchFunction;\n this.nextFetchFunction = undefined;\n } else {\n logger.verbose(\"using fresh fetch\");\n p = this.fetchFunctions[this.currentPartitionIndex](this.options);\n }\n const response = await p;\n resources = response.result;\n responseHeaders = response.headers;\n\n this.continuationToken = responseHeaders[Constants.HttpHeaders.Continuation];\n if (!this.continuationToken) {\n ++this.currentPartitionIndex;\n }\n\n if (this.options && this.options.bufferItems === true) {\n const fetchFunction = this.fetchFunctions[this.currentPartitionIndex];\n this.nextFetchFunction = fetchFunction\n ? fetchFunction({ ...this.options, continuationToken: this.continuationToken })\n : undefined;\n }\n } catch (err: any) {\n this.state = DefaultQueryExecutionContext.STATES.ended;\n // return callback(err, undefined, responseHeaders);\n // TODO: Error and data being returned is an antipattern, this might broken\n throw err;\n }\n\n this.state = DefaultQueryExecutionContext.STATES.inProgress;\n this.currentIndex = 0;\n this.options.continuationToken = originalContinuation;\n this.options.continuation = originalContinuation;\n\n // deserializing query metrics so that we aren't working with delimited strings in the rest of the code base\n if (Constants.HttpHeaders.QueryMetrics in responseHeaders) {\n const delimitedString = responseHeaders[Constants.HttpHeaders.QueryMetrics];\n let queryMetrics = QueryMetrics.createFromDelimitedString(delimitedString);\n\n // Add the request charge to the query metrics so that we can have per partition request charge.\n if (Constants.HttpHeaders.RequestCharge in responseHeaders) {\n const requestCharge = Number(responseHeaders[Constants.HttpHeaders.RequestCharge]) || 0;\n queryMetrics = new QueryMetrics(\n queryMetrics.retrievedDocumentCount,\n queryMetrics.retrievedDocumentSize,\n queryMetrics.outputDocumentCount,\n queryMetrics.outputDocumentSize,\n queryMetrics.indexHitDocumentCount,\n queryMetrics.totalQueryExecutionTime,\n queryMetrics.queryPreparationTimes,\n queryMetrics.indexLookupTime,\n queryMetrics.documentLoadTime,\n queryMetrics.vmExecutionTime,\n queryMetrics.runtimeExecutionTimes,\n queryMetrics.documentWriteTime,\n new ClientSideMetrics(requestCharge)\n );\n }\n\n // Wraping query metrics in a object where the key is '0' just so single partition\n // and partition queries have the same response schema\n responseHeaders[Constants.HttpHeaders.QueryMetrics] = {};\n responseHeaders[Constants.HttpHeaders.QueryMetrics][\"0\"] = queryMetrics;\n }\n\n return { result: resources, headers: responseHeaders };\n }\n\n private _canFetchMore(): boolean {\n const res =\n this.state === DefaultQueryExecutionContext.STATES.start ||\n (this.continuationToken && this.state === DefaultQueryExecutionContext.STATES.inProgress) ||\n (this.currentPartitionIndex < this.fetchFunctions.length &&\n this.state === DefaultQueryExecutionContext.STATES.inProgress);\n return res;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Aggregator } from \"./Aggregator\";\n\n/** @hidden */\nexport interface AverageAggregateResult {\n sum: number;\n count: number;\n}\n\n/** @hidden */\nexport class AverageAggregator implements Aggregator {\n public sum: number;\n public count: number;\n /**\n * Add the provided item to aggregation result.\n */\n public aggregate(other: AverageAggregateResult): void {\n if (other == null || other.sum == null) {\n return;\n }\n if (this.sum == null) {\n this.sum = 0.0;\n this.count = 0;\n }\n this.sum += other.sum;\n this.count += other.count;\n }\n\n /**\n * Get the aggregation result.\n */\n public getResult(): number {\n if (this.sum == null || this.count <= 0) {\n return undefined;\n }\n return this.sum / this.count;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Aggregator } from \"./Aggregator\";\n\n/** @hidden */\nexport class CountAggregator implements Aggregator {\n public value: number;\n /**\n * Represents an aggregator for COUNT operator.\n * @hidden\n */\n constructor() {\n this.value = 0;\n }\n /**\n * Add the provided item to aggregation result.\n */\n public aggregate(other: number): void {\n this.value += other;\n }\n\n /**\n * Get the aggregation result.\n */\n public getResult(): number {\n return this.value;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { DocumentProducer } from \"./documentProducer\";\n\n// TODO: this smells funny\n/** @hidden */\nconst TYPEORDCOMPARATOR: {\n [type: string]: { ord: number; compFunc?: (a: any, b: any) => number };\n} = Object.freeze({\n NoValue: {\n ord: 0,\n },\n undefined: {\n ord: 1,\n },\n boolean: {\n ord: 2,\n compFunc: (a: boolean, b: boolean) => {\n return a === b ? 0 : a > b ? 1 : -1;\n },\n },\n number: {\n ord: 4,\n compFunc: (a: number, b: number) => {\n return a === b ? 0 : a > b ? 1 : -1;\n },\n },\n string: {\n ord: 5,\n compFunc: (a: string, b: string) => {\n return a === b ? 0 : a > b ? 1 : -1;\n },\n },\n});\n\n/** @hidden */\nexport class OrderByDocumentProducerComparator {\n constructor(public sortOrder: string[]) {} // TODO: This should be an enum\n\n private targetPartitionKeyRangeDocProdComparator(\n docProd1: DocumentProducer,\n docProd2: DocumentProducer\n ): 0 | 1 | -1 {\n const a = docProd1.getTargetParitionKeyRange()[\"minInclusive\"];\n const b = docProd2.getTargetParitionKeyRange()[\"minInclusive\"];\n return a === b ? 0 : a > b ? 1 : -1;\n }\n\n public compare(docProd1: DocumentProducer, docProd2: DocumentProducer): number {\n // Need to check for split, since we don't want to dereference \"item\" of undefined / exception\n if (docProd1.gotSplit()) {\n return -1;\n }\n if (docProd2.gotSplit()) {\n return 1;\n }\n\n const orderByItemsRes1 = this.getOrderByItems(docProd1.peekBufferedItems()[0]);\n const orderByItemsRes2 = this.getOrderByItems(docProd2.peekBufferedItems()[0]);\n\n // validate order by items and types\n // TODO: once V1 order by on different types is fixed this need to change\n this.validateOrderByItems(orderByItemsRes1, orderByItemsRes2);\n\n // no async call in the for loop\n for (let i = 0; i < orderByItemsRes1.length; i++) {\n // compares the orderby items one by one\n const compRes = this.compareOrderByItem(orderByItemsRes1[i], orderByItemsRes2[i]);\n if (compRes !== 0) {\n if (this.sortOrder[i] === \"Ascending\") {\n return compRes;\n } else if (this.sortOrder[i] === \"Descending\") {\n return -compRes;\n }\n }\n }\n\n return this.targetPartitionKeyRangeDocProdComparator(docProd1, docProd2);\n }\n\n // TODO: This smells funny\n public compareValue(item1: unknown, type1: string, item2: unknown, type2: string): number {\n if (type1 === \"object\" || type2 === \"object\") {\n throw new Error(\"Tried to compare an object type\");\n }\n const type1Ord = TYPEORDCOMPARATOR[type1].ord;\n const type2Ord = TYPEORDCOMPARATOR[type2].ord;\n const typeCmp = type1Ord - type2Ord;\n\n if (typeCmp !== 0) {\n // if the types are different, use type ordinal\n return typeCmp;\n }\n\n // both are of the same type\n if (\n type1Ord === TYPEORDCOMPARATOR[\"undefined\"].ord ||\n type1Ord === TYPEORDCOMPARATOR[\"NoValue\"].ord\n ) {\n // if both types are undefined or Null they are equal\n return 0;\n }\n\n const compFunc = TYPEORDCOMPARATOR[type1].compFunc;\n if (typeof compFunc === \"undefined\") {\n throw new Error(\"Cannot find the comparison function\");\n }\n // same type and type is defined compare the items\n return compFunc(item1, item2);\n }\n\n private compareOrderByItem(orderByItem1: any, orderByItem2: any): number {\n const type1 = this.getType(orderByItem1);\n const type2 = this.getType(orderByItem2);\n return this.compareValue(orderByItem1[\"item\"], type1, orderByItem2[\"item\"], type2);\n }\n\n private validateOrderByItems(res1: string[], res2: string[]): void {\n if (res1.length !== res2.length) {\n throw new Error(`Expected ${res1.length}, but got ${res2.length}.`);\n }\n if (res1.length !== this.sortOrder.length) {\n throw new Error(\"orderByItems cannot have a different size than sort orders.\");\n }\n\n for (let i = 0; i < this.sortOrder.length; i++) {\n const type1 = this.getType(res1[i]);\n const type2 = this.getType(res2[i]);\n if (type1 !== type2) {\n throw new Error(\n `Expected ${type1}, but got ${type2}. Cannot execute cross partition order-by queries on mixed types. Consider filtering your query using IS_STRING or IS_NUMBER to get around this exception.`\n );\n }\n }\n }\n\n private getType(\n orderByItem: any\n ):\n | \"string\"\n | \"number\"\n | \"bigint\"\n | \"boolean\"\n | \"symbol\"\n | \"undefined\"\n | \"object\"\n | \"function\"\n | \"NoValue\" {\n // TODO: any item?\n if (orderByItem === undefined || orderByItem.item === undefined) {\n return \"NoValue\";\n }\n const type = typeof orderByItem.item;\n if (TYPEORDCOMPARATOR[type] === undefined) {\n throw new Error(`unrecognizable type ${type}`);\n }\n return type;\n }\n\n private getOrderByItems(res: any): any {\n // TODO: any res?\n return res[\"orderByItems\"];\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { OrderByDocumentProducerComparator } from \"../orderByDocumentProducerComparator\";\nimport { Aggregator } from \"./Aggregator\";\n\ninterface MaxAggregateResult {\n count: number;\n max?: number;\n}\n\n/** @hidden */\nexport class MaxAggregator implements Aggregator {\n private value: number;\n private comparer: OrderByDocumentProducerComparator;\n /**\n * Represents an aggregator for MAX operator.\n * @hidden\n */\n constructor() {\n this.value = undefined;\n this.comparer = new OrderByDocumentProducerComparator([\"Ascending\"]);\n }\n /**\n * Add the provided item to aggregation result.\n */\n public aggregate(other: MaxAggregateResult): void {\n if (this.value === undefined) {\n this.value = other.max;\n } else if (\n this.comparer.compareValue(other.max, typeof other.max, this.value, typeof this.value) > 0\n ) {\n this.value = other.max;\n }\n }\n\n /**\n * Get the aggregation result.\n */\n public getResult(): number {\n return this.value;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { OrderByDocumentProducerComparator } from \"../orderByDocumentProducerComparator\";\nimport { Aggregator } from \"./Aggregator\";\n\nexport interface MinAggregateResult {\n min: number;\n count: number;\n}\n\n/** @hidden */\nexport class MinAggregator implements Aggregator {\n private value: number;\n private comparer: OrderByDocumentProducerComparator;\n /**\n * Represents an aggregator for MIN operator.\n * @hidden\n */\n constructor() {\n this.value = undefined;\n this.comparer = new OrderByDocumentProducerComparator([\"Ascending\"]);\n }\n /**\n * Add the provided item to aggregation result.\n */\n public aggregate(other: MinAggregateResult): void {\n if (this.value === undefined) {\n // || typeof this.value === \"object\"\n this.value = other.min;\n } else {\n const otherType = other.min === null ? \"NoValue\" : typeof other.min; // || typeof other === \"object\"\n const thisType = this.value === null ? \"NoValue\" : typeof this.value;\n if (this.comparer.compareValue(other.min, otherType, this.value, thisType) < 0) {\n this.value = other.min;\n }\n }\n }\n\n /**\n * Get the aggregation result.\n */\n public getResult(): number {\n return this.value;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Aggregator } from \"./Aggregator\";\n\n/** @hidden */\nexport class SumAggregator implements Aggregator {\n public sum: number;\n /**\n * Add the provided item to aggregation result.\n */\n public aggregate(other: number): void {\n if (other === undefined) {\n return;\n }\n if (this.sum === undefined) {\n this.sum = other;\n } else {\n this.sum += other;\n }\n }\n\n /**\n * Get the aggregation result.\n */\n public getResult(): number {\n return this.sum;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Aggregator } from \"./Aggregator\";\n\n/** @hidden */\nexport class StaticValueAggregator implements Aggregator {\n public value: any;\n public aggregate(other: unknown): void {\n if (this.value === undefined) {\n this.value = other;\n }\n }\n\n public getResult(): any {\n return this.value;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { AverageAggregator } from \"./AverageAggregator\";\nimport { CountAggregator } from \"./CountAggregator\";\nimport { MaxAggregator } from \"./MaxAggregator\";\nimport { MinAggregator } from \"./MinAggregator\";\nimport { SumAggregator } from \"./SumAggregator\";\nimport { StaticValueAggregator } from \"./StaticValueAggregator\";\nimport { AggregateType } from \"../../request/ErrorResponse\";\n\nexport function createAggregator(\n aggregateType: AggregateType\n):\n | AverageAggregator\n | CountAggregator\n | MaxAggregator\n | MinAggregator\n | SumAggregator\n | StaticValueAggregator {\n switch (aggregateType) {\n case \"Average\":\n return new AverageAggregator();\n case \"Count\":\n return new CountAggregator();\n case \"Max\":\n return new MaxAggregator();\n case \"Min\":\n return new MinAggregator();\n case \"Sum\":\n return new SumAggregator();\n default:\n return new StaticValueAggregator();\n }\n}\n\nexport { AverageAggregator, CountAggregator, MaxAggregator, MinAggregator, SumAggregator };\nexport { Aggregator } from \"./Aggregator\";\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/** @hidden */\nexport enum FetchResultType {\n \"Done\" = 0,\n \"Exception\" = 1,\n \"Result\" = 2,\n}\n\n/** @hidden */\nexport class FetchResult {\n public feedResponse: any;\n public fetchResultType: FetchResultType;\n public error: any;\n /**\n * Wraps fetch results for the document producer.\n * This allows the document producer to buffer exceptions so that actual results don't get flushed during splits.\n *\n * @param feedReponse - The response the document producer got back on a successful fetch\n * @param error - The exception meant to be buffered on an unsuccessful fetch\n * @hidden\n */\n constructor(feedResponse: unknown, error: unknown) {\n // TODO: feedResponse/error\n if (feedResponse !== undefined) {\n this.feedResponse = feedResponse;\n this.fetchResultType = FetchResultType.Result;\n } else {\n this.error = error;\n this.fetchResultType = FetchResultType.Exception;\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { PartitionKeyRange, Resource } from \"../client\";\nimport { ClientContext } from \"../ClientContext\";\nimport {\n Constants,\n getIdFromLink,\n getPathFromLink,\n ResourceType,\n StatusCodes,\n SubStatusCodes,\n} from \"../common\";\nimport { FeedOptions } from \"../request\";\nimport { Response } from \"../request\";\nimport { DefaultQueryExecutionContext } from \"./defaultQueryExecutionContext\";\nimport { FetchResult, FetchResultType } from \"./FetchResult\";\nimport { CosmosHeaders, getInitialHeader, mergeHeaders } from \"./headerUtils\";\nimport { SqlQuerySpec } from \"./index\";\n\n/** @hidden */\nexport class DocumentProducer {\n private collectionLink: string;\n private query: string | SqlQuerySpec;\n public targetPartitionKeyRange: PartitionKeyRange;\n public fetchResults: FetchResult[];\n public allFetched: boolean;\n private err: Error;\n public previousContinuationToken: string;\n public continuationToken: string;\n public generation: number = 0;\n private respHeaders: CosmosHeaders;\n private internalExecutionContext: DefaultQueryExecutionContext;\n\n /**\n * Provides the Target Partition Range Query Execution Context.\n * @param clientContext - The service endpoint to use to create the client.\n * @param collectionLink - Represents collection link\n * @param query - A SQL query.\n * @param targetPartitionKeyRange - Query Target Partition key Range\n * @hidden\n */\n constructor(\n private clientContext: ClientContext,\n collectionLink: string,\n query: SqlQuerySpec,\n targetPartitionKeyRange: PartitionKeyRange,\n options: FeedOptions\n ) {\n // TODO: any options\n this.collectionLink = collectionLink;\n this.query = query;\n this.targetPartitionKeyRange = targetPartitionKeyRange;\n this.fetchResults = [];\n\n this.allFetched = false;\n this.err = undefined;\n\n this.previousContinuationToken = undefined;\n this.continuationToken = undefined;\n this.respHeaders = getInitialHeader();\n\n this.internalExecutionContext = new DefaultQueryExecutionContext(options, this.fetchFunction);\n }\n /**\n * Synchronously gives the contiguous buffered results (stops at the first non result) if any\n * @returns buffered current items if any\n * @hidden\n */\n public peekBufferedItems(): any[] {\n const bufferedResults = [];\n for (let i = 0, done = false; i < this.fetchResults.length && !done; i++) {\n const fetchResult = this.fetchResults[i];\n switch (fetchResult.fetchResultType) {\n case FetchResultType.Done:\n done = true;\n break;\n case FetchResultType.Exception:\n done = true;\n break;\n case FetchResultType.Result:\n bufferedResults.push(fetchResult.feedResponse);\n break;\n }\n }\n return bufferedResults;\n }\n\n public fetchFunction = async (options: FeedOptions): Promise<Response<Resource>> => {\n const path = getPathFromLink(this.collectionLink, ResourceType.item);\n\n const id = getIdFromLink(this.collectionLink);\n\n return this.clientContext.queryFeed({\n path,\n resourceType: ResourceType.item,\n resourceId: id,\n resultFn: (result: any) => result.Documents,\n\n query: this.query,\n options,\n\n partitionKeyRangeId: this.targetPartitionKeyRange[\"id\"],\n });\n };\n\n public hasMoreResults(): boolean {\n return this.internalExecutionContext.hasMoreResults() || this.fetchResults.length !== 0;\n }\n\n public gotSplit(): boolean {\n const fetchResult = this.fetchResults[0];\n if (fetchResult.fetchResultType === FetchResultType.Exception) {\n if (DocumentProducer._needPartitionKeyRangeCacheRefresh(fetchResult.error)) {\n return true;\n }\n }\n\n return false;\n }\n\n private _getAndResetActiveResponseHeaders(): CosmosHeaders {\n const ret = this.respHeaders;\n this.respHeaders = getInitialHeader();\n return ret;\n }\n\n private _updateStates(err: any, allFetched: boolean): void {\n // TODO: any Error\n if (err) {\n this.err = err;\n return;\n }\n if (allFetched) {\n this.allFetched = true;\n }\n if (this.internalExecutionContext.continuationToken === this.continuationToken) {\n // nothing changed\n return;\n }\n this.previousContinuationToken = this.continuationToken;\n this.continuationToken = this.internalExecutionContext.continuationToken;\n }\n\n private static _needPartitionKeyRangeCacheRefresh(error: any): boolean {\n // TODO: error\n return (\n error.code === StatusCodes.Gone &&\n \"substatus\" in error &&\n error[\"substatus\"] === SubStatusCodes.PartitionKeyRangeGone\n );\n }\n\n /**\n * Fetches and bufferes the next page of results and executes the given callback\n */\n public async bufferMore(): Promise<Response<any>> {\n if (this.err) {\n throw this.err;\n }\n\n try {\n const { result: resources, headers: headerResponse } =\n await this.internalExecutionContext.fetchMore();\n ++this.generation;\n this._updateStates(undefined, resources === undefined);\n if (resources !== undefined) {\n // some more results\n resources.forEach((element: any) => {\n // TODO: resources any\n this.fetchResults.push(new FetchResult(element, undefined));\n });\n }\n\n // need to modify the header response so that the query metrics are per partition\n if (headerResponse != null && Constants.HttpHeaders.QueryMetrics in headerResponse) {\n // \"0\" is the default partition before one is actually assigned.\n const queryMetrics = headerResponse[Constants.HttpHeaders.QueryMetrics][\"0\"];\n\n // Wraping query metrics in a object where the keys are the partition key range.\n headerResponse[Constants.HttpHeaders.QueryMetrics] = {};\n headerResponse[Constants.HttpHeaders.QueryMetrics][this.targetPartitionKeyRange.id] =\n queryMetrics;\n }\n\n return { result: resources, headers: headerResponse };\n } catch (err: any) {\n // TODO: any error\n if (DocumentProducer._needPartitionKeyRangeCacheRefresh(err)) {\n // Split just happend\n // Buffer the error so the execution context can still get the feedResponses in the itemBuffer\n const bufferedError = new FetchResult(undefined, err);\n this.fetchResults.push(bufferedError);\n // Putting a dummy result so that the rest of code flows\n return { result: [bufferedError], headers: err.headers };\n } else {\n this._updateStates(err, err.resources === undefined);\n throw err;\n }\n }\n }\n\n /**\n * Synchronously gives the bufferend current item if any\n * @returns buffered current item if any\n * @hidden\n */\n public getTargetParitionKeyRange(): PartitionKeyRange {\n return this.targetPartitionKeyRange;\n }\n\n /**\n * Fetches the next element in the DocumentProducer.\n */\n public async nextItem(): Promise<Response<any>> {\n if (this.err) {\n this._updateStates(this.err, undefined);\n throw this.err;\n }\n\n try {\n const { result, headers } = await this.current();\n\n const fetchResult = this.fetchResults.shift();\n this._updateStates(undefined, result === undefined);\n if (fetchResult.feedResponse !== result) {\n throw new Error(`Expected ${fetchResult.feedResponse} to equal ${result}`);\n }\n switch (fetchResult.fetchResultType) {\n case FetchResultType.Done:\n return { result: undefined, headers };\n case FetchResultType.Exception:\n fetchResult.error.headers = headers;\n throw fetchResult.error;\n case FetchResultType.Result:\n return { result: fetchResult.feedResponse, headers };\n }\n } catch (err: any) {\n this._updateStates(err, err.item === undefined);\n throw err;\n }\n }\n\n /**\n * Retrieve the current element on the DocumentProducer.\n */\n public async current(): Promise<Response<any>> {\n // If something is buffered just give that\n if (this.fetchResults.length > 0) {\n const fetchResult = this.fetchResults[0];\n // Need to unwrap fetch results\n switch (fetchResult.fetchResultType) {\n case FetchResultType.Done:\n return {\n result: undefined,\n headers: this._getAndResetActiveResponseHeaders(),\n };\n case FetchResultType.Exception:\n fetchResult.error.headers = this._getAndResetActiveResponseHeaders();\n throw fetchResult.error;\n case FetchResultType.Result:\n return {\n result: fetchResult.feedResponse,\n headers: this._getAndResetActiveResponseHeaders(),\n };\n }\n }\n\n // If there isn't anymore items left to fetch then let the user know.\n if (this.allFetched) {\n return {\n result: undefined,\n headers: this._getAndResetActiveResponseHeaders(),\n };\n }\n\n // If there are no more bufferd items and there are still items to be fetched then buffer more\n const { result, headers } = await this.bufferMore();\n mergeHeaders(this.respHeaders, headers);\n if (result === undefined) {\n return { result: undefined, headers: this.respHeaders };\n }\n return this.current();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { PartitionKeyRange } from \"../client/Container/PartitionKeyRange\";\nimport { Constants } from \"../common\";\nimport { QueryRange as ResponseQueryRange } from \"../request/ErrorResponse\";\n\n/** @hidden */\nexport class QueryRange {\n public min: string;\n public max: string;\n public isMinInclusive: boolean;\n public isMaxInclusive: boolean;\n\n /**\n * Represents a QueryRange.\n *\n * @param rangeMin - min\n * @param rangeMin - max\n * @param isMinInclusive - isMinInclusive\n * @param isMaxInclusive - isMaxInclusive\n * @hidden\n */\n constructor(\n rangeMin: string,\n rangeMax: string,\n isMinInclusive: boolean,\n isMaxInclusive: boolean\n ) {\n this.min = rangeMin;\n this.max = rangeMax;\n this.isMinInclusive = isMinInclusive;\n this.isMaxInclusive = isMaxInclusive;\n }\n public overlaps(other: QueryRange): boolean {\n const range1 = this; // eslint-disable-line @typescript-eslint/no-this-alias\n const range2 = other;\n if (range1 === undefined || range2 === undefined) {\n return false;\n }\n if (range1.isEmpty() || range2.isEmpty()) {\n return false;\n }\n\n if (range1.min <= range2.max || range2.min <= range1.max) {\n if (\n (range1.min === range2.max && !(range1.isMinInclusive && range2.isMaxInclusive)) ||\n (range2.min === range1.max && !(range2.isMinInclusive && range1.isMaxInclusive))\n ) {\n return false;\n }\n return true;\n }\n return false;\n }\n\n public isFullRange(): boolean {\n return (\n this.min === Constants.EffectivePartitionKeyConstants.MinimumInclusiveEffectivePartitionKey &&\n this.max === Constants.EffectivePartitionKeyConstants.MaximumExclusiveEffectivePartitionKey &&\n this.isMinInclusive === true &&\n this.isMaxInclusive === false\n );\n }\n\n public isEmpty(): boolean {\n return !(this.isMinInclusive && this.isMaxInclusive) && this.min === this.max;\n }\n /**\n * Parse a QueryRange from a partitionKeyRange\n * @returns QueryRange\n * @hidden\n */\n public static parsePartitionKeyRange(partitionKeyRange: PartitionKeyRange): QueryRange {\n return new QueryRange(\n partitionKeyRange[Constants.PartitionKeyRange.MinInclusive],\n partitionKeyRange[Constants.PartitionKeyRange.MaxExclusive],\n true,\n false\n );\n }\n /**\n * Parse a QueryRange from a dictionary\n * @returns QueryRange\n * @hidden\n */\n public static parseFromDict(queryRangeDict: ResponseQueryRange): QueryRange {\n return new QueryRange(\n queryRangeDict.min,\n queryRangeDict.max,\n queryRangeDict.isMinInclusive,\n queryRangeDict.isMaxInclusive\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { PartitionKeyRange } from \"../client\";\nimport { Constants } from \"../common\";\nimport { QueryRange } from \"./QueryRange\";\n\n/** @hidden */\nexport class InMemoryCollectionRoutingMap {\n private orderedPartitionKeyRanges: PartitionKeyRange[];\n private orderedRanges: QueryRange[];\n // TODO: chrande made this public, even though it is implementation detail for a test\n public orderedPartitionInfo: unknown;\n\n /**\n * Represents a InMemoryCollectionRoutingMap Object,\n * Stores partition key ranges in an efficient way with some additional information and provides\n * convenience methods for working with set of ranges.\n */\n constructor(orderedPartitionKeyRanges: PartitionKeyRange[], orderedPartitionInfo: unknown) {\n this.orderedPartitionKeyRanges = orderedPartitionKeyRanges;\n this.orderedRanges = orderedPartitionKeyRanges.map((pkr) => {\n return new QueryRange(\n pkr[Constants.PartitionKeyRange.MinInclusive],\n pkr[Constants.PartitionKeyRange.MaxExclusive],\n true,\n false\n );\n });\n this.orderedPartitionInfo = orderedPartitionInfo;\n }\n public getOrderedParitionKeyRanges(): PartitionKeyRange[] {\n return this.orderedPartitionKeyRanges;\n }\n\n public getOverlappingRanges(providedQueryRanges: QueryRange | QueryRange[]): PartitionKeyRange[] {\n // TODO This code has all kinds of smells. Multiple iterations and sorts just to grab overlapping ranges\n // stfaul attempted to bring it down to one for-loop and failed\n const pqr: QueryRange[] = Array.isArray(providedQueryRanges)\n ? providedQueryRanges\n : [providedQueryRanges];\n const minToPartitionRange: any = {}; // TODO: any\n\n // this for loop doesn't invoke any async callback\n for (const queryRange of pqr) {\n if (queryRange.isEmpty()) {\n continue;\n }\n\n if (queryRange.isFullRange()) {\n return this.orderedPartitionKeyRanges;\n }\n\n const minIndex = this.orderedRanges.findIndex((range) => {\n if (queryRange.min > range.min && queryRange.min < range.max) {\n return true;\n }\n if (queryRange.min === range.min) {\n return true;\n }\n if (queryRange.min === range.max) {\n return true;\n }\n });\n\n if (minIndex < 0) {\n throw new Error(\n \"error in collection routing map, queried value is less than the start range.\"\n );\n }\n\n // Start at the end and work backwards\n let maxIndex: number;\n for (let i = this.orderedRanges.length - 1; i >= 0; i--) {\n const range = this.orderedRanges[i];\n if (queryRange.max > range.min && queryRange.max < range.max) {\n maxIndex = i;\n break;\n }\n if (queryRange.max === range.min) {\n maxIndex = i;\n break;\n }\n if (queryRange.max === range.max) {\n maxIndex = i;\n break;\n }\n }\n\n if (maxIndex > this.orderedRanges.length) {\n throw new Error(\n \"error in collection routing map, queried value is greater than the end range.\"\n );\n }\n\n for (let j = minIndex; j < maxIndex + 1; j++) {\n if (queryRange.overlaps(this.orderedRanges[j])) {\n minToPartitionRange[\n this.orderedPartitionKeyRanges[j][Constants.PartitionKeyRange.MinInclusive]\n ] = this.orderedPartitionKeyRanges[j];\n }\n }\n }\n\n const overlappingPartitionKeyRanges = Object.keys(minToPartitionRange).map(\n (k) => minToPartitionRange[k]\n );\n\n return overlappingPartitionKeyRanges.sort((a, b) => {\n return a[Constants.PartitionKeyRange.MinInclusive].localeCompare(\n b[Constants.PartitionKeyRange.MinInclusive]\n );\n });\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"../common/constants\";\nimport { InMemoryCollectionRoutingMap } from \"./inMemoryCollectionRoutingMap\";\n\n/**\n * @hidden\n */\nfunction compareRanges(a: any, b: any): 0 | 1 | -1 {\n const aVal = a[0][Constants.PartitionKeyRange.MinInclusive];\n const bVal = b[0][Constants.PartitionKeyRange.MinInclusive];\n if (aVal > bVal) {\n return 1;\n }\n if (aVal < bVal) {\n return -1;\n }\n return 0;\n}\n\n/** @hidden */\nexport function createCompleteRoutingMap(\n partitionKeyRangeInfoTuppleList: any[]\n): InMemoryCollectionRoutingMap {\n const rangeById: any = {}; // TODO: any\n const rangeByInfo: any = {}; // TODO: any\n\n let sortedRanges = [];\n\n // the for loop doesn't invoke any async callback\n for (const r of partitionKeyRangeInfoTuppleList) {\n rangeById[r[0][Constants.PartitionKeyRange.Id]] = r;\n rangeByInfo[r[1]] = r[0];\n sortedRanges.push(r);\n }\n\n sortedRanges = sortedRanges.sort(compareRanges);\n const partitionKeyOrderedRange = sortedRanges.map((r) => r[0]);\n const orderedPartitionInfo = sortedRanges.map((r) => r[1]);\n\n if (!isCompleteSetOfRange(partitionKeyOrderedRange)) {\n return undefined;\n }\n return new InMemoryCollectionRoutingMap(partitionKeyOrderedRange, orderedPartitionInfo);\n}\n\n/**\n * @hidden\n */\nfunction isCompleteSetOfRange(partitionKeyOrderedRange: any): boolean {\n // TODO: any\n let isComplete = false;\n if (partitionKeyOrderedRange.length > 0) {\n const firstRange = partitionKeyOrderedRange[0];\n const lastRange = partitionKeyOrderedRange[partitionKeyOrderedRange.length - 1];\n isComplete =\n firstRange[Constants.PartitionKeyRange.MinInclusive] ===\n Constants.EffectivePartitionKeyConstants.MinimumInclusiveEffectivePartitionKey;\n isComplete =\n isComplete &&\n lastRange[Constants.PartitionKeyRange.MaxExclusive] ===\n Constants.EffectivePartitionKeyConstants.MaximumExclusiveEffectivePartitionKey;\n\n for (let i = 1; i < partitionKeyOrderedRange.length; i++) {\n const previousRange = partitionKeyOrderedRange[i - 1];\n const currentRange = partitionKeyOrderedRange[i];\n isComplete =\n isComplete &&\n previousRange[Constants.PartitionKeyRange.MaxExclusive] ===\n currentRange[Constants.PartitionKeyRange.MinInclusive];\n\n if (!isComplete) {\n if (\n previousRange[Constants.PartitionKeyRange.MaxExclusive] >\n currentRange[Constants.PartitionKeyRange.MinInclusive]\n ) {\n throw Error(\"Ranges overlap\");\n }\n break;\n }\n }\n }\n return isComplete;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { PartitionKeyRange } from \"../client/Container/PartitionKeyRange\";\nimport { ClientContext } from \"../ClientContext\";\nimport { getIdFromLink } from \"../common/helper\";\nimport { createCompleteRoutingMap } from \"./CollectionRoutingMapFactory\";\nimport { InMemoryCollectionRoutingMap } from \"./inMemoryCollectionRoutingMap\";\nimport { QueryRange } from \"./QueryRange\";\n\n/** @hidden */\nexport class PartitionKeyRangeCache {\n private collectionRoutingMapByCollectionId: {\n [key: string]: Promise<InMemoryCollectionRoutingMap>;\n };\n\n constructor(private clientContext: ClientContext) {\n this.collectionRoutingMapByCollectionId = {};\n }\n /**\n * Finds or Instantiates the requested Collection Routing Map\n * @param collectionLink - Requested collectionLink\n * @hidden\n */\n public async onCollectionRoutingMap(\n collectionLink: string\n ): Promise<InMemoryCollectionRoutingMap> {\n const collectionId = getIdFromLink(collectionLink);\n if (this.collectionRoutingMapByCollectionId[collectionId] === undefined) {\n this.collectionRoutingMapByCollectionId[collectionId] =\n this.requestCollectionRoutingMap(collectionLink);\n }\n return this.collectionRoutingMapByCollectionId[collectionId];\n }\n\n /**\n * Given the query ranges and a collection, invokes the callback on the list of overlapping partition key ranges\n * @hidden\n */\n public async getOverlappingRanges(\n collectionLink: string,\n queryRange: QueryRange\n ): Promise<PartitionKeyRange[]> {\n const crm = await this.onCollectionRoutingMap(collectionLink);\n return crm.getOverlappingRanges(queryRange);\n }\n\n private async requestCollectionRoutingMap(\n collectionLink: string\n ): Promise<InMemoryCollectionRoutingMap> {\n const { resources } = await this.clientContext\n .queryPartitionKeyRanges(collectionLink)\n .fetchAll();\n return createCompleteRoutingMap(resources.map((r) => [r, true]));\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../ClientContext\";\nimport { Constants } from \"../common/constants\";\nimport { PartitionKeyRangeCache } from \"./partitionKeyRangeCache\";\nimport { QueryRange } from \"./QueryRange\";\n\n/** @hidden */\nexport const PARITIONKEYRANGE = Constants.PartitionKeyRange;\n\n/** @hidden */\nexport class SmartRoutingMapProvider {\n private partitionKeyRangeCache: PartitionKeyRangeCache;\n\n constructor(clientContext: ClientContext) {\n this.partitionKeyRangeCache = new PartitionKeyRangeCache(clientContext);\n }\n private static _secondRangeIsAfterFirstRange(range1: QueryRange, range2: QueryRange): boolean {\n if (typeof range1.max === \"undefined\") {\n throw new Error(\"range1 must have max\");\n }\n\n if (typeof range2.min === \"undefined\") {\n throw new Error(\"range2 must have min\");\n }\n\n if (range1.max > range2.min) {\n // r.min < #previous_r.max\n return false;\n } else {\n if (range1.max === range2.min && range1.isMaxInclusive && range2.isMinInclusive) {\n // the inclusive ending endpoint of previous_r is the same as the inclusive beginning endpoint of r\n // they share a point\n return false;\n }\n return true;\n }\n }\n\n private static _isSortedAndNonOverlapping(ranges: QueryRange[]): boolean {\n for (let idx = 1; idx < ranges.length; idx++) {\n const previousR = ranges[idx - 1];\n const r = ranges[idx];\n if (!this._secondRangeIsAfterFirstRange(previousR, r)) {\n return false;\n }\n }\n return true;\n }\n\n private static _stringMax(a: string, b: string): string {\n return a >= b ? a : b;\n }\n\n private static _stringCompare(a: string, b: string): 1 | 0 | -1 {\n return a === b ? 0 : a > b ? 1 : -1;\n }\n\n private static _subtractRange(r: QueryRange, partitionKeyRange: any): QueryRange {\n const left = this._stringMax(partitionKeyRange[PARITIONKEYRANGE.MaxExclusive], r.min);\n const leftInclusive = this._stringCompare(left, r.min) === 0 ? r.isMinInclusive : false;\n return new QueryRange(left, r.max, leftInclusive, r.isMaxInclusive);\n }\n\n /**\n * Given the sorted ranges and a collection, invokes the callback on the list of overlapping partition key ranges\n * @param callback - Function execute on the overlapping partition key ranges result,\n * takes two parameters error, partition key ranges\n * @hidden\n */\n public async getOverlappingRanges(\n collectionLink: string,\n sortedRanges: QueryRange[]\n ): Promise<any[]> {\n // validate if the list is non- overlapping and sorted TODO: any PartitionKeyRanges\n if (!SmartRoutingMapProvider._isSortedAndNonOverlapping(sortedRanges)) {\n throw new Error(\"the list of ranges is not a non-overlapping sorted ranges\");\n }\n\n let partitionKeyRanges: any[] = []; // TODO: any ParitionKeyRanges\n\n if (sortedRanges.length === 0) {\n return partitionKeyRanges;\n }\n\n const collectionRoutingMap = await this.partitionKeyRangeCache.onCollectionRoutingMap(\n collectionLink\n );\n\n let index = 0;\n let currentProvidedRange = sortedRanges[index];\n for (;;) {\n if (currentProvidedRange.isEmpty()) {\n // skip and go to the next item\n if (++index >= sortedRanges.length) {\n return partitionKeyRanges;\n }\n currentProvidedRange = sortedRanges[index];\n continue;\n }\n\n let queryRange;\n if (partitionKeyRanges.length > 0) {\n queryRange = SmartRoutingMapProvider._subtractRange(\n currentProvidedRange,\n partitionKeyRanges[partitionKeyRanges.length - 1]\n );\n } else {\n queryRange = currentProvidedRange;\n }\n\n const overlappingRanges = collectionRoutingMap.getOverlappingRanges(queryRange);\n if (overlappingRanges.length <= 0) {\n throw new Error(`error: returned overlapping ranges for queryRange ${queryRange} is empty`);\n }\n partitionKeyRanges = partitionKeyRanges.concat(overlappingRanges);\n\n const lastKnownTargetRange = QueryRange.parsePartitionKeyRange(\n partitionKeyRanges[partitionKeyRanges.length - 1]\n );\n if (!lastKnownTargetRange) {\n throw new Error(\"expected lastKnowTargetRange to be truthy\");\n }\n // the overlapping ranges must contain the requested range\n\n if (\n SmartRoutingMapProvider._stringCompare(currentProvidedRange.max, lastKnownTargetRange.max) >\n 0\n ) {\n throw new Error(`error: returned overlapping ranges ${overlappingRanges} \\\n does not contain the requested range ${queryRange}`);\n }\n\n // the current range is contained in partitionKeyRanges just move forward\n if (++index >= sortedRanges.length) {\n return partitionKeyRanges;\n }\n currentProvidedRange = sortedRanges[index];\n\n while (\n SmartRoutingMapProvider._stringCompare(\n currentProvidedRange.max,\n lastKnownTargetRange.max\n ) <= 0\n ) {\n // the current range is covered too.just move forward\n if (++index >= sortedRanges.length) {\n return partitionKeyRanges;\n }\n currentProvidedRange = sortedRanges[index];\n }\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport PriorityQueue from \"priorityqueuejs\";\nimport semaphore from \"semaphore\";\nimport { ClientContext } from \"../ClientContext\";\nimport { AzureLogger, createClientLogger } from \"@azure/logger\";\nimport { StatusCodes, SubStatusCodes } from \"../common/statusCodes\";\nimport { FeedOptions, Response } from \"../request\";\nimport { PartitionedQueryExecutionInfo } from \"../request/ErrorResponse\";\nimport { QueryRange } from \"../routing/QueryRange\";\nimport { SmartRoutingMapProvider } from \"../routing/smartRoutingMapProvider\";\nimport { CosmosHeaders } from \"./CosmosHeaders\";\nimport { DocumentProducer } from \"./documentProducer\";\nimport { ExecutionContext } from \"./ExecutionContext\";\nimport { getInitialHeader, mergeHeaders } from \"./headerUtils\";\nimport { SqlQuerySpec } from \"./SqlQuerySpec\";\n\n/** @hidden */\nconst logger: AzureLogger = createClientLogger(\"parallelQueryExecutionContextBase\");\n\n/** @hidden */\nexport enum ParallelQueryExecutionContextBaseStates {\n started = \"started\",\n inProgress = \"inProgress\",\n ended = \"ended\",\n}\n\n/** @hidden */\nexport abstract class ParallelQueryExecutionContextBase implements ExecutionContext {\n private err: any;\n private state: any;\n private static STATES = ParallelQueryExecutionContextBaseStates;\n private routingProvider: SmartRoutingMapProvider;\n protected sortOrders: any;\n private requestContinuation: any;\n private respHeaders: CosmosHeaders;\n private orderByPQ: PriorityQueue<DocumentProducer>;\n private sem: any;\n private waitingForInternalExecutionContexts: number;\n /**\n * Provides the ParallelQueryExecutionContextBase.\n * This is the base class that ParallelQueryExecutionContext and OrderByQueryExecutionContext will derive from.\n *\n * When handling a parallelized query, it instantiates one instance of\n * DocumentProcuder per target partition key range and aggregates the result of each.\n *\n * @param clientContext - The service endpoint to use to create the client.\n * @param collectionLink - The Collection Link\n * @param options - Represents the feed options.\n * @param partitionedQueryExecutionInfo - PartitionedQueryExecutionInfo\n * @hidden\n */\n constructor(\n private clientContext: ClientContext,\n private collectionLink: string,\n private query: string | SqlQuerySpec,\n private options: FeedOptions,\n private partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo\n ) {\n this.clientContext = clientContext;\n this.collectionLink = collectionLink;\n this.query = query;\n this.options = options;\n this.partitionedQueryExecutionInfo = partitionedQueryExecutionInfo;\n\n this.err = undefined;\n this.state = ParallelQueryExecutionContextBase.STATES.started;\n this.routingProvider = new SmartRoutingMapProvider(this.clientContext);\n this.sortOrders = this.partitionedQueryExecutionInfo.queryInfo.orderBy;\n\n this.requestContinuation = options ? options.continuationToken || options.continuation : null;\n // response headers of undergoing operation\n this.respHeaders = getInitialHeader();\n\n // Make priority queue for documentProducers\n // The comparator is supplied by the derived class\n this.orderByPQ = new PriorityQueue<DocumentProducer>(\n (a: DocumentProducer, b: DocumentProducer) => this.documentProducerComparator(b, a)\n );\n // Creating the documentProducers\n this.sem = semaphore(1);\n // Creating callback for semaphore\n // TODO: Code smell\n const createDocumentProducersAndFillUpPriorityQueueFunc = async (): Promise<void> => {\n // ensure the lock is released after finishing up\n try {\n const targetPartitionRanges = await this._onTargetPartitionRanges();\n this.waitingForInternalExecutionContexts = targetPartitionRanges.length;\n\n const maxDegreeOfParallelism =\n options.maxDegreeOfParallelism === undefined || options.maxDegreeOfParallelism < 1\n ? targetPartitionRanges.length\n : Math.min(options.maxDegreeOfParallelism, targetPartitionRanges.length);\n\n logger.info(\n \"Query starting against \" +\n targetPartitionRanges.length +\n \" ranges with parallelism of \" +\n maxDegreeOfParallelism\n );\n\n const parallelismSem = semaphore(maxDegreeOfParallelism);\n let filteredPartitionKeyRanges = [];\n // The document producers generated from filteredPartitionKeyRanges\n const targetPartitionQueryExecutionContextList: DocumentProducer[] = [];\n\n if (this.requestContinuation) {\n throw new Error(\"Continuation tokens are not yet supported for cross partition queries\");\n } else {\n filteredPartitionKeyRanges = targetPartitionRanges;\n }\n\n // Create one documentProducer for each partitionTargetRange\n filteredPartitionKeyRanges.forEach((partitionTargetRange: any) => {\n // TODO: any partitionTargetRange\n // no async callback\n targetPartitionQueryExecutionContextList.push(\n this._createTargetPartitionQueryExecutionContext(partitionTargetRange)\n );\n });\n\n // Fill up our priority queue with documentProducers\n targetPartitionQueryExecutionContextList.forEach((documentProducer): void => {\n // has async callback\n const throttledFunc = async (): Promise<void> => {\n try {\n const { result: document, headers } = await documentProducer.current();\n this._mergeWithActiveResponseHeaders(headers);\n if (document === undefined) {\n // no results on this one\n return;\n }\n // if there are matching results in the target ex range add it to the priority queue\n try {\n this.orderByPQ.enq(documentProducer);\n } catch (e: any) {\n this.err = e;\n }\n } catch (err: any) {\n this._mergeWithActiveResponseHeaders(err.headers);\n this.err = err;\n } finally {\n parallelismSem.leave();\n this._decrementInitiationLock();\n }\n };\n parallelismSem.take(throttledFunc);\n });\n } catch (err: any) {\n this.err = err;\n // release the lock\n this.sem.leave();\n return;\n }\n };\n this.sem.take(createDocumentProducersAndFillUpPriorityQueueFunc);\n }\n\n protected abstract documentProducerComparator(\n dp1: DocumentProducer,\n dp2: DocumentProducer\n ): number;\n\n private _decrementInitiationLock(): void {\n // decrements waitingForInternalExecutionContexts\n // if waitingForInternalExecutionContexts reaches 0 releases the semaphore and changes the state\n this.waitingForInternalExecutionContexts = this.waitingForInternalExecutionContexts - 1;\n if (this.waitingForInternalExecutionContexts === 0) {\n this.sem.leave();\n if (this.orderByPQ.size() === 0) {\n this.state = ParallelQueryExecutionContextBase.STATES.inProgress;\n }\n }\n }\n\n private _mergeWithActiveResponseHeaders(headers: CosmosHeaders): void {\n mergeHeaders(this.respHeaders, headers);\n }\n\n private _getAndResetActiveResponseHeaders(): CosmosHeaders {\n const ret = this.respHeaders;\n this.respHeaders = getInitialHeader();\n return ret;\n }\n\n private async _onTargetPartitionRanges(): Promise<any[]> {\n // invokes the callback when the target partition ranges are ready\n const parsedRanges = this.partitionedQueryExecutionInfo.queryRanges;\n const queryRanges = parsedRanges.map((item) => QueryRange.parseFromDict(item));\n return this.routingProvider.getOverlappingRanges(this.collectionLink, queryRanges);\n }\n\n /**\n * Gets the replacement ranges for a partitionkeyrange that has been split\n */\n private async _getReplacementPartitionKeyRanges(\n documentProducer: DocumentProducer\n ): Promise<any[]> {\n const partitionKeyRange = documentProducer.targetPartitionKeyRange;\n // Download the new routing map\n this.routingProvider = new SmartRoutingMapProvider(this.clientContext);\n // Get the queryRange that relates to this partitionKeyRange\n const queryRange = QueryRange.parsePartitionKeyRange(partitionKeyRange);\n return this.routingProvider.getOverlappingRanges(this.collectionLink, [queryRange]);\n }\n\n // TODO: P0 Code smell - can barely tell what this is doing\n /**\n * Removes the current document producer from the priqueue,\n * replaces that document producer with child document producers,\n * then reexecutes the originFunction with the corrrected executionContext\n */\n private async _repairExecutionContext(originFunction: any): Promise<void> {\n // TODO: any\n // Get the replacement ranges\n // Removing the invalid documentProducer from the orderByPQ\n const parentDocumentProducer = this.orderByPQ.deq();\n try {\n const replacementPartitionKeyRanges: any[] = await this._getReplacementPartitionKeyRanges(\n parentDocumentProducer\n );\n const replacementDocumentProducers: DocumentProducer[] = [];\n // Create the replacement documentProducers\n replacementPartitionKeyRanges.forEach((partitionKeyRange) => {\n // Create replacment document producers with the parent's continuationToken\n const replacementDocumentProducer = this._createTargetPartitionQueryExecutionContext(\n partitionKeyRange,\n parentDocumentProducer.continuationToken\n );\n replacementDocumentProducers.push(replacementDocumentProducer);\n });\n // We need to check if the documentProducers even has anything left to fetch from before enqueing them\n const checkAndEnqueueDocumentProducer = async (\n documentProducerToCheck: DocumentProducer,\n checkNextDocumentProducerCallback: any\n ): Promise<void> => {\n try {\n const { result: afterItem } = await documentProducerToCheck.current();\n if (afterItem === undefined) {\n // no more results left in this document producer, so we don't enqueue it\n } else {\n // Safe to put document producer back in the queue\n this.orderByPQ.enq(documentProducerToCheck);\n }\n\n await checkNextDocumentProducerCallback();\n } catch (err: any) {\n this.err = err;\n return;\n }\n };\n const checkAndEnqueueDocumentProducers = async (rdp: DocumentProducer[]): Promise<any> => {\n if (rdp.length > 0) {\n // We still have a replacementDocumentProducer to check\n const replacementDocumentProducer = rdp.shift();\n await checkAndEnqueueDocumentProducer(replacementDocumentProducer, async () => {\n await checkAndEnqueueDocumentProducers(rdp);\n });\n } else {\n // reexecutes the originFunction with the corrrected executionContext\n return originFunction();\n }\n };\n // Invoke the recursive function to get the ball rolling\n await checkAndEnqueueDocumentProducers(replacementDocumentProducers);\n } catch (err: any) {\n this.err = err;\n throw err;\n }\n }\n\n private static _needPartitionKeyRangeCacheRefresh(error: any): boolean {\n // TODO: any error\n return (\n error.code === StatusCodes.Gone &&\n \"substatus\" in error &&\n error[\"substatus\"] === SubStatusCodes.PartitionKeyRangeGone\n );\n }\n\n /**\n * Checks to see if the executionContext needs to be repaired.\n * if so it repairs the execution context and executes the ifCallback,\n * else it continues with the current execution context and executes the elseCallback\n */\n private async _repairExecutionContextIfNeeded(ifCallback: any, elseCallback: any): Promise<void> {\n const documentProducer = this.orderByPQ.peek();\n // Check if split happened\n try {\n await documentProducer.current();\n elseCallback();\n } catch (err: any) {\n if (ParallelQueryExecutionContextBase._needPartitionKeyRangeCacheRefresh(err)) {\n // Split has happened so we need to repair execution context before continueing\n return this._repairExecutionContext(ifCallback);\n } else {\n // Something actually bad happened ...\n this.err = err;\n throw err;\n }\n }\n }\n\n /**\n * Fetches the next element in the ParallelQueryExecutionContextBase.\n */\n public async nextItem(): Promise<Response<any>> {\n if (this.err) {\n // if there is a prior error return error\n throw this.err;\n }\n return new Promise<Response<any>>((resolve, reject) => {\n this.sem.take(() => {\n // NOTE: lock must be released before invoking quitting\n if (this.err) {\n // release the lock before invoking callback\n this.sem.leave();\n // if there is a prior error return error\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n }\n\n if (this.orderByPQ.size() === 0) {\n // there is no more results\n this.state = ParallelQueryExecutionContextBase.STATES.ended;\n // release the lock before invoking callback\n this.sem.leave();\n return resolve({\n result: undefined,\n headers: this._getAndResetActiveResponseHeaders(),\n });\n }\n\n const ifCallback = (): void => {\n // Release the semaphore to avoid deadlock\n this.sem.leave();\n // Reexcute the function\n return resolve(this.nextItem());\n };\n const elseCallback = async (): Promise<void> => {\n let documentProducer: DocumentProducer;\n try {\n documentProducer = this.orderByPQ.deq();\n } catch (e: any) {\n // if comparing elements of the priority queue throws exception\n // set that error and return error\n this.err = e;\n // release the lock before invoking callback\n this.sem.leave();\n this.err.headers = this._getAndResetActiveResponseHeaders();\n reject(this.err);\n return;\n }\n\n let item: any;\n let headers: CosmosHeaders;\n try {\n const response = await documentProducer.nextItem();\n item = response.result;\n headers = response.headers;\n this._mergeWithActiveResponseHeaders(headers);\n if (item === undefined) {\n // this should never happen\n // because the documentProducer already has buffered an item\n // assert item !== undefined\n this.err = new Error(\n `Extracted DocumentProducer from the priority queue \\\n doesn't have any buffered item!`\n );\n // release the lock before invoking callback\n this.sem.leave();\n return resolve({\n result: undefined,\n headers: this._getAndResetActiveResponseHeaders(),\n });\n }\n } catch (err: any) {\n this.err = new Error(\n `Extracted DocumentProducer from the priority queue fails to get the \\\n buffered item. Due to ${JSON.stringify(err)}`\n );\n this.err.headers = this._getAndResetActiveResponseHeaders();\n // release the lock before invoking callback\n this.sem.leave();\n reject(this.err);\n return;\n }\n\n // we need to put back the document producer to the queue if it has more elements.\n // the lock will be released after we know document producer must be put back in the queue or not\n try {\n const { result: afterItem, headers: otherHeaders } = await documentProducer.current();\n this._mergeWithActiveResponseHeaders(otherHeaders);\n if (afterItem === undefined) {\n // no more results is left in this document producer\n } else {\n try {\n const headItem = documentProducer.fetchResults[0];\n if (typeof headItem === \"undefined\") {\n throw new Error(\n \"Extracted DocumentProducer from PQ is invalid state with no result!\"\n );\n }\n this.orderByPQ.enq(documentProducer);\n } catch (e: any) {\n // if comparing elements in priority queue throws exception\n // set error\n this.err = e;\n }\n }\n } catch (err: any) {\n if (ParallelQueryExecutionContextBase._needPartitionKeyRangeCacheRefresh(err)) {\n // We want the document producer enqueued\n // So that later parts of the code can repair the execution context\n this.orderByPQ.enq(documentProducer);\n } else {\n // Something actually bad happened\n this.err = err;\n reject(this.err);\n }\n } finally {\n // release the lock before returning\n this.sem.leave();\n }\n // invoke the callback on the item\n return resolve({\n result: item,\n headers: this._getAndResetActiveResponseHeaders(),\n });\n };\n this._repairExecutionContextIfNeeded(ifCallback, elseCallback).catch(reject);\n });\n });\n }\n\n /**\n * Determine if there are still remaining resources to processs based on the value of the continuation\n * token or the elements remaining on the current batch in the QueryIterator.\n * @returns true if there is other elements to process in the ParallelQueryExecutionContextBase.\n */\n public hasMoreResults(): boolean {\n return !(\n this.state === ParallelQueryExecutionContextBase.STATES.ended || this.err !== undefined\n );\n }\n\n /**\n * Creates document producers\n */\n private _createTargetPartitionQueryExecutionContext(\n partitionKeyTargetRange: any,\n continuationToken?: any\n ): DocumentProducer {\n // TODO: any\n // creates target partition range Query Execution Context\n let rewrittenQuery = this.partitionedQueryExecutionInfo.queryInfo.rewrittenQuery;\n let sqlQuerySpec: SqlQuerySpec;\n const query = this.query;\n if (typeof query === \"string\") {\n sqlQuerySpec = { query };\n } else {\n sqlQuerySpec = query;\n }\n\n const formatPlaceHolder = \"{documentdb-formattableorderbyquery-filter}\";\n if (rewrittenQuery) {\n sqlQuerySpec = JSON.parse(JSON.stringify(sqlQuerySpec));\n // We hardcode the formattable filter to true for now\n rewrittenQuery = rewrittenQuery.replace(formatPlaceHolder, \"true\");\n sqlQuerySpec[\"query\"] = rewrittenQuery;\n }\n\n const options = { ...this.options };\n options.continuationToken = continuationToken;\n\n return new DocumentProducer(\n this.clientContext,\n this.collectionLink,\n sqlQuerySpec,\n partitionKeyTargetRange,\n options\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { DocumentProducer } from \"./documentProducer\";\nimport { ExecutionContext } from \"./ExecutionContext\";\nimport { ParallelQueryExecutionContextBase } from \"./parallelQueryExecutionContextBase\";\n\n/**\n * Provides the ParallelQueryExecutionContext.\n * This class is capable of handling parallelized queries and derives from ParallelQueryExecutionContextBase.\n * @hidden\n */\nexport class ParallelQueryExecutionContext\n extends ParallelQueryExecutionContextBase\n implements ExecutionContext\n{\n // Instance members are inherited\n\n // Overriding documentProducerComparator for ParallelQueryExecutionContexts\n /**\n * Provides a Comparator for document producers using the min value of the corresponding target partition.\n * @returns Comparator Function\n * @hidden\n */\n public documentProducerComparator(\n docProd1: DocumentProducer,\n docProd2: DocumentProducer\n ): number {\n return docProd1.generation - docProd2.generation;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../ClientContext\";\nimport { PartitionedQueryExecutionInfo } from \"../request/ErrorResponse\";\nimport { FeedOptions } from \"../request/FeedOptions\";\nimport { DocumentProducer } from \"./documentProducer\";\nimport { ExecutionContext } from \"./ExecutionContext\";\nimport { OrderByDocumentProducerComparator } from \"./orderByDocumentProducerComparator\";\nimport { ParallelQueryExecutionContextBase } from \"./parallelQueryExecutionContextBase\";\nimport { SqlQuerySpec } from \"./SqlQuerySpec\";\n\n/** @hidden */\nexport class OrderByQueryExecutionContext\n extends ParallelQueryExecutionContextBase\n implements ExecutionContext\n{\n private orderByComparator: any;\n /**\n * Provides the OrderByQueryExecutionContext.\n * This class is capable of handling orderby queries and dervives from ParallelQueryExecutionContextBase.\n *\n * When handling a parallelized query, it instantiates one instance of\n * DocumentProcuder per target partition key range and aggregates the result of each.\n *\n * @param clientContext - The service endpoint to use to create the client.\n * @param collectionLink - The Collection Link\n * @param options - Represents the feed options.\n * @param partitionedQueryExecutionInfo - PartitionedQueryExecutionInfo\n * @hidden\n */\n constructor(\n clientContext: ClientContext,\n collectionLink: string,\n query: string | SqlQuerySpec,\n options: FeedOptions,\n partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo\n ) {\n // Calling on base class constructor\n super(clientContext, collectionLink, query, options, partitionedQueryExecutionInfo);\n this.orderByComparator = new OrderByDocumentProducerComparator(this.sortOrders);\n }\n // Instance members are inherited\n\n // Overriding documentProducerComparator for OrderByQueryExecutionContexts\n /**\n * Provides a Comparator for document producers which respects orderby sort order.\n * @returns Comparator Function\n * @hidden\n */\n public documentProducerComparator(docProd1: DocumentProducer, docProd2: DocumentProducer): any {\n return this.orderByComparator.compare(docProd1, docProd2);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Response } from \"../../request\";\nimport { ExecutionContext } from \"../ExecutionContext\";\nimport { getInitialHeader, mergeHeaders } from \"../headerUtils\";\n\n/** @hidden */\nexport class OffsetLimitEndpointComponent implements ExecutionContext {\n constructor(\n private executionContext: ExecutionContext,\n private offset: number,\n private limit: number\n ) {}\n\n public async nextItem(): Promise<Response<any>> {\n const aggregateHeaders = getInitialHeader();\n while (this.offset > 0) {\n // Grab next item but ignore the result. We only need the headers\n const { headers } = await this.executionContext.nextItem();\n this.offset--;\n mergeHeaders(aggregateHeaders, headers);\n }\n if (this.limit > 0) {\n const { result, headers } = await this.executionContext.nextItem();\n this.limit--;\n mergeHeaders(aggregateHeaders, headers);\n return { result, headers: aggregateHeaders };\n }\n // If both limit and offset are 0, return nothing\n return { result: undefined, headers: getInitialHeader() };\n }\n\n public hasMoreResults(): boolean {\n return (this.offset > 0 || this.limit > 0) && this.executionContext.hasMoreResults();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Response } from \"../../request\";\nimport { ExecutionContext } from \"../ExecutionContext\";\n\n/** @hidden */\nexport class OrderByEndpointComponent implements ExecutionContext {\n /**\n * Represents an endpoint in handling an order by query. For each processed orderby\n * result it returns 'payload' item of the result\n *\n * @param executionContext - Underlying Execution Context\n * @hidden\n */\n constructor(private executionContext: ExecutionContext) {}\n /**\n * Execute a provided function on the next element in the OrderByEndpointComponent.\n */\n public async nextItem(): Promise<Response<any>> {\n const { result: item, headers } = await this.executionContext.nextItem();\n return {\n result: item !== undefined ? item.payload : undefined,\n headers,\n };\n }\n\n /**\n * Determine if there are still remaining resources to processs.\n * @returns true if there is other elements to process in the OrderByEndpointComponent.\n */\n public hasMoreResults(): boolean {\n return this.executionContext.hasMoreResults();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createHash } from \"crypto\";\n\nexport async function digest(str: string): Promise<string> {\n const hash = createHash(\"sha256\");\n hash.update(str, \"utf8\");\n return hash.digest(\"hex\");\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { digest } from \"./digest\";\nimport stableStringify from \"fast-json-stable-stringify\";\n\nexport async function hashObject(object: unknown): Promise<string> {\n const stringifiedObject = stableStringify(object);\n return digest(stringifiedObject);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Response } from \"../../request\";\nimport { ExecutionContext } from \"../ExecutionContext\";\nimport { hashObject } from \"../../utils/hashObject\";\n\n/** @hidden */\nexport class OrderedDistinctEndpointComponent implements ExecutionContext {\n private hashedLastResult: string;\n constructor(private executionContext: ExecutionContext) {}\n\n public async nextItem(): Promise<Response<any>> {\n const { headers, result } = await this.executionContext.nextItem();\n if (result) {\n const hashedResult = await hashObject(result);\n if (hashedResult === this.hashedLastResult) {\n return { result: undefined, headers };\n }\n this.hashedLastResult = hashedResult;\n }\n return { result, headers };\n }\n\n public hasMoreResults(): boolean {\n return this.executionContext.hasMoreResults();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Response } from \"../../request\";\nimport { ExecutionContext } from \"../ExecutionContext\";\nimport { hashObject } from \"../../utils/hashObject\";\n\n/** @hidden */\nexport class UnorderedDistinctEndpointComponent implements ExecutionContext {\n private hashedResults: Set<string>;\n constructor(private executionContext: ExecutionContext) {\n this.hashedResults = new Set();\n }\n\n public async nextItem(): Promise<Response<any>> {\n const { headers, result } = await this.executionContext.nextItem();\n if (result) {\n const hashedResult = await hashObject(result);\n if (this.hashedResults.has(hashedResult)) {\n return { result: undefined, headers };\n }\n this.hashedResults.add(hashedResult);\n }\n return { result, headers };\n }\n\n public hasMoreResults(): boolean {\n return this.executionContext.hasMoreResults();\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// All aggregates are effectively a group by operation\n// The empty group is used for aggregates without a GROUP BY clause\nexport const emptyGroup = \"__empty__\";\n\n// Newer API versions rewrite the query to return `item2`. It fixes some legacy issues with the original `item` result\n// Aggregator code should use item2 when available\nexport const extractAggregateResult = (payload: { item2?: unknown; item: unknown }): any =>\n Object.keys(payload).length > 0 ? (payload.item2 ? payload.item2 : payload.item) : null;\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Response } from \"../../request\";\nimport { ExecutionContext } from \"../ExecutionContext\";\nimport { CosmosHeaders } from \"../CosmosHeaders\";\nimport { QueryInfo } from \"../../request/ErrorResponse\";\nimport { hashObject } from \"../../utils/hashObject\";\nimport { Aggregator, createAggregator } from \"../Aggregators\";\nimport { getInitialHeader, mergeHeaders } from \"../headerUtils\";\nimport { emptyGroup, extractAggregateResult } from \"./emptyGroup\";\n\ninterface GroupByResponse {\n result: GroupByResult;\n headers: CosmosHeaders;\n}\n\ninterface GroupByResult {\n groupByItems: any[];\n payload: any;\n}\n\n/** @hidden */\nexport class GroupByEndpointComponent implements ExecutionContext {\n constructor(private executionContext: ExecutionContext, private queryInfo: QueryInfo) {}\n\n private readonly groupings: Map<string, Map<string, Aggregator>> = new Map();\n private readonly aggregateResultArray: any[] = [];\n private completed: boolean = false;\n\n public async nextItem(): Promise<Response<any>> {\n // If we have a full result set, begin returning results\n if (this.aggregateResultArray.length > 0) {\n return { result: this.aggregateResultArray.pop(), headers: getInitialHeader() };\n }\n\n if (this.completed) {\n return { result: undefined, headers: getInitialHeader() };\n }\n\n const aggregateHeaders = getInitialHeader();\n\n while (this.executionContext.hasMoreResults()) {\n // Grab the next result\n const { result, headers } = (await this.executionContext.nextItem()) as GroupByResponse;\n mergeHeaders(aggregateHeaders, headers);\n\n // If it exists, process it via aggregators\n if (result) {\n const group = result.groupByItems ? await hashObject(result.groupByItems) : emptyGroup;\n const aggregators = this.groupings.get(group);\n const payload = result.payload;\n if (aggregators) {\n // Iterator over all results in the payload\n Object.keys(payload).map((key) => {\n // in case the value of a group is null make sure we create a dummy payload with item2==null\n const effectiveGroupByValue = payload[key]\n ? payload[key]\n : new Map().set(\"item2\", null);\n const aggregateResult = extractAggregateResult(effectiveGroupByValue);\n aggregators.get(key).aggregate(aggregateResult);\n });\n } else {\n // This is the first time we have seen a grouping. Setup the initial result without aggregate values\n const grouping = new Map();\n this.groupings.set(group, grouping);\n // Iterator over all results in the payload\n Object.keys(payload).map((key) => {\n const aggregateType = this.queryInfo.groupByAliasToAggregateType[key];\n // Create a new aggregator for this specific aggregate field\n const aggregator = createAggregator(aggregateType);\n grouping.set(key, aggregator);\n if (aggregateType) {\n const aggregateResult = extractAggregateResult(payload[key]);\n aggregator.aggregate(aggregateResult);\n } else {\n aggregator.aggregate(payload[key]);\n }\n });\n }\n }\n }\n\n for (const grouping of this.groupings.values()) {\n const groupResult: any = {};\n for (const [aggregateKey, aggregator] of grouping.entries()) {\n groupResult[aggregateKey] = aggregator.getResult();\n }\n this.aggregateResultArray.push(groupResult);\n }\n this.completed = true;\n return { result: this.aggregateResultArray.pop(), headers: aggregateHeaders };\n }\n\n public hasMoreResults(): boolean {\n return this.executionContext.hasMoreResults() || this.aggregateResultArray.length > 0;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Response } from \"../../request\";\nimport { ExecutionContext } from \"../ExecutionContext\";\nimport { CosmosHeaders } from \"../CosmosHeaders\";\nimport { AggregateType, QueryInfo } from \"../../request/ErrorResponse\";\nimport { hashObject } from \"../../utils/hashObject\";\nimport { Aggregator, createAggregator } from \"../Aggregators\";\nimport { getInitialHeader, mergeHeaders } from \"../headerUtils\";\nimport { emptyGroup, extractAggregateResult } from \"./emptyGroup\";\n\ninterface GroupByResponse {\n result: GroupByResult;\n headers: CosmosHeaders;\n}\n\ninterface GroupByResult {\n groupByItems: any[];\n payload: any;\n}\n\n/** @hidden */\nexport class GroupByValueEndpointComponent implements ExecutionContext {\n private readonly aggregators: Map<string, Aggregator> = new Map();\n private readonly aggregateResultArray: any[] = [];\n private aggregateType: AggregateType;\n private completed: boolean = false;\n\n constructor(private executionContext: ExecutionContext, private queryInfo: QueryInfo) {\n // VALUE queries will only every have a single grouping\n this.aggregateType = this.queryInfo.aggregates[0];\n }\n\n public async nextItem(): Promise<Response<any>> {\n // Start returning results if we have processed a full results set\n if (this.aggregateResultArray.length > 0) {\n return { result: this.aggregateResultArray.pop(), headers: getInitialHeader() };\n }\n\n if (this.completed) {\n return { result: undefined, headers: getInitialHeader() };\n }\n\n const aggregateHeaders = getInitialHeader();\n\n while (this.executionContext.hasMoreResults()) {\n // Grab the next result\n const { result, headers } = (await this.executionContext.nextItem()) as GroupByResponse;\n mergeHeaders(aggregateHeaders, headers);\n\n // If it exists, process it via aggregators\n if (result) {\n let grouping: string = emptyGroup;\n let payload: any = result;\n if (result.groupByItems) {\n // If the query contains a GROUP BY clause, it will have a payload property and groupByItems\n payload = result.payload;\n grouping = await hashObject(result.groupByItems);\n }\n\n const aggregator = this.aggregators.get(grouping);\n if (!aggregator) {\n // This is the first time we have seen a grouping so create a new aggregator\n this.aggregators.set(grouping, createAggregator(this.aggregateType));\n }\n\n if (this.aggregateType) {\n const aggregateResult = extractAggregateResult(payload[0]);\n // if aggregate result is null, we need to short circuit aggregation and return undefined\n if (aggregateResult === null) {\n this.completed = true;\n }\n this.aggregators.get(grouping).aggregate(aggregateResult);\n } else {\n // Queries with no aggregates pass the payload directly to the aggregator\n // Example: SELECT VALUE c.team FROM c GROUP BY c.team\n this.aggregators.get(grouping).aggregate(payload);\n }\n }\n }\n\n // We bail early since we got an undefined result back `[{}]`\n if (this.completed) {\n return { result: undefined, headers: aggregateHeaders };\n }\n // If no results are left in the underlying execution context, convert our aggregate results to an array\n for (const aggregator of this.aggregators.values()) {\n this.aggregateResultArray.push(aggregator.getResult());\n }\n this.completed = true;\n return { result: this.aggregateResultArray.pop(), headers: aggregateHeaders };\n }\n\n public hasMoreResults(): boolean {\n return this.executionContext.hasMoreResults() || this.aggregateResultArray.length > 0;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../ClientContext\";\nimport { Response, FeedOptions } from \"../request\";\nimport { PartitionedQueryExecutionInfo } from \"../request/ErrorResponse\";\nimport { CosmosHeaders } from \"./CosmosHeaders\";\nimport { OffsetLimitEndpointComponent } from \"./EndpointComponent/OffsetLimitEndpointComponent\";\nimport { OrderByEndpointComponent } from \"./EndpointComponent/OrderByEndpointComponent\";\nimport { OrderedDistinctEndpointComponent } from \"./EndpointComponent/OrderedDistinctEndpointComponent\";\nimport { UnorderedDistinctEndpointComponent } from \"./EndpointComponent/UnorderedDistinctEndpointComponent\";\nimport { GroupByEndpointComponent } from \"./EndpointComponent/GroupByEndpointComponent\";\nimport { ExecutionContext } from \"./ExecutionContext\";\nimport { getInitialHeader, mergeHeaders } from \"./headerUtils\";\nimport { OrderByQueryExecutionContext } from \"./orderByQueryExecutionContext\";\nimport { ParallelQueryExecutionContext } from \"./parallelQueryExecutionContext\";\nimport { GroupByValueEndpointComponent } from \"./EndpointComponent/GroupByValueEndpointComponent\";\nimport { SqlQuerySpec } from \"./SqlQuerySpec\";\n\n/** @hidden */\nexport class PipelinedQueryExecutionContext implements ExecutionContext {\n private fetchBuffer: any[];\n private fetchMoreRespHeaders: CosmosHeaders;\n private endpoint: ExecutionContext;\n private pageSize: number;\n private static DEFAULT_PAGE_SIZE = 10;\n constructor(\n private clientContext: ClientContext,\n private collectionLink: string,\n private query: string | SqlQuerySpec,\n private options: FeedOptions,\n private partitionedQueryExecutionInfo: PartitionedQueryExecutionInfo\n ) {\n this.endpoint = null;\n this.pageSize = options[\"maxItemCount\"];\n if (this.pageSize === undefined) {\n this.pageSize = PipelinedQueryExecutionContext.DEFAULT_PAGE_SIZE;\n }\n\n // Pick between parallel vs order by execution context\n const sortOrders = partitionedQueryExecutionInfo.queryInfo.orderBy;\n if (Array.isArray(sortOrders) && sortOrders.length > 0) {\n // Need to wrap orderby execution context in endpoint component, since the data is nested as a \\\n // \"payload\" property.\n this.endpoint = new OrderByEndpointComponent(\n new OrderByQueryExecutionContext(\n this.clientContext,\n this.collectionLink,\n this.query,\n this.options,\n this.partitionedQueryExecutionInfo\n )\n );\n } else {\n this.endpoint = new ParallelQueryExecutionContext(\n this.clientContext,\n this.collectionLink,\n this.query,\n this.options,\n this.partitionedQueryExecutionInfo\n );\n }\n if (\n Object.keys(partitionedQueryExecutionInfo.queryInfo.groupByAliasToAggregateType).length > 0 ||\n partitionedQueryExecutionInfo.queryInfo.aggregates.length > 0 ||\n partitionedQueryExecutionInfo.queryInfo.groupByExpressions.length > 0\n ) {\n if (partitionedQueryExecutionInfo.queryInfo.hasSelectValue) {\n this.endpoint = new GroupByValueEndpointComponent(\n this.endpoint,\n partitionedQueryExecutionInfo.queryInfo\n );\n } else {\n this.endpoint = new GroupByEndpointComponent(\n this.endpoint,\n partitionedQueryExecutionInfo.queryInfo\n );\n }\n }\n // If top then add that to the pipeline. TOP N is effectively OFFSET 0 LIMIT N\n const top = partitionedQueryExecutionInfo.queryInfo.top;\n if (typeof top === \"number\") {\n this.endpoint = new OffsetLimitEndpointComponent(this.endpoint, 0, top);\n }\n\n // If offset+limit then add that to the pipeline\n const limit = partitionedQueryExecutionInfo.queryInfo.limit;\n const offset = partitionedQueryExecutionInfo.queryInfo.offset;\n if (typeof limit === \"number\" && typeof offset === \"number\") {\n this.endpoint = new OffsetLimitEndpointComponent(this.endpoint, offset, limit);\n }\n\n // If distinct then add that to the pipeline\n const distinctType = partitionedQueryExecutionInfo.queryInfo.distinctType;\n if (distinctType === \"Ordered\") {\n this.endpoint = new OrderedDistinctEndpointComponent(this.endpoint);\n }\n if (distinctType === \"Unordered\") {\n this.endpoint = new UnorderedDistinctEndpointComponent(this.endpoint);\n }\n }\n\n public async nextItem(): Promise<Response<any>> {\n return this.endpoint.nextItem();\n }\n\n // Removed callback here beacuse it wouldn't have ever worked...\n public hasMoreResults(): boolean {\n return this.endpoint.hasMoreResults();\n }\n\n public async fetchMore(): Promise<Response<any>> {\n // if the wrapped endpoint has different implementation for fetchMore use that\n // otherwise use the default implementation\n if (typeof this.endpoint.fetchMore === \"function\") {\n return this.endpoint.fetchMore();\n } else {\n this.fetchBuffer = [];\n this.fetchMoreRespHeaders = getInitialHeader();\n return this._fetchMoreImplementation();\n }\n }\n\n private async _fetchMoreImplementation(): Promise<Response<any>> {\n try {\n const { result: item, headers } = await this.endpoint.nextItem();\n mergeHeaders(this.fetchMoreRespHeaders, headers);\n if (item === undefined) {\n // no more results\n if (this.fetchBuffer.length === 0) {\n return {\n result: undefined,\n headers: this.fetchMoreRespHeaders,\n };\n } else {\n // Just give what we have\n const temp = this.fetchBuffer;\n this.fetchBuffer = [];\n return { result: temp, headers: this.fetchMoreRespHeaders };\n }\n } else {\n // append the result\n this.fetchBuffer.push(item);\n if (this.fetchBuffer.length >= this.pageSize) {\n // fetched enough results\n const temp = this.fetchBuffer.slice(0, this.pageSize);\n this.fetchBuffer = this.fetchBuffer.splice(this.pageSize);\n return { result: temp, headers: this.fetchMoreRespHeaders };\n } else {\n // recursively fetch more\n // TODO: is recursion a good idea?\n return this._fetchMoreImplementation();\n }\n }\n } catch (err: any) {\n mergeHeaders(this.fetchMoreRespHeaders, err.headers);\n err.headers = this.fetchMoreRespHeaders;\n if (err) {\n throw err;\n }\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/// <reference lib=\"esnext.asynciterable\" />\n\nimport { ClientContext } from \"./ClientContext\";\nimport { getPathFromLink, ResourceType, StatusCodes } from \"./common\";\nimport {\n CosmosHeaders,\n DefaultQueryExecutionContext,\n ExecutionContext,\n FetchFunctionCallback,\n getInitialHeader,\n mergeHeaders,\n PipelinedQueryExecutionContext,\n SqlQuerySpec,\n} from \"./queryExecutionContext\";\nimport { Response } from \"./request\";\nimport { ErrorResponse, PartitionedQueryExecutionInfo } from \"./request/ErrorResponse\";\nimport { FeedOptions } from \"./request/FeedOptions\";\nimport { FeedResponse } from \"./request/FeedResponse\";\n\n/**\n * Represents a QueryIterator Object, an implementation of feed or query response that enables\n * traversal and iterating over the response\n * in the Azure Cosmos DB database service.\n */\nexport class QueryIterator<T> {\n private fetchAllTempResources: T[]; // TODO\n private fetchAllLastResHeaders: CosmosHeaders;\n private queryExecutionContext: ExecutionContext;\n private queryPlanPromise: Promise<Response<PartitionedQueryExecutionInfo>>;\n private isInitialized: boolean;\n /**\n * @hidden\n */\n constructor(\n private clientContext: ClientContext,\n private query: SqlQuerySpec | string,\n private options: FeedOptions,\n private fetchFunctions: FetchFunctionCallback | FetchFunctionCallback[],\n private resourceLink?: string,\n private resourceType?: ResourceType\n ) {\n this.query = query;\n this.fetchFunctions = fetchFunctions;\n this.options = options || {};\n this.resourceLink = resourceLink;\n this.fetchAllLastResHeaders = getInitialHeader();\n this.reset();\n this.isInitialized = false;\n }\n\n /**\n * Gets an async iterator that will yield results until completion.\n *\n * NOTE: AsyncIterators are a very new feature and you might need to\n * use polyfils/etc. in order to use them in your code.\n *\n * If you're using TypeScript, you can use the following polyfill as long\n * as you target ES6 or higher and are running on Node 6 or higher.\n *\n * ```typescript\n * if (!Symbol || !Symbol.asyncIterator) {\n * (Symbol as any).asyncIterator = Symbol.for(\"Symbol.asyncIterator\");\n * }\n * ```\n *\n * @example Iterate over all databases\n * ```typescript\n * for await(const { resources: db } of client.databases.readAll().getAsyncIterator()) {\n * console.log(`Got ${db} from AsyncIterator`);\n * }\n * ```\n */\n public async *getAsyncIterator(): AsyncIterable<FeedResponse<T>> {\n this.reset();\n this.queryPlanPromise = this.fetchQueryPlan();\n while (this.queryExecutionContext.hasMoreResults()) {\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.fetchMore();\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createPipelinedExecutionContext();\n try {\n response = await this.queryExecutionContext.fetchMore();\n } catch (queryError: any) {\n this.handleSplitError(queryError);\n }\n } else {\n throw error;\n }\n }\n const feedResponse = new FeedResponse<T>(\n response.result,\n response.headers,\n this.queryExecutionContext.hasMoreResults()\n );\n if (response.result !== undefined) {\n yield feedResponse;\n }\n }\n }\n\n /**\n * Determine if there are still remaining resources to processs based on the value of the continuation token or the\n * elements remaining on the current batch in the QueryIterator.\n * @returns true if there is other elements to process in the QueryIterator.\n */\n public hasMoreResults(): boolean {\n return this.queryExecutionContext.hasMoreResults();\n }\n\n /**\n * Fetch all pages for the query and return a single FeedResponse.\n */\n\n public async fetchAll(): Promise<FeedResponse<T>> {\n this.reset();\n this.fetchAllTempResources = [];\n let response: FeedResponse<T>;\n try {\n response = await this.toArrayImplementation();\n } catch (error: any) {\n this.handleSplitError(error);\n }\n return response;\n }\n\n /**\n * Retrieve the next batch from the feed.\n *\n * This may or may not fetch more pages from the backend depending on your settings\n * and the type of query. Aggregate queries will generally fetch all backend pages\n * before returning the first batch of responses.\n */\n public async fetchNext(): Promise<FeedResponse<T>> {\n this.queryPlanPromise = this.fetchQueryPlan();\n if (!this.isInitialized) {\n await this.init();\n }\n\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.fetchMore();\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createPipelinedExecutionContext();\n try {\n response = await this.queryExecutionContext.fetchMore();\n } catch (queryError: any) {\n this.handleSplitError(queryError);\n }\n } else {\n throw error;\n }\n }\n return new FeedResponse<T>(\n response.result,\n response.headers,\n this.queryExecutionContext.hasMoreResults()\n );\n }\n\n /**\n * Reset the QueryIterator to the beginning and clear all the resources inside it\n */\n public reset(): void {\n this.queryPlanPromise = undefined;\n this.queryExecutionContext = new DefaultQueryExecutionContext(\n this.options,\n this.fetchFunctions\n );\n }\n\n private async toArrayImplementation(): Promise<FeedResponse<T>> {\n this.queryPlanPromise = this.fetchQueryPlan();\n if (!this.isInitialized) {\n await this.init();\n }\n while (this.queryExecutionContext.hasMoreResults()) {\n let response: Response<any>;\n try {\n response = await this.queryExecutionContext.nextItem();\n } catch (error: any) {\n if (this.needsQueryPlan(error)) {\n await this.createPipelinedExecutionContext();\n response = await this.queryExecutionContext.nextItem();\n } else {\n throw error;\n }\n }\n const { result, headers } = response;\n // concatenate the results and fetch more\n mergeHeaders(this.fetchAllLastResHeaders, headers);\n\n if (result !== undefined) {\n this.fetchAllTempResources.push(result);\n }\n }\n return new FeedResponse(\n this.fetchAllTempResources,\n this.fetchAllLastResHeaders,\n this.queryExecutionContext.hasMoreResults()\n );\n }\n\n private async createPipelinedExecutionContext(): Promise<void> {\n const queryPlanResponse = await this.queryPlanPromise;\n\n // We always coerce queryPlanPromise to resolved. So if it errored, we need to manually inspect the resolved value\n if (queryPlanResponse instanceof Error) {\n throw queryPlanResponse;\n }\n\n const queryPlan = queryPlanResponse.result;\n const queryInfo = queryPlan.queryInfo;\n if (queryInfo.aggregates.length > 0 && queryInfo.hasSelectValue === false) {\n throw new Error(\"Aggregate queries must use the VALUE keyword\");\n }\n this.queryExecutionContext = new PipelinedQueryExecutionContext(\n this.clientContext,\n this.resourceLink,\n this.query,\n this.options,\n queryPlan\n );\n }\n\n private async fetchQueryPlan(): Promise<any> {\n if (!this.queryPlanPromise && this.resourceType === ResourceType.item) {\n return this.clientContext\n .getQueryPlan(\n getPathFromLink(this.resourceLink) + \"/docs\",\n ResourceType.item,\n this.resourceLink,\n this.query,\n this.options\n )\n .catch((error: any) => error); // Without this catch, node reports an unhandled rejection. So we stash the promise as resolved even if it errored.\n }\n return this.queryPlanPromise;\n }\n\n private needsQueryPlan(error: ErrorResponse): error is ErrorResponse {\n if (\n error.body?.additionalErrorInfo ||\n error.message.includes(\"Cross partition query only supports\")\n ) {\n return error.code === StatusCodes.BadRequest && this.resourceType === ResourceType.item;\n } else {\n throw error;\n }\n }\n\n private initPromise: Promise<void>;\n private async init(): Promise<void> {\n if (this.isInitialized === true) {\n return;\n }\n if (this.initPromise === undefined) {\n this.initPromise = this._init();\n }\n return this.initPromise;\n }\n private async _init(): Promise<void> {\n if (this.options.forceQueryPlan === true && this.resourceType === ResourceType.item) {\n await this.createPipelinedExecutionContext();\n }\n this.isInitialized = true;\n }\n\n private handleSplitError(err: any): void {\n if (err.code === 410) {\n const error = new Error(\n \"Encountered partition split and could not recover. This request is retryable\"\n ) as any;\n error.code = 503;\n error.originalError = err;\n throw error;\n } else {\n throw err;\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { Conflict } from \"./Conflict\";\nimport { ConflictDefinition } from \"./ConflictDefinition\";\n\nexport class ConflictResponse extends ResourceResponse<ConflictDefinition & Resource> {\n constructor(\n resource: ConflictDefinition & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n conflict: Conflict\n ) {\n super(resource, headers, statusCode);\n this.conflict = conflict;\n }\n /** A reference to the {@link Conflict} corresponding to the returned {@link ConflictDefinition}. */\n public readonly conflict: Conflict;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { Constants, getIdFromLink, getPathFromLink, ResourceType } from \"../../common\";\nimport { RequestOptions } from \"../../request\";\nimport { Container } from \"../Container\";\nimport { ConflictDefinition } from \"./ConflictDefinition\";\nimport { ConflictResponse } from \"./ConflictResponse\";\nimport { undefinedPartitionKey } from \"../../extractPartitionKey\";\nimport { PartitionKey } from \"../../documents\";\n\n/**\n * Use to read or delete a given {@link Conflict} by id.\n *\n * @see {@link Conflicts} to query or read all conflicts.\n */\nexport class Conflict {\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return `/${this.container.url}/${Constants.Path.ConflictsPathSegment}/${this.id}`;\n }\n /**\n * @hidden\n * @param container - The parent {@link Container}.\n * @param id - The id of the given {@link Conflict}.\n */\n constructor(\n public readonly container: Container,\n public readonly id: string,\n private readonly clientContext: ClientContext,\n private partitionKey?: PartitionKey\n ) {\n this.partitionKey = partitionKey;\n }\n\n /**\n * Read the {@link ConflictDefinition} for the given {@link Conflict}.\n */\n public async read(options?: RequestOptions): Promise<ConflictResponse> {\n const path = getPathFromLink(this.url, ResourceType.conflicts);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.read<ConflictDefinition>({\n path,\n resourceType: ResourceType.user,\n resourceId: id,\n options,\n });\n return new ConflictResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Delete the given {@link ConflictDefinition}.\n */\n public async delete(options?: RequestOptions): Promise<ConflictResponse> {\n if (this.partitionKey === undefined) {\n const { resource: partitionKeyDefinition } =\n await this.container.readPartitionKeyDefinition();\n this.partitionKey = undefinedPartitionKey(partitionKeyDefinition);\n }\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.delete<ConflictDefinition>({\n path,\n resourceType: ResourceType.conflicts,\n resourceId: id,\n options,\n partitionKey: this.partitionKey,\n });\n return new ConflictResponse(response.result, response.headers, response.code, this);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { getIdFromLink, getPathFromLink, ResourceType } from \"../../common\";\nimport { SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions } from \"../../request\";\nimport { Container } from \"../Container\";\nimport { Resource } from \"../Resource\";\nimport { ConflictDefinition } from \"./ConflictDefinition\";\n\n/**\n * Use to query or read all conflicts.\n *\n * @see {@link Conflict} to read or delete a given {@link Conflict} by id.\n */\nexport class Conflicts {\n constructor(\n public readonly container: Container,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Queries all conflicts.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n * @returns {@link QueryIterator} Allows you to return results in an array or iterate over them one at a time.\n */\n public query(query: string | SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Queries all conflicts.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n * @returns {@link QueryIterator} Allows you to return results in an array or iterate over them one at a time.\n */\n public query<T>(query: string | SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: string | SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n const path = getPathFromLink(this.container.url, ResourceType.conflicts);\n const id = getIdFromLink(this.container.url);\n\n return new QueryIterator(this.clientContext, query, options, (innerOptions) => {\n return this.clientContext.queryFeed({\n path,\n resourceType: ResourceType.conflicts,\n resourceId: id,\n resultFn: (result) => result.Conflicts,\n query,\n options: innerOptions,\n });\n });\n }\n\n /**\n * Reads all conflicts\n * @param options - Use to set options like response page size, continuation tokens, etc.\n */\n public readAll(options?: FeedOptions): QueryIterator<ConflictDefinition & Resource> {\n return this.query<ConflictDefinition & Resource>(undefined, options);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport enum ConflictResolutionMode {\n Custom = \"Custom\",\n LastWriterWins = \"LastWriterWins\",\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request/ResourceResponse\";\nimport { Resource } from \"../Resource\";\nimport { Item } from \"./Item\";\nimport { ItemDefinition } from \"./ItemDefinition\";\n\nexport class ItemResponse<T extends ItemDefinition> extends ResourceResponse<T & Resource> {\n constructor(\n resource: T & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n subsstatusCode: number,\n item: Item\n ) {\n super(resource, headers, statusCode, subsstatusCode);\n this.item = item;\n }\n /** Reference to the {@link Item} the response corresponds to. */\n public readonly item: Item;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport {\n createDocumentUri,\n getIdFromLink,\n getPathFromLink,\n isItemResourceValid,\n ResourceType,\n StatusCodes,\n} from \"../../common\";\nimport { PartitionKey } from \"../../documents\";\nimport { extractPartitionKey, undefinedPartitionKey } from \"../../extractPartitionKey\";\nimport { RequestOptions, Response } from \"../../request\";\nimport { PatchRequestBody } from \"../../utils/patch\";\nimport { Container } from \"../Container\";\nimport { Resource } from \"../Resource\";\nimport { ItemDefinition } from \"./ItemDefinition\";\nimport { ItemResponse } from \"./ItemResponse\";\n\n/**\n * Used to perform operations on a specific item.\n *\n * @see {@link Items} for operations on all items; see `container.items`.\n */\nexport class Item {\n private partitionKey: PartitionKey;\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return createDocumentUri(this.container.database.id, this.container.id, this.id);\n }\n\n /**\n * @hidden\n * @param container - The parent {@link Container}.\n * @param id - The id of the given {@link Item}.\n * @param partitionKey - The primary key of the given {@link Item} (only for partitioned containers).\n */\n constructor(\n public readonly container: Container,\n public readonly id: string,\n partitionKey: PartitionKey,\n private readonly clientContext: ClientContext\n ) {\n this.partitionKey = partitionKey;\n }\n\n /**\n * Read the item's definition.\n *\n * Any provided type, T, is not necessarily enforced by the SDK.\n * You may get more or less properties and it's up to your logic to enforce it.\n * If the type, T, is a class, it won't pass `typeof` comparisons, because it won't have a match prototype.\n * It's recommended to only use interfaces.\n *\n * There is no set schema for JSON items. They may contain any number of custom properties.\n *\n * @param options - Additional options for the request\n *\n * @example Using custom type for response\n * ```typescript\n * interface TodoItem {\n * title: string;\n * done: bool;\n * id: string;\n * }\n *\n * let item: TodoItem;\n * ({body: item} = await item.read<TodoItem>());\n * ```\n */\n public async read<T extends ItemDefinition = any>(\n options: RequestOptions = {}\n ): Promise<ItemResponse<T>> {\n if (this.partitionKey === undefined) {\n const { resource: partitionKeyDefinition } =\n await this.container.readPartitionKeyDefinition();\n this.partitionKey = undefinedPartitionKey(partitionKeyDefinition);\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n let response: Response<T & Resource>;\n try {\n response = await this.clientContext.read<T>({\n path,\n resourceType: ResourceType.item,\n resourceId: id,\n options,\n partitionKey: this.partitionKey,\n });\n } catch (error: any) {\n if (error.code !== StatusCodes.NotFound) {\n throw error;\n }\n response = error;\n }\n\n return new ItemResponse(\n response.result,\n response.headers,\n response.code,\n response.substatus,\n this\n );\n }\n\n /**\n * Replace the item's definition.\n *\n * There is no set schema for JSON items. They may contain any number of custom properties.\n *\n * @param body - The definition to replace the existing {@link Item}'s definition with.\n * @param options - Additional options for the request\n */\n public replace(\n body: ItemDefinition,\n options?: RequestOptions\n ): Promise<ItemResponse<ItemDefinition>>;\n /**\n * Replace the item's definition.\n *\n * Any provided type, T, is not necessarily enforced by the SDK.\n * You may get more or less properties and it's up to your logic to enforce it.\n *\n * There is no set schema for JSON items. They may contain any number of custom properties.\n *\n * @param body - The definition to replace the existing {@link Item}'s definition with.\n * @param options - Additional options for the request\n */\n public replace<T extends ItemDefinition>(\n body: T,\n options?: RequestOptions\n ): Promise<ItemResponse<T>>;\n public async replace<T extends ItemDefinition>(\n body: T,\n options: RequestOptions = {}\n ): Promise<ItemResponse<T>> {\n if (this.partitionKey === undefined) {\n const { resource: partitionKeyDefinition } =\n await this.container.readPartitionKeyDefinition();\n this.partitionKey = extractPartitionKey(body, partitionKeyDefinition);\n }\n\n const err = {};\n if (!isItemResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.replace<T>({\n body,\n path,\n resourceType: ResourceType.item,\n resourceId: id,\n options,\n partitionKey: this.partitionKey,\n });\n return new ItemResponse(\n response.result,\n response.headers,\n response.code,\n response.substatus,\n this\n );\n }\n\n /**\n * Delete the item.\n *\n * Any provided type, T, is not necessarily enforced by the SDK.\n * You may get more or less properties and it's up to your logic to enforce it.\n *\n * @param options - Additional options for the request\n */\n public async delete<T extends ItemDefinition = any>(\n options: RequestOptions = {}\n ): Promise<ItemResponse<T>> {\n if (this.partitionKey === undefined) {\n const { resource: partitionKeyDefinition } =\n await this.container.readPartitionKeyDefinition();\n this.partitionKey = undefinedPartitionKey(partitionKeyDefinition);\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.delete<T>({\n path,\n resourceType: ResourceType.item,\n resourceId: id,\n options,\n partitionKey: this.partitionKey,\n });\n return new ItemResponse(\n response.result,\n response.headers,\n response.code,\n response.substatus,\n this\n );\n }\n\n /**\n * Perform a JSONPatch on the item.\n *\n * Any provided type, T, is not necessarily enforced by the SDK.\n * You may get more or less properties and it's up to your logic to enforce it.\n *\n * @param options - Additional options for the request\n */\n public async patch<T extends ItemDefinition = any>(\n body: PatchRequestBody,\n options: RequestOptions = {}\n ): Promise<ItemResponse<T>> {\n if (this.partitionKey === undefined) {\n const { resource: partitionKeyDefinition } =\n await this.container.readPartitionKeyDefinition();\n this.partitionKey = extractPartitionKey(body, partitionKeyDefinition);\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.patch<T>({\n body,\n path,\n resourceType: ResourceType.item,\n resourceId: id,\n options,\n partitionKey: this.partitionKey,\n });\n return new ItemResponse(\n response.result,\n response.headers,\n response.code,\n response.substatus,\n this\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"./common\";\nimport { CosmosHeaders } from \"./queryExecutionContext\";\n\n/**\n * A single response page from the Azure Cosmos DB Change Feed\n */\nexport class ChangeFeedResponse<T> {\n /**\n * @internal\n */\n constructor(\n /**\n * Gets the items returned in the response from Azure Cosmos DB\n */\n public readonly result: T,\n /**\n * Gets the number of items returned in the response from Azure Cosmos DB\n */\n public readonly count: number,\n /**\n * Gets the status code of the response from Azure Cosmos DB\n */\n public readonly statusCode: number,\n headers: CosmosHeaders\n ) {\n this.headers = Object.freeze(headers);\n }\n\n /**\n * Gets the request charge for this request from the Azure Cosmos DB service.\n */\n public get requestCharge(): number {\n const rus = this.headers[Constants.HttpHeaders.RequestCharge];\n return rus ? parseInt(rus, 10) : null;\n }\n\n /**\n * Gets the activity ID for the request from the Azure Cosmos DB service.\n */\n public get activityId(): string {\n return this.headers[Constants.HttpHeaders.ActivityId];\n }\n\n /**\n * Gets the continuation token to be used for continuing enumeration of the Azure Cosmos DB service.\n *\n * This is equivalent to the `etag` property.\n */\n public get continuation(): string {\n return this.etag;\n }\n\n /**\n * Gets the session token for use in session consistency reads from the Azure Cosmos DB service.\n */\n public get sessionToken(): string {\n return this.headers[Constants.HttpHeaders.SessionToken];\n }\n\n /**\n * Gets the entity tag associated with last transaction in the Azure Cosmos DB service,\n * which can be used as If-Non-Match Access condition for ReadFeed REST request or\n * `continuation` property of `ChangeFeedOptions` parameter for\n * `Items.changeFeed()`\n * to get feed changes since the transaction specified by this entity tag.\n *\n * This is equivalent to the `continuation` property.\n */\n public get etag(): string {\n return this.headers[Constants.HttpHeaders.ETag];\n }\n\n /**\n * Response headers of the response from Azure Cosmos DB\n */\n public headers: CosmosHeaders;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/// <reference lib=\"esnext.asynciterable\" />\nimport { ChangeFeedOptions } from \"./ChangeFeedOptions\";\nimport { ChangeFeedResponse } from \"./ChangeFeedResponse\";\nimport { Resource } from \"./client\";\nimport { ClientContext } from \"./ClientContext\";\nimport { Constants, ResourceType, StatusCodes } from \"./common\";\nimport { FeedOptions } from \"./request\";\nimport { Response } from \"./request\";\n\n/**\n * Provides iterator for change feed.\n *\n * Use `Items.changeFeed()` to get an instance of the iterator.\n */\nexport class ChangeFeedIterator<T> {\n private static readonly IfNoneMatchAllHeaderValue = \"*\";\n private nextIfNoneMatch: string;\n private ifModifiedSince: string;\n private lastStatusCode: number;\n private isPartitionSpecified: boolean;\n\n /**\n * @internal\n */\n constructor(\n private clientContext: ClientContext,\n private resourceId: string,\n private resourceLink: string,\n private partitionKey: string | number | boolean,\n private changeFeedOptions: ChangeFeedOptions\n ) {\n // partition key XOR partition key range id\n const partitionKeyValid = partitionKey !== undefined;\n this.isPartitionSpecified = partitionKeyValid;\n\n let canUseStartFromBeginning = true;\n if (changeFeedOptions.continuation) {\n this.nextIfNoneMatch = changeFeedOptions.continuation;\n canUseStartFromBeginning = false;\n }\n\n if (changeFeedOptions.startTime) {\n // .toUTCString() is platform specific, but most platforms use RFC 1123.\n // In ECMAScript 2018, this was standardized to RFC 1123.\n // See for more info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n this.ifModifiedSince = changeFeedOptions.startTime.toUTCString();\n canUseStartFromBeginning = false;\n }\n\n if (canUseStartFromBeginning && !changeFeedOptions.startFromBeginning) {\n this.nextIfNoneMatch = ChangeFeedIterator.IfNoneMatchAllHeaderValue;\n }\n }\n\n /**\n * Gets a value indicating whether there are potentially additional results that can be retrieved.\n *\n * Initially returns true. This value is set based on whether the last execution returned a continuation token.\n *\n * @returns Boolean value representing if whether there are potentially additional results that can be retrieved.\n */\n get hasMoreResults(): boolean {\n return this.lastStatusCode !== StatusCodes.NotModified;\n }\n\n /**\n * Gets an async iterator which will yield pages of results from Azure Cosmos DB.\n */\n public async *getAsyncIterator(): AsyncIterable<ChangeFeedResponse<Array<T & Resource>>> {\n do {\n const result = await this.fetchNext();\n if (result.count > 0) {\n yield result;\n }\n } while (this.hasMoreResults);\n }\n\n /**\n * Read feed and retrieves the next page of results in Azure Cosmos DB.\n */\n public async fetchNext(): Promise<ChangeFeedResponse<Array<T & Resource>>> {\n const response = await this.getFeedResponse();\n this.lastStatusCode = response.statusCode;\n this.nextIfNoneMatch = response.headers[Constants.HttpHeaders.ETag];\n return response;\n }\n\n private async getFeedResponse(): Promise<ChangeFeedResponse<Array<T & Resource>>> {\n if (!this.isPartitionSpecified) {\n throw new Error(\n \"Container is partitioned, but no partition key or partition key range id was specified.\"\n );\n }\n const feedOptions: FeedOptions = { initialHeaders: {}, useIncrementalFeed: true };\n\n if (typeof this.changeFeedOptions.maxItemCount === \"number\") {\n feedOptions.maxItemCount = this.changeFeedOptions.maxItemCount;\n }\n\n if (this.changeFeedOptions.sessionToken) {\n feedOptions.sessionToken = this.changeFeedOptions.sessionToken;\n }\n\n if (this.nextIfNoneMatch) {\n feedOptions.accessCondition = {\n type: Constants.HttpHeaders.IfNoneMatch,\n condition: this.nextIfNoneMatch,\n };\n }\n\n if (this.ifModifiedSince) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfModifiedSince] = this.ifModifiedSince;\n }\n\n const response: Response<Array<T & Resource>> = await (this.clientContext.queryFeed<T>({\n path: this.resourceLink,\n resourceType: ResourceType.item,\n resourceId: this.resourceId,\n resultFn: (result) => (result ? result.Documents : []),\n query: undefined,\n options: feedOptions,\n partitionKey: this.partitionKey,\n }) as Promise<any>); // TODO: some funky issues with query feed. Probably need to change it up.\n\n return new ChangeFeedResponse(\n response.result,\n response.result ? response.result.length : 0,\n response.code,\n response.headers\n );\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport const BytePrefix = {\n Undefined: \"00\",\n Null: \"01\",\n False: \"02\",\n True: \"03\",\n MinNumber: \"04\",\n Number: \"05\",\n MaxNumber: \"06\",\n MinString: \"07\",\n String: \"08\",\n MaxString: \"09\",\n Int64: \"0a\",\n Int32: \"0b\",\n Int16: \"0c\",\n Int8: \"0d\",\n Uint64: \"0e\",\n Uint32: \"0f\",\n Uint16: \"10\",\n Uint8: \"11\",\n Binary: \"12\",\n Guid: \"13\",\n Float: \"14\",\n Infinity: \"FF\",\n};\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport JSBI from \"jsbi\";\nimport { BytePrefix } from \"./prefix\";\n\nexport function writeNumberForBinaryEncodingJSBI(hash: number): Buffer {\n let payload = encodeNumberAsUInt64JSBI(hash);\n let outputStream = Buffer.from(BytePrefix.Number, \"hex\");\n const firstChunk = JSBI.asUintN(64, JSBI.signedRightShift(payload, JSBI.BigInt(56)));\n\n outputStream = Buffer.concat([outputStream, Buffer.from(firstChunk.toString(16), \"hex\")]);\n payload = JSBI.asUintN(64, JSBI.leftShift(JSBI.BigInt(payload), JSBI.BigInt(0x8)));\n\n let byteToWrite = JSBI.BigInt(0);\n let firstIteration = false;\n let shifted: JSBI;\n let padded: string;\n\n do {\n if (!firstIteration) {\n // we pad because after shifting because we will produce characters like \"f\" or similar,\n // which cannot be encoded as hex in a buffer because they are invalid hex\n // https://github.com/nodejs/node/issues/24491\n padded = byteToWrite.toString(16).padStart(2, \"0\");\n if (padded !== \"00\") {\n outputStream = Buffer.concat([outputStream, Buffer.from(padded, \"hex\")]);\n }\n } else {\n firstIteration = false;\n }\n\n shifted = JSBI.asUintN(64, JSBI.signedRightShift(payload, JSBI.BigInt(56)));\n byteToWrite = JSBI.asUintN(64, JSBI.bitwiseOr(shifted, JSBI.BigInt(0x01)));\n payload = JSBI.asUintN(64, JSBI.leftShift(payload, JSBI.BigInt(7)));\n } while (JSBI.notEqual(payload, JSBI.BigInt(0)));\n\n const lastChunk = JSBI.asUintN(64, JSBI.bitwiseAnd(byteToWrite, JSBI.BigInt(0xfe)));\n // we pad because after shifting because we will produce characters like \"f\" or similar,\n // which cannot be encoded as hex in a buffer because they are invalid hex\n // https://github.com/nodejs/node/issues/24491\n padded = lastChunk.toString(16).padStart(2, \"0\");\n if (padded !== \"00\") {\n outputStream = Buffer.concat([outputStream, Buffer.from(padded, \"hex\")]);\n }\n\n return outputStream;\n}\n\nfunction encodeNumberAsUInt64JSBI(value: number): JSBI {\n const rawValueBits = getRawBitsJSBI(value);\n const mask = JSBI.BigInt(0x8000000000000000);\n const returned =\n rawValueBits < mask\n ? JSBI.bitwiseXor(rawValueBits, mask)\n : JSBI.add(JSBI.bitwiseNot(rawValueBits), JSBI.BigInt(1));\n return returned;\n}\n\nexport function doubleToByteArrayJSBI(double: number): Buffer {\n const output: Buffer = Buffer.alloc(8);\n const lng = getRawBitsJSBI(double);\n for (let i = 0; i < 8; i++) {\n output[i] = JSBI.toNumber(\n JSBI.bitwiseAnd(\n JSBI.signedRightShift(lng, JSBI.multiply(JSBI.BigInt(i), JSBI.BigInt(8))),\n JSBI.BigInt(0xff)\n )\n );\n }\n return output;\n}\n\nfunction getRawBitsJSBI(value: number): JSBI {\n const view = new DataView(new ArrayBuffer(8));\n view.setFloat64(0, value);\n return JSBI.BigInt(`0x${buf2hex(view.buffer)}`);\n}\n\nfunction buf2hex(buffer: ArrayBuffer): string {\n return Array.prototype.map\n .call(new Uint8Array(buffer), (x: number) => (\"00\" + x.toString(16)).slice(-2))\n .join(\"\");\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { BytePrefix } from \"./prefix\";\n\nexport function writeStringForBinaryEncoding(payload: string): Buffer {\n let outputStream = Buffer.from(BytePrefix.String, \"hex\");\n const MAX_STRING_BYTES_TO_APPEND = 100;\n const byteArray = [...Buffer.from(payload)];\n\n const isShortString = payload.length <= MAX_STRING_BYTES_TO_APPEND;\n\n for (\n let index = 0;\n index < (isShortString ? byteArray.length : MAX_STRING_BYTES_TO_APPEND + 1);\n index++\n ) {\n let charByte = byteArray[index];\n if (charByte < 0xff) {\n charByte++;\n }\n outputStream = Buffer.concat([outputStream, Buffer.from(charByte.toString(16), \"hex\")]);\n }\n\n if (isShortString) {\n outputStream = Buffer.concat([outputStream, Buffer.from(BytePrefix.Undefined, \"hex\")]);\n }\n return outputStream;\n}\n","// +----------------------------------------------------------------------+\n// | murmurHash3js.js v3.0.1 // https://github.com/pid/murmurHash3js\n// | A javascript implementation of MurmurHash3's x86 hashing algorithms. |\n// |----------------------------------------------------------------------|\n// | Copyright (c) 2012-2015 Karan Lyons |\n// | https://github.com/karanlyons/murmurHash3.js/blob/c1778f75792abef7bdd74bc85d2d4e1a3d25cfe9/murmurHash3.js |\n// | Freely distributable under the MIT license. |\n// +----------------------------------------------------------------------+\n\n// PRIVATE FUNCTIONS\n// -----------------\n\nfunction _x86Multiply(m: number, n: number) {\n //\n // Given two 32bit ints, returns the two multiplied together as a\n // 32bit int.\n //\n\n return (m & 0xffff) * n + ((((m >>> 16) * n) & 0xffff) << 16);\n}\n\nfunction _x86Rotl(m: number, n: number) {\n //\n // Given a 32bit int and an int representing a number of bit positions,\n // returns the 32bit int rotated left by that number of positions.\n //\n\n return (m << n) | (m >>> (32 - n));\n}\n\nfunction _x86Fmix(h: number) {\n //\n // Given a block, returns murmurHash3's final x86 mix of that block.\n //\n\n h ^= h >>> 16;\n h = _x86Multiply(h, 0x85ebca6b);\n h ^= h >>> 13;\n h = _x86Multiply(h, 0xc2b2ae35);\n h ^= h >>> 16;\n\n return h;\n}\n\nfunction _x64Add(m: number[], n: number[]) {\n //\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\n // added together as a 64bit int (as an array of two 32bit ints).\n //\n\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n const o = [0, 0, 0, 0];\n\n o[3] += m[3] + n[3];\n o[2] += o[3] >>> 16;\n o[3] &= 0xffff;\n\n o[2] += m[2] + n[2];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n\n o[1] += m[1] + n[1];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n\n o[0] += m[0] + n[0];\n o[0] &= 0xffff;\n\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n}\n\nfunction _x64Multiply(m: number[], n: number[]) {\n //\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\n // multiplied together as a 64bit int (as an array of two 32bit ints).\n //\n\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n const o = [0, 0, 0, 0];\n\n o[3] += m[3] * n[3];\n o[2] += o[3] >>> 16;\n o[3] &= 0xffff;\n\n o[2] += m[2] * n[3];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n\n o[2] += m[3] * n[2];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n\n o[1] += m[1] * n[3];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n\n o[1] += m[2] * n[2];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n\n o[1] += m[3] * n[1];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n\n o[0] += m[0] * n[3] + m[1] * n[2] + m[2] * n[1] + m[3] * n[0];\n o[0] &= 0xffff;\n\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n}\n\nfunction _x64Rotl(m: number[], n: number) {\n //\n // Given a 64bit int (as an array of two 32bit ints) and an int\n // representing a number of bit positions, returns the 64bit int (as an\n // array of two 32bit ints) rotated left by that number of positions.\n //\n\n n %= 64;\n\n if (n === 32) {\n return [m[1], m[0]];\n } else if (n < 32) {\n return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))];\n } else {\n n -= 32;\n return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))];\n }\n}\n\nfunction _x64LeftShift(m: number[], n: number) {\n //\n // Given a 64bit int (as an array of two 32bit ints) and an int\n // representing a number of bit positions, returns the 64bit int (as an\n // array of two 32bit ints) shifted left by that number of positions.\n //\n\n n %= 64;\n\n if (n === 0) {\n return m;\n } else if (n < 32) {\n return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\n } else {\n return [m[1] << (n - 32), 0];\n }\n}\n\nfunction _x64Xor(m: number[], n: number[]) {\n //\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\n // xored together as a 64bit int (as an array of two 32bit ints).\n //\n\n return [m[0] ^ n[0], m[1] ^ n[1]];\n}\n\nfunction _x64Fmix(h: number[]) {\n //\n // Given a block, returns murmurHash3's final x64 mix of that block.\n // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\n // only place where we need to right shift 64bit ints.)\n //\n\n h = _x64Xor(h, [0, h[0] >>> 1]);\n h = _x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n h = _x64Xor(h, [0, h[0] >>> 1]);\n h = _x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n h = _x64Xor(h, [0, h[0] >>> 1]);\n\n return h;\n}\n\n// PUBLIC FUNCTIONS\n// ----------------\n\nfunction x86Hash32(bytes: Buffer, seed?: number) {\n //\n // Given a string and an optional seed as an int, returns a 32 bit hash\n // using the x86 flavor of MurmurHash3, as an unsigned int.\n //\n seed = seed || 0;\n\n const remainder = bytes.length % 4;\n const blocks = bytes.length - remainder;\n\n let h1 = seed;\n\n let k1 = 0;\n\n const c1 = 0xcc9e2d51;\n const c2 = 0x1b873593;\n let j = 0;\n\n for (let i = 0; i < blocks; i = i + 4) {\n k1 = bytes[i] | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n\n k1 = _x86Multiply(k1, c1);\n k1 = _x86Rotl(k1, 15);\n k1 = _x86Multiply(k1, c2);\n\n h1 ^= k1;\n h1 = _x86Rotl(h1, 13);\n h1 = _x86Multiply(h1, 5) + 0xe6546b64;\n j = i + 4;\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3:\n k1 ^= bytes[j + 2] << 16;\n\n case 2:\n k1 ^= bytes[j + 1] << 8;\n\n case 1:\n k1 ^= bytes[j];\n k1 = _x86Multiply(k1, c1);\n k1 = _x86Rotl(k1, 15);\n k1 = _x86Multiply(k1, c2);\n h1 ^= k1;\n }\n\n h1 ^= bytes.length;\n h1 = _x86Fmix(h1);\n\n return h1 >>> 0;\n}\n\nfunction x86Hash128(bytes: Buffer, seed?: number) {\n //\n // Given a string and an optional seed as an int, returns a 128 bit\n // hash using the x86 flavor of MurmurHash3, as an unsigned hex.\n //\n\n seed = seed || 0;\n const remainder = bytes.length % 16;\n const blocks = bytes.length - remainder;\n\n let h1 = seed;\n let h2 = seed;\n let h3 = seed;\n let h4 = seed;\n\n let k1 = 0;\n let k2 = 0;\n let k3 = 0;\n let k4 = 0;\n\n const c1 = 0x239b961b;\n const c2 = 0xab0e9789;\n const c3 = 0x38b34ae5;\n const c4 = 0xa1e38b93;\n let j = 0;\n\n for (let i = 0; i < blocks; i = i + 16) {\n k1 = bytes[i] | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n k2 = bytes[i + 4] | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24);\n k3 = bytes[i + 8] | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24);\n k4 = bytes[i + 12] | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24);\n\n k1 = _x86Multiply(k1, c1);\n k1 = _x86Rotl(k1, 15);\n k1 = _x86Multiply(k1, c2);\n h1 ^= k1;\n\n h1 = _x86Rotl(h1, 19);\n h1 += h2;\n h1 = _x86Multiply(h1, 5) + 0x561ccd1b;\n\n k2 = _x86Multiply(k2, c2);\n k2 = _x86Rotl(k2, 16);\n k2 = _x86Multiply(k2, c3);\n h2 ^= k2;\n\n h2 = _x86Rotl(h2, 17);\n h2 += h3;\n h2 = _x86Multiply(h2, 5) + 0x0bcaa747;\n\n k3 = _x86Multiply(k3, c3);\n k3 = _x86Rotl(k3, 17);\n k3 = _x86Multiply(k3, c4);\n h3 ^= k3;\n\n h3 = _x86Rotl(h3, 15);\n h3 += h4;\n h3 = _x86Multiply(h3, 5) + 0x96cd1c35;\n\n k4 = _x86Multiply(k4, c4);\n k4 = _x86Rotl(k4, 18);\n k4 = _x86Multiply(k4, c1);\n h4 ^= k4;\n\n h4 = _x86Rotl(h4, 13);\n h4 += h1;\n h4 = _x86Multiply(h4, 5) + 0x32ac3b17;\n j = i + 16;\n }\n\n k1 = 0;\n k2 = 0;\n k3 = 0;\n k4 = 0;\n\n switch (remainder) {\n case 15:\n k4 ^= bytes[j + 14] << 16;\n\n case 14:\n k4 ^= bytes[j + 13] << 8;\n\n case 13:\n k4 ^= bytes[j + 12];\n k4 = _x86Multiply(k4, c4);\n k4 = _x86Rotl(k4, 18);\n k4 = _x86Multiply(k4, c1);\n h4 ^= k4;\n\n case 12:\n k3 ^= bytes[j + 11] << 24;\n\n case 11:\n k3 ^= bytes[j + 10] << 16;\n\n case 10:\n k3 ^= bytes[j + 9] << 8;\n\n case 9:\n k3 ^= bytes[j + 8];\n k3 = _x86Multiply(k3, c3);\n k3 = _x86Rotl(k3, 17);\n k3 = _x86Multiply(k3, c4);\n h3 ^= k3;\n\n case 8:\n k2 ^= bytes[j + 7] << 24;\n\n case 7:\n k2 ^= bytes[j + 6] << 16;\n\n case 6:\n k2 ^= bytes[j + 5] << 8;\n\n case 5:\n k2 ^= bytes[j + 4];\n k2 = _x86Multiply(k2, c2);\n k2 = _x86Rotl(k2, 16);\n k2 = _x86Multiply(k2, c3);\n h2 ^= k2;\n\n case 4:\n k1 ^= bytes[j + 3] << 24;\n\n case 3:\n k1 ^= bytes[j + 2] << 16;\n\n case 2:\n k1 ^= bytes[j + 1] << 8;\n\n case 1:\n k1 ^= bytes[j];\n k1 = _x86Multiply(k1, c1);\n k1 = _x86Rotl(k1, 15);\n k1 = _x86Multiply(k1, c2);\n h1 ^= k1;\n }\n\n h1 ^= bytes.length;\n h2 ^= bytes.length;\n h3 ^= bytes.length;\n h4 ^= bytes.length;\n\n h1 += h2;\n h1 += h3;\n h1 += h4;\n h2 += h1;\n h3 += h1;\n h4 += h1;\n\n h1 = _x86Fmix(h1);\n h2 = _x86Fmix(h2);\n h3 = _x86Fmix(h3);\n h4 = _x86Fmix(h4);\n\n h1 += h2;\n h1 += h3;\n h1 += h4;\n h2 += h1;\n h3 += h1;\n h4 += h1;\n\n return (\n (\"00000000\" + (h1 >>> 0).toString(16)).slice(-8) +\n (\"00000000\" + (h2 >>> 0).toString(16)).slice(-8) +\n (\"00000000\" + (h3 >>> 0).toString(16)).slice(-8) +\n (\"00000000\" + (h4 >>> 0).toString(16)).slice(-8)\n );\n}\n\nfunction x64Hash128(bytes: Buffer, seed?: number) {\n //\n // Given a string and an optional seed as an int, returns a 128 bit\n // hash using the x64 flavor of MurmurHash3, as an unsigned hex.\n //\n seed = seed || 0;\n\n const remainder = bytes.length % 16;\n const blocks = bytes.length - remainder;\n\n let h1 = [0, seed];\n let h2 = [0, seed];\n\n let k1 = [0, 0];\n let k2 = [0, 0];\n\n const c1 = [0x87c37b91, 0x114253d5];\n const c2 = [0x4cf5ad43, 0x2745937f];\n let j = 0;\n\n for (let i = 0; i < blocks; i = i + 16) {\n k1 = [\n bytes[i + 4] | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24),\n bytes[i] | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24),\n ];\n k2 = [\n bytes[i + 12] | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24),\n bytes[i + 8] | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24),\n ];\n\n k1 = _x64Multiply(k1, c1);\n k1 = _x64Rotl(k1, 31);\n k1 = _x64Multiply(k1, c2);\n h1 = _x64Xor(h1, k1);\n\n h1 = _x64Rotl(h1, 27);\n h1 = _x64Add(h1, h2);\n h1 = _x64Add(_x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n\n k2 = _x64Multiply(k2, c2);\n k2 = _x64Rotl(k2, 33);\n k2 = _x64Multiply(k2, c1);\n h2 = _x64Xor(h2, k2);\n\n h2 = _x64Rotl(h2, 31);\n h2 = _x64Add(h2, h1);\n h2 = _x64Add(_x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n j = i + 16;\n }\n\n k1 = [0, 0];\n k2 = [0, 0];\n\n switch (remainder) {\n case 15:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 14]], 48));\n\n case 14:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 13]], 40));\n\n case 13:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 12]], 32));\n\n case 12:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 11]], 24));\n\n case 11:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 10]], 16));\n\n case 10:\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[j + 9]], 8));\n\n case 9:\n k2 = _x64Xor(k2, [0, bytes[j + 8]]);\n k2 = _x64Multiply(k2, c2);\n k2 = _x64Rotl(k2, 33);\n k2 = _x64Multiply(k2, c1);\n h2 = _x64Xor(h2, k2);\n\n case 8:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 7]], 56));\n\n case 7:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 6]], 48));\n\n case 6:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 5]], 40));\n\n case 5:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 4]], 32));\n\n case 4:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 3]], 24));\n\n case 3:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 2]], 16));\n\n case 2:\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[j + 1]], 8));\n\n case 1:\n k1 = _x64Xor(k1, [0, bytes[j]]);\n k1 = _x64Multiply(k1, c1);\n k1 = _x64Rotl(k1, 31);\n k1 = _x64Multiply(k1, c2);\n h1 = _x64Xor(h1, k1);\n }\n\n h1 = _x64Xor(h1, [0, bytes.length]);\n h2 = _x64Xor(h2, [0, bytes.length]);\n\n h1 = _x64Add(h1, h2);\n h2 = _x64Add(h2, h1);\n\n h1 = _x64Fmix(h1);\n h2 = _x64Fmix(h2);\n\n h1 = _x64Add(h1, h2);\n h2 = _x64Add(h2, h1);\n\n // Here we reverse h1 and h2 in Cosmos\n // This is an implementation detail and not part of the public spec\n const h1Buff = Buffer.from(\n (\"00000000\" + (h1[0] >>> 0).toString(16)).slice(-8) +\n (\"00000000\" + (h1[1] >>> 0).toString(16)).slice(-8),\n \"hex\"\n );\n const h1Reversed = reverse(h1Buff).toString(\"hex\");\n const h2Buff = Buffer.from(\n (\"00000000\" + (h2[0] >>> 0).toString(16)).slice(-8) +\n (\"00000000\" + (h2[1] >>> 0).toString(16)).slice(-8),\n \"hex\"\n );\n const h2Reversed = reverse(h2Buff).toString(\"hex\");\n return h1Reversed + h2Reversed;\n}\n\nexport function reverse(buff: Buffer) {\n const buffer = Buffer.allocUnsafe(buff.length);\n\n for (let i = 0, j = buff.length - 1; i <= j; ++i, --j) {\n buffer[i] = buff[j];\n buffer[j] = buff[i];\n }\n return buffer;\n}\n\nexport default {\n version: \"3.0.0\",\n x86: {\n hash32: x86Hash32,\n hash128: x86Hash128,\n },\n x64: {\n hash128: x64Hash128,\n },\n inputValidation: true,\n};\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { doubleToByteArrayJSBI, writeNumberForBinaryEncodingJSBI } from \"./encoding/number\";\nimport { writeStringForBinaryEncoding } from \"./encoding/string\";\nimport { BytePrefix } from \"./encoding/prefix\";\nimport MurmurHash from \"./murmurHash\";\n\nconst MAX_STRING_CHARS = 100;\n\ntype v1Key = string | number | boolean | null | Record<string, unknown> | undefined;\n\nexport function hashV1PartitionKey(partitionKey: v1Key): string {\n const toHash = prefixKeyByType(partitionKey);\n const hash = MurmurHash.x86.hash32(toHash);\n const encodedJSBI = writeNumberForBinaryEncodingJSBI(hash);\n const encodedValue = encodeByType(partitionKey);\n return Buffer.concat([encodedJSBI, encodedValue]).toString(\"hex\").toUpperCase();\n}\n\nfunction prefixKeyByType(key: v1Key): Buffer {\n let bytes: Buffer;\n switch (typeof key) {\n case \"string\": {\n const truncated = key.substr(0, MAX_STRING_CHARS);\n bytes = Buffer.concat([\n Buffer.from(BytePrefix.String, \"hex\"),\n Buffer.from(truncated),\n Buffer.from(BytePrefix.Undefined, \"hex\"),\n ]);\n return bytes;\n }\n case \"number\": {\n const numberBytes = doubleToByteArrayJSBI(key);\n bytes = Buffer.concat([Buffer.from(BytePrefix.Number, \"hex\"), numberBytes]);\n return bytes;\n }\n case \"boolean\": {\n const prefix = key ? BytePrefix.True : BytePrefix.False;\n return Buffer.from(prefix, \"hex\");\n }\n case \"object\": {\n if (key === null) {\n return Buffer.from(BytePrefix.Null, \"hex\");\n }\n return Buffer.from(BytePrefix.Undefined, \"hex\");\n }\n case \"undefined\": {\n return Buffer.from(BytePrefix.Undefined, \"hex\");\n }\n default:\n throw new Error(`Unexpected type: ${typeof key}`);\n }\n}\n\nfunction encodeByType(key: v1Key): Buffer {\n switch (typeof key) {\n case \"string\": {\n const truncated = key.substr(0, MAX_STRING_CHARS);\n return writeStringForBinaryEncoding(truncated);\n }\n case \"number\": {\n const encodedJSBI = writeNumberForBinaryEncodingJSBI(key);\n return encodedJSBI;\n }\n case \"boolean\": {\n const prefix = key ? BytePrefix.True : BytePrefix.False;\n return Buffer.from(prefix, \"hex\");\n }\n case \"object\":\n if (key === null) {\n return Buffer.from(BytePrefix.Null, \"hex\");\n }\n return Buffer.from(BytePrefix.Undefined, \"hex\");\n case \"undefined\":\n return Buffer.from(BytePrefix.Undefined, \"hex\");\n default:\n throw new Error(`Unexpected type: ${typeof key}`);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { doubleToByteArrayJSBI } from \"./encoding/number\";\nimport { BytePrefix } from \"./encoding/prefix\";\nimport MurmurHash from \"./murmurHash\";\n\ntype v2Key = string | number | boolean | null | Record<string, unknown> | undefined;\n\nexport function hashV2PartitionKey(partitionKey: v2Key): string {\n const toHash = prefixKeyByType(partitionKey);\n const hash = MurmurHash.x64.hash128(toHash);\n const reverseBuff: Buffer = reverse(Buffer.from(hash, \"hex\"));\n reverseBuff[0] &= 0x3f;\n return reverseBuff.toString(\"hex\").toUpperCase();\n}\n\nfunction prefixKeyByType(key: v2Key): Buffer {\n let bytes: Buffer;\n switch (typeof key) {\n case \"string\": {\n bytes = Buffer.concat([\n Buffer.from(BytePrefix.String, \"hex\"),\n Buffer.from(key),\n Buffer.from(BytePrefix.Infinity, \"hex\"),\n ]);\n return bytes;\n }\n case \"number\": {\n const numberBytes = doubleToByteArrayJSBI(key);\n bytes = Buffer.concat([Buffer.from(BytePrefix.Number, \"hex\"), numberBytes]);\n return bytes;\n }\n case \"boolean\": {\n const prefix = key ? BytePrefix.True : BytePrefix.False;\n return Buffer.from(prefix, \"hex\");\n }\n case \"object\": {\n if (key === null) {\n return Buffer.from(BytePrefix.Null, \"hex\");\n }\n return Buffer.from(BytePrefix.Undefined, \"hex\");\n }\n case \"undefined\": {\n return Buffer.from(BytePrefix.Undefined, \"hex\");\n }\n default:\n throw new Error(`Unexpected type: ${typeof key}`);\n }\n}\n\nexport function reverse(buff: Buffer): Buffer {\n const buffer = Buffer.allocUnsafe(buff.length);\n\n for (let i = 0, j = buff.length - 1; i <= j; ++i, --j) {\n buffer[i] = buff[j];\n buffer[j] = buff[i];\n }\n return buffer;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { v4 } from \"uuid\";\nconst uuid = v4;\nimport { ChangeFeedIterator } from \"../../ChangeFeedIterator\";\nimport { ChangeFeedOptions } from \"../../ChangeFeedOptions\";\nimport { ClientContext } from \"../../ClientContext\";\nimport { getIdFromLink, getPathFromLink, isItemResourceValid, ResourceType } from \"../../common\";\nimport { extractPartitionKey } from \"../../extractPartitionKey\";\nimport { FetchFunctionCallback, SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions, Response } from \"../../request\";\nimport { Container, PartitionKeyRange } from \"../Container\";\nimport { Item } from \"./Item\";\nimport { ItemDefinition } from \"./ItemDefinition\";\nimport { ItemResponse } from \"./ItemResponse\";\nimport {\n Batch,\n isKeyInRange,\n Operation,\n getPartitionKeyToHash,\n decorateOperation,\n OperationResponse,\n OperationInput,\n BulkOptions,\n decorateBatchOperation,\n splitBatchBasedOnBodySize,\n} from \"../../utils/batch\";\nimport { hashV1PartitionKey } from \"../../utils/hashing/v1\";\nimport { hashV2PartitionKey } from \"../../utils/hashing/v2\";\n\n/**\n * @hidden\n */\nfunction isChangeFeedOptions(options: unknown): options is ChangeFeedOptions {\n const optionsType = typeof options;\n return (\n options && !(optionsType === \"string\" || optionsType === \"boolean\" || optionsType === \"number\")\n );\n}\n\n/**\n * Operations for creating new items, and reading/querying all items\n *\n * @see {@link Item} for reading, replacing, or deleting an existing container; use `.item(id)`.\n */\nexport class Items {\n /**\n * Create an instance of {@link Items} linked to the parent {@link Container}.\n * @param container - The parent container.\n * @hidden\n */\n constructor(\n public readonly container: Container,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Queries all items.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @param options - Used for modifying the request (for instance, specifying the partition key).\n * @example Read all items to array.\n * ```typescript\n * const querySpec: SqlQuerySpec = {\n * query: \"SELECT * FROM Families f WHERE f.lastName = @lastName\",\n * parameters: [\n * {name: \"@lastName\", value: \"Hendricks\"}\n * ]\n * };\n * const {result: items} = await items.query(querySpec).fetchAll();\n * ```\n */\n public query(query: string | SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Queries all items.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @param options - Used for modifying the request (for instance, specifying the partition key).\n * @example Read all items to array.\n * ```typescript\n * const querySpec: SqlQuerySpec = {\n * query: \"SELECT firstname FROM Families f WHERE f.lastName = @lastName\",\n * parameters: [\n * {name: \"@lastName\", value: \"Hendricks\"}\n * ]\n * };\n * const {result: items} = await items.query<{firstName: string}>(querySpec).fetchAll();\n * ```\n */\n public query<T>(query: string | SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: string | SqlQuerySpec, options: FeedOptions = {}): QueryIterator<T> {\n const path = getPathFromLink(this.container.url, ResourceType.item);\n const id = getIdFromLink(this.container.url);\n\n const fetchFunction: FetchFunctionCallback = (innerOptions: FeedOptions) => {\n return this.clientContext.queryFeed({\n path,\n resourceType: ResourceType.item,\n resourceId: id,\n resultFn: (result) => (result ? result.Documents : []),\n query,\n options: innerOptions,\n partitionKey: options.partitionKey,\n });\n };\n\n return new QueryIterator(\n this.clientContext,\n query,\n options,\n fetchFunction,\n this.container.url,\n ResourceType.item\n );\n }\n\n /**\n * Create a `ChangeFeedIterator` to iterate over pages of changes\n *\n * @deprecated Use `changeFeed` instead.\n *\n * @example Read from the beginning of the change feed.\n * ```javascript\n * const iterator = items.readChangeFeed({ startFromBeginning: true });\n * const firstPage = await iterator.fetchNext();\n * const firstPageResults = firstPage.result\n * const secondPage = await iterator.fetchNext();\n * ```\n */\n public readChangeFeed(\n partitionKey: string | number | boolean,\n changeFeedOptions?: ChangeFeedOptions\n ): ChangeFeedIterator<any>;\n /**\n * Create a `ChangeFeedIterator` to iterate over pages of changes\n * @deprecated Use `changeFeed` instead.\n *\n */\n public readChangeFeed(changeFeedOptions?: ChangeFeedOptions): ChangeFeedIterator<any>;\n /**\n * Create a `ChangeFeedIterator` to iterate over pages of changes\n * @deprecated Use `changeFeed` instead.\n */\n public readChangeFeed<T>(\n partitionKey: string | number | boolean,\n changeFeedOptions?: ChangeFeedOptions\n ): ChangeFeedIterator<T>;\n /**\n * Create a `ChangeFeedIterator` to iterate over pages of changes\n * @deprecated Use `changeFeed` instead.\n */\n public readChangeFeed<T>(changeFeedOptions?: ChangeFeedOptions): ChangeFeedIterator<T>;\n public readChangeFeed<T>(\n partitionKeyOrChangeFeedOptions?: string | number | boolean | ChangeFeedOptions,\n changeFeedOptions?: ChangeFeedOptions\n ): ChangeFeedIterator<T> {\n if (isChangeFeedOptions(partitionKeyOrChangeFeedOptions)) {\n return this.changeFeed(partitionKeyOrChangeFeedOptions);\n } else {\n return this.changeFeed(partitionKeyOrChangeFeedOptions, changeFeedOptions);\n }\n }\n\n /**\n * Create a `ChangeFeedIterator` to iterate over pages of changes\n *\n * @example Read from the beginning of the change feed.\n * ```javascript\n * const iterator = items.readChangeFeed({ startFromBeginning: true });\n * const firstPage = await iterator.fetchNext();\n * const firstPageResults = firstPage.result\n * const secondPage = await iterator.fetchNext();\n * ```\n */\n public changeFeed(\n partitionKey: string | number | boolean,\n changeFeedOptions?: ChangeFeedOptions\n ): ChangeFeedIterator<any>;\n /**\n * Create a `ChangeFeedIterator` to iterate over pages of changes\n */\n public changeFeed(changeFeedOptions?: ChangeFeedOptions): ChangeFeedIterator<any>;\n /**\n * Create a `ChangeFeedIterator` to iterate over pages of changes\n */\n public changeFeed<T>(\n partitionKey: string | number | boolean,\n changeFeedOptions?: ChangeFeedOptions\n ): ChangeFeedIterator<T>;\n /**\n * Create a `ChangeFeedIterator` to iterate over pages of changes\n */\n public changeFeed<T>(changeFeedOptions?: ChangeFeedOptions): ChangeFeedIterator<T>;\n public changeFeed<T>(\n partitionKeyOrChangeFeedOptions?: string | number | boolean | ChangeFeedOptions,\n changeFeedOptions?: ChangeFeedOptions\n ): ChangeFeedIterator<T> {\n let partitionKey: string | number | boolean;\n if (!changeFeedOptions && isChangeFeedOptions(partitionKeyOrChangeFeedOptions)) {\n partitionKey = undefined;\n changeFeedOptions = partitionKeyOrChangeFeedOptions;\n } else if (\n partitionKeyOrChangeFeedOptions !== undefined &&\n !isChangeFeedOptions(partitionKeyOrChangeFeedOptions)\n ) {\n partitionKey = partitionKeyOrChangeFeedOptions;\n }\n\n if (!changeFeedOptions) {\n changeFeedOptions = {};\n }\n\n const path = getPathFromLink(this.container.url, ResourceType.item);\n const id = getIdFromLink(this.container.url);\n return new ChangeFeedIterator<T>(this.clientContext, id, path, partitionKey, changeFeedOptions);\n }\n\n /**\n * Read all items.\n *\n * There is no set schema for JSON items. They may contain any number of custom properties.\n *\n * @param options - Used for modifying the request (for instance, specifying the partition key).\n * @example Read all items to array.\n * ```typescript\n * const {body: containerList} = await items.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<ItemDefinition>;\n /**\n * Read all items.\n *\n * Any provided type, T, is not necessarily enforced by the SDK.\n * You may get more or less properties and it's up to your logic to enforce it.\n *\n * There is no set schema for JSON items. They may contain any number of custom properties.\n *\n * @param options - Used for modifying the request (for instance, specifying the partition key).\n * @example Read all items to array.\n * ```typescript\n * const {body: containerList} = await items.readAll().fetchAll();\n * ```\n */\n public readAll<T extends ItemDefinition>(options?: FeedOptions): QueryIterator<T>;\n public readAll<T extends ItemDefinition>(options?: FeedOptions): QueryIterator<T> {\n return this.query<T>(\"SELECT * from c\", options);\n }\n\n /**\n * Create an item.\n *\n * Any provided type, T, is not necessarily enforced by the SDK.\n * You may get more or less properties and it's up to your logic to enforce it.\n *\n * There is no set schema for JSON items. They may contain any number of custom properties.\n *\n * @param body - Represents the body of the item. Can contain any number of user defined properties.\n * @param options - Used for modifying the request (for instance, specifying the partition key).\n */\n public async create<T extends ItemDefinition = any>(\n body: T,\n options: RequestOptions = {}\n ): Promise<ItemResponse<T>> {\n // Generate random document id if the id is missing in the payload and\n // options.disableAutomaticIdGeneration != true\n if ((body.id === undefined || body.id === \"\") && !options.disableAutomaticIdGeneration) {\n body.id = uuid();\n }\n\n const { resource: partitionKeyDefinition } = await this.container.readPartitionKeyDefinition();\n const partitionKey = extractPartitionKey(body, partitionKeyDefinition);\n\n const err = {};\n if (!isItemResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.container.url, ResourceType.item);\n const id = getIdFromLink(this.container.url);\n\n const response = await this.clientContext.create<T>({\n body,\n path,\n resourceType: ResourceType.item,\n resourceId: id,\n options,\n partitionKey,\n });\n\n const ref = new Item(\n this.container,\n (response.result as any).id,\n partitionKey,\n this.clientContext\n );\n return new ItemResponse(\n response.result,\n response.headers,\n response.code,\n response.substatus,\n ref\n );\n }\n\n /**\n * Upsert an item.\n *\n * There is no set schema for JSON items. They may contain any number of custom properties.\n *\n * @param body - Represents the body of the item. Can contain any number of user defined properties.\n * @param options - Used for modifying the request (for instance, specifying the partition key).\n */\n public async upsert(\n body: unknown,\n options?: RequestOptions\n ): Promise<ItemResponse<ItemDefinition>>;\n /**\n * Upsert an item.\n *\n * Any provided type, T, is not necessarily enforced by the SDK.\n * You may get more or less properties and it's up to your logic to enforce it.\n *\n * There is no set schema for JSON items. They may contain any number of custom properties.\n *\n * @param body - Represents the body of the item. Can contain any number of user defined properties.\n * @param options - Used for modifying the request (for instance, specifying the partition key).\n */\n public async upsert<T extends ItemDefinition>(\n body: T,\n options?: RequestOptions\n ): Promise<ItemResponse<T>>;\n public async upsert<T extends ItemDefinition>(\n body: T,\n options: RequestOptions = {}\n ): Promise<ItemResponse<T>> {\n const { resource: partitionKeyDefinition } = await this.container.readPartitionKeyDefinition();\n const partitionKey = extractPartitionKey(body, partitionKeyDefinition);\n\n // Generate random document id if the id is missing in the payload and\n // options.disableAutomaticIdGeneration != true\n if ((body.id === undefined || body.id === \"\") && !options.disableAutomaticIdGeneration) {\n body.id = uuid();\n }\n\n const err = {};\n if (!isItemResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.container.url, ResourceType.item);\n const id = getIdFromLink(this.container.url);\n\n const response = await this.clientContext.upsert<T>({\n body,\n path,\n resourceType: ResourceType.item,\n resourceId: id,\n options,\n partitionKey,\n });\n\n const ref = new Item(\n this.container,\n (response.result as any).id,\n partitionKey,\n this.clientContext\n );\n return new ItemResponse(\n response.result,\n response.headers,\n response.code,\n response.substatus,\n ref\n );\n }\n\n /**\n * Execute bulk operations on items.\n *\n * Bulk takes an array of Operations which are typed based on what the operation does.\n * The choices are: Create, Upsert, Read, Replace, and Delete\n *\n * Usage example:\n * ```typescript\n * // partitionKey is optional at the top level if present in the resourceBody\n * const operations: OperationInput[] = [\n * {\n * operationType: \"Create\",\n * resourceBody: { id: \"doc1\", name: \"sample\", key: \"A\" }\n * },\n * {\n * operationType: \"Upsert\",\n * partitionKey: 'A',\n * resourceBody: { id: \"doc2\", name: \"other\", key: \"A\" }\n * }\n * ]\n *\n * await database.container.items.bulk(operations)\n * ```\n *\n * @param operations - List of operations. Limit 100\n * @param bulkOptions - Optional options object to modify bulk behavior. Pass \\{ continueOnError: true \\} to continue executing operations when one fails. (Defaults to false) ** NOTE: THIS WILL DEFAULT TO TRUE IN THE 4.0 RELEASE\n * @param options - Used for modifying the request.\n */\n public async bulk(\n operations: OperationInput[],\n bulkOptions?: BulkOptions,\n options?: RequestOptions\n ): Promise<OperationResponse[]> {\n const { resources: partitionKeyRanges } = await this.container\n .readPartitionKeyRanges()\n .fetchAll();\n const { resource: definition } = await this.container.getPartitionKeyDefinition();\n const batches: Batch[] = partitionKeyRanges.map((keyRange: PartitionKeyRange) => {\n return {\n min: keyRange.minInclusive,\n max: keyRange.maxExclusive,\n rangeId: keyRange.id,\n indexes: [],\n operations: [],\n };\n });\n operations\n .map((operation) => decorateOperation(operation, definition, options))\n .forEach((operation: Operation, index: number) => {\n const partitionProp = definition.paths[0].replace(\"/\", \"\");\n const isV2 = definition.version && definition.version === 2;\n const toHashKey = getPartitionKeyToHash(operation, partitionProp);\n const hashed = isV2 ? hashV2PartitionKey(toHashKey) : hashV1PartitionKey(toHashKey);\n const batchForKey = batches.find((batch: Batch) => {\n return isKeyInRange(batch.min, batch.max, hashed);\n });\n batchForKey.operations.push(operation);\n batchForKey.indexes.push(index);\n });\n\n const path = getPathFromLink(this.container.url, ResourceType.item);\n\n const orderedResponses: OperationResponse[] = [];\n await Promise.all(\n batches\n .filter((batch: Batch) => batch.operations.length)\n .flatMap((batch: Batch) => splitBatchBasedOnBodySize(batch))\n .map(async (batch: Batch) => {\n if (batch.operations.length > 100) {\n throw new Error(\"Cannot run bulk request with more than 100 operations per partition\");\n }\n try {\n const response = await this.clientContext.bulk({\n body: batch.operations,\n partitionKeyRangeId: batch.rangeId,\n path,\n resourceId: this.container.url,\n bulkOptions,\n options,\n });\n response.result.forEach((operationResponse: OperationResponse, index: number) => {\n orderedResponses[batch.indexes[index]] = operationResponse;\n });\n } catch (err: any) {\n // In the case of 410 errors, we need to recompute the partition key ranges\n // and redo the batch request, however, 410 errors occur for unsupported\n // partition key types as well since we don't support them, so for now we throw\n if (err.code === 410) {\n throw new Error(\n \"Partition key error. Either the partitions have split or an operation has an unsupported partitionKey type\"\n );\n }\n throw new Error(`Bulk request errored with: ${err.message}`);\n }\n })\n );\n return orderedResponses;\n }\n\n /**\n * Execute transactional batch operations on items.\n *\n * Batch takes an array of Operations which are typed based on what the operation does. Batch is transactional and will rollback all operations if one fails.\n * The choices are: Create, Upsert, Read, Replace, and Delete\n *\n * Usage example:\n * ```typescript\n * // partitionKey is required as a second argument to batch, but defaults to the default partition key\n * const operations: OperationInput[] = [\n * {\n * operationType: \"Create\",\n * resourceBody: { id: \"doc1\", name: \"sample\", key: \"A\" }\n * },\n * {\n * operationType: \"Upsert\",\n * partitionKey: 'A',\n * resourceBody: { id: \"doc2\", name: \"other\", key: \"A\" }\n * }\n * ]\n *\n * await database.container.items.batch(operations)\n * ```\n *\n * @param operations - List of operations. Limit 100\n * @param options - Used for modifying the request\n */\n public async batch(\n operations: OperationInput[],\n partitionKey: string = \"[{}]\",\n options?: RequestOptions\n ): Promise<Response<OperationResponse[]>> {\n operations.map((operation) => decorateBatchOperation(operation, options));\n\n const path = getPathFromLink(this.container.url, ResourceType.item);\n\n if (operations.length > 100) {\n throw new Error(\"Cannot run batch request with more than 100 operations per partition\");\n }\n try {\n const response: Response<OperationResponse[]> = await this.clientContext.batch({\n body: operations,\n partitionKey,\n path,\n resourceId: this.container.url,\n options,\n });\n return response;\n } catch (err: any) {\n throw new Error(`Batch request error: ${err.message}`);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { StoredProcedure } from \"./StoredProcedure\";\nimport { StoredProcedureDefinition } from \"./StoredProcedureDefinition\";\n\nexport class StoredProcedureResponse extends ResourceResponse<\n StoredProcedureDefinition & Resource\n> {\n constructor(\n resource: StoredProcedureDefinition & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n storedProcedure: StoredProcedure\n ) {\n super(resource, headers, statusCode);\n this.storedProcedure = storedProcedure;\n }\n /**\n * A reference to the {@link StoredProcedure} which the {@link StoredProcedureDefinition} corresponds to.\n */\n public readonly storedProcedure: StoredProcedure;\n\n /**\n * Alias for storedProcedure.\n *\n * A reference to the {@link StoredProcedure} which the {@link StoredProcedureDefinition} corresponds to.\n */\n public get sproc(): StoredProcedure {\n return this.storedProcedure;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport {\n createStoredProcedureUri,\n getIdFromLink,\n getPathFromLink,\n isResourceValid,\n ResourceType,\n} from \"../../common\";\nimport { PartitionKey } from \"../../documents/PartitionKey\";\nimport { undefinedPartitionKey } from \"../../extractPartitionKey\";\nimport { RequestOptions, ResourceResponse } from \"../../request\";\nimport { Container } from \"../Container\";\nimport { StoredProcedureDefinition } from \"./StoredProcedureDefinition\";\nimport { StoredProcedureResponse } from \"./StoredProcedureResponse\";\n\n/**\n * Operations for reading, replacing, deleting, or executing a specific, existing stored procedure by id.\n *\n * For operations to create, read all, or query Stored Procedures,\n */\nexport class StoredProcedure {\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return createStoredProcedureUri(this.container.database.id, this.container.id, this.id);\n }\n /**\n * Creates a new instance of {@link StoredProcedure} linked to the parent {@link Container}.\n * @param container - The parent {@link Container}.\n * @param id - The id of the given {@link StoredProcedure}.\n * @hidden\n */\n constructor(\n public readonly container: Container,\n public readonly id: string,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Read the {@link StoredProcedureDefinition} for the given {@link StoredProcedure}.\n */\n public async read(options?: RequestOptions): Promise<StoredProcedureResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n const response = await this.clientContext.read<StoredProcedureDefinition>({\n path,\n resourceType: ResourceType.sproc,\n resourceId: id,\n options,\n });\n return new StoredProcedureResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Replace the given {@link StoredProcedure} with the specified {@link StoredProcedureDefinition}.\n * @param body - The specified {@link StoredProcedureDefinition} to replace the existing definition.\n */\n public async replace(\n body: StoredProcedureDefinition,\n options?: RequestOptions\n ): Promise<StoredProcedureResponse> {\n if (body.body) {\n body.body = body.body.toString();\n }\n\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.replace<StoredProcedureDefinition>({\n body,\n path,\n resourceType: ResourceType.sproc,\n resourceId: id,\n options,\n });\n return new StoredProcedureResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Delete the given {@link StoredProcedure}.\n */\n public async delete(options?: RequestOptions): Promise<StoredProcedureResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.delete<StoredProcedureDefinition>({\n path,\n resourceType: ResourceType.sproc,\n resourceId: id,\n options,\n });\n return new StoredProcedureResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Execute the given {@link StoredProcedure}.\n *\n * The specified type, T, is not enforced by the client.\n * Be sure to validate the response from the stored procedure matches the type, T, you provide.\n *\n * @param partitionKey - The partition key to use when executing the stored procedure\n * @param params - Array of parameters to pass as arguments to the given {@link StoredProcedure}.\n * @param options - Additional options, such as the partition key to invoke the {@link StoredProcedure} on.\n */\n public async execute<T = any>(\n partitionKey: PartitionKey,\n params?: any[],\n options?: RequestOptions\n ): Promise<ResourceResponse<T>> {\n if (partitionKey === undefined) {\n const { resource: partitionKeyDefinition } =\n await this.container.readPartitionKeyDefinition();\n partitionKey = undefinedPartitionKey(partitionKeyDefinition);\n }\n const response = await this.clientContext.execute<T>({\n sprocLink: this.url,\n params,\n options,\n partitionKey,\n });\n return new ResourceResponse<T>(response.result, response.headers, response.code);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { getIdFromLink, getPathFromLink, isResourceValid, ResourceType } from \"../../common\";\nimport { SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions } from \"../../request\";\nimport { Container } from \"../Container\";\nimport { Resource } from \"../Resource\";\nimport { StoredProcedure } from \"./StoredProcedure\";\nimport { StoredProcedureDefinition } from \"./StoredProcedureDefinition\";\nimport { StoredProcedureResponse } from \"./StoredProcedureResponse\";\n\n/**\n * Operations for creating, upserting, or reading/querying all Stored Procedures.\n *\n * For operations to read, replace, delete, or execute a specific, existing stored procedure by id, see `container.storedProcedure()`.\n */\nexport class StoredProcedures {\n /**\n * @param container - The parent {@link Container}.\n * @hidden\n */\n constructor(\n public readonly container: Container,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Query all Stored Procedures.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @example Read all stored procedures to array.\n * ```typescript\n * const querySpec: SqlQuerySpec = {\n * query: \"SELECT * FROM root r WHERE r.id = @sproc\",\n * parameters: [\n * {name: \"@sproc\", value: \"Todo\"}\n * ]\n * };\n * const {body: sprocList} = await containers.storedProcedures.query(querySpec).fetchAll();\n * ```\n */\n public query(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Query all Stored Procedures.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @example Read all stored procedures to array.\n * ```typescript\n * const querySpec: SqlQuerySpec = {\n * query: \"SELECT * FROM root r WHERE r.id = @sproc\",\n * parameters: [\n * {name: \"@sproc\", value: \"Todo\"}\n * ]\n * };\n * const {body: sprocList} = await containers.storedProcedures.query(querySpec).fetchAll();\n * ```\n */\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n const path = getPathFromLink(this.container.url, ResourceType.sproc);\n const id = getIdFromLink(this.container.url);\n\n return new QueryIterator(this.clientContext, query, options, (innerOptions) => {\n return this.clientContext.queryFeed({\n path,\n resourceType: ResourceType.sproc,\n resourceId: id,\n resultFn: (result) => result.StoredProcedures,\n query,\n options: innerOptions,\n });\n });\n }\n\n /**\n * Read all stored procedures.\n * @example Read all stored procedures to array.\n * ```typescript\n * const {body: sprocList} = await containers.storedProcedures.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<StoredProcedureDefinition & Resource> {\n return this.query<StoredProcedureDefinition & Resource>(undefined, options);\n }\n\n /**\n * Create a StoredProcedure.\n *\n * Azure Cosmos DB allows stored procedures to be executed in the storage tier,\n * directly against an item container. The script\n * gets executed under ACID transactions on the primary storage partition of the\n * specified container. For additional details,\n * refer to the server-side JavaScript API documentation.\n */\n public async create(\n body: StoredProcedureDefinition,\n options?: RequestOptions\n ): Promise<StoredProcedureResponse> {\n if (body.body) {\n body.body = body.body.toString();\n }\n\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.container.url, ResourceType.sproc);\n const id = getIdFromLink(this.container.url);\n\n const response = await this.clientContext.create<StoredProcedureDefinition>({\n body,\n path,\n resourceType: ResourceType.sproc,\n resourceId: id,\n options,\n });\n const ref = new StoredProcedure(this.container, response.result.id, this.clientContext);\n return new StoredProcedureResponse(response.result, response.headers, response.code, ref);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { Trigger } from \"./index\";\nimport { TriggerDefinition } from \"./TriggerDefinition\";\n\nexport class TriggerResponse extends ResourceResponse<TriggerDefinition & Resource> {\n constructor(\n resource: TriggerDefinition & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n trigger: Trigger\n ) {\n super(resource, headers, statusCode);\n this.trigger = trigger;\n }\n /** A reference to the {@link Trigger} corresponding to the returned {@link TriggerDefinition}. */\n public readonly trigger: Trigger;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport {\n createTriggerUri,\n getIdFromLink,\n getPathFromLink,\n isResourceValid,\n ResourceType,\n} from \"../../common\";\nimport { RequestOptions } from \"../../request\";\nimport { Container } from \"../Container\";\nimport { TriggerDefinition } from \"./TriggerDefinition\";\nimport { TriggerResponse } from \"./TriggerResponse\";\n\n/**\n * Operations to read, replace, or delete a {@link Trigger}.\n *\n * Use `container.triggers` to create, upsert, query, or read all.\n */\nexport class Trigger {\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return createTriggerUri(this.container.database.id, this.container.id, this.id);\n }\n\n /**\n * @hidden\n * @param container - The parent {@link Container}.\n * @param id - The id of the given {@link Trigger}.\n */\n constructor(\n public readonly container: Container,\n public readonly id: string,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Read the {@link TriggerDefinition} for the given {@link Trigger}.\n */\n public async read(options?: RequestOptions): Promise<TriggerResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.read<TriggerDefinition>({\n path,\n resourceType: ResourceType.trigger,\n resourceId: id,\n options,\n });\n return new TriggerResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Replace the given {@link Trigger} with the specified {@link TriggerDefinition}.\n * @param body - The specified {@link TriggerDefinition} to replace the existing definition with.\n */\n public async replace(\n body: TriggerDefinition,\n options?: RequestOptions\n ): Promise<TriggerResponse> {\n if (body.body) {\n body.body = body.body.toString();\n }\n\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.replace<TriggerDefinition>({\n body,\n path,\n resourceType: ResourceType.trigger,\n resourceId: id,\n options,\n });\n return new TriggerResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Delete the given {@link Trigger}.\n */\n public async delete(options?: RequestOptions): Promise<TriggerResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.delete<TriggerDefinition>({\n path,\n resourceType: ResourceType.trigger,\n resourceId: id,\n options,\n });\n return new TriggerResponse(response.result, response.headers, response.code, this);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { getIdFromLink, getPathFromLink, isResourceValid, ResourceType } from \"../../common\";\nimport { SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions } from \"../../request\";\nimport { Container } from \"../Container\";\nimport { Resource } from \"../Resource\";\nimport { Trigger } from \"./Trigger\";\nimport { TriggerDefinition } from \"./TriggerDefinition\";\nimport { TriggerResponse } from \"./TriggerResponse\";\n\n/**\n * Operations to create, upsert, query, and read all triggers.\n *\n * Use `container.triggers` to read, replace, or delete a {@link Trigger}.\n */\nexport class Triggers {\n /**\n * @hidden\n * @param container - The parent {@link Container}.\n */\n constructor(\n public readonly container: Container,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Query all Triggers.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Query all Triggers.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n const path = getPathFromLink(this.container.url, ResourceType.trigger);\n const id = getIdFromLink(this.container.url);\n\n return new QueryIterator(this.clientContext, query, options, (innerOptions) => {\n return this.clientContext.queryFeed({\n path,\n resourceType: ResourceType.trigger,\n resourceId: id,\n resultFn: (result) => result.Triggers,\n query,\n options: innerOptions,\n });\n });\n }\n\n /**\n * Read all Triggers.\n * @example Read all trigger to array.\n * ```typescript\n * const {body: triggerList} = await container.triggers.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<TriggerDefinition & Resource> {\n return this.query<TriggerDefinition & Resource>(undefined, options);\n }\n /**\n * Create a trigger.\n *\n * Azure Cosmos DB supports pre and post triggers defined in JavaScript to be executed\n * on creates, updates and deletes.\n *\n * For additional details, refer to the server-side JavaScript API documentation.\n */\n public async create(body: TriggerDefinition, options?: RequestOptions): Promise<TriggerResponse> {\n if (body.body) {\n body.body = body.body.toString();\n }\n\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.container.url, ResourceType.trigger);\n const id = getIdFromLink(this.container.url);\n\n const response = await this.clientContext.create<TriggerDefinition>({\n body,\n path,\n resourceType: ResourceType.trigger,\n resourceId: id,\n options,\n });\n const ref = new Trigger(this.container, response.result.id, this.clientContext);\n return new TriggerResponse(response.result, response.headers, response.code, ref);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { UserDefinedFunction } from \"./UserDefinedFunction\";\nimport { UserDefinedFunctionDefinition } from \"./UserDefinedFunctionDefinition\";\n\nexport class UserDefinedFunctionResponse extends ResourceResponse<\n UserDefinedFunctionDefinition & Resource\n> {\n constructor(\n resource: UserDefinedFunctionDefinition & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n udf: UserDefinedFunction\n ) {\n super(resource, headers, statusCode);\n this.userDefinedFunction = udf;\n }\n /** A reference to the {@link UserDefinedFunction} corresponding to the returned {@link UserDefinedFunctionDefinition}. */\n public readonly userDefinedFunction: UserDefinedFunction;\n /**\n * Alias for `userDefinedFunction(id)`.\n *\n * A reference to the {@link UserDefinedFunction} corresponding to the returned {@link UserDefinedFunctionDefinition}.\n */\n public get udf(): UserDefinedFunction {\n return this.userDefinedFunction;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport {\n createUserDefinedFunctionUri,\n getIdFromLink,\n getPathFromLink,\n isResourceValid,\n ResourceType,\n} from \"../../common\";\nimport { RequestOptions } from \"../../request\";\nimport { Container } from \"../Container\";\nimport { UserDefinedFunctionDefinition } from \"./UserDefinedFunctionDefinition\";\nimport { UserDefinedFunctionResponse } from \"./UserDefinedFunctionResponse\";\n\n/**\n * Used to read, replace, or delete a specified User Definied Function by id.\n *\n * @see {@link UserDefinedFunction} to create, upsert, query, read all User Defined Functions.\n */\nexport class UserDefinedFunction {\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return createUserDefinedFunctionUri(this.container.database.id, this.container.id, this.id);\n }\n /**\n * @hidden\n * @param container - The parent {@link Container}.\n * @param id - The id of the given {@link UserDefinedFunction}.\n */\n constructor(\n public readonly container: Container,\n public readonly id: string,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Read the {@link UserDefinedFunctionDefinition} for the given {@link UserDefinedFunction}.\n */\n public async read(options?: RequestOptions): Promise<UserDefinedFunctionResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.read<UserDefinedFunctionDefinition>({\n path,\n resourceType: ResourceType.udf,\n resourceId: id,\n options,\n });\n return new UserDefinedFunctionResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Replace the given {@link UserDefinedFunction} with the specified {@link UserDefinedFunctionDefinition}.\n * @param options -\n */\n public async replace(\n body: UserDefinedFunctionDefinition,\n options?: RequestOptions\n ): Promise<UserDefinedFunctionResponse> {\n if (body.body) {\n body.body = body.body.toString();\n }\n\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.replace<UserDefinedFunctionDefinition>({\n body,\n path,\n resourceType: ResourceType.udf,\n resourceId: id,\n options,\n });\n return new UserDefinedFunctionResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Delete the given {@link UserDefined}.\n */\n public async delete(options?: RequestOptions): Promise<UserDefinedFunctionResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.delete({\n path,\n resourceType: ResourceType.udf,\n resourceId: id,\n options,\n });\n return new UserDefinedFunctionResponse(response.result, response.headers, response.code, this);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { getIdFromLink, getPathFromLink, isResourceValid, ResourceType } from \"../../common\";\nimport { SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions } from \"../../request\";\nimport { Container } from \"../Container\";\nimport { Resource } from \"../Resource\";\nimport { UserDefinedFunction } from \"./UserDefinedFunction\";\nimport { UserDefinedFunctionDefinition } from \"./UserDefinedFunctionDefinition\";\nimport { UserDefinedFunctionResponse } from \"./UserDefinedFunctionResponse\";\n\n/**\n * Used to create, upsert, query, or read all User Defined Functions.\n *\n * @see {@link UserDefinedFunction} to read, replace, or delete a given User Defined Function by id.\n */\nexport class UserDefinedFunctions {\n /**\n * @hidden\n * @param container - The parent {@link Container}.\n */\n constructor(\n public readonly container: Container,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Query all User Defined Functions.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Query all User Defined Functions.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n const path = getPathFromLink(this.container.url, ResourceType.udf);\n const id = getIdFromLink(this.container.url);\n\n return new QueryIterator(this.clientContext, query, options, (innerOptions) => {\n return this.clientContext.queryFeed({\n path,\n resourceType: ResourceType.udf,\n resourceId: id,\n resultFn: (result) => result.UserDefinedFunctions,\n query,\n options: innerOptions,\n });\n });\n }\n\n /**\n * Read all User Defined Functions.\n * @example Read all User Defined Functions to array.\n * ```typescript\n * const {body: udfList} = await container.userDefinedFunctions.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<UserDefinedFunctionDefinition & Resource> {\n return this.query<UserDefinedFunctionDefinition & Resource>(undefined, options);\n }\n\n /**\n * Create a UserDefinedFunction.\n *\n * Azure Cosmos DB supports JavaScript UDFs which can be used inside queries, stored procedures and triggers.\n *\n * For additional details, refer to the server-side JavaScript API documentation.\n *\n */\n public async create(\n body: UserDefinedFunctionDefinition,\n options?: RequestOptions\n ): Promise<UserDefinedFunctionResponse> {\n if (body.body) {\n body.body = body.body.toString();\n }\n\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.container.url, ResourceType.udf);\n const id = getIdFromLink(this.container.url);\n\n const response = await this.clientContext.create<UserDefinedFunctionDefinition>({\n body,\n path,\n resourceType: ResourceType.udf,\n resourceId: id,\n options,\n });\n const ref = new UserDefinedFunction(this.container, response.result.id, this.clientContext);\n return new UserDefinedFunctionResponse(response.result, response.headers, response.code, ref);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { StoredProcedures, StoredProcedure } from \"../StoredProcedure\";\nimport { Trigger, Triggers } from \"../Trigger\";\nimport { UserDefinedFunction, UserDefinedFunctions } from \"../UserDefinedFunction\";\nimport { ClientContext } from \"../../ClientContext\";\nimport { Container } from \"../Container/Container\";\n\nexport class Scripts {\n /**\n * @param container - The parent {@link Container}.\n * @hidden\n */\n constructor(\n public readonly container: Container,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Used to read, replace, or delete a specific, existing {@link StoredProcedure} by id.\n *\n * Use `.storedProcedures` for creating new stored procedures, or querying/reading all stored procedures.\n * @param id - The id of the {@link StoredProcedure}.\n */\n public storedProcedure(id: string): StoredProcedure {\n return new StoredProcedure(this.container, id, this.clientContext);\n }\n\n /**\n * Used to read, replace, or delete a specific, existing {@link Trigger} by id.\n *\n * Use `.triggers` for creating new triggers, or querying/reading all triggers.\n * @param id - The id of the {@link Trigger}.\n */\n public trigger(id: string): Trigger {\n return new Trigger(this.container, id, this.clientContext);\n }\n\n /**\n * Used to read, replace, or delete a specific, existing {@link UserDefinedFunction} by id.\n *\n * Use `.userDefinedFunctions` for creating new user defined functions, or querying/reading all user defined functions.\n * @param id - The id of the {@link UserDefinedFunction}.\n */\n public userDefinedFunction(id: string): UserDefinedFunction {\n return new UserDefinedFunction(this.container, id, this.clientContext);\n }\n\n private $sprocs: StoredProcedures;\n /**\n * Operations for creating new stored procedures, and reading/querying all stored procedures.\n *\n * For reading, replacing, or deleting an existing stored procedure, use `.storedProcedure(id)`.\n */\n public get storedProcedures(): StoredProcedures {\n if (!this.$sprocs) {\n this.$sprocs = new StoredProcedures(this.container, this.clientContext);\n }\n return this.$sprocs;\n }\n\n private $triggers: Triggers;\n /**\n * Operations for creating new triggers, and reading/querying all triggers.\n *\n * For reading, replacing, or deleting an existing trigger, use `.trigger(id)`.\n */\n public get triggers(): Triggers {\n if (!this.$triggers) {\n this.$triggers = new Triggers(this.container, this.clientContext);\n }\n return this.$triggers;\n }\n\n private $udfs: UserDefinedFunctions;\n /**\n * Operations for creating new user defined functions, and reading/querying all user defined functions.\n *\n * For reading, replacing, or deleting an existing user defined function, use `.userDefinedFunction(id)`.\n */\n public get userDefinedFunctions(): UserDefinedFunctions {\n if (!this.$udfs) {\n this.$udfs = new UserDefinedFunctions(this.container, this.clientContext);\n }\n return this.$udfs;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request/ResourceResponse\";\nimport { Resource } from \"../Resource\";\nimport { ContainerDefinition } from \"./ContainerDefinition\";\nimport { Container } from \"./index\";\n\n/** Response object for Container operations */\nexport class ContainerResponse extends ResourceResponse<ContainerDefinition & Resource> {\n constructor(\n resource: ContainerDefinition & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n container: Container\n ) {\n super(resource, headers, statusCode);\n this.container = container;\n }\n /** A reference to the {@link Container} that the returned {@link ContainerDefinition} corresponds to. */\n public readonly container: Container;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { Offer } from \"./Offer\";\nimport { OfferDefinition } from \"./OfferDefinition\";\n\nexport class OfferResponse extends ResourceResponse<OfferDefinition & Resource> {\n constructor(\n resource: OfferDefinition & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n offer?: Offer\n ) {\n super(resource, headers, statusCode);\n this.offer = offer;\n }\n /** A reference to the {@link Offer} corresponding to the returned {@link OfferDefinition}. */\n public readonly offer: Offer;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { Constants, isResourceValid, ResourceType } from \"../../common\";\nimport { CosmosClient } from \"../../CosmosClient\";\nimport { RequestOptions } from \"../../request\";\nimport { OfferDefinition } from \"./OfferDefinition\";\nimport { OfferResponse } from \"./OfferResponse\";\n\n/**\n * Use to read or replace an existing {@link Offer} by id.\n *\n * @see {@link Offers} to query or read all offers.\n */\nexport class Offer {\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return `/${Constants.Path.OffersPathSegment}/${this.id}`;\n }\n /**\n * @hidden\n * @param client - The parent {@link CosmosClient} for the Database Account.\n * @param id - The id of the given {@link Offer}.\n */\n constructor(\n public readonly client: CosmosClient,\n public readonly id: string,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Read the {@link OfferDefinition} for the given {@link Offer}.\n */\n public async read(options?: RequestOptions): Promise<OfferResponse> {\n const response = await this.clientContext.read<OfferDefinition>({\n path: this.url,\n resourceType: ResourceType.offer,\n resourceId: this.id,\n options,\n });\n return new OfferResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Replace the given {@link Offer} with the specified {@link OfferDefinition}.\n * @param body - The specified {@link OfferDefinition}\n */\n public async replace(body: OfferDefinition, options?: RequestOptions): Promise<OfferResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n const response = await this.clientContext.replace<OfferDefinition>({\n body,\n path: this.url,\n resourceType: ResourceType.offer,\n resourceId: this.id,\n options,\n });\n return new OfferResponse(response.result, response.headers, response.code, this);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { ResourceType } from \"../../common\";\nimport { CosmosClient } from \"../../CosmosClient\";\nimport { SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { OfferDefinition } from \"./OfferDefinition\";\n\n/**\n * Use to query or read all Offers.\n *\n * @see {@link Offer} to read or replace an existing {@link Offer} by id.\n */\nexport class Offers {\n /**\n * @hidden\n * @param client - The parent {@link CosmosClient} for the offers.\n */\n constructor(\n public readonly client: CosmosClient,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Query all offers.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Query all offers.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n return new QueryIterator(this.clientContext, query, options, (innerOptions) => {\n return this.clientContext.queryFeed<T>({\n path: \"/offers\",\n resourceType: ResourceType.offer,\n resourceId: \"\",\n resultFn: (result) => result.Offers,\n query,\n options: innerOptions,\n });\n });\n }\n\n /**\n * Read all offers.\n * @example Read all offers to array.\n * ```typescript\n * const {body: offerList} = await client.offers.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<OfferDefinition & Resource> {\n return this.query<OfferDefinition & Resource>(undefined, options);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport {\n createDocumentCollectionUri,\n getIdFromLink,\n getPathFromLink,\n HTTPMethod,\n isResourceValid,\n ResourceType,\n} from \"../../common\";\nimport { PartitionKey, PartitionKeyDefinition } from \"../../documents\";\nimport { SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions, ResourceResponse, Response } from \"../../request\";\nimport { PartitionedQueryExecutionInfo } from \"../../request/ErrorResponse\";\nimport { Conflict, Conflicts } from \"../Conflict\";\nimport { Database } from \"../Database\";\nimport { Item, Items } from \"../Item\";\nimport { Scripts } from \"../Script/Scripts\";\nimport { ContainerDefinition } from \"./ContainerDefinition\";\nimport { ContainerResponse } from \"./ContainerResponse\";\nimport { PartitionKeyRange } from \"./PartitionKeyRange\";\nimport { Offer, OfferDefinition } from \"../Offer\";\nimport { OfferResponse } from \"../Offer/OfferResponse\";\nimport { Resource } from \"../Resource\";\n\n/**\n * Operations for reading, replacing, or deleting a specific, existing container by id.\n *\n * @see {@link Containers} for creating new containers, and reading/querying all containers; use `.containers`.\n *\n * Note: all these operations make calls against a fixed budget.\n * You should design your system such that these calls scale sublinearly with your application.\n * For instance, do not call `container(id).read()` before every single `item.read()` call, to ensure the container exists;\n * do this once on application start up.\n */\nexport class Container {\n private $items: Items;\n /**\n * Operations for creating new items, and reading/querying all items\n *\n * For reading, replacing, or deleting an existing item, use `.item(id)`.\n *\n * @example Create a new item\n * ```typescript\n * const {body: createdItem} = await container.items.create({id: \"<item id>\", properties: {}});\n * ```\n */\n public get items(): Items {\n if (!this.$items) {\n this.$items = new Items(this, this.clientContext);\n }\n return this.$items;\n }\n\n private $scripts: Scripts;\n /**\n * All operations for Stored Procedures, Triggers, and User Defined Functions\n */\n public get scripts(): Scripts {\n if (!this.$scripts) {\n this.$scripts = new Scripts(this, this.clientContext);\n }\n return this.$scripts;\n }\n\n private $conflicts: Conflicts;\n /**\n * Operations for reading and querying conflicts for the given container.\n *\n * For reading or deleting a specific conflict, use `.conflict(id)`.\n */\n public get conflicts(): Conflicts {\n if (!this.$conflicts) {\n this.$conflicts = new Conflicts(this, this.clientContext);\n }\n return this.$conflicts;\n }\n\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return createDocumentCollectionUri(this.database.id, this.id);\n }\n\n /**\n * Returns a container instance. Note: You should get this from `database.container(id)`, rather than creating your own object.\n * @param database - The parent {@link Database}.\n * @param id - The id of the given container.\n * @hidden\n */\n constructor(\n public readonly database: Database,\n public readonly id: string,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Used to read, replace, or delete a specific, existing {@link Item} by id.\n *\n * Use `.items` for creating new items, or querying/reading all items.\n *\n * @param id - The id of the {@link Item}.\n * @param partitionKeyValue - The value of the {@link Item} partition key\n * @example Replace an item\n * `const {body: replacedItem} = await container.item(\"<item id>\", \"<partition key value>\").replace({id: \"<item id>\", title: \"Updated post\", authorID: 5});`\n */\n public item(id: string, partitionKeyValue?: PartitionKey): Item {\n return new Item(this, id, partitionKeyValue, this.clientContext);\n }\n\n /**\n * Used to read, replace, or delete a specific, existing {@link Conflict} by id.\n *\n * Use `.conflicts` for creating new conflicts, or querying/reading all conflicts.\n * @param id - The id of the {@link Conflict}.\n */\n public conflict(id: string, partitionKey?: PartitionKey): Conflict {\n return new Conflict(this, id, this.clientContext, partitionKey);\n }\n\n /** Read the container's definition */\n public async read(options?: RequestOptions): Promise<ContainerResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.read<ContainerDefinition>({\n path,\n resourceType: ResourceType.container,\n resourceId: id,\n options,\n });\n this.clientContext.partitionKeyDefinitionCache[this.url] = response.result.partitionKey;\n return new ContainerResponse(response.result, response.headers, response.code, this);\n }\n\n /** Replace the container's definition */\n public async replace(\n body: ContainerDefinition,\n options?: RequestOptions\n ): Promise<ContainerResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.replace<ContainerDefinition>({\n body,\n path,\n resourceType: ResourceType.container,\n resourceId: id,\n options,\n });\n return new ContainerResponse(response.result, response.headers, response.code, this);\n }\n\n /** Delete the container */\n public async delete(options?: RequestOptions): Promise<ContainerResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.delete<ContainerDefinition>({\n path,\n resourceType: ResourceType.container,\n resourceId: id,\n options,\n });\n return new ContainerResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Gets the partition key definition first by looking into the cache otherwise by reading the collection.\n * @deprecated This method has been renamed to readPartitionKeyDefinition.\n */\n public async getPartitionKeyDefinition(): Promise<ResourceResponse<PartitionKeyDefinition>> {\n return this.readPartitionKeyDefinition();\n }\n\n /**\n * Gets the partition key definition first by looking into the cache otherwise by reading the collection.\n * @hidden\n */\n public async readPartitionKeyDefinition(): Promise<ResourceResponse<PartitionKeyDefinition>> {\n // $ISSUE-felixfan-2016-03-17: Make name based path and link based path use the same key\n // $ISSUE-felixfan-2016-03-17: Refresh partitionKeyDefinitionCache when necessary\n if (this.url in this.clientContext.partitionKeyDefinitionCache) {\n return new ResourceResponse<PartitionKeyDefinition>(\n this.clientContext.partitionKeyDefinitionCache[this.url],\n {},\n 0\n );\n }\n\n const { headers, statusCode } = await this.read();\n return new ResourceResponse<PartitionKeyDefinition>(\n this.clientContext.partitionKeyDefinitionCache[this.url],\n headers,\n statusCode\n );\n }\n\n /**\n * Gets offer on container. If none exists, returns an OfferResponse with undefined.\n */\n public async readOffer(options: RequestOptions = {}): Promise<OfferResponse> {\n const { resource: container } = await this.read();\n const path = \"/offers\";\n const url = container._self;\n const response = await this.clientContext.queryFeed<OfferDefinition & Resource[]>({\n path,\n resourceId: \"\",\n resourceType: ResourceType.offer,\n query: `SELECT * from root where root.resource = \"${url}\"`,\n resultFn: (result) => result.Offers,\n options,\n });\n const offer = response.result[0]\n ? new Offer(this.database.client, response.result[0].id, this.clientContext)\n : undefined;\n return new OfferResponse(response.result[0], response.headers, response.code, offer);\n }\n\n public async getQueryPlan(\n query: string | SqlQuerySpec\n ): Promise<Response<PartitionedQueryExecutionInfo>> {\n const path = getPathFromLink(this.url);\n return this.clientContext.getQueryPlan(\n path + \"/docs\",\n ResourceType.item,\n getIdFromLink(this.url),\n query\n );\n }\n\n public readPartitionKeyRanges(feedOptions?: FeedOptions): QueryIterator<PartitionKeyRange> {\n feedOptions = feedOptions || {};\n return this.clientContext.queryPartitionKeyRanges(this.url, undefined, feedOptions);\n }\n\n /**\n * Delete all documents belong to the container for the provided partition key value\n * @param partitionKey - The partition key value of the items to be deleted\n */\n public async deleteAllItemsForPartitionKey(\n partitionKey: PartitionKey,\n options?: RequestOptions\n ): Promise<ContainerResponse> {\n let path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n path = path + \"/operations/partitionkeydelete\";\n const response = await this.clientContext.delete<ContainerDefinition>({\n path,\n resourceType: ResourceType.container,\n resourceId: id,\n options,\n partitionKey: partitionKey,\n method: HTTPMethod.post,\n });\n return new ContainerResponse(response.result, response.headers, response.code, this);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { ContainerRequest } from \"../client/Container/ContainerRequest\";\n\nexport function validateOffer(body: ContainerRequest): void {\n if (body.throughput) {\n if (body.maxThroughput) {\n console.log(\"should be erroring\");\n throw new Error(\"Cannot specify `throughput` with `maxThroughput`\");\n }\n if (body.autoUpgradePolicy) {\n throw new Error(\n \"Cannot specify autoUpgradePolicy with throughput. Use `maxThroughput` instead\"\n );\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport {\n Constants,\n getIdFromLink,\n getPathFromLink,\n isResourceValid,\n ResourceType,\n StatusCodes,\n} from \"../../common\";\nimport { DEFAULT_PARTITION_KEY_PATH } from \"../../common/partitionKeys\";\nimport { mergeHeaders, SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions } from \"../../request\";\nimport { Database } from \"../Database\";\nimport { Resource } from \"../Resource\";\nimport { Container } from \"./Container\";\nimport { ContainerDefinition } from \"./ContainerDefinition\";\nimport { ContainerRequest } from \"./ContainerRequest\";\nimport { ContainerResponse } from \"./ContainerResponse\";\nimport { validateOffer } from \"../../utils/offers\";\n\n/**\n * Operations for creating new containers, and reading/querying all containers\n *\n * @see {@link Container} for reading, replacing, or deleting an existing container; use `.container(id)`.\n *\n * Note: all these operations make calls against a fixed budget.\n * You should design your system such that these calls scale sublinearly with your application.\n * For instance, do not call `containers.readAll()` before every single `item.read()` call, to ensure the container exists;\n * do this once on application start up.\n */\nexport class Containers {\n constructor(public readonly database: Database, private readonly clientContext: ClientContext) {}\n\n /**\n * Queries all containers.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n * @returns {@link QueryIterator} Allows you to return specific containers in an array or iterate over them one at a time.\n * @example Read all containers to array.\n * ```typescript\n * const querySpec: SqlQuerySpec = {\n * query: \"SELECT * FROM root r WHERE r.id = @container\",\n * parameters: [\n * {name: \"@container\", value: \"Todo\"}\n * ]\n * };\n * const {body: containerList} = await client.database(\"<db id>\").containers.query(querySpec).fetchAll();\n * ```\n */\n public query(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Queries all containers.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n * @returns {@link QueryIterator} Allows you to return specific containers in an array or iterate over them one at a time.\n * @example Read all containers to array.\n * ```typescript\n * const querySpec: SqlQuerySpec = {\n * query: \"SELECT * FROM root r WHERE r.id = @container\",\n * parameters: [\n * {name: \"@container\", value: \"Todo\"}\n * ]\n * };\n * const {body: containerList} = await client.database(\"<db id>\").containers.query(querySpec).fetchAll();\n * ```\n */\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n const path = getPathFromLink(this.database.url, ResourceType.container);\n const id = getIdFromLink(this.database.url);\n\n return new QueryIterator(this.clientContext, query, options, (innerOptions) => {\n return this.clientContext.queryFeed<ContainerDefinition>({\n path,\n resourceType: ResourceType.container,\n resourceId: id,\n resultFn: (result) => result.DocumentCollections,\n query,\n options: innerOptions,\n });\n });\n }\n\n /**\n * Creates a container.\n *\n * A container is a named logical container for items.\n *\n * A database may contain zero or more named containers and each container consists of\n * zero or more JSON items.\n *\n * Being schema-free, the items in a container do not need to share the same structure or fields.\n *\n *\n * Since containers are application resources, they can be authorized using either the\n * master key or resource keys.\n *\n * @param body - Represents the body of the container.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n */\n public async create(\n body: ContainerRequest,\n options: RequestOptions = {}\n ): Promise<ContainerResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n const path = getPathFromLink(this.database.url, ResourceType.container);\n const id = getIdFromLink(this.database.url);\n\n validateOffer(body);\n\n if (body.maxThroughput) {\n const autoscaleParams: {\n maxThroughput: number;\n autoUpgradePolicy?: {\n throughputPolicy: {\n incrementPercent: number;\n };\n };\n } = {\n maxThroughput: body.maxThroughput,\n };\n if (body.autoUpgradePolicy) {\n autoscaleParams.autoUpgradePolicy = body.autoUpgradePolicy;\n }\n const autoscaleHeader = JSON.stringify(autoscaleParams);\n options.initialHeaders = Object.assign({}, options.initialHeaders, {\n [Constants.HttpHeaders.AutoscaleSettings]: autoscaleHeader,\n });\n delete body.maxThroughput;\n delete body.autoUpgradePolicy;\n }\n\n if (body.throughput) {\n options.initialHeaders = Object.assign({}, options.initialHeaders, {\n [Constants.HttpHeaders.OfferThroughput]: body.throughput,\n });\n delete body.throughput;\n }\n\n if (typeof body.partitionKey === \"string\") {\n if (!body.partitionKey.startsWith(\"/\")) {\n throw new Error(\"Partition key must start with '/'\");\n }\n body.partitionKey = {\n paths: [body.partitionKey],\n };\n }\n\n // If they don't specify a partition key, use the default path\n if (!body.partitionKey || !body.partitionKey.paths) {\n body.partitionKey = {\n paths: [DEFAULT_PARTITION_KEY_PATH],\n };\n }\n\n const response = await this.clientContext.create<ContainerRequest, ContainerDefinition>({\n body,\n path,\n resourceType: ResourceType.container,\n resourceId: id,\n options,\n });\n const ref = new Container(this.database, response.result.id, this.clientContext);\n return new ContainerResponse(response.result, response.headers, response.code, ref);\n }\n\n /**\n * Checks if a Container exists, and, if it doesn't, creates it.\n * This will make a read operation based on the id in the `body`, then if it is not found, a create operation.\n * You should confirm that the output matches the body you passed in for non-default properties (i.e. indexing policy/etc.)\n *\n * A container is a named logical container for items.\n *\n * A database may contain zero or more named containers and each container consists of\n * zero or more JSON items.\n *\n * Being schema-free, the items in a container do not need to share the same structure or fields.\n *\n *\n * Since containers are application resources, they can be authorized using either the\n * master key or resource keys.\n *\n * @param body - Represents the body of the container.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n */\n public async createIfNotExists(\n body: ContainerRequest,\n options?: RequestOptions\n ): Promise<ContainerResponse> {\n if (!body || body.id === null || body.id === undefined) {\n throw new Error(\"body parameter must be an object with an id property\");\n }\n /*\n 1. Attempt to read the Container (based on an assumption that most containers will already exist, so its faster)\n 2. If it fails with NotFound error, attempt to create the container. Else, return the read results.\n */\n try {\n const readResponse = await this.database.container(body.id).read(options);\n return readResponse;\n } catch (err: any) {\n if (err.code === StatusCodes.NotFound) {\n const createResponse = await this.create(body, options);\n // Must merge the headers to capture RU costskaty\n mergeHeaders(createResponse.headers, err.headers);\n return createResponse;\n } else {\n throw err;\n }\n }\n }\n\n /**\n * Read all containers.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n * @returns {@link QueryIterator} Allows you to return all containers in an array or iterate over them one at a time.\n * @example Read all containers to array.\n * ```typescript\n * const {body: containerList} = await client.database(\"<db id>\").containers.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<ContainerDefinition & Resource> {\n return this.query(undefined, options);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { Permission } from \"./Permission\";\nimport { PermissionBody } from \"./PermissionBody\";\nimport { PermissionDefinition } from \"./PermissionDefinition\";\n\nexport class PermissionResponse extends ResourceResponse<\n PermissionDefinition & PermissionBody & Resource\n> {\n constructor(\n resource: PermissionDefinition & PermissionBody & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n permission: Permission\n ) {\n super(resource, headers, statusCode);\n this.permission = permission;\n }\n /** A reference to the {@link Permission} corresponding to the returned {@link PermissionDefinition}. */\n public readonly permission: Permission;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport {\n createPermissionUri,\n getIdFromLink,\n getPathFromLink,\n isResourceValid,\n ResourceType,\n} from \"../../common\";\nimport { RequestOptions } from \"../../request/RequestOptions\";\nimport { User } from \"../User\";\nimport { PermissionBody } from \"./PermissionBody\";\nimport { PermissionDefinition } from \"./PermissionDefinition\";\nimport { PermissionResponse } from \"./PermissionResponse\";\n\n/**\n * Use to read, replace, or delete a given {@link Permission} by id.\n *\n * @see {@link Permissions} to create, upsert, query, or read all Permissions.\n */\nexport class Permission {\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return createPermissionUri(this.user.database.id, this.user.id, this.id);\n }\n /**\n * @hidden\n * @param user - The parent {@link User}.\n * @param id - The id of the given {@link Permission}.\n */\n constructor(\n public readonly user: User,\n public readonly id: string,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Read the {@link PermissionDefinition} of the given {@link Permission}.\n */\n public async read(options?: RequestOptions): Promise<PermissionResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.read<PermissionDefinition & PermissionBody>({\n path,\n resourceType: ResourceType.permission,\n resourceId: id,\n options,\n });\n return new PermissionResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Replace the given {@link Permission} with the specified {@link PermissionDefinition}.\n * @param body - The specified {@link PermissionDefinition}.\n */\n public async replace(\n body: PermissionDefinition,\n options?: RequestOptions\n ): Promise<PermissionResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.replace<PermissionDefinition & PermissionBody>({\n body,\n path,\n resourceType: ResourceType.permission,\n resourceId: id,\n options,\n });\n return new PermissionResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Delete the given {@link Permission}.\n */\n public async delete(options?: RequestOptions): Promise<PermissionResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.delete<PermissionDefinition & PermissionBody>({\n path,\n resourceType: ResourceType.permission,\n resourceId: id,\n options,\n });\n return new PermissionResponse(response.result, response.headers, response.code, this);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { getIdFromLink, getPathFromLink, isResourceValid, ResourceType } from \"../../common\";\nimport { SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { User } from \"../User\";\nimport { Permission } from \"./Permission\";\nimport { PermissionBody } from \"./PermissionBody\";\nimport { PermissionDefinition } from \"./PermissionDefinition\";\nimport { PermissionResponse } from \"./PermissionResponse\";\n\n/**\n * Use to create, replace, query, and read all Permissions.\n *\n * @see {@link Permission} to read, replace, or delete a specific permission by id.\n */\nexport class Permissions {\n /**\n * @hidden\n * @param user - The parent {@link User}.\n */\n constructor(public readonly user: User, private readonly clientContext: ClientContext) {}\n\n /**\n * Query all permissions.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Query all permissions.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n const path = getPathFromLink(this.user.url, ResourceType.permission);\n const id = getIdFromLink(this.user.url);\n\n return new QueryIterator(this.clientContext, query, options, (innerOptions) => {\n return this.clientContext.queryFeed({\n path,\n resourceType: ResourceType.permission,\n resourceId: id,\n resultFn: (result) => result.Permissions,\n query,\n options: innerOptions,\n });\n });\n }\n\n /**\n * Read all permissions.\n * @example Read all permissions to array.\n * ```typescript\n * const {body: permissionList} = await user.permissions.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<PermissionDefinition & Resource> {\n return this.query(undefined, options);\n }\n\n /**\n * Create a permission.\n *\n * A permission represents a per-User Permission to access a specific resource\n * e.g. Item or Container.\n * @param body - Represents the body of the permission.\n */\n public async create(\n body: PermissionDefinition,\n options?: RequestOptions\n ): Promise<PermissionResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.user.url, ResourceType.permission);\n const id = getIdFromLink(this.user.url);\n\n const response = await this.clientContext.create<PermissionDefinition, PermissionBody>({\n body,\n path,\n resourceType: ResourceType.permission,\n resourceId: id,\n options,\n });\n const ref = new Permission(this.user, response.result.id, this.clientContext);\n return new PermissionResponse(response.result, response.headers, response.code, ref);\n }\n\n /**\n * Upsert a permission.\n *\n * A permission represents a per-User Permission to access a\n * specific resource e.g. Item or Container.\n */\n public async upsert(\n body: PermissionDefinition,\n options?: RequestOptions\n ): Promise<PermissionResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.user.url, ResourceType.permission);\n const id = getIdFromLink(this.user.url);\n\n const response = await this.clientContext.upsert<PermissionDefinition, PermissionBody>({\n body,\n path,\n resourceType: ResourceType.permission,\n resourceId: id,\n options,\n });\n const ref = new Permission(this.user, response.result.id, this.clientContext);\n return new PermissionResponse(response.result, response.headers, response.code, ref);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { User } from \"./User\";\nimport { UserDefinition } from \"./UserDefinition\";\n\nexport class UserResponse extends ResourceResponse<UserDefinition & Resource> {\n constructor(\n resource: UserDefinition & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n user: User\n ) {\n super(resource, headers, statusCode);\n this.user = user;\n }\n /** A reference to the {@link User} corresponding to the returned {@link UserDefinition}. */\n public readonly user: User;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport {\n createUserUri,\n getIdFromLink,\n getPathFromLink,\n isResourceValid,\n ResourceType,\n} from \"../../common\";\nimport { RequestOptions } from \"../../request\";\nimport { Database } from \"../Database\";\nimport { Permission, Permissions } from \"../Permission\";\nimport { UserDefinition } from \"./UserDefinition\";\nimport { UserResponse } from \"./UserResponse\";\n\n/**\n * Used to read, replace, and delete Users.\n *\n * Additionally, you can access the permissions for a given user via `user.permission` and `user.permissions`.\n *\n * @see {@link Users} to create, upsert, query, or read all.\n */\nexport class User {\n /**\n * Operations for creating, upserting, querying, or reading all operations.\n *\n * See `client.permission(id)` to read, replace, or delete a specific Permission by id.\n */\n public readonly permissions: Permissions;\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return createUserUri(this.database.id, this.id);\n }\n /**\n * @hidden\n * @param database - The parent {@link Database}.\n */\n constructor(\n public readonly database: Database,\n public readonly id: string,\n private readonly clientContext: ClientContext\n ) {\n this.permissions = new Permissions(this, this.clientContext);\n }\n\n /**\n * Operations to read, replace, or delete a specific Permission by id.\n *\n * See `client.permissions` for creating, upserting, querying, or reading all operations.\n */\n public permission(id: string): Permission {\n return new Permission(this, id, this.clientContext);\n }\n\n /**\n * Read the {@link UserDefinition} for the given {@link User}.\n */\n public async read(options?: RequestOptions): Promise<UserResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n const response = await this.clientContext.read<UserDefinition>({\n path,\n resourceType: ResourceType.user,\n resourceId: id,\n options,\n });\n return new UserResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Replace the given {@link User}'s definition with the specified {@link UserDefinition}.\n * @param body - The specified {@link UserDefinition} to replace the definition.\n */\n public async replace(body: UserDefinition, options?: RequestOptions): Promise<UserResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.replace<UserDefinition>({\n body,\n path,\n resourceType: ResourceType.user,\n resourceId: id,\n options,\n });\n return new UserResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Delete the given {@link User}.\n */\n public async delete(options?: RequestOptions): Promise<UserResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n\n const response = await this.clientContext.delete<UserDefinition>({\n path,\n resourceType: ResourceType.user,\n resourceId: id,\n options,\n });\n return new UserResponse(response.result, response.headers, response.code, this);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { getIdFromLink, getPathFromLink, isResourceValid, ResourceType } from \"../../common\";\nimport { SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions } from \"../../request\";\nimport { Database } from \"../Database\";\nimport { Resource } from \"../Resource\";\nimport { User } from \"./User\";\nimport { UserDefinition } from \"./UserDefinition\";\nimport { UserResponse } from \"./UserResponse\";\n\n/**\n * Used to create, upsert, query, and read all users.\n *\n * @see {@link User} to read, replace, or delete a specific User by id.\n */\nexport class Users {\n /**\n * @hidden\n * @param database - The parent {@link Database}.\n */\n constructor(public readonly database: Database, private readonly clientContext: ClientContext) {}\n\n /**\n * Query all users.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Query all users.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n */\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n const path = getPathFromLink(this.database.url, ResourceType.user);\n const id = getIdFromLink(this.database.url);\n\n return new QueryIterator(this.clientContext, query, options, (innerOptions) => {\n return this.clientContext.queryFeed({\n path,\n resourceType: ResourceType.user,\n resourceId: id,\n resultFn: (result) => result.Users,\n query,\n options: innerOptions,\n });\n });\n }\n\n /**\n * Read all users.-\n * @example Read all users to array.\n * ```typescript\n * const {body: usersList} = await database.users.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<UserDefinition & Resource> {\n return this.query<UserDefinition & Resource>(undefined, options);\n }\n\n /**\n * Create a database user with the specified {@link UserDefinition}.\n * @param body - The specified {@link UserDefinition}.\n */\n public async create(body: UserDefinition, options?: RequestOptions): Promise<UserResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.database.url, ResourceType.user);\n const id = getIdFromLink(this.database.url);\n const response = await this.clientContext.create<UserDefinition>({\n body,\n path,\n resourceType: ResourceType.user,\n resourceId: id,\n options,\n });\n const ref = new User(this.database, response.result.id, this.clientContext);\n return new UserResponse(response.result, response.headers, response.code, ref);\n }\n\n /**\n * Upsert a database user with a specified {@link UserDefinition}.\n * @param body - The specified {@link UserDefinition}.\n */\n public async upsert(body: UserDefinition, options?: RequestOptions): Promise<UserResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n const path = getPathFromLink(this.database.url, ResourceType.user);\n const id = getIdFromLink(this.database.url);\n\n const response = await this.clientContext.upsert<UserDefinition>({\n body,\n path,\n resourceType: ResourceType.user,\n resourceId: id,\n options,\n });\n const ref = new User(this.database, response.result.id, this.clientContext);\n return new UserResponse(response.result, response.headers, response.code, ref);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { CosmosHeaders } from \"../../queryExecutionContext\";\nimport { ResourceResponse } from \"../../request/ResourceResponse\";\nimport { Resource } from \"../Resource\";\nimport { Database } from \"./Database\";\nimport { DatabaseDefinition } from \"./DatabaseDefinition\";\n\n/** Response object for Database operations */\nexport class DatabaseResponse extends ResourceResponse<DatabaseDefinition & Resource> {\n constructor(\n resource: DatabaseDefinition & Resource,\n headers: CosmosHeaders,\n statusCode: number,\n database: Database\n ) {\n super(resource, headers, statusCode);\n this.database = database;\n }\n /** A reference to the {@link Database} that the returned {@link DatabaseDefinition} corresponds to. */\n public readonly database: Database;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { createDatabaseUri, getIdFromLink, getPathFromLink, ResourceType } from \"../../common\";\nimport { CosmosClient } from \"../../CosmosClient\";\nimport { RequestOptions } from \"../../request\";\nimport { Container, Containers } from \"../Container\";\nimport { User, Users } from \"../User\";\nimport { DatabaseDefinition } from \"./DatabaseDefinition\";\nimport { DatabaseResponse } from \"./DatabaseResponse\";\nimport { OfferResponse, OfferDefinition, Offer } from \"../Offer\";\nimport { Resource } from \"../Resource\";\n\n/**\n * Operations for reading or deleting an existing database.\n *\n * @see {@link Databases} for creating new databases, and reading/querying all databases; use `client.databases`.\n *\n * Note: all these operations make calls against a fixed budget.\n * You should design your system such that these calls scale sublinearly with your application.\n * For instance, do not call `database.read()` before every single `item.read()` call, to ensure the database exists;\n * do this once on application start up.\n */\nexport class Database {\n /**\n * Used for creating new containers, or querying/reading all containers.\n *\n * Use `.database(id)` to read, replace, or delete a specific, existing {@link Database} by id.\n *\n * @example Create a new container\n * ```typescript\n * const {body: containerDefinition, container} = await client.database(\"<db id>\").containers.create({id: \"<container id>\"});\n * ```\n */\n public readonly containers: Containers;\n /**\n * Used for creating new users, or querying/reading all users.\n *\n * Use `.user(id)` to read, replace, or delete a specific, existing {@link User} by id.\n */\n public readonly users: Users;\n\n /**\n * Returns a reference URL to the resource. Used for linking in Permissions.\n */\n public get url(): string {\n return createDatabaseUri(this.id);\n }\n\n /** Returns a new {@link Database} instance.\n *\n * Note: the intention is to get this object from {@link CosmosClient} via `client.database(id)`, not to instantiate it yourself.\n */\n constructor(\n public readonly client: CosmosClient,\n public readonly id: string,\n private clientContext: ClientContext\n ) {\n this.containers = new Containers(this, this.clientContext);\n this.users = new Users(this, this.clientContext);\n }\n\n /**\n * Used to read, replace, or delete a specific, existing {@link Database} by id.\n *\n * Use `.containers` creating new containers, or querying/reading all containers.\n *\n * @example Delete a container\n * ```typescript\n * await client.database(\"<db id>\").container(\"<container id>\").delete();\n * ```\n */\n public container(id: string): Container {\n return new Container(this, id, this.clientContext);\n }\n\n /**\n * Used to read, replace, or delete a specific, existing {@link User} by id.\n *\n * Use `.users` for creating new users, or querying/reading all users.\n */\n public user(id: string): User {\n return new User(this, id, this.clientContext);\n }\n\n /** Read the definition of the given Database. */\n public async read(options?: RequestOptions): Promise<DatabaseResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n const response = await this.clientContext.read<DatabaseDefinition>({\n path,\n resourceType: ResourceType.database,\n resourceId: id,\n options,\n });\n return new DatabaseResponse(response.result, response.headers, response.code, this);\n }\n\n /** Delete the given Database. */\n public async delete(options?: RequestOptions): Promise<DatabaseResponse> {\n const path = getPathFromLink(this.url);\n const id = getIdFromLink(this.url);\n const response = await this.clientContext.delete<DatabaseDefinition>({\n path,\n resourceType: ResourceType.database,\n resourceId: id,\n options,\n });\n return new DatabaseResponse(response.result, response.headers, response.code, this);\n }\n\n /**\n * Gets offer on database. If none exists, returns an OfferResponse with undefined.\n */\n public async readOffer(options: RequestOptions = {}): Promise<OfferResponse> {\n const { resource: record } = await this.read();\n const path = \"/offers\";\n const url = record._self;\n const response = await this.clientContext.queryFeed<OfferDefinition & Resource[]>({\n path,\n resourceId: \"\",\n resourceType: ResourceType.offer,\n query: `SELECT * from root where root.resource = \"${url}\"`,\n resultFn: (result) => result.Offers,\n options,\n });\n const offer = response.result[0]\n ? new Offer(this.client, response.result[0].id, this.clientContext)\n : undefined;\n return new OfferResponse(response.result[0], response.headers, response.code, offer);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ClientContext } from \"../../ClientContext\";\nimport { Constants, isResourceValid, ResourceType, StatusCodes } from \"../../common\";\nimport { CosmosClient } from \"../../CosmosClient\";\nimport { FetchFunctionCallback, mergeHeaders, SqlQuerySpec } from \"../../queryExecutionContext\";\nimport { QueryIterator } from \"../../queryIterator\";\nimport { FeedOptions, RequestOptions } from \"../../request\";\nimport { Resource } from \"../Resource\";\nimport { Database } from \"./Database\";\nimport { DatabaseDefinition } from \"./DatabaseDefinition\";\nimport { DatabaseRequest } from \"./DatabaseRequest\";\nimport { DatabaseResponse } from \"./DatabaseResponse\";\nimport { validateOffer } from \"../../utils/offers\";\n\n/**\n * Operations for creating new databases, and reading/querying all databases\n *\n * @see {@link Database} for reading or deleting an existing database; use `client.database(id)`.\n *\n * Note: all these operations make calls against a fixed budget.\n * You should design your system such that these calls scale sublinearly with your application.\n * For instance, do not call `databases.readAll()` before every single `item.read()` call, to ensure the database exists;\n * do this once on application start up.\n */\nexport class Databases {\n /**\n * @hidden\n * @param client - The parent {@link CosmosClient} for the Database.\n */\n constructor(\n public readonly client: CosmosClient,\n private readonly clientContext: ClientContext\n ) {}\n\n /**\n * Queries all databases.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n * @returns {@link QueryIterator} Allows you to return all databases in an array or iterate over them one at a time.\n * @example Read all databases to array.\n * ```typescript\n * const querySpec: SqlQuerySpec = {\n * query: \"SELECT * FROM root r WHERE r.id = @db\",\n * parameters: [\n * {name: \"@db\", value: \"Todo\"}\n * ]\n * };\n * const {body: databaseList} = await client.databases.query(querySpec).fetchAll();\n * ```\n */\n public query(query: string | SqlQuerySpec, options?: FeedOptions): QueryIterator<any>;\n /**\n * Queries all databases.\n * @param query - Query configuration for the operation. See {@link SqlQuerySpec} for more info on how to configure a query.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n * @returns {@link QueryIterator} Allows you to return all databases in an array or iterate over them one at a time.\n * @example Read all databases to array.\n * ```typescript\n * const querySpec: SqlQuerySpec = {\n * query: \"SELECT * FROM root r WHERE r.id = @db\",\n * parameters: [\n * {name: \"@db\", value: \"Todo\"}\n * ]\n * };\n * const {body: databaseList} = await client.databases.query(querySpec).fetchAll();\n * ```\n */\n public query<T>(query: string | SqlQuerySpec, options?: FeedOptions): QueryIterator<T>;\n public query<T>(query: string | SqlQuerySpec, options?: FeedOptions): QueryIterator<T> {\n const cb: FetchFunctionCallback = (innerOptions) => {\n return this.clientContext.queryFeed({\n path: \"/dbs\",\n resourceType: ResourceType.database,\n resourceId: \"\",\n resultFn: (result) => result.Databases,\n query,\n options: innerOptions,\n });\n };\n return new QueryIterator(this.clientContext, query, options, cb);\n }\n\n /**\n * Send a request for creating a database.\n *\n * A database manages users, permissions and a set of containers.\n * Each Azure Cosmos DB Database Account is able to support multiple independent named databases,\n * with the database being the logical container for data.\n *\n * Each Database consists of one or more containers, each of which in turn contain one or more\n * documents. Since databases are an administrative resource, the Service Master Key will be\n * required in order to access and successfully complete any action using the User APIs.\n *\n * @param body - The {@link DatabaseDefinition} that represents the {@link Database} to be created.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n */\n public async create(\n body: DatabaseRequest,\n options: RequestOptions = {}\n ): Promise<DatabaseResponse> {\n const err = {};\n if (!isResourceValid(body, err)) {\n throw err;\n }\n\n validateOffer(body);\n\n if (body.maxThroughput) {\n const autoscaleParams: {\n maxThroughput: number;\n autoUpgradePolicy?: {\n throughputPolicy: {\n incrementPercent: number;\n };\n };\n } = {\n maxThroughput: body.maxThroughput,\n };\n if (body.autoUpgradePolicy) {\n autoscaleParams.autoUpgradePolicy = body.autoUpgradePolicy;\n }\n const autoscaleHeaders = JSON.stringify(autoscaleParams);\n options.initialHeaders = Object.assign({}, options.initialHeaders, {\n [Constants.HttpHeaders.AutoscaleSettings]: autoscaleHeaders,\n });\n delete body.maxThroughput;\n delete body.autoUpgradePolicy;\n }\n\n if (body.throughput) {\n options.initialHeaders = Object.assign({}, options.initialHeaders, {\n [Constants.HttpHeaders.OfferThroughput]: body.throughput,\n });\n delete body.throughput;\n }\n\n const path = \"/dbs\"; // TODO: constant\n const response = await this.clientContext.create<DatabaseRequest>({\n body,\n path,\n resourceType: ResourceType.database,\n resourceId: undefined,\n options,\n });\n const ref = new Database(this.client, body.id, this.clientContext);\n return new DatabaseResponse(response.result, response.headers, response.code, ref);\n }\n\n /**\n * Check if a database exists, and if it doesn't, create it.\n * This will make a read operation based on the id in the `body`, then if it is not found, a create operation.\n *\n * A database manages users, permissions and a set of containers.\n * Each Azure Cosmos DB Database Account is able to support multiple independent named databases,\n * with the database being the logical container for data.\n *\n * Each Database consists of one or more containers, each of which in turn contain one or more\n * documents. Since databases are an an administrative resource, the Service Master Key will be\n * required in order to access and successfully complete any action using the User APIs.\n *\n * @param body - The {@link DatabaseDefinition} that represents the {@link Database} to be created.\n * @param options - Additional options for the request\n */\n public async createIfNotExists(\n body: DatabaseRequest,\n options?: RequestOptions\n ): Promise<DatabaseResponse> {\n if (!body || body.id === null || body.id === undefined) {\n throw new Error(\"body parameter must be an object with an id property\");\n }\n /*\n 1. Attempt to read the Database (based on an assumption that most databases will already exist, so its faster)\n 2. If it fails with NotFound error, attempt to create the db. Else, return the read results.\n */\n try {\n const readResponse = await this.client.database(body.id).read(options);\n return readResponse;\n } catch (err: any) {\n if (err.code === StatusCodes.NotFound) {\n const createResponse = await this.create(body, options);\n // Must merge the headers to capture RU costskaty\n mergeHeaders(createResponse.headers, err.headers);\n return createResponse;\n } else {\n throw err;\n }\n }\n }\n\n // TODO: DatabaseResponse for QueryIterator?\n /**\n * Reads all databases.\n * @param options - Use to set options like response page size, continuation tokens, etc.\n * @returns {@link QueryIterator} Allows you to return all databases in an array or iterate over them one at a time.\n * @example Read all databases to array.\n * ```typescript\n * const {body: databaseList} = await client.databases.readAll().fetchAll();\n * ```\n */\n public readAll(options?: FeedOptions): QueryIterator<DatabaseDefinition & Resource> {\n return this.query<DatabaseDefinition & Resource>(undefined, options);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { RequestContext } from \"../request/RequestContext\";\nimport { Response } from \"../request/Response\";\n\n/**\n * Used to specify which type of events to execute this plug in on.\n *\n * @hidden\n */\nexport enum PluginOn {\n /**\n * Will be executed per network request\n */\n request = \"request\",\n /**\n * Will be executed per API operation\n */\n operation = \"operation\",\n}\n\n/**\n * Specifies which event to run for the specified plugin\n *\n * @hidden\n */\nexport interface PluginConfig {\n /**\n * The event to run the plugin on\n */\n on: keyof typeof PluginOn;\n /**\n * The plugin to run\n */\n plugin: Plugin<any>;\n}\n\n/**\n * Plugins allow you to customize the behavior of the SDk with additional logging, retry, or additional functionality.\n *\n * A plugin is a function which returns a `Promise<Response<T>>`, and is passed a RequestContext and Next object.\n *\n * Next is a function which takes in requestContext returns a promise. You must await/then that promise which will contain the response from further plugins,\n * allowing you to log those results or handle errors.\n *\n * RequestContext is an object which controls what operation is happening, against which endpoint, and more. Modifying this and passing it along via next is how\n * you modify future SDK behavior.\n *\n * @hidden\n */\nexport type Plugin<T> = (context: RequestContext, next: Next<T>) => Promise<Response<T>>;\n\n/**\n * Next is a function which takes in requestContext returns a promise. You must await/then that promise which will contain the response from further plugins,\n * allowing you to log those results or handle errors.\n * @hidden\n */\nexport type Next<T> = (context: RequestContext) => Promise<Response<T>>;\n\n/**\n * @internal\n */\nexport async function executePlugins(\n requestContext: RequestContext,\n next: Plugin<any>,\n on: PluginOn\n): Promise<Response<any>> {\n if (!requestContext.plugins) {\n return next(requestContext, undefined);\n }\n let level = 0;\n const _: Next<any> = (inner: RequestContext): Promise<Response<any>> => {\n if (++level >= inner.plugins.length) {\n return next(requestContext, undefined);\n } else if (inner.plugins[level].on !== on) {\n return _(requestContext);\n } else {\n return inner.plugins[level].plugin(inner, _);\n }\n };\n if (requestContext.plugins[level].on !== on) {\n return _(requestContext);\n } else {\n return requestContext.plugins[level].plugin(requestContext, _);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { OperationType } from \"../common\";\nimport { ErrorResponse } from \"../request\";\nimport { TimeoutErrorCode } from \"../request/TimeoutError\";\nimport { RetryPolicy } from \"./RetryPolicy\";\n\n/**\n * @hidden\n */\n// Windows Socket Error Codes\nconst WindowsInterruptedFunctionCall = 10004;\n/**\n * @hidden\n */\nconst WindowsFileHandleNotValid = 10009;\n/**\n * @hidden\n */\nconst WindowsPermissionDenied = 10013;\n/**\n * @hidden\n */\nconst WindowsBadAddress = 10014;\n/**\n * @hidden\n */\nconst WindowsInvalidArgumnet = 10022;\n/**\n * @hidden\n */\nconst WindowsResourceTemporarilyUnavailable = 10035;\n/**\n * @hidden\n */\nconst WindowsOperationNowInProgress = 10036;\n/**\n * @hidden\n */\nconst WindowsAddressAlreadyInUse = 10048;\n/**\n * @hidden\n */\nconst WindowsConnectionResetByPeer = 10054;\n/**\n * @hidden\n */\nconst WindowsCannotSendAfterSocketShutdown = 10058;\n/**\n * @hidden\n */\nconst WindowsConnectionTimedOut = 10060;\n/**\n * @hidden\n */\nconst WindowsConnectionRefused = 10061;\n/**\n * @hidden\n */\nconst WindowsNameTooLong = 10063;\n/**\n * @hidden\n */\nconst WindowsHostIsDown = 10064;\n/**\n * @hidden\n */\nconst WindowsNoRouteTohost = 10065;\n/**\n * @hidden\n */\n\n// Linux Error Codes\n/**\n * @hidden\n */\nconst LinuxConnectionReset = \"ECONNRESET\";\n\n// Node Error Codes\n/**\n * @hidden\n */\nconst BrokenPipe = \"EPIPE\";\n\n/**\n * @hidden\n */\nconst CONNECTION_ERROR_CODES = [\n WindowsInterruptedFunctionCall,\n WindowsFileHandleNotValid,\n WindowsPermissionDenied,\n WindowsBadAddress,\n WindowsInvalidArgumnet,\n WindowsResourceTemporarilyUnavailable,\n WindowsOperationNowInProgress,\n WindowsAddressAlreadyInUse,\n WindowsConnectionResetByPeer,\n WindowsCannotSendAfterSocketShutdown,\n WindowsConnectionTimedOut,\n WindowsConnectionRefused,\n WindowsNameTooLong,\n WindowsHostIsDown,\n WindowsNoRouteTohost,\n LinuxConnectionReset,\n TimeoutErrorCode,\n BrokenPipe,\n];\n\n/**\n * @hidden\n */\nfunction needsRetry(operationType: OperationType, code: number | string): boolean {\n if (\n (operationType === OperationType.Read || operationType === OperationType.Query) &&\n CONNECTION_ERROR_CODES.indexOf(code) !== -1\n ) {\n return true;\n } else {\n return false;\n }\n}\n\n/**\n * This class implements the default connection retry policy for requests.\n * @hidden\n */\nexport class DefaultRetryPolicy implements RetryPolicy {\n private maxTries: number = 10;\n private currentRetryAttemptCount: number = 0;\n public retryAfterInMs: number = 1000;\n\n constructor(private operationType: OperationType) {}\n /**\n * Determines whether the request should be retried or not.\n * @param err - Error returned by the request.\n */\n public async shouldRetry(err: ErrorResponse): Promise<boolean> {\n if (err) {\n if (\n this.currentRetryAttemptCount < this.maxTries &&\n needsRetry(this.operationType, err.code)\n ) {\n this.currentRetryAttemptCount++;\n return true;\n }\n }\n return false;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { OperationType } from \"../common\";\nimport { isReadRequest } from \"../common/helper\";\nimport { GlobalEndpointManager } from \"../globalEndpointManager\";\nimport { ErrorResponse } from \"../request\";\nimport { RetryContext } from \"./RetryContext\";\nimport { RetryPolicy } from \"./RetryPolicy\";\n\n/**\n * This class implements the retry policy for endpoint discovery.\n * @hidden\n */\nexport class EndpointDiscoveryRetryPolicy implements RetryPolicy {\n /** Current retry attempt count. */\n public currentRetryAttemptCount: number;\n /** Retry interval in milliseconds. */\n public retryAfterInMs: number;\n\n /** Max number of retry attempts to perform. */\n private maxTries: number;\n private static readonly maxTries = 120; // TODO: Constant?\n private static readonly retryAfterInMs = 1000;\n\n /**\n * @param globalEndpointManager - The GlobalEndpointManager instance.\n */\n constructor(\n private globalEndpointManager: GlobalEndpointManager,\n private operationType: OperationType\n ) {\n this.maxTries = EndpointDiscoveryRetryPolicy.maxTries;\n this.currentRetryAttemptCount = 0;\n this.retryAfterInMs = EndpointDiscoveryRetryPolicy.retryAfterInMs;\n }\n\n /**\n * Determines whether the request should be retried or not.\n * @param err - Error returned by the request.\n */\n public async shouldRetry(\n err: ErrorResponse,\n retryContext?: RetryContext,\n locationEndpoint?: string\n ): Promise<boolean | [boolean, string]> {\n if (!err) {\n return false;\n }\n\n if (!retryContext || !locationEndpoint) {\n return false;\n }\n\n if (!this.globalEndpointManager.enableEndpointDiscovery) {\n return false;\n }\n\n if (this.currentRetryAttemptCount >= this.maxTries) {\n return false;\n }\n\n this.currentRetryAttemptCount++;\n\n if (isReadRequest(this.operationType)) {\n await this.globalEndpointManager.markCurrentLocationUnavailableForRead(locationEndpoint);\n } else {\n await this.globalEndpointManager.markCurrentLocationUnavailableForWrite(locationEndpoint);\n }\n\n retryContext.retryCount = this.currentRetryAttemptCount;\n retryContext.clearSessionTokenNotAvailable = false;\n retryContext.retryRequestOnPreferredLocations = false;\n\n return true;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { ErrorResponse } from \"../request\";\n\n/**\n * This class implements the resource throttle retry policy for requests.\n * @hidden\n */\nexport class ResourceThrottleRetryPolicy {\n /** Current retry attempt count. */\n public currentRetryAttemptCount: number = 0;\n /** Cummulative wait time in milliseconds for a request while the retries are happening. */\n public cummulativeWaitTimeinMs: number = 0;\n /** Retry interval in milliseconds to wait before the next request will be sent. */\n public retryAfterInMs: number = 0;\n\n /** Max wait time in milliseconds to wait for a request while the retries are happening. */\n private timeoutInMs: number;\n /**\n * @param maxTries - Max number of retries to be performed for a request.\n * @param fixedRetryIntervalInMs - Fixed retry interval in milliseconds to wait between each\n * retry ignoring the retryAfter returned as part of the response.\n * @param timeoutInSeconds - Max wait time in seconds to wait for a request while the\n * retries are happening.\n */\n constructor(\n private maxTries: number = 9,\n private fixedRetryIntervalInMs: number = 0,\n timeoutInSeconds: number = 30\n ) {\n this.timeoutInMs = timeoutInSeconds * 1000;\n this.currentRetryAttemptCount = 0;\n this.cummulativeWaitTimeinMs = 0;\n }\n /**\n * Determines whether the request should be retried or not.\n * @param err - Error returned by the request.\n */\n public async shouldRetry(err: ErrorResponse): Promise<boolean> {\n // TODO: any custom error object\n if (err) {\n if (this.currentRetryAttemptCount < this.maxTries) {\n this.currentRetryAttemptCount++;\n this.retryAfterInMs = 0;\n\n if (this.fixedRetryIntervalInMs) {\n this.retryAfterInMs = this.fixedRetryIntervalInMs;\n } else if (err.retryAfterInMs) {\n this.retryAfterInMs = err.retryAfterInMs;\n }\n\n if (this.cummulativeWaitTimeinMs < this.timeoutInMs) {\n this.cummulativeWaitTimeinMs += this.retryAfterInMs;\n return true;\n }\n }\n }\n return false;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { isReadRequest, OperationType, ResourceType } from \"../common\";\nimport { ConnectionPolicy } from \"../documents\";\nimport { GlobalEndpointManager } from \"../globalEndpointManager\";\nimport { ErrorResponse } from \"../request\";\nimport { RetryContext } from \"./RetryContext\";\nimport { RetryPolicy } from \"./RetryPolicy\";\n\n/**\n * This class implements the retry policy for session consistent reads.\n * @hidden\n */\nexport class SessionRetryPolicy implements RetryPolicy {\n /** Current retry attempt count. */\n public currentRetryAttemptCount = 0;\n /** Retry interval in milliseconds. */\n public retryAfterInMs = 0;\n\n /**\n * @param globalEndpointManager - The GlobalEndpointManager instance.\n */\n constructor(\n private globalEndpointManager: GlobalEndpointManager,\n private resourceType: ResourceType,\n private operationType: OperationType,\n private connectionPolicy: ConnectionPolicy\n ) {}\n\n /**\n * Determines whether the request should be retried or not.\n * @param err - Error returned by the request.\n * @param callback - The callback function which takes bool argument which specifies whether the request\n * will be retried or not.\n */\n public async shouldRetry(err: ErrorResponse, retryContext?: RetryContext): Promise<boolean> {\n if (!err) {\n return false;\n }\n\n if (!retryContext) {\n return false;\n }\n\n if (!this.connectionPolicy.enableEndpointDiscovery) {\n return false;\n }\n\n if (\n this.globalEndpointManager.canUseMultipleWriteLocations(this.resourceType, this.operationType)\n ) {\n // If we can write to multiple locations, we should against every write endpoint until we succeed\n const endpoints = isReadRequest(this.operationType)\n ? await this.globalEndpointManager.getReadEndpoints()\n : await this.globalEndpointManager.getWriteEndpoints();\n if (this.currentRetryAttemptCount > endpoints.length) {\n return false;\n } else {\n this.currentRetryAttemptCount++;\n retryContext.retryCount++;\n retryContext.retryRequestOnPreferredLocations = this.currentRetryAttemptCount > 1;\n retryContext.clearSessionTokenNotAvailable =\n this.currentRetryAttemptCount === endpoints.length;\n return true;\n }\n } else {\n if (this.currentRetryAttemptCount > 1) {\n return false;\n } else {\n this.currentRetryAttemptCount++;\n retryContext.retryCount++;\n retryContext.retryRequestOnPreferredLocations = false; // Forces all operations to primary write endpoint\n retryContext.clearSessionTokenNotAvailable = true;\n return true;\n }\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Constants } from \"../common/constants\";\nimport { sleep } from \"../common/helper\";\nimport { StatusCodes, SubStatusCodes } from \"../common/statusCodes\";\nimport { Response } from \"../request\";\nimport { RequestContext } from \"../request/RequestContext\";\nimport { DefaultRetryPolicy } from \"./defaultRetryPolicy\";\nimport { EndpointDiscoveryRetryPolicy } from \"./endpointDiscoveryRetryPolicy\";\nimport { ResourceThrottleRetryPolicy } from \"./resourceThrottleRetryPolicy\";\nimport { RetryContext } from \"./RetryContext\";\nimport { RetryPolicy } from \"./RetryPolicy\";\nimport { SessionRetryPolicy } from \"./sessionRetryPolicy\";\n\n/**\n * @hidden\n */\ninterface ExecuteArgs {\n retryContext?: RetryContext;\n retryPolicies?: RetryPolicies;\n requestContext: RequestContext;\n executeRequest: (requestContext: RequestContext) => Promise<Response<any>>;\n}\n\n/**\n * @hidden\n */\ninterface RetryPolicies {\n endpointDiscoveryRetryPolicy: EndpointDiscoveryRetryPolicy;\n resourceThrottleRetryPolicy: ResourceThrottleRetryPolicy;\n sessionReadRetryPolicy: SessionRetryPolicy;\n defaultRetryPolicy: DefaultRetryPolicy;\n}\n\n/**\n * @hidden\n */\nexport async function execute({\n retryContext = { retryCount: 0 },\n retryPolicies,\n requestContext,\n executeRequest,\n}: ExecuteArgs): Promise<Response<any>> {\n // TODO: any response\n if (!retryPolicies) {\n retryPolicies = {\n endpointDiscoveryRetryPolicy: new EndpointDiscoveryRetryPolicy(\n requestContext.globalEndpointManager,\n requestContext.operationType\n ),\n resourceThrottleRetryPolicy: new ResourceThrottleRetryPolicy(\n requestContext.connectionPolicy.retryOptions.maxRetryAttemptCount,\n requestContext.connectionPolicy.retryOptions.fixedRetryIntervalInMilliseconds,\n requestContext.connectionPolicy.retryOptions.maxWaitTimeInSeconds\n ),\n sessionReadRetryPolicy: new SessionRetryPolicy(\n requestContext.globalEndpointManager,\n requestContext.resourceType,\n requestContext.operationType,\n requestContext.connectionPolicy\n ),\n defaultRetryPolicy: new DefaultRetryPolicy(requestContext.operationType),\n };\n }\n if (retryContext && retryContext.clearSessionTokenNotAvailable) {\n requestContext.client.clearSessionToken(requestContext.path);\n delete requestContext.headers[\"x-ms-session-token\"];\n }\n requestContext.endpoint = await requestContext.globalEndpointManager.resolveServiceEndpoint(\n requestContext.resourceType,\n requestContext.operationType\n );\n try {\n const response = await executeRequest(requestContext);\n response.headers[Constants.ThrottleRetryCount] =\n retryPolicies.resourceThrottleRetryPolicy.currentRetryAttemptCount;\n response.headers[Constants.ThrottleRetryWaitTimeInMs] =\n retryPolicies.resourceThrottleRetryPolicy.cummulativeWaitTimeinMs;\n return response;\n } catch (err: any) {\n // TODO: any error\n let retryPolicy: RetryPolicy = null;\n const headers = err.headers || {};\n if (\n err.code === StatusCodes.ENOTFOUND ||\n err.code === \"REQUEST_SEND_ERROR\" ||\n (err.code === StatusCodes.Forbidden &&\n (err.substatus === SubStatusCodes.DatabaseAccountNotFound ||\n err.substatus === SubStatusCodes.WriteForbidden))\n ) {\n retryPolicy = retryPolicies.endpointDiscoveryRetryPolicy;\n } else if (err.code === StatusCodes.TooManyRequests) {\n retryPolicy = retryPolicies.resourceThrottleRetryPolicy;\n } else if (\n err.code === StatusCodes.NotFound &&\n err.substatus === SubStatusCodes.ReadSessionNotAvailable\n ) {\n retryPolicy = retryPolicies.sessionReadRetryPolicy;\n } else {\n retryPolicy = retryPolicies.defaultRetryPolicy;\n }\n const results = await retryPolicy.shouldRetry(err, retryContext, requestContext.endpoint);\n if (!results) {\n headers[Constants.ThrottleRetryCount] =\n retryPolicies.resourceThrottleRetryPolicy.currentRetryAttemptCount;\n headers[Constants.ThrottleRetryWaitTimeInMs] =\n retryPolicies.resourceThrottleRetryPolicy.cummulativeWaitTimeinMs;\n err.headers = { ...err.headers, ...headers };\n throw err;\n } else {\n requestContext.retryCount++;\n const newUrl = (results as any)[1]; // TODO: any hack\n if (newUrl !== undefined) {\n requestContext.endpoint = newUrl;\n }\n await sleep(retryPolicy.retryAfterInMs);\n return execute({\n executeRequest,\n requestContext,\n retryContext,\n retryPolicies,\n });\n }\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Agent } from \"http\";\n\n/**\n * @hidden\n */\nexport let defaultHttpsAgent: Agent;\n\nconst https = require(\"https\"); // eslint-disable-line @typescript-eslint/no-require-imports\nconst tls = require(\"tls\"); // eslint-disable-line @typescript-eslint/no-require-imports\n\n// minVersion only available in Node 10+\nif (tls.DEFAULT_MIN_VERSION) {\n defaultHttpsAgent = new https.Agent({\n keepAlive: true,\n minVersion: \"TLSv1.2\",\n });\n} else {\n // Remove when Node 8 support has been dropped\n defaultHttpsAgent = new https.Agent({\n keepAlive: true,\n secureProtocol: \"TLSv1_2_method\",\n });\n}\nconst http = require(\"http\"); // eslint-disable-line @typescript-eslint/no-require-imports\n/**\n * @internal\n */\nexport const defaultHttpAgent: Agent = new http.Agent({\n keepAlive: true,\n});\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { HttpClient, createDefaultHttpClient } from \"@azure/core-rest-pipeline\";\n\nlet cachedHttpClient: HttpClient | undefined;\n\nexport function getCachedDefaultHttpClient(): HttpClient {\n if (!cachedHttpClient) {\n cachedHttpClient = createDefaultHttpClient();\n }\n\n return cachedHttpClient;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { AbortController } from \"node-abort-controller\";\nimport {\n createPipelineRequest,\n createHttpHeaders,\n PipelineResponse,\n} from \"@azure/core-rest-pipeline\";\nimport { trimSlashes } from \"../common\";\nimport { Constants } from \"../common/constants\";\nimport { executePlugins, PluginOn } from \"../plugins/Plugin\";\nimport * as RetryUtility from \"../retry/retryUtility\";\nimport { defaultHttpAgent, defaultHttpsAgent } from \"./defaultAgent\";\nimport { ErrorResponse } from \"./ErrorResponse\";\nimport { bodyFromData } from \"./request\";\nimport { RequestContext } from \"./RequestContext\";\nimport { Response as CosmosResponse } from \"./Response\";\nimport { TimeoutError } from \"./TimeoutError\";\nimport { getCachedDefaultHttpClient } from \"../utils/cachedClient\";\nimport { AzureLogger, createClientLogger } from \"@azure/logger\";\n\nconst logger: AzureLogger = createClientLogger(\"RequestHandler\");\n\nasync function executeRequest(requestContext: RequestContext): Promise<CosmosResponse<any>> {\n return executePlugins(requestContext, httpRequest, PluginOn.request);\n}\n\n/**\n * @hidden\n */\nasync function httpRequest(requestContext: RequestContext): Promise<{\n headers: any;\n result: any;\n code: number;\n substatus: number;\n}> {\n const controller = new AbortController();\n const signal = controller.signal;\n\n // Wrap users passed abort events and call our own internal abort()\n const userSignal = requestContext.options && requestContext.options.abortSignal;\n if (userSignal) {\n if (userSignal.aborted) {\n controller.abort();\n } else {\n userSignal.addEventListener(\"abort\", () => {\n controller.abort();\n });\n }\n }\n\n const timeout = setTimeout(() => {\n controller.abort();\n }, requestContext.connectionPolicy.requestTimeout);\n\n let response: PipelineResponse;\n\n if (requestContext.body) {\n requestContext.body = bodyFromData(requestContext.body);\n }\n\n const httpsClient = getCachedDefaultHttpClient();\n const url = trimSlashes(requestContext.endpoint) + requestContext.path;\n const reqHeaders = createHttpHeaders(requestContext.headers as any);\n const pipelineRequest = createPipelineRequest({\n url,\n headers: reqHeaders,\n method: requestContext.method,\n abortSignal: signal,\n body: requestContext.body,\n });\n if (requestContext.requestAgent) {\n pipelineRequest.agent = requestContext.requestAgent;\n } else {\n const parsedUrl = new URL(url);\n pipelineRequest.agent = parsedUrl.protocol === \"http\" ? defaultHttpAgent : defaultHttpsAgent;\n }\n\n try {\n if (requestContext.pipeline) {\n response = await requestContext.pipeline.sendRequest(httpsClient, pipelineRequest);\n } else {\n response = await httpsClient.sendRequest(pipelineRequest);\n }\n } catch (error: any) {\n if (error.name === \"AbortError\") {\n // If the user passed signal caused the abort, cancel the timeout and rethrow the error\n if (userSignal && userSignal.aborted === true) {\n clearTimeout(timeout);\n throw error;\n }\n // If the user didn't cancel, it must be an abort we called due to timeout\n throw new TimeoutError(\n `Timeout Error! Request took more than ${requestContext.connectionPolicy.requestTimeout} ms`\n );\n }\n throw error;\n }\n\n clearTimeout(timeout);\n const result =\n response.status === 204 || response.status === 304 || response.bodyAsText === \"\"\n ? null\n : JSON.parse(response.bodyAsText);\n const headers = response.headers.toJSON();\n\n const substatus = headers[Constants.HttpHeaders.SubStatus]\n ? parseInt(headers[Constants.HttpHeaders.SubStatus], 10)\n : undefined;\n\n if (response.status >= 400) {\n const errorResponse: ErrorResponse = new ErrorResponse(result.message);\n\n logger.warning(\n response.status +\n \" \" +\n requestContext.endpoint +\n \" \" +\n requestContext.path +\n \" \" +\n result.message\n );\n\n errorResponse.code = response.status;\n errorResponse.body = result;\n errorResponse.headers = headers;\n\n if (Constants.HttpHeaders.ActivityId in headers) {\n errorResponse.activityId = headers[Constants.HttpHeaders.ActivityId];\n }\n\n if (Constants.HttpHeaders.SubStatus in headers) {\n errorResponse.substatus = substatus;\n }\n\n if (Constants.HttpHeaders.RetryAfterInMs in headers) {\n errorResponse.retryAfterInMs = parseInt(headers[Constants.HttpHeaders.RetryAfterInMs], 10);\n Object.defineProperty(errorResponse, \"retryAfterInMilliseconds\", {\n get: () => {\n return errorResponse.retryAfterInMs;\n },\n });\n }\n\n throw errorResponse;\n }\n return {\n headers,\n result,\n code: response.status,\n substatus,\n };\n}\n\n/**\n * @hidden\n */\nasync function request<T>(requestContext: RequestContext): Promise<CosmosResponse<T>> {\n if (requestContext.body) {\n requestContext.body = bodyFromData(requestContext.body);\n if (!requestContext.body) {\n throw new Error(\"parameter data must be a javascript object, string, or Buffer\");\n }\n }\n\n return RetryUtility.execute({\n requestContext,\n executeRequest,\n });\n}\n\nexport const RequestHandler = {\n request,\n};\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport default function atob(str: string): string {\n return Buffer.from(str, \"base64\").toString(\"binary\");\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/**\n * Models vector clock bases session token. Session token has the following format:\n * `{Version}#{GlobalLSN}#{RegionId1}={LocalLsn1}#{RegionId2}={LocalLsn2}....#{RegionIdN}={LocalLsnN}`\n * 'Version' captures the configuration number of the partition which returned this session token.\n * 'Version' is incremented everytime topology of the partition is updated (say due to Add/Remove/Failover).\n *\n * The choice of separators '#' and '=' is important. Separators ';' and ',' are used to delimit\n * per-partitionKeyRange session token\n * @hidden\n *\n */\nexport class VectorSessionToken {\n private static readonly SEGMENT_SEPARATOR = \"#\";\n private static readonly REGION_PROGRESS_SEPARATOR = \"=\";\n\n constructor(\n private readonly version: number,\n private readonly globalLsn: number,\n private readonly localLsnByregion: Map<number, string>,\n private readonly sessionToken?: string\n ) {\n if (!this.sessionToken) {\n const regionAndLocalLsn = [];\n for (const [key, value] of this.localLsnByregion.entries()) {\n regionAndLocalLsn.push(`${key}${VectorSessionToken.REGION_PROGRESS_SEPARATOR}${value}`);\n }\n const regionProgress = regionAndLocalLsn.join(VectorSessionToken.SEGMENT_SEPARATOR);\n if (regionProgress === \"\") {\n this.sessionToken = `${this.version}${VectorSessionToken.SEGMENT_SEPARATOR}${this.globalLsn}`;\n } else {\n this.sessionToken = `${this.version}${VectorSessionToken.SEGMENT_SEPARATOR}${this.globalLsn}${VectorSessionToken.SEGMENT_SEPARATOR}${regionProgress}`;\n }\n }\n }\n\n public static create(sessionToken: string): VectorSessionToken | null {\n const [versionStr, globalLsnStr, ...regionSegments] = sessionToken.split(\n VectorSessionToken.SEGMENT_SEPARATOR\n );\n\n const version = parseInt(versionStr, 10);\n const globalLsn = parseFloat(globalLsnStr);\n\n if (typeof version !== \"number\" || typeof globalLsn !== \"number\") {\n return null;\n }\n\n const lsnByRegion = new Map<number, string>();\n for (const regionSegment of regionSegments) {\n const [regionIdStr, localLsnStr] = regionSegment.split(\n VectorSessionToken.REGION_PROGRESS_SEPARATOR\n );\n\n if (!regionIdStr || !localLsnStr) {\n return null;\n }\n\n const regionId = parseInt(regionIdStr, 10);\n let localLsn: string;\n try {\n localLsn = localLsnStr;\n } catch (err: any) {\n // TODO: log error\n return null;\n }\n if (typeof regionId !== \"number\") {\n return null;\n }\n\n lsnByRegion.set(regionId, localLsn);\n }\n\n return new VectorSessionToken(version, globalLsn, lsnByRegion, sessionToken);\n }\n\n public equals(other: VectorSessionToken): boolean {\n return !other\n ? false\n : this.version === other.version &&\n this.globalLsn === other.globalLsn &&\n this.areRegionProgressEqual(other.localLsnByregion);\n }\n\n public merge(other: VectorSessionToken): VectorSessionToken {\n if (other == null) {\n throw new Error(\"other (Vector Session Token) must not be null\");\n }\n\n if (\n this.version === other.version &&\n this.localLsnByregion.size !== other.localLsnByregion.size\n ) {\n throw new Error(\n `Compared session tokens ${this.sessionToken} and ${other.sessionToken} have unexpected regions`\n );\n }\n\n const [higherVersionSessionToken, lowerVersionSessionToken]: [\n VectorSessionToken,\n VectorSessionToken\n ] = this.version < other.version ? [other, this] : [this, other];\n\n const highestLocalLsnByRegion = new Map<number, string>();\n\n for (const [regionId, highLocalLsn] of higherVersionSessionToken.localLsnByregion.entries()) {\n const lowLocalLsn = lowerVersionSessionToken.localLsnByregion.get(regionId);\n if (lowLocalLsn) {\n highestLocalLsnByRegion.set(regionId, max(highLocalLsn, lowLocalLsn));\n } else if (this.version === other.version) {\n throw new Error(\n `Compared session tokens have unexpected regions. Session 1: ${this.sessionToken} - Session 2: ${this.sessionToken}`\n );\n } else {\n highestLocalLsnByRegion.set(regionId, highLocalLsn);\n }\n }\n\n return new VectorSessionToken(\n Math.max(this.version, other.version),\n Math.max(this.globalLsn, other.globalLsn),\n highestLocalLsnByRegion\n );\n }\n\n public toString(): string | undefined {\n return this.sessionToken;\n }\n\n private areRegionProgressEqual(other: Map<number, string>): boolean {\n if (this.localLsnByregion.size !== other.size) {\n return false;\n }\n\n for (const [regionId, localLsn] of this.localLsnByregion.entries()) {\n const otherLocalLsn = other.get(regionId);\n\n if (localLsn !== otherLocalLsn) {\n return false;\n }\n }\n return true;\n }\n}\n\n/**\n * @hidden\n */\nfunction max(int1: string, int2: string): string {\n // NOTE: This only works for positive numbers\n if (int1.length === int2.length) {\n return int1 > int2 ? int1 : int2;\n } else if (int1.length > int2.length) {\n return int1;\n } else {\n return int2;\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport atob from \"../utils/atob\";\nimport { Constants, getContainerLink, OperationType, ResourceType, trimSlashes } from \"../common\";\nimport { CosmosHeaders } from \"../queryExecutionContext\";\nimport { SessionContext } from \"./SessionContext\";\nimport { VectorSessionToken } from \"./VectorSessionToken\";\n\n/** @hidden */\nexport class SessionContainer {\n private static readonly EMPTY_SESSION_TOKEN = \"\";\n private static readonly SESSION_TOKEN_SEPARATOR = \",\";\n private static readonly SESSION_TOKEN_PARTITION_SPLITTER = \":\";\n constructor(\n private collectionNameToCollectionResourceId = new Map<string, string>(),\n private collectionResourceIdToSessionTokens = new Map<string, Map<string, VectorSessionToken>>()\n ) {}\n\n public get(request: SessionContext): string {\n if (!request) {\n throw new Error(\"request cannot be null\");\n }\n const collectionName = getContainerLink(trimSlashes(request.resourceAddress));\n const rangeIdToTokenMap = this.getPartitionKeyRangeIdToTokenMap(collectionName);\n return SessionContainer.getCombinedSessionTokenString(rangeIdToTokenMap);\n }\n\n public remove(request: SessionContext): void {\n let collectionResourceId: string;\n const resourceAddress = trimSlashes(request.resourceAddress);\n const collectionName = getContainerLink(resourceAddress);\n if (collectionName) {\n collectionResourceId = this.collectionNameToCollectionResourceId.get(collectionName);\n this.collectionNameToCollectionResourceId.delete(collectionName);\n }\n if (collectionResourceId !== undefined) {\n this.collectionResourceIdToSessionTokens.delete(collectionResourceId);\n }\n }\n\n public set(request: SessionContext, resHeaders: CosmosHeaders): void {\n // TODO: we check the master logic a few different places. Might not need it.\n if (\n !resHeaders ||\n SessionContainer.isReadingFromMaster(request.resourceType, request.operationType)\n ) {\n return;\n }\n\n const sessionTokenString = resHeaders[Constants.HttpHeaders.SessionToken];\n if (!sessionTokenString) {\n return;\n }\n\n const containerName = this.getContainerName(request, resHeaders);\n\n const ownerId = !request.isNameBased\n ? request.resourceId\n : resHeaders[Constants.HttpHeaders.OwnerId] || request.resourceId;\n\n if (!ownerId) {\n return;\n }\n\n if (containerName && this.validateOwnerID(ownerId)) {\n if (!this.collectionResourceIdToSessionTokens.has(ownerId)) {\n this.collectionResourceIdToSessionTokens.set(ownerId, new Map());\n }\n\n if (!this.collectionNameToCollectionResourceId.has(containerName)) {\n this.collectionNameToCollectionResourceId.set(containerName, ownerId);\n }\n\n const containerSessionContainer = this.collectionResourceIdToSessionTokens.get(ownerId);\n SessionContainer.compareAndSetToken(sessionTokenString, containerSessionContainer);\n }\n }\n\n private validateOwnerID(ownerId: string): boolean {\n // If ownerId contains exactly 8 bytes it represents a unique database+collection identifier. Otherwise it represents another resource\n // The first 4 bytes are the database. The last 4 bytes are the collection.\n // Cosmos rids potentially contain \"-\" which is an invalid character in the browser atob implementation\n // See https://en.wikipedia.org/wiki/Base64#Filenames\n return atob(ownerId.replace(/-/g, \"/\")).length === 8;\n }\n\n private getPartitionKeyRangeIdToTokenMap(\n collectionName: string\n ): Map<string, VectorSessionToken> {\n let rangeIdToTokenMap: Map<string, VectorSessionToken> = null;\n if (collectionName && this.collectionNameToCollectionResourceId.has(collectionName)) {\n rangeIdToTokenMap = this.collectionResourceIdToSessionTokens.get(\n this.collectionNameToCollectionResourceId.get(collectionName)\n );\n }\n\n return rangeIdToTokenMap;\n }\n\n private static getCombinedSessionTokenString(tokens: Map<string, VectorSessionToken>): string {\n if (!tokens || tokens.size === 0) {\n return SessionContainer.EMPTY_SESSION_TOKEN;\n }\n\n let result = \"\";\n for (const [range, token] of tokens.entries()) {\n result +=\n range +\n SessionContainer.SESSION_TOKEN_PARTITION_SPLITTER +\n token.toString() +\n SessionContainer.SESSION_TOKEN_SEPARATOR;\n }\n return result.slice(0, -1);\n }\n\n private static compareAndSetToken(\n newTokenString: string,\n containerSessionTokens: Map<string, VectorSessionToken>\n ): void {\n if (!newTokenString) {\n return;\n }\n\n const partitionsParts = newTokenString.split(SessionContainer.SESSION_TOKEN_SEPARATOR);\n for (const partitionPart of partitionsParts) {\n const newTokenParts = partitionPart.split(SessionContainer.SESSION_TOKEN_PARTITION_SPLITTER);\n if (newTokenParts.length !== 2) {\n return;\n }\n\n const range = newTokenParts[0];\n const newToken = VectorSessionToken.create(newTokenParts[1]);\n const tokenForRange = !containerSessionTokens.get(range)\n ? newToken\n : containerSessionTokens.get(range).merge(newToken);\n containerSessionTokens.set(range, tokenForRange);\n }\n }\n\n // TODO: have a assert if the type doesn't mastch known types\n private static isReadingFromMaster(\n resourceType: ResourceType,\n operationType: OperationType\n ): 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 operationType === OperationType.Query)\n ) {\n return true;\n }\n\n return false;\n }\n\n private getContainerName(request: SessionContext, headers: CosmosHeaders): string {\n let ownerFullName = headers[Constants.HttpHeaders.OwnerFullName];\n if (!ownerFullName) {\n ownerFullName = trimSlashes(request.resourceAddress);\n }\n\n return getContainerLink(ownerFullName as string);\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport function checkURL(testString: string): URL {\n return new URL(testString);\n}\n\nexport function sanitizeEndpoint(url: string): string {\n return new URL(url).href.replace(/\\/$/, \"\");\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { v4 } from \"uuid\";\nconst uuid = v4;\nimport {\n Pipeline,\n bearerTokenAuthenticationPolicy,\n createEmptyPipeline,\n} from \"@azure/core-rest-pipeline\";\nimport { PartitionKeyRange } from \"./client/Container/PartitionKeyRange\";\nimport { Resource } from \"./client/Resource\";\nimport { Constants, HTTPMethod, OperationType, ResourceType } from \"./common/constants\";\nimport { getIdFromLink, getPathFromLink, parseLink } from \"./common/helper\";\nimport { StatusCodes, SubStatusCodes } from \"./common/statusCodes\";\nimport { Agent, CosmosClientOptions } from \"./CosmosClientOptions\";\nimport { ConnectionPolicy, ConsistencyLevel, DatabaseAccount, PartitionKey } from \"./documents\";\nimport { GlobalEndpointManager } from \"./globalEndpointManager\";\nimport { PluginConfig, PluginOn, executePlugins } from \"./plugins/Plugin\";\nimport { FetchFunctionCallback, SqlQuerySpec } from \"./queryExecutionContext\";\nimport { CosmosHeaders } from \"./queryExecutionContext/CosmosHeaders\";\nimport { QueryIterator } from \"./queryIterator\";\nimport { ErrorResponse } from \"./request\";\nimport { FeedOptions, RequestOptions, Response } from \"./request\";\nimport { PartitionedQueryExecutionInfo } from \"./request/ErrorResponse\";\nimport { getHeaders } from \"./request/request\";\nimport { RequestContext } from \"./request/RequestContext\";\nimport { RequestHandler } from \"./request/RequestHandler\";\nimport { SessionContainer } from \"./session/sessionContainer\";\nimport { SessionContext } from \"./session/SessionContext\";\nimport { BulkOptions } from \"./utils/batch\";\nimport { sanitizeEndpoint } from \"./utils/checkURL\";\nimport { AzureLogger, createClientLogger } from \"@azure/logger\";\n\nconst logger: AzureLogger = createClientLogger(\"ClientContext\");\n\nconst QueryJsonContentType = \"application/query+json\";\n\n/**\n * @hidden\n * @hidden\n */\nexport class ClientContext {\n private readonly sessionContainer: SessionContainer;\n private connectionPolicy: ConnectionPolicy;\n private pipeline: Pipeline;\n public partitionKeyDefinitionCache: { [containerUrl: string]: any }; // TODO: PartitionKeyDefinitionCache\n public constructor(\n private cosmosClientOptions: CosmosClientOptions,\n private globalEndpointManager: GlobalEndpointManager\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 }\n /** @hidden */\n public async read<T>({\n path,\n resourceType,\n resourceId,\n options = {},\n partitionKey,\n }: {\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\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\n request.headers = await this.buildHeaders(request);\n this.applySessionToken(request);\n\n // read will use ReadEndpoint since it uses GET operation\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n request.resourceType,\n request.operationType\n );\n const response = await executePlugins(request, RequestHandler.request, PluginOn.operation);\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 partitionKeyRangeId,\n partitionKey,\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 partitionKeyRangeId?: string;\n partitionKey?: PartitionKey;\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 const requestId = uuid();\n if (query !== undefined) {\n request.method = HTTPMethod.post;\n }\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n request.resourceType,\n request.operationType\n );\n request.headers = await this.buildHeaders(request);\n if (query !== undefined) {\n request.headers[Constants.HttpHeaders.IsQuery] = \"true\";\n request.headers[Constants.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);\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 ): 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\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n request.resourceType,\n request.operationType\n );\n request.headers = await this.buildHeaders(request);\n request.headers[Constants.HttpHeaders.IsQueryPlan] = \"True\";\n request.headers[Constants.HttpHeaders.QueryVersion] = \"1.4\";\n request.headers[Constants.HttpHeaders.SupportedQueryFeatures] =\n \"NonValueAggregate, Aggregate, Distinct, MultipleOrderBy, OffsetAndLimit, OrderBy, Top, CompositeAggregate, GroupBy, MultipleAggregates\";\n request.headers[Constants.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 const response = await RequestHandler.request(request);\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 = (innerOptions) => {\n return this.queryFeed({\n path,\n resourceType: ResourceType.pkranges,\n resourceId: id,\n resultFn: (result) => result.PartitionKeyRanges,\n query,\n options: innerOptions,\n });\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 }: {\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\n method?: HTTPMethod;\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\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 request.resourceType,\n request.operationType\n );\n const response = await executePlugins(request, RequestHandler.request, PluginOn.operation);\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 }: {\n body: any;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\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\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 request.resourceType,\n request.operationType\n );\n const response = await executePlugins(request, RequestHandler.request, PluginOn.operation);\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 options = {},\n partitionKey,\n }: {\n body: T;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\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\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 request.resourceType,\n request.operationType\n );\n const response = await executePlugins(request, RequestHandler.request, PluginOn.operation);\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 { result: resultFn(res.result), headers: res.headers, code: res.code };\n } else {\n const newResult = resultFn(res.result).map((body: any) => body);\n return { result: newResult, headers: res.headers, code: res.code };\n }\n }\n\n private applySessionToken(requestContext: RequestContext): void {\n const request = this.getSessionParams(requestContext.path);\n\n if (requestContext.headers && requestContext.headers[Constants.HttpHeaders.SessionToken]) {\n return;\n }\n\n const sessionConsistency: ConsistencyLevel = requestContext.headers[\n Constants.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[Constants.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 }: {\n body: any;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\n options?: RequestOptions;\n partitionKey?: PartitionKey;\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\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 request.resourceType,\n request.operationType\n );\n const response = await executePlugins(request, RequestHandler.request, PluginOn.operation);\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 }: {\n body: T;\n path: string;\n resourceType: ResourceType;\n resourceId: string;\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.Upsert,\n path,\n resourceType,\n body,\n resourceId,\n options,\n partitionKey,\n };\n\n request.headers = await this.buildHeaders(request);\n request.headers[Constants.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 request.resourceType,\n request.operationType\n );\n const response = await executePlugins(request, RequestHandler.request, PluginOn.operation);\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 }: {\n sprocLink: string;\n params?: any[];\n options?: RequestOptions;\n partitionKey?: PartitionKey;\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\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 request.resourceType,\n request.operationType\n );\n return executePlugins(request, RequestHandler.request, PluginOn.operation);\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 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\n request.headers = await this.buildHeaders(request);\n // await options.beforeOperation({ endpoint, request, headers: requestHeaders });\n const { result, headers } = await executePlugins(\n request,\n RequestHandler.request,\n PluginOn.operation\n );\n\n const databaseAccount = new DatabaseAccount(result, headers);\n\n return { result: databaseAccount, headers };\n }\n\n public getWriteEndpoint(): Promise<string> {\n return this.globalEndpointManager.getWriteEndpoint();\n }\n\n public getReadEndpoint(): Promise<string> {\n return this.globalEndpointManager.getReadEndpoint();\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 }: {\n body: T;\n path: string;\n partitionKey: string;\n resourceId: string;\n options?: RequestOptions;\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\n request.headers = await this.buildHeaders(request);\n request.headers[Constants.HttpHeaders.IsBatchRequest] = true;\n request.headers[Constants.HttpHeaders.IsBatchAtomic] = true;\n\n this.applySessionToken(request);\n\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n request.resourceType,\n request.operationType\n );\n const response = await executePlugins(request, RequestHandler.request, PluginOn.operation);\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 public async bulk<T>({\n body,\n path,\n partitionKeyRangeId,\n resourceId,\n bulkOptions = {},\n options = {},\n }: {\n body: T;\n path: string;\n partitionKeyRangeId: string;\n resourceId: string;\n bulkOptions?: BulkOptions;\n options?: RequestOptions;\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\n request.headers = await this.buildHeaders(request);\n request.headers[Constants.HttpHeaders.IsBatchRequest] = true;\n request.headers[Constants.HttpHeaders.PartitionKeyRangeID] = partitionKeyRangeId;\n request.headers[Constants.HttpHeaders.IsBatchAtomic] = false;\n request.headers[Constants.HttpHeaders.BatchContinueOnError] =\n bulkOptions.continueOnError || false;\n\n this.applySessionToken(request);\n\n request.endpoint = await this.globalEndpointManager.resolveServiceEndpoint(\n request.resourceType,\n request.operationType\n );\n const response = await executePlugins(request, RequestHandler.request, PluginOn.operation);\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 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: requestContext.partitionKey,\n });\n }\n\n /**\n * Returns collection of properties which are derived from the context for Request Creation\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 } {\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 };\n }\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { getUserAgent as userAgent } from \"universal-user-agent\";\nimport { Constants } from \"./constants\";\n\n/**\n * @hidden\n */\nexport function getUserAgent(suffix?: string): string {\n const ua = `${userAgent()} ${Constants.SDKName}/${Constants.SDKVersion}`;\n if (suffix) {\n return ua + \" \" + suffix;\n }\n return ua;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { OperationType, ResourceType, isReadRequest } from \"./common\";\nimport { CosmosClientOptions } from \"./CosmosClientOptions\";\nimport { Location, DatabaseAccount } from \"./documents\";\nimport { RequestOptions } from \"./index\";\nimport { Constants } from \"./common/constants\";\nimport { ResourceResponse } from \"./request\";\n\n/**\n * @hidden\n * This internal class implements the logic for endpoint management for geo-replicated database accounts.\n */\nexport class GlobalEndpointManager {\n /**\n * The endpoint used to create the client instance.\n */\n private defaultEndpoint: string;\n /**\n * Flag to enable/disable automatic redirecting of requests based on read/write operations.\n */\n public enableEndpointDiscovery: boolean;\n private isRefreshing: boolean;\n private options: CosmosClientOptions;\n /**\n * List of azure regions to be used as preferred locations for read requests.\n */\n private preferredLocations: string[];\n private writeableLocations: Location[] = [];\n private readableLocations: Location[] = [];\n private unavailableReadableLocations: Location[] = [];\n private unavailableWriteableLocations: Location[] = [];\n\n /**\n * @param options - The document client instance.\n */\n constructor(\n options: CosmosClientOptions,\n private readDatabaseAccount: (\n opts: RequestOptions\n ) => Promise<ResourceResponse<DatabaseAccount>>\n ) {\n this.options = options;\n this.defaultEndpoint = options.endpoint;\n this.enableEndpointDiscovery = options.connectionPolicy.enableEndpointDiscovery;\n this.isRefreshing = false;\n this.preferredLocations = this.options.connectionPolicy.preferredLocations;\n }\n\n /**\n * Gets the current read endpoint from the endpoint cache.\n */\n public async getReadEndpoint(): Promise<string> {\n return this.resolveServiceEndpoint(ResourceType.item, OperationType.Read);\n }\n\n /**\n * Gets the current write endpoint from the endpoint cache.\n */\n public async getWriteEndpoint(): Promise<string> {\n return this.resolveServiceEndpoint(ResourceType.item, OperationType.Replace);\n }\n\n public async getReadEndpoints(): Promise<ReadonlyArray<string>> {\n return this.readableLocations.map((loc) => loc.databaseAccountEndpoint);\n }\n\n public async getWriteEndpoints(): Promise<ReadonlyArray<string>> {\n return this.writeableLocations.map((loc) => loc.databaseAccountEndpoint);\n }\n\n public async markCurrentLocationUnavailableForRead(endpoint: string): Promise<void> {\n await this.refreshEndpointList();\n const location = this.readableLocations.find((loc) => loc.databaseAccountEndpoint === endpoint);\n if (location) {\n location.unavailable = true;\n location.lastUnavailabilityTimestampInMs = Date.now();\n this.unavailableReadableLocations.push(location);\n }\n }\n\n public async markCurrentLocationUnavailableForWrite(endpoint: string): Promise<void> {\n await this.refreshEndpointList();\n const location = this.writeableLocations.find(\n (loc) => loc.databaseAccountEndpoint === endpoint\n );\n if (location) {\n location.unavailable = true;\n location.lastUnavailabilityTimestampInMs = Date.now();\n this.unavailableWriteableLocations.push(location);\n }\n }\n\n public canUseMultipleWriteLocations(\n resourceType?: ResourceType,\n operationType?: OperationType\n ): boolean {\n let canUse = this.options.connectionPolicy.useMultipleWriteLocations;\n\n if (resourceType) {\n canUse =\n canUse &&\n (resourceType === ResourceType.item ||\n (resourceType === ResourceType.sproc && operationType === OperationType.Execute));\n }\n\n return canUse;\n }\n\n public async resolveServiceEndpoint(\n resourceType: ResourceType,\n operationType: OperationType\n ): Promise<string> {\n // If endpoint discovery is disabled, always use the user provided endpoint\n if (!this.options.connectionPolicy.enableEndpointDiscovery) {\n return this.defaultEndpoint;\n }\n\n // If getting the database account, always use the user provided endpoint\n if (resourceType === ResourceType.none) {\n return this.defaultEndpoint;\n }\n\n if (this.readableLocations.length === 0 || this.writeableLocations.length === 0) {\n const { resource: databaseAccount } = await this.readDatabaseAccount({\n urlConnection: this.defaultEndpoint,\n });\n this.writeableLocations = databaseAccount.writableLocations;\n this.readableLocations = databaseAccount.readableLocations;\n }\n\n const locations = isReadRequest(operationType)\n ? this.readableLocations\n : this.writeableLocations;\n\n let location;\n // If we have preferred locations, try each one in order and use the first available one\n if (this.preferredLocations && this.preferredLocations.length > 0) {\n for (const preferredLocation of this.preferredLocations) {\n location = locations.find(\n (loc) =>\n loc.unavailable !== true &&\n normalizeEndpoint(loc.name) === normalizeEndpoint(preferredLocation)\n );\n if (location) {\n break;\n }\n }\n }\n\n // If no preferred locations or one did not match, just grab the first one that is available\n if (!location) {\n location = locations.find((loc) => {\n return loc.unavailable !== true;\n });\n }\n return location ? location.databaseAccountEndpoint : this.defaultEndpoint;\n }\n\n /**\n * Refreshes the endpoint list by clearning stale unavailability and then\n * retrieving the writable and readable locations from the geo-replicated database account\n * and then updating the locations cache.\n * We skip the refreshing if enableEndpointDiscovery is set to False\n */\n public async refreshEndpointList(): Promise<void> {\n if (!this.isRefreshing && this.enableEndpointDiscovery) {\n this.isRefreshing = true;\n const databaseAccount = await this.getDatabaseAccountFromAnyEndpoint();\n if (databaseAccount) {\n this.refreshStaleUnavailableLocations();\n this.refreshEndpoints(databaseAccount);\n }\n this.isRefreshing = false;\n }\n }\n\n private refreshEndpoints(databaseAccount: DatabaseAccount): void {\n for (const location of databaseAccount.writableLocations) {\n const existingLocation = this.writeableLocations.find((loc) => loc.name === location.name);\n if (!existingLocation) {\n this.writeableLocations.push(location);\n }\n }\n for (const location of databaseAccount.readableLocations) {\n const existingLocation = this.readableLocations.find((loc) => loc.name === location.name);\n if (!existingLocation) {\n this.readableLocations.push(location);\n }\n }\n }\n\n private refreshStaleUnavailableLocations(): void {\n const now = Date.now();\n this.updateLocation(now, this.unavailableReadableLocations, this.readableLocations);\n this.unavailableReadableLocations = this.cleanUnavailableLocationList(\n now,\n this.unavailableReadableLocations\n );\n\n this.updateLocation(now, this.unavailableWriteableLocations, this.writeableLocations);\n this.unavailableWriteableLocations = this.cleanUnavailableLocationList(\n now,\n this.unavailableWriteableLocations\n );\n }\n\n /**\n * update the locationUnavailability to undefined if the location is available again\n * @param now - current time\n * @param unavailableLocations - list of unavailable locations\n * @param allLocations - list of all locations\n */\n private updateLocation(now: number, unavailableLocations: Location[], allLocations: Location[]) {\n for (const location of unavailableLocations) {\n const unavaialableLocation = allLocations.find((loc) => loc.name === location.name);\n if (\n unavaialableLocation &&\n now - unavaialableLocation.lastUnavailabilityTimestampInMs >\n Constants.LocationUnavailableExpirationTimeInMs\n ) {\n unavaialableLocation.unavailable = false;\n }\n }\n }\n\n private cleanUnavailableLocationList(now: number, unavailableLocations: Location[]): Location[] {\n return unavailableLocations.filter((loc) => {\n if (\n loc &&\n now - loc.lastUnavailabilityTimestampInMs >= Constants.LocationUnavailableExpirationTimeInMs\n ) {\n return false;\n }\n return true;\n });\n }\n\n /**\n * Gets the database account first by using the default endpoint, and if that doesn't returns\n * use the endpoints for the preferred locations in the order they are specified to get\n * the database account.\n */\n private async getDatabaseAccountFromAnyEndpoint(): Promise<DatabaseAccount> {\n try {\n const options = { urlConnection: this.defaultEndpoint };\n const { resource: databaseAccount } = await this.readDatabaseAccount(options);\n return databaseAccount;\n // If for any reason(non - globaldb related), we are not able to get the database\n // account from the above call to readDatabaseAccount,\n // we would try to get this information from any of the preferred locations that the user\n // might have specified (by creating a locational endpoint)\n // and keeping eating the exception until we get the database account and return None at the end,\n // if we are not able to get that info from any endpoints\n } catch (err: any) {\n // TODO: Tracing\n }\n\n if (this.preferredLocations) {\n for (const location of this.preferredLocations) {\n try {\n const locationalEndpoint = GlobalEndpointManager.getLocationalEndpoint(\n this.defaultEndpoint,\n location\n );\n const options = { urlConnection: locationalEndpoint };\n const { resource: databaseAccount } = await this.readDatabaseAccount(options);\n if (databaseAccount) {\n return databaseAccount;\n }\n } catch (err: any) {\n // TODO: Tracing\n }\n }\n }\n }\n\n /**\n * Gets the locational endpoint using the location name passed to it using the default endpoint.\n *\n * @param defaultEndpoint - The default endpoint to use for the endpoint.\n * @param locationName - The location name for the azure region like \"East US\".\n */\n private static getLocationalEndpoint(defaultEndpoint: string, locationName: string): string {\n // For defaultEndpoint like 'https://contoso.documents.azure.com:443/' parse it to generate URL format\n // This defaultEndpoint should be global endpoint(and cannot be a locational endpoint)\n // and we agreed to document that\n const endpointUrl = new URL(defaultEndpoint);\n\n // hostname attribute in endpointUrl will return 'contoso.documents.azure.com'\n if (endpointUrl.hostname) {\n const hostnameParts = endpointUrl.hostname.toString().toLowerCase().split(\".\");\n if (hostnameParts) {\n // globalDatabaseAccountName will return 'contoso'\n const globalDatabaseAccountName = hostnameParts[0];\n\n // Prepare the locationalDatabaseAccountName as contoso-EastUS for location_name 'East US'\n const locationalDatabaseAccountName =\n globalDatabaseAccountName + \"-\" + locationName.replace(\" \", \"\");\n\n // Replace 'contoso' with 'contoso-EastUS' and\n // return locationalEndpoint as https://contoso-EastUS.documents.azure.com:443/\n const locationalEndpoint = defaultEndpoint\n .toLowerCase()\n .replace(globalDatabaseAccountName, locationalDatabaseAccountName);\n return locationalEndpoint;\n }\n }\n\n return null;\n }\n}\n\nfunction normalizeEndpoint(endpoint: string): string {\n return endpoint.split(\" \").join(\"\").toLowerCase();\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Database, Databases } from \"./client/Database\";\nimport { Offer, Offers } from \"./client/Offer\";\nimport { ClientContext } from \"./ClientContext\";\nimport { parseConnectionString } from \"./common\";\nimport { Constants } from \"./common/constants\";\nimport { getUserAgent } from \"./common/platform\";\nimport { CosmosClientOptions } from \"./CosmosClientOptions\";\nimport { DatabaseAccount, defaultConnectionPolicy } from \"./documents\";\nimport { GlobalEndpointManager } from \"./globalEndpointManager\";\nimport { RequestOptions, ResourceResponse } from \"./request\";\nimport { checkURL } from \"./utils/checkURL\";\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 * ```typescript\n * const client = new CosmosClient({endpoint: \"<URL HERE>\", auth: {masterKey: \"<KEY HERE>\"}});\n * await client.databases.create({id: \"<datbase name here>\"});\n * ```\n * @example Instantiate a client with custom Connection Policy\n * ```typescript\n * const connectionPolicy = new ConnectionPolicy();\n * connectionPolicy.RequestTimeout = 10000;\n * const client = new CosmosClient({\n * endpoint: \"<URL HERE>\",\n * auth: {masterKey: \"<KEY HERE>\"},\n * connectionPolicy\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 * ```typescript\n * const {resource: databaseDefinition, database} = await client.databases.create({id: \"<name here>\"});\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.Timer;\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 }\n\n const endpoint = checkURL(optionsOrConnectionString.endpoint);\n if (!endpoint) {\n throw new Error(\"Invalid endpoint specified\");\n }\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 optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.UserAgent] = getUserAgent(\n optionsOrConnectionString.userAgentSuffix\n );\n\n const globalEndpointManager = new GlobalEndpointManager(\n optionsOrConnectionString,\n async (opts: RequestOptions) => this.getDatabaseAccount(opts)\n );\n this.clientContext = new ClientContext(optionsOrConnectionString, globalEndpointManager);\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);\n this.offers = new Offers(this, this.clientContext);\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 const response = await this.clientContext.getDatabaseAccount(options);\n return new ResourceResponse<DatabaseAccount>(response.result, response.headers, response.code);\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 getWriteEndpoint(): Promise<string> {\n return this.clientContext.getWriteEndpoint();\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 getReadEndpoint(): Promise<string> {\n return this.clientContext.getReadEndpoint();\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 * ```typescript\n * const container = client.database(\"<database id>\").containers.create(\"<container id>\");\n * ```\n *\n * @example Delete an existing database\n * ```typescript\n * await client.database(\"<id here>\").delete();\n * ```\n */\n public database(id: string): Database {\n return new Database(this, id, this.clientContext);\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 }\n\n private async backgroundRefreshEndpointList(\n globalEndpointManager: GlobalEndpointManager,\n refreshRate: number\n ) {\n this.endpointRefresher = setInterval(() => {\n try {\n globalEndpointManager.refreshEndpointList();\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","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { CosmosContainerChildResourceKind } from \"../../common/constants\";\nimport { CosmosKeyType } from \"../../common/constants\";\n\nexport class SasTokenProperties {\n user: string;\n userTag: string;\n databaseName: string;\n containerName: string;\n resourceName: string;\n resourcePath: string;\n resourceKind: CosmosContainerChildResourceKind;\n partitionKeyValueRanges: string[];\n startTime: Date;\n expiryTime: Date;\n keyType: CosmosKeyType | number;\n controlPlaneReaderScope: number;\n controlPlaneWriterScope: number;\n dataPlaneReaderScope: number;\n dataPlaneWriterScope: number;\n cosmosContainerChildResourceKind: CosmosContainerChildResourceKind;\n cosmosKeyType: CosmosKeyType;\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/// <reference lib=\"dom\"/>\n\nexport function encodeUTF8(str: string): Uint8Array {\n const bytes = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n return bytes;\n}\n\nexport function encodeBase64(value: ArrayBuffer): string {\n if (\"function\" !== typeof btoa) {\n throw new Error(\"Your browser environment is missing the global `btoa` function\");\n }\n\n let binary = \"\";\n const bytes = new Uint8Array(value);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n","// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { SasTokenProperties } from \"../client/SasToken/SasTokenProperties\";\nimport { Constants, CosmosKeyType, SasTokenPermissionKind } from \"../common\";\nimport { encodeUTF8 } from \"./encode\";\nimport { hmac } from \"./hmac\";\n\n/**\n * Experimental internal only\n * Generates the payload representing the permission configuration for the sas token.\n */\n\nexport async function createAuthorizationSasToken(\n masterKey: string,\n sasTokenProperties: SasTokenProperties\n): Promise<string> {\n let resourcePrefixPath = \"\";\n if (\n typeof sasTokenProperties.databaseName === \"string\" &&\n sasTokenProperties.databaseName !== \"\"\n ) {\n resourcePrefixPath += `/${Constants.Path.DatabasesPathSegment}/${sasTokenProperties.databaseName}`;\n }\n\n if (\n typeof sasTokenProperties.containerName === \"string\" &&\n sasTokenProperties.containerName !== \"\"\n ) {\n if (sasTokenProperties.databaseName === \"\") {\n throw new Error(`illegalArgumentException : ${sasTokenProperties.databaseName} \\\n is an invalid database name`);\n }\n resourcePrefixPath += `/${Constants.Path.CollectionsPathSegment}/${sasTokenProperties.containerName}`;\n }\n\n if (\n typeof sasTokenProperties.resourceName === \"string\" &&\n sasTokenProperties.resourceName !== \"\"\n ) {\n if (sasTokenProperties.containerName === \"\") {\n throw new Error(`illegalArgumentException : ${sasTokenProperties.containerName} \\\n is an invalid container name`);\n }\n switch (sasTokenProperties.resourceKind) {\n case \"ITEM\":\n resourcePrefixPath += `${Constants.Path.Root}${Constants.Path.DocumentsPathSegment}`;\n break;\n case \"STORED_PROCEDURE\":\n resourcePrefixPath += `${Constants.Path.Root}${Constants.Path.StoredProceduresPathSegment}`;\n break;\n case \"USER_DEFINED_FUNCTION\":\n resourcePrefixPath += `${Constants.Path.Root}${Constants.Path.UserDefinedFunctionsPathSegment}`;\n break;\n case \"TRIGGER\":\n resourcePrefixPath += `${Constants.Path.Root}${Constants.Path.TriggersPathSegment}`;\n break;\n default:\n throw new Error(`illegalArgumentException : ${sasTokenProperties.resourceKind} \\\n is an invalid resource kind`);\n break;\n }\n resourcePrefixPath += `${Constants.Path.Root}${sasTokenProperties.resourceName}${Constants.Path.Root}`;\n }\n sasTokenProperties.resourcePath = resourcePrefixPath.toString();\n\n let partitionRanges = \"\";\n\n if (\n sasTokenProperties.partitionKeyValueRanges !== undefined &&\n sasTokenProperties.partitionKeyValueRanges.length > 0\n ) {\n if (\n typeof sasTokenProperties.resourceKind !== \"string\" &&\n sasTokenProperties.resourceKind !== \"ITEM\"\n ) {\n throw new Error(`illegalArgumentException : ${sasTokenProperties.resourceKind} \\\n is an invalid partition key value range`);\n }\n sasTokenProperties.partitionKeyValueRanges.forEach((range) => {\n partitionRanges += `${encodeUTF8(range)},`;\n });\n }\n\n if (sasTokenProperties.controlPlaneReaderScope === 0) {\n sasTokenProperties.controlPlaneReaderScope += SasTokenPermissionKind.ContainerReadAny;\n sasTokenProperties.controlPlaneWriterScope += SasTokenPermissionKind.ContainerReadAny;\n }\n\n if (\n sasTokenProperties.dataPlaneReaderScope === 0 &&\n sasTokenProperties.dataPlaneWriterScope === 0\n ) {\n sasTokenProperties.dataPlaneReaderScope = SasTokenPermissionKind.ContainerFullAccess;\n sasTokenProperties.dataPlaneWriterScope = SasTokenPermissionKind.ContainerFullAccess;\n }\n\n if (\n typeof sasTokenProperties.keyType !== \"number\" ||\n typeof sasTokenProperties.keyType === undefined\n ) {\n switch (sasTokenProperties.keyType) {\n case CosmosKeyType.PrimaryMaster:\n sasTokenProperties.keyType = 1;\n break;\n case CosmosKeyType.SecondaryMaster:\n sasTokenProperties.keyType = 2;\n break;\n case CosmosKeyType.PrimaryReadOnly:\n sasTokenProperties.keyType = 3;\n break;\n case CosmosKeyType.SecondaryReadOnly:\n sasTokenProperties.keyType = 4;\n break;\n default:\n throw new Error(`illegalArgumentException : ${sasTokenProperties.keyType} \\\n is an invalid key type`);\n break;\n }\n }\n\n const payload =\n sasTokenProperties.user +\n \"\\n\" +\n sasTokenProperties.userTag +\n \"\\n\" +\n sasTokenProperties.resourcePath +\n \"\\n\" +\n partitionRanges +\n \"\\n\" +\n utcsecondsSinceEpoch(sasTokenProperties.startTime).toString(16) +\n \"\\n\" +\n utcsecondsSinceEpoch(sasTokenProperties.expiryTime).toString(16) +\n \"\\n\" +\n sasTokenProperties.keyType +\n \"\\n\" +\n sasTokenProperties.controlPlaneReaderScope.toString(16) +\n \"\\n\" +\n sasTokenProperties.controlPlaneWriterScope.toString(16) +\n \"\\n\" +\n sasTokenProperties.dataPlaneReaderScope.toString(16) +\n \"\\n\" +\n sasTokenProperties.dataPlaneWriterScope.toString(16) +\n \"\\n\";\n\n const signedPayload = await hmac(masterKey, Buffer.from(payload).toString(\"base64\"));\n return \"type=sas&ver=1.0&sig=\" + signedPayload + \";\" + Buffer.from(payload).toString(\"base64\");\n}\n/**\n * @hidden\n */\n// TODO: utcMilllisecondsSinceEpoch\nexport function utcsecondsSinceEpoch(date: Date): number {\n return Math.round(date.getTime() / 1000);\n}\n"],"names":["ResourceType","HTTPMethod","OperationType","SasTokenPermissionKind","createHmac","createClientLogger","uuid","v4","ConnectionMode","ConsistencyLevel","DataType","IndexingMode","SpatialType","IndexKind","PermissionMode","TriggerOperation","TriggerType","UserDefinedFunctionType","GeospatialType","logger","PriorityQueue","semaphore","createHash","stableStringify","__await","ConflictResolutionMode","JSBI","reverse","prefixKeyByType","PluginOn","createDefaultHttpClient","AbortController","createHttpHeaders","createPipelineRequest","RetryUtility.execute","createEmptyPipeline","bearerTokenAuthenticationPolicy","userAgent"],"mappings":"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"}
\No newline at end of file