mongodb-data-service 22.23.2 → 22.23.4

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.
@@ -16,20 +16,24 @@ const run_command_1 = require("./run-command");
16
16
  const logger_1 = require("./logger");
17
17
  const debug = logger_1.debug.extend('compass-connect');
18
18
  exports.createClonedClient = Symbol('createClonedClient');
19
+ // Return an ALLOWED_HOSTS value that matches the hosts listed in the connection
20
+ // string, including possible SRV "sibling" domains.
19
21
  function matchingAllowedHosts(connectionOptions) {
20
22
  const connectionString = new mongodb_connection_string_url_1.default(connectionOptions.connectionString, { looseValidation: true });
21
23
  const suffixes = connectionString.hosts.map((hostStr) => {
24
+ // eslint-disable-next-line
22
25
  const { host } = hostStr.match(/^(?<host>.+?)(?<port>:[^:\]\[]+)?$/)
23
26
  ?.groups;
24
27
  if (host.startsWith('[') && host.endsWith(']')) {
25
- return host.slice(1, -1);
28
+ return host.slice(1, -1); // IPv6
26
29
  }
27
30
  if (host.match(/^[0-9.]+$/)) {
28
- return host;
31
+ return host; // IPv4
29
32
  }
30
33
  if (!host.includes('.') || !connectionString.isSRV) {
31
34
  return host;
32
35
  }
36
+ // An SRV record for foo.bar.net can resolve to any hosts that match `*.bar.net`
33
37
  const parts = host.split('.');
34
38
  parts[0] = '*';
35
39
  return parts.join('.');
@@ -43,7 +47,7 @@ function prepareOIDCOptions({ connectionOptions, proxyOptions = {}, signal, reau
43
47
  applyProxyToOIDC: false,
44
48
  };
45
49
  const allowedFlows = connectionOptions.oidc?.allowedFlows ?? ['auth-code'];
46
- let isFirstAuthAttempt = true;
50
+ let isFirstAuthAttempt = true; // Don't need to prompt for re-auth on first attempt
47
51
  options.oidc.allowedFlows = async function () {
48
52
  if (!isFirstAuthAttempt) {
49
53
  await reauthenticationHandler?.();
@@ -52,6 +56,8 @@ function prepareOIDCOptions({ connectionOptions, proxyOptions = {}, signal, reau
52
56
  return allowedFlows;
53
57
  };
54
58
  if (connectionOptions.oidc?.enableUntrustedEndpoints) {
59
+ // Set the driver's `authMechanismProperties` (non-url) `ALLOWED_HOSTS` value
60
+ // to match the connection string hosts, including possible SRV "sibling" domains.
55
61
  options.authMechanismProperties.ALLOWED_HOSTS =
56
62
  matchingAllowedHosts(connectionOptions);
57
63
  }
@@ -84,6 +90,14 @@ async function connectMongoClientDataService({ connectionOptions, proxyOptions =
84
90
  ...oidcOptions,
85
91
  };
86
92
  if (connectionOptions.lookup) {
93
+ // NB: This value is currently only passed through by compass-web in the
94
+ // browser environment as a custom way to pass extra metadata to the
95
+ // underlying socket implementation that works over the websocket protocol.
96
+ // Event though the type of `connectionOptions.lookup` is technically
97
+ // assignable to `options.lookup`, this method is not actually implementing
98
+ // the `dns.lookup` interface and lead to unexpected behavior if driver ever
99
+ // decides to use it before directly passing to the `socket.connect` method
100
+ // as an option.
87
101
  options.lookup = connectionOptions.lookup;
88
102
  }
89
103
  if (options.autoEncryption && process.env.COMPASS_CRYPT_LIBRARY_PATH) {
@@ -95,7 +109,15 @@ async function connectMongoClientDataService({ connectionOptions, proxyOptions =
95
109
  },
96
110
  };
97
111
  }
112
+ // If connectionOptions.sshTunnel is defined, open an ssh tunnel.
113
+ //
114
+ // If connectionOptions.sshTunnel is not defined, the tunnel
115
+ // will also be undefined.
98
116
  const tunnel = (0, devtools_proxy_support_1.createSocks5Tunnel)((0, ssh_tunnel_helpers_1.getTunnelOptions)(connectionOptions, proxyOptions), 'generate-credentials', 'mongodb://');
117
+ // TODO: Not urgent, but it might be helpful to properly implement redaction
118
+ // and then actually log this to the log file, it's been helpful for debugging
119
+ // e2e tests for sure
120
+ // console.log({tunnel, tunnelOptions: getTunnelOptions(connectionOptions), connectionOptions, oidcOptions})
99
121
  if (tunnel && logger)
100
122
  (0, devtools_proxy_support_1.hookLogger)(tunnel.logger, logger, 'compass-tunnel');
101
123
  const tunnelForwardingErrors = [];
@@ -117,6 +139,8 @@ async function connectMongoClientDataService({ connectionOptions, proxyOptions =
117
139
  (0, devtools_connect_1.hookLogger)(connectLogger, logger, 'compass', redact_1.redactConnectionString);
118
140
  }
119
141
  async function connectSingleClient(overrideOptions) {
142
+ // Deep clone because of https://jira.mongodb.org/browse/NODE-4124,
143
+ // the options here are being mutated.
120
144
  const connectOptions = lodash_1.default.cloneDeep({ ...options, ...overrideOptions });
121
145
  const { client, state } = await (0, devtools_connect_1.connectMongoClient)(url, connectOptions, connectLogger, CompassMongoClient);
122
146
  await (0, run_command_1.runCommand)(client.db('admin'), { ping: 1 });
@@ -138,6 +162,11 @@ async function connectMongoClientDataService({ connectionOptions, proxyOptions =
138
162
  let state;
139
163
  try {
140
164
  debug('waiting for MongoClient to connect ...');
165
+ // Create one or two clients, depending on whether CSFLE
166
+ // is enabled. If it is, create one for interacting with
167
+ // server metadata (e.g. build info, instance data, etc.)
168
+ // and one for interacting with the actual CRUD data.
169
+ // If CSFLE is disabled, use a single client for both cases.
141
170
  [metadataClient, crudClient, state] = await Promise.race([
142
171
  (async () => {
143
172
  const { client: metadataClient, state } = await connectSingleClient({
@@ -145,8 +174,13 @@ async function connectMongoClientDataService({ connectionOptions, proxyOptions =
145
174
  });
146
175
  const parentHandlePromise = state.getStateShareServer();
147
176
  parentHandlePromise.catch(() => {
177
+ /* handled below */
148
178
  });
149
179
  let crudClient;
180
+ // This used to happen in parallel, but since the introduction of OIDC connection
181
+ // state needs to be shared and managed on the longest-lived client instance,
182
+ // so we need to use the DevtoolsConnectionState instance created for the metadata
183
+ // client here.
150
184
  if (options.autoEncryption) {
151
185
  try {
152
186
  crudClient = (await connectSingleClient({
@@ -159,6 +193,7 @@ async function connectMongoClientDataService({ connectionOptions, proxyOptions =
159
193
  }
160
194
  }
161
195
  try {
196
+ // Make sure that if this failed, we clean up properly.
162
197
  await parentHandlePromise;
163
198
  }
164
199
  catch (err) {
@@ -166,10 +201,12 @@ async function connectMongoClientDataService({ connectionOptions, proxyOptions =
166
201
  await crudClient?.close();
167
202
  throw err;
168
203
  }
204
+ // Return the parentHandle here so that it's included in the options that
205
+ // are passed to compass-shell.
169
206
  return [metadataClient, crudClient, state];
170
207
  })(),
171
208
  (0, ssh_tunnel_helpers_1.waitForTunnelError)(tunnel),
172
- ]);
209
+ ]); // waitForTunnel always throws, never resolves
173
210
  options.parentHandle = await state.getStateShareServer();
174
211
  return [
175
212
  metadataClient,
@@ -187,6 +224,7 @@ async function connectMongoClientDataService({ connectionOptions, proxyOptions =
187
224
  crudClient?.close(),
188
225
  metadataClient?.close(),
189
226
  ]).catch(() => {
227
+ /* ignore errors */
190
228
  });
191
229
  if (tunnelForwardingErrors.length > 0) {
192
230
  err.message = `${err.message} [SSH Tunnel errors: ${tunnelForwardingErrors.map((err) => err.message)}]`;
@@ -1 +1 @@
1
- {"version":3,"file":"connect-mongo-client.js","sourceRoot":"","sources":["../src/connect-mongo-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect-mongo-client.js","sourceRoot":"","sources":["../src/connect-mongo-client.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,8 @@ class ConnectionAttempt {
69
69
  this._logger.debug('Connection Attempt', mongoLogId(1001000281), 'close requested', 'disconnected from connection attempt');
70
70
  }
71
71
  catch (err) {
72
+ // When the disconnect fails, we free up the ui and we can
73
+ // silently wait for the timeout if it's still attempting to connect.
72
74
  this._logger.debug('Connection Attempt', mongoLogId(1001000283), 'close requested', 'error while disconnecting from connection attempt', err);
73
75
  }
74
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connection-attempt.js","sourceRoot":"","sources":["../src/connection-attempt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection-attempt.js","sourceRoot":"","sources":["../src/connection-attempt.ts"],"names":[],"mappings":"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"}
@@ -7,11 +7,32 @@ export type OIDCOptions = Omit<NonNullable<DevtoolsConnectOptions['oidc']>, 'not
7
7
  allowedFlows?: ExtractArrayEntryType<NonNullable<DevtoolsConnectOptions['oidc']>['allowedFlows']>[];
8
8
  };
9
9
  export interface ConnectionOptions {
10
+ /**
11
+ * The connection string to connect to the MongoDB instance including all options set by the user.
12
+ */
10
13
  connectionString: string;
14
+ /**
15
+ * If present the connection should be established via an SSH tunnel according to the provided SSH options.
16
+ */
11
17
  sshTunnel?: ConnectionSshOptions;
18
+ /**
19
+ * Alternative to Socks5 proxying / SSH tunnel: If set, inherit Compass's application-level
20
+ * proxy settings.
21
+ */
12
22
  useApplicationLevelProxy?: boolean;
23
+ /**
24
+ * If present the connection should use OIDC authentication.
25
+ */
13
26
  oidc?: OIDCOptions;
27
+ /**
28
+ * Options related to client-side field-level encryption.
29
+ */
14
30
  fleOptions?: ConnectionFleOptions;
31
+ /**
32
+ * Optional, a real net / tls connection callback function option that is only
33
+ * used in Compass as a way to pass extra metadata about an Atlas cluster when
34
+ * connecting in the browser environment through the websocket
35
+ */
15
36
  lookup?: () => {
16
37
  wsURL: string;
17
38
  projectId?: string;
@@ -20,15 +41,39 @@ export interface ConnectionOptions {
20
41
  };
21
42
  }
22
43
  export interface ConnectionFleOptions {
44
+ /**
45
+ * Whether to store KMS credentials to disk or not.
46
+ */
23
47
  storeCredentials: boolean;
48
+ /**
49
+ * Encryption options passed to the driver verbatim.
50
+ */
24
51
  autoEncryption?: AutoEncryptionOptions;
25
52
  }
26
53
  export interface ConnectionSshOptions {
54
+ /**
55
+ * Host to establish SSH tunnel to.
56
+ */
27
57
  host: string;
58
+ /**
59
+ * Port to establish SSH tunnel to.
60
+ */
28
61
  port: number;
62
+ /**
63
+ * Username of the SSH user.
64
+ */
29
65
  username: string;
66
+ /**
67
+ * Password for SSH authentication.
68
+ */
30
69
  password?: string;
70
+ /**
71
+ * Private key file to use as SSH identity.
72
+ */
31
73
  identityKeyFile?: string;
74
+ /**
75
+ * Password for protected `identitiyFile`.
76
+ */
32
77
  identityKeyPassphrase?: string;
33
78
  }
34
79
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"connection-options.d.ts","sourceRoot":"","sources":["../src/connection-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,EAC3C,kBAAkB,GAAG,QAAQ,GAAG,cAAc,CAC/C,GAAG;IAGF,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAInC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC,YAAY,CAAC,EAAE,qBAAqB,CAClC,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAC5D,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAIhC,gBAAgB,EAAE,MAAM,CAAC;IAKzB,SAAS,CAAC,EAAE,oBAAoB,CAAC;IAMjC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAKnC,IAAI,CAAC,EAAE,WAAW,CAAC;IAKnB,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAOlC,MAAM,CAAC,EAAE,MAAM;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IAInC,gBAAgB,EAAE,OAAO,CAAC;IAK1B,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IAInC,IAAI,EAAE,MAAM,CAAC;IAKb,IAAI,EAAE,MAAM,CAAC;IAKb,QAAQ,EAAE,MAAM,CAAC;IAKjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,eAAe,CAAC,EAAE,MAAM,CAAC;IAKzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC"}
1
+ {"version":3,"file":"connection-options.d.ts","sourceRoot":"","sources":["../src/connection-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,EAC3C,kBAAkB,GAAG,QAAQ,GAAG,cAAc,CAC/C,GAAG;IAGF,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAInC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC,YAAY,CAAC,EAAE,qBAAqB,CAClC,WAAW,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAC5D,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EAAE,oBAAoB,CAAC;IAEjC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAElC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC"}
@@ -2,13 +2,54 @@ import type { MongoClient, Document } from 'mongodb';
2
2
  import type { DataService } from './data-service';
3
3
  import type { CollectionInfo, CollectionInfoNameOnly } from './run-command';
4
4
  import type { UnboundDataServiceImplLogger } from './logger';
5
+ /**
6
+ * A list of field paths for a document.
7
+ * For example, ['a', 'b'] refers to the field b of the nested document a.
8
+ * This is used rather than dot-style `a.b` notation to disambiguate
9
+ * cases in which field names contain a literal `.` character.
10
+ */
5
11
  type FieldPath = string[];
12
+ /**
13
+ * A description of the list of encrypted fields for a given collection.
14
+ * Equality-searchable fields are handled separately since they require
15
+ * special treatments in some cases.
16
+ */
6
17
  export interface CSFLEEncryptedFieldsSet {
7
18
  readonly encryptedFields: FieldPath[];
8
19
  readonly equalityQueryableEncryptedFields: FieldPath[];
9
20
  }
21
+ /**
22
+ * Helper for ensuring that all fields that were decrypted when
23
+ * they were read from the server are also written back as encrypted.
24
+ */
10
25
  export interface CSFLECollectionTracker {
26
+ /**
27
+ * Returns whether performing an update (or replacement) of
28
+ * `originalDocument` from the collection `ns` is allowable
29
+ * with regards to re-encrypting fields that were originally
30
+ * decrypted.
31
+ *
32
+ * The original documents **must** have been received from the
33
+ * server or generated from a HadronDocument instance that
34
+ * was created based on a document received from the server.
35
+ * This is required for ensuring that the tracker properly
36
+ * recognizes fields that were read as decrypted fields.
37
+ *
38
+ * @param ns A MongoDB `database.collection` namespace.
39
+ * @param originalDocument The original document that was received from the server.
40
+ */
11
41
  isUpdateAllowed(ns: string, originalDocument: Document): Promise<boolean>;
42
+ /**
43
+ * Returns whether a collection is known to have a schema
44
+ * description that would prevent unintentional inserts
45
+ * of unencrypted data.
46
+ *
47
+ * This includes the case in which any server schema is
48
+ * present, not just one that indicates that there are fields
49
+ * which should be encrypted.
50
+ *
51
+ * @param ns A MongoDB `database.collection` namespace.
52
+ */
12
53
  knownSchemaForCollection(ns: string): Promise<{
13
54
  hasSchema: boolean;
14
55
  encryptedFields: CSFLEEncryptedFieldsSet;
@@ -1 +1 @@
1
- {"version":3,"file":"csfle-collection-tracker.d.ts","sourceRoot":"","sources":["../src/csfle-collection-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACX,QAAQ,EAET,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EAEvB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAS7D,KAAK,SAAS,GAAG,MAAM,EAAE,CAAC;AAO1B,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,gCAAgC,EAAE,SAAS,EAAE,CAAC;CACxD;AAMD,MAAM,WAAW,sBAAsB;IAgBrC,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAa1E,wBAAwB,CACtB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,uBAAuB,CAAA;KAAE,CAAC,CAAC;IAE7E,oBAAoB,CAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,GACvD,IAAI,CAAC;CACT;AAED,cAAM,2BAA4B,YAAW,uBAAuB;IAClE,gBAAgB,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,EAAE,CAAM;IAEzE,IAAI,eAAe,IAAI,SAAS,EAAE,CAEjC;IAED,IAAI,gCAAgC,IAAI,SAAS,EAAE,CAIlD;IAED,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,OAAO,GAAG,IAAI;IAerE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B;IAW3D,MAAM,CAAC,gBAAgB,CACrB,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,SAAS,GACd,OAAO;IAMV,MAAM,CAAC,iCAAiC,CACtC,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,SAAS,GACd,OAAO;IAMV,MAAM,CAAC,KAAK,CACV,GAAG,IAAI,EAAE,CAAC,uBAAuB,GAAG,SAAS,CAAC,EAAE,GAC/C,2BAA2B;CAU/B;AAED,UAAU,mBAAmB;IAC3B,6BAA6B,CAAC,EAAE,2BAA2B,CAAC;IAC5D,6BAA6B,CAAC,EAAE,2BAA2B,CAAC;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAsFD,qBAAa,0BAA2B,YAAW,sBAAsB;IAIrE,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO,CAAC;IALlB,SAAS,mCAA0C;gBAGzC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,iBAAiB,CAAC,EACzD,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,0CAA8B;IAmB1C,eAAe,CACnB,EAAE,EAAE,MAAM,EACV,gBAAgB,EAAE,QAAQ,GACzB,OAAO,CAAC,OAAO,CAAC;IA4Bb,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAClD,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,2BAA2B,CAAC;KAC9C,CAAC;IAYF,+BAA+B,IAAI,IAAI;IAoBjC,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2BzE,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB;IASxD,oBAAoB,CAClB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,GACvD,IAAI;IAkBP,2BAA2B,CAAC,aAAa,EAAE,WAAW,GAAG,WAAW;IA8CpE,2CAA2C,CACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,eAAe,EAAE,cAAc,EAAE,GAChC,KAAK,GAAG,SAAS;CAmDrB"}
1
+ {"version":3,"file":"csfle-collection-tracker.d.ts","sourceRoot":"","sources":["../src/csfle-collection-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACX,QAAQ,EAET,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EAEvB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAG7D;;;;;GAKG;AACH,KAAK,SAAS,GAAG,MAAM,EAAE,CAAC;AAE1B;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,gCAAgC,EAAE,SAAS,EAAE,CAAC;CACxD;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1E;;;;;;;;;;OAUG;IACH,wBAAwB,CACtB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,uBAAuB,CAAA;KAAE,CAAC,CAAC;IAE7E,oBAAoB,CAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,GACvD,IAAI,CAAC;CACT;AAED,cAAM,2BAA4B,YAAW,uBAAuB;IAClE,gBAAgB,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,EAAE,CAAM;IAEzE,IAAI,eAAe,IAAI,SAAS,EAAE,CAEjC;IAED,IAAI,gCAAgC,IAAI,SAAS,EAAE,CAIlD;IAED,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,OAAO,GAAG,IAAI;IAerE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B;IAW3D,MAAM,CAAC,gBAAgB,CACrB,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,SAAS,GACd,OAAO;IAMV,MAAM,CAAC,iCAAiC,CACtC,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,SAAS,GACd,OAAO;IAMV,MAAM,CAAC,KAAK,CACV,GAAG,IAAI,EAAE,CAAC,uBAAuB,GAAG,SAAS,CAAC,EAAE,GAC/C,2BAA2B;CAU/B;AAED,UAAU,mBAAmB;IAC3B,6BAA6B,CAAC,EAAE,2BAA2B,CAAC;IAC5D,6BAA6B,CAAC,EAAE,2BAA2B,CAAC;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAsFD,qBAAa,0BAA2B,YAAW,sBAAsB;IAIrE,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO,CAAC;IALlB,SAAS,mCAA0C;gBAGzC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,iBAAiB,CAAC,EACzD,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,0CAA8B;IAmB1C,eAAe,CACnB,EAAE,EAAE,MAAM,EACV,gBAAgB,EAAE,QAAQ,GACzB,OAAO,CAAC,OAAO,CAAC;IA4Bb,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAClD,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,2BAA2B,CAAC;KAC9C,CAAC;IAYF,+BAA+B,IAAI,IAAI;IAoBjC,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2BzE,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB;IASxD,oBAAoB,CAClB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,GACvD,IAAI;IAkBP,2BAA2B,CAAC,aAAa,EAAE,WAAW,GAAG,WAAW;IA8CpE,2CAA2C,CACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,eAAe,EAAE,cAAc,EAAE,GAChC,KAAK,GAAG,SAAS;CAmDrB"}
@@ -22,6 +22,9 @@ class CSFLEEncryptedFieldsSetImpl {
22
22
  addField(path, equalityQueryable) {
23
23
  const existingField = this._encryptedFields.find((field) => lodash_1.default.isEqual(field.path, path));
24
24
  if (existingField) {
25
+ // Deduplicate field entries. If there already is one for this field,
26
+ // only make sure that the `equalityQueryable` attributes match.
27
+ // If they don't, assume that the field is not equality-queryable.
25
28
  existingField.equalityQueryable &&= equalityQueryable;
26
29
  }
27
30
  else {
@@ -55,10 +58,12 @@ class CSFLEEncryptedFieldsSetImpl {
55
58
  return ret;
56
59
  }
57
60
  }
61
+ // Fetch a list of encrypted fields from a JSON schema document.
58
62
  function extractEncryptedFieldsFromSchema(schema) {
59
63
  let ret = new CSFLEEncryptedFieldsSetImpl();
60
64
  if (schema?.encrypt) {
61
65
  const algorithm = schema?.encrypt?.algorithm;
66
+ // Deterministic encryption in CSFLE = Equality-searchable
62
67
  return ret.addField([], algorithm === 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic');
63
68
  }
64
69
  for (const [key, subschema] of Object.entries(schema?.properties ?? {})) {
@@ -67,6 +72,7 @@ function extractEncryptedFieldsFromSchema(schema) {
67
72
  }
68
73
  return ret;
69
74
  }
75
+ // Fetch a list of encrypted fields from a QE EncryptedFieldConfig document.
70
76
  function extractEncryptedFieldsFromEncryptedFieldsConfig(encryptedFields) {
71
77
  const fields = encryptedFields?.fields ?? [];
72
78
  const ret = new CSFLEEncryptedFieldsSetImpl();
@@ -79,14 +85,18 @@ function extractEncryptedFieldsFromEncryptedFieldsConfig(encryptedFields) {
79
85
  }
80
86
  return ret;
81
87
  }
88
+ // Fetch a list of encrypted fields based on client-side driver options.
82
89
  function extractEncrytedFieldFromAutoEncryptionOptions(ns, autoEncryption) {
83
90
  return CSFLEEncryptedFieldsSetImpl.merge(extractEncryptedFieldsFromSchema(autoEncryption.schemaMap?.[ns]), extractEncryptedFieldsFromEncryptedFieldsConfig(autoEncryption?.encryptedFieldsMap?.[ns]));
84
91
  }
92
+ // Fetch a list of encrypted fields based on the server-side collection info.
85
93
  function extractEncryptedFieldsFromListCollectionsResult(options) {
86
94
  const schema = options?.validator?.$jsonSchema;
87
95
  const encryptedFieldsConfig = options?.encryptedFields;
88
96
  return CSFLEEncryptedFieldsSetImpl.merge(extractEncryptedFieldsFromSchema(schema), extractEncryptedFieldsFromEncryptedFieldsConfig(encryptedFieldsConfig));
89
97
  }
98
+ // Fetch a list of encrypted fields based on a document received from the server.
99
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
100
  function extractEncryptedFieldsFromDocument(doc) {
91
101
  const decryptedFields = (doc?.[Symbol.for('@@mdb.decryptedKeys')] ?? []).map((field) => [field]);
92
102
  for (const [key, value] of Object.entries(doc)) {
@@ -111,15 +121,24 @@ class CSFLECollectionTrackerImpl {
111
121
  const { autoEncrypter } = this._crudClient;
112
122
  if (autoEncrypter) {
113
123
  this._logger?.info('COMPASS-DATA-SERVICE', (0, logger_1.mongoLogId)(1001000118), 'CSFLECollectionTracker', 'Hooking AutoEncrypter metaDataClient property');
124
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
114
125
  autoEncrypter._metaDataClient = this._createHookedMetadataClient(autoEncrypter._metaDataClient);
115
126
  }
116
127
  }
117
128
  async isUpdateAllowed(ns, originalDocument) {
118
129
  const originalDocEncryptedFields = extractEncryptedFieldsFromDocument(originalDocument);
119
130
  if (originalDocEncryptedFields.length === 0) {
131
+ // Shortcut: If no fields were encrypted when we got them
132
+ // from the server, then we also do not need to worry
133
+ // about writing them back unencrypted.
120
134
  return true;
121
135
  }
122
136
  const { encryptedFields } = await this.knownSchemaForCollection(ns);
137
+ // Updates are allowed if there is a guarantee that all fields that
138
+ // were decrypted in the original document will also be written back
139
+ // as encrypted fields. To that end, the server or client configuration
140
+ // must contain entries that are picked up by libmongocrypt as indicators
141
+ // for encrypted fields.
123
142
  for (const originalDocPath of originalDocEncryptedFields) {
124
143
  if (!CSFLEEncryptedFieldsSetImpl.isEncryptedField(encryptedFields, originalDocPath)) {
125
144
  return false;
@@ -134,6 +153,7 @@ class CSFLECollectionTrackerImpl {
134
153
  return { hasSchema, encryptedFields };
135
154
  }
136
155
  _processClientSchemaDefinitions() {
156
+ // Process client-side options available at instantiation time.
137
157
  const { autoEncryption } = this._crudClient.options;
138
158
  for (const ns of [
139
159
  ...Object.keys(autoEncryption?.schemaMap ?? {}),
@@ -152,6 +172,11 @@ class CSFLECollectionTrackerImpl {
152
172
  !info.lastUpdated ||
153
173
  isOlderThan1Minute(info.lastUpdated)) {
154
174
  this._logger?.info('COMPASS-DATA-SERVICE', (0, logger_1.mongoLogId)(1001000120), 'CSFLECollectionTracker', 'Refreshing listCollections cache', { ns });
175
+ // Let the data service fetch new collection infos.
176
+ // We installed a listener earlier which picks up the results,
177
+ // and additionally also fetches the results from unrelated
178
+ // listCollections calls so that explicitly fetching them
179
+ // becomes necessary less often.
155
180
  await this._dataService.listCollections(parsedNs.database, {
156
181
  name: parsedNs.collection,
157
182
  });
@@ -159,6 +184,7 @@ class CSFLECollectionTrackerImpl {
159
184
  return info;
160
185
  }
161
186
  _getCSFLECollectionInfo(ns) {
187
+ // Look up the internally stored CSFLE collection info for a specific namespace.
162
188
  const existing = this._nsToInfo.get(ns);
163
189
  if (existing)
164
190
  return existing;
@@ -169,12 +195,24 @@ class CSFLECollectionTrackerImpl {
169
195
  updateCollectionInfo(ns, result) {
170
196
  this._logger?.info('COMPASS-DATA-SERVICE', (0, logger_1.mongoLogId)(1001000121), 'CSFLECollectionTracker', 'Processing listCollections update', { ns });
171
197
  const info = this._getCSFLECollectionInfo(ns);
198
+ // Store the updated list of encrypted fields.
199
+ // This list can be empty if no server-side validation existed or was removed.
172
200
  info.serverEnforcedEncryptedFields =
173
201
  extractEncryptedFieldsFromListCollectionsResult(result.options);
174
202
  info.hasServerSchema = !!result.options?.validator?.$jsonSchema;
175
203
  info.lastUpdated = new Date();
176
204
  }
177
205
  _createHookedMetadataClient(wrappedClient) {
206
+ // The AutoEncrypter instance used by the MongoClient will
207
+ // use listCollections to look up metadata for a given collection.
208
+ // We hook into this process to verify that this listCollections
209
+ // call does not return looser restrictions than those that
210
+ // Compass knows about and relies on.
211
+ // This listCollections call will only be made in a specific way,
212
+ // with specific arguments. If this ever changes at some point,
213
+ // we may need to work out e.g. a good semi-official hook with the
214
+ // driver team, similar to what we have for the @@mdb.decryptedFields
215
+ // functionality, but currently no such changes are planned or expected.
178
216
  return {
179
217
  db: (dbName) => {
180
218
  return {
@@ -200,6 +238,9 @@ class CSFLECollectionTrackerImpl {
200
238
  }
201
239
  _checkListCollectionsForLibmongocryptResult(dbName, filter, collectionInfos) {
202
240
  if (typeof filter?.name !== 'string' || collectionInfos.length > 1) {
241
+ // This is an assertion more than an actual error condition.
242
+ // It ensures that we're only getting listCollections requests
243
+ // in the format that we expect them to come in.
203
244
  return new Error(`[Compass] Unexpected listCollections request on '${dbName}' with name: '${filter?.name}'`);
204
245
  }
205
246
  const ns = `${dbName}.${filter.name}`;
@@ -212,6 +253,8 @@ class CSFLECollectionTrackerImpl {
212
253
  }
213
254
  const [info] = collectionInfos;
214
255
  if (filter.name !== info.name) {
256
+ // Also just a consistency check to make sure that things
257
+ // didn't go *terribly* wrong somewhere.
215
258
  return new Error(`[Compass] Unexpected listCollections name mismatch: got ${info.name}, expected ${filter.name}`);
216
259
  }
217
260
  const newInfo = extractEncryptedFieldsFromListCollectionsResult(info.options);
@@ -1 +1 @@
1
- {"version":3,"file":"csfle-collection-tracker.js","sourceRoot":"","sources":["../src/csfle-collection-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"csfle-collection-tracker.js","sourceRoot":"","sources":["../src/csfle-collection-tracker.ts"],"names":[],"mappings":"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"}