@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,609 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClientEncryption = void 0;
4
+ exports.autoSelectSocketOptions = autoSelectSocketOptions;
5
+ const bson_1 = require("../bson");
6
+ const deps_1 = require("../deps");
7
+ const timeout_1 = require("../timeout");
8
+ const utils_1 = require("../utils");
9
+ const errors_1 = require("./errors");
10
+ const index_1 = require("./providers/index");
11
+ const state_machine_1 = require("./state_machine");
12
+ /**
13
+ * @public
14
+ * The public interface for explicit in-use encryption
15
+ */
16
+ class ClientEncryption {
17
+ /** @internal */
18
+ static getMongoCrypt() {
19
+ const encryption = (0, deps_1.getMongoDBClientEncryption)();
20
+ if ('kModuleError' in encryption) {
21
+ throw encryption.kModuleError;
22
+ }
23
+ return encryption.MongoCrypt;
24
+ }
25
+ /**
26
+ * Create a new encryption instance
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * new ClientEncryption(mongoClient, {
31
+ * keyVaultNamespace: 'client.encryption',
32
+ * kmsProviders: {
33
+ * local: {
34
+ * key: masterKey // The master key used for encryption/decryption. A 96-byte long Buffer
35
+ * }
36
+ * }
37
+ * });
38
+ * ```
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * new ClientEncryption(mongoClient, {
43
+ * keyVaultNamespace: 'client.encryption',
44
+ * kmsProviders: {
45
+ * aws: {
46
+ * accessKeyId: AWS_ACCESS_KEY,
47
+ * secretAccessKey: AWS_SECRET_KEY
48
+ * }
49
+ * }
50
+ * });
51
+ * ```
52
+ */
53
+ constructor(client, options) {
54
+ this._client = client;
55
+ this._proxyOptions = options.proxyOptions ?? {};
56
+ this._tlsOptions = options.tlsOptions ?? {};
57
+ this._kmsProviders = options.kmsProviders || {};
58
+ const { timeoutMS } = (0, utils_1.resolveTimeoutOptions)(client, options);
59
+ this._timeoutMS = timeoutMS;
60
+ this._credentialProviders = options.credentialProviders;
61
+ if (options.credentialProviders?.aws && !(0, index_1.isEmptyCredentials)('aws', this._kmsProviders)) {
62
+ throw new errors_1.MongoCryptInvalidArgumentError('Can only provide a custom AWS credential provider when the state machine is configured for automatic AWS credential fetching');
63
+ }
64
+ if (options.keyVaultNamespace == null) {
65
+ throw new errors_1.MongoCryptInvalidArgumentError('Missing required option `keyVaultNamespace`');
66
+ }
67
+ const mongoCryptOptions = {
68
+ ...options,
69
+ kmsProviders: !Buffer.isBuffer(this._kmsProviders)
70
+ ? (0, bson_1.serialize)(this._kmsProviders)
71
+ : this._kmsProviders,
72
+ errorWrapper: errors_1.defaultErrorWrapper
73
+ };
74
+ this._keyVaultNamespace = options.keyVaultNamespace;
75
+ this._keyVaultClient = options.keyVaultClient || client;
76
+ const MongoCrypt = ClientEncryption.getMongoCrypt();
77
+ this._mongoCrypt = new MongoCrypt(mongoCryptOptions);
78
+ }
79
+ /**
80
+ * Creates a data key used for explicit encryption and inserts it into the key vault namespace
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * // Using async/await to create a local key
85
+ * const dataKeyId = await clientEncryption.createDataKey('local');
86
+ * ```
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * // Using async/await to create an aws key
91
+ * const dataKeyId = await clientEncryption.createDataKey('aws', {
92
+ * masterKey: {
93
+ * region: 'us-east-1',
94
+ * key: 'xxxxxxxxxxxxxx' // CMK ARN here
95
+ * }
96
+ * });
97
+ * ```
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * // Using async/await to create an aws key with a keyAltName
102
+ * const dataKeyId = await clientEncryption.createDataKey('aws', {
103
+ * masterKey: {
104
+ * region: 'us-east-1',
105
+ * key: 'xxxxxxxxxxxxxx' // CMK ARN here
106
+ * },
107
+ * keyAltNames: [ 'mySpecialKey' ]
108
+ * });
109
+ * ```
110
+ */
111
+ async createDataKey(provider, options = {}) {
112
+ if (options.keyAltNames && !Array.isArray(options.keyAltNames)) {
113
+ throw new errors_1.MongoCryptInvalidArgumentError(`Option "keyAltNames" must be an array of strings, but was of type ${typeof options.keyAltNames}.`);
114
+ }
115
+ let keyAltNames = undefined;
116
+ if (options.keyAltNames && options.keyAltNames.length > 0) {
117
+ keyAltNames = options.keyAltNames.map((keyAltName, i) => {
118
+ if (typeof keyAltName !== 'string') {
119
+ throw new errors_1.MongoCryptInvalidArgumentError(`Option "keyAltNames" must be an array of strings, but item at index ${i} was of type ${typeof keyAltName}`);
120
+ }
121
+ return (0, bson_1.serialize)({ keyAltName });
122
+ });
123
+ }
124
+ let keyMaterial = undefined;
125
+ if (options.keyMaterial) {
126
+ keyMaterial = (0, bson_1.serialize)({ keyMaterial: options.keyMaterial });
127
+ }
128
+ const dataKeyBson = (0, bson_1.serialize)({
129
+ provider,
130
+ ...options.masterKey
131
+ });
132
+ const context = this._mongoCrypt.makeDataKeyContext(dataKeyBson, {
133
+ keyAltNames,
134
+ keyMaterial
135
+ });
136
+ const stateMachine = new state_machine_1.StateMachine({
137
+ proxyOptions: this._proxyOptions,
138
+ tlsOptions: this._tlsOptions,
139
+ socketOptions: autoSelectSocketOptions(this._client.s.options)
140
+ });
141
+ const timeoutContext = options?.timeoutContext ??
142
+ timeout_1.TimeoutContext.create((0, utils_1.resolveTimeoutOptions)(this._client, { timeoutMS: this._timeoutMS }));
143
+ const dataKey = (0, bson_1.deserialize)(await stateMachine.execute(this, context, { timeoutContext }));
144
+ const { db: dbName, collection: collectionName } = utils_1.MongoDBCollectionNamespace.fromString(this._keyVaultNamespace);
145
+ const { insertedId } = await this._keyVaultClient
146
+ .db(dbName)
147
+ .collection(collectionName)
148
+ .insertOne(dataKey, {
149
+ writeConcern: { w: 'majority' },
150
+ timeoutMS: timeoutContext?.csotEnabled()
151
+ ? timeoutContext?.getRemainingTimeMSOrThrow()
152
+ : undefined
153
+ });
154
+ return insertedId;
155
+ }
156
+ /**
157
+ * Searches the keyvault for any data keys matching the provided filter. If there are matches, rewrapManyDataKey then attempts to re-wrap the data keys using the provided options.
158
+ *
159
+ * If no matches are found, then no bulk write is performed.
160
+ *
161
+ * @example
162
+ * ```ts
163
+ * // rewrapping all data data keys (using a filter that matches all documents)
164
+ * const filter = {};
165
+ *
166
+ * const result = await clientEncryption.rewrapManyDataKey(filter);
167
+ * if (result.bulkWriteResult != null) {
168
+ * // keys were re-wrapped, results will be available in the bulkWrite object.
169
+ * }
170
+ * ```
171
+ *
172
+ * @example
173
+ * ```ts
174
+ * // attempting to rewrap all data keys with no matches
175
+ * const filter = { _id: new Binary() } // assume _id matches no documents in the database
176
+ * const result = await clientEncryption.rewrapManyDataKey(filter);
177
+ *
178
+ * if (result.bulkWriteResult == null) {
179
+ * // no keys matched, `bulkWriteResult` does not exist on the result object
180
+ * }
181
+ * ```
182
+ */
183
+ async rewrapManyDataKey(filter, options) {
184
+ let keyEncryptionKeyBson = undefined;
185
+ if (options) {
186
+ const keyEncryptionKey = Object.assign({ provider: options.provider }, options.masterKey);
187
+ keyEncryptionKeyBson = (0, bson_1.serialize)(keyEncryptionKey);
188
+ }
189
+ const filterBson = (0, bson_1.serialize)(filter);
190
+ const context = this._mongoCrypt.makeRewrapManyDataKeyContext(filterBson, keyEncryptionKeyBson);
191
+ const stateMachine = new state_machine_1.StateMachine({
192
+ proxyOptions: this._proxyOptions,
193
+ tlsOptions: this._tlsOptions,
194
+ socketOptions: autoSelectSocketOptions(this._client.s.options)
195
+ });
196
+ const timeoutContext = timeout_1.TimeoutContext.create((0, utils_1.resolveTimeoutOptions)(this._client, { timeoutMS: this._timeoutMS }));
197
+ const { v: dataKeys } = (0, bson_1.deserialize)(await stateMachine.execute(this, context, { timeoutContext }));
198
+ if (dataKeys.length === 0) {
199
+ return {};
200
+ }
201
+ const { db: dbName, collection: collectionName } = utils_1.MongoDBCollectionNamespace.fromString(this._keyVaultNamespace);
202
+ const replacements = dataKeys.map((key) => ({
203
+ updateOne: {
204
+ filter: { _id: key._id },
205
+ update: {
206
+ $set: {
207
+ masterKey: key.masterKey,
208
+ keyMaterial: key.keyMaterial
209
+ },
210
+ $currentDate: {
211
+ updateDate: true
212
+ }
213
+ }
214
+ }
215
+ }));
216
+ const result = await this._keyVaultClient
217
+ .db(dbName)
218
+ .collection(collectionName)
219
+ .bulkWrite(replacements, {
220
+ writeConcern: { w: 'majority' },
221
+ timeoutMS: timeoutContext.csotEnabled() ? timeoutContext?.remainingTimeMS : undefined
222
+ });
223
+ return { bulkWriteResult: result };
224
+ }
225
+ /**
226
+ * Deletes the key with the provided id from the keyvault, if it exists.
227
+ *
228
+ * @example
229
+ * ```ts
230
+ * // delete a key by _id
231
+ * const id = new Binary(); // id is a bson binary subtype 4 object
232
+ * const { deletedCount } = await clientEncryption.deleteKey(id);
233
+ *
234
+ * if (deletedCount != null && deletedCount > 0) {
235
+ * // successful deletion
236
+ * }
237
+ * ```
238
+ *
239
+ */
240
+ async deleteKey(_id) {
241
+ const { db: dbName, collection: collectionName } = utils_1.MongoDBCollectionNamespace.fromString(this._keyVaultNamespace);
242
+ return await this._keyVaultClient
243
+ .db(dbName)
244
+ .collection(collectionName)
245
+ .deleteOne({ _id }, { writeConcern: { w: 'majority' }, timeoutMS: this._timeoutMS });
246
+ }
247
+ /**
248
+ * Finds all the keys currently stored in the keyvault.
249
+ *
250
+ * This method will not throw.
251
+ *
252
+ * @returns a FindCursor over all keys in the keyvault.
253
+ * @example
254
+ * ```ts
255
+ * // fetching all keys
256
+ * const keys = await clientEncryption.getKeys().toArray();
257
+ * ```
258
+ */
259
+ getKeys() {
260
+ const { db: dbName, collection: collectionName } = utils_1.MongoDBCollectionNamespace.fromString(this._keyVaultNamespace);
261
+ return this._keyVaultClient
262
+ .db(dbName)
263
+ .collection(collectionName)
264
+ .find({}, { readConcern: { level: 'majority' }, timeoutMS: this._timeoutMS });
265
+ }
266
+ /**
267
+ * Finds a key in the keyvault with the specified _id.
268
+ *
269
+ * Returns a promise that either resolves to a {@link DataKey} if a document matches the key or null if no documents
270
+ * match the id. The promise rejects with an error if an error is thrown.
271
+ * @example
272
+ * ```ts
273
+ * // getting a key by id
274
+ * const id = new Binary(); // id is a bson binary subtype 4 object
275
+ * const key = await clientEncryption.getKey(id);
276
+ * if (!key) {
277
+ * // key is null if there was no matching key
278
+ * }
279
+ * ```
280
+ */
281
+ async getKey(_id) {
282
+ const { db: dbName, collection: collectionName } = utils_1.MongoDBCollectionNamespace.fromString(this._keyVaultNamespace);
283
+ return await this._keyVaultClient
284
+ .db(dbName)
285
+ .collection(collectionName)
286
+ .findOne({ _id }, { readConcern: { level: 'majority' }, timeoutMS: this._timeoutMS });
287
+ }
288
+ /**
289
+ * Finds a key in the keyvault which has the specified keyAltName.
290
+ *
291
+ * @param keyAltName - a keyAltName to search for a key
292
+ * @returns Returns a promise that either resolves to a {@link DataKey} if a document matches the key or null if no documents
293
+ * match the keyAltName. The promise rejects with an error if an error is thrown.
294
+ * @example
295
+ * ```ts
296
+ * // get a key by alt name
297
+ * const keyAltName = 'keyAltName';
298
+ * const key = await clientEncryption.getKeyByAltName(keyAltName);
299
+ * if (!key) {
300
+ * // key is null if there is no matching key
301
+ * }
302
+ * ```
303
+ */
304
+ async getKeyByAltName(keyAltName) {
305
+ const { db: dbName, collection: collectionName } = utils_1.MongoDBCollectionNamespace.fromString(this._keyVaultNamespace);
306
+ return await this._keyVaultClient
307
+ .db(dbName)
308
+ .collection(collectionName)
309
+ .findOne({ keyAltNames: keyAltName }, { readConcern: { level: 'majority' }, timeoutMS: this._timeoutMS });
310
+ }
311
+ /**
312
+ * Adds a keyAltName to a key identified by the provided _id.
313
+ *
314
+ * This method resolves to/returns the *old* key value (prior to adding the new altKeyName).
315
+ *
316
+ * @param _id - The id of the document to update.
317
+ * @param keyAltName - a keyAltName to search for a key
318
+ * @returns Returns a promise that either resolves to a {@link DataKey} if a document matches the key or null if no documents
319
+ * match the id. The promise rejects with an error if an error is thrown.
320
+ * @example
321
+ * ```ts
322
+ * // adding an keyAltName to a data key
323
+ * const id = new Binary(); // id is a bson binary subtype 4 object
324
+ * const keyAltName = 'keyAltName';
325
+ * const oldKey = await clientEncryption.addKeyAltName(id, keyAltName);
326
+ * if (!oldKey) {
327
+ * // null is returned if there is no matching document with an id matching the supplied id
328
+ * }
329
+ * ```
330
+ */
331
+ async addKeyAltName(_id, keyAltName) {
332
+ const { db: dbName, collection: collectionName } = utils_1.MongoDBCollectionNamespace.fromString(this._keyVaultNamespace);
333
+ const value = await this._keyVaultClient
334
+ .db(dbName)
335
+ .collection(collectionName)
336
+ .findOneAndUpdate({ _id }, { $addToSet: { keyAltNames: keyAltName } }, { writeConcern: { w: 'majority' }, returnDocument: 'before', timeoutMS: this._timeoutMS });
337
+ return value;
338
+ }
339
+ /**
340
+ * Adds a keyAltName to a key identified by the provided _id.
341
+ *
342
+ * This method resolves to/returns the *old* key value (prior to removing the new altKeyName).
343
+ *
344
+ * If the removed keyAltName is the last keyAltName for that key, the `altKeyNames` property is unset from the document.
345
+ *
346
+ * @param _id - The id of the document to update.
347
+ * @param keyAltName - a keyAltName to search for a key
348
+ * @returns Returns a promise that either resolves to a {@link DataKey} if a document matches the key or null if no documents
349
+ * match the id. The promise rejects with an error if an error is thrown.
350
+ * @example
351
+ * ```ts
352
+ * // removing a key alt name from a data key
353
+ * const id = new Binary(); // id is a bson binary subtype 4 object
354
+ * const keyAltName = 'keyAltName';
355
+ * const oldKey = await clientEncryption.removeKeyAltName(id, keyAltName);
356
+ *
357
+ * if (!oldKey) {
358
+ * // null is returned if there is no matching document with an id matching the supplied id
359
+ * }
360
+ * ```
361
+ */
362
+ async removeKeyAltName(_id, keyAltName) {
363
+ const { db: dbName, collection: collectionName } = utils_1.MongoDBCollectionNamespace.fromString(this._keyVaultNamespace);
364
+ const pipeline = [
365
+ {
366
+ $set: {
367
+ keyAltNames: {
368
+ $cond: [
369
+ {
370
+ $eq: ['$keyAltNames', [keyAltName]]
371
+ },
372
+ '$$REMOVE',
373
+ {
374
+ $filter: {
375
+ input: '$keyAltNames',
376
+ cond: {
377
+ $ne: ['$$this', keyAltName]
378
+ }
379
+ }
380
+ }
381
+ ]
382
+ }
383
+ }
384
+ }
385
+ ];
386
+ const value = await this._keyVaultClient
387
+ .db(dbName)
388
+ .collection(collectionName)
389
+ .findOneAndUpdate({ _id }, pipeline, {
390
+ writeConcern: { w: 'majority' },
391
+ returnDocument: 'before',
392
+ timeoutMS: this._timeoutMS
393
+ });
394
+ return value;
395
+ }
396
+ /**
397
+ * A convenience method for creating an encrypted collection.
398
+ * This method will create data keys for any encryptedFields that do not have a `keyId` defined
399
+ * and then create a new collection with the full set of encryptedFields.
400
+ *
401
+ * @param db - A Node.js driver Db object with which to create the collection
402
+ * @param name - The name of the collection to be created
403
+ * @param options - Options for createDataKey and for createCollection
404
+ * @returns created collection and generated encryptedFields
405
+ * @throws MongoCryptCreateDataKeyError - If part way through the process a createDataKey invocation fails, an error will be rejected that has the partial `encryptedFields` that were created.
406
+ * @throws MongoCryptCreateEncryptedCollectionError - If creating the collection fails, an error will be rejected that has the entire `encryptedFields` that were created.
407
+ */
408
+ async createEncryptedCollection(db, name, options) {
409
+ const { provider, masterKey, createCollectionOptions: { encryptedFields: { ...encryptedFields }, ...createCollectionOptions } } = options;
410
+ const timeoutContext = this._timeoutMS != null
411
+ ? timeout_1.TimeoutContext.create((0, utils_1.resolveTimeoutOptions)(this._client, { timeoutMS: this._timeoutMS }))
412
+ : undefined;
413
+ if (Array.isArray(encryptedFields.fields)) {
414
+ const createDataKeyPromises = encryptedFields.fields.map(async (field) => field == null || typeof field !== 'object' || field.keyId != null
415
+ ? field
416
+ : {
417
+ ...field,
418
+ keyId: await this.createDataKey(provider, {
419
+ masterKey,
420
+ // clone the timeoutContext
421
+ // in order to avoid sharing the same timeout for server selection and connection checkout across different concurrent operations
422
+ timeoutContext: timeoutContext?.csotEnabled() ? timeoutContext?.clone() : undefined
423
+ })
424
+ });
425
+ const createDataKeyResolutions = await Promise.allSettled(createDataKeyPromises);
426
+ encryptedFields.fields = createDataKeyResolutions.map((resolution, index) => resolution.status === 'fulfilled' ? resolution.value : encryptedFields.fields[index]);
427
+ const rejection = createDataKeyResolutions.find((result) => result.status === 'rejected');
428
+ if (rejection != null) {
429
+ throw new errors_1.MongoCryptCreateDataKeyError(encryptedFields, { cause: rejection.reason });
430
+ }
431
+ }
432
+ try {
433
+ const collection = await db.createCollection(name, {
434
+ ...createCollectionOptions,
435
+ encryptedFields,
436
+ timeoutMS: timeoutContext?.csotEnabled()
437
+ ? timeoutContext?.getRemainingTimeMSOrThrow()
438
+ : undefined
439
+ });
440
+ return { collection, encryptedFields };
441
+ }
442
+ catch (cause) {
443
+ throw new errors_1.MongoCryptCreateEncryptedCollectionError(encryptedFields, { cause });
444
+ }
445
+ }
446
+ /**
447
+ * Explicitly encrypt a provided value. Note that either `options.keyId` or `options.keyAltName` must
448
+ * be specified. Specifying both `options.keyId` and `options.keyAltName` is considered an error.
449
+ *
450
+ * @param value - The value that you wish to serialize. Must be of a type that can be serialized into BSON
451
+ * @param options -
452
+ * @returns a Promise that either resolves with the encrypted value, or rejects with an error.
453
+ *
454
+ * @example
455
+ * ```ts
456
+ * // Encryption with async/await api
457
+ * async function encryptMyData(value) {
458
+ * const keyId = await clientEncryption.createDataKey('local');
459
+ * return clientEncryption.encrypt(value, { keyId, algorithm: 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic' });
460
+ * }
461
+ * ```
462
+ *
463
+ * @example
464
+ * ```ts
465
+ * // Encryption using a keyAltName
466
+ * async function encryptMyData(value) {
467
+ * await clientEncryption.createDataKey('local', { keyAltNames: 'mySpecialKey' });
468
+ * return clientEncryption.encrypt(value, { keyAltName: 'mySpecialKey', algorithm: 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic' });
469
+ * }
470
+ * ```
471
+ */
472
+ async encrypt(value, options) {
473
+ return await this._encrypt(value, false, options);
474
+ }
475
+ /**
476
+ * Encrypts a Match Expression or Aggregate Expression to query a range index.
477
+ *
478
+ * Only supported when queryType is "range" and algorithm is "Range".
479
+ *
480
+ * @param expression - a BSON document of one of the following forms:
481
+ * 1. A Match Expression of this form:
482
+ * `{$and: [{<field>: {$gt: <value1>}}, {<field>: {$lt: <value2> }}]}`
483
+ * 2. An Aggregate Expression of this form:
484
+ * `{$and: [{$gt: [<fieldpath>, <value1>]}, {$lt: [<fieldpath>, <value2>]}]}`
485
+ *
486
+ * `$gt` may also be `$gte`. `$lt` may also be `$lte`.
487
+ *
488
+ * @param options -
489
+ * @returns Returns a Promise that either resolves with the encrypted value or rejects with an error.
490
+ */
491
+ async encryptExpression(expression, options) {
492
+ return await this._encrypt(expression, true, options);
493
+ }
494
+ /**
495
+ * Explicitly decrypt a provided encrypted value
496
+ *
497
+ * @param value - An encrypted value
498
+ * @returns a Promise that either resolves with the decrypted value, or rejects with an error
499
+ *
500
+ * @example
501
+ * ```ts
502
+ * // Decrypting value with async/await API
503
+ * async function decryptMyValue(value) {
504
+ * return clientEncryption.decrypt(value);
505
+ * }
506
+ * ```
507
+ */
508
+ async decrypt(value) {
509
+ const valueBuffer = (0, bson_1.serialize)({ v: value });
510
+ const context = this._mongoCrypt.makeExplicitDecryptionContext(valueBuffer);
511
+ const stateMachine = new state_machine_1.StateMachine({
512
+ proxyOptions: this._proxyOptions,
513
+ tlsOptions: this._tlsOptions,
514
+ socketOptions: autoSelectSocketOptions(this._client.s.options)
515
+ });
516
+ const timeoutContext = this._timeoutMS != null
517
+ ? timeout_1.TimeoutContext.create((0, utils_1.resolveTimeoutOptions)(this._client, { timeoutMS: this._timeoutMS }))
518
+ : undefined;
519
+ const { v } = (0, bson_1.deserialize)(await stateMachine.execute(this, context, { timeoutContext }));
520
+ return v;
521
+ }
522
+ /**
523
+ * @internal
524
+ * Ask the user for KMS credentials.
525
+ *
526
+ * This returns anything that looks like the kmsProviders original input
527
+ * option. It can be empty, and any provider specified here will override
528
+ * the original ones.
529
+ */
530
+ async askForKMSCredentials() {
531
+ return await (0, index_1.refreshKMSCredentials)(this._kmsProviders, this._credentialProviders);
532
+ }
533
+ static get libmongocryptVersion() {
534
+ return ClientEncryption.getMongoCrypt().libmongocryptVersion;
535
+ }
536
+ /**
537
+ * @internal
538
+ * A helper that perform explicit encryption of values and expressions.
539
+ * Explicitly encrypt a provided value. Note that either `options.keyId` or `options.keyAltName` must
540
+ * be specified. Specifying both `options.keyId` and `options.keyAltName` is considered an error.
541
+ *
542
+ * @param value - The value that you wish to encrypt. Must be of a type that can be serialized into BSON
543
+ * @param expressionMode - a boolean that indicates whether or not to encrypt the value as an expression
544
+ * @param options - options to pass to encrypt
545
+ * @returns the raw result of the call to stateMachine.execute(). When expressionMode is set to true, the return
546
+ * value will be a bson document. When false, the value will be a BSON Binary.
547
+ *
548
+ */
549
+ async _encrypt(value, expressionMode, options) {
550
+ const { algorithm, keyId, keyAltName, contentionFactor, queryType, rangeOptions, textOptions } = options;
551
+ const contextOptions = {
552
+ expressionMode,
553
+ algorithm
554
+ };
555
+ if (keyId) {
556
+ contextOptions.keyId = keyId.buffer;
557
+ }
558
+ if (keyAltName) {
559
+ if (keyId) {
560
+ throw new errors_1.MongoCryptInvalidArgumentError(`"options" cannot contain both "keyId" and "keyAltName"`);
561
+ }
562
+ if (typeof keyAltName !== 'string') {
563
+ throw new errors_1.MongoCryptInvalidArgumentError(`"options.keyAltName" must be of type string, but was of type ${typeof keyAltName}`);
564
+ }
565
+ contextOptions.keyAltName = (0, bson_1.serialize)({ keyAltName });
566
+ }
567
+ if (typeof contentionFactor === 'number' || typeof contentionFactor === 'bigint') {
568
+ contextOptions.contentionFactor = contentionFactor;
569
+ }
570
+ if (typeof queryType === 'string') {
571
+ contextOptions.queryType = queryType;
572
+ }
573
+ if (typeof rangeOptions === 'object') {
574
+ contextOptions.rangeOptions = (0, bson_1.serialize)(rangeOptions);
575
+ }
576
+ if (typeof textOptions === 'object') {
577
+ contextOptions.textOptions = (0, bson_1.serialize)(textOptions);
578
+ }
579
+ const valueBuffer = (0, bson_1.serialize)({ v: value });
580
+ const stateMachine = new state_machine_1.StateMachine({
581
+ proxyOptions: this._proxyOptions,
582
+ tlsOptions: this._tlsOptions,
583
+ socketOptions: autoSelectSocketOptions(this._client.s.options)
584
+ });
585
+ const context = this._mongoCrypt.makeExplicitEncryptionContext(valueBuffer, contextOptions);
586
+ const timeoutContext = this._timeoutMS != null
587
+ ? timeout_1.TimeoutContext.create((0, utils_1.resolveTimeoutOptions)(this._client, { timeoutMS: this._timeoutMS }))
588
+ : undefined;
589
+ const { v } = (0, bson_1.deserialize)(await stateMachine.execute(this, context, { timeoutContext }));
590
+ return v;
591
+ }
592
+ }
593
+ exports.ClientEncryption = ClientEncryption;
594
+ /**
595
+ * Get the socket options from the client.
596
+ * @param baseOptions - The mongo client options.
597
+ * @returns ClientEncryptionSocketOptions
598
+ */
599
+ function autoSelectSocketOptions(baseOptions) {
600
+ const options = { autoSelectFamily: true };
601
+ if ('autoSelectFamily' in baseOptions) {
602
+ options.autoSelectFamily = baseOptions.autoSelectFamily;
603
+ }
604
+ if ('autoSelectFamilyAttemptTimeout' in baseOptions) {
605
+ options.autoSelectFamilyAttemptTimeout = baseOptions.autoSelectFamilyAttemptTimeout;
606
+ }
607
+ return options;
608
+ }
609
+ //# sourceMappingURL=client_encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client_encryption.js","sourceRoot":"","sources":["../../src/client-side-encryption/client_encryption.ts"],"names":[],"mappings":"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"}