@azure/cosmos 4.5.1 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/README.md +32 -0
  2. package/dist/browser/ClientContext.d.ts.map +1 -1
  3. package/dist/browser/ClientContext.js +110 -19
  4. package/dist/browser/ClientContext.js.map +1 -1
  5. package/dist/browser/CosmosClient.d.ts +13 -0
  6. package/dist/browser/CosmosClient.d.ts.map +1 -1
  7. package/dist/browser/CosmosClient.js +19 -3
  8. package/dist/browser/CosmosClient.js.map +1 -1
  9. package/dist/browser/CosmosClientOptions.d.ts.map +1 -1
  10. package/dist/browser/CosmosClientOptions.js.map +1 -1
  11. package/dist/browser/CosmosDiagnostics.d.ts +4 -0
  12. package/dist/browser/CosmosDiagnostics.d.ts.map +1 -1
  13. package/dist/browser/CosmosDiagnostics.js.map +1 -1
  14. package/dist/browser/GlobalEndpointManagerOptions.d.ts +2 -0
  15. package/dist/browser/GlobalEndpointManagerOptions.d.ts.map +1 -0
  16. package/dist/browser/GlobalEndpointManagerOptions.js +2 -0
  17. package/dist/browser/GlobalEndpointManagerOptions.js.map +1 -0
  18. package/dist/browser/client/ChangeFeed/ChangeFeedForEpkRange.d.ts.map +1 -1
  19. package/dist/browser/client/ChangeFeed/ChangeFeedForEpkRange.js +3 -0
  20. package/dist/browser/client/ChangeFeed/ChangeFeedForEpkRange.js.map +1 -1
  21. package/dist/browser/client/ChangeFeed/ChangeFeedForPartitionKey.d.ts.map +1 -1
  22. package/dist/browser/client/ChangeFeed/ChangeFeedForPartitionKey.js +3 -0
  23. package/dist/browser/client/ChangeFeed/ChangeFeedForPartitionKey.js.map +1 -1
  24. package/dist/browser/client/ChangeFeed/ChangeFeedIteratorOptions.d.ts +5 -0
  25. package/dist/browser/client/ChangeFeed/ChangeFeedIteratorOptions.d.ts.map +1 -1
  26. package/dist/browser/client/ChangeFeed/ChangeFeedIteratorOptions.js.map +1 -1
  27. package/dist/browser/client/ChangeFeed/InternalChangeFeedOptions.d.ts +1 -0
  28. package/dist/browser/client/ChangeFeed/InternalChangeFeedOptions.d.ts.map +1 -1
  29. package/dist/browser/client/ChangeFeed/InternalChangeFeedOptions.js.map +1 -1
  30. package/dist/browser/client/ChangeFeed/changeFeedUtils.d.ts.map +1 -1
  31. package/dist/browser/client/ChangeFeed/changeFeedUtils.js +1 -0
  32. package/dist/browser/client/ChangeFeed/changeFeedUtils.js.map +1 -1
  33. package/dist/browser/client/Item/Items.d.ts.map +1 -1
  34. package/dist/browser/client/Item/Items.js +5 -0
  35. package/dist/browser/client/Item/Items.js.map +1 -1
  36. package/dist/browser/common/constants.d.ts +4 -0
  37. package/dist/browser/common/constants.d.ts.map +1 -1
  38. package/dist/browser/common/constants.js +5 -1
  39. package/dist/browser/common/constants.js.map +1 -1
  40. package/dist/browser/common/helper.d.ts +6 -0
  41. package/dist/browser/common/helper.d.ts.map +1 -1
  42. package/dist/browser/common/helper.js +9 -1
  43. package/dist/browser/common/helper.js.map +1 -1
  44. package/dist/browser/common/platform.d.ts +1 -0
  45. package/dist/browser/common/platform.d.ts.map +1 -1
  46. package/dist/browser/common/platform.js +1 -3
  47. package/dist/browser/common/platform.js.map +1 -1
  48. package/dist/browser/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
  49. package/dist/browser/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
  50. package/dist/browser/diagnostics/DiagnosticNodeInternal.js.map +1 -1
  51. package/dist/browser/documents/ConnectionPolicy.d.ts +10 -4
  52. package/dist/browser/documents/ConnectionPolicy.d.ts.map +1 -1
  53. package/dist/browser/documents/ConnectionPolicy.js +2 -2
  54. package/dist/browser/documents/ConnectionPolicy.js.map +1 -1
  55. package/dist/browser/documents/DatabaseAccount.d.ts +4 -0
  56. package/dist/browser/documents/DatabaseAccount.d.ts.map +1 -1
  57. package/dist/browser/documents/DatabaseAccount.js +9 -0
  58. package/dist/browser/documents/DatabaseAccount.js.map +1 -1
  59. package/dist/browser/globalEndpointManager.d.ts +8 -0
  60. package/dist/browser/globalEndpointManager.d.ts.map +1 -1
  61. package/dist/browser/globalEndpointManager.js +68 -6
  62. package/dist/browser/globalEndpointManager.js.map +1 -1
  63. package/dist/browser/globalPartitionEndpointManager.d.ts +0 -2
  64. package/dist/browser/globalPartitionEndpointManager.d.ts.map +1 -1
  65. package/dist/browser/globalPartitionEndpointManager.js +13 -9
  66. package/dist/browser/globalPartitionEndpointManager.js.map +1 -1
  67. package/dist/browser/request/RequestHandler.js +2 -2
  68. package/dist/browser/request/RequestHandler.js.map +1 -1
  69. package/dist/browser/request/SharedOptions.d.ts +5 -0
  70. package/dist/browser/request/SharedOptions.d.ts.map +1 -1
  71. package/dist/browser/request/SharedOptions.js.map +1 -1
  72. package/dist/browser/retry/retryUtility.d.ts.map +1 -1
  73. package/dist/browser/retry/retryUtility.js +17 -3
  74. package/dist/browser/retry/retryUtility.js.map +1 -1
  75. package/dist/browser/retry/timeoutFailoverRetryPolicy.d.ts +1 -2
  76. package/dist/browser/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
  77. package/dist/browser/retry/timeoutFailoverRetryPolicy.js +4 -4
  78. package/dist/browser/retry/timeoutFailoverRetryPolicy.js.map +1 -1
  79. package/dist/browser/utils/encode.d.ts +1 -1
  80. package/dist/browser/utils/encode.d.ts.map +1 -1
  81. package/dist/browser/utils/encode.js.map +1 -1
  82. package/dist/commonjs/ClientContext.d.ts.map +1 -1
  83. package/dist/commonjs/ClientContext.js +110 -19
  84. package/dist/commonjs/ClientContext.js.map +1 -1
  85. package/dist/commonjs/CosmosClient.d.ts +13 -0
  86. package/dist/commonjs/CosmosClient.d.ts.map +1 -1
  87. package/dist/commonjs/CosmosClient.js +19 -3
  88. package/dist/commonjs/CosmosClient.js.map +1 -1
  89. package/dist/commonjs/CosmosClientOptions.d.ts.map +1 -1
  90. package/dist/commonjs/CosmosClientOptions.js.map +1 -1
  91. package/dist/commonjs/CosmosDiagnostics.d.ts +4 -0
  92. package/dist/commonjs/CosmosDiagnostics.d.ts.map +1 -1
  93. package/dist/commonjs/CosmosDiagnostics.js.map +1 -1
  94. package/dist/commonjs/GlobalEndpointManagerOptions.d.ts +2 -0
  95. package/dist/commonjs/GlobalEndpointManagerOptions.d.ts.map +1 -0
  96. package/dist/commonjs/GlobalEndpointManagerOptions.js +3 -0
  97. package/dist/commonjs/GlobalEndpointManagerOptions.js.map +1 -0
  98. package/dist/commonjs/client/ChangeFeed/ChangeFeedForEpkRange.d.ts.map +1 -1
  99. package/dist/commonjs/client/ChangeFeed/ChangeFeedForEpkRange.js +3 -0
  100. package/dist/commonjs/client/ChangeFeed/ChangeFeedForEpkRange.js.map +1 -1
  101. package/dist/commonjs/client/ChangeFeed/ChangeFeedForPartitionKey.d.ts.map +1 -1
  102. package/dist/commonjs/client/ChangeFeed/ChangeFeedForPartitionKey.js +3 -0
  103. package/dist/commonjs/client/ChangeFeed/ChangeFeedForPartitionKey.js.map +1 -1
  104. package/dist/commonjs/client/ChangeFeed/ChangeFeedIteratorOptions.d.ts +5 -0
  105. package/dist/commonjs/client/ChangeFeed/ChangeFeedIteratorOptions.d.ts.map +1 -1
  106. package/dist/commonjs/client/ChangeFeed/ChangeFeedIteratorOptions.js.map +1 -1
  107. package/dist/commonjs/client/ChangeFeed/InternalChangeFeedOptions.d.ts +1 -0
  108. package/dist/commonjs/client/ChangeFeed/InternalChangeFeedOptions.d.ts.map +1 -1
  109. package/dist/commonjs/client/ChangeFeed/InternalChangeFeedOptions.js.map +1 -1
  110. package/dist/commonjs/client/ChangeFeed/changeFeedUtils.d.ts.map +1 -1
  111. package/dist/commonjs/client/ChangeFeed/changeFeedUtils.js +1 -0
  112. package/dist/commonjs/client/ChangeFeed/changeFeedUtils.js.map +1 -1
  113. package/dist/commonjs/client/Item/Items.d.ts.map +1 -1
  114. package/dist/commonjs/client/Item/Items.js +5 -0
  115. package/dist/commonjs/client/Item/Items.js.map +1 -1
  116. package/dist/commonjs/common/constants.d.ts +4 -0
  117. package/dist/commonjs/common/constants.d.ts.map +1 -1
  118. package/dist/commonjs/common/constants.js +6 -2
  119. package/dist/commonjs/common/constants.js.map +1 -1
  120. package/dist/commonjs/common/helper.d.ts +6 -0
  121. package/dist/commonjs/common/helper.d.ts.map +1 -1
  122. package/dist/commonjs/common/helper.js +9 -0
  123. package/dist/commonjs/common/helper.js.map +1 -1
  124. package/dist/commonjs/common/platform.d.ts +1 -0
  125. package/dist/commonjs/common/platform.d.ts.map +1 -1
  126. package/dist/commonjs/common/platform.js +1 -3
  127. package/dist/commonjs/common/platform.js.map +1 -1
  128. package/dist/commonjs/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
  129. package/dist/commonjs/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
  130. package/dist/commonjs/diagnostics/DiagnosticNodeInternal.js.map +1 -1
  131. package/dist/commonjs/documents/ConnectionPolicy.d.ts +10 -4
  132. package/dist/commonjs/documents/ConnectionPolicy.d.ts.map +1 -1
  133. package/dist/commonjs/documents/ConnectionPolicy.js +2 -2
  134. package/dist/commonjs/documents/ConnectionPolicy.js.map +1 -1
  135. package/dist/commonjs/documents/DatabaseAccount.d.ts +4 -0
  136. package/dist/commonjs/documents/DatabaseAccount.d.ts.map +1 -1
  137. package/dist/commonjs/documents/DatabaseAccount.js +9 -0
  138. package/dist/commonjs/documents/DatabaseAccount.js.map +1 -1
  139. package/dist/commonjs/globalEndpointManager.d.ts +8 -0
  140. package/dist/commonjs/globalEndpointManager.d.ts.map +1 -1
  141. package/dist/commonjs/globalEndpointManager.js +68 -6
  142. package/dist/commonjs/globalEndpointManager.js.map +1 -1
  143. package/dist/commonjs/globalPartitionEndpointManager.d.ts +0 -2
  144. package/dist/commonjs/globalPartitionEndpointManager.d.ts.map +1 -1
  145. package/dist/commonjs/globalPartitionEndpointManager.js +13 -9
  146. package/dist/commonjs/globalPartitionEndpointManager.js.map +1 -1
  147. package/dist/commonjs/request/RequestHandler.js +2 -2
  148. package/dist/commonjs/request/RequestHandler.js.map +1 -1
  149. package/dist/commonjs/request/SharedOptions.d.ts +5 -0
  150. package/dist/commonjs/request/SharedOptions.d.ts.map +1 -1
  151. package/dist/commonjs/request/SharedOptions.js.map +1 -1
  152. package/dist/commonjs/retry/retryUtility.d.ts.map +1 -1
  153. package/dist/commonjs/retry/retryUtility.js +17 -3
  154. package/dist/commonjs/retry/retryUtility.js.map +1 -1
  155. package/dist/commonjs/retry/timeoutFailoverRetryPolicy.d.ts +1 -2
  156. package/dist/commonjs/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
  157. package/dist/commonjs/retry/timeoutFailoverRetryPolicy.js +4 -4
  158. package/dist/commonjs/retry/timeoutFailoverRetryPolicy.js.map +1 -1
  159. package/dist/commonjs/tsdoc-metadata.json +1 -1
  160. package/dist/commonjs/utils/encode.d.ts +1 -1
  161. package/dist/commonjs/utils/encode.d.ts.map +1 -1
  162. package/dist/commonjs/utils/encode.js.map +1 -1
  163. package/dist/esm/ClientContext.d.ts.map +1 -1
  164. package/dist/esm/ClientContext.js +110 -19
  165. package/dist/esm/ClientContext.js.map +1 -1
  166. package/dist/esm/CosmosClient.d.ts +13 -0
  167. package/dist/esm/CosmosClient.d.ts.map +1 -1
  168. package/dist/esm/CosmosClient.js +19 -3
  169. package/dist/esm/CosmosClient.js.map +1 -1
  170. package/dist/esm/CosmosClientOptions.d.ts.map +1 -1
  171. package/dist/esm/CosmosClientOptions.js.map +1 -1
  172. package/dist/esm/CosmosDiagnostics.d.ts +4 -0
  173. package/dist/esm/CosmosDiagnostics.d.ts.map +1 -1
  174. package/dist/esm/CosmosDiagnostics.js.map +1 -1
  175. package/dist/esm/GlobalEndpointManagerOptions.d.ts +2 -0
  176. package/dist/esm/GlobalEndpointManagerOptions.d.ts.map +1 -0
  177. package/dist/esm/GlobalEndpointManagerOptions.js +2 -0
  178. package/dist/esm/GlobalEndpointManagerOptions.js.map +1 -0
  179. package/dist/esm/client/ChangeFeed/ChangeFeedForEpkRange.d.ts.map +1 -1
  180. package/dist/esm/client/ChangeFeed/ChangeFeedForEpkRange.js +3 -0
  181. package/dist/esm/client/ChangeFeed/ChangeFeedForEpkRange.js.map +1 -1
  182. package/dist/esm/client/ChangeFeed/ChangeFeedForPartitionKey.d.ts.map +1 -1
  183. package/dist/esm/client/ChangeFeed/ChangeFeedForPartitionKey.js +3 -0
  184. package/dist/esm/client/ChangeFeed/ChangeFeedForPartitionKey.js.map +1 -1
  185. package/dist/esm/client/ChangeFeed/ChangeFeedIteratorOptions.d.ts +5 -0
  186. package/dist/esm/client/ChangeFeed/ChangeFeedIteratorOptions.d.ts.map +1 -1
  187. package/dist/esm/client/ChangeFeed/ChangeFeedIteratorOptions.js.map +1 -1
  188. package/dist/esm/client/ChangeFeed/InternalChangeFeedOptions.d.ts +1 -0
  189. package/dist/esm/client/ChangeFeed/InternalChangeFeedOptions.d.ts.map +1 -1
  190. package/dist/esm/client/ChangeFeed/InternalChangeFeedOptions.js.map +1 -1
  191. package/dist/esm/client/ChangeFeed/changeFeedUtils.d.ts.map +1 -1
  192. package/dist/esm/client/ChangeFeed/changeFeedUtils.js +1 -0
  193. package/dist/esm/client/ChangeFeed/changeFeedUtils.js.map +1 -1
  194. package/dist/esm/client/Item/Items.d.ts.map +1 -1
  195. package/dist/esm/client/Item/Items.js +5 -0
  196. package/dist/esm/client/Item/Items.js.map +1 -1
  197. package/dist/esm/common/constants.d.ts +4 -0
  198. package/dist/esm/common/constants.d.ts.map +1 -1
  199. package/dist/esm/common/constants.js +5 -1
  200. package/dist/esm/common/constants.js.map +1 -1
  201. package/dist/esm/common/helper.d.ts +6 -0
  202. package/dist/esm/common/helper.d.ts.map +1 -1
  203. package/dist/esm/common/helper.js +9 -1
  204. package/dist/esm/common/helper.js.map +1 -1
  205. package/dist/esm/common/platform.d.ts +1 -0
  206. package/dist/esm/common/platform.d.ts.map +1 -1
  207. package/dist/esm/common/platform.js +1 -3
  208. package/dist/esm/common/platform.js.map +1 -1
  209. package/dist/esm/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
  210. package/dist/esm/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
  211. package/dist/esm/diagnostics/DiagnosticNodeInternal.js.map +1 -1
  212. package/dist/esm/documents/ConnectionPolicy.d.ts +10 -4
  213. package/dist/esm/documents/ConnectionPolicy.d.ts.map +1 -1
  214. package/dist/esm/documents/ConnectionPolicy.js +2 -2
  215. package/dist/esm/documents/ConnectionPolicy.js.map +1 -1
  216. package/dist/esm/documents/DatabaseAccount.d.ts +4 -0
  217. package/dist/esm/documents/DatabaseAccount.d.ts.map +1 -1
  218. package/dist/esm/documents/DatabaseAccount.js +9 -0
  219. package/dist/esm/documents/DatabaseAccount.js.map +1 -1
  220. package/dist/esm/globalEndpointManager.d.ts +8 -0
  221. package/dist/esm/globalEndpointManager.d.ts.map +1 -1
  222. package/dist/esm/globalEndpointManager.js +68 -6
  223. package/dist/esm/globalEndpointManager.js.map +1 -1
  224. package/dist/esm/globalPartitionEndpointManager.d.ts +0 -2
  225. package/dist/esm/globalPartitionEndpointManager.d.ts.map +1 -1
  226. package/dist/esm/globalPartitionEndpointManager.js +13 -9
  227. package/dist/esm/globalPartitionEndpointManager.js.map +1 -1
  228. package/dist/esm/request/RequestHandler.js +2 -2
  229. package/dist/esm/request/RequestHandler.js.map +1 -1
  230. package/dist/esm/request/SharedOptions.d.ts +5 -0
  231. package/dist/esm/request/SharedOptions.d.ts.map +1 -1
  232. package/dist/esm/request/SharedOptions.js.map +1 -1
  233. package/dist/esm/retry/retryUtility.d.ts.map +1 -1
  234. package/dist/esm/retry/retryUtility.js +17 -3
  235. package/dist/esm/retry/retryUtility.js.map +1 -1
  236. package/dist/esm/retry/timeoutFailoverRetryPolicy.d.ts +1 -2
  237. package/dist/esm/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
  238. package/dist/esm/retry/timeoutFailoverRetryPolicy.js +4 -4
  239. package/dist/esm/retry/timeoutFailoverRetryPolicy.js.map +1 -1
  240. package/dist/esm/utils/encode.d.ts +1 -1
  241. package/dist/esm/utils/encode.d.ts.map +1 -1
  242. package/dist/esm/utils/encode.js.map +1 -1
  243. package/dist/react-native/ClientContext.d.ts.map +1 -1
  244. package/dist/react-native/ClientContext.js +110 -19
  245. package/dist/react-native/ClientContext.js.map +1 -1
  246. package/dist/react-native/CosmosClient.d.ts +13 -0
  247. package/dist/react-native/CosmosClient.d.ts.map +1 -1
  248. package/dist/react-native/CosmosClient.js +19 -3
  249. package/dist/react-native/CosmosClient.js.map +1 -1
  250. package/dist/react-native/CosmosClientOptions.d.ts.map +1 -1
  251. package/dist/react-native/CosmosClientOptions.js.map +1 -1
  252. package/dist/react-native/CosmosDiagnostics.d.ts +4 -0
  253. package/dist/react-native/CosmosDiagnostics.d.ts.map +1 -1
  254. package/dist/react-native/CosmosDiagnostics.js.map +1 -1
  255. package/dist/react-native/GlobalEndpointManagerOptions.d.ts +2 -0
  256. package/dist/react-native/GlobalEndpointManagerOptions.d.ts.map +1 -0
  257. package/dist/react-native/GlobalEndpointManagerOptions.js +2 -0
  258. package/dist/react-native/GlobalEndpointManagerOptions.js.map +1 -0
  259. package/dist/react-native/client/ChangeFeed/ChangeFeedForEpkRange.d.ts.map +1 -1
  260. package/dist/react-native/client/ChangeFeed/ChangeFeedForEpkRange.js +3 -0
  261. package/dist/react-native/client/ChangeFeed/ChangeFeedForEpkRange.js.map +1 -1
  262. package/dist/react-native/client/ChangeFeed/ChangeFeedForPartitionKey.d.ts.map +1 -1
  263. package/dist/react-native/client/ChangeFeed/ChangeFeedForPartitionKey.js +3 -0
  264. package/dist/react-native/client/ChangeFeed/ChangeFeedForPartitionKey.js.map +1 -1
  265. package/dist/react-native/client/ChangeFeed/ChangeFeedIteratorOptions.d.ts +5 -0
  266. package/dist/react-native/client/ChangeFeed/ChangeFeedIteratorOptions.d.ts.map +1 -1
  267. package/dist/react-native/client/ChangeFeed/ChangeFeedIteratorOptions.js.map +1 -1
  268. package/dist/react-native/client/ChangeFeed/InternalChangeFeedOptions.d.ts +1 -0
  269. package/dist/react-native/client/ChangeFeed/InternalChangeFeedOptions.d.ts.map +1 -1
  270. package/dist/react-native/client/ChangeFeed/InternalChangeFeedOptions.js.map +1 -1
  271. package/dist/react-native/client/ChangeFeed/changeFeedUtils.d.ts.map +1 -1
  272. package/dist/react-native/client/ChangeFeed/changeFeedUtils.js +1 -0
  273. package/dist/react-native/client/ChangeFeed/changeFeedUtils.js.map +1 -1
  274. package/dist/react-native/client/Item/Items.d.ts.map +1 -1
  275. package/dist/react-native/client/Item/Items.js +5 -0
  276. package/dist/react-native/client/Item/Items.js.map +1 -1
  277. package/dist/react-native/common/constants.d.ts +4 -0
  278. package/dist/react-native/common/constants.d.ts.map +1 -1
  279. package/dist/react-native/common/constants.js +5 -1
  280. package/dist/react-native/common/constants.js.map +1 -1
  281. package/dist/react-native/common/helper.d.ts +6 -0
  282. package/dist/react-native/common/helper.d.ts.map +1 -1
  283. package/dist/react-native/common/helper.js +9 -1
  284. package/dist/react-native/common/helper.js.map +1 -1
  285. package/dist/react-native/common/platform.d.ts +1 -0
  286. package/dist/react-native/common/platform.d.ts.map +1 -1
  287. package/dist/react-native/common/platform.js +1 -3
  288. package/dist/react-native/common/platform.js.map +1 -1
  289. package/dist/react-native/diagnostics/DiagnosticNodeInternal.d.ts +1 -0
  290. package/dist/react-native/diagnostics/DiagnosticNodeInternal.d.ts.map +1 -1
  291. package/dist/react-native/diagnostics/DiagnosticNodeInternal.js.map +1 -1
  292. package/dist/react-native/documents/ConnectionPolicy.d.ts +10 -4
  293. package/dist/react-native/documents/ConnectionPolicy.d.ts.map +1 -1
  294. package/dist/react-native/documents/ConnectionPolicy.js +2 -2
  295. package/dist/react-native/documents/ConnectionPolicy.js.map +1 -1
  296. package/dist/react-native/documents/DatabaseAccount.d.ts +4 -0
  297. package/dist/react-native/documents/DatabaseAccount.d.ts.map +1 -1
  298. package/dist/react-native/documents/DatabaseAccount.js +9 -0
  299. package/dist/react-native/documents/DatabaseAccount.js.map +1 -1
  300. package/dist/react-native/globalEndpointManager.d.ts +8 -0
  301. package/dist/react-native/globalEndpointManager.d.ts.map +1 -1
  302. package/dist/react-native/globalEndpointManager.js +68 -6
  303. package/dist/react-native/globalEndpointManager.js.map +1 -1
  304. package/dist/react-native/globalPartitionEndpointManager.d.ts +0 -2
  305. package/dist/react-native/globalPartitionEndpointManager.d.ts.map +1 -1
  306. package/dist/react-native/globalPartitionEndpointManager.js +13 -9
  307. package/dist/react-native/globalPartitionEndpointManager.js.map +1 -1
  308. package/dist/react-native/request/RequestHandler.js +2 -2
  309. package/dist/react-native/request/RequestHandler.js.map +1 -1
  310. package/dist/react-native/request/SharedOptions.d.ts +5 -0
  311. package/dist/react-native/request/SharedOptions.d.ts.map +1 -1
  312. package/dist/react-native/request/SharedOptions.js.map +1 -1
  313. package/dist/react-native/retry/retryUtility.d.ts.map +1 -1
  314. package/dist/react-native/retry/retryUtility.js +17 -3
  315. package/dist/react-native/retry/retryUtility.js.map +1 -1
  316. package/dist/react-native/retry/timeoutFailoverRetryPolicy.d.ts +1 -2
  317. package/dist/react-native/retry/timeoutFailoverRetryPolicy.d.ts.map +1 -1
  318. package/dist/react-native/retry/timeoutFailoverRetryPolicy.js +4 -4
  319. package/dist/react-native/retry/timeoutFailoverRetryPolicy.js.map +1 -1
  320. package/dist/react-native/utils/encode.d.ts +1 -1
  321. package/dist/react-native/utils/encode.d.ts.map +1 -1
  322. package/dist/react-native/utils/encode.js.map +1 -1
  323. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"CosmosClient.d.ts","sourceRoot":"","sources":["../../src/CosmosClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAKxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKtD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,YAAY;IACvB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC;;;;OAIG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAiB;IAO1C;;OAEG;gBACS,gBAAgB,EAAE,MAAM;IACpC;;;OAGG;gBACS,OAAO,EAAE,mBAAmB;IA0GxC,OAAO,CAAC,gCAAgC;IAmBxC;;OAEG;IACU,kBAAkB,CAC7B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAM7C;;OAEG;IACU,0BAA0B,CACrC,cAAc,EAAE,sBAAsB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAW7C;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMhD;;;;OAIG;IACU,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAM/C;;;;OAIG;IACI,iBAAiB,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAItD;;;;OAIG;IACI,gBAAgB,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAIrC;;;OAGG;IACI,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK;IAI/B;;OAEG;IACI,OAAO,IAAI,IAAI;YAWR,6BAA6B;CA8B5C"}
1
+ {"version":3,"file":"CosmosClient.d.ts","sourceRoot":"","sources":["../../src/CosmosClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAKxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAEtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,YAAY;IACvB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC;;;;OAIG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAiB;IAO1C;;OAEG;gBACS,gBAAgB,EAAE,MAAM;IACpC;;;OAGG;gBACS,OAAO,EAAE,mBAAmB;IA2GxC,OAAO,CAAC,gCAAgC;IAoBxC;;OAEG;IACU,kBAAkB,CAC7B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAM7C;;OAEG;IACU,0BAA0B,CACrC,cAAc,EAAE,sBAAsB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAW7C;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMhD;;;;OAIG;IACU,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAM/C;;;;OAIG;IACI,iBAAiB,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAItD;;;;OAIG;IACI,gBAAgB,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAIrC;;;OAGG;IACI,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK;IAI/B;;OAEG;IACI,OAAO,IAAI,IAAI;YAWR,6BAA6B;CA8B5C"}
@@ -40,6 +40,19 @@ import { GlobalPartitionEndpointManager } from "./globalPartitionEndpointManager
40
40
  * },
41
41
  * });
42
42
  * ```
43
+ * @example Instantiate a client with AAD authentication and custom scope
44
+ * ```ts snippet:CosmosClientWithAADScope
45
+ * import { DefaultAzureCredential } from "@azure/identity";
46
+ * import { CosmosClient } from "@azure/cosmos";
47
+ *
48
+ * const endpoint = "https://your-account.documents.azure.com";
49
+ * const aadCredentials = new DefaultAzureCredential();
50
+ * const client = new CosmosClient({
51
+ * endpoint,
52
+ * aadCredentials,
53
+ * aadScope: "https://cosmos.azure.com/.default", // Optional custom scope
54
+ * });
55
+ * ```
43
56
  */
44
57
  export class CosmosClient {
45
58
  /**
@@ -99,6 +112,11 @@ export class CosmosClient {
99
112
  }
100
113
  const clientConfig = this.initializeClientConfigDiagnostic(optionsOrConnectionString);
101
114
  optionsOrConnectionString.connectionPolicy = Object.assign({}, defaultConnectionPolicy, optionsOrConnectionString.connectionPolicy);
115
+ // If endpoint discovery is disabled, automatically disable partition level features
116
+ if (!optionsOrConnectionString.connectionPolicy.enableEndpointDiscovery) {
117
+ optionsOrConnectionString.connectionPolicy.enablePartitionLevelFailover = false;
118
+ optionsOrConnectionString.connectionPolicy.enablePartitionLevelCircuitBreaker = false;
119
+ }
102
120
  optionsOrConnectionString.defaultHeaders = optionsOrConnectionString.defaultHeaders || {};
103
121
  optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CacheControl] = "no-cache";
104
122
  optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.Version] =
@@ -117,9 +135,6 @@ export class CosmosClient {
117
135
  const globalEndpointManager = new GlobalEndpointManager(optionsOrConnectionString, async (diagnosticNode, opts) => this.getDatabaseAccountInternal(diagnosticNode, opts));
118
136
  if (optionsOrConnectionString.connectionPolicy.enablePartitionLevelFailover ||
119
137
  optionsOrConnectionString.connectionPolicy.enablePartitionLevelCircuitBreaker) {
120
- if (!optionsOrConnectionString.connectionPolicy.enableEndpointDiscovery) {
121
- throw new Error("enableEndpointDiscovery must be set to true to use partition level failover or circuit breaker.");
122
- }
123
138
  this.globalPartitionEndpointManager = new GlobalPartitionEndpointManager(optionsOrConnectionString, globalEndpointManager);
124
139
  }
125
140
  this.clientContext = new ClientContext(optionsOrConnectionString, globalEndpointManager, clientConfig, determineDiagnosticLevel(optionsOrConnectionString.diagnosticLevel, getDiagnosticLevelFromEnvironment()), this.globalPartitionEndpointManager);
@@ -145,6 +160,7 @@ export class CosmosClient {
145
160
  diagnosticLevel: optionsOrConnectionString.diagnosticLevel,
146
161
  pluginsConfigured: optionsOrConnectionString.plugins !== undefined,
147
162
  sDKVersion: Constants.SDKVersion,
163
+ aadScopeOverride: optionsOrConnectionString.aadScope !== undefined,
148
164
  };
149
165
  }
150
166
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CosmosClient.js","sourceRoot":"","sources":["../../src/CosmosClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Database, Databases } from \"./client/Database/index.js\";\nimport { Offer, Offers } from \"./client/Offer/index.js\";\nimport { ClientContext } from \"./ClientContext.js\";\nimport { parseConnectionString } from \"./common/index.js\";\nimport { Constants } from \"./common/constants.js\";\nimport { getUserAgent } from \"./common/platform.js\";\nimport type { CosmosClientOptions } from \"./CosmosClientOptions.js\";\nimport type { ClientConfigDiagnostic } from \"./CosmosDiagnostics.js\";\nimport {\n determineDiagnosticLevel,\n getDiagnosticLevelFromEnvironment,\n} from \"./diagnostics/index.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport { DiagnosticNodeType } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport type { DatabaseAccount } from \"./documents/index.js\";\nimport { defaultConnectionPolicy } from \"./documents/index.js\";\nimport { EncryptionManager } from \"./encryption/EncryptionManager.js\";\nimport { GlobalEndpointManager } from \"./globalEndpointManager.js\";\nimport type { RequestOptions } from \"./request/index.js\";\nimport { ResourceResponse } from \"./request/index.js\";\nimport { checkURL } from \"./utils/checkURL.js\";\nimport { getEmptyCosmosDiagnostics, withDiagnostics } from \"./utils/diagnostics.js\";\nimport { GlobalPartitionEndpointManager } from \"./globalPartitionEndpointManager.js\";\n\n/**\n * Provides a client-side logical representation of the Azure Cosmos DB database account.\n * This client is used to configure and execute requests in the Azure Cosmos DB database service.\n * @example Instantiate a client and create a new database\n * ```ts snippet:CosmosClientCreate\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * ```\n * @example Instantiate a client with custom Connection Policy\n * ```ts snippet:CosmosClientWithConnectionPolicy\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({\n * endpoint,\n * key,\n * connectionPolicy: {\n * requestTimeout: 10000,\n * },\n * });\n * ```\n */\nexport class CosmosClient {\n /**\n * Used for creating new databases, or querying/reading all databases.\n *\n * Use `.database(id)` to read, replace, or delete a specific, existing database by id.\n *\n * @example Create a new database\n * ```ts snippet:CosmosClientDatabases\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const { resource: databaseDefinition, database } = await client.databases.create({\n * id: \"<name here>\",\n * });\n * ```\n */\n public readonly databases: Databases;\n /**\n * Used for querying & reading all offers.\n *\n * Use `.offer(id)` to read, or replace existing offers.\n */\n public readonly offers: Offers;\n private clientContext: ClientContext;\n private endpointRefresher: NodeJS.Timeout;\n /**\n * @internal\n */\n private encryptionManager: EncryptionManager;\n /** @internal */\n private globalPartitionEndpointManager: GlobalPartitionEndpointManager;\n /**\n * Creates a new {@link CosmosClient} object from a connection string. Your database connection string can be found in the Azure Portal\n */\n constructor(connectionString: string);\n /**\n * Creates a new {@link CosmosClient} object. See {@link CosmosClientOptions} for more details on what options you can use.\n * @param options - bag of options; require at least endpoint and auth to be configured\n */\n constructor(options: CosmosClientOptions);\n constructor(optionsOrConnectionString: string | CosmosClientOptions) {\n if (typeof optionsOrConnectionString === \"string\") {\n optionsOrConnectionString = parseConnectionString(optionsOrConnectionString);\n } else if (optionsOrConnectionString.connectionString) {\n const { endpoint, key } = parseConnectionString(optionsOrConnectionString.connectionString);\n optionsOrConnectionString.endpoint = endpoint;\n optionsOrConnectionString.key = key;\n }\n\n const endpoint = checkURL(optionsOrConnectionString.endpoint);\n if (!endpoint) {\n throw new Error(\"Invalid endpoint specified\");\n }\n\n if (optionsOrConnectionString.clientEncryptionOptions) {\n if (!optionsOrConnectionString.clientEncryptionOptions.keyEncryptionKeyResolver) {\n throw new Error(\n \"KeyEncryptionKeyResolver needs to be provided to enable client-side encryption.\",\n );\n }\n if (\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds &&\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds < 60\n ) {\n throw new Error(\"EncryptionKeyTimeToLiveInSeconds needs to be >= 60 seconds.\");\n }\n this.encryptionManager = new EncryptionManager(\n optionsOrConnectionString.clientEncryptionOptions.keyEncryptionKeyResolver,\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds,\n );\n }\n\n const clientConfig: ClientConfigDiagnostic =\n this.initializeClientConfigDiagnostic(optionsOrConnectionString);\n\n optionsOrConnectionString.connectionPolicy = Object.assign(\n {},\n defaultConnectionPolicy,\n optionsOrConnectionString.connectionPolicy,\n );\n\n optionsOrConnectionString.defaultHeaders = optionsOrConnectionString.defaultHeaders || {};\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CacheControl] = \"no-cache\";\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.Version] =\n Constants.CurrentVersion;\n if (optionsOrConnectionString.consistencyLevel !== undefined) {\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ConsistencyLevel] =\n optionsOrConnectionString.consistencyLevel;\n }\n\n if (optionsOrConnectionString.throughputBucket !== undefined) {\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ThroughputBucket] =\n optionsOrConnectionString.throughputBucket;\n }\n\n const userAgent = getUserAgent(optionsOrConnectionString);\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.UserAgent] = userAgent;\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CustomUserAgent] = userAgent;\n\n const globalEndpointManager = new GlobalEndpointManager(\n optionsOrConnectionString,\n async (diagnosticNode: DiagnosticNodeInternal, opts: RequestOptions) =>\n this.getDatabaseAccountInternal(diagnosticNode, opts),\n );\n\n if (\n optionsOrConnectionString.connectionPolicy.enablePartitionLevelFailover ||\n optionsOrConnectionString.connectionPolicy.enablePartitionLevelCircuitBreaker\n ) {\n if (!optionsOrConnectionString.connectionPolicy.enableEndpointDiscovery) {\n throw new Error(\n \"enableEndpointDiscovery must be set to true to use partition level failover or circuit breaker.\",\n );\n }\n this.globalPartitionEndpointManager = new GlobalPartitionEndpointManager(\n optionsOrConnectionString,\n globalEndpointManager,\n );\n }\n\n this.clientContext = new ClientContext(\n optionsOrConnectionString,\n globalEndpointManager,\n clientConfig,\n determineDiagnosticLevel(\n optionsOrConnectionString.diagnosticLevel,\n getDiagnosticLevelFromEnvironment(),\n ),\n this.globalPartitionEndpointManager,\n );\n if (\n optionsOrConnectionString.connectionPolicy?.enableEndpointDiscovery &&\n optionsOrConnectionString.connectionPolicy?.enableBackgroundEndpointRefreshing\n ) {\n this.backgroundRefreshEndpointList(\n globalEndpointManager,\n optionsOrConnectionString.connectionPolicy.endpointRefreshRateInMs ||\n defaultConnectionPolicy.endpointRefreshRateInMs,\n );\n }\n\n this.databases = new Databases(this, this.clientContext, this.encryptionManager);\n this.offers = new Offers(this, this.clientContext);\n }\n\n private initializeClientConfigDiagnostic(\n optionsOrConnectionString: CosmosClientOptions,\n ): ClientConfigDiagnostic {\n return {\n endpoint: optionsOrConnectionString.endpoint,\n resourceTokensConfigured: optionsOrConnectionString.resourceTokens !== undefined,\n tokenProviderConfigured: optionsOrConnectionString.tokenProvider !== undefined,\n aadCredentialsConfigured: optionsOrConnectionString.aadCredentials !== undefined,\n connectionPolicyConfigured: optionsOrConnectionString.connectionPolicy !== undefined,\n consistencyLevel: optionsOrConnectionString.consistencyLevel,\n defaultHeaders: optionsOrConnectionString.defaultHeaders,\n agentConfigured: optionsOrConnectionString.agent !== undefined,\n userAgentSuffix: optionsOrConnectionString.userAgentSuffix,\n diagnosticLevel: optionsOrConnectionString.diagnosticLevel,\n pluginsConfigured: optionsOrConnectionString.plugins !== undefined,\n sDKVersion: Constants.SDKVersion,\n };\n }\n\n /**\n * Get information about the current {@link DatabaseAccount} (including which regions are supported, etc.)\n */\n public async getDatabaseAccount(\n options?: RequestOptions,\n ): Promise<ResourceResponse<DatabaseAccount>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.getDatabaseAccountInternal(diagnosticNode, options);\n }, this.clientContext);\n }\n\n /**\n * @hidden\n */\n public async getDatabaseAccountInternal(\n diagnosticNode: DiagnosticNodeInternal,\n options?: RequestOptions,\n ): Promise<ResourceResponse<DatabaseAccount>> {\n const response = await this.clientContext.getDatabaseAccount(diagnosticNode, options);\n return new ResourceResponse<DatabaseAccount>(\n response.result,\n response.headers,\n response.code,\n getEmptyCosmosDiagnostics(),\n response.substatus,\n );\n }\n\n /**\n * Gets the currently used write endpoint url. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public async getWriteEndpoint(): Promise<string> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.clientContext.getWriteEndpoint(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * Gets the currently used read endpoint. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public async getReadEndpoint(): Promise<string> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.clientContext.getReadEndpoint(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * Gets the known write endpoints. Useful for troubleshooting purposes.\n *\n * The urls may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public getWriteEndpoints(): Promise<readonly string[]> {\n return this.clientContext.getWriteEndpoints();\n }\n\n /**\n * Gets the currently used read endpoint. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public getReadEndpoints(): Promise<readonly string[]> {\n return this.clientContext.getReadEndpoints();\n }\n\n /**\n * Used for reading, updating, or deleting a existing database by id or accessing containers belonging to that database.\n *\n * This does not make a network call. Use `.read` to get info about the database after getting the {@link Database} object.\n *\n * @param id - The id of the database.\n * @example Create a new container off of an existing database\n * ```ts snippet:CosmosClientDatabaseCreateContainer\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const container = client.database(\"<database id>\").containers.create({\n * id: \"<name here>\",\n * });\n * ```\n *\n * @example Delete an existing database\n * ```ts snippet:CosmosClientDatabaseDelete\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * await client.database(\"<id here>\").delete();\n * ```\n */\n public database(id: string): Database {\n return new Database(this, id, this.clientContext, this.encryptionManager);\n }\n\n /**\n * Used for reading, or updating a existing offer by id.\n * @param id - The id of the offer.\n */\n public offer(id: string): Offer {\n return new Offer(this, id, this.clientContext);\n }\n\n /**\n * Clears background endpoint refresher. Use client.dispose() when destroying the CosmosClient within another process.\n */\n public dispose(): void {\n clearTimeout(this.endpointRefresher);\n if (this.clientContext.enableEncryption) {\n clearTimeout(this.encryptionManager.encryptionKeyStoreProvider.cacheRefresher);\n clearTimeout(this.encryptionManager.protectedDataEncryptionKeyCache.cacheRefresher);\n }\n if (this.globalPartitionEndpointManager) {\n this.globalPartitionEndpointManager.dispose();\n }\n }\n\n private async backgroundRefreshEndpointList(\n globalEndpointManager: GlobalEndpointManager,\n refreshRate: number,\n ) {\n this.endpointRefresher = setInterval(() => {\n try {\n return withDiagnostics(\n async (diagnosticNode: DiagnosticNodeInternal) => {\n return globalEndpointManager.refreshEndpointList(diagnosticNode);\n },\n this.clientContext,\n DiagnosticNodeType.BACKGROUND_REFRESH_THREAD,\n );\n } catch (e: any) {\n console.warn(\"Failed to refresh endpoints\", e);\n }\n }, refreshRate);\n if (this.endpointRefresher.unref && typeof this.endpointRefresher.unref === \"function\") {\n this.endpointRefresher.unref();\n }\n }\n\n /**\n * Update the host framework. If provided host framework will be used to generate the defualt SDK user agent.\n * @param hostFramework - A custom string.\n * @internal\n */\n public async updateHostFramework(hostFramework: string): Promise<void> {\n this.clientContext.refreshUserAgent(hostFramework);\n }\n}\n"]}
1
+ {"version":3,"file":"CosmosClient.js","sourceRoot":"","sources":["../../src/CosmosClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Database, Databases } from \"./client/Database/index.js\";\nimport { Offer, Offers } from \"./client/Offer/index.js\";\nimport { ClientContext } from \"./ClientContext.js\";\nimport { parseConnectionString } from \"./common/index.js\";\nimport { Constants } from \"./common/constants.js\";\nimport { getUserAgent } from \"./common/platform.js\";\nimport type { CosmosClientOptions } from \"./CosmosClientOptions.js\";\nimport type { ClientConfigDiagnostic } from \"./CosmosDiagnostics.js\";\nimport {\n determineDiagnosticLevel,\n getDiagnosticLevelFromEnvironment,\n} from \"./diagnostics/index.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport { DiagnosticNodeType } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport type { DatabaseAccount } from \"./documents/index.js\";\nimport { defaultConnectionPolicy } from \"./documents/index.js\";\nimport { EncryptionManager } from \"./encryption/EncryptionManager.js\";\nimport { GlobalEndpointManager } from \"./globalEndpointManager.js\";\nimport type { RequestOptions } from \"./request/index.js\";\nimport { ResourceResponse } from \"./request/index.js\";\nimport { checkURL } from \"./utils/checkURL.js\";\nimport { getEmptyCosmosDiagnostics, withDiagnostics } from \"./utils/diagnostics.js\";\nimport { GlobalPartitionEndpointManager } from \"./globalPartitionEndpointManager.js\";\n\n/**\n * Provides a client-side logical representation of the Azure Cosmos DB database account.\n * This client is used to configure and execute requests in the Azure Cosmos DB database service.\n * @example Instantiate a client and create a new database\n * ```ts snippet:CosmosClientCreate\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * ```\n * @example Instantiate a client with custom Connection Policy\n * ```ts snippet:CosmosClientWithConnectionPolicy\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({\n * endpoint,\n * key,\n * connectionPolicy: {\n * requestTimeout: 10000,\n * },\n * });\n * ```\n * @example Instantiate a client with AAD authentication and custom scope\n * ```ts snippet:CosmosClientWithAADScope\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const aadCredentials = new DefaultAzureCredential();\n * const client = new CosmosClient({\n * endpoint,\n * aadCredentials,\n * aadScope: \"https://cosmos.azure.com/.default\", // Optional custom scope\n * });\n * ```\n */\nexport class CosmosClient {\n /**\n * Used for creating new databases, or querying/reading all databases.\n *\n * Use `.database(id)` to read, replace, or delete a specific, existing database by id.\n *\n * @example Create a new database\n * ```ts snippet:CosmosClientDatabases\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const { resource: databaseDefinition, database } = await client.databases.create({\n * id: \"<name here>\",\n * });\n * ```\n */\n public readonly databases: Databases;\n /**\n * Used for querying & reading all offers.\n *\n * Use `.offer(id)` to read, or replace existing offers.\n */\n public readonly offers: Offers;\n private clientContext: ClientContext;\n private endpointRefresher: NodeJS.Timeout;\n /**\n * @internal\n */\n private encryptionManager: EncryptionManager;\n /** @internal */\n private globalPartitionEndpointManager: GlobalPartitionEndpointManager;\n /**\n * Creates a new {@link CosmosClient} object from a connection string. Your database connection string can be found in the Azure Portal\n */\n constructor(connectionString: string);\n /**\n * Creates a new {@link CosmosClient} object. See {@link CosmosClientOptions} for more details on what options you can use.\n * @param options - bag of options; require at least endpoint and auth to be configured\n */\n constructor(options: CosmosClientOptions);\n constructor(optionsOrConnectionString: string | CosmosClientOptions) {\n if (typeof optionsOrConnectionString === \"string\") {\n optionsOrConnectionString = parseConnectionString(optionsOrConnectionString);\n } else if (optionsOrConnectionString.connectionString) {\n const { endpoint, key } = parseConnectionString(optionsOrConnectionString.connectionString);\n optionsOrConnectionString.endpoint = endpoint;\n optionsOrConnectionString.key = key;\n }\n\n const endpoint = checkURL(optionsOrConnectionString.endpoint);\n if (!endpoint) {\n throw new Error(\"Invalid endpoint specified\");\n }\n\n if (optionsOrConnectionString.clientEncryptionOptions) {\n if (!optionsOrConnectionString.clientEncryptionOptions.keyEncryptionKeyResolver) {\n throw new Error(\n \"KeyEncryptionKeyResolver needs to be provided to enable client-side encryption.\",\n );\n }\n if (\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds &&\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds < 60\n ) {\n throw new Error(\"EncryptionKeyTimeToLiveInSeconds needs to be >= 60 seconds.\");\n }\n this.encryptionManager = new EncryptionManager(\n optionsOrConnectionString.clientEncryptionOptions.keyEncryptionKeyResolver,\n optionsOrConnectionString.clientEncryptionOptions.encryptionKeyTimeToLiveInSeconds,\n );\n }\n\n const clientConfig: ClientConfigDiagnostic =\n this.initializeClientConfigDiagnostic(optionsOrConnectionString);\n\n optionsOrConnectionString.connectionPolicy = Object.assign(\n {},\n defaultConnectionPolicy,\n optionsOrConnectionString.connectionPolicy,\n );\n\n // If endpoint discovery is disabled, automatically disable partition level features\n if (!optionsOrConnectionString.connectionPolicy.enableEndpointDiscovery) {\n optionsOrConnectionString.connectionPolicy.enablePartitionLevelFailover = false;\n optionsOrConnectionString.connectionPolicy.enablePartitionLevelCircuitBreaker = false;\n }\n\n optionsOrConnectionString.defaultHeaders = optionsOrConnectionString.defaultHeaders || {};\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CacheControl] = \"no-cache\";\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.Version] =\n Constants.CurrentVersion;\n if (optionsOrConnectionString.consistencyLevel !== undefined) {\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ConsistencyLevel] =\n optionsOrConnectionString.consistencyLevel;\n }\n\n if (optionsOrConnectionString.throughputBucket !== undefined) {\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.ThroughputBucket] =\n optionsOrConnectionString.throughputBucket;\n }\n\n const userAgent = getUserAgent(optionsOrConnectionString);\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.UserAgent] = userAgent;\n optionsOrConnectionString.defaultHeaders[Constants.HttpHeaders.CustomUserAgent] = userAgent;\n\n const globalEndpointManager = new GlobalEndpointManager(\n optionsOrConnectionString,\n async (diagnosticNode: DiagnosticNodeInternal, opts: RequestOptions) =>\n this.getDatabaseAccountInternal(diagnosticNode, opts),\n );\n\n if (\n optionsOrConnectionString.connectionPolicy.enablePartitionLevelFailover ||\n optionsOrConnectionString.connectionPolicy.enablePartitionLevelCircuitBreaker\n ) {\n this.globalPartitionEndpointManager = new GlobalPartitionEndpointManager(\n optionsOrConnectionString,\n globalEndpointManager,\n );\n }\n\n this.clientContext = new ClientContext(\n optionsOrConnectionString,\n globalEndpointManager,\n clientConfig,\n determineDiagnosticLevel(\n optionsOrConnectionString.diagnosticLevel,\n getDiagnosticLevelFromEnvironment(),\n ),\n this.globalPartitionEndpointManager,\n );\n if (\n optionsOrConnectionString.connectionPolicy?.enableEndpointDiscovery &&\n optionsOrConnectionString.connectionPolicy?.enableBackgroundEndpointRefreshing\n ) {\n this.backgroundRefreshEndpointList(\n globalEndpointManager,\n optionsOrConnectionString.connectionPolicy.endpointRefreshRateInMs ||\n defaultConnectionPolicy.endpointRefreshRateInMs,\n );\n }\n\n this.databases = new Databases(this, this.clientContext, this.encryptionManager);\n this.offers = new Offers(this, this.clientContext);\n }\n\n private initializeClientConfigDiagnostic(\n optionsOrConnectionString: CosmosClientOptions,\n ): ClientConfigDiagnostic {\n return {\n endpoint: optionsOrConnectionString.endpoint,\n resourceTokensConfigured: optionsOrConnectionString.resourceTokens !== undefined,\n tokenProviderConfigured: optionsOrConnectionString.tokenProvider !== undefined,\n aadCredentialsConfigured: optionsOrConnectionString.aadCredentials !== undefined,\n connectionPolicyConfigured: optionsOrConnectionString.connectionPolicy !== undefined,\n consistencyLevel: optionsOrConnectionString.consistencyLevel,\n defaultHeaders: optionsOrConnectionString.defaultHeaders,\n agentConfigured: optionsOrConnectionString.agent !== undefined,\n userAgentSuffix: optionsOrConnectionString.userAgentSuffix,\n diagnosticLevel: optionsOrConnectionString.diagnosticLevel,\n pluginsConfigured: optionsOrConnectionString.plugins !== undefined,\n sDKVersion: Constants.SDKVersion,\n aadScopeOverride: optionsOrConnectionString.aadScope !== undefined,\n };\n }\n\n /**\n * Get information about the current {@link DatabaseAccount} (including which regions are supported, etc.)\n */\n public async getDatabaseAccount(\n options?: RequestOptions,\n ): Promise<ResourceResponse<DatabaseAccount>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.getDatabaseAccountInternal(diagnosticNode, options);\n }, this.clientContext);\n }\n\n /**\n * @hidden\n */\n public async getDatabaseAccountInternal(\n diagnosticNode: DiagnosticNodeInternal,\n options?: RequestOptions,\n ): Promise<ResourceResponse<DatabaseAccount>> {\n const response = await this.clientContext.getDatabaseAccount(diagnosticNode, options);\n return new ResourceResponse<DatabaseAccount>(\n response.result,\n response.headers,\n response.code,\n getEmptyCosmosDiagnostics(),\n response.substatus,\n );\n }\n\n /**\n * Gets the currently used write endpoint url. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public async getWriteEndpoint(): Promise<string> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.clientContext.getWriteEndpoint(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * Gets the currently used read endpoint. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public async getReadEndpoint(): Promise<string> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n return this.clientContext.getReadEndpoint(diagnosticNode);\n }, this.clientContext);\n }\n\n /**\n * Gets the known write endpoints. Useful for troubleshooting purposes.\n *\n * The urls may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public getWriteEndpoints(): Promise<readonly string[]> {\n return this.clientContext.getWriteEndpoints();\n }\n\n /**\n * Gets the currently used read endpoint. Useful for troubleshooting purposes.\n *\n * The url may contain a region suffix (e.g. \"-eastus\") if we're using location specific endpoints.\n */\n public getReadEndpoints(): Promise<readonly string[]> {\n return this.clientContext.getReadEndpoints();\n }\n\n /**\n * Used for reading, updating, or deleting a existing database by id or accessing containers belonging to that database.\n *\n * This does not make a network call. Use `.read` to get info about the database after getting the {@link Database} object.\n *\n * @param id - The id of the database.\n * @example Create a new container off of an existing database\n * ```ts snippet:CosmosClientDatabaseCreateContainer\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * const container = client.database(\"<database id>\").containers.create({\n * id: \"<name here>\",\n * });\n * ```\n *\n * @example Delete an existing database\n * ```ts snippet:CosmosClientDatabaseDelete\n * import { CosmosClient } from \"@azure/cosmos\";\n *\n * const endpoint = \"https://your-account.documents.azure.com\";\n * const key = \"<database account masterkey>\";\n * const client = new CosmosClient({ endpoint, key });\n * await client.database(\"<id here>\").delete();\n * ```\n */\n public database(id: string): Database {\n return new Database(this, id, this.clientContext, this.encryptionManager);\n }\n\n /**\n * Used for reading, or updating a existing offer by id.\n * @param id - The id of the offer.\n */\n public offer(id: string): Offer {\n return new Offer(this, id, this.clientContext);\n }\n\n /**\n * Clears background endpoint refresher. Use client.dispose() when destroying the CosmosClient within another process.\n */\n public dispose(): void {\n clearTimeout(this.endpointRefresher);\n if (this.clientContext.enableEncryption) {\n clearTimeout(this.encryptionManager.encryptionKeyStoreProvider.cacheRefresher);\n clearTimeout(this.encryptionManager.protectedDataEncryptionKeyCache.cacheRefresher);\n }\n if (this.globalPartitionEndpointManager) {\n this.globalPartitionEndpointManager.dispose();\n }\n }\n\n private async backgroundRefreshEndpointList(\n globalEndpointManager: GlobalEndpointManager,\n refreshRate: number,\n ) {\n this.endpointRefresher = setInterval(() => {\n try {\n return withDiagnostics(\n async (diagnosticNode: DiagnosticNodeInternal) => {\n return globalEndpointManager.refreshEndpointList(diagnosticNode);\n },\n this.clientContext,\n DiagnosticNodeType.BACKGROUND_REFRESH_THREAD,\n );\n } catch (e: any) {\n console.warn(\"Failed to refresh endpoints\", e);\n }\n }, refreshRate);\n if (this.endpointRefresher.unref && typeof this.endpointRefresher.unref === \"function\") {\n this.endpointRefresher.unref();\n }\n }\n\n /**\n * Update the host framework. If provided host framework will be used to generate the defualt SDK user agent.\n * @param hostFramework - A custom string.\n * @internal\n */\n public async updateHostFramework(hostFramework: string): Promise<void> {\n this.clientContext.refreshUserAgent(hostFramework);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CosmosClientOptions.d.ts","sourceRoot":"","sources":["../../src/CosmosClientOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGvF,MAAM,WAAW,KAAK;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,cAAc,CAAC,EAAE;QAAE,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACpD;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,gBAAgB,CAAC;IACjD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;yFACqF;IACrF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAIlD;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,qIAAqI;IACrI,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
1
+ {"version":3,"file":"CosmosClientOptions.d.ts","sourceRoot":"","sources":["../../src/CosmosClientOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGvF,MAAM,WAAW,KAAK;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,cAAc,CAAC,EAAE;QAAE,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACpD;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,eAAe,CAAC;IAQjC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,gBAAgB,CAAC;IACjD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;yFACqF;IACrF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAC1C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAIlD;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,qIAAqI;IACrI,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"CosmosClientOptions.js","sourceRoot":"","sources":["../../src/CosmosClientOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport type { TokenProvider } from \"./auth.js\";\nimport type { PermissionDefinition } from \"./client/index.js\";\nimport type { ConnectionPolicy, ConsistencyLevel } from \"./documents/index.js\";\nimport type { PluginConfig } from \"./plugins/Plugin.js\";\nimport type { CosmosHeaders } from \"./queryExecutionContext/CosmosHeaders.js\";\nimport type { CosmosDbDiagnosticLevel } from \"./diagnostics/CosmosDbDiagnosticLevel.js\";\nimport type { HttpClient } from \"@azure/core-rest-pipeline\";\nimport type { ClientEncryptionOptions } from \"./encryption/ClientEncryptionOptions.js\";\n\n// We expose our own Agent interface to avoid taking a dependency on and leaking node types. This interface should mirror the node Agent interface\nexport interface Agent {\n maxFreeSockets: number;\n maxSockets: number;\n sockets: any;\n requests: any;\n destroy(): void;\n}\n\nexport interface CosmosClientOptions {\n /** The service endpoint to use to create the client. */\n endpoint?: string;\n /** The account master or readonly key */\n key?: string;\n /** An object that contains resources tokens.\n * Keys for the object are resource Ids and values are the resource tokens.\n */\n resourceTokens?: { [resourcePath: string]: string };\n /** A user supplied function for resolving header authorization tokens.\n * Allows users to generating their own auth tokens, potentially using a separate service\n */\n tokenProvider?: TokenProvider;\n /** AAD token from `@azure/identity`\n * Obtain a credential object by creating an `@azure/identity` credential object\n * We will then use your credential object and a scope URL (your cosmos db endpoint)\n * to authenticate requests to Cosmos\n */\n aadCredentials?: TokenCredential;\n /** An array of {@link Permission} objects. */\n permissionFeed?: PermissionDefinition[];\n /** An instance of {@link ConnectionPolicy} class.\n * This parameter is optional and the default connectionPolicy will be used if omitted.\n */\n connectionPolicy?: ConnectionPolicy;\n /** An optional parameter that represents the consistency level.\n * It can take any value from {@link ConsistencyLevel}.\n */\n consistencyLevel?: keyof typeof ConsistencyLevel;\n defaultHeaders?: CosmosHeaders;\n /** An optional custom http(s) Agent to be used in NodeJS environments\n * Use an agent such as https://github.com/TooTallNate/node-proxy-agent if you need to connect to Cosmos via a proxy\n */\n agent?: Agent;\n /** An optional custom `HttpClient` shape to customize how requests are made by the HTTP pipeline.\n * See `@azure/core-rest-pipeline` for details on how to implement this interface. */\n httpClient?: HttpClient;\n /** A custom string to append to the default SDK user agent. */\n userAgentSuffix?: string;\n diagnosticLevel?: CosmosDbDiagnosticLevel;\n /** encryption policy for operations involving encryption\n * must be set on the client if using client-side encryption\n * @see {@link ClientEncryptionOptions}\n */\n clientEncryptionOptions?: ClientEncryptionOptions;\n /** @internal */\n plugins?: PluginConfig[];\n\n /** An optional parameter to set throughput bucket number. This value can be overridden at request level\n * For more information, visit [Cosmos DB throughput Bucketing](https://aka.ms/cosmsodb-bucketing).\n */\n throughputBucket?: number;\n\n /** An optional parameter that represents the connection string. Your database connection string can be found in the Azure Portal. */\n connectionString?: string;\n}\n"]}
1
+ {"version":3,"file":"CosmosClientOptions.js","sourceRoot":"","sources":["../../src/CosmosClientOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport type { TokenProvider } from \"./auth.js\";\nimport type { PermissionDefinition } from \"./client/index.js\";\nimport type { ConnectionPolicy, ConsistencyLevel } from \"./documents/index.js\";\nimport type { PluginConfig } from \"./plugins/Plugin.js\";\nimport type { CosmosHeaders } from \"./queryExecutionContext/CosmosHeaders.js\";\nimport type { CosmosDbDiagnosticLevel } from \"./diagnostics/CosmosDbDiagnosticLevel.js\";\nimport type { HttpClient } from \"@azure/core-rest-pipeline\";\nimport type { ClientEncryptionOptions } from \"./encryption/ClientEncryptionOptions.js\";\n\n// We expose our own Agent interface to avoid taking a dependency on and leaking node types. This interface should mirror the node Agent interface\nexport interface Agent {\n maxFreeSockets: number;\n maxSockets: number;\n sockets: any;\n requests: any;\n destroy(): void;\n}\n\nexport interface CosmosClientOptions {\n /** The service endpoint to use to create the client. */\n endpoint?: string;\n /** The account master or readonly key */\n key?: string;\n /** An object that contains resources tokens.\n * Keys for the object are resource Ids and values are the resource tokens.\n */\n resourceTokens?: { [resourcePath: string]: string };\n /** A user supplied function for resolving header authorization tokens.\n * Allows users to generating their own auth tokens, potentially using a separate service\n */\n tokenProvider?: TokenProvider;\n /** AAD token from `@azure/identity`\n * Obtain a credential object by creating an `@azure/identity` credential object\n * We will then use your credential object and a scope URL (your cosmos db endpoint)\n * to authenticate requests to Cosmos\n */\n aadCredentials?: TokenCredential;\n /**\n * @internal\n * Optional custom AAD scope to override the default account-based scope for authentication.\n * If not provided, the default scope will be constructed from the endpoint URL.\n * When provided, no fallback mechanism will be applied if authentication fails.\n */\n aadScope?: string;\n /** An array of {@link Permission} objects. */\n permissionFeed?: PermissionDefinition[];\n /** An instance of {@link ConnectionPolicy} class.\n * This parameter is optional and the default connectionPolicy will be used if omitted.\n */\n connectionPolicy?: ConnectionPolicy;\n /** An optional parameter that represents the consistency level.\n * It can take any value from {@link ConsistencyLevel}.\n */\n consistencyLevel?: keyof typeof ConsistencyLevel;\n defaultHeaders?: CosmosHeaders;\n /** An optional custom http(s) Agent to be used in NodeJS environments\n * Use an agent such as https://github.com/TooTallNate/node-proxy-agent if you need to connect to Cosmos via a proxy\n */\n agent?: Agent;\n /** An optional custom `HttpClient` shape to customize how requests are made by the HTTP pipeline.\n * See `@azure/core-rest-pipeline` for details on how to implement this interface. */\n httpClient?: HttpClient;\n /** A custom string to append to the default SDK user agent. */\n userAgentSuffix?: string;\n diagnosticLevel?: CosmosDbDiagnosticLevel;\n /** encryption policy for operations involving encryption\n * must be set on the client if using client-side encryption\n * @see {@link ClientEncryptionOptions}\n */\n clientEncryptionOptions?: ClientEncryptionOptions;\n /** @internal */\n plugins?: PluginConfig[];\n\n /** An optional parameter to set throughput bucket number. This value can be overridden at request level\n * For more information, visit [Cosmos DB throughput Bucketing](https://aka.ms/cosmsodb-bucketing).\n */\n throughputBucket?: number;\n\n /** An optional parameter that represents the connection string. Your database connection string can be found in the Azure Portal. */\n connectionString?: string;\n}\n"]}
@@ -82,6 +82,10 @@ export type ClientConfigDiagnostic = {
82
82
  * SDK version
83
83
  */
84
84
  sDKVersion: string;
85
+ /**
86
+ * True if `aadScope` were supplied during client initialization.
87
+ */
88
+ aadScopeOverride?: boolean;
85
89
  };
86
90
  /**
87
91
  * This type contains diagnostic information regarding all metadata request to server during an CosmosDB client operation.
@@ -1 +1 @@
1
- {"version":3,"file":"CosmosDiagnostics.d.ts","sourceRoot":"","sources":["../../src/CosmosDiagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CosmosDiagnostics.d.ts","sourceRoot":"","sources":["../../src/CosmosDiagnostics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CosmosDiagnostics.js","sourceRoot":"","sources":["../../src/CosmosDiagnostics.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAOlC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,iBAAiB;IACZ,2BAA2B,CAA8B;IACzD,cAAc,CAAiB;IAC/B,YAAY,CAA0B;IACtD;;OAEG;IACH,YACE,2BAAwD,EACxD,cAA+B,EAC/B,YAAqC;QAErC,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAsID;;GAEG;AACH,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,6EAAuD,CAAA;IACvD,wEAAkD,CAAA;IAClD,4DAAsC,CAAA;IACtC,yDAAmC,CAAA;IACnC,2DAAqC,CAAA;AACvC,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B;AA4CD,MAAM,UAAU,WAAW,CAAC,IAA4B;IACtD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;QAC5C,OAAO,IAAI,CAAC;AACnB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { OperationType, ResourceType } from \"./common/index.js\";\nimport type { CosmosDbDiagnosticLevel } from \"./diagnostics/CosmosDbDiagnosticLevel.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport type { ConsistencyLevel } from \"./documents/index.js\";\n\n/**\n * * This is a Cosmos Diagnostic type that holds collected diagnostic information during a client operations. ie. Item.read(), Container.create().\n * It has three members -\n * 1. `clientSideRequestStatistics` member contains aggregate diagnostic information, including -\n * - metadata lookups. Here all the server requests, apart from the final intended resource are considered as metadata calls.\n * i.e. for item.read(id), if the client makes server call to discover endpoints it would be considered as metadata call.\n * - retries\n * - endpoints contacted.\n * - request, response payload stats.\n * - gatewayStatistics - Information corresponding to main operation. For example during Item.read(), the client might perform many operations\n * i.e. metadata lookup etc, but gatewayStatistics represents the diagnostics information for actual read operation.\n *\n * 2. diagnosticNode - Is a tree like structure which captures detailed diagnostic information. By default it is disabled, and is intended to be\n * used only for debugging on non production environments. The kind of details captured in diagnosticNode is controlled by `CosmosDbDiagnosticLevel`.\n * - CosmosDbDiagnosticLevel.info - Is default value. In this level only clientSideRequestStatistics are captured. Is is meant for production environments.\n * - CosmosDbDiagnosticLevel.debug - Captures diagnosticNode and clientConfig. No request and response payloads are captured. Is not meant to be used\n * in production environment.\n * - CosmosDbDiagnosticLevel.debug-unsafe - In addition to data captured in CosmosDbDiagnosticLevel.debug, also captures request and response payloads.\n * Is not meant to be used in production environment.\n * 3. clientConfig - Captures information related to how client was configured during initialization.\n */\nexport class CosmosDiagnostics {\n public readonly clientSideRequestStatistics: ClientSideRequestStatistics;\n public readonly diagnosticNode: DiagnosticNode;\n public readonly clientConfig?: ClientConfigDiagnostic;\n /**\n * @internal\n */\n constructor(\n clientSideRequestStatistics: ClientSideRequestStatistics,\n diagnosticNode?: DiagnosticNode,\n clientConfig?: ClientConfigDiagnostic,\n ) {\n this.clientSideRequestStatistics = clientSideRequestStatistics;\n this.diagnosticNode = diagnosticNode;\n this.clientConfig = clientConfig;\n }\n}\n\n/**\n * This type holds information related to initialization of `CosmosClient`\n */\nexport type ClientConfigDiagnostic = {\n /**\n * End point configured during client initialization.\n */\n endpoint: string;\n /**\n * True if `resourceTokens` was supplied during client initialization.\n */\n resourceTokensConfigured: boolean;\n /**\n * True if `tokenProvider` was supplied during client initialization.\n */\n tokenProviderConfigured: boolean;\n /**\n * True if `aadCredentials` was supplied during client initialization.\n */\n aadCredentialsConfigured: boolean;\n /**\n * True if `connectionPolicy` was supplied during client initialization.\n */\n connectionPolicyConfigured: boolean;\n /**\n * `consistencyLevel` supplied during client initialization.\n */\n consistencyLevel?: keyof typeof ConsistencyLevel;\n /**\n * `defaultHeaders` supplied during client initialization.\n */\n defaultHeaders?: { [key: string]: any };\n /**\n * True if `connectionPolicy` were supplied during client initialization.\n */\n agentConfigured: boolean;\n /**\n * `userAgentSuffix` supplied during client initialization.\n */\n userAgentSuffix: string;\n /**\n * `diagnosticLevel` supplied during client initialization.\n */\n diagnosticLevel?: CosmosDbDiagnosticLevel;\n /**\n * True if `plugins` were supplied during client initialization.\n */\n pluginsConfigured: boolean;\n /**\n * SDK version\n */\n sDKVersion: string;\n};\n\n/**\n * This type contains diagnostic information regarding all metadata request to server during an CosmosDB client operation.\n */\nexport type MetadataLookUpDiagnostics = {\n metadataLookups: MetadataLookUpDiagnostic[];\n};\n\n/**\n * This type captures diagnostic information regarding retries attempt during an CosmosDB client operation.\n */\nexport type RetryDiagnostics = {\n failedAttempts: FailedRequestAttemptDiagnostic[];\n};\n\nexport type GatewayStatistics = {\n /**\n * This is the activityId for request, made to server for fetching the requested resource. (As opposed to other potential meta data requests)\n */\n activityId?: string;\n /*\n * The correlated activity ID is added in the header of every request made to the backend for a query. This aids in troubleshooting by linking all\n * requests associated with a particular query.\n */\n correlatedActivityId?: string;\n startTimeUTCInMs: number;\n durationInMs: number;\n operationType?: OperationType;\n resourceType?: ResourceType;\n statusCode?: number;\n subStatusCode?: number;\n requestCharge?: number;\n requestPayloadLengthInBytes: number;\n responsePayloadLengthInBytes: number;\n};\n\n/**\n * This type contains diagnostic information regarding a single metadata request to server.\n */\nexport interface MetadataLookUpDiagnostic {\n activityId: string;\n startTimeUTCInMs: number;\n durationInMs: number;\n operationType?: OperationType;\n resourceType?: ResourceType;\n metaDataType: MetadataLookUpType;\n requestPayloadLengthInBytes: number;\n responsePayloadLengthInBytes: number;\n}\n\n/**\n * This type captures diagnostic information regarding a failed request to server api.\n */\nexport interface FailedRequestAttemptDiagnostic {\n attemptNumber: number;\n activityId: string;\n startTimeUTCInMs: number;\n durationInMs: number;\n operationType?: OperationType;\n resourceType?: ResourceType;\n statusCode: number;\n substatusCode?: number;\n requestPayloadLengthInBytes: number;\n responsePayloadLengthInBytes: number;\n}\n\n/**\n * @hidden\n * Represents the diagnostics information for encryption operations.\n */\nexport interface EncryptionDiagnostics {\n /** shows start time, duration and properties count for encryption*/\n encryptContent: Record<string, any>;\n /** shows start time, duration and properties count for decryption*/\n decryptContent: Record<string, any>;\n /** represents total processing duration for encryption/decryption*/\n processingDurationInMs: number;\n}\n\n/**\n * This is enum for Type of Metadata lookups possible.\n */\nexport enum MetadataLookUpType {\n PartitionKeyRangeLookUp = \"PARTITION_KEY_RANGE_LOOK_UP\",\n DatabaseAccountLookUp = \"DATABASE_ACCOUNT_LOOK_UP\",\n QueryPlanLookUp = \"QUERY_PLAN_LOOK_UP\",\n DatabaseLookUp = \"DATABASE_LOOK_UP\",\n ContainerLookUp = \"CONTAINER_LOOK_UP\",\n}\n\n/**\n * This is a collection type for all client side diagnostic information.\n */\nexport type ClientSideRequestStatistics = {\n /**\n * This is the UTC timestamp for start of client operation.\n */\n requestStartTimeUTCInMs: number;\n /**\n * This is the duration in milli seconds taken by client operation.\n */\n requestDurationInMs: number;\n /**\n * This is the list of Location Endpoints contacted during the client operation.\n */\n locationEndpointsContacted: string[];\n /**\n * This field captures diagnostic information for retries happened during client operation.\n */\n retryDiagnostics: RetryDiagnostics;\n /**\n * This field captures diagnostic information for meta data lookups happened during client operation.\n */\n metadataDiagnostics: MetadataLookUpDiagnostics;\n /**\n * These are the statistics for main point look operation.\n */\n gatewayStatistics: GatewayStatistics[];\n /**\n * This is the cumulated Request Payload Length n bytes, this includes metadata calls along with the main operation.\n */\n totalRequestPayloadLengthInBytes: number;\n /**\n * This is the cumulated Response Payload Length n bytes, this includes metadata calls along with the main operation.\n */\n totalResponsePayloadLengthInBytes: number;\n /**\n * This field captures diagnostic information for encryption/decryption happened during CRUD operation if encryption is enabled.\n */\n encryptionDiagnostics?: EncryptionDiagnostics;\n};\n\nexport function getRootNode(node: DiagnosticNodeInternal): DiagnosticNodeInternal {\n if (node.parent) return getRootNode(node.parent);\n else return node;\n}\n\n/**\n * Represents a tree like structure, for capturing diagnostic information.\n */\nexport interface DiagnosticNode {\n id: string;\n nodeType: string;\n children: DiagnosticNode[];\n data: { [key: string]: any };\n startTimeUTCInMs: number;\n durationInMs: number;\n}\n"]}
1
+ {"version":3,"file":"CosmosDiagnostics.js","sourceRoot":"","sources":["../../src/CosmosDiagnostics.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAOlC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,iBAAiB;IACZ,2BAA2B,CAA8B;IACzD,cAAc,CAAiB;IAC/B,YAAY,CAA0B;IACtD;;OAEG;IACH,YACE,2BAAwD,EACxD,cAA+B,EAC/B,YAAqC;QAErC,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AA0ID;;GAEG;AACH,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,6EAAuD,CAAA;IACvD,wEAAkD,CAAA;IAClD,4DAAsC,CAAA;IACtC,yDAAmC,CAAA;IACnC,2DAAqC,CAAA;AACvC,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B;AA4CD,MAAM,UAAU,WAAW,CAAC,IAA4B;IACtD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;QAC5C,OAAO,IAAI,CAAC;AACnB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { OperationType, ResourceType } from \"./common/index.js\";\nimport type { CosmosDbDiagnosticLevel } from \"./diagnostics/CosmosDbDiagnosticLevel.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\nimport type { ConsistencyLevel } from \"./documents/index.js\";\n\n/**\n * * This is a Cosmos Diagnostic type that holds collected diagnostic information during a client operations. ie. Item.read(), Container.create().\n * It has three members -\n * 1. `clientSideRequestStatistics` member contains aggregate diagnostic information, including -\n * - metadata lookups. Here all the server requests, apart from the final intended resource are considered as metadata calls.\n * i.e. for item.read(id), if the client makes server call to discover endpoints it would be considered as metadata call.\n * - retries\n * - endpoints contacted.\n * - request, response payload stats.\n * - gatewayStatistics - Information corresponding to main operation. For example during Item.read(), the client might perform many operations\n * i.e. metadata lookup etc, but gatewayStatistics represents the diagnostics information for actual read operation.\n *\n * 2. diagnosticNode - Is a tree like structure which captures detailed diagnostic information. By default it is disabled, and is intended to be\n * used only for debugging on non production environments. The kind of details captured in diagnosticNode is controlled by `CosmosDbDiagnosticLevel`.\n * - CosmosDbDiagnosticLevel.info - Is default value. In this level only clientSideRequestStatistics are captured. Is is meant for production environments.\n * - CosmosDbDiagnosticLevel.debug - Captures diagnosticNode and clientConfig. No request and response payloads are captured. Is not meant to be used\n * in production environment.\n * - CosmosDbDiagnosticLevel.debug-unsafe - In addition to data captured in CosmosDbDiagnosticLevel.debug, also captures request and response payloads.\n * Is not meant to be used in production environment.\n * 3. clientConfig - Captures information related to how client was configured during initialization.\n */\nexport class CosmosDiagnostics {\n public readonly clientSideRequestStatistics: ClientSideRequestStatistics;\n public readonly diagnosticNode: DiagnosticNode;\n public readonly clientConfig?: ClientConfigDiagnostic;\n /**\n * @internal\n */\n constructor(\n clientSideRequestStatistics: ClientSideRequestStatistics,\n diagnosticNode?: DiagnosticNode,\n clientConfig?: ClientConfigDiagnostic,\n ) {\n this.clientSideRequestStatistics = clientSideRequestStatistics;\n this.diagnosticNode = diagnosticNode;\n this.clientConfig = clientConfig;\n }\n}\n\n/**\n * This type holds information related to initialization of `CosmosClient`\n */\nexport type ClientConfigDiagnostic = {\n /**\n * End point configured during client initialization.\n */\n endpoint: string;\n /**\n * True if `resourceTokens` was supplied during client initialization.\n */\n resourceTokensConfigured: boolean;\n /**\n * True if `tokenProvider` was supplied during client initialization.\n */\n tokenProviderConfigured: boolean;\n /**\n * True if `aadCredentials` was supplied during client initialization.\n */\n aadCredentialsConfigured: boolean;\n /**\n * True if `connectionPolicy` was supplied during client initialization.\n */\n connectionPolicyConfigured: boolean;\n /**\n * `consistencyLevel` supplied during client initialization.\n */\n consistencyLevel?: keyof typeof ConsistencyLevel;\n /**\n * `defaultHeaders` supplied during client initialization.\n */\n defaultHeaders?: { [key: string]: any };\n /**\n * True if `connectionPolicy` were supplied during client initialization.\n */\n agentConfigured: boolean;\n /**\n * `userAgentSuffix` supplied during client initialization.\n */\n userAgentSuffix: string;\n /**\n * `diagnosticLevel` supplied during client initialization.\n */\n diagnosticLevel?: CosmosDbDiagnosticLevel;\n /**\n * True if `plugins` were supplied during client initialization.\n */\n pluginsConfigured: boolean;\n /**\n * SDK version\n */\n sDKVersion: string;\n /**\n * True if `aadScope` were supplied during client initialization.\n */\n aadScopeOverride?: boolean;\n};\n\n/**\n * This type contains diagnostic information regarding all metadata request to server during an CosmosDB client operation.\n */\nexport type MetadataLookUpDiagnostics = {\n metadataLookups: MetadataLookUpDiagnostic[];\n};\n\n/**\n * This type captures diagnostic information regarding retries attempt during an CosmosDB client operation.\n */\nexport type RetryDiagnostics = {\n failedAttempts: FailedRequestAttemptDiagnostic[];\n};\n\nexport type GatewayStatistics = {\n /**\n * This is the activityId for request, made to server for fetching the requested resource. (As opposed to other potential meta data requests)\n */\n activityId?: string;\n /*\n * The correlated activity ID is added in the header of every request made to the backend for a query. This aids in troubleshooting by linking all\n * requests associated with a particular query.\n */\n correlatedActivityId?: string;\n startTimeUTCInMs: number;\n durationInMs: number;\n operationType?: OperationType;\n resourceType?: ResourceType;\n statusCode?: number;\n subStatusCode?: number;\n requestCharge?: number;\n requestPayloadLengthInBytes: number;\n responsePayloadLengthInBytes: number;\n};\n\n/**\n * This type contains diagnostic information regarding a single metadata request to server.\n */\nexport interface MetadataLookUpDiagnostic {\n activityId: string;\n startTimeUTCInMs: number;\n durationInMs: number;\n operationType?: OperationType;\n resourceType?: ResourceType;\n metaDataType: MetadataLookUpType;\n requestPayloadLengthInBytes: number;\n responsePayloadLengthInBytes: number;\n}\n\n/**\n * This type captures diagnostic information regarding a failed request to server api.\n */\nexport interface FailedRequestAttemptDiagnostic {\n attemptNumber: number;\n activityId: string;\n startTimeUTCInMs: number;\n durationInMs: number;\n operationType?: OperationType;\n resourceType?: ResourceType;\n statusCode: number;\n substatusCode?: number;\n requestPayloadLengthInBytes: number;\n responsePayloadLengthInBytes: number;\n}\n\n/**\n * @hidden\n * Represents the diagnostics information for encryption operations.\n */\nexport interface EncryptionDiagnostics {\n /** shows start time, duration and properties count for encryption*/\n encryptContent: Record<string, any>;\n /** shows start time, duration and properties count for decryption*/\n decryptContent: Record<string, any>;\n /** represents total processing duration for encryption/decryption*/\n processingDurationInMs: number;\n}\n\n/**\n * This is enum for Type of Metadata lookups possible.\n */\nexport enum MetadataLookUpType {\n PartitionKeyRangeLookUp = \"PARTITION_KEY_RANGE_LOOK_UP\",\n DatabaseAccountLookUp = \"DATABASE_ACCOUNT_LOOK_UP\",\n QueryPlanLookUp = \"QUERY_PLAN_LOOK_UP\",\n DatabaseLookUp = \"DATABASE_LOOK_UP\",\n ContainerLookUp = \"CONTAINER_LOOK_UP\",\n}\n\n/**\n * This is a collection type for all client side diagnostic information.\n */\nexport type ClientSideRequestStatistics = {\n /**\n * This is the UTC timestamp for start of client operation.\n */\n requestStartTimeUTCInMs: number;\n /**\n * This is the duration in milli seconds taken by client operation.\n */\n requestDurationInMs: number;\n /**\n * This is the list of Location Endpoints contacted during the client operation.\n */\n locationEndpointsContacted: string[];\n /**\n * This field captures diagnostic information for retries happened during client operation.\n */\n retryDiagnostics: RetryDiagnostics;\n /**\n * This field captures diagnostic information for meta data lookups happened during client operation.\n */\n metadataDiagnostics: MetadataLookUpDiagnostics;\n /**\n * These are the statistics for main point look operation.\n */\n gatewayStatistics: GatewayStatistics[];\n /**\n * This is the cumulated Request Payload Length n bytes, this includes metadata calls along with the main operation.\n */\n totalRequestPayloadLengthInBytes: number;\n /**\n * This is the cumulated Response Payload Length n bytes, this includes metadata calls along with the main operation.\n */\n totalResponsePayloadLengthInBytes: number;\n /**\n * This field captures diagnostic information for encryption/decryption happened during CRUD operation if encryption is enabled.\n */\n encryptionDiagnostics?: EncryptionDiagnostics;\n};\n\nexport function getRootNode(node: DiagnosticNodeInternal): DiagnosticNodeInternal {\n if (node.parent) return getRootNode(node.parent);\n else return node;\n}\n\n/**\n * Represents a tree like structure, for capturing diagnostic information.\n */\nexport interface DiagnosticNode {\n id: string;\n nodeType: string;\n children: DiagnosticNode[];\n data: { [key: string]: any };\n startTimeUTCInMs: number;\n durationInMs: number;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=GlobalEndpointManagerOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalEndpointManagerOptions.d.ts","sourceRoot":"","sources":["../../src/GlobalEndpointManagerOptions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=GlobalEndpointManagerOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalEndpointManagerOptions.js","sourceRoot":"","sources":["../../src/GlobalEndpointManagerOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport type { ResourceType, OperationType } from \"./common/index.js\";\nimport type { DiagnosticNodeInternal } from \"./diagnostics/DiagnosticNodeInternal.js\";\n\n/**\n * @internal\n */\nexport interface ResolveServiceEndpointOptions {\n diagnosticNode: DiagnosticNodeInternal;\n resourceType: ResourceType;\n operationType: OperationType;\n /**\n * This is to indicate the starting index for selecting servers.\n */\n startServiceEndpointIndex: number;\n /**\n * Excludes one or more Azure regions for the operation.\n * <p>This option is only applied when enableEndPointDiscovery is set to true.</p>\n */\n excludedLocations?: string[];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeFeedForEpkRange.d.ts","sourceRoot":"","sources":["../../../../src/client/ChangeFeed/ChangeFeedForEpkRange.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAK7E,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAMpF;;;;;GAKG;AACH,qBAAa,qBAAqB,CAAC,CAAC,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;IAW3E,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,QAAQ;IAjBlB,OAAO,CAAC,iBAAiB,CAAC,CAA6B;IACvD,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,YAAY,CAAU;YA2BhB,cAAc;IAK5B,OAAO,CAAC,qCAAqC;YAO/B,mBAAmB;IAWjC;;OAEG;YACW,0BAA0B;IAyBxC;;OAEG;YACW,gCAAgC;IAwC9C;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;OAEG;IACW,gBAAgB,IAAI,aAAa,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAOhG;;;;;;OAMG;IACU,QAAQ,IAAI,OAAO,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IA+CjF,OAAO,CAAC,yBAAyB,CAE/B;IAEF;;OAEG;YACW,SAAS;IA+BvB,OAAO,CAAC,oBAAoB;IAa5B;;;;OAIG;YACW,oBAAoB;YAgDpB,kBAAkB;IA2ChC;;;;OAIG;YACW,mBAAmB;YA4BnB,eAAe;IAwF7B,OAAO,CAAC,mBAAmB;CAU5B"}
1
+ {"version":3,"file":"ChangeFeedForEpkRange.d.ts","sourceRoot":"","sources":["../../../../src/client/ChangeFeed/ChangeFeedForEpkRange.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAK7E,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAMpF;;;;;GAKG;AACH,qBAAa,qBAAqB,CAAC,CAAC,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;IAW3E,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,QAAQ;IAjBlB,OAAO,CAAC,iBAAiB,CAAC,CAA6B;IACvD,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,YAAY,CAAU;YA2BhB,cAAc;IAK5B,OAAO,CAAC,qCAAqC;YAO/B,mBAAmB;IAWjC;;OAEG;YACW,0BAA0B;IAyBxC;;OAEG;YACW,gCAAgC;IAwC9C;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;OAEG;IACW,gBAAgB,IAAI,aAAa,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAOhG;;;;;;OAMG;IACU,QAAQ,IAAI,OAAO,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IA+CjF,OAAO,CAAC,yBAAyB,CAE/B;IAEF;;OAEG;YACW,SAAS;IA+BvB,OAAO,CAAC,oBAAoB;IAa5B;;;;OAIG;YACW,oBAAoB;YAgDpB,kBAAkB;IA2ChC;;;;OAIG;YACW,mBAAmB;YA4BnB,eAAe;IA4F7B,OAAO,CAAC,mBAAmB;CAU5B"}
@@ -306,6 +306,9 @@ export class ChangeFeedForEpkRange {
306
306
  if (this.changeFeedOptions.sessionToken) {
307
307
  feedOptions.sessionToken = this.changeFeedOptions.sessionToken;
308
308
  }
309
+ if (this.changeFeedOptions.excludedLocations) {
310
+ feedOptions.excludedLocations = this.changeFeedOptions.excludedLocations;
311
+ }
309
312
  if (feedRange.continuationToken) {
310
313
  feedOptions.accessCondition = {
311
314
  type: Constants.HttpHeaders.IfNoneMatch,
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeFeedForEpkRange.js","sourceRoot":"","sources":["../../../../src/client/ChangeFeed/ChangeFeedForEpkRange.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { ChangeFeedRange } from \"./ChangeFeedRange.js\";\nimport { ChangeFeedIteratorResponse } from \"./ChangeFeedIteratorResponse.js\";\nimport type { PartitionKeyRangeCache } from \"../../routing/index.js\";\nimport { QueryRange } from \"../../routing/index.js\";\nimport { FeedRangeQueue } from \"./FeedRangeQueue.js\";\nimport type { ClientContext } from \"../../ClientContext.js\";\nimport type { Container, Resource } from \"../../client/index.js\";\nimport { Constants, SubStatusCodes, StatusCodes, ResourceType } from \"../../common/index.js\";\nimport type { Response, FeedOptions } from \"../../request/index.js\";\nimport { ErrorResponse } from \"../../request/index.js\";\nimport { CompositeContinuationToken } from \"./CompositeContinuationToken.js\";\nimport type { ChangeFeedPullModelIterator } from \"./ChangeFeedPullModelIterator.js\";\nimport { decryptChangeFeedResponse, extractOverlappingRanges } from \"./changeFeedUtils.js\";\nimport type { InternalChangeFeedIteratorOptions } from \"./InternalChangeFeedOptions.js\";\nimport type { DiagnosticNodeInternal } from \"../../diagnostics/DiagnosticNodeInternal.js\";\nimport { getEmptyCosmosDiagnostics, withDiagnostics } from \"../../utils/diagnostics.js\";\nimport { ChangeFeedMode } from \"./ChangeFeedMode.js\";\n/**\n * @hidden\n * Provides iterator for change feed for entire container or an epk range.\n *\n * Use `Items.getChangeFeedIterator()` to get an instance of the iterator.\n */\nexport class ChangeFeedForEpkRange<T> implements ChangeFeedPullModelIterator<T> {\n private continuationToken?: CompositeContinuationToken;\n private queue: FeedRangeQueue<ChangeFeedRange>;\n private startTime: string;\n private isInstantiated: boolean;\n private rId: string;\n private startFromNow: boolean;\n /**\n * @internal\n */\n constructor(\n private clientContext: ClientContext,\n private container: Container,\n private partitionKeyRangeCache: PartitionKeyRangeCache,\n private resourceId: string,\n private resourceLink: string,\n private url: string,\n private changeFeedOptions: InternalChangeFeedIteratorOptions,\n private epkRange: QueryRange,\n ) {\n this.queue = new FeedRangeQueue<ChangeFeedRange>();\n this.continuationToken = changeFeedOptions.continuationToken\n ? JSON.parse(changeFeedOptions.continuationToken)\n : undefined;\n this.isInstantiated = false;\n // startTime is used to store and specify time from which change feed should start reading new changes. StartFromNow flag is used to indicate fetching changes from now.\n if (changeFeedOptions.startFromNow) {\n this.startFromNow = true;\n } else if (changeFeedOptions.startTime) {\n this.startTime = changeFeedOptions.startTime.toUTCString();\n }\n }\n\n private async setIteratorRid(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n const { resource } = await this.container.readInternal(diagnosticNode);\n this.rId = resource._rid;\n }\n\n private continuationTokenRidMatchContainerRid(): boolean {\n if (this.continuationToken.rid !== this.rId) {\n return false;\n }\n return true;\n }\n\n private async fillChangeFeedQueue(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n if (this.continuationToken) {\n // fill the queue with feed ranges in continuation token.\n await this.fetchContinuationTokenFeedRanges(diagnosticNode);\n } else {\n // fill the queue with feed ranges overlapping the given epk range.\n await this.fetchOverLappingFeedRanges(diagnosticNode);\n }\n this.isInstantiated = true;\n }\n\n /**\n * Fill the queue with the feed ranges overlapping with the given epk range.\n */\n private async fetchOverLappingFeedRanges(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n try {\n const overLappingRanges = await this.partitionKeyRangeCache.getOverlappingRanges(\n this.url,\n this.epkRange,\n diagnosticNode,\n );\n for (const overLappingRange of overLappingRanges) {\n const [epkMinHeader, epkMaxHeader] = await extractOverlappingRanges(\n this.epkRange,\n overLappingRange,\n );\n const feedRange: ChangeFeedRange = new ChangeFeedRange(\n overLappingRange.minInclusive,\n overLappingRange.maxExclusive,\n \"\",\n epkMinHeader,\n epkMaxHeader,\n );\n this.queue.enqueue(feedRange);\n }\n } catch (err) {\n throw new ErrorResponse(err.message);\n }\n }\n /**\n * Fill the queue with feed ranges from continuation token\n */\n private async fetchContinuationTokenFeedRanges(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<void> {\n const contToken = this.continuationToken;\n if (!this.continuationTokenRidMatchContainerRid()) {\n throw new ErrorResponse(\"The continuation token is not for the current container definition\");\n } else {\n for (const cToken of contToken.Continuation) {\n const queryRange = new QueryRange(cToken.minInclusive, cToken.maxExclusive, true, false);\n try {\n const overLappingRanges = await this.partitionKeyRangeCache.getOverlappingRanges(\n this.url,\n queryRange,\n diagnosticNode,\n );\n for (const overLappingRange of overLappingRanges) {\n // check if the epk range present in continuation token entirely covers the overlapping range.\n // If yes, minInclusive and maxExclusive of the overlapping range will be set.\n // If no, i.e. there is only partial overlap, epkMinHeader and epkMaxHeader are set as min and max of overlap.\n // This will be used when we make a call to fetch change feed.\n const [epkMinHeader, epkMaxHeader] = await extractOverlappingRanges(\n queryRange,\n overLappingRange,\n );\n const feedRange: ChangeFeedRange = new ChangeFeedRange(\n overLappingRange.minInclusive,\n overLappingRange.maxExclusive,\n cToken.continuationToken,\n epkMinHeader,\n epkMaxHeader,\n );\n this.queue.enqueue(feedRange);\n }\n } catch (err) {\n throw new ErrorResponse(err.message);\n }\n }\n }\n }\n\n /**\n * Change feed is an infinite feed. hasMoreResults is always true.\n */\n get hasMoreResults(): boolean {\n return true;\n }\n\n /**\n * Gets an async iterator which will yield change feed results.\n */\n public async *getAsyncIterator(): AsyncIterable<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n do {\n const result = await this.readNext();\n yield result;\n } while (this.hasMoreResults);\n }\n\n /**\n * Gets an async iterator which will yield pages of results from Azure Cosmos DB.\n *\n * Keeps iterating over the feedranges and checks if any feed range has new result. Keeps note of the last feed range which returned non 304 result.\n *\n * When same feed range is reached and no new changes are found, a 304 (not Modified) is returned to the end user. Then starts process all over again.\n */\n public async readNext(): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n // validate if the internal queue is filled up with feed ranges.\n if (!this.isInstantiated) {\n await this.setIteratorRid(diagnosticNode);\n await this.fillChangeFeedQueue(diagnosticNode);\n }\n\n // stores the last feedRange for which statusCode is not 304 i.e. there were new changes in that feed range.\n let firstNotModifiedFeedRange: ChangeFeedRange = undefined;\n let result: ChangeFeedIteratorResponse<Array<T & Resource>>;\n do {\n const [processedFeedRange, response] = await this.fetchNext(diagnosticNode);\n result = response;\n\n if (result !== undefined) {\n {\n if (firstNotModifiedFeedRange === undefined) {\n firstNotModifiedFeedRange = processedFeedRange;\n }\n // move current feed range to end of queue to fetch result of next feed range.\n // This is done to fetch changes in breadth first manner and avoid starvation.\n this.queue.moveFirstElementToTheEnd();\n // check if there are new results for the given feed range.\n if (result.statusCode === StatusCodes.Ok) {\n result.headers[Constants.HttpHeaders.ContinuationToken] =\n this.generateContinuationToken();\n\n if (this.clientContext.enableEncryption) {\n await decryptChangeFeedResponse(\n result,\n diagnosticNode,\n this.changeFeedOptions.changeFeedMode,\n this.container.encryptionProcessor,\n );\n }\n return result;\n }\n }\n }\n } while (!this.checkedAllFeedRanges(firstNotModifiedFeedRange));\n // set the continuation token after processing.\n result.headers[Constants.HttpHeaders.ContinuationToken] = this.generateContinuationToken();\n return result;\n }, this.clientContext);\n }\n\n private generateContinuationToken = (): string => {\n return JSON.stringify(new CompositeContinuationToken(this.rId, this.queue.returnSnapshot()));\n };\n\n /**\n * Read feed and retrieves the next page of results in Azure Cosmos DB.\n */\n private async fetchNext(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<[ChangeFeedRange | undefined, ChangeFeedIteratorResponse<Array<T & Resource>>]> {\n const feedRange = this.queue.peek();\n if (feedRange) {\n // fetch results for feed range at the beginning of the queue.\n const result = await this.getFeedResponse(feedRange, diagnosticNode);\n\n // check if results need to be fetched again depending on status code returned.\n // Eg. in case of paritionSplit, results need to be fetched for the child partitions.\n const shouldRetry: boolean = await this.shouldRetryOnFailure(\n feedRange,\n result,\n diagnosticNode,\n );\n\n if (shouldRetry) {\n this.queue.dequeue();\n return this.fetchNext(diagnosticNode);\n } else {\n // update the continuation value for the current feed range.\n const continuationValueForFeedRange = result.headers[Constants.HttpHeaders.ETag];\n const newFeedRange = this.queue.peek();\n newFeedRange.continuationToken = continuationValueForFeedRange;\n return [newFeedRange, result];\n }\n } else {\n return [undefined, undefined];\n }\n }\n\n private checkedAllFeedRanges(firstNotModifiedFeedRange: ChangeFeedRange | undefined): boolean {\n if (firstNotModifiedFeedRange === undefined) {\n return false;\n }\n const feedRangeQueueFirstElement = this.queue.peek();\n return (\n firstNotModifiedFeedRange.minInclusive === feedRangeQueueFirstElement?.minInclusive &&\n firstNotModifiedFeedRange.maxExclusive === feedRangeQueueFirstElement?.maxExclusive &&\n firstNotModifiedFeedRange.epkMinHeader === feedRangeQueueFirstElement?.epkMinHeader &&\n firstNotModifiedFeedRange.epkMaxHeader === feedRangeQueueFirstElement?.epkMaxHeader\n );\n }\n\n /**\n * Checks whether the current EpkRange is split into multiple ranges or not.\n *\n * If yes, it force refreshes the partitionKeyRange cache and enqueue children epk ranges.\n */\n private async shouldRetryOnFailure(\n feedRange: ChangeFeedRange,\n response: ChangeFeedIteratorResponse<Array<T & Resource>>,\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<boolean> {\n if (response.statusCode === StatusCodes.Ok || response.statusCode === StatusCodes.NotModified) {\n return false;\n }\n\n const partitionSplit =\n response.statusCode === StatusCodes.Gone &&\n (response.subStatusCode === SubStatusCodes.PartitionKeyRangeGone ||\n response.subStatusCode === SubStatusCodes.CompletingSplit);\n\n if (partitionSplit) {\n const queryRange = new QueryRange(\n feedRange.epkMinHeader ? feedRange.epkMinHeader : feedRange.minInclusive,\n feedRange.epkMaxHeader ? feedRange.epkMaxHeader : feedRange.maxExclusive,\n true,\n false,\n );\n const resolvedRanges = await this.partitionKeyRangeCache.getOverlappingRanges(\n this.url,\n queryRange,\n diagnosticNode,\n true,\n );\n if (resolvedRanges.length < 1) {\n throw new ErrorResponse(\"Partition split/merge detected but no overlapping ranges found.\");\n }\n // This covers both cases of merge and split.\n // resolvedRanges.length > 1 in case of split.\n // resolvedRanges.length === 1 in case of merge. EpkRange headers will be added in this case.\n if (resolvedRanges.length >= 1) {\n await this.handleSplitOrMerge(\n false,\n resolvedRanges,\n queryRange,\n feedRange.continuationToken,\n );\n }\n return true;\n }\n return false;\n }\n /*\n * Enqueues all the children feed ranges for the given feed range.\n */\n private async handleSplitOrMerge(\n shiftLeft: boolean,\n resolvedRanges: any,\n oldFeedRange: QueryRange,\n continuationToken: string,\n ): Promise<void> {\n let flag = 0;\n if (shiftLeft) {\n // This section is only applicable when handleSplitOrMerge is called by getPartitionRangeId().\n // used only when existing partition key range cache is used to check for any overlapping ranges.\n // Modifies the first element with the first overlapping range.\n const [epkMinHeader, epkMaxHeader] = await extractOverlappingRanges(\n oldFeedRange,\n resolvedRanges[0],\n );\n const newFeedRange = new ChangeFeedRange(\n resolvedRanges[0].minInclusive,\n resolvedRanges[0].maxExclusive,\n continuationToken,\n epkMinHeader,\n epkMaxHeader,\n );\n\n this.queue.modifyFirstElement(newFeedRange);\n flag = 1;\n }\n // Enqueue the overlapping ranges.\n for (let i = flag; i < resolvedRanges.length; i++) {\n const [epkMinHeader, epkMaxHeader] = await extractOverlappingRanges(\n oldFeedRange,\n resolvedRanges[i],\n );\n const newFeedRange = new ChangeFeedRange(\n resolvedRanges[i].minInclusive,\n resolvedRanges[i].maxExclusive,\n continuationToken,\n epkMinHeader,\n epkMaxHeader,\n );\n this.queue.enqueue(newFeedRange);\n }\n }\n\n /**\n * Fetch the partitionKeyRangeId for the given feed range.\n *\n * This partitionKeyRangeId is passed to queryFeed to fetch the results.\n */\n private async getPartitionRangeId(\n feedRange: ChangeFeedRange,\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<string> {\n const min = feedRange.epkMinHeader ? feedRange.epkMinHeader : feedRange.minInclusive;\n const max = feedRange.epkMaxHeader ? feedRange.epkMaxHeader : feedRange.maxExclusive;\n const queryRange = new QueryRange(min, max, true, false);\n const resolvedRanges = await this.partitionKeyRangeCache.getOverlappingRanges(\n this.url,\n queryRange,\n diagnosticNode,\n false,\n );\n if (resolvedRanges.length < 1) {\n throw new ErrorResponse(\"No overlapping ranges found.\");\n }\n const firstResolvedRange = resolvedRanges[0];\n const isPartitionRangeChanged =\n feedRange.minInclusive !== firstResolvedRange.minInclusive ||\n feedRange.maxExclusive !== firstResolvedRange.maxExclusive ||\n resolvedRanges.length > 1;\n // If the partition range is changed, we need to handle split/merge\n if (isPartitionRangeChanged) {\n await this.handleSplitOrMerge(true, resolvedRanges, queryRange, feedRange.continuationToken);\n }\n return firstResolvedRange.id;\n }\n\n private async getFeedResponse(\n feedRange: ChangeFeedRange,\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n const feedOptions: FeedOptions = {\n initialHeaders: {},\n useLatestVersionFeed: true,\n useAllVersionsAndDeletesFeed: false,\n };\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 (feedRange.continuationToken) {\n feedOptions.accessCondition = {\n type: Constants.HttpHeaders.IfNoneMatch,\n condition: feedRange.continuationToken,\n };\n } else if (this.startFromNow) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfNoneMatch] =\n Constants.ChangeFeedIfNoneMatchStartFromNowHeader;\n }\n\n if (this.startTime) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfModifiedSince] = this.startTime;\n }\n\n if (\n this.changeFeedOptions.changeFeedMode &&\n this.changeFeedOptions.changeFeedMode === ChangeFeedMode.AllVersionsAndDeletes\n ) {\n feedOptions.useAllVersionsAndDeletesFeed = true;\n feedOptions.useLatestVersionFeed = false;\n }\n\n const rangeId = await this.getPartitionRangeId(feedRange, diagnosticNode);\n if (this.clientContext.enableEncryption) {\n await this.container.checkAndInitializeEncryption();\n feedOptions.containerRid = this.container._rid;\n }\n try {\n // startEpk and endEpk are only valid in case we want to fetch result for a part of partition and not the entire partition.\n const finalFeedRange = this.fetchFinalFeedRange();\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 diagnosticNode,\n partitionKey: undefined,\n partitionKeyRangeId: rangeId,\n startEpk: finalFeedRange.epkMinHeader,\n endEpk: finalFeedRange.epkMaxHeader,\n }) as Promise<any>);\n\n return new ChangeFeedIteratorResponse(\n response.result,\n response.result ? response.result.length : 0,\n response.code,\n response.headers,\n getEmptyCosmosDiagnostics(),\n );\n } catch (err) {\n // If partition split/merge is encountered, handle it gracefully and continue fetching results.\n if (err.code === StatusCodes.Gone) {\n return new ChangeFeedIteratorResponse(\n [],\n 0,\n err.code,\n err.headers,\n getEmptyCosmosDiagnostics(),\n err.substatus,\n );\n }\n // If any other errors are encountered, throw the error.\n const errorResponse = new ErrorResponse(err.message);\n errorResponse.code = err.code;\n errorResponse.headers = err.headers;\n throw errorResponse;\n }\n }\n private fetchFinalFeedRange(): ChangeFeedRange {\n // this is used to fetch the final feed range before making a call to fetch the results.\n // In case of merge, the final updated feed range is present in the queue and needs to be returned.\n const feedRange = this.queue.peek();\n if (feedRange) {\n return feedRange;\n } else {\n throw new ErrorResponse(\"No feed range found.\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ChangeFeedForEpkRange.js","sourceRoot":"","sources":["../../../../src/client/ChangeFeed/ChangeFeedForEpkRange.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { ChangeFeedRange } from \"./ChangeFeedRange.js\";\nimport { ChangeFeedIteratorResponse } from \"./ChangeFeedIteratorResponse.js\";\nimport type { PartitionKeyRangeCache } from \"../../routing/index.js\";\nimport { QueryRange } from \"../../routing/index.js\";\nimport { FeedRangeQueue } from \"./FeedRangeQueue.js\";\nimport type { ClientContext } from \"../../ClientContext.js\";\nimport type { Container, Resource } from \"../../client/index.js\";\nimport { Constants, SubStatusCodes, StatusCodes, ResourceType } from \"../../common/index.js\";\nimport type { Response, FeedOptions } from \"../../request/index.js\";\nimport { ErrorResponse } from \"../../request/index.js\";\nimport { CompositeContinuationToken } from \"./CompositeContinuationToken.js\";\nimport type { ChangeFeedPullModelIterator } from \"./ChangeFeedPullModelIterator.js\";\nimport { decryptChangeFeedResponse, extractOverlappingRanges } from \"./changeFeedUtils.js\";\nimport type { InternalChangeFeedIteratorOptions } from \"./InternalChangeFeedOptions.js\";\nimport type { DiagnosticNodeInternal } from \"../../diagnostics/DiagnosticNodeInternal.js\";\nimport { getEmptyCosmosDiagnostics, withDiagnostics } from \"../../utils/diagnostics.js\";\nimport { ChangeFeedMode } from \"./ChangeFeedMode.js\";\n/**\n * @hidden\n * Provides iterator for change feed for entire container or an epk range.\n *\n * Use `Items.getChangeFeedIterator()` to get an instance of the iterator.\n */\nexport class ChangeFeedForEpkRange<T> implements ChangeFeedPullModelIterator<T> {\n private continuationToken?: CompositeContinuationToken;\n private queue: FeedRangeQueue<ChangeFeedRange>;\n private startTime: string;\n private isInstantiated: boolean;\n private rId: string;\n private startFromNow: boolean;\n /**\n * @internal\n */\n constructor(\n private clientContext: ClientContext,\n private container: Container,\n private partitionKeyRangeCache: PartitionKeyRangeCache,\n private resourceId: string,\n private resourceLink: string,\n private url: string,\n private changeFeedOptions: InternalChangeFeedIteratorOptions,\n private epkRange: QueryRange,\n ) {\n this.queue = new FeedRangeQueue<ChangeFeedRange>();\n this.continuationToken = changeFeedOptions.continuationToken\n ? JSON.parse(changeFeedOptions.continuationToken)\n : undefined;\n this.isInstantiated = false;\n // startTime is used to store and specify time from which change feed should start reading new changes. StartFromNow flag is used to indicate fetching changes from now.\n if (changeFeedOptions.startFromNow) {\n this.startFromNow = true;\n } else if (changeFeedOptions.startTime) {\n this.startTime = changeFeedOptions.startTime.toUTCString();\n }\n }\n\n private async setIteratorRid(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n const { resource } = await this.container.readInternal(diagnosticNode);\n this.rId = resource._rid;\n }\n\n private continuationTokenRidMatchContainerRid(): boolean {\n if (this.continuationToken.rid !== this.rId) {\n return false;\n }\n return true;\n }\n\n private async fillChangeFeedQueue(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n if (this.continuationToken) {\n // fill the queue with feed ranges in continuation token.\n await this.fetchContinuationTokenFeedRanges(diagnosticNode);\n } else {\n // fill the queue with feed ranges overlapping the given epk range.\n await this.fetchOverLappingFeedRanges(diagnosticNode);\n }\n this.isInstantiated = true;\n }\n\n /**\n * Fill the queue with the feed ranges overlapping with the given epk range.\n */\n private async fetchOverLappingFeedRanges(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n try {\n const overLappingRanges = await this.partitionKeyRangeCache.getOverlappingRanges(\n this.url,\n this.epkRange,\n diagnosticNode,\n );\n for (const overLappingRange of overLappingRanges) {\n const [epkMinHeader, epkMaxHeader] = await extractOverlappingRanges(\n this.epkRange,\n overLappingRange,\n );\n const feedRange: ChangeFeedRange = new ChangeFeedRange(\n overLappingRange.minInclusive,\n overLappingRange.maxExclusive,\n \"\",\n epkMinHeader,\n epkMaxHeader,\n );\n this.queue.enqueue(feedRange);\n }\n } catch (err) {\n throw new ErrorResponse(err.message);\n }\n }\n /**\n * Fill the queue with feed ranges from continuation token\n */\n private async fetchContinuationTokenFeedRanges(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<void> {\n const contToken = this.continuationToken;\n if (!this.continuationTokenRidMatchContainerRid()) {\n throw new ErrorResponse(\"The continuation token is not for the current container definition\");\n } else {\n for (const cToken of contToken.Continuation) {\n const queryRange = new QueryRange(cToken.minInclusive, cToken.maxExclusive, true, false);\n try {\n const overLappingRanges = await this.partitionKeyRangeCache.getOverlappingRanges(\n this.url,\n queryRange,\n diagnosticNode,\n );\n for (const overLappingRange of overLappingRanges) {\n // check if the epk range present in continuation token entirely covers the overlapping range.\n // If yes, minInclusive and maxExclusive of the overlapping range will be set.\n // If no, i.e. there is only partial overlap, epkMinHeader and epkMaxHeader are set as min and max of overlap.\n // This will be used when we make a call to fetch change feed.\n const [epkMinHeader, epkMaxHeader] = await extractOverlappingRanges(\n queryRange,\n overLappingRange,\n );\n const feedRange: ChangeFeedRange = new ChangeFeedRange(\n overLappingRange.minInclusive,\n overLappingRange.maxExclusive,\n cToken.continuationToken,\n epkMinHeader,\n epkMaxHeader,\n );\n this.queue.enqueue(feedRange);\n }\n } catch (err) {\n throw new ErrorResponse(err.message);\n }\n }\n }\n }\n\n /**\n * Change feed is an infinite feed. hasMoreResults is always true.\n */\n get hasMoreResults(): boolean {\n return true;\n }\n\n /**\n * Gets an async iterator which will yield change feed results.\n */\n public async *getAsyncIterator(): AsyncIterable<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n do {\n const result = await this.readNext();\n yield result;\n } while (this.hasMoreResults);\n }\n\n /**\n * Gets an async iterator which will yield pages of results from Azure Cosmos DB.\n *\n * Keeps iterating over the feedranges and checks if any feed range has new result. Keeps note of the last feed range which returned non 304 result.\n *\n * When same feed range is reached and no new changes are found, a 304 (not Modified) is returned to the end user. Then starts process all over again.\n */\n public async readNext(): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n // validate if the internal queue is filled up with feed ranges.\n if (!this.isInstantiated) {\n await this.setIteratorRid(diagnosticNode);\n await this.fillChangeFeedQueue(diagnosticNode);\n }\n\n // stores the last feedRange for which statusCode is not 304 i.e. there were new changes in that feed range.\n let firstNotModifiedFeedRange: ChangeFeedRange = undefined;\n let result: ChangeFeedIteratorResponse<Array<T & Resource>>;\n do {\n const [processedFeedRange, response] = await this.fetchNext(diagnosticNode);\n result = response;\n\n if (result !== undefined) {\n {\n if (firstNotModifiedFeedRange === undefined) {\n firstNotModifiedFeedRange = processedFeedRange;\n }\n // move current feed range to end of queue to fetch result of next feed range.\n // This is done to fetch changes in breadth first manner and avoid starvation.\n this.queue.moveFirstElementToTheEnd();\n // check if there are new results for the given feed range.\n if (result.statusCode === StatusCodes.Ok) {\n result.headers[Constants.HttpHeaders.ContinuationToken] =\n this.generateContinuationToken();\n\n if (this.clientContext.enableEncryption) {\n await decryptChangeFeedResponse(\n result,\n diagnosticNode,\n this.changeFeedOptions.changeFeedMode,\n this.container.encryptionProcessor,\n );\n }\n return result;\n }\n }\n }\n } while (!this.checkedAllFeedRanges(firstNotModifiedFeedRange));\n // set the continuation token after processing.\n result.headers[Constants.HttpHeaders.ContinuationToken] = this.generateContinuationToken();\n return result;\n }, this.clientContext);\n }\n\n private generateContinuationToken = (): string => {\n return JSON.stringify(new CompositeContinuationToken(this.rId, this.queue.returnSnapshot()));\n };\n\n /**\n * Read feed and retrieves the next page of results in Azure Cosmos DB.\n */\n private async fetchNext(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<[ChangeFeedRange | undefined, ChangeFeedIteratorResponse<Array<T & Resource>>]> {\n const feedRange = this.queue.peek();\n if (feedRange) {\n // fetch results for feed range at the beginning of the queue.\n const result = await this.getFeedResponse(feedRange, diagnosticNode);\n\n // check if results need to be fetched again depending on status code returned.\n // Eg. in case of paritionSplit, results need to be fetched for the child partitions.\n const shouldRetry: boolean = await this.shouldRetryOnFailure(\n feedRange,\n result,\n diagnosticNode,\n );\n\n if (shouldRetry) {\n this.queue.dequeue();\n return this.fetchNext(diagnosticNode);\n } else {\n // update the continuation value for the current feed range.\n const continuationValueForFeedRange = result.headers[Constants.HttpHeaders.ETag];\n const newFeedRange = this.queue.peek();\n newFeedRange.continuationToken = continuationValueForFeedRange;\n return [newFeedRange, result];\n }\n } else {\n return [undefined, undefined];\n }\n }\n\n private checkedAllFeedRanges(firstNotModifiedFeedRange: ChangeFeedRange | undefined): boolean {\n if (firstNotModifiedFeedRange === undefined) {\n return false;\n }\n const feedRangeQueueFirstElement = this.queue.peek();\n return (\n firstNotModifiedFeedRange.minInclusive === feedRangeQueueFirstElement?.minInclusive &&\n firstNotModifiedFeedRange.maxExclusive === feedRangeQueueFirstElement?.maxExclusive &&\n firstNotModifiedFeedRange.epkMinHeader === feedRangeQueueFirstElement?.epkMinHeader &&\n firstNotModifiedFeedRange.epkMaxHeader === feedRangeQueueFirstElement?.epkMaxHeader\n );\n }\n\n /**\n * Checks whether the current EpkRange is split into multiple ranges or not.\n *\n * If yes, it force refreshes the partitionKeyRange cache and enqueue children epk ranges.\n */\n private async shouldRetryOnFailure(\n feedRange: ChangeFeedRange,\n response: ChangeFeedIteratorResponse<Array<T & Resource>>,\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<boolean> {\n if (response.statusCode === StatusCodes.Ok || response.statusCode === StatusCodes.NotModified) {\n return false;\n }\n\n const partitionSplit =\n response.statusCode === StatusCodes.Gone &&\n (response.subStatusCode === SubStatusCodes.PartitionKeyRangeGone ||\n response.subStatusCode === SubStatusCodes.CompletingSplit);\n\n if (partitionSplit) {\n const queryRange = new QueryRange(\n feedRange.epkMinHeader ? feedRange.epkMinHeader : feedRange.minInclusive,\n feedRange.epkMaxHeader ? feedRange.epkMaxHeader : feedRange.maxExclusive,\n true,\n false,\n );\n const resolvedRanges = await this.partitionKeyRangeCache.getOverlappingRanges(\n this.url,\n queryRange,\n diagnosticNode,\n true,\n );\n if (resolvedRanges.length < 1) {\n throw new ErrorResponse(\"Partition split/merge detected but no overlapping ranges found.\");\n }\n // This covers both cases of merge and split.\n // resolvedRanges.length > 1 in case of split.\n // resolvedRanges.length === 1 in case of merge. EpkRange headers will be added in this case.\n if (resolvedRanges.length >= 1) {\n await this.handleSplitOrMerge(\n false,\n resolvedRanges,\n queryRange,\n feedRange.continuationToken,\n );\n }\n return true;\n }\n return false;\n }\n /*\n * Enqueues all the children feed ranges for the given feed range.\n */\n private async handleSplitOrMerge(\n shiftLeft: boolean,\n resolvedRanges: any,\n oldFeedRange: QueryRange,\n continuationToken: string,\n ): Promise<void> {\n let flag = 0;\n if (shiftLeft) {\n // This section is only applicable when handleSplitOrMerge is called by getPartitionRangeId().\n // used only when existing partition key range cache is used to check for any overlapping ranges.\n // Modifies the first element with the first overlapping range.\n const [epkMinHeader, epkMaxHeader] = await extractOverlappingRanges(\n oldFeedRange,\n resolvedRanges[0],\n );\n const newFeedRange = new ChangeFeedRange(\n resolvedRanges[0].minInclusive,\n resolvedRanges[0].maxExclusive,\n continuationToken,\n epkMinHeader,\n epkMaxHeader,\n );\n\n this.queue.modifyFirstElement(newFeedRange);\n flag = 1;\n }\n // Enqueue the overlapping ranges.\n for (let i = flag; i < resolvedRanges.length; i++) {\n const [epkMinHeader, epkMaxHeader] = await extractOverlappingRanges(\n oldFeedRange,\n resolvedRanges[i],\n );\n const newFeedRange = new ChangeFeedRange(\n resolvedRanges[i].minInclusive,\n resolvedRanges[i].maxExclusive,\n continuationToken,\n epkMinHeader,\n epkMaxHeader,\n );\n this.queue.enqueue(newFeedRange);\n }\n }\n\n /**\n * Fetch the partitionKeyRangeId for the given feed range.\n *\n * This partitionKeyRangeId is passed to queryFeed to fetch the results.\n */\n private async getPartitionRangeId(\n feedRange: ChangeFeedRange,\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<string> {\n const min = feedRange.epkMinHeader ? feedRange.epkMinHeader : feedRange.minInclusive;\n const max = feedRange.epkMaxHeader ? feedRange.epkMaxHeader : feedRange.maxExclusive;\n const queryRange = new QueryRange(min, max, true, false);\n const resolvedRanges = await this.partitionKeyRangeCache.getOverlappingRanges(\n this.url,\n queryRange,\n diagnosticNode,\n false,\n );\n if (resolvedRanges.length < 1) {\n throw new ErrorResponse(\"No overlapping ranges found.\");\n }\n const firstResolvedRange = resolvedRanges[0];\n const isPartitionRangeChanged =\n feedRange.minInclusive !== firstResolvedRange.minInclusive ||\n feedRange.maxExclusive !== firstResolvedRange.maxExclusive ||\n resolvedRanges.length > 1;\n // If the partition range is changed, we need to handle split/merge\n if (isPartitionRangeChanged) {\n await this.handleSplitOrMerge(true, resolvedRanges, queryRange, feedRange.continuationToken);\n }\n return firstResolvedRange.id;\n }\n\n private async getFeedResponse(\n feedRange: ChangeFeedRange,\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n const feedOptions: FeedOptions = {\n initialHeaders: {},\n useLatestVersionFeed: true,\n useAllVersionsAndDeletesFeed: false,\n };\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.changeFeedOptions.excludedLocations) {\n feedOptions.excludedLocations = this.changeFeedOptions.excludedLocations;\n }\n\n if (feedRange.continuationToken) {\n feedOptions.accessCondition = {\n type: Constants.HttpHeaders.IfNoneMatch,\n condition: feedRange.continuationToken,\n };\n } else if (this.startFromNow) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfNoneMatch] =\n Constants.ChangeFeedIfNoneMatchStartFromNowHeader;\n }\n\n if (this.startTime) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfModifiedSince] = this.startTime;\n }\n\n if (\n this.changeFeedOptions.changeFeedMode &&\n this.changeFeedOptions.changeFeedMode === ChangeFeedMode.AllVersionsAndDeletes\n ) {\n feedOptions.useAllVersionsAndDeletesFeed = true;\n feedOptions.useLatestVersionFeed = false;\n }\n\n const rangeId = await this.getPartitionRangeId(feedRange, diagnosticNode);\n if (this.clientContext.enableEncryption) {\n await this.container.checkAndInitializeEncryption();\n feedOptions.containerRid = this.container._rid;\n }\n try {\n // startEpk and endEpk are only valid in case we want to fetch result for a part of partition and not the entire partition.\n const finalFeedRange = this.fetchFinalFeedRange();\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 diagnosticNode,\n partitionKey: undefined,\n partitionKeyRangeId: rangeId,\n startEpk: finalFeedRange.epkMinHeader,\n endEpk: finalFeedRange.epkMaxHeader,\n }) as Promise<any>);\n\n return new ChangeFeedIteratorResponse(\n response.result,\n response.result ? response.result.length : 0,\n response.code,\n response.headers,\n getEmptyCosmosDiagnostics(),\n );\n } catch (err) {\n // If partition split/merge is encountered, handle it gracefully and continue fetching results.\n if (err.code === StatusCodes.Gone) {\n return new ChangeFeedIteratorResponse(\n [],\n 0,\n err.code,\n err.headers,\n getEmptyCosmosDiagnostics(),\n err.substatus,\n );\n }\n // If any other errors are encountered, throw the error.\n const errorResponse = new ErrorResponse(err.message);\n errorResponse.code = err.code;\n errorResponse.headers = err.headers;\n throw errorResponse;\n }\n }\n private fetchFinalFeedRange(): ChangeFeedRange {\n // this is used to fetch the final feed range before making a call to fetch the results.\n // In case of merge, the final updated feed range is present in the queue and needs to be returned.\n const feedRange = this.queue.peek();\n if (feedRange) {\n return feedRange;\n } else {\n throw new ErrorResponse(\"No feed range found.\");\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeFeedForPartitionKey.d.ts","sourceRoot":"","sources":["../../../../src/client/ChangeFeed/ChangeFeedForPartitionKey.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAa,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAK5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAO/E;;;;;GAKG;AACH,qBAAa,yBAAyB,CAAC,CAAC,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;IAU/E,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,iBAAiB;IAd3B,OAAO,CAAC,iBAAiB,CAAmC;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAU;YAwBhB,mBAAmB;IAgCjC,OAAO,CAAC,qCAAqC;YAO/B,cAAc;IAK5B;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;OAEG;IACW,gBAAgB,IAAI,aAAa,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAOhG;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAoBjF;;OAEG;YACW,SAAS;YAWT,eAAe;CA2E9B"}
1
+ {"version":3,"file":"ChangeFeedForPartitionKey.d.ts","sourceRoot":"","sources":["../../../../src/client/ChangeFeed/ChangeFeedForPartitionKey.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAa,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAK5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAO/E;;;;;GAKG;AACH,qBAAa,yBAAyB,CAAC,CAAC,CAAE,YAAW,2BAA2B,CAAC,CAAC,CAAC;IAU/E,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,iBAAiB;IAd3B,OAAO,CAAC,iBAAiB,CAAmC;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,YAAY,CAAU;YAwBhB,mBAAmB;IAgCjC,OAAO,CAAC,qCAAqC;YAO/B,cAAc;IAK5B;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;OAEG;IACW,gBAAgB,IAAI,aAAa,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAOhG;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAoBjF;;OAEG;YACW,SAAS;YAWT,eAAe;CA+E9B"}
@@ -131,6 +131,9 @@ export class ChangeFeedForPartitionKey {
131
131
  if (this.changeFeedOptions.sessionToken) {
132
132
  feedOptions.sessionToken = this.changeFeedOptions.sessionToken;
133
133
  }
134
+ if (this.changeFeedOptions.excludedLocations) {
135
+ feedOptions.excludedLocations = this.changeFeedOptions.excludedLocations;
136
+ }
134
137
  const continuation = this.continuationToken.Continuation;
135
138
  if (continuation) {
136
139
  feedOptions.accessCondition = {
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeFeedForPartitionKey.js","sourceRoot":"","sources":["../../../../src/client/ChangeFeed/ChangeFeedForPartitionKey.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport type { InternalChangeFeedIteratorOptions } from \"./InternalChangeFeedOptions.js\";\nimport { ChangeFeedIteratorResponse } from \"./ChangeFeedIteratorResponse.js\";\nimport { Container, Resource } from \"../../client/index.js\";\nimport { ClientContext } from \"../../ClientContext.js\";\nimport { Constants, copyObject, ResourceType, StatusCodes } from \"../../common/index.js\";\nimport { FeedOptions, Response, ErrorResponse } from \"../../request/index.js\";\nimport { ContinuationTokenForPartitionKey } from \"./ContinuationTokenForPartitionKey.js\";\nimport { ChangeFeedPullModelIterator } from \"./ChangeFeedPullModelIterator.js\";\nimport { PartitionKey, convertToInternalPartitionKey } from \"../../documents/index.js\";\nimport { DiagnosticNodeInternal } from \"../../diagnostics/DiagnosticNodeInternal.js\";\nimport { getEmptyCosmosDiagnostics, withDiagnostics } from \"../../utils/diagnostics.js\";\nimport { ChangeFeedMode } from \"./ChangeFeedMode.js\";\nimport { decryptChangeFeedResponse } from \"./changeFeedUtils.js\";\nimport { computePartitionKeyRangeId } from \"../ClientUtils.js\";\n/**\n * @hidden\n * Provides iterator for change feed for one partition key.\n *\n * Use `Items.getChangeFeedIterator()` to get an instance of the iterator.\n */\nexport class ChangeFeedForPartitionKey<T> implements ChangeFeedPullModelIterator<T> {\n private continuationToken: ContinuationTokenForPartitionKey;\n private startTime: string;\n private rId: string;\n private isInstantiated: boolean;\n private startFromNow: boolean;\n /**\n * @internal\n */\n constructor(\n private clientContext: ClientContext,\n private container: Container,\n private resourceId: string,\n private resourceLink: string,\n private partitionKey: PartitionKey,\n private changeFeedOptions: InternalChangeFeedIteratorOptions,\n ) {\n this.continuationToken = changeFeedOptions.continuationToken\n ? JSON.parse(changeFeedOptions.continuationToken)\n : undefined;\n this.isInstantiated = false;\n // startTime is used to store and specify time from which change feed should start reading new changes. StartFromNow flag is used to indicate fetching changes from now.\n if (changeFeedOptions.startFromNow) {\n this.startFromNow = true;\n } else if (changeFeedOptions.startTime) {\n this.startTime = changeFeedOptions.startTime.toUTCString();\n }\n }\n\n private async instantiateIterator(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n await this.setIteratorRid(diagnosticNode);\n if (this.clientContext.enableEncryption) {\n await this.container.checkAndInitializeEncryption();\n // returns copy of object to avoid encryption of original partition key passed\n this.partitionKey = copyObject(this.partitionKey);\n diagnosticNode.beginEncryptionDiagnostics(Constants.Encryption.DiagnosticsEncryptOperation);\n const { partitionKeyList, encryptedCount } =\n await this.container.encryptionProcessor.getEncryptedPartitionKeyValue(\n convertToInternalPartitionKey(this.partitionKey),\n );\n this.partitionKey = partitionKeyList;\n diagnosticNode.endEncryptionDiagnostics(\n Constants.Encryption.DiagnosticsEncryptOperation,\n encryptedCount,\n );\n }\n if (this.continuationToken) {\n if (!this.continuationTokenRidMatchContainerRid()) {\n throw new ErrorResponse(\"The continuation is not for the current container definition.\");\n }\n } else {\n this.continuationToken = new ContinuationTokenForPartitionKey(\n this.rId,\n this.partitionKey,\n \"\",\n );\n }\n\n this.isInstantiated = true;\n }\n\n private continuationTokenRidMatchContainerRid(): boolean {\n if (this.continuationToken.rid !== this.rId) {\n return false;\n }\n return true;\n }\n\n private async setIteratorRid(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n const { resource } = await this.container.readInternal(diagnosticNode);\n this.rId = resource._rid;\n }\n\n /**\n * Change feed is an infinite feed. hasMoreResults is always true.\n */\n get hasMoreResults(): boolean {\n return true;\n }\n\n /**\n * Gets an async iterator which will yield change feed results.\n */\n public async *getAsyncIterator(): AsyncIterable<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n do {\n const result = await this.readNext();\n yield result;\n } while (this.hasMoreResults);\n }\n\n /**\n * Returns the result of change feed from Azure Cosmos DB.\n */\n public async readNext(): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n if (!this.isInstantiated) {\n await this.instantiateIterator(diagnosticNode);\n }\n const result = await this.fetchNext(diagnosticNode);\n if (result.statusCode === StatusCodes.Ok) {\n if (this.clientContext.enableEncryption) {\n await decryptChangeFeedResponse(\n result,\n diagnosticNode,\n this.changeFeedOptions.changeFeedMode,\n this.container.encryptionProcessor,\n );\n }\n }\n return result;\n }, this.clientContext);\n }\n\n /**\n * Read feed and retrieves the next set of results in Azure Cosmos DB.\n */\n private async fetchNext(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n const response = await this.getFeedResponse(diagnosticNode);\n this.continuationToken.Continuation = response.headers[Constants.HttpHeaders.ETag];\n response.headers[Constants.HttpHeaders.ContinuationToken] = JSON.stringify(\n this.continuationToken,\n );\n return response;\n }\n\n private async getFeedResponse(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n const feedOptions: FeedOptions = {\n initialHeaders: {},\n useLatestVersionFeed: true,\n useAllVersionsAndDeletesFeed: false,\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 const continuation = this.continuationToken.Continuation;\n if (continuation) {\n feedOptions.accessCondition = {\n type: Constants.HttpHeaders.IfNoneMatch,\n condition: continuation,\n };\n } else if (this.startFromNow) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfNoneMatch] =\n Constants.ChangeFeedIfNoneMatchStartFromNowHeader;\n }\n\n if (this.startTime) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfModifiedSince] = this.startTime;\n }\n if (\n this.changeFeedOptions.changeFeedMode &&\n this.changeFeedOptions.changeFeedMode === ChangeFeedMode.AllVersionsAndDeletes\n ) {\n feedOptions.useAllVersionsAndDeletesFeed = true;\n feedOptions.useLatestVersionFeed = false;\n }\n if (this.clientContext.enableEncryption) {\n feedOptions.containerRid = this.container._rid;\n }\n try {\n const isPartitionLevelFailOverEnabled = this.clientContext.isPartitionLevelFailOverEnabled();\n const partitionKeyRangeId = await computePartitionKeyRangeId(\n diagnosticNode,\n convertToInternalPartitionKey(this.partitionKey),\n this.clientContext.partitionKeyRangeCache,\n isPartitionLevelFailOverEnabled,\n this.container,\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 diagnosticNode,\n query: undefined,\n options: feedOptions,\n partitionKey: this.partitionKey,\n partitionKeyRangeId,\n }) as Promise<any>);\n return new ChangeFeedIteratorResponse(\n response.result,\n response.result ? response.result.length : 0,\n response.code,\n response.headers,\n getEmptyCosmosDiagnostics(),\n );\n } catch (err) {\n // If any errors are encountered, throw the error.\n const errorResponse = new ErrorResponse(err.message);\n errorResponse.code = err.code;\n errorResponse.headers = err.headers;\n throw errorResponse;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ChangeFeedForPartitionKey.js","sourceRoot":"","sources":["../../../../src/client/ChangeFeed/ChangeFeedForPartitionKey.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport type { InternalChangeFeedIteratorOptions } from \"./InternalChangeFeedOptions.js\";\nimport { ChangeFeedIteratorResponse } from \"./ChangeFeedIteratorResponse.js\";\nimport { Container, Resource } from \"../../client/index.js\";\nimport { ClientContext } from \"../../ClientContext.js\";\nimport { Constants, copyObject, ResourceType, StatusCodes } from \"../../common/index.js\";\nimport { FeedOptions, Response, ErrorResponse } from \"../../request/index.js\";\nimport { ContinuationTokenForPartitionKey } from \"./ContinuationTokenForPartitionKey.js\";\nimport { ChangeFeedPullModelIterator } from \"./ChangeFeedPullModelIterator.js\";\nimport { PartitionKey, convertToInternalPartitionKey } from \"../../documents/index.js\";\nimport { DiagnosticNodeInternal } from \"../../diagnostics/DiagnosticNodeInternal.js\";\nimport { getEmptyCosmosDiagnostics, withDiagnostics } from \"../../utils/diagnostics.js\";\nimport { ChangeFeedMode } from \"./ChangeFeedMode.js\";\nimport { decryptChangeFeedResponse } from \"./changeFeedUtils.js\";\nimport { computePartitionKeyRangeId } from \"../ClientUtils.js\";\n/**\n * @hidden\n * Provides iterator for change feed for one partition key.\n *\n * Use `Items.getChangeFeedIterator()` to get an instance of the iterator.\n */\nexport class ChangeFeedForPartitionKey<T> implements ChangeFeedPullModelIterator<T> {\n private continuationToken: ContinuationTokenForPartitionKey;\n private startTime: string;\n private rId: string;\n private isInstantiated: boolean;\n private startFromNow: boolean;\n /**\n * @internal\n */\n constructor(\n private clientContext: ClientContext,\n private container: Container,\n private resourceId: string,\n private resourceLink: string,\n private partitionKey: PartitionKey,\n private changeFeedOptions: InternalChangeFeedIteratorOptions,\n ) {\n this.continuationToken = changeFeedOptions.continuationToken\n ? JSON.parse(changeFeedOptions.continuationToken)\n : undefined;\n this.isInstantiated = false;\n // startTime is used to store and specify time from which change feed should start reading new changes. StartFromNow flag is used to indicate fetching changes from now.\n if (changeFeedOptions.startFromNow) {\n this.startFromNow = true;\n } else if (changeFeedOptions.startTime) {\n this.startTime = changeFeedOptions.startTime.toUTCString();\n }\n }\n\n private async instantiateIterator(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n await this.setIteratorRid(diagnosticNode);\n if (this.clientContext.enableEncryption) {\n await this.container.checkAndInitializeEncryption();\n // returns copy of object to avoid encryption of original partition key passed\n this.partitionKey = copyObject(this.partitionKey);\n diagnosticNode.beginEncryptionDiagnostics(Constants.Encryption.DiagnosticsEncryptOperation);\n const { partitionKeyList, encryptedCount } =\n await this.container.encryptionProcessor.getEncryptedPartitionKeyValue(\n convertToInternalPartitionKey(this.partitionKey),\n );\n this.partitionKey = partitionKeyList;\n diagnosticNode.endEncryptionDiagnostics(\n Constants.Encryption.DiagnosticsEncryptOperation,\n encryptedCount,\n );\n }\n if (this.continuationToken) {\n if (!this.continuationTokenRidMatchContainerRid()) {\n throw new ErrorResponse(\"The continuation is not for the current container definition.\");\n }\n } else {\n this.continuationToken = new ContinuationTokenForPartitionKey(\n this.rId,\n this.partitionKey,\n \"\",\n );\n }\n\n this.isInstantiated = true;\n }\n\n private continuationTokenRidMatchContainerRid(): boolean {\n if (this.continuationToken.rid !== this.rId) {\n return false;\n }\n return true;\n }\n\n private async setIteratorRid(diagnosticNode: DiagnosticNodeInternal): Promise<void> {\n const { resource } = await this.container.readInternal(diagnosticNode);\n this.rId = resource._rid;\n }\n\n /**\n * Change feed is an infinite feed. hasMoreResults is always true.\n */\n get hasMoreResults(): boolean {\n return true;\n }\n\n /**\n * Gets an async iterator which will yield change feed results.\n */\n public async *getAsyncIterator(): AsyncIterable<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n do {\n const result = await this.readNext();\n yield result;\n } while (this.hasMoreResults);\n }\n\n /**\n * Returns the result of change feed from Azure Cosmos DB.\n */\n public async readNext(): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n return withDiagnostics(async (diagnosticNode: DiagnosticNodeInternal) => {\n if (!this.isInstantiated) {\n await this.instantiateIterator(diagnosticNode);\n }\n const result = await this.fetchNext(diagnosticNode);\n if (result.statusCode === StatusCodes.Ok) {\n if (this.clientContext.enableEncryption) {\n await decryptChangeFeedResponse(\n result,\n diagnosticNode,\n this.changeFeedOptions.changeFeedMode,\n this.container.encryptionProcessor,\n );\n }\n }\n return result;\n }, this.clientContext);\n }\n\n /**\n * Read feed and retrieves the next set of results in Azure Cosmos DB.\n */\n private async fetchNext(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n const response = await this.getFeedResponse(diagnosticNode);\n this.continuationToken.Continuation = response.headers[Constants.HttpHeaders.ETag];\n response.headers[Constants.HttpHeaders.ContinuationToken] = JSON.stringify(\n this.continuationToken,\n );\n return response;\n }\n\n private async getFeedResponse(\n diagnosticNode: DiagnosticNodeInternal,\n ): Promise<ChangeFeedIteratorResponse<Array<T & Resource>>> {\n const feedOptions: FeedOptions = {\n initialHeaders: {},\n useLatestVersionFeed: true,\n useAllVersionsAndDeletesFeed: false,\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.changeFeedOptions.excludedLocations) {\n feedOptions.excludedLocations = this.changeFeedOptions.excludedLocations;\n }\n\n const continuation = this.continuationToken.Continuation;\n if (continuation) {\n feedOptions.accessCondition = {\n type: Constants.HttpHeaders.IfNoneMatch,\n condition: continuation,\n };\n } else if (this.startFromNow) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfNoneMatch] =\n Constants.ChangeFeedIfNoneMatchStartFromNowHeader;\n }\n\n if (this.startTime) {\n feedOptions.initialHeaders[Constants.HttpHeaders.IfModifiedSince] = this.startTime;\n }\n if (\n this.changeFeedOptions.changeFeedMode &&\n this.changeFeedOptions.changeFeedMode === ChangeFeedMode.AllVersionsAndDeletes\n ) {\n feedOptions.useAllVersionsAndDeletesFeed = true;\n feedOptions.useLatestVersionFeed = false;\n }\n if (this.clientContext.enableEncryption) {\n feedOptions.containerRid = this.container._rid;\n }\n try {\n const isPartitionLevelFailOverEnabled = this.clientContext.isPartitionLevelFailOverEnabled();\n const partitionKeyRangeId = await computePartitionKeyRangeId(\n diagnosticNode,\n convertToInternalPartitionKey(this.partitionKey),\n this.clientContext.partitionKeyRangeCache,\n isPartitionLevelFailOverEnabled,\n this.container,\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 diagnosticNode,\n query: undefined,\n options: feedOptions,\n partitionKey: this.partitionKey,\n partitionKeyRangeId,\n }) as Promise<any>);\n return new ChangeFeedIteratorResponse(\n response.result,\n response.result ? response.result.length : 0,\n response.code,\n response.headers,\n getEmptyCosmosDiagnostics(),\n );\n } catch (err) {\n // If any errors are encountered, throw the error.\n const errorResponse = new ErrorResponse(err.message);\n errorResponse.code = err.code;\n errorResponse.headers = err.headers;\n throw errorResponse;\n }\n }\n}\n"]}
@@ -22,5 +22,10 @@ export interface ChangeFeedIteratorOptions {
22
22
  * Signals the mode in which the change feed needs to start.
23
23
  */
24
24
  changeFeedMode?: ChangeFeedMode;
25
+ /**
26
+ * Excludes one or more Azure regions for the operation.
27
+ * <p>This option is only applied when enableEndPointDiscovery is set to true.</p>
28
+ */
29
+ excludedLocations?: string[];
25
30
  }
26
31
  //# sourceMappingURL=ChangeFeedIteratorOptions.d.ts.map