@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,469 @@
1
+ import { type MongoCrypt, type MongoCryptOptions } from 'mongodb-client-encryption';
2
+ import * as net from 'net';
3
+
4
+ import { deserialize, type Document, serialize } from '../bson';
5
+ import { type CommandOptions, type ProxyOptions } from '../cmap/connection';
6
+ import { kDecorateResult } from '../constants';
7
+ import { getMongoDBClientEncryption } from '../deps';
8
+ import { MongoRuntimeError } from '../error';
9
+ import { MongoClient, type MongoClientOptions } from '../mongo_client';
10
+ import { type Abortable } from '../mongo_types';
11
+ import { MongoDBCollectionNamespace } from '../utils';
12
+ import { autoSelectSocketOptions } from './client_encryption';
13
+ import { defaultErrorWrapper, MongoCryptInvalidArgumentError } from './errors';
14
+ import { MongocryptdManager } from './mongocryptd_manager';
15
+ import {
16
+ type CredentialProviders,
17
+ isEmptyCredentials,
18
+ type KMSProviders,
19
+ refreshKMSCredentials
20
+ } from './providers';
21
+ import { type CSFLEKMSTlsOptions, StateMachine } from './state_machine';
22
+
23
+ /** @public */
24
+ export interface AutoEncryptionOptions {
25
+ /** @internal client for metadata lookups */
26
+ metadataClient?: MongoClient;
27
+ /** A `MongoClient` used to fetch keys from a key vault */
28
+ keyVaultClient?: MongoClient;
29
+ /** The namespace where keys are stored in the key vault */
30
+ keyVaultNamespace?: string;
31
+ /** Configuration options that are used by specific KMS providers during key generation, encryption, and decryption. */
32
+ kmsProviders?: KMSProviders;
33
+ /** Configuration options for custom credential providers. */
34
+ credentialProviders?: CredentialProviders;
35
+ /**
36
+ * A map of namespaces to a local JSON schema for encryption
37
+ *
38
+ * **NOTE**: Supplying options.schemaMap provides more security than relying on JSON Schemas obtained from the server.
39
+ * It protects against a malicious server advertising a false JSON Schema, which could trick the client into sending decrypted data that should be encrypted.
40
+ * Schemas supplied in the schemaMap only apply to configuring automatic encryption for Client-Side Field Level Encryption.
41
+ * Other validation rules in the JSON schema will not be enforced by the driver and will result in an error.
42
+ */
43
+ schemaMap?: Document;
44
+ /** Supply a schema for the encrypted fields in the document */
45
+ encryptedFieldsMap?: Document;
46
+ /** Allows the user to bypass auto encryption, maintaining implicit decryption */
47
+ bypassAutoEncryption?: boolean;
48
+ /** Allows users to bypass query analysis */
49
+ bypassQueryAnalysis?: boolean;
50
+ /**
51
+ * Sets the expiration time for the DEK in the cache in milliseconds. Defaults to 60000. 0 means no timeout.
52
+ */
53
+ keyExpirationMS?: number;
54
+ options?: {
55
+ /** An optional hook to catch logging messages from the underlying encryption engine */
56
+ logger?: (level: AutoEncryptionLoggerLevel, message: string) => void;
57
+ };
58
+ extraOptions?: {
59
+ /**
60
+ * A local process the driver communicates with to determine how to encrypt values in a command.
61
+ * Defaults to "mongodb://%2Fvar%2Fmongocryptd.sock" if domain sockets are available or "mongodb://localhost:27020" otherwise
62
+ */
63
+ mongocryptdURI?: string;
64
+ /** If true, autoEncryption will not attempt to spawn a mongocryptd before connecting */
65
+ mongocryptdBypassSpawn?: boolean;
66
+ /** The path to the mongocryptd executable on the system */
67
+ mongocryptdSpawnPath?: `${string}mongocryptd${'.exe' | ''}`;
68
+ /** Command line arguments to use when auto-spawning a mongocryptd */
69
+ mongocryptdSpawnArgs?: string[];
70
+ /**
71
+ * Full path to a MongoDB Crypt shared library to be used (instead of mongocryptd).
72
+ *
73
+ * This needs to be the path to the file itself, not a directory.
74
+ * It can be an absolute or relative path. If the path is relative and
75
+ * its first component is `$ORIGIN`, it will be replaced by the directory
76
+ * containing the mongodb-client-encryption native addon file. Otherwise,
77
+ * the path will be interpreted relative to the current working directory.
78
+ *
79
+ * Currently, loading different MongoDB Crypt shared library files from different
80
+ * MongoClients in the same process is not supported.
81
+ *
82
+ * If this option is provided and no MongoDB Crypt shared library could be loaded
83
+ * from the specified location, creating the MongoClient will fail.
84
+ *
85
+ * If this option is not provided and `cryptSharedLibRequired` is not specified,
86
+ * the AutoEncrypter will attempt to spawn and/or use mongocryptd according
87
+ * to the mongocryptd-specific `extraOptions` options.
88
+ *
89
+ * Specifying a path prevents mongocryptd from being used as a fallback.
90
+ *
91
+ * Requires the MongoDB Crypt shared library, available in MongoDB 6.0 or higher.
92
+ */
93
+ cryptSharedLibPath?: `${string}mongo_crypt_v${number}.${'so' | 'dll' | 'dylib'}`;
94
+ /**
95
+ * If specified, never use mongocryptd and instead fail when the MongoDB Crypt
96
+ * shared library could not be loaded.
97
+ *
98
+ * This is always true when `cryptSharedLibPath` is specified.
99
+ *
100
+ * Requires the MongoDB Crypt shared library, available in MongoDB 6.0 or higher.
101
+ */
102
+ cryptSharedLibRequired?: boolean;
103
+ /**
104
+ * Search paths for a MongoDB Crypt shared library to be used (instead of mongocryptd)
105
+ * Only for driver testing!
106
+ * @internal
107
+ */
108
+ cryptSharedLibSearchPaths?: string[];
109
+ };
110
+ proxyOptions?: ProxyOptions;
111
+ /** The TLS options to use connecting to the KMS provider */
112
+ tlsOptions?: CSFLEKMSTlsOptions;
113
+ }
114
+
115
+ /**
116
+ * @public
117
+ *
118
+ * Extra options related to the mongocryptd process
119
+ * \* _Available in MongoDB 6.0 or higher._
120
+ */
121
+ export type AutoEncryptionExtraOptions = NonNullable<AutoEncryptionOptions['extraOptions']>;
122
+
123
+ /** @public */
124
+ export const AutoEncryptionLoggerLevel = Object.freeze({
125
+ FatalError: 0,
126
+ Error: 1,
127
+ Warning: 2,
128
+ Info: 3,
129
+ Trace: 4
130
+ } as const);
131
+
132
+ /**
133
+ * @public
134
+ * The level of severity of the log message
135
+ *
136
+ * | Value | Level |
137
+ * |-------|-------|
138
+ * | 0 | Fatal Error |
139
+ * | 1 | Error |
140
+ * | 2 | Warning |
141
+ * | 3 | Info |
142
+ * | 4 | Trace |
143
+ */
144
+ export type AutoEncryptionLoggerLevel =
145
+ (typeof AutoEncryptionLoggerLevel)[keyof typeof AutoEncryptionLoggerLevel];
146
+
147
+ /**
148
+ * @internal An internal class to be used by the driver for auto encryption
149
+ * **NOTE**: Not meant to be instantiated directly, this is for internal use only.
150
+ */
151
+ export class AutoEncrypter {
152
+ _client: MongoClient;
153
+ _bypassEncryption: boolean;
154
+ _keyVaultNamespace: string;
155
+ _keyVaultClient: MongoClient;
156
+ _metaDataClient: MongoClient;
157
+ _proxyOptions: ProxyOptions;
158
+ _tlsOptions: CSFLEKMSTlsOptions;
159
+ _kmsProviders: KMSProviders;
160
+ _bypassMongocryptdAndCryptShared: boolean;
161
+ _contextCounter: number;
162
+ _credentialProviders?: CredentialProviders;
163
+
164
+ _mongocryptdManager?: MongocryptdManager;
165
+ _mongocryptdClient?: MongoClient;
166
+
167
+ /** @internal */
168
+ _mongocrypt: MongoCrypt;
169
+
170
+ /**
171
+ * Used by devtools to enable decorating decryption results.
172
+ *
173
+ * When set and enabled, `decrypt` will automatically recursively
174
+ * traverse a decrypted document and if a field has been decrypted,
175
+ * it will mark it as decrypted. Compass uses this to determine which
176
+ * fields were decrypted.
177
+ */
178
+ [kDecorateResult] = false;
179
+
180
+ /** @internal */
181
+ static getMongoCrypt(): typeof MongoCrypt {
182
+ const encryption = getMongoDBClientEncryption();
183
+ if ('kModuleError' in encryption) {
184
+ throw encryption.kModuleError;
185
+ }
186
+ return encryption.MongoCrypt;
187
+ }
188
+
189
+ /**
190
+ * Create an AutoEncrypter
191
+ *
192
+ * **Note**: Do not instantiate this class directly. Rather, supply the relevant options to a MongoClient
193
+ *
194
+ * **Note**: Supplying `options.schemaMap` provides more security than relying on JSON Schemas obtained from the server.
195
+ * It protects against a malicious server advertising a false JSON Schema, which could trick the client into sending unencrypted data that should be encrypted.
196
+ * Schemas supplied in the schemaMap only apply to configuring automatic encryption for Client-Side Field Level Encryption.
197
+ * Other validation rules in the JSON schema will not be enforced by the driver and will result in an error.
198
+ *
199
+ * @example <caption>Create an AutoEncrypter that makes use of mongocryptd</caption>
200
+ * ```ts
201
+ * // Enabling autoEncryption via a MongoClient using mongocryptd
202
+ * const { MongoClient } = require('mongodb');
203
+ * const client = new MongoClient(URL, {
204
+ * autoEncryption: {
205
+ * kmsProviders: {
206
+ * aws: {
207
+ * accessKeyId: AWS_ACCESS_KEY,
208
+ * secretAccessKey: AWS_SECRET_KEY
209
+ * }
210
+ * }
211
+ * }
212
+ * });
213
+ * ```
214
+ *
215
+ * await client.connect();
216
+ * // From here on, the client will be encrypting / decrypting automatically
217
+ * @example <caption>Create an AutoEncrypter that makes use of libmongocrypt's CSFLE shared library</caption>
218
+ * ```ts
219
+ * // Enabling autoEncryption via a MongoClient using CSFLE shared library
220
+ * const { MongoClient } = require('mongodb');
221
+ * const client = new MongoClient(URL, {
222
+ * autoEncryption: {
223
+ * kmsProviders: {
224
+ * aws: {}
225
+ * },
226
+ * extraOptions: {
227
+ * cryptSharedLibPath: '/path/to/local/crypt/shared/lib',
228
+ * cryptSharedLibRequired: true
229
+ * }
230
+ * }
231
+ * });
232
+ * ```
233
+ *
234
+ * await client.connect();
235
+ * // From here on, the client will be encrypting / decrypting automatically
236
+ */
237
+ constructor(client: MongoClient, options: AutoEncryptionOptions) {
238
+ this._client = client;
239
+ this._bypassEncryption = options.bypassAutoEncryption === true;
240
+
241
+ this._keyVaultNamespace = options.keyVaultNamespace || 'admin.datakeys';
242
+ this._keyVaultClient = options.keyVaultClient || client;
243
+ this._metaDataClient = options.metadataClient || client;
244
+ this._proxyOptions = options.proxyOptions || {};
245
+ this._tlsOptions = options.tlsOptions || {};
246
+ this._kmsProviders = options.kmsProviders || {};
247
+ this._credentialProviders = options.credentialProviders;
248
+
249
+ if (options.credentialProviders?.aws && !isEmptyCredentials('aws', this._kmsProviders)) {
250
+ throw new MongoCryptInvalidArgumentError(
251
+ 'Can only provide a custom AWS credential provider when the state machine is configured for automatic AWS credential fetching'
252
+ );
253
+ }
254
+
255
+ const mongoCryptOptions: MongoCryptOptions = {
256
+ errorWrapper: defaultErrorWrapper
257
+ };
258
+ if (options.schemaMap) {
259
+ mongoCryptOptions.schemaMap = Buffer.isBuffer(options.schemaMap)
260
+ ? options.schemaMap
261
+ : (serialize(options.schemaMap) as Buffer);
262
+ }
263
+
264
+ if (options.encryptedFieldsMap) {
265
+ mongoCryptOptions.encryptedFieldsMap = Buffer.isBuffer(options.encryptedFieldsMap)
266
+ ? options.encryptedFieldsMap
267
+ : (serialize(options.encryptedFieldsMap) as Buffer);
268
+ }
269
+
270
+ mongoCryptOptions.kmsProviders = !Buffer.isBuffer(this._kmsProviders)
271
+ ? (serialize(this._kmsProviders) as Buffer)
272
+ : this._kmsProviders;
273
+
274
+ if (options.options?.logger) {
275
+ mongoCryptOptions.logger = options.options.logger;
276
+ }
277
+
278
+ if (options.extraOptions && options.extraOptions.cryptSharedLibPath) {
279
+ mongoCryptOptions.cryptSharedLibPath = options.extraOptions.cryptSharedLibPath;
280
+ }
281
+
282
+ if (options.bypassQueryAnalysis) {
283
+ mongoCryptOptions.bypassQueryAnalysis = options.bypassQueryAnalysis;
284
+ }
285
+
286
+ if (options.keyExpirationMS != null) {
287
+ mongoCryptOptions.keyExpirationMS = options.keyExpirationMS;
288
+ }
289
+
290
+ this._bypassMongocryptdAndCryptShared = this._bypassEncryption || !!options.bypassQueryAnalysis;
291
+
292
+ if (options.extraOptions && options.extraOptions.cryptSharedLibSearchPaths) {
293
+ // Only for driver testing
294
+ mongoCryptOptions.cryptSharedLibSearchPaths = options.extraOptions.cryptSharedLibSearchPaths;
295
+ } else if (!this._bypassMongocryptdAndCryptShared) {
296
+ mongoCryptOptions.cryptSharedLibSearchPaths = ['$SYSTEM'];
297
+ }
298
+
299
+ const MongoCrypt = AutoEncrypter.getMongoCrypt();
300
+ this._mongocrypt = new MongoCrypt(mongoCryptOptions);
301
+ this._contextCounter = 0;
302
+
303
+ if (
304
+ options.extraOptions &&
305
+ options.extraOptions.cryptSharedLibRequired &&
306
+ !this.cryptSharedLibVersionInfo
307
+ ) {
308
+ throw new MongoCryptInvalidArgumentError(
309
+ '`cryptSharedLibRequired` set but no crypt_shared library loaded'
310
+ );
311
+ }
312
+
313
+ // Only instantiate mongocryptd manager/client once we know for sure
314
+ // that we are not using the CSFLE shared library.
315
+ if (!this._bypassMongocryptdAndCryptShared && !this.cryptSharedLibVersionInfo) {
316
+ this._mongocryptdManager = new MongocryptdManager(options.extraOptions);
317
+ const clientOptions: MongoClientOptions = {
318
+ serverSelectionTimeoutMS: 10000
319
+ };
320
+
321
+ if (
322
+ (options.extraOptions == null || typeof options.extraOptions.mongocryptdURI !== 'string') &&
323
+ !net.getDefaultAutoSelectFamily
324
+ ) {
325
+ // Only set family if autoSelectFamily options are not supported.
326
+ clientOptions.family = 4;
327
+ }
328
+
329
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
330
+ // @ts-ignore: TS complains as this always returns true on versions where it is present.
331
+ if (net.getDefaultAutoSelectFamily) {
332
+ // AutoEncrypter is made inside of MongoClient constructor while options are being parsed,
333
+ // we do not have access to the options that are in progress.
334
+ // TODO(NODE-6449): AutoEncrypter does not use client options for autoSelectFamily
335
+ Object.assign(clientOptions, autoSelectSocketOptions(this._client.s?.options ?? {}));
336
+ }
337
+
338
+ this._mongocryptdClient = new MongoClient(this._mongocryptdManager.uri, clientOptions);
339
+ }
340
+ }
341
+
342
+ /**
343
+ * Initializes the auto encrypter by spawning a mongocryptd and connecting to it.
344
+ *
345
+ * This function is a no-op when bypassSpawn is set or the crypt shared library is used.
346
+ */
347
+ async init(): Promise<MongoClient | void> {
348
+ if (this._bypassMongocryptdAndCryptShared || this.cryptSharedLibVersionInfo) {
349
+ return;
350
+ }
351
+ if (!this._mongocryptdManager) {
352
+ throw new MongoRuntimeError(
353
+ 'Reached impossible state: mongocryptdManager is undefined when neither bypassSpawn nor the shared lib are specified.'
354
+ );
355
+ }
356
+ if (!this._mongocryptdClient) {
357
+ throw new MongoRuntimeError(
358
+ 'Reached impossible state: mongocryptdClient is undefined when neither bypassSpawn nor the shared lib are specified.'
359
+ );
360
+ }
361
+
362
+ if (!this._mongocryptdManager.bypassSpawn) {
363
+ await this._mongocryptdManager.spawn();
364
+ }
365
+
366
+ try {
367
+ const client = await this._mongocryptdClient.connect();
368
+ return client;
369
+ } catch (error) {
370
+ throw new MongoRuntimeError(
371
+ 'Unable to connect to `mongocryptd`, please make sure it is running or in your PATH for auto-spawn',
372
+ { cause: error }
373
+ );
374
+ }
375
+ }
376
+
377
+ /**
378
+ * Cleans up the `_mongocryptdClient`, if present.
379
+ */
380
+ async close(): Promise<void> {
381
+ await this._mongocryptdClient?.close();
382
+ }
383
+
384
+ /**
385
+ * Encrypt a command for a given namespace.
386
+ */
387
+ async encrypt(
388
+ ns: string,
389
+ cmd: Document,
390
+ options: CommandOptions & Abortable = {}
391
+ ): Promise<Document | Uint8Array> {
392
+ options.signal?.throwIfAborted();
393
+
394
+ if (this._bypassEncryption) {
395
+ // If `bypassAutoEncryption` has been specified, don't encrypt
396
+ return cmd;
397
+ }
398
+
399
+ const commandBuffer = Buffer.isBuffer(cmd) ? cmd : serialize(cmd, options);
400
+ const context = this._mongocrypt.makeEncryptionContext(
401
+ MongoDBCollectionNamespace.fromString(ns).db,
402
+ commandBuffer
403
+ );
404
+
405
+ context.id = this._contextCounter++;
406
+ context.ns = ns;
407
+ context.document = cmd;
408
+
409
+ const stateMachine = new StateMachine({
410
+ promoteValues: false,
411
+ promoteLongs: false,
412
+ proxyOptions: this._proxyOptions,
413
+ tlsOptions: this._tlsOptions,
414
+ socketOptions: autoSelectSocketOptions(this._client.s.options)
415
+ });
416
+
417
+ return deserialize(await stateMachine.execute(this, context, options), {
418
+ promoteValues: false,
419
+ promoteLongs: false
420
+ });
421
+ }
422
+
423
+ /**
424
+ * Decrypt a command response
425
+ */
426
+ async decrypt(
427
+ response: Uint8Array,
428
+ options: CommandOptions & Abortable = {}
429
+ ): Promise<Uint8Array> {
430
+ options.signal?.throwIfAborted();
431
+
432
+ const context = this._mongocrypt.makeDecryptionContext(response);
433
+
434
+ context.id = this._contextCounter++;
435
+
436
+ const stateMachine = new StateMachine({
437
+ ...options,
438
+ proxyOptions: this._proxyOptions,
439
+ tlsOptions: this._tlsOptions,
440
+ socketOptions: autoSelectSocketOptions(this._client.s.options)
441
+ });
442
+
443
+ return await stateMachine.execute(this, context, options);
444
+ }
445
+
446
+ /**
447
+ * Ask the user for KMS credentials.
448
+ *
449
+ * This returns anything that looks like the kmsProviders original input
450
+ * option. It can be empty, and any provider specified here will override
451
+ * the original ones.
452
+ */
453
+ async askForKMSCredentials(): Promise<KMSProviders> {
454
+ return await refreshKMSCredentials(this._kmsProviders, this._credentialProviders);
455
+ }
456
+
457
+ /**
458
+ * Return the current libmongocrypt's CSFLE shared library version
459
+ * as `{ version: bigint, versionStr: string }`, or `null` if no CSFLE
460
+ * shared library was loaded.
461
+ */
462
+ get cryptSharedLibVersionInfo(): { version: bigint; versionStr: string } | null {
463
+ return this._mongocrypt.cryptSharedLibVersionInfo;
464
+ }
465
+
466
+ static get libmongocryptVersion(): string {
467
+ return AutoEncrypter.getMongoCrypt().libmongocryptVersion;
468
+ }
469
+ }