@depup/mongodb 7.1.0-depup.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 (396) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +33 -0
  3. package/etc/prepare.js +12 -0
  4. package/lib/admin.js +136 -0
  5. package/lib/admin.js.map +1 -0
  6. package/lib/bson.js +85 -0
  7. package/lib/bson.js.map +1 -0
  8. package/lib/bulk/common.js +835 -0
  9. package/lib/bulk/common.js.map +1 -0
  10. package/lib/bulk/ordered.js +67 -0
  11. package/lib/bulk/ordered.js.map +1 -0
  12. package/lib/bulk/unordered.js +92 -0
  13. package/lib/bulk/unordered.js.map +1 -0
  14. package/lib/change_stream.js +513 -0
  15. package/lib/change_stream.js.map +1 -0
  16. package/lib/client-side-encryption/auto_encrypter.js +272 -0
  17. package/lib/client-side-encryption/auto_encrypter.js.map +1 -0
  18. package/lib/client-side-encryption/client_encryption.js +609 -0
  19. package/lib/client-side-encryption/client_encryption.js.map +1 -0
  20. package/lib/client-side-encryption/errors.js +138 -0
  21. package/lib/client-side-encryption/errors.js.map +1 -0
  22. package/lib/client-side-encryption/mongocryptd_manager.js +85 -0
  23. package/lib/client-side-encryption/mongocryptd_manager.js.map +1 -0
  24. package/lib/client-side-encryption/providers/aws.js +23 -0
  25. package/lib/client-side-encryption/providers/aws.js.map +1 -0
  26. package/lib/client-side-encryption/providers/azure.js +132 -0
  27. package/lib/client-side-encryption/providers/azure.js.map +1 -0
  28. package/lib/client-side-encryption/providers/gcp.js +16 -0
  29. package/lib/client-side-encryption/providers/gcp.js.map +1 -0
  30. package/lib/client-side-encryption/providers/index.js +43 -0
  31. package/lib/client-side-encryption/providers/index.js.map +1 -0
  32. package/lib/client-side-encryption/state_machine.js +427 -0
  33. package/lib/client-side-encryption/state_machine.js.map +1 -0
  34. package/lib/cmap/auth/auth_provider.js +51 -0
  35. package/lib/cmap/auth/auth_provider.js.map +1 -0
  36. package/lib/cmap/auth/aws4.js +161 -0
  37. package/lib/cmap/auth/aws4.js.map +1 -0
  38. package/lib/cmap/auth/aws_temporary_credentials.js +103 -0
  39. package/lib/cmap/auth/aws_temporary_credentials.js.map +1 -0
  40. package/lib/cmap/auth/gssapi.js +155 -0
  41. package/lib/cmap/auth/gssapi.js.map +1 -0
  42. package/lib/cmap/auth/mongo_credentials.js +169 -0
  43. package/lib/cmap/auth/mongo_credentials.js.map +1 -0
  44. package/lib/cmap/auth/mongodb_aws.js +128 -0
  45. package/lib/cmap/auth/mongodb_aws.js.map +1 -0
  46. package/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +84 -0
  47. package/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js.map +1 -0
  48. package/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +62 -0
  49. package/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js.map +1 -0
  50. package/lib/cmap/auth/mongodb_oidc/callback_workflow.js +141 -0
  51. package/lib/cmap/auth/mongodb_oidc/callback_workflow.js.map +1 -0
  52. package/lib/cmap/auth/mongodb_oidc/command_builders.js +44 -0
  53. package/lib/cmap/auth/mongodb_oidc/command_builders.js.map +1 -0
  54. package/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +39 -0
  55. package/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js.map +1 -0
  56. package/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +122 -0
  57. package/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js.map +1 -0
  58. package/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +32 -0
  59. package/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js.map +1 -0
  60. package/lib/cmap/auth/mongodb_oidc/token_cache.js +52 -0
  61. package/lib/cmap/auth/mongodb_oidc/token_cache.js.map +1 -0
  62. package/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +23 -0
  63. package/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js.map +1 -0
  64. package/lib/cmap/auth/mongodb_oidc.js +73 -0
  65. package/lib/cmap/auth/mongodb_oidc.js.map +1 -0
  66. package/lib/cmap/auth/plain.js +26 -0
  67. package/lib/cmap/auth/plain.js.map +1 -0
  68. package/lib/cmap/auth/providers.js +22 -0
  69. package/lib/cmap/auth/providers.js.map +1 -0
  70. package/lib/cmap/auth/scram.js +254 -0
  71. package/lib/cmap/auth/scram.js.map +1 -0
  72. package/lib/cmap/auth/x509.js +36 -0
  73. package/lib/cmap/auth/x509.js.map +1 -0
  74. package/lib/cmap/command_monitoring_events.js +223 -0
  75. package/lib/cmap/command_monitoring_events.js.map +1 -0
  76. package/lib/cmap/commands.js +535 -0
  77. package/lib/cmap/commands.js.map +1 -0
  78. package/lib/cmap/connect.js +381 -0
  79. package/lib/cmap/connect.js.map +1 -0
  80. package/lib/cmap/connection.js +571 -0
  81. package/lib/cmap/connection.js.map +1 -0
  82. package/lib/cmap/connection_pool.js +558 -0
  83. package/lib/cmap/connection_pool.js.map +1 -0
  84. package/lib/cmap/connection_pool_events.js +190 -0
  85. package/lib/cmap/connection_pool_events.js.map +1 -0
  86. package/lib/cmap/errors.js +108 -0
  87. package/lib/cmap/errors.js.map +1 -0
  88. package/lib/cmap/handshake/client_metadata.js +242 -0
  89. package/lib/cmap/handshake/client_metadata.js.map +1 -0
  90. package/lib/cmap/metrics.js +62 -0
  91. package/lib/cmap/metrics.js.map +1 -0
  92. package/lib/cmap/stream_description.js +70 -0
  93. package/lib/cmap/stream_description.js.map +1 -0
  94. package/lib/cmap/wire_protocol/compression.js +178 -0
  95. package/lib/cmap/wire_protocol/compression.js.map +1 -0
  96. package/lib/cmap/wire_protocol/constants.js +21 -0
  97. package/lib/cmap/wire_protocol/constants.js.map +1 -0
  98. package/lib/cmap/wire_protocol/on_data.js +111 -0
  99. package/lib/cmap/wire_protocol/on_data.js.map +1 -0
  100. package/lib/cmap/wire_protocol/on_demand/document.js +222 -0
  101. package/lib/cmap/wire_protocol/on_demand/document.js.map +1 -0
  102. package/lib/cmap/wire_protocol/responses.js +315 -0
  103. package/lib/cmap/wire_protocol/responses.js.map +1 -0
  104. package/lib/cmap/wire_protocol/shared.js +35 -0
  105. package/lib/cmap/wire_protocol/shared.js.map +1 -0
  106. package/lib/collection.js +751 -0
  107. package/lib/collection.js.map +1 -0
  108. package/lib/connection_string.js +1090 -0
  109. package/lib/connection_string.js.map +1 -0
  110. package/lib/constants.js +170 -0
  111. package/lib/constants.js.map +1 -0
  112. package/lib/cursor/abstract_cursor.js +924 -0
  113. package/lib/cursor/abstract_cursor.js.map +1 -0
  114. package/lib/cursor/aggregation_cursor.js +164 -0
  115. package/lib/cursor/aggregation_cursor.js.map +1 -0
  116. package/lib/cursor/change_stream_cursor.js +104 -0
  117. package/lib/cursor/change_stream_cursor.js.map +1 -0
  118. package/lib/cursor/client_bulk_write_cursor.js +52 -0
  119. package/lib/cursor/client_bulk_write_cursor.js.map +1 -0
  120. package/lib/cursor/explainable_cursor.js +36 -0
  121. package/lib/cursor/explainable_cursor.js.map +1 -0
  122. package/lib/cursor/find_cursor.js +399 -0
  123. package/lib/cursor/find_cursor.js.map +1 -0
  124. package/lib/cursor/list_collections_cursor.js +34 -0
  125. package/lib/cursor/list_collections_cursor.js.map +1 -0
  126. package/lib/cursor/list_indexes_cursor.js +32 -0
  127. package/lib/cursor/list_indexes_cursor.js.map +1 -0
  128. package/lib/cursor/list_search_indexes_cursor.js +14 -0
  129. package/lib/cursor/list_search_indexes_cursor.js.map +1 -0
  130. package/lib/cursor/run_command_cursor.js +94 -0
  131. package/lib/cursor/run_command_cursor.js.map +1 -0
  132. package/lib/db.js +419 -0
  133. package/lib/db.js.map +1 -0
  134. package/lib/deps.js +112 -0
  135. package/lib/deps.js.map +1 -0
  136. package/lib/encrypter.js +106 -0
  137. package/lib/encrypter.js.map +1 -0
  138. package/lib/error.js +1380 -0
  139. package/lib/error.js.map +1 -0
  140. package/lib/explain.js +59 -0
  141. package/lib/explain.js.map +1 -0
  142. package/lib/gridfs/download.js +305 -0
  143. package/lib/gridfs/download.js.map +1 -0
  144. package/lib/gridfs/index.js +164 -0
  145. package/lib/gridfs/index.js.map +1 -0
  146. package/lib/gridfs/upload.js +358 -0
  147. package/lib/gridfs/upload.js.map +1 -0
  148. package/lib/index.js +193 -0
  149. package/lib/index.js.map +1 -0
  150. package/lib/mongo_client.js +557 -0
  151. package/lib/mongo_client.js.map +1 -0
  152. package/lib/mongo_client_auth_providers.js +80 -0
  153. package/lib/mongo_client_auth_providers.js.map +1 -0
  154. package/lib/mongo_logger.js +655 -0
  155. package/lib/mongo_logger.js.map +1 -0
  156. package/lib/mongo_types.js +56 -0
  157. package/lib/mongo_types.js.map +1 -0
  158. package/lib/operations/aggregate.js +90 -0
  159. package/lib/operations/aggregate.js.map +1 -0
  160. package/lib/operations/client_bulk_write/client_bulk_write.js +51 -0
  161. package/lib/operations/client_bulk_write/client_bulk_write.js.map +1 -0
  162. package/lib/operations/client_bulk_write/command_builder.js +340 -0
  163. package/lib/operations/client_bulk_write/command_builder.js.map +1 -0
  164. package/lib/operations/client_bulk_write/common.js +3 -0
  165. package/lib/operations/client_bulk_write/common.js.map +1 -0
  166. package/lib/operations/client_bulk_write/executor.js +120 -0
  167. package/lib/operations/client_bulk_write/executor.js.map +1 -0
  168. package/lib/operations/client_bulk_write/results_merger.js +204 -0
  169. package/lib/operations/client_bulk_write/results_merger.js.map +1 -0
  170. package/lib/operations/command.js +83 -0
  171. package/lib/operations/command.js.map +1 -0
  172. package/lib/operations/count.js +45 -0
  173. package/lib/operations/count.js.map +1 -0
  174. package/lib/operations/create_collection.js +109 -0
  175. package/lib/operations/create_collection.js.map +1 -0
  176. package/lib/operations/delete.js +125 -0
  177. package/lib/operations/delete.js.map +1 -0
  178. package/lib/operations/distinct.js +61 -0
  179. package/lib/operations/distinct.js.map +1 -0
  180. package/lib/operations/drop.js +93 -0
  181. package/lib/operations/drop.js.map +1 -0
  182. package/lib/operations/end_sessions.js +34 -0
  183. package/lib/operations/end_sessions.js.map +1 -0
  184. package/lib/operations/estimated_document_count.js +41 -0
  185. package/lib/operations/estimated_document_count.js.map +1 -0
  186. package/lib/operations/execute_operation.js +239 -0
  187. package/lib/operations/execute_operation.js.map +1 -0
  188. package/lib/operations/find.js +148 -0
  189. package/lib/operations/find.js.map +1 -0
  190. package/lib/operations/find_and_modify.js +158 -0
  191. package/lib/operations/find_and_modify.js.map +1 -0
  192. package/lib/operations/get_more.js +62 -0
  193. package/lib/operations/get_more.js.map +1 -0
  194. package/lib/operations/indexes.js +186 -0
  195. package/lib/operations/indexes.js.map +1 -0
  196. package/lib/operations/insert.js +70 -0
  197. package/lib/operations/insert.js.map +1 -0
  198. package/lib/operations/kill_cursors.js +43 -0
  199. package/lib/operations/kill_cursors.js.map +1 -0
  200. package/lib/operations/list_collections.js +53 -0
  201. package/lib/operations/list_collections.js.map +1 -0
  202. package/lib/operations/list_databases.js +40 -0
  203. package/lib/operations/list_databases.js.map +1 -0
  204. package/lib/operations/operation.js +102 -0
  205. package/lib/operations/operation.js.map +1 -0
  206. package/lib/operations/profiling_level.js +43 -0
  207. package/lib/operations/profiling_level.js.map +1 -0
  208. package/lib/operations/remove_user.js +27 -0
  209. package/lib/operations/remove_user.js.map +1 -0
  210. package/lib/operations/rename.js +38 -0
  211. package/lib/operations/rename.js.map +1 -0
  212. package/lib/operations/run_command.js +47 -0
  213. package/lib/operations/run_command.js.map +1 -0
  214. package/lib/operations/search_indexes/create.js +33 -0
  215. package/lib/operations/search_indexes/create.js.map +1 -0
  216. package/lib/operations/search_indexes/drop.js +43 -0
  217. package/lib/operations/search_indexes/drop.js.map +1 -0
  218. package/lib/operations/search_indexes/update.js +35 -0
  219. package/lib/operations/search_indexes/update.js.map +1 -0
  220. package/lib/operations/set_profiling_level.js +53 -0
  221. package/lib/operations/set_profiling_level.js.map +1 -0
  222. package/lib/operations/stats.js +27 -0
  223. package/lib/operations/stats.js.map +1 -0
  224. package/lib/operations/update.js +188 -0
  225. package/lib/operations/update.js.map +1 -0
  226. package/lib/operations/validate_collection.js +37 -0
  227. package/lib/operations/validate_collection.js.map +1 -0
  228. package/lib/read_concern.js +73 -0
  229. package/lib/read_concern.js.map +1 -0
  230. package/lib/read_preference.js +191 -0
  231. package/lib/read_preference.js.map +1 -0
  232. package/lib/sdam/common.js +49 -0
  233. package/lib/sdam/common.js.map +1 -0
  234. package/lib/sdam/events.js +146 -0
  235. package/lib/sdam/events.js.map +1 -0
  236. package/lib/sdam/monitor.js +544 -0
  237. package/lib/sdam/monitor.js.map +1 -0
  238. package/lib/sdam/server.js +404 -0
  239. package/lib/sdam/server.js.map +1 -0
  240. package/lib/sdam/server_description.js +204 -0
  241. package/lib/sdam/server_description.js.map +1 -0
  242. package/lib/sdam/server_selection.js +294 -0
  243. package/lib/sdam/server_selection.js.map +1 -0
  244. package/lib/sdam/server_selection_events.js +85 -0
  245. package/lib/sdam/server_selection_events.js.map +1 -0
  246. package/lib/sdam/srv_polling.js +108 -0
  247. package/lib/sdam/srv_polling.js.map +1 -0
  248. package/lib/sdam/topology.js +652 -0
  249. package/lib/sdam/topology.js.map +1 -0
  250. package/lib/sdam/topology_description.js +383 -0
  251. package/lib/sdam/topology_description.js.map +1 -0
  252. package/lib/sessions.js +892 -0
  253. package/lib/sessions.js.map +1 -0
  254. package/lib/sort.js +103 -0
  255. package/lib/sort.js.map +1 -0
  256. package/lib/timeout.js +296 -0
  257. package/lib/timeout.js.map +1 -0
  258. package/lib/transactions.js +135 -0
  259. package/lib/transactions.js.map +1 -0
  260. package/lib/utils.js +1163 -0
  261. package/lib/utils.js.map +1 -0
  262. package/lib/write_concern.js +100 -0
  263. package/lib/write_concern.js.map +1 -0
  264. package/mongodb.d.ts +9018 -0
  265. package/package.json +197 -0
  266. package/src/admin.ts +173 -0
  267. package/src/bson.ts +149 -0
  268. package/src/bulk/common.ts +1251 -0
  269. package/src/bulk/ordered.ts +83 -0
  270. package/src/bulk/unordered.ts +115 -0
  271. package/src/change_stream.ts +1160 -0
  272. package/src/client-side-encryption/auto_encrypter.ts +469 -0
  273. package/src/client-side-encryption/client_encryption.ts +1150 -0
  274. package/src/client-side-encryption/errors.ts +144 -0
  275. package/src/client-side-encryption/mongocryptd_manager.ts +100 -0
  276. package/src/client-side-encryption/providers/aws.ts +33 -0
  277. package/src/client-side-encryption/providers/azure.ts +181 -0
  278. package/src/client-side-encryption/providers/gcp.ts +16 -0
  279. package/src/client-side-encryption/providers/index.ts +207 -0
  280. package/src/client-side-encryption/state_machine.ts +651 -0
  281. package/src/cmap/auth/auth_provider.ts +77 -0
  282. package/src/cmap/auth/aws4.ts +207 -0
  283. package/src/cmap/auth/aws_temporary_credentials.ts +129 -0
  284. package/src/cmap/auth/gssapi.ts +203 -0
  285. package/src/cmap/auth/mongo_credentials.ts +292 -0
  286. package/src/cmap/auth/mongodb_aws.ts +179 -0
  287. package/src/cmap/auth/mongodb_oidc/automated_callback_workflow.ts +88 -0
  288. package/src/cmap/auth/mongodb_oidc/azure_machine_workflow.ts +73 -0
  289. package/src/cmap/auth/mongodb_oidc/callback_workflow.ts +188 -0
  290. package/src/cmap/auth/mongodb_oidc/command_builders.ts +53 -0
  291. package/src/cmap/auth/mongodb_oidc/gcp_machine_workflow.ts +46 -0
  292. package/src/cmap/auth/mongodb_oidc/human_callback_workflow.ts +141 -0
  293. package/src/cmap/auth/mongodb_oidc/k8s_machine_workflow.ts +31 -0
  294. package/src/cmap/auth/mongodb_oidc/token_cache.ts +62 -0
  295. package/src/cmap/auth/mongodb_oidc/token_machine_workflow.ts +22 -0
  296. package/src/cmap/auth/mongodb_oidc.ts +185 -0
  297. package/src/cmap/auth/plain.ts +25 -0
  298. package/src/cmap/auth/providers.ts +22 -0
  299. package/src/cmap/auth/scram.ts +344 -0
  300. package/src/cmap/auth/x509.ts +43 -0
  301. package/src/cmap/command_monitoring_events.ts +316 -0
  302. package/src/cmap/commands.ts +788 -0
  303. package/src/cmap/connect.ts +518 -0
  304. package/src/cmap/connection.ts +931 -0
  305. package/src/cmap/connection_pool.ts +831 -0
  306. package/src/cmap/connection_pool_events.ts +300 -0
  307. package/src/cmap/errors.ts +119 -0
  308. package/src/cmap/handshake/client_metadata.ts +353 -0
  309. package/src/cmap/metrics.ts +58 -0
  310. package/src/cmap/stream_description.ts +96 -0
  311. package/src/cmap/wire_protocol/compression.ts +211 -0
  312. package/src/cmap/wire_protocol/constants.ts +17 -0
  313. package/src/cmap/wire_protocol/on_data.ts +139 -0
  314. package/src/cmap/wire_protocol/on_demand/document.ts +358 -0
  315. package/src/cmap/wire_protocol/responses.ts +393 -0
  316. package/src/cmap/wire_protocol/shared.ts +48 -0
  317. package/src/collection.ts +1314 -0
  318. package/src/connection_string.ts +1297 -0
  319. package/src/constants.ts +176 -0
  320. package/src/cursor/abstract_cursor.ts +1247 -0
  321. package/src/cursor/aggregation_cursor.ts +245 -0
  322. package/src/cursor/change_stream_cursor.ts +171 -0
  323. package/src/cursor/client_bulk_write_cursor.ts +83 -0
  324. package/src/cursor/explainable_cursor.ts +51 -0
  325. package/src/cursor/find_cursor.ts +497 -0
  326. package/src/cursor/list_collections_cursor.ts +50 -0
  327. package/src/cursor/list_indexes_cursor.ts +37 -0
  328. package/src/cursor/list_search_indexes_cursor.ts +20 -0
  329. package/src/cursor/run_command_cursor.ts +178 -0
  330. package/src/db.ts +621 -0
  331. package/src/deps.ts +227 -0
  332. package/src/encrypter.ts +127 -0
  333. package/src/error.ts +1567 -0
  334. package/src/explain.ts +124 -0
  335. package/src/gridfs/download.ts +483 -0
  336. package/src/gridfs/index.ts +264 -0
  337. package/src/gridfs/upload.ts +537 -0
  338. package/src/index.ts +633 -0
  339. package/src/mongo_client.ts +1155 -0
  340. package/src/mongo_client_auth_providers.ts +87 -0
  341. package/src/mongo_logger.ts +1081 -0
  342. package/src/mongo_types.ts +678 -0
  343. package/src/operations/aggregate.ts +153 -0
  344. package/src/operations/client_bulk_write/client_bulk_write.ts +72 -0
  345. package/src/operations/client_bulk_write/command_builder.ts +487 -0
  346. package/src/operations/client_bulk_write/common.ts +276 -0
  347. package/src/operations/client_bulk_write/executor.ts +149 -0
  348. package/src/operations/client_bulk_write/results_merger.ts +260 -0
  349. package/src/operations/command.ts +171 -0
  350. package/src/operations/count.ts +74 -0
  351. package/src/operations/create_collection.ts +218 -0
  352. package/src/operations/delete.ts +183 -0
  353. package/src/operations/distinct.ts +92 -0
  354. package/src/operations/drop.ts +130 -0
  355. package/src/operations/end_sessions.ts +44 -0
  356. package/src/operations/estimated_document_count.ts +61 -0
  357. package/src/operations/execute_operation.ts +319 -0
  358. package/src/operations/find.ts +254 -0
  359. package/src/operations/find_and_modify.ts +319 -0
  360. package/src/operations/get_more.ts +108 -0
  361. package/src/operations/indexes.ts +418 -0
  362. package/src/operations/insert.ts +108 -0
  363. package/src/operations/kill_cursors.ts +64 -0
  364. package/src/operations/list_collections.ts +108 -0
  365. package/src/operations/list_databases.ts +68 -0
  366. package/src/operations/operation.ts +181 -0
  367. package/src/operations/profiling_level.ts +46 -0
  368. package/src/operations/remove_user.ts +36 -0
  369. package/src/operations/rename.ts +60 -0
  370. package/src/operations/run_command.ts +79 -0
  371. package/src/operations/search_indexes/create.ts +56 -0
  372. package/src/operations/search_indexes/drop.ts +58 -0
  373. package/src/operations/search_indexes/update.ts +45 -0
  374. package/src/operations/set_profiling_level.ts +74 -0
  375. package/src/operations/stats.ts +37 -0
  376. package/src/operations/update.ts +318 -0
  377. package/src/operations/validate_collection.ts +50 -0
  378. package/src/read_concern.ts +88 -0
  379. package/src/read_preference.ts +256 -0
  380. package/src/sdam/common.ts +74 -0
  381. package/src/sdam/events.ts +219 -0
  382. package/src/sdam/monitor.ts +771 -0
  383. package/src/sdam/server.ts +595 -0
  384. package/src/sdam/server_description.ts +297 -0
  385. package/src/sdam/server_selection.ts +415 -0
  386. package/src/sdam/server_selection_events.ts +142 -0
  387. package/src/sdam/srv_polling.ts +146 -0
  388. package/src/sdam/topology.ts +1100 -0
  389. package/src/sdam/topology_description.ts +548 -0
  390. package/src/sessions.ts +1244 -0
  391. package/src/sort.ts +141 -0
  392. package/src/timeout.ts +405 -0
  393. package/src/transactions.ts +181 -0
  394. package/src/utils.ts +1434 -0
  395. package/src/write_concern.ts +183 -0
  396. package/tsconfig.json +46 -0
@@ -0,0 +1,571 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CryptoConnection = exports.SizedMessageTransform = exports.Connection = void 0;
4
+ exports.hasSessionSupport = hasSessionSupport;
5
+ const stream_1 = require("stream");
6
+ const timers_1 = require("timers");
7
+ const bson_1 = require("../bson");
8
+ const constants_1 = require("../constants");
9
+ const error_1 = require("../error");
10
+ const mongo_logger_1 = require("../mongo_logger");
11
+ const mongo_types_1 = require("../mongo_types");
12
+ const read_preference_1 = require("../read_preference");
13
+ const common_1 = require("../sdam/common");
14
+ const sessions_1 = require("../sessions");
15
+ const timeout_1 = require("../timeout");
16
+ const utils_1 = require("../utils");
17
+ const command_monitoring_events_1 = require("./command_monitoring_events");
18
+ const commands_1 = require("./commands");
19
+ const stream_description_1 = require("./stream_description");
20
+ const compression_1 = require("./wire_protocol/compression");
21
+ const on_data_1 = require("./wire_protocol/on_data");
22
+ const responses_1 = require("./wire_protocol/responses");
23
+ const shared_1 = require("./wire_protocol/shared");
24
+ /** @internal */
25
+ function hasSessionSupport(conn) {
26
+ const description = conn.description;
27
+ return description.logicalSessionTimeoutMinutes != null;
28
+ }
29
+ function streamIdentifier(stream, options) {
30
+ if (options.proxyHost) {
31
+ // If proxy options are specified, the properties of `stream` itself
32
+ // will not accurately reflect what endpoint this is connected to.
33
+ return options.hostAddress.toString();
34
+ }
35
+ const { remoteAddress, remotePort } = stream;
36
+ if (typeof remoteAddress === 'string' && typeof remotePort === 'number') {
37
+ return utils_1.HostAddress.fromHostPort(remoteAddress, remotePort).toString();
38
+ }
39
+ return (0, utils_1.uuidV4)().toString('hex');
40
+ }
41
+ /** @internal */
42
+ class Connection extends mongo_types_1.TypedEventEmitter {
43
+ /** @event */
44
+ static { this.COMMAND_STARTED = constants_1.COMMAND_STARTED; }
45
+ /** @event */
46
+ static { this.COMMAND_SUCCEEDED = constants_1.COMMAND_SUCCEEDED; }
47
+ /** @event */
48
+ static { this.COMMAND_FAILED = constants_1.COMMAND_FAILED; }
49
+ /** @event */
50
+ static { this.CLUSTER_TIME_RECEIVED = constants_1.CLUSTER_TIME_RECEIVED; }
51
+ /** @event */
52
+ static { this.CLOSE = constants_1.CLOSE; }
53
+ /** @event */
54
+ static { this.PINNED = constants_1.PINNED; }
55
+ /** @event */
56
+ static { this.UNPINNED = constants_1.UNPINNED; }
57
+ constructor(stream, options) {
58
+ super();
59
+ this.lastHelloMS = -1;
60
+ this.helloOk = false;
61
+ this.delayedTimeoutId = null;
62
+ /** Indicates that the connection (including underlying TCP socket) has been closed. */
63
+ this.closed = false;
64
+ this.clusterTime = null;
65
+ this.error = null;
66
+ this.dataEvents = null;
67
+ this.on('error', utils_1.noop);
68
+ this.socket = stream;
69
+ this.id = options.id;
70
+ this.address = streamIdentifier(stream, options);
71
+ this.socketTimeoutMS = options.socketTimeoutMS ?? 0;
72
+ this.monitorCommands = options.monitorCommands;
73
+ this.serverApi = options.serverApi;
74
+ this.mongoLogger = options.mongoLogger;
75
+ this.established = false;
76
+ this.description = new stream_description_1.StreamDescription(this.address, options);
77
+ this.generation = options.generation;
78
+ this.lastUseTime = (0, utils_1.processTimeMS)();
79
+ this.messageStream = this.socket
80
+ .on('error', this.onSocketError.bind(this))
81
+ .pipe(new SizedMessageTransform({ connection: this }))
82
+ .on('error', this.onTransformError.bind(this));
83
+ this.socket.on('close', this.onClose.bind(this));
84
+ this.socket.on('timeout', this.onTimeout.bind(this));
85
+ this.messageStream.pause();
86
+ }
87
+ get hello() {
88
+ return this.description.hello;
89
+ }
90
+ // the `connect` method stores the result of the handshake hello on the connection
91
+ set hello(response) {
92
+ this.description.receiveResponse(response);
93
+ Object.freeze(this.description);
94
+ }
95
+ get serviceId() {
96
+ return this.hello?.serviceId;
97
+ }
98
+ get loadBalanced() {
99
+ return this.description.loadBalanced;
100
+ }
101
+ get idleTime() {
102
+ return (0, utils_1.calculateDurationInMs)(this.lastUseTime);
103
+ }
104
+ get hasSessionSupport() {
105
+ return this.description.logicalSessionTimeoutMinutes != null;
106
+ }
107
+ get supportsOpMsg() {
108
+ return (this.description != null &&
109
+ // TODO(NODE-6672,NODE-6287): This guard is primarily for maxWireVersion = 0
110
+ (0, utils_1.maxWireVersion)(this) >= 6 &&
111
+ !this.description.__nodejs_mock_server__);
112
+ }
113
+ get shouldEmitAndLogCommand() {
114
+ return ((this.monitorCommands ||
115
+ (this.established &&
116
+ !this.authContext?.reauthenticating &&
117
+ this.mongoLogger?.willLog(mongo_logger_1.MongoLoggableComponent.COMMAND, mongo_logger_1.SeverityLevel.DEBUG))) ??
118
+ false);
119
+ }
120
+ markAvailable() {
121
+ this.lastUseTime = (0, utils_1.processTimeMS)();
122
+ }
123
+ onSocketError(cause) {
124
+ this.onError(new error_1.MongoNetworkError(cause.message, { cause }));
125
+ }
126
+ onTransformError(error) {
127
+ this.onError(error);
128
+ }
129
+ onError(error) {
130
+ this.cleanup(error);
131
+ }
132
+ onClose() {
133
+ const message = `connection ${this.id} to ${this.address} closed`;
134
+ this.cleanup(new error_1.MongoNetworkError(message));
135
+ }
136
+ onTimeout() {
137
+ this.delayedTimeoutId = (0, timers_1.setTimeout)(() => {
138
+ const message = `connection ${this.id} to ${this.address} timed out`;
139
+ const beforeHandshake = this.hello == null;
140
+ this.cleanup(new error_1.MongoNetworkTimeoutError(message, { beforeHandshake }));
141
+ }, 1).unref(); // No need for this timer to hold the event loop open
142
+ }
143
+ destroy() {
144
+ if (this.closed) {
145
+ return;
146
+ }
147
+ // load balanced mode requires that these listeners remain on the connection
148
+ // after cleanup on timeouts, errors or close so we remove them before calling
149
+ // cleanup.
150
+ this.removeAllListeners(Connection.PINNED);
151
+ this.removeAllListeners(Connection.UNPINNED);
152
+ const message = `connection ${this.id} to ${this.address} closed`;
153
+ this.cleanup(new error_1.MongoNetworkError(message));
154
+ }
155
+ /**
156
+ * A method that cleans up the connection. When `force` is true, this method
157
+ * forcibly destroys the socket.
158
+ *
159
+ * If an error is provided, any in-flight operations will be closed with the error.
160
+ *
161
+ * This method does nothing if the connection is already closed.
162
+ */
163
+ cleanup(error) {
164
+ if (this.closed) {
165
+ return;
166
+ }
167
+ this.socket.destroy();
168
+ this.error = error;
169
+ this.dataEvents?.throw(error).then(undefined, utils_1.squashError);
170
+ this.closed = true;
171
+ this.emit(Connection.CLOSE);
172
+ }
173
+ prepareCommand(db, command, options) {
174
+ let cmd = { ...command };
175
+ const readPreference = (0, shared_1.getReadPreference)(options);
176
+ const session = options?.session;
177
+ let clusterTime = this.clusterTime;
178
+ if (this.serverApi) {
179
+ const { version, strict, deprecationErrors } = this.serverApi;
180
+ cmd.apiVersion = version;
181
+ if (strict != null)
182
+ cmd.apiStrict = strict;
183
+ if (deprecationErrors != null)
184
+ cmd.apiDeprecationErrors = deprecationErrors;
185
+ }
186
+ if (this.hasSessionSupport && session) {
187
+ if (session.clusterTime &&
188
+ clusterTime &&
189
+ session.clusterTime.clusterTime.greaterThan(clusterTime.clusterTime)) {
190
+ clusterTime = session.clusterTime;
191
+ }
192
+ const sessionError = (0, sessions_1.applySession)(session, cmd, options);
193
+ if (sessionError)
194
+ throw sessionError;
195
+ }
196
+ else if (session?.explicit) {
197
+ throw new error_1.MongoCompatibilityError('Current topology does not support sessions');
198
+ }
199
+ // if we have a known cluster time, gossip it
200
+ if (clusterTime) {
201
+ cmd.$clusterTime = clusterTime;
202
+ }
203
+ // For standalone, drivers MUST NOT set $readPreference.
204
+ if (this.description.type !== common_1.ServerType.Standalone) {
205
+ if (!(0, shared_1.isSharded)(this) &&
206
+ !this.description.loadBalanced &&
207
+ this.supportsOpMsg &&
208
+ options.directConnection === true &&
209
+ readPreference?.mode === 'primary') {
210
+ // For mongos and load balancers with 'primary' mode, drivers MUST NOT set $readPreference.
211
+ // For all other types with a direct connection, if the read preference is 'primary'
212
+ // (driver sets 'primary' as default if no read preference is configured),
213
+ // the $readPreference MUST be set to 'primaryPreferred'
214
+ // to ensure that any server type can handle the request.
215
+ cmd.$readPreference = read_preference_1.ReadPreference.primaryPreferred.toJSON();
216
+ }
217
+ else if ((0, shared_1.isSharded)(this) && !this.supportsOpMsg && readPreference?.mode !== 'primary') {
218
+ // When sending a read operation via OP_QUERY and the $readPreference modifier,
219
+ // the query MUST be provided using the $query modifier.
220
+ cmd = {
221
+ $query: cmd,
222
+ $readPreference: readPreference.toJSON()
223
+ };
224
+ }
225
+ else if (readPreference?.mode !== 'primary') {
226
+ // For mode 'primary', drivers MUST NOT set $readPreference.
227
+ // For all other read preference modes (i.e. 'secondary', 'primaryPreferred', ...),
228
+ // drivers MUST set $readPreference
229
+ cmd.$readPreference = readPreference.toJSON();
230
+ }
231
+ }
232
+ const commandOptions = {
233
+ numberToSkip: 0,
234
+ numberToReturn: -1,
235
+ checkKeys: false,
236
+ // This value is not overridable
237
+ secondaryOk: readPreference.secondaryOk(),
238
+ ...options
239
+ };
240
+ options.timeoutContext?.addMaxTimeMSToCommand(cmd, options);
241
+ const message = this.supportsOpMsg
242
+ ? new commands_1.OpMsgRequest(db, cmd, commandOptions)
243
+ : new commands_1.OpQueryRequest(db, cmd, commandOptions);
244
+ return message;
245
+ }
246
+ async *sendWire(message, options, responseType) {
247
+ this.throwIfAborted();
248
+ const timeout = options.socketTimeoutMS ??
249
+ options?.timeoutContext?.getSocketTimeoutMS() ??
250
+ this.socketTimeoutMS;
251
+ this.socket.setTimeout(timeout);
252
+ try {
253
+ await this.writeCommand(message, {
254
+ agreedCompressor: this.description.compressor ?? 'none',
255
+ zlibCompressionLevel: this.description.zlibCompressionLevel,
256
+ timeoutContext: options.timeoutContext,
257
+ signal: options.signal
258
+ });
259
+ if (message.moreToCome) {
260
+ yield responses_1.MongoDBResponse.empty;
261
+ return;
262
+ }
263
+ this.throwIfAborted();
264
+ if (options.timeoutContext?.csotEnabled() &&
265
+ options.timeoutContext.minRoundTripTime != null &&
266
+ options.timeoutContext.remainingTimeMS < options.timeoutContext.minRoundTripTime) {
267
+ throw new error_1.MongoOperationTimeoutError('Server roundtrip time is greater than the time remaining');
268
+ }
269
+ for await (const response of this.readMany(options)) {
270
+ this.socket.setTimeout(0);
271
+ const bson = response.parse();
272
+ const document = (responseType ?? responses_1.MongoDBResponse).make(bson);
273
+ yield document;
274
+ this.throwIfAborted();
275
+ this.socket.setTimeout(timeout);
276
+ }
277
+ }
278
+ finally {
279
+ this.socket.setTimeout(0);
280
+ }
281
+ }
282
+ async *sendCommand(ns, command, options, responseType) {
283
+ options?.signal?.throwIfAborted();
284
+ const message = this.prepareCommand(ns.db, command, options);
285
+ let started = 0;
286
+ if (this.shouldEmitAndLogCommand) {
287
+ started = (0, utils_1.processTimeMS)();
288
+ this.emitAndLogCommand(this.monitorCommands, Connection.COMMAND_STARTED, message.databaseName, this.established, new command_monitoring_events_1.CommandStartedEvent(this, message, this.description.serverConnectionId));
289
+ }
290
+ // If `documentsReturnedIn` not set or raw is not enabled, use input bson options
291
+ // Otherwise, support raw flag. Raw only works for cursors that hardcode firstBatch/nextBatch fields
292
+ const bsonOptions = options.documentsReturnedIn == null || !options.raw
293
+ ? options
294
+ : {
295
+ ...options,
296
+ raw: false,
297
+ fieldsAsRaw: { [options.documentsReturnedIn]: true }
298
+ };
299
+ /** MongoDBResponse instance or subclass */
300
+ let document = undefined;
301
+ /** Cached result of a toObject call */
302
+ let object = undefined;
303
+ try {
304
+ this.throwIfAborted();
305
+ for await (document of this.sendWire(message, options, responseType)) {
306
+ object = undefined;
307
+ if (options.session != null) {
308
+ (0, sessions_1.updateSessionFromResponse)(options.session, document);
309
+ }
310
+ if (document.$clusterTime) {
311
+ this.clusterTime = document.$clusterTime;
312
+ this.emit(Connection.CLUSTER_TIME_RECEIVED, document.$clusterTime);
313
+ }
314
+ if (document.ok === 0) {
315
+ if (options.timeoutContext?.csotEnabled() && document.isMaxTimeExpiredError) {
316
+ throw new error_1.MongoOperationTimeoutError('Server reported a timeout error', {
317
+ cause: new error_1.MongoServerError((object ??= document.toObject(bsonOptions)))
318
+ });
319
+ }
320
+ throw new error_1.MongoServerError((object ??= document.toObject(bsonOptions)));
321
+ }
322
+ if (this.shouldEmitAndLogCommand) {
323
+ this.emitAndLogCommand(this.monitorCommands, Connection.COMMAND_SUCCEEDED, message.databaseName, this.established, new command_monitoring_events_1.CommandSucceededEvent(this, message, message.moreToCome ? { ok: 1 } : (object ??= document.toObject(bsonOptions)), started, this.description.serverConnectionId));
324
+ }
325
+ if (responseType == null) {
326
+ yield (object ??= document.toObject(bsonOptions));
327
+ }
328
+ else {
329
+ yield document;
330
+ }
331
+ this.throwIfAborted();
332
+ }
333
+ }
334
+ catch (error) {
335
+ if (this.shouldEmitAndLogCommand) {
336
+ this.emitAndLogCommand(this.monitorCommands, Connection.COMMAND_FAILED, message.databaseName, this.established, new command_monitoring_events_1.CommandFailedEvent(this, message, error, started, this.description.serverConnectionId));
337
+ }
338
+ throw error;
339
+ }
340
+ }
341
+ async command(ns, command, options = {}, responseType) {
342
+ this.throwIfAborted();
343
+ options.signal?.throwIfAborted();
344
+ for await (const document of this.sendCommand(ns, command, options, responseType)) {
345
+ if (options.timeoutContext?.csotEnabled()) {
346
+ if (responses_1.MongoDBResponse.is(document)) {
347
+ if (document.isMaxTimeExpiredError) {
348
+ throw new error_1.MongoOperationTimeoutError('Server reported a timeout error', {
349
+ cause: new error_1.MongoServerError(document.toObject())
350
+ });
351
+ }
352
+ }
353
+ else {
354
+ if ((Array.isArray(document?.writeErrors) &&
355
+ document.writeErrors.some(error => error?.code === error_1.MONGODB_ERROR_CODES.MaxTimeMSExpired)) ||
356
+ document?.writeConcernError?.code === error_1.MONGODB_ERROR_CODES.MaxTimeMSExpired) {
357
+ throw new error_1.MongoOperationTimeoutError('Server reported a timeout error', {
358
+ cause: new error_1.MongoServerError(document)
359
+ });
360
+ }
361
+ }
362
+ }
363
+ return document;
364
+ }
365
+ throw new error_1.MongoUnexpectedServerResponseError('Unable to get response from server');
366
+ }
367
+ exhaustCommand(ns, command, options, replyListener) {
368
+ const exhaustLoop = async () => {
369
+ this.throwIfAborted();
370
+ for await (const reply of this.sendCommand(ns, command, options)) {
371
+ replyListener(undefined, reply);
372
+ this.throwIfAborted();
373
+ }
374
+ throw new error_1.MongoUnexpectedServerResponseError('Server ended moreToCome unexpectedly');
375
+ };
376
+ exhaustLoop().then(undefined, replyListener);
377
+ }
378
+ throwIfAborted() {
379
+ if (this.error)
380
+ throw this.error;
381
+ }
382
+ /**
383
+ * @internal
384
+ *
385
+ * Writes an OP_MSG or OP_QUERY request to the socket, optionally compressing the command. This method
386
+ * waits until the socket's buffer has emptied (the Nodejs socket `drain` event has fired).
387
+ */
388
+ async writeCommand(command, options) {
389
+ const finalCommand = options.agreedCompressor === 'none' || !commands_1.OpCompressedRequest.canCompress(command)
390
+ ? command
391
+ : new commands_1.OpCompressedRequest(command, {
392
+ agreedCompressor: options.agreedCompressor ?? 'none',
393
+ zlibCompressionLevel: options.zlibCompressionLevel ?? 0
394
+ });
395
+ const buffer = Buffer.concat(await finalCommand.toBin());
396
+ if (options.timeoutContext?.csotEnabled()) {
397
+ if (options.timeoutContext.minRoundTripTime != null &&
398
+ options.timeoutContext.remainingTimeMS < options.timeoutContext.minRoundTripTime) {
399
+ throw new error_1.MongoOperationTimeoutError('Server roundtrip time is greater than the time remaining');
400
+ }
401
+ }
402
+ try {
403
+ if (this.socket.write(buffer))
404
+ return;
405
+ }
406
+ catch (writeError) {
407
+ const networkError = new error_1.MongoNetworkError('unexpected error writing to socket', {
408
+ cause: writeError
409
+ });
410
+ this.onError(networkError);
411
+ throw networkError;
412
+ }
413
+ const drainEvent = (0, utils_1.once)(this.socket, 'drain', options);
414
+ const timeout = options?.timeoutContext?.timeoutForSocketWrite;
415
+ const drained = timeout ? Promise.race([drainEvent, timeout]) : drainEvent;
416
+ try {
417
+ return await drained;
418
+ }
419
+ catch (writeError) {
420
+ if (timeout_1.TimeoutError.is(writeError)) {
421
+ const timeoutError = new error_1.MongoOperationTimeoutError('Timed out at socket write');
422
+ this.onError(timeoutError);
423
+ throw timeoutError;
424
+ }
425
+ else if (writeError === options.signal?.reason) {
426
+ this.onError(writeError);
427
+ }
428
+ throw writeError;
429
+ }
430
+ finally {
431
+ timeout?.clear();
432
+ }
433
+ }
434
+ /**
435
+ * @internal
436
+ *
437
+ * Returns an async generator that yields full wire protocol messages from the underlying socket. This function
438
+ * yields messages until `moreToCome` is false or not present in a response, or the caller cancels the request
439
+ * by calling `return` on the generator.
440
+ *
441
+ * Note that `for-await` loops call `return` automatically when the loop is exited.
442
+ */
443
+ async *readMany(options) {
444
+ try {
445
+ this.dataEvents = (0, on_data_1.onData)(this.messageStream, options);
446
+ this.messageStream.resume();
447
+ for await (const message of this.dataEvents) {
448
+ const response = await (0, compression_1.decompressResponse)(message);
449
+ yield response;
450
+ if (!response.moreToCome) {
451
+ return;
452
+ }
453
+ }
454
+ }
455
+ catch (readError) {
456
+ if (timeout_1.TimeoutError.is(readError)) {
457
+ const timeoutError = new error_1.MongoOperationTimeoutError(`Timed out during socket read (${readError.duration}ms)`);
458
+ this.dataEvents = null;
459
+ this.onError(timeoutError);
460
+ throw timeoutError;
461
+ }
462
+ else if (readError === options.signal?.reason) {
463
+ this.onError(readError);
464
+ }
465
+ throw readError;
466
+ }
467
+ finally {
468
+ this.dataEvents = null;
469
+ this.messageStream.pause();
470
+ }
471
+ }
472
+ }
473
+ exports.Connection = Connection;
474
+ /** @internal */
475
+ class SizedMessageTransform extends stream_1.Transform {
476
+ constructor({ connection }) {
477
+ super({ writableObjectMode: false, readableObjectMode: true });
478
+ this.bufferPool = new utils_1.BufferPool();
479
+ this.connection = connection;
480
+ }
481
+ _transform(chunk, encoding, callback) {
482
+ if (this.connection.delayedTimeoutId != null) {
483
+ (0, timers_1.clearTimeout)(this.connection.delayedTimeoutId);
484
+ this.connection.delayedTimeoutId = null;
485
+ }
486
+ this.bufferPool.append(chunk);
487
+ while (this.bufferPool.length) {
488
+ // While there are any bytes in the buffer
489
+ // Try to fetch a size from the top 4 bytes
490
+ const sizeOfMessage = this.bufferPool.getInt32();
491
+ if (sizeOfMessage == null) {
492
+ // Not even an int32 worth of data. Stop the loop, we need more chunks.
493
+ break;
494
+ }
495
+ if (sizeOfMessage < 0) {
496
+ // The size in the message has a negative value, this is probably corruption, throw:
497
+ return callback(new error_1.MongoParseError(`Message size cannot be negative: ${sizeOfMessage}`));
498
+ }
499
+ if (sizeOfMessage > this.bufferPool.length) {
500
+ // We do not have enough bytes to make a sizeOfMessage chunk
501
+ break;
502
+ }
503
+ // Add a message to the stream
504
+ const message = this.bufferPool.read(sizeOfMessage);
505
+ if (!this.push(message)) {
506
+ // We only subscribe to data events so we should never get backpressure
507
+ // if we do, we do not have the handling for it.
508
+ return callback(new error_1.MongoRuntimeError(`SizedMessageTransform does not support backpressure`));
509
+ }
510
+ }
511
+ callback();
512
+ }
513
+ }
514
+ exports.SizedMessageTransform = SizedMessageTransform;
515
+ /** @internal */
516
+ class CryptoConnection extends Connection {
517
+ constructor(stream, options) {
518
+ super(stream, options);
519
+ this.autoEncrypter = options.autoEncrypter;
520
+ }
521
+ async command(ns, cmd, options, responseType) {
522
+ const { autoEncrypter } = this;
523
+ if (!autoEncrypter) {
524
+ throw new error_1.MongoRuntimeError('No AutoEncrypter available for encryption');
525
+ }
526
+ const serverWireVersion = (0, utils_1.maxWireVersion)(this);
527
+ if (serverWireVersion === 0) {
528
+ // This means the initial handshake hasn't happened yet
529
+ return await super.command(ns, cmd, options, responseType);
530
+ }
531
+ // Save sort or indexKeys based on the command being run
532
+ // the encrypt API serializes our JS objects to BSON to pass to the native code layer
533
+ // and then deserializes the encrypted result, the protocol level components
534
+ // of the command (ex. sort) are then converted to JS objects potentially losing
535
+ // import key order information. These fields are never encrypted so we can save the values
536
+ // from before the encryption and replace them after encryption has been performed
537
+ const sort = cmd.find || cmd.findAndModify ? cmd.sort : null;
538
+ const indexKeys = cmd.createIndexes
539
+ ? cmd.indexes.map((index) => index.key)
540
+ : null;
541
+ const encrypted = await autoEncrypter.encrypt(ns.toString(), cmd, options);
542
+ // Replace the saved values
543
+ if (sort != null && (cmd.find || cmd.findAndModify)) {
544
+ encrypted.sort = sort;
545
+ }
546
+ if (indexKeys != null && cmd.createIndexes) {
547
+ for (const [offset, index] of indexKeys.entries()) {
548
+ // @ts-expect-error `encrypted` is a generic "command", but we've narrowed for only `createIndexes` commands here
549
+ encrypted.indexes[offset].key = index;
550
+ }
551
+ }
552
+ const encryptedResponse = await super.command(ns, encrypted, options,
553
+ // Eventually we want to require `responseType` which means we would satisfy `T` as the return type.
554
+ // In the meantime, we want encryptedResponse to always be _at least_ a MongoDBResponse if not a more specific subclass
555
+ // So that we can ensure we have access to the on-demand APIs for decorate response
556
+ responseType ?? responses_1.MongoDBResponse);
557
+ const result = await autoEncrypter.decrypt(encryptedResponse.toBytes(), options);
558
+ const decryptedResponse = responseType?.make(result) ?? (0, bson_1.deserialize)(result, options);
559
+ if (autoEncrypter[constants_1.kDecorateResult]) {
560
+ if (responseType == null) {
561
+ (0, utils_1.decorateDecryptionResult)(decryptedResponse, encryptedResponse.toObject(), true);
562
+ }
563
+ else if (decryptedResponse instanceof responses_1.CursorResponse) {
564
+ decryptedResponse.encryptedResponse = encryptedResponse;
565
+ }
566
+ }
567
+ return decryptedResponse;
568
+ }
569
+ }
570
+ exports.CryptoConnection = CryptoConnection;
571
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/cmap/connection.ts"],"names":[],"mappings":"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"}