@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.
- package/LICENSE.md +201 -0
- package/README.md +33 -0
- package/etc/prepare.js +12 -0
- package/lib/admin.js +136 -0
- package/lib/admin.js.map +1 -0
- package/lib/bson.js +85 -0
- package/lib/bson.js.map +1 -0
- package/lib/bulk/common.js +835 -0
- package/lib/bulk/common.js.map +1 -0
- package/lib/bulk/ordered.js +67 -0
- package/lib/bulk/ordered.js.map +1 -0
- package/lib/bulk/unordered.js +92 -0
- package/lib/bulk/unordered.js.map +1 -0
- package/lib/change_stream.js +513 -0
- package/lib/change_stream.js.map +1 -0
- package/lib/client-side-encryption/auto_encrypter.js +272 -0
- package/lib/client-side-encryption/auto_encrypter.js.map +1 -0
- package/lib/client-side-encryption/client_encryption.js +609 -0
- package/lib/client-side-encryption/client_encryption.js.map +1 -0
- package/lib/client-side-encryption/errors.js +138 -0
- package/lib/client-side-encryption/errors.js.map +1 -0
- package/lib/client-side-encryption/mongocryptd_manager.js +85 -0
- package/lib/client-side-encryption/mongocryptd_manager.js.map +1 -0
- package/lib/client-side-encryption/providers/aws.js +23 -0
- package/lib/client-side-encryption/providers/aws.js.map +1 -0
- package/lib/client-side-encryption/providers/azure.js +132 -0
- package/lib/client-side-encryption/providers/azure.js.map +1 -0
- package/lib/client-side-encryption/providers/gcp.js +16 -0
- package/lib/client-side-encryption/providers/gcp.js.map +1 -0
- package/lib/client-side-encryption/providers/index.js +43 -0
- package/lib/client-side-encryption/providers/index.js.map +1 -0
- package/lib/client-side-encryption/state_machine.js +427 -0
- package/lib/client-side-encryption/state_machine.js.map +1 -0
- package/lib/cmap/auth/auth_provider.js +51 -0
- package/lib/cmap/auth/auth_provider.js.map +1 -0
- package/lib/cmap/auth/aws4.js +161 -0
- package/lib/cmap/auth/aws4.js.map +1 -0
- package/lib/cmap/auth/aws_temporary_credentials.js +103 -0
- package/lib/cmap/auth/aws_temporary_credentials.js.map +1 -0
- package/lib/cmap/auth/gssapi.js +155 -0
- package/lib/cmap/auth/gssapi.js.map +1 -0
- package/lib/cmap/auth/mongo_credentials.js +169 -0
- package/lib/cmap/auth/mongo_credentials.js.map +1 -0
- package/lib/cmap/auth/mongodb_aws.js +128 -0
- package/lib/cmap/auth/mongodb_aws.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +84 -0
- package/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +62 -0
- package/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/callback_workflow.js +141 -0
- package/lib/cmap/auth/mongodb_oidc/callback_workflow.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/command_builders.js +44 -0
- package/lib/cmap/auth/mongodb_oidc/command_builders.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +39 -0
- package/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +122 -0
- package/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +32 -0
- package/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/token_cache.js +52 -0
- package/lib/cmap/auth/mongodb_oidc/token_cache.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +23 -0
- package/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js.map +1 -0
- package/lib/cmap/auth/mongodb_oidc.js +73 -0
- package/lib/cmap/auth/mongodb_oidc.js.map +1 -0
- package/lib/cmap/auth/plain.js +26 -0
- package/lib/cmap/auth/plain.js.map +1 -0
- package/lib/cmap/auth/providers.js +22 -0
- package/lib/cmap/auth/providers.js.map +1 -0
- package/lib/cmap/auth/scram.js +254 -0
- package/lib/cmap/auth/scram.js.map +1 -0
- package/lib/cmap/auth/x509.js +36 -0
- package/lib/cmap/auth/x509.js.map +1 -0
- package/lib/cmap/command_monitoring_events.js +223 -0
- package/lib/cmap/command_monitoring_events.js.map +1 -0
- package/lib/cmap/commands.js +535 -0
- package/lib/cmap/commands.js.map +1 -0
- package/lib/cmap/connect.js +381 -0
- package/lib/cmap/connect.js.map +1 -0
- package/lib/cmap/connection.js +571 -0
- package/lib/cmap/connection.js.map +1 -0
- package/lib/cmap/connection_pool.js +558 -0
- package/lib/cmap/connection_pool.js.map +1 -0
- package/lib/cmap/connection_pool_events.js +190 -0
- package/lib/cmap/connection_pool_events.js.map +1 -0
- package/lib/cmap/errors.js +108 -0
- package/lib/cmap/errors.js.map +1 -0
- package/lib/cmap/handshake/client_metadata.js +242 -0
- package/lib/cmap/handshake/client_metadata.js.map +1 -0
- package/lib/cmap/metrics.js +62 -0
- package/lib/cmap/metrics.js.map +1 -0
- package/lib/cmap/stream_description.js +70 -0
- package/lib/cmap/stream_description.js.map +1 -0
- package/lib/cmap/wire_protocol/compression.js +178 -0
- package/lib/cmap/wire_protocol/compression.js.map +1 -0
- package/lib/cmap/wire_protocol/constants.js +21 -0
- package/lib/cmap/wire_protocol/constants.js.map +1 -0
- package/lib/cmap/wire_protocol/on_data.js +111 -0
- package/lib/cmap/wire_protocol/on_data.js.map +1 -0
- package/lib/cmap/wire_protocol/on_demand/document.js +222 -0
- package/lib/cmap/wire_protocol/on_demand/document.js.map +1 -0
- package/lib/cmap/wire_protocol/responses.js +315 -0
- package/lib/cmap/wire_protocol/responses.js.map +1 -0
- package/lib/cmap/wire_protocol/shared.js +35 -0
- package/lib/cmap/wire_protocol/shared.js.map +1 -0
- package/lib/collection.js +751 -0
- package/lib/collection.js.map +1 -0
- package/lib/connection_string.js +1090 -0
- package/lib/connection_string.js.map +1 -0
- package/lib/constants.js +170 -0
- package/lib/constants.js.map +1 -0
- package/lib/cursor/abstract_cursor.js +924 -0
- package/lib/cursor/abstract_cursor.js.map +1 -0
- package/lib/cursor/aggregation_cursor.js +164 -0
- package/lib/cursor/aggregation_cursor.js.map +1 -0
- package/lib/cursor/change_stream_cursor.js +104 -0
- package/lib/cursor/change_stream_cursor.js.map +1 -0
- package/lib/cursor/client_bulk_write_cursor.js +52 -0
- package/lib/cursor/client_bulk_write_cursor.js.map +1 -0
- package/lib/cursor/explainable_cursor.js +36 -0
- package/lib/cursor/explainable_cursor.js.map +1 -0
- package/lib/cursor/find_cursor.js +399 -0
- package/lib/cursor/find_cursor.js.map +1 -0
- package/lib/cursor/list_collections_cursor.js +34 -0
- package/lib/cursor/list_collections_cursor.js.map +1 -0
- package/lib/cursor/list_indexes_cursor.js +32 -0
- package/lib/cursor/list_indexes_cursor.js.map +1 -0
- package/lib/cursor/list_search_indexes_cursor.js +14 -0
- package/lib/cursor/list_search_indexes_cursor.js.map +1 -0
- package/lib/cursor/run_command_cursor.js +94 -0
- package/lib/cursor/run_command_cursor.js.map +1 -0
- package/lib/db.js +419 -0
- package/lib/db.js.map +1 -0
- package/lib/deps.js +112 -0
- package/lib/deps.js.map +1 -0
- package/lib/encrypter.js +106 -0
- package/lib/encrypter.js.map +1 -0
- package/lib/error.js +1380 -0
- package/lib/error.js.map +1 -0
- package/lib/explain.js +59 -0
- package/lib/explain.js.map +1 -0
- package/lib/gridfs/download.js +305 -0
- package/lib/gridfs/download.js.map +1 -0
- package/lib/gridfs/index.js +164 -0
- package/lib/gridfs/index.js.map +1 -0
- package/lib/gridfs/upload.js +358 -0
- package/lib/gridfs/upload.js.map +1 -0
- package/lib/index.js +193 -0
- package/lib/index.js.map +1 -0
- package/lib/mongo_client.js +557 -0
- package/lib/mongo_client.js.map +1 -0
- package/lib/mongo_client_auth_providers.js +80 -0
- package/lib/mongo_client_auth_providers.js.map +1 -0
- package/lib/mongo_logger.js +655 -0
- package/lib/mongo_logger.js.map +1 -0
- package/lib/mongo_types.js +56 -0
- package/lib/mongo_types.js.map +1 -0
- package/lib/operations/aggregate.js +90 -0
- package/lib/operations/aggregate.js.map +1 -0
- package/lib/operations/client_bulk_write/client_bulk_write.js +51 -0
- package/lib/operations/client_bulk_write/client_bulk_write.js.map +1 -0
- package/lib/operations/client_bulk_write/command_builder.js +340 -0
- package/lib/operations/client_bulk_write/command_builder.js.map +1 -0
- package/lib/operations/client_bulk_write/common.js +3 -0
- package/lib/operations/client_bulk_write/common.js.map +1 -0
- package/lib/operations/client_bulk_write/executor.js +120 -0
- package/lib/operations/client_bulk_write/executor.js.map +1 -0
- package/lib/operations/client_bulk_write/results_merger.js +204 -0
- package/lib/operations/client_bulk_write/results_merger.js.map +1 -0
- package/lib/operations/command.js +83 -0
- package/lib/operations/command.js.map +1 -0
- package/lib/operations/count.js +45 -0
- package/lib/operations/count.js.map +1 -0
- package/lib/operations/create_collection.js +109 -0
- package/lib/operations/create_collection.js.map +1 -0
- package/lib/operations/delete.js +125 -0
- package/lib/operations/delete.js.map +1 -0
- package/lib/operations/distinct.js +61 -0
- package/lib/operations/distinct.js.map +1 -0
- package/lib/operations/drop.js +93 -0
- package/lib/operations/drop.js.map +1 -0
- package/lib/operations/end_sessions.js +34 -0
- package/lib/operations/end_sessions.js.map +1 -0
- package/lib/operations/estimated_document_count.js +41 -0
- package/lib/operations/estimated_document_count.js.map +1 -0
- package/lib/operations/execute_operation.js +239 -0
- package/lib/operations/execute_operation.js.map +1 -0
- package/lib/operations/find.js +148 -0
- package/lib/operations/find.js.map +1 -0
- package/lib/operations/find_and_modify.js +158 -0
- package/lib/operations/find_and_modify.js.map +1 -0
- package/lib/operations/get_more.js +62 -0
- package/lib/operations/get_more.js.map +1 -0
- package/lib/operations/indexes.js +186 -0
- package/lib/operations/indexes.js.map +1 -0
- package/lib/operations/insert.js +70 -0
- package/lib/operations/insert.js.map +1 -0
- package/lib/operations/kill_cursors.js +43 -0
- package/lib/operations/kill_cursors.js.map +1 -0
- package/lib/operations/list_collections.js +53 -0
- package/lib/operations/list_collections.js.map +1 -0
- package/lib/operations/list_databases.js +40 -0
- package/lib/operations/list_databases.js.map +1 -0
- package/lib/operations/operation.js +102 -0
- package/lib/operations/operation.js.map +1 -0
- package/lib/operations/profiling_level.js +43 -0
- package/lib/operations/profiling_level.js.map +1 -0
- package/lib/operations/remove_user.js +27 -0
- package/lib/operations/remove_user.js.map +1 -0
- package/lib/operations/rename.js +38 -0
- package/lib/operations/rename.js.map +1 -0
- package/lib/operations/run_command.js +47 -0
- package/lib/operations/run_command.js.map +1 -0
- package/lib/operations/search_indexes/create.js +33 -0
- package/lib/operations/search_indexes/create.js.map +1 -0
- package/lib/operations/search_indexes/drop.js +43 -0
- package/lib/operations/search_indexes/drop.js.map +1 -0
- package/lib/operations/search_indexes/update.js +35 -0
- package/lib/operations/search_indexes/update.js.map +1 -0
- package/lib/operations/set_profiling_level.js +53 -0
- package/lib/operations/set_profiling_level.js.map +1 -0
- package/lib/operations/stats.js +27 -0
- package/lib/operations/stats.js.map +1 -0
- package/lib/operations/update.js +188 -0
- package/lib/operations/update.js.map +1 -0
- package/lib/operations/validate_collection.js +37 -0
- package/lib/operations/validate_collection.js.map +1 -0
- package/lib/read_concern.js +73 -0
- package/lib/read_concern.js.map +1 -0
- package/lib/read_preference.js +191 -0
- package/lib/read_preference.js.map +1 -0
- package/lib/sdam/common.js +49 -0
- package/lib/sdam/common.js.map +1 -0
- package/lib/sdam/events.js +146 -0
- package/lib/sdam/events.js.map +1 -0
- package/lib/sdam/monitor.js +544 -0
- package/lib/sdam/monitor.js.map +1 -0
- package/lib/sdam/server.js +404 -0
- package/lib/sdam/server.js.map +1 -0
- package/lib/sdam/server_description.js +204 -0
- package/lib/sdam/server_description.js.map +1 -0
- package/lib/sdam/server_selection.js +294 -0
- package/lib/sdam/server_selection.js.map +1 -0
- package/lib/sdam/server_selection_events.js +85 -0
- package/lib/sdam/server_selection_events.js.map +1 -0
- package/lib/sdam/srv_polling.js +108 -0
- package/lib/sdam/srv_polling.js.map +1 -0
- package/lib/sdam/topology.js +652 -0
- package/lib/sdam/topology.js.map +1 -0
- package/lib/sdam/topology_description.js +383 -0
- package/lib/sdam/topology_description.js.map +1 -0
- package/lib/sessions.js +892 -0
- package/lib/sessions.js.map +1 -0
- package/lib/sort.js +103 -0
- package/lib/sort.js.map +1 -0
- package/lib/timeout.js +296 -0
- package/lib/timeout.js.map +1 -0
- package/lib/transactions.js +135 -0
- package/lib/transactions.js.map +1 -0
- package/lib/utils.js +1163 -0
- package/lib/utils.js.map +1 -0
- package/lib/write_concern.js +100 -0
- package/lib/write_concern.js.map +1 -0
- package/mongodb.d.ts +9018 -0
- package/package.json +197 -0
- package/src/admin.ts +173 -0
- package/src/bson.ts +149 -0
- package/src/bulk/common.ts +1251 -0
- package/src/bulk/ordered.ts +83 -0
- package/src/bulk/unordered.ts +115 -0
- package/src/change_stream.ts +1160 -0
- package/src/client-side-encryption/auto_encrypter.ts +469 -0
- package/src/client-side-encryption/client_encryption.ts +1150 -0
- package/src/client-side-encryption/errors.ts +144 -0
- package/src/client-side-encryption/mongocryptd_manager.ts +100 -0
- package/src/client-side-encryption/providers/aws.ts +33 -0
- package/src/client-side-encryption/providers/azure.ts +181 -0
- package/src/client-side-encryption/providers/gcp.ts +16 -0
- package/src/client-side-encryption/providers/index.ts +207 -0
- package/src/client-side-encryption/state_machine.ts +651 -0
- package/src/cmap/auth/auth_provider.ts +77 -0
- package/src/cmap/auth/aws4.ts +207 -0
- package/src/cmap/auth/aws_temporary_credentials.ts +129 -0
- package/src/cmap/auth/gssapi.ts +203 -0
- package/src/cmap/auth/mongo_credentials.ts +292 -0
- package/src/cmap/auth/mongodb_aws.ts +179 -0
- package/src/cmap/auth/mongodb_oidc/automated_callback_workflow.ts +88 -0
- package/src/cmap/auth/mongodb_oidc/azure_machine_workflow.ts +73 -0
- package/src/cmap/auth/mongodb_oidc/callback_workflow.ts +188 -0
- package/src/cmap/auth/mongodb_oidc/command_builders.ts +53 -0
- package/src/cmap/auth/mongodb_oidc/gcp_machine_workflow.ts +46 -0
- package/src/cmap/auth/mongodb_oidc/human_callback_workflow.ts +141 -0
- package/src/cmap/auth/mongodb_oidc/k8s_machine_workflow.ts +31 -0
- package/src/cmap/auth/mongodb_oidc/token_cache.ts +62 -0
- package/src/cmap/auth/mongodb_oidc/token_machine_workflow.ts +22 -0
- package/src/cmap/auth/mongodb_oidc.ts +185 -0
- package/src/cmap/auth/plain.ts +25 -0
- package/src/cmap/auth/providers.ts +22 -0
- package/src/cmap/auth/scram.ts +344 -0
- package/src/cmap/auth/x509.ts +43 -0
- package/src/cmap/command_monitoring_events.ts +316 -0
- package/src/cmap/commands.ts +788 -0
- package/src/cmap/connect.ts +518 -0
- package/src/cmap/connection.ts +931 -0
- package/src/cmap/connection_pool.ts +831 -0
- package/src/cmap/connection_pool_events.ts +300 -0
- package/src/cmap/errors.ts +119 -0
- package/src/cmap/handshake/client_metadata.ts +353 -0
- package/src/cmap/metrics.ts +58 -0
- package/src/cmap/stream_description.ts +96 -0
- package/src/cmap/wire_protocol/compression.ts +211 -0
- package/src/cmap/wire_protocol/constants.ts +17 -0
- package/src/cmap/wire_protocol/on_data.ts +139 -0
- package/src/cmap/wire_protocol/on_demand/document.ts +358 -0
- package/src/cmap/wire_protocol/responses.ts +393 -0
- package/src/cmap/wire_protocol/shared.ts +48 -0
- package/src/collection.ts +1314 -0
- package/src/connection_string.ts +1297 -0
- package/src/constants.ts +176 -0
- package/src/cursor/abstract_cursor.ts +1247 -0
- package/src/cursor/aggregation_cursor.ts +245 -0
- package/src/cursor/change_stream_cursor.ts +171 -0
- package/src/cursor/client_bulk_write_cursor.ts +83 -0
- package/src/cursor/explainable_cursor.ts +51 -0
- package/src/cursor/find_cursor.ts +497 -0
- package/src/cursor/list_collections_cursor.ts +50 -0
- package/src/cursor/list_indexes_cursor.ts +37 -0
- package/src/cursor/list_search_indexes_cursor.ts +20 -0
- package/src/cursor/run_command_cursor.ts +178 -0
- package/src/db.ts +621 -0
- package/src/deps.ts +227 -0
- package/src/encrypter.ts +127 -0
- package/src/error.ts +1567 -0
- package/src/explain.ts +124 -0
- package/src/gridfs/download.ts +483 -0
- package/src/gridfs/index.ts +264 -0
- package/src/gridfs/upload.ts +537 -0
- package/src/index.ts +633 -0
- package/src/mongo_client.ts +1155 -0
- package/src/mongo_client_auth_providers.ts +87 -0
- package/src/mongo_logger.ts +1081 -0
- package/src/mongo_types.ts +678 -0
- package/src/operations/aggregate.ts +153 -0
- package/src/operations/client_bulk_write/client_bulk_write.ts +72 -0
- package/src/operations/client_bulk_write/command_builder.ts +487 -0
- package/src/operations/client_bulk_write/common.ts +276 -0
- package/src/operations/client_bulk_write/executor.ts +149 -0
- package/src/operations/client_bulk_write/results_merger.ts +260 -0
- package/src/operations/command.ts +171 -0
- package/src/operations/count.ts +74 -0
- package/src/operations/create_collection.ts +218 -0
- package/src/operations/delete.ts +183 -0
- package/src/operations/distinct.ts +92 -0
- package/src/operations/drop.ts +130 -0
- package/src/operations/end_sessions.ts +44 -0
- package/src/operations/estimated_document_count.ts +61 -0
- package/src/operations/execute_operation.ts +319 -0
- package/src/operations/find.ts +254 -0
- package/src/operations/find_and_modify.ts +319 -0
- package/src/operations/get_more.ts +108 -0
- package/src/operations/indexes.ts +418 -0
- package/src/operations/insert.ts +108 -0
- package/src/operations/kill_cursors.ts +64 -0
- package/src/operations/list_collections.ts +108 -0
- package/src/operations/list_databases.ts +68 -0
- package/src/operations/operation.ts +181 -0
- package/src/operations/profiling_level.ts +46 -0
- package/src/operations/remove_user.ts +36 -0
- package/src/operations/rename.ts +60 -0
- package/src/operations/run_command.ts +79 -0
- package/src/operations/search_indexes/create.ts +56 -0
- package/src/operations/search_indexes/drop.ts +58 -0
- package/src/operations/search_indexes/update.ts +45 -0
- package/src/operations/set_profiling_level.ts +74 -0
- package/src/operations/stats.ts +37 -0
- package/src/operations/update.ts +318 -0
- package/src/operations/validate_collection.ts +50 -0
- package/src/read_concern.ts +88 -0
- package/src/read_preference.ts +256 -0
- package/src/sdam/common.ts +74 -0
- package/src/sdam/events.ts +219 -0
- package/src/sdam/monitor.ts +771 -0
- package/src/sdam/server.ts +595 -0
- package/src/sdam/server_description.ts +297 -0
- package/src/sdam/server_selection.ts +415 -0
- package/src/sdam/server_selection_events.ts +142 -0
- package/src/sdam/srv_polling.ts +146 -0
- package/src/sdam/topology.ts +1100 -0
- package/src/sdam/topology_description.ts +548 -0
- package/src/sessions.ts +1244 -0
- package/src/sort.ts +141 -0
- package/src/timeout.ts +405 -0
- package/src/transactions.ts +181 -0
- package/src/utils.ts +1434 -0
- package/src/write_concern.ts +183 -0
- package/tsconfig.json +46 -0
package/src/deps.ts
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { type Stream } from './cmap/connect';
|
|
2
|
+
import { MongoMissingDependencyError } from './error';
|
|
3
|
+
import type { Callback } from './utils';
|
|
4
|
+
|
|
5
|
+
function makeErrorModule(error: any) {
|
|
6
|
+
const props = error ? { kModuleError: error } : {};
|
|
7
|
+
return new Proxy(props, {
|
|
8
|
+
get: (_: any, key: any) => {
|
|
9
|
+
if (key === 'kModuleError') {
|
|
10
|
+
return error;
|
|
11
|
+
}
|
|
12
|
+
throw error;
|
|
13
|
+
},
|
|
14
|
+
set: () => {
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type Kerberos = typeof import('kerberos') | { kModuleError: MongoMissingDependencyError };
|
|
21
|
+
|
|
22
|
+
export function getKerberos(): Kerberos {
|
|
23
|
+
let kerberos: Kerberos;
|
|
24
|
+
try {
|
|
25
|
+
// Ensure you always wrap an optional require in the try block NODE-3199
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
27
|
+
kerberos = require('kerberos');
|
|
28
|
+
} catch (error) {
|
|
29
|
+
kerberos = makeErrorModule(
|
|
30
|
+
new MongoMissingDependencyError(
|
|
31
|
+
'Optional module `kerberos` not found. Please install it to enable kerberos authentication',
|
|
32
|
+
{ cause: error, dependencyName: 'kerberos' }
|
|
33
|
+
)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
return kerberos;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface KerberosClient {
|
|
40
|
+
step(challenge: string): Promise<string>;
|
|
41
|
+
step(challenge: string, callback: Callback<string>): void;
|
|
42
|
+
wrap(challenge: string, options: { user: string }): Promise<string>;
|
|
43
|
+
wrap(challenge: string, options: { user: string }, callback: Callback<string>): void;
|
|
44
|
+
unwrap(challenge: string): Promise<string>;
|
|
45
|
+
unwrap(challenge: string, callback: Callback<string>): void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
type ZStandardLib = {
|
|
49
|
+
/**
|
|
50
|
+
* Compress using zstd.
|
|
51
|
+
* @param buf - Buffer to be compressed.
|
|
52
|
+
*/
|
|
53
|
+
compress(buf: Buffer, level?: number): Promise<Buffer>;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Decompress using zstd.
|
|
57
|
+
*/
|
|
58
|
+
decompress(buf: Buffer): Promise<Buffer>;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export type ZStandard = ZStandardLib | { kModuleError: MongoMissingDependencyError };
|
|
62
|
+
|
|
63
|
+
export function getZstdLibrary(): ZStandardLib | { kModuleError: MongoMissingDependencyError } {
|
|
64
|
+
let ZStandard: ZStandardLib | { kModuleError: MongoMissingDependencyError };
|
|
65
|
+
try {
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
67
|
+
ZStandard = require('@mongodb-js/zstd');
|
|
68
|
+
} catch (error) {
|
|
69
|
+
ZStandard = makeErrorModule(
|
|
70
|
+
new MongoMissingDependencyError(
|
|
71
|
+
'Optional module `@mongodb-js/zstd` not found. Please install it to enable zstd compression',
|
|
72
|
+
{ cause: error, dependencyName: 'zstd' }
|
|
73
|
+
)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return ZStandard;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @public
|
|
82
|
+
* Copy of the AwsCredentialIdentityProvider interface from [`smithy/types`](https://socket.dev/npm/package/\@smithy/types/files/1.1.1/dist-types/identity/awsCredentialIdentity.d.ts),
|
|
83
|
+
* the return type of the aws-sdk's `fromNodeProviderChain().provider()`.
|
|
84
|
+
*/
|
|
85
|
+
export interface AWSCredentials {
|
|
86
|
+
accessKeyId: string;
|
|
87
|
+
secretAccessKey: string;
|
|
88
|
+
sessionToken?: string;
|
|
89
|
+
expiration?: Date;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
type CredentialProvider = {
|
|
93
|
+
fromNodeProviderChain(
|
|
94
|
+
this: void,
|
|
95
|
+
options: { clientConfig: { region: string } }
|
|
96
|
+
): () => Promise<AWSCredentials>;
|
|
97
|
+
fromNodeProviderChain(this: void): () => Promise<AWSCredentials>;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export function getAwsCredentialProvider():
|
|
101
|
+
| CredentialProvider
|
|
102
|
+
| { kModuleError: MongoMissingDependencyError } {
|
|
103
|
+
try {
|
|
104
|
+
// Ensure you always wrap an optional require in the try block NODE-3199
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
106
|
+
const credentialProvider = require('@aws-sdk/credential-providers');
|
|
107
|
+
return credentialProvider;
|
|
108
|
+
} catch (error) {
|
|
109
|
+
return makeErrorModule(
|
|
110
|
+
new MongoMissingDependencyError(
|
|
111
|
+
'Optional module `@aws-sdk/credential-providers` not found.' +
|
|
112
|
+
' Please install it to enable getting aws credentials via the official sdk.',
|
|
113
|
+
{ cause: error, dependencyName: '@aws-sdk/credential-providers' }
|
|
114
|
+
)
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** @internal */
|
|
120
|
+
export type GcpMetadata =
|
|
121
|
+
| typeof import('gcp-metadata')
|
|
122
|
+
| { kModuleError: MongoMissingDependencyError };
|
|
123
|
+
|
|
124
|
+
export function getGcpMetadata(): GcpMetadata {
|
|
125
|
+
try {
|
|
126
|
+
// Ensure you always wrap an optional require in the try block NODE-3199
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
128
|
+
const credentialProvider = require('gcp-metadata');
|
|
129
|
+
return credentialProvider;
|
|
130
|
+
} catch (error) {
|
|
131
|
+
return makeErrorModule(
|
|
132
|
+
new MongoMissingDependencyError(
|
|
133
|
+
'Optional module `gcp-metadata` not found.' +
|
|
134
|
+
' Please install it to enable getting gcp credentials via the official sdk.',
|
|
135
|
+
{ cause: error, dependencyName: 'gcp-metadata' }
|
|
136
|
+
)
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** @internal */
|
|
142
|
+
export type SnappyLib = {
|
|
143
|
+
/**
|
|
144
|
+
* In order to support both we must check the return value of the function
|
|
145
|
+
* @param buf - Buffer to be compressed
|
|
146
|
+
*/
|
|
147
|
+
compress(buf: Buffer): Promise<Buffer>;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* In order to support both we must check the return value of the function
|
|
151
|
+
* @param buf - Buffer to be compressed
|
|
152
|
+
*/
|
|
153
|
+
uncompress(buf: Buffer, opt: { asBuffer: true }): Promise<Buffer>;
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export function getSnappy(): SnappyLib | { kModuleError: MongoMissingDependencyError } {
|
|
157
|
+
try {
|
|
158
|
+
// Ensure you always wrap an optional require in the try block NODE-3199
|
|
159
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
160
|
+
const value = require('snappy');
|
|
161
|
+
return value;
|
|
162
|
+
} catch (error) {
|
|
163
|
+
const kModuleError = new MongoMissingDependencyError(
|
|
164
|
+
'Optional module `snappy` not found. Please install it to enable snappy compression',
|
|
165
|
+
{ cause: error, dependencyName: 'snappy' }
|
|
166
|
+
);
|
|
167
|
+
return { kModuleError };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export type SocksLib = {
|
|
172
|
+
SocksClient: {
|
|
173
|
+
createConnection(options: {
|
|
174
|
+
command: 'connect';
|
|
175
|
+
destination: { host: string; port: number };
|
|
176
|
+
proxy: {
|
|
177
|
+
/** host and port are ignored because we pass existing_socket */
|
|
178
|
+
host: 'iLoveJavaScript';
|
|
179
|
+
port: 0;
|
|
180
|
+
type: 5;
|
|
181
|
+
userId?: string;
|
|
182
|
+
password?: string;
|
|
183
|
+
};
|
|
184
|
+
timeout?: number;
|
|
185
|
+
/** We always create our own socket, and pass it to this API for proxy negotiation */
|
|
186
|
+
existing_socket: Stream;
|
|
187
|
+
}): Promise<{ socket: Stream }>;
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
export function getSocks(): SocksLib | { kModuleError: MongoMissingDependencyError } {
|
|
192
|
+
try {
|
|
193
|
+
// Ensure you always wrap an optional require in the try block NODE-3199
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
195
|
+
const value = require('socks');
|
|
196
|
+
return value;
|
|
197
|
+
} catch (error) {
|
|
198
|
+
const kModuleError = new MongoMissingDependencyError(
|
|
199
|
+
'Optional module `socks` not found. Please install it to connections over a SOCKS5 proxy',
|
|
200
|
+
{ cause: error, dependencyName: 'socks' }
|
|
201
|
+
);
|
|
202
|
+
return { kModuleError };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** A utility function to get the instance of mongodb-client-encryption, if it exists. */
|
|
207
|
+
export function getMongoDBClientEncryption():
|
|
208
|
+
| typeof import('mongodb-client-encryption')
|
|
209
|
+
| { kModuleError: MongoMissingDependencyError } {
|
|
210
|
+
let mongodbClientEncryption = null;
|
|
211
|
+
|
|
212
|
+
try {
|
|
213
|
+
// NOTE(NODE-3199): Ensure you always wrap an optional require literally in the try block
|
|
214
|
+
// Cannot be moved to helper utility function, bundlers search and replace the actual require call
|
|
215
|
+
// in a way that makes this line throw at bundle time, not runtime, catching here will make bundling succeed
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
217
|
+
mongodbClientEncryption = require('mongodb-client-encryption');
|
|
218
|
+
} catch (error) {
|
|
219
|
+
const kModuleError = new MongoMissingDependencyError(
|
|
220
|
+
'Optional module `mongodb-client-encryption` not found. Please install it to use auto encryption or ClientEncryption.',
|
|
221
|
+
{ cause: error, dependencyName: 'mongodb-client-encryption' }
|
|
222
|
+
);
|
|
223
|
+
return { kModuleError };
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return mongodbClientEncryption;
|
|
227
|
+
}
|
package/src/encrypter.ts
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { AutoEncrypter, type AutoEncryptionOptions } from './client-side-encryption/auto_encrypter';
|
|
2
|
+
import { MONGO_CLIENT_EVENTS } from './constants';
|
|
3
|
+
import { getMongoDBClientEncryption } from './deps';
|
|
4
|
+
import { MongoInvalidArgumentError, MongoMissingDependencyError } from './error';
|
|
5
|
+
import { MongoClient, type MongoClientOptions } from './mongo_client';
|
|
6
|
+
|
|
7
|
+
/** @internal */
|
|
8
|
+
export interface EncrypterOptions {
|
|
9
|
+
autoEncryption: AutoEncryptionOptions;
|
|
10
|
+
maxPoolSize?: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** @internal */
|
|
14
|
+
export class Encrypter {
|
|
15
|
+
private internalClient: MongoClient | null;
|
|
16
|
+
bypassAutoEncryption: boolean;
|
|
17
|
+
needsConnecting: boolean;
|
|
18
|
+
autoEncrypter: AutoEncrypter;
|
|
19
|
+
|
|
20
|
+
constructor(client: MongoClient, uri: string, options: MongoClientOptions) {
|
|
21
|
+
if (typeof options.autoEncryption !== 'object') {
|
|
22
|
+
throw new MongoInvalidArgumentError('Option "autoEncryption" must be specified');
|
|
23
|
+
}
|
|
24
|
+
// initialize to null, if we call getInternalClient, we may set this it is important to not overwrite those function calls.
|
|
25
|
+
this.internalClient = null;
|
|
26
|
+
|
|
27
|
+
this.bypassAutoEncryption = !!options.autoEncryption.bypassAutoEncryption;
|
|
28
|
+
this.needsConnecting = false;
|
|
29
|
+
|
|
30
|
+
if (options.maxPoolSize === 0 && options.autoEncryption.keyVaultClient == null) {
|
|
31
|
+
options.autoEncryption.keyVaultClient = client;
|
|
32
|
+
} else if (options.autoEncryption.keyVaultClient == null) {
|
|
33
|
+
options.autoEncryption.keyVaultClient = this.getInternalClient(client, uri, options);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (this.bypassAutoEncryption) {
|
|
37
|
+
options.autoEncryption.metadataClient = undefined;
|
|
38
|
+
} else if (options.maxPoolSize === 0) {
|
|
39
|
+
options.autoEncryption.metadataClient = client;
|
|
40
|
+
} else {
|
|
41
|
+
options.autoEncryption.metadataClient = this.getInternalClient(client, uri, options);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (options.proxyHost) {
|
|
45
|
+
options.autoEncryption.proxyOptions = {
|
|
46
|
+
proxyHost: options.proxyHost,
|
|
47
|
+
proxyPort: options.proxyPort,
|
|
48
|
+
proxyUsername: options.proxyUsername,
|
|
49
|
+
proxyPassword: options.proxyPassword
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
this.autoEncrypter = new AutoEncrypter(client, options.autoEncryption);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
getInternalClient(client: MongoClient, uri: string, options: MongoClientOptions): MongoClient {
|
|
57
|
+
let internalClient = this.internalClient;
|
|
58
|
+
if (internalClient == null) {
|
|
59
|
+
const clonedOptions: MongoClientOptions = {};
|
|
60
|
+
|
|
61
|
+
for (const key of [
|
|
62
|
+
...Object.getOwnPropertyNames(options),
|
|
63
|
+
...Object.getOwnPropertySymbols(options)
|
|
64
|
+
] as string[]) {
|
|
65
|
+
if (['autoEncryption', 'minPoolSize', 'servers', 'caseTranslate', 'dbName'].includes(key))
|
|
66
|
+
continue;
|
|
67
|
+
Reflect.set(clonedOptions, key, Reflect.get(options, key));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
clonedOptions.minPoolSize = 0;
|
|
71
|
+
|
|
72
|
+
internalClient = new MongoClient(uri, clonedOptions);
|
|
73
|
+
this.internalClient = internalClient;
|
|
74
|
+
|
|
75
|
+
for (const eventName of MONGO_CLIENT_EVENTS) {
|
|
76
|
+
for (const listener of client.listeners(eventName)) {
|
|
77
|
+
internalClient.on(eventName, listener);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
client.on('newListener', (eventName, listener) => {
|
|
82
|
+
internalClient?.on(eventName, listener);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
this.needsConnecting = true;
|
|
86
|
+
}
|
|
87
|
+
return internalClient;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async connectInternalClient(): Promise<void> {
|
|
91
|
+
const internalClient = this.internalClient;
|
|
92
|
+
if (this.needsConnecting && internalClient != null) {
|
|
93
|
+
this.needsConnecting = false;
|
|
94
|
+
await internalClient.connect();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
async close(client: MongoClient): Promise<void> {
|
|
99
|
+
let error;
|
|
100
|
+
try {
|
|
101
|
+
await this.autoEncrypter.close();
|
|
102
|
+
} catch (autoEncrypterError) {
|
|
103
|
+
error = autoEncrypterError;
|
|
104
|
+
}
|
|
105
|
+
const internalClient = this.internalClient;
|
|
106
|
+
if (internalClient != null && client !== internalClient) {
|
|
107
|
+
return await internalClient.close();
|
|
108
|
+
}
|
|
109
|
+
if (error != null) {
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static checkForMongoCrypt(): void {
|
|
115
|
+
const mongodbClientEncryption = getMongoDBClientEncryption();
|
|
116
|
+
if ('kModuleError' in mongodbClientEncryption) {
|
|
117
|
+
throw new MongoMissingDependencyError(
|
|
118
|
+
'Auto-encryption requested, but the module is not installed. ' +
|
|
119
|
+
'Please add `mongodb-client-encryption` as a dependency of your project',
|
|
120
|
+
{
|
|
121
|
+
cause: mongodbClientEncryption['kModuleError'],
|
|
122
|
+
dependencyName: 'mongodb-client-encryption'
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|