@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,513 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChangeStream = void 0;
4
+ exports.filterOutOptions = filterOutOptions;
5
+ const collection_1 = require("./collection");
6
+ const constants_1 = require("./constants");
7
+ const abstract_cursor_1 = require("./cursor/abstract_cursor");
8
+ const change_stream_cursor_1 = require("./cursor/change_stream_cursor");
9
+ const db_1 = require("./db");
10
+ const error_1 = require("./error");
11
+ const mongo_client_1 = require("./mongo_client");
12
+ const mongo_types_1 = require("./mongo_types");
13
+ const server_selection_1 = require("./sdam/server_selection");
14
+ const timeout_1 = require("./timeout");
15
+ const utils_1 = require("./utils");
16
+ const CHANGE_DOMAIN_TYPES = {
17
+ COLLECTION: Symbol('Collection'),
18
+ DATABASE: Symbol('Database'),
19
+ CLUSTER: Symbol('Cluster')
20
+ };
21
+ const CHANGE_STREAM_EVENTS = [constants_1.RESUME_TOKEN_CHANGED, constants_1.END, constants_1.CLOSE];
22
+ const NO_RESUME_TOKEN_ERROR = 'A change stream document has been received that lacks a resume token (_id).';
23
+ const CHANGESTREAM_CLOSED_ERROR = 'ChangeStream is closed';
24
+ const INVALID_STAGE_OPTIONS = buildDisallowedChangeStreamOptions();
25
+ function filterOutOptions(options) {
26
+ return Object.fromEntries(Object.entries(options).filter(([k, _]) => !INVALID_STAGE_OPTIONS.has(k)));
27
+ }
28
+ /**
29
+ * Creates a new Change Stream instance. Normally created using {@link Collection#watch|Collection.watch()}.
30
+ * @public
31
+ */
32
+ class ChangeStream extends mongo_types_1.TypedEventEmitter {
33
+ /**
34
+ * @experimental
35
+ * An alias for {@link ChangeStream.close|ChangeStream.close()}.
36
+ */
37
+ async [Symbol.asyncDispose]() {
38
+ await this.close();
39
+ }
40
+ /** @event */
41
+ static { this.RESPONSE = constants_1.RESPONSE; }
42
+ /** @event */
43
+ static { this.MORE = constants_1.MORE; }
44
+ /** @event */
45
+ static { this.INIT = constants_1.INIT; }
46
+ /** @event */
47
+ static { this.CLOSE = constants_1.CLOSE; }
48
+ /**
49
+ * Fired for each new matching change in the specified namespace. Attaching a `change`
50
+ * event listener to a Change Stream will switch the stream into flowing mode. Data will
51
+ * then be passed as soon as it is available.
52
+ * @event
53
+ */
54
+ static { this.CHANGE = constants_1.CHANGE; }
55
+ /** @event */
56
+ static { this.END = constants_1.END; }
57
+ /** @event */
58
+ static { this.ERROR = constants_1.ERROR; }
59
+ /**
60
+ * Emitted each time the change stream stores a new resume token.
61
+ * @event
62
+ */
63
+ static { this.RESUME_TOKEN_CHANGED = constants_1.RESUME_TOKEN_CHANGED; }
64
+ /**
65
+ * @internal
66
+ *
67
+ * @param parent - The parent object that created this change stream
68
+ * @param pipeline - An array of {@link https://www.mongodb.com/docs/manual/reference/operator/aggregation-pipeline/|aggregation pipeline stages} through which to pass change stream documents
69
+ */
70
+ constructor(parent, pipeline = [], options = {}) {
71
+ super();
72
+ this.pipeline = pipeline;
73
+ this.options = { ...options };
74
+ let serverSelectionTimeoutMS;
75
+ delete this.options.writeConcern;
76
+ if (parent instanceof collection_1.Collection) {
77
+ this.type = CHANGE_DOMAIN_TYPES.COLLECTION;
78
+ serverSelectionTimeoutMS = parent.s.db.client.options.serverSelectionTimeoutMS;
79
+ }
80
+ else if (parent instanceof db_1.Db) {
81
+ this.type = CHANGE_DOMAIN_TYPES.DATABASE;
82
+ serverSelectionTimeoutMS = parent.client.options.serverSelectionTimeoutMS;
83
+ }
84
+ else if (parent instanceof mongo_client_1.MongoClient) {
85
+ this.type = CHANGE_DOMAIN_TYPES.CLUSTER;
86
+ serverSelectionTimeoutMS = parent.options.serverSelectionTimeoutMS;
87
+ }
88
+ else {
89
+ throw new error_1.MongoChangeStreamError('Parent provided to ChangeStream constructor must be an instance of Collection, Db, or MongoClient');
90
+ }
91
+ this.contextOwner = Symbol();
92
+ this.parent = parent;
93
+ this.namespace = parent.s.namespace;
94
+ if (!this.options.readPreference && parent.readPreference) {
95
+ this.options.readPreference = parent.readPreference;
96
+ }
97
+ // Create contained Change Stream cursor
98
+ this.cursor = this._createChangeStreamCursor(options);
99
+ this.isClosed = false;
100
+ this.mode = false;
101
+ // Listen for any `change` listeners being added to ChangeStream
102
+ this.on('newListener', eventName => {
103
+ if (eventName === 'change' && this.cursor && this.listenerCount('change') === 0) {
104
+ this._streamEvents(this.cursor);
105
+ }
106
+ });
107
+ this.on('removeListener', eventName => {
108
+ if (eventName === 'change' && this.listenerCount('change') === 0 && this.cursor) {
109
+ this.cursorStream?.removeAllListeners('data');
110
+ }
111
+ });
112
+ if (this.options.timeoutMS != null) {
113
+ this.timeoutContext = new timeout_1.CSOTTimeoutContext({
114
+ timeoutMS: this.options.timeoutMS,
115
+ serverSelectionTimeoutMS
116
+ });
117
+ }
118
+ }
119
+ /** The cached resume token that is used to resume after the most recently returned change. */
120
+ get resumeToken() {
121
+ return this.cursor?.resumeToken;
122
+ }
123
+ /** Check if there is any document still available in the Change Stream */
124
+ async hasNext() {
125
+ this._setIsIterator();
126
+ // Change streams must resume indefinitely while each resume event succeeds.
127
+ // This loop continues until either a change event is received or until a resume attempt
128
+ // fails.
129
+ this.timeoutContext?.refresh();
130
+ try {
131
+ while (true) {
132
+ try {
133
+ const hasNext = await this.cursor.hasNext();
134
+ return hasNext;
135
+ }
136
+ catch (error) {
137
+ try {
138
+ await this._processErrorIteratorMode(error, this.cursor.id != null);
139
+ }
140
+ catch (error) {
141
+ if (error instanceof error_1.MongoOperationTimeoutError && this.cursor.id == null) {
142
+ throw error;
143
+ }
144
+ try {
145
+ await this.close();
146
+ }
147
+ catch (error) {
148
+ (0, utils_1.squashError)(error);
149
+ }
150
+ throw error;
151
+ }
152
+ }
153
+ }
154
+ }
155
+ finally {
156
+ this.timeoutContext?.clear();
157
+ }
158
+ }
159
+ /** Get the next available document from the Change Stream. */
160
+ async next() {
161
+ this._setIsIterator();
162
+ // Change streams must resume indefinitely while each resume event succeeds.
163
+ // This loop continues until either a change event is received or until a resume attempt
164
+ // fails.
165
+ this.timeoutContext?.refresh();
166
+ try {
167
+ while (true) {
168
+ try {
169
+ const change = await this.cursor.next();
170
+ const processedChange = this._processChange(change ?? null);
171
+ return processedChange;
172
+ }
173
+ catch (error) {
174
+ try {
175
+ await this._processErrorIteratorMode(error, this.cursor.id != null);
176
+ }
177
+ catch (error) {
178
+ if (error instanceof error_1.MongoOperationTimeoutError && this.cursor.id == null) {
179
+ throw error;
180
+ }
181
+ try {
182
+ await this.close();
183
+ }
184
+ catch (error) {
185
+ (0, utils_1.squashError)(error);
186
+ }
187
+ throw error;
188
+ }
189
+ }
190
+ }
191
+ }
192
+ finally {
193
+ this.timeoutContext?.clear();
194
+ }
195
+ }
196
+ /**
197
+ * Try to get the next available document from the Change Stream's cursor or `null` if an empty batch is returned
198
+ */
199
+ async tryNext() {
200
+ this._setIsIterator();
201
+ // Change streams must resume indefinitely while each resume event succeeds.
202
+ // This loop continues until either a change event is received or until a resume attempt
203
+ // fails.
204
+ this.timeoutContext?.refresh();
205
+ try {
206
+ while (true) {
207
+ try {
208
+ const change = await this.cursor.tryNext();
209
+ if (!change) {
210
+ return null;
211
+ }
212
+ const processedChange = this._processChange(change);
213
+ return processedChange;
214
+ }
215
+ catch (error) {
216
+ try {
217
+ await this._processErrorIteratorMode(error, this.cursor.id != null);
218
+ }
219
+ catch (error) {
220
+ if (error instanceof error_1.MongoOperationTimeoutError && this.cursor.id == null)
221
+ throw error;
222
+ try {
223
+ await this.close();
224
+ }
225
+ catch (error) {
226
+ (0, utils_1.squashError)(error);
227
+ }
228
+ throw error;
229
+ }
230
+ }
231
+ }
232
+ }
233
+ finally {
234
+ this.timeoutContext?.clear();
235
+ }
236
+ }
237
+ async *[Symbol.asyncIterator]() {
238
+ if (this.closed) {
239
+ return;
240
+ }
241
+ try {
242
+ // Change streams run indefinitely as long as errors are resumable
243
+ // So the only loop breaking condition is if `next()` throws
244
+ while (true) {
245
+ yield await this.next();
246
+ }
247
+ }
248
+ finally {
249
+ try {
250
+ await this.close();
251
+ }
252
+ catch (error) {
253
+ (0, utils_1.squashError)(error);
254
+ }
255
+ }
256
+ }
257
+ /** Is the cursor closed */
258
+ get closed() {
259
+ return this.isClosed || this.cursor.closed;
260
+ }
261
+ /**
262
+ * Frees the internal resources used by the change stream.
263
+ */
264
+ async close() {
265
+ this.timeoutContext?.clear();
266
+ this.timeoutContext = undefined;
267
+ this.isClosed = true;
268
+ const cursor = this.cursor;
269
+ try {
270
+ await cursor.close();
271
+ }
272
+ finally {
273
+ this._endStream();
274
+ }
275
+ }
276
+ /**
277
+ * Return a modified Readable stream including a possible transform method.
278
+ *
279
+ * NOTE: When using a Stream to process change stream events, the stream will
280
+ * NOT automatically resume in the case a resumable error is encountered.
281
+ *
282
+ * @throws MongoChangeStreamError if the underlying cursor or the change stream is closed
283
+ */
284
+ stream() {
285
+ if (this.closed) {
286
+ throw new error_1.MongoChangeStreamError(CHANGESTREAM_CLOSED_ERROR);
287
+ }
288
+ return this.cursor.stream();
289
+ }
290
+ /** @internal */
291
+ _setIsEmitter() {
292
+ if (this.mode === 'iterator') {
293
+ // TODO(NODE-3485): Replace with MongoChangeStreamModeError
294
+ throw new error_1.MongoAPIError('ChangeStream cannot be used as an EventEmitter after being used as an iterator');
295
+ }
296
+ this.mode = 'emitter';
297
+ }
298
+ /** @internal */
299
+ _setIsIterator() {
300
+ if (this.mode === 'emitter') {
301
+ // TODO(NODE-3485): Replace with MongoChangeStreamModeError
302
+ throw new error_1.MongoAPIError('ChangeStream cannot be used as an iterator after being used as an EventEmitter');
303
+ }
304
+ this.mode = 'iterator';
305
+ }
306
+ /**
307
+ * Create a new change stream cursor based on self's configuration
308
+ * @internal
309
+ */
310
+ _createChangeStreamCursor(options) {
311
+ const changeStreamStageOptions = filterOutOptions(options);
312
+ if (this.type === CHANGE_DOMAIN_TYPES.CLUSTER) {
313
+ changeStreamStageOptions.allChangesForCluster = true;
314
+ }
315
+ const pipeline = [{ $changeStream: changeStreamStageOptions }, ...this.pipeline];
316
+ const client = this.type === CHANGE_DOMAIN_TYPES.CLUSTER
317
+ ? this.parent
318
+ : this.type === CHANGE_DOMAIN_TYPES.DATABASE
319
+ ? this.parent.client
320
+ : this.type === CHANGE_DOMAIN_TYPES.COLLECTION
321
+ ? this.parent.client
322
+ : null;
323
+ if (client == null) {
324
+ // This should never happen because of the assertion in the constructor
325
+ throw new error_1.MongoRuntimeError(`Changestream type should only be one of cluster, database, collection. Found ${this.type.toString()}`);
326
+ }
327
+ const changeStreamCursor = new change_stream_cursor_1.ChangeStreamCursor(client, this.namespace, pipeline, {
328
+ ...options,
329
+ timeoutContext: this.timeoutContext
330
+ ? new abstract_cursor_1.CursorTimeoutContext(this.timeoutContext, this.contextOwner)
331
+ : undefined
332
+ });
333
+ for (const event of CHANGE_STREAM_EVENTS) {
334
+ changeStreamCursor.on(event, e => this.emit(event, e));
335
+ }
336
+ if (this.listenerCount(ChangeStream.CHANGE) > 0) {
337
+ this._streamEvents(changeStreamCursor);
338
+ }
339
+ return changeStreamCursor;
340
+ }
341
+ /** @internal */
342
+ _closeEmitterModeWithError(error) {
343
+ this.emit(ChangeStream.ERROR, error);
344
+ this.close().then(undefined, utils_1.squashError);
345
+ }
346
+ /** @internal */
347
+ _streamEvents(cursor) {
348
+ this._setIsEmitter();
349
+ const stream = this.cursorStream ?? cursor.stream();
350
+ this.cursorStream = stream;
351
+ stream.on('data', change => {
352
+ try {
353
+ const processedChange = this._processChange(change);
354
+ this.emit(ChangeStream.CHANGE, processedChange);
355
+ }
356
+ catch (error) {
357
+ this.emit(ChangeStream.ERROR, error);
358
+ }
359
+ this.timeoutContext?.refresh();
360
+ });
361
+ stream.on('error', error => this._processErrorStreamMode(error, this.cursor.id != null));
362
+ }
363
+ /** @internal */
364
+ _endStream() {
365
+ this.cursorStream?.removeAllListeners('data');
366
+ this.cursorStream?.removeAllListeners('close');
367
+ this.cursorStream?.removeAllListeners('end');
368
+ this.cursorStream?.destroy();
369
+ this.cursorStream = undefined;
370
+ }
371
+ /** @internal */
372
+ _processChange(change) {
373
+ if (this.isClosed) {
374
+ // TODO(NODE-3485): Replace with MongoChangeStreamClosedError
375
+ throw new error_1.MongoAPIError(CHANGESTREAM_CLOSED_ERROR);
376
+ }
377
+ // a null change means the cursor has been notified, implicitly closing the change stream
378
+ if (change == null) {
379
+ // TODO(NODE-3485): Replace with MongoChangeStreamClosedError
380
+ throw new error_1.MongoRuntimeError(CHANGESTREAM_CLOSED_ERROR);
381
+ }
382
+ if (change && !change._id) {
383
+ throw new error_1.MongoChangeStreamError(NO_RESUME_TOKEN_ERROR);
384
+ }
385
+ // cache the resume token
386
+ this.cursor.cacheResumeToken(change._id);
387
+ // wipe the startAtOperationTime if there was one so that there won't be a conflict
388
+ // between resumeToken and startAtOperationTime if we need to reconnect the cursor
389
+ this.options.startAtOperationTime = undefined;
390
+ return change;
391
+ }
392
+ /** @internal */
393
+ _processErrorStreamMode(changeStreamError, cursorInitialized) {
394
+ // If the change stream has been closed explicitly, do not process error.
395
+ if (this.isClosed)
396
+ return;
397
+ if (cursorInitialized &&
398
+ ((0, error_1.isResumableError)(changeStreamError, this.cursor.maxWireVersion) ||
399
+ changeStreamError instanceof error_1.MongoOperationTimeoutError)) {
400
+ this._endStream();
401
+ this.cursor
402
+ .close()
403
+ .then(() => this._resume(changeStreamError), e => {
404
+ (0, utils_1.squashError)(e);
405
+ return this._resume(changeStreamError);
406
+ })
407
+ .then(() => {
408
+ if (changeStreamError instanceof error_1.MongoOperationTimeoutError)
409
+ this.emit(ChangeStream.ERROR, changeStreamError);
410
+ }, () => this._closeEmitterModeWithError(changeStreamError));
411
+ }
412
+ else {
413
+ this._closeEmitterModeWithError(changeStreamError);
414
+ }
415
+ }
416
+ /** @internal */
417
+ async _processErrorIteratorMode(changeStreamError, cursorInitialized) {
418
+ if (this.isClosed) {
419
+ // TODO(NODE-3485): Replace with MongoChangeStreamClosedError
420
+ throw new error_1.MongoAPIError(CHANGESTREAM_CLOSED_ERROR);
421
+ }
422
+ if (cursorInitialized &&
423
+ ((0, error_1.isResumableError)(changeStreamError, this.cursor.maxWireVersion) ||
424
+ changeStreamError instanceof error_1.MongoOperationTimeoutError)) {
425
+ try {
426
+ await this.cursor.close();
427
+ }
428
+ catch (error) {
429
+ (0, utils_1.squashError)(error);
430
+ }
431
+ await this._resume(changeStreamError);
432
+ if (changeStreamError instanceof error_1.MongoOperationTimeoutError)
433
+ throw changeStreamError;
434
+ }
435
+ else {
436
+ try {
437
+ await this.close();
438
+ }
439
+ catch (error) {
440
+ (0, utils_1.squashError)(error);
441
+ }
442
+ throw changeStreamError;
443
+ }
444
+ }
445
+ async _resume(changeStreamError) {
446
+ this.timeoutContext?.refresh();
447
+ const topology = (0, utils_1.getTopology)(this.parent);
448
+ try {
449
+ await topology.selectServer(this.cursor.readPreference, {
450
+ operationName: 'reconnect topology in change stream',
451
+ timeoutContext: this.timeoutContext,
452
+ deprioritizedServers: new server_selection_1.DeprioritizedServers()
453
+ });
454
+ this.cursor = this._createChangeStreamCursor(this.cursor.resumeOptions);
455
+ }
456
+ catch {
457
+ // if the topology can't reconnect, close the stream
458
+ await this.close();
459
+ throw changeStreamError;
460
+ }
461
+ }
462
+ }
463
+ exports.ChangeStream = ChangeStream;
464
+ /**
465
+ * This function returns a list of options that are *not* supported by the $changeStream
466
+ * aggregation stage. This is best-effort - it uses the options "officially supported" by the driver
467
+ * to derive a list of known, unsupported options for the $changeStream stage.
468
+ *
469
+ * Notably, at runtime, users can still provide options unknown to the driver and the driver will
470
+ * *not* filter them out of the options object (see NODE-5510).
471
+ */
472
+ function buildDisallowedChangeStreamOptions() {
473
+ const denyList = {
474
+ allowDiskUse: '',
475
+ authdb: '',
476
+ batchSize: '',
477
+ bsonRegExp: '',
478
+ bypassDocumentValidation: '',
479
+ bypassPinningCheck: '',
480
+ checkKeys: '',
481
+ collation: '',
482
+ comment: '',
483
+ cursor: '',
484
+ dbName: '',
485
+ enableUtf8Validation: '',
486
+ explain: '',
487
+ fieldsAsRaw: '',
488
+ hint: '',
489
+ ignoreUndefined: '',
490
+ let: '',
491
+ maxAwaitTimeMS: '',
492
+ maxTimeMS: '',
493
+ omitMaxTimeMS: '',
494
+ out: '',
495
+ promoteBuffers: '',
496
+ promoteLongs: '',
497
+ promoteValues: '',
498
+ raw: '',
499
+ rawData: '',
500
+ readConcern: '',
501
+ readPreference: '',
502
+ serializeFunctions: '',
503
+ session: '',
504
+ timeoutContext: '',
505
+ timeoutMS: '',
506
+ timeoutMode: '',
507
+ useBigInt64: '',
508
+ willRetryWrite: '',
509
+ writeConcern: ''
510
+ };
511
+ return new Set(Object.keys(denyList));
512
+ }
513
+ //# sourceMappingURL=change_stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change_stream.js","sourceRoot":"","sources":["../src/change_stream.ts"],"names":[],"mappings":"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"}