mongodb-data-service 21.19.0 → 21.22.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.
@@ -2,7 +2,7 @@ import { MongoClient } from 'mongodb';
2
2
  import type { DevtoolsConnectOptions } from '@mongodb-js/devtools-connect';
3
3
  import type SSHTunnel from '@mongodb-js/ssh-tunnel';
4
4
  import type { ConnectionOptions } from './connection-options';
5
- export default function connectMongoClientCompass(connectionOptions: ConnectionOptions, setupListeners: (client: MongoClient) => void): Promise<[
5
+ export default function connectMongoClientCompass(connectionOptions: Readonly<ConnectionOptions>, setupListeners: (client: MongoClient) => void): Promise<[
6
6
  metadataClient: MongoClient,
7
7
  crudClient: MongoClient,
8
8
  sshTunnel: SSHTunnel | undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"connect-mongo-client.d.ts","sourceRoot":"","sources":["../src/connect-mongo-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AAMpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAS9D,wBAA8B,yBAAyB,CACrD,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAC5C,OAAO,CACR;IACE,cAAc,EAAE,WAAW;IAC3B,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,SAAS,GAAG,SAAS;IAChC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,sBAAsB,CAAA;KAAE;CAC1D,CACF,CAuFA"}
1
+ {"version":3,"file":"connect-mongo-client.d.ts","sourceRoot":"","sources":["../src/connect-mongo-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AAMpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAS9D,wBAA8B,yBAAyB,CACrD,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAC9C,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAC5C,OAAO,CACR;IACE,cAAc,EAAE,WAAW;IAC3B,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,SAAS,GAAG,SAAS;IAChC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,sBAAsB,CAAA;KAAE;CAC1D,CACF,CAiGA"}
@@ -12,7 +12,7 @@ const compass_logging_1 = __importDefault(require("@mongodb-js/compass-logging")
12
12
  const ssh_tunnel_1 = require("./ssh-tunnel");
13
13
  const { debug, log } = (0, compass_logging_1.default)('COMPASS-CONNECT');
14
14
  async function connectMongoClientCompass(connectionOptions, setupListeners) {
15
- var _a;
15
+ var _a, _b;
16
16
  debug('connectMongoClient invoked', (0, redact_1.redactConnectionOptions)(connectionOptions));
17
17
  const url = connectionOptions.connectionString;
18
18
  const options = {
@@ -20,6 +20,15 @@ async function connectMongoClientCompass(connectionOptions, setupListeners) {
20
20
  useSystemCA: connectionOptions.useSystemCA,
21
21
  autoEncryption: (_a = connectionOptions.fleOptions) === null || _a === void 0 ? void 0 : _a.autoEncryption,
22
22
  };
23
+ if (options.autoEncryption && process.env.COMPASS_CRYPT_LIBRARY_PATH) {
24
+ options.autoEncryption = {
25
+ ...options.autoEncryption,
26
+ extraOptions: {
27
+ ...(_b = options.autoEncryption) === null || _b === void 0 ? void 0 : _b.extraOptions,
28
+ cryptSharedLibPath: process.env.COMPASS_CRYPT_LIBRARY_PATH,
29
+ },
30
+ };
31
+ }
23
32
  const [tunnel, socks5Options] = await (0, ssh_tunnel_1.openSshTunnel)(connectionOptions.sshTunnel);
24
33
  if (socks5Options) {
25
34
  Object.assign(options, socks5Options);
@@ -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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"}
package/lib/connect.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import type { ConnectionOptions } from './connection-options';
2
- import DataService from './data-service';
2
+ import type { DataService } from './data-service';
3
3
  export default function connect(connectionOptions: ConnectionOptions): Promise<DataService>;
4
4
  //# sourceMappingURL=connect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC,wBAA8B,OAAO,CACnC,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,WAAW,CAAC,CAItB"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,wBAA8B,OAAO,CACnC,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,WAAW,CAAC,CAItB"}
package/lib/connect.js CHANGED
@@ -1,11 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const data_service_1 = __importDefault(require("./data-service"));
3
+ const data_service_1 = require("./data-service");
7
4
  async function connect(connectionOptions) {
8
- const dataService = new data_service_1.default(connectionOptions);
5
+ const dataService = new data_service_1.DataServiceImpl(connectionOptions);
9
6
  await dataService.connect();
10
7
  return dataService;
11
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":";;;;;AACA,kEAAyC;AAE1B,KAAK,UAAU,OAAO,CACnC,iBAAoC;IAEpC,MAAM,WAAW,GAAG,IAAI,sBAAW,CAAC,iBAAiB,CAAC,CAAC;IACvD,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAND,0BAMC"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":";;AAEA,iDAAiD;AAElC,KAAK,UAAU,OAAO,CACnC,iBAAoC;IAEpC,MAAM,WAAW,GAAG,IAAI,8BAAe,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAND,0BAMC"}
@@ -7,7 +7,7 @@ export interface ConnectionOptions {
7
7
  }
8
8
  export interface ConnectionFleOptions {
9
9
  storeCredentials: boolean;
10
- autoEncryption: AutoEncryptionOptions;
10
+ autoEncryption?: AutoEncryptionOptions;
11
11
  }
12
12
  export interface ConnectionSshOptions {
13
13
  host: string;
@@ -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;AAErD,MAAM,WAAW,iBAAiB;IAIhC,gBAAgB,EAAE,MAAM,CAAC;IAKzB,SAAS,CAAC,EAAE,oBAAoB,CAAC;IAKjC,WAAW,CAAC,EAAE,OAAO,CAAC;IAKtB,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IAInC,gBAAgB,EAAE,OAAO,CAAC;IAK1B,cAAc,EAAE,qBAAqB,CAAC;CACvC;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;AAErD,MAAM,WAAW,iBAAiB;IAIhC,gBAAgB,EAAE,MAAM,CAAC;IAKzB,SAAS,CAAC,EAAE,oBAAoB,CAAC;IAKjC,WAAW,CAAC,EAAE,OAAO,CAAC;IAKtB,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;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 +1 @@
1
- {"version":3,"file":"connection-secrets.d.ts","sourceRoot":"","sources":["../src/connection-secrets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,wBAAgB,YAAY,CAC1B,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,EACxC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GACrC,cAAc,CA4DhB;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG;IACxE,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CA6EA"}
1
+ {"version":3,"file":"connection-secrets.d.ts","sourceRoot":"","sources":["../src/connection-secrets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,wBAAgB,YAAY,CAC1B,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,EACxC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GACrC,cAAc,CA4DhB;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG;IACxE,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CA+EA"}
@@ -115,7 +115,9 @@ function extractSecrets(connectionInfo) {
115
115
  ...kmsProviders.map((p) => `tlsOptions.${p}.tlsCertificateKeyFilePassword`),
116
116
  ];
117
117
  connectionOptions.fleOptions.autoEncryption = lodash_1.default.omit(autoEncryption, secretPaths);
118
- secrets.autoEncryption = lodash_1.default.pick(autoEncryption, secretPaths);
118
+ if (connectionOptions.fleOptions.storeCredentials) {
119
+ secrets.autoEncryption = lodash_1.default.pick(autoEncryption, secretPaths);
120
+ }
119
121
  }
120
122
  return { connectionInfo: connectionInfoWithoutSecrets, secrets };
121
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connection-secrets.js","sourceRoot":"","sources":["../src/connection-secrets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection-secrets.js","sourceRoot":"","sources":["../src/connection-secrets.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAuB;AACvB,+FAEuC;AAkBvC,SAAgB,YAAY,CAC1B,cAAwC,EACxC,OAAsC;;IAEtC,MAAM,yBAAyB,GAAG,gBAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,yBAAyB,CAAC;KAClC;IAED,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,iBAAiB,CAAC;IAEtE,MAAM,GAAG,GAAG,IAAI,uCAAgB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,GAAG,CAAC,iBAAiB,EAAsB,CAAC;IAEjE,IAAI,OAAO,CAAC,QAAQ,EAAE;QACpB,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;KACjC;IAED,IAAI,OAAO,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,SAAS,EAAE;QAC5D,iBAAiB,CAAC,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC;KAClE;IAED,IAAI,OAAO,CAAC,mBAAmB,IAAI,iBAAiB,CAAC,SAAS,EAAE;QAC9D,iBAAiB,CAAC,SAAS,CAAC,qBAAqB;YAC/C,OAAO,CAAC,mBAAmB,CAAC;KAC/B;IAED,IAAI,OAAO,CAAC,cAAc,KAAI,MAAA,iBAAiB,CAAC,UAAU,0CAAE,cAAc,CAAA,EAAE;QAC1E,gBAAC,CAAC,KAAK,CACL,MAAA,iBAAiB,CAAC,UAAU,0CAAE,cAAc,EAC5C,OAAO,CAAC,cAAc,CACvB,CAAC;KACH;IAED,IAAI,OAAO,CAAC,6BAA6B,EAAE;QACzC,YAAY,CAAC,GAAG,CACd,+BAA+B,EAC/B,OAAO,CAAC,6BAA6B,CACtC,CAAC;KACH;IAED,IAAI,OAAO,CAAC,aAAa,EAAE;QACzB,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KAC1D;IAED,IAAI,OAAO,CAAC,eAAe,EAAE;QAC3B,MAAM,uBAAuB,GAC3B,IAAI,4DAA4B,CAC9B,YAAY,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAC5C,CAAC;QAEJ,uBAAuB,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAE1E,YAAY,CAAC,GAAG,CACd,yBAAyB,EACzB,uBAAuB,CAAC,QAAQ,EAAE,CACnC,CAAC;KACH;IAED,yBAAyB,CAAC,iBAAiB,CAAC,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC;IAExE,OAAO,yBAAyB,CAAC;AACnC,CAAC;AA/DD,oCA+DC;AAED,SAAgB,cAAc,CAAC,cAAwC;;IAIrE,MAAM,4BAA4B,GAAG,gBAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACjE,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,iBAAiB,CAAC;IACzE,MAAM,GAAG,GAAG,IAAI,uCAAgB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,GAAG,CAAC,iBAAiB,EAAsB,CAAC;IAEjE,IAAI,GAAG,CAAC,QAAQ,EAAE;QAChB,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAChC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;KACnB;IAED,IAAI,MAAA,iBAAiB,CAAC,SAAS,0CAAE,QAAQ,EAAE;QACzC,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC;QACjE,OAAO,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC;KAC7C;IAED,IAAI,MAAA,iBAAiB,CAAC,SAAS,0CAAE,qBAAqB,EAAE;QACtD,OAAO,CAAC,mBAAmB;YACzB,iBAAiB,CAAC,SAAS,CAAC,qBAAqB,CAAC;QACpD,OAAO,iBAAiB,CAAC,SAAS,CAAC,qBAAqB,CAAC;KAC1D;IAED,IAAI,YAAY,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAAE;QACrD,OAAO,CAAC,6BAA6B;YACnC,YAAY,CAAC,GAAG,CAAC,+BAA+B,CAAC,IAAI,SAAS,CAAC;QACjE,YAAY,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;KACtD;IAED,IAAI,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;QACrC,OAAO,CAAC,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC;QACvE,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;KACtC;IAED,MAAM,uBAAuB,GAC3B,IAAI,4DAA4B,CAC9B,YAAY,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAC5C,CAAC;IAEJ,IAAI,uBAAuB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;QACpD,OAAO,CAAC,eAAe,GAAG,uBAAuB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC3E,uBAAuB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEpD,IAAI,uBAAuB,CAAC,QAAQ,EAAE,EAAE;YACtC,YAAY,CAAC,GAAG,CACd,yBAAyB,EACzB,uBAAuB,CAAC,QAAQ,EAAE,CACnC,CAAC;SACH;aAAM;YACL,YAAY,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;SAChD;KACF;IAED,4BAA4B,CAAC,iBAAiB,CAAC,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC;IAE3E,IAAI,MAAA,iBAAiB,CAAC,UAAU,0CAAE,cAAc,EAAE;QAChD,MAAM,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC,UAAU,CAAC;QACxD,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;QACvE,MAAM,WAAW,GAAG;YAClB,kCAAkC;YAClC,+BAA+B;YAC/B,wBAAwB;YACxB,iCAAiC;YACjC,6BAA6B;YAC7B,GAAG,YAAY,CAAC,GAAG,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,gCAAgC,CACvD;SACF,CAAC;QACF,iBAAiB,CAAC,UAAU,CAAC,cAAc,GAAG,gBAAC,CAAC,IAAI,CAClD,cAAc,EACd,WAAW,CACZ,CAAC;QACF,IAAI,iBAAiB,CAAC,UAAU,CAAC,gBAAgB,EAAE;YACjD,OAAO,CAAC,cAAc,GAAG,gBAAC,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;SAC9D;KACF;IAED,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,OAAO,EAAE,CAAC;AACnE,CAAC;AAlFD,wCAkFC"}
@@ -0,0 +1,39 @@
1
+ import type { MongoClient, Document } from 'mongodb';
2
+ import type { DataService } from './data-service';
3
+ import type { CollectionInfo, CollectionInfoNameOnly } from './run-command';
4
+ export interface CSFLECollectionTracker {
5
+ isUpdateAllowed(ns: string, originalDocument: Document): Promise<boolean>;
6
+ knownSchemaForCollection(ns: string): Promise<{
7
+ hasSchema: boolean;
8
+ encryptedFields: string[];
9
+ }>;
10
+ }
11
+ declare type FieldPath = string[];
12
+ interface CSFLECollectionInfo {
13
+ serverEnforcedEncryptedFields?: FieldPath[];
14
+ clientEnforcedEncryptedFields?: FieldPath[];
15
+ hasServerSchema?: boolean;
16
+ lastUpdated?: Date;
17
+ }
18
+ export declare class CSFLECollectionTrackerImpl implements CSFLECollectionTracker {
19
+ _nsToInfo: Map<string, CSFLECollectionInfo>;
20
+ _dataService: Pick<DataService, 'on' | 'listCollections'>;
21
+ _crudClient: MongoClient;
22
+ constructor(dataService: Pick<DataService, 'on' | 'listCollections'>, crudClient: MongoClient);
23
+ isUpdateAllowed(ns: string, originalDocument: Document): Promise<boolean>;
24
+ knownSchemaForCollection(ns: string): Promise<{
25
+ hasSchema: boolean;
26
+ encryptedFields: string[];
27
+ }>;
28
+ _processClientSchemaDefinitions(): void;
29
+ _fetchCSFLECollectionInfo(ns: string): Promise<CSFLECollectionInfo>;
30
+ _getCSFLECollectionInfo(ns: string): CSFLECollectionInfo;
31
+ _updateCollectionInfoFromDataService(opts: {
32
+ databaseName: string;
33
+ nameOnly?: boolean;
34
+ }, result: CollectionInfoNameOnly & Partial<CollectionInfo>): void;
35
+ _createHookedMetadataClient(wrappedClient: MongoClient): MongoClient;
36
+ _checkListCollectionsForLibmongocryptResult(dbName: string, filter: Document, collectionInfos: CollectionInfo[]): Error | undefined;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=csfle-collection-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csfle-collection-tracker.d.ts","sourceRoot":"","sources":["../src/csfle-collection-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,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;AAWvB,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,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC/D;AAMD,aAAK,SAAS,GAAG,MAAM,EAAE,CAAC;AAE1B,UAAU,mBAAmB;IAC3B,6BAA6B,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5C,6BAA6B,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AA0ED,qBAAa,0BAA2B,YAAW,sBAAsB;IACvE,SAAS,mCAA0C;IACnD,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,iBAAiB,CAAC,CAAC;IAC1D,WAAW,EAAE,WAAW,CAAC;gBAGvB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,iBAAiB,CAAC,EACxD,UAAU,EAAE,WAAW;IAyBnB,eAAe,CACnB,EAAE,EAAE,MAAM,EACV,gBAAgB,EAAE,QAAQ,GACzB,OAAO,CAAC,OAAO,CAAC;IA+Bb,wBAAwB,CAC5B,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAc7D,+BAA+B,IAAI,IAAI;IAmBjC,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0BzE,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB;IASxD,oCAAoC,CAClC,IAAI,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAClD,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,GACvD,IAAI;IAuBP,2BAA2B,CAAC,aAAa,EAAE,WAAW,GAAG,WAAW;IAmDpE,2CAA2C,CACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,eAAe,EAAE,cAAc,EAAE,GAChC,KAAK,GAAG,SAAS;CA+CrB"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CSFLECollectionTrackerImpl = void 0;
7
+ const mongodb_ns_1 = __importDefault(require("mongodb-ns"));
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const compass_logging_1 = __importDefault(require("@mongodb-js/compass-logging"));
10
+ const { log, mongoLogId } = (0, compass_logging_1.default)('COMPASS-DATA-SERVICE');
11
+ function extractEncryptedFieldsFromSchema(schema) {
12
+ var _a;
13
+ if (schema === null || schema === void 0 ? void 0 : schema.encrypt) {
14
+ return [[]];
15
+ }
16
+ const fields = [];
17
+ for (const [key, subschema] of Object.entries((_a = schema === null || schema === void 0 ? void 0 : schema.properties) !== null && _a !== void 0 ? _a : {})) {
18
+ for (const subfield of extractEncryptedFieldsFromSchema(subschema)) {
19
+ fields.push([key, ...subfield]);
20
+ }
21
+ }
22
+ return fields;
23
+ }
24
+ function extractEncryptedFieldsFromEncryptedFieldsConfig(encryptedFields) {
25
+ var _a;
26
+ return ((_a = encryptedFields === null || encryptedFields === void 0 ? void 0 : encryptedFields.fields) !== null && _a !== void 0 ? _a : []).map((field) => field.path.split('.'));
27
+ }
28
+ function extractEncrytedFieldFromAutoEncryptionOptions(ns, autoEncryption) {
29
+ var _a, _b;
30
+ return [
31
+ ...extractEncryptedFieldsFromSchema((_a = autoEncryption.schemaMap) === null || _a === void 0 ? void 0 : _a[ns]),
32
+ ...extractEncryptedFieldsFromEncryptedFieldsConfig((_b = autoEncryption === null || autoEncryption === void 0 ? void 0 : autoEncryption.encryptedFieldsMap) === null || _b === void 0 ? void 0 : _b[ns]),
33
+ ];
34
+ }
35
+ function extractEncryptedFieldsFromListCollectionsResult(options) {
36
+ var _a;
37
+ const schema = (_a = options === null || options === void 0 ? void 0 : options.validator) === null || _a === void 0 ? void 0 : _a.$jsonSchema;
38
+ const encryptedFieldsConfig = options === null || options === void 0 ? void 0 : options.encryptedFields;
39
+ return [
40
+ ...extractEncryptedFieldsFromSchema(schema),
41
+ ...extractEncryptedFieldsFromEncryptedFieldsConfig(encryptedFieldsConfig),
42
+ ];
43
+ }
44
+ function extractEncryptedFieldsFromDocument(doc) {
45
+ var _a;
46
+ const decryptedFields = ((_a = doc === null || doc === void 0 ? void 0 : doc[Symbol.for('@@mdb.decryptedKeys')]) !== null && _a !== void 0 ? _a : []).map((field) => [field]);
47
+ for (const [key, value] of Object.entries(doc)) {
48
+ if (!value || typeof value !== 'object') {
49
+ continue;
50
+ }
51
+ const nestedFields = extractEncryptedFieldsFromDocument(value);
52
+ decryptedFields.push(...nestedFields.map((path) => [key, ...path]));
53
+ }
54
+ return decryptedFields;
55
+ }
56
+ function isOlderThan1Minute(oldDate) {
57
+ return Date.now() - oldDate.getTime() >= 60000;
58
+ }
59
+ class CSFLECollectionTrackerImpl {
60
+ constructor(dataService, crudClient) {
61
+ this._nsToInfo = new Map();
62
+ this._dataService = dataService;
63
+ this._crudClient = crudClient;
64
+ this._dataService.on('collectionInfoFetched', this._updateCollectionInfoFromDataService.bind(this));
65
+ this._processClientSchemaDefinitions();
66
+ const { autoEncrypter } = this._crudClient.options;
67
+ if (autoEncrypter) {
68
+ log.info(mongoLogId(1001000118), 'CSFLECollectionTracker', 'Hooking AutoEncrypter metaDataClient property');
69
+ autoEncrypter._metaDataClient = this._createHookedMetadataClient(autoEncrypter._metaDataClient);
70
+ }
71
+ }
72
+ async isUpdateAllowed(ns, originalDocument) {
73
+ var _a, _b;
74
+ const originalDocEncryptedFields = extractEncryptedFieldsFromDocument(originalDocument);
75
+ if (originalDocEncryptedFields.length === 0) {
76
+ return true;
77
+ }
78
+ const info = await this._fetchCSFLECollectionInfo(ns);
79
+ const collectionEncryptedFields = [
80
+ ...((_a = info.serverEnforcedEncryptedFields) !== null && _a !== void 0 ? _a : []),
81
+ ...((_b = info.clientEnforcedEncryptedFields) !== null && _b !== void 0 ? _b : []),
82
+ ];
83
+ for (const originalDocPath of originalDocEncryptedFields) {
84
+ if (!collectionEncryptedFields.some((path) => lodash_1.default.isEqual(originalDocPath, path))) {
85
+ return false;
86
+ }
87
+ }
88
+ return true;
89
+ }
90
+ async knownSchemaForCollection(ns) {
91
+ var _a, _b, _c, _d;
92
+ const info = await this._fetchCSFLECollectionInfo(ns);
93
+ const hasSchema = !!(info.hasServerSchema ||
94
+ ((_a = info.clientEnforcedEncryptedFields) === null || _a === void 0 ? void 0 : _a.length) ||
95
+ ((_b = info.serverEnforcedEncryptedFields) === null || _b === void 0 ? void 0 : _b.length));
96
+ const encryptedFields = [
97
+ ...((_c = info.clientEnforcedEncryptedFields) !== null && _c !== void 0 ? _c : []),
98
+ ...((_d = info.serverEnforcedEncryptedFields) !== null && _d !== void 0 ? _d : []),
99
+ ].map((fieldPath) => fieldPath.join('.'));
100
+ return { hasSchema, encryptedFields: [...new Set(encryptedFields)] };
101
+ }
102
+ _processClientSchemaDefinitions() {
103
+ var _a, _b;
104
+ const { autoEncryption } = this._crudClient.options;
105
+ for (const ns of [
106
+ ...Object.keys((_a = autoEncryption === null || autoEncryption === void 0 ? void 0 : autoEncryption.schemaMap) !== null && _a !== void 0 ? _a : {}),
107
+ ...Object.keys((_b = autoEncryption === null || autoEncryption === void 0 ? void 0 : autoEncryption.encryptedFieldsMap) !== null && _b !== void 0 ? _b : {}),
108
+ ]) {
109
+ log.info(mongoLogId(1001000119), 'CSFLECollectionTracker', 'Processing client-side schema information', { ns });
110
+ const info = this._getCSFLECollectionInfo(ns);
111
+ info.clientEnforcedEncryptedFields =
112
+ extractEncrytedFieldFromAutoEncryptionOptions(ns, autoEncryption);
113
+ }
114
+ }
115
+ async _fetchCSFLECollectionInfo(ns) {
116
+ const parsedNs = (0, mongodb_ns_1.default)(ns);
117
+ const info = this._getCSFLECollectionInfo(ns);
118
+ if (!info.serverEnforcedEncryptedFields ||
119
+ !info.lastUpdated ||
120
+ isOlderThan1Minute(info.lastUpdated)) {
121
+ log.info(mongoLogId(1001000120), 'CSFLECollectionTracker', 'Refreshing listCollections cache', { ns });
122
+ await this._dataService.listCollections(parsedNs.database, {
123
+ name: parsedNs.collection,
124
+ });
125
+ }
126
+ return info;
127
+ }
128
+ _getCSFLECollectionInfo(ns) {
129
+ const existing = this._nsToInfo.get(ns);
130
+ if (existing)
131
+ return existing;
132
+ const info = {};
133
+ this._nsToInfo.set(ns, info);
134
+ return info;
135
+ }
136
+ _updateCollectionInfoFromDataService(opts, result) {
137
+ var _a, _b;
138
+ if (opts.nameOnly) {
139
+ return;
140
+ }
141
+ const ns = `${opts.databaseName}.${result.name}`;
142
+ log.info(mongoLogId(1001000121), 'CSFLECollectionTracker', 'Processing listCollections update', { ns });
143
+ const info = this._getCSFLECollectionInfo(ns);
144
+ info.serverEnforcedEncryptedFields =
145
+ extractEncryptedFieldsFromListCollectionsResult(result.options);
146
+ info.hasServerSchema = !!((_b = (_a = result.options) === null || _a === void 0 ? void 0 : _a.validator) === null || _b === void 0 ? void 0 : _b.$jsonSchema);
147
+ info.lastUpdated = new Date();
148
+ }
149
+ _createHookedMetadataClient(wrappedClient) {
150
+ return {
151
+ db: (dbName) => {
152
+ return {
153
+ listCollections: (filter, opts) => {
154
+ return {
155
+ toArray: (callback) => {
156
+ wrappedClient
157
+ .db(dbName)
158
+ .listCollections(filter, opts)
159
+ .toArray((err, collectionInfos) => {
160
+ if (!err) {
161
+ err = this._checkListCollectionsForLibmongocryptResult(dbName, filter, (collectionInfos !== null && collectionInfos !== void 0 ? collectionInfos : []));
162
+ if (err) {
163
+ log.error(mongoLogId(1001000122), 'CSFLECollectionTracker', 'Rejecting listCollections in hooked metaDataClient', { error: err.message });
164
+ }
165
+ }
166
+ if (err) {
167
+ callback(err);
168
+ return;
169
+ }
170
+ callback(err, collectionInfos);
171
+ });
172
+ },
173
+ };
174
+ },
175
+ };
176
+ },
177
+ };
178
+ }
179
+ _checkListCollectionsForLibmongocryptResult(dbName, filter, collectionInfos) {
180
+ var _a, _b;
181
+ if (typeof (filter === null || filter === void 0 ? void 0 : filter.name) !== 'string' || collectionInfos.length > 1) {
182
+ return new Error(`[Compass] Unexpected listCollections request on '${dbName}' with name: '${filter === null || filter === void 0 ? void 0 : filter.name}'`);
183
+ }
184
+ const ns = `${dbName}.${filter.name}`;
185
+ const existingInfo = this._getCSFLECollectionInfo(ns);
186
+ if (collectionInfos.length === 0) {
187
+ if ((_a = existingInfo.serverEnforcedEncryptedFields) === null || _a === void 0 ? void 0 : _a.length) {
188
+ return new Error(`[Compass] Missing encrypted field information of collection '${ns}'`);
189
+ }
190
+ return;
191
+ }
192
+ const [info] = collectionInfos;
193
+ if (filter.name !== info.name) {
194
+ return new Error(`[Compass] Unexpected listCollections name mismatch: got ${info.name}, expected ${filter.name}`);
195
+ }
196
+ const newInfo = extractEncryptedFieldsFromListCollectionsResult(info.options);
197
+ for (const expectedEncryptedField of (_b = existingInfo.serverEnforcedEncryptedFields) !== null && _b !== void 0 ? _b : []) {
198
+ if (!newInfo.some((field) => lodash_1.default.isEqual(field, expectedEncryptedField))) {
199
+ return new Error(`[Compass] Missing encrypted field '${expectedEncryptedField.join('.')}' of collection '${ns}' in listCollections result`);
200
+ }
201
+ }
202
+ }
203
+ }
204
+ exports.CSFLECollectionTrackerImpl = CSFLECollectionTrackerImpl;
205
+ //# sourceMappingURL=csfle-collection-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csfle-collection-tracker.js","sourceRoot":"","sources":["../src/csfle-collection-tracker.ts"],"names":[],"mappings":";;;;;;AAYA,4DAAwC;AACxC,oDAAuB;AACvB,kFAAmE;AAEnE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,IAAA,yBAAwB,EAAC,sBAAsB,CAAC,CAAC;AAsD7E,SAAS,gCAAgC,CACvC,MAA4B;;IAE5B,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE;QACnB,OAAO,CAAC,EAAE,CAAC,CAAC;KACb;IACD,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,mCAAI,EAAE,CAAC,EAAE;QACvE,KAAK,MAAM,QAAQ,IAAI,gCAAgC,CACrD,SAAqB,CACtB,EAAE;YACD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;SACjC;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,SAAS,+CAA+C,CACtD,eAAqC;;IAErC,OAAO,CAAC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE,CAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CACtB,CAAC;AACJ,CAAC;AAGD,SAAS,6CAA6C,CACpD,EAAU,EACV,cAAqC;;IAErC,OAAO;QACL,GAAG,gCAAgC,CAAC,MAAA,cAAc,CAAC,SAAS,0CAAG,EAAE,CAAC,CAAC;QACnE,GAAG,+CAA+C,CAChD,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,kBAAkB,0CAAG,EAAE,CAAC,CACzC;KACF,CAAC;AACJ,CAAC;AAGD,SAAS,+CAA+C,CACtD,OAA8C;;IAE9C,MAAM,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,WAAW,CAAC;IAC/C,MAAM,qBAAqB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,CAAC;IACvD,OAAO;QACL,GAAG,gCAAgC,CAAC,MAAM,CAAC;QAC3C,GAAG,+CAA+C,CAAC,qBAAqB,CAAC;KAC1E,CAAC;AACJ,CAAC;AAID,SAAS,kCAAkC,CAAC,GAAQ;;IAClD,MAAM,eAAe,GAAG,CAAC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAC,GAAG,CAC1E,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAC3B,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACvC,SAAS;SACV;QACD,MAAM,YAAY,GAAG,kCAAkC,CAAC,KAAK,CAAC,CAAC;QAC/D,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KACrE;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAa;IACvC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,KAAM,CAAC;AAClD,CAAC;AAED,MAAa,0BAA0B;IAKrC,YACE,WAAwD,EACxD,UAAuB;QANzB,cAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;QAQjD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAE9B,IAAI,CAAC,YAAY,CAAC,EAAE,CAClB,uBAAuB,EACvB,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CACrD,CAAC;QACF,IAAI,CAAC,+BAA+B,EAAE,CAAC;QAEvC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACnD,IAAI,aAAa,EAAE;YACjB,GAAG,CAAC,IAAI,CACN,UAAU,CAAC,UAAa,CAAC,EACzB,wBAAwB,EACxB,+CAA+C,CAChD,CAAC;YAED,aAAqB,CAAC,eAAe,GAAG,IAAI,CAAC,2BAA2B,CACtE,aAAqB,CAAC,eAAe,CACvC,CAAC;SACH;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,EAAU,EACV,gBAA0B;;QAE1B,MAAM,0BAA0B,GAC9B,kCAAkC,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,0BAA0B,CAAC,MAAM,KAAK,CAAC,EAAE;YAI3C,OAAO,IAAI,CAAC;SACb;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,yBAAyB,GAAG;YAChC,GAAG,CAAC,MAAA,IAAI,CAAC,6BAA6B,mCAAI,EAAE,CAAC;YAC7C,GAAG,CAAC,MAAA,IAAI,CAAC,6BAA6B,mCAAI,EAAE,CAAC;SAC9C,CAAC;QAMF,KAAK,MAAM,eAAe,IAAI,0BAA0B,EAAE;YACxD,IACE,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,gBAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CACjC,EACD;gBACA,OAAO,KAAK,CAAC;aACd;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,EAAU;;QAEV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,CAAC,CAAC,CAClB,IAAI,CAAC,eAAe;aACpB,MAAA,IAAI,CAAC,6BAA6B,0CAAE,MAAM,CAAA;aAC1C,MAAA,IAAI,CAAC,6BAA6B,0CAAE,MAAM,CAAA,CAC3C,CAAC;QACF,MAAM,eAAe,GAAG;YACtB,GAAG,CAAC,MAAA,IAAI,CAAC,6BAA6B,mCAAI,EAAE,CAAC;YAC7C,GAAG,CAAC,MAAA,IAAI,CAAC,6BAA6B,mCAAI,EAAE,CAAC;SAC9C,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,+BAA+B;;QAE7B,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACpD,KAAK,MAAM,EAAE,IAAI;YACf,GAAG,MAAM,CAAC,IAAI,CAAC,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,SAAS,mCAAI,EAAE,CAAC;YAC/C,GAAG,MAAM,CAAC,IAAI,CAAC,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,kBAAkB,mCAAI,EAAE,CAAC;SACzD,EAAE;YACD,GAAG,CAAC,IAAI,CACN,UAAU,CAAC,UAAa,CAAC,EACzB,wBAAwB,EACxB,2CAA2C,EAC3C,EAAE,EAAE,EAAE,CACP,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,6BAA6B;gBAChC,6CAA6C,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;SACrE;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,EAAU;QACxC,MAAM,QAAQ,GAAG,IAAA,oBAAc,EAAC,EAAE,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC9C,IACE,CAAC,IAAI,CAAC,6BAA6B;YACnC,CAAC,IAAI,CAAC,WAAW;YACjB,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EACpC;YACA,GAAG,CAAC,IAAI,CACN,UAAU,CAAC,UAAa,CAAC,EACzB,wBAAwB,EACxB,kCAAkC,EAClC,EAAE,EAAE,EAAE,CACP,CAAC;YAMF,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBACzD,IAAI,EAAE,QAAQ,CAAC,UAAU;aAC1B,CAAC,CAAC;SACJ;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB,CAAC,EAAU;QAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oCAAoC,CAClC,IAAkD,EAClD,MAAwD;;QAExD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAEjB,OAAO;SACR;QAED,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CACN,UAAU,CAAC,UAAa,CAAC,EACzB,wBAAwB,EACxB,mCAAmC,EACnC,EAAE,EAAE,EAAE,CACP,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAG9C,IAAI,CAAC,6BAA6B;YAChC,+CAA+C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAA,MAAA,MAAA,MAAM,CAAC,OAAO,0CAAE,SAAS,0CAAE,WAAW,CAAA,CAAC;QAChE,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,2BAA2B,CAAC,aAA0B;QAYpD,OAAO;YACL,EAAE,EAAE,CAAC,MAAc,EAAE,EAAE;gBACrB,OAAO;oBACL,eAAe,EAAE,CAAC,MAAgB,EAAE,IAA4B,EAAE,EAAE;wBAClE,OAAO;4BACL,OAAO,EAAE,CAAC,QAAkD,EAAE,EAAE;gCAC9D,aAAa;qCACV,EAAE,CAAC,MAAM,CAAC;qCACV,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC;qCAC7B,OAAO,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE;oCAChC,IAAI,CAAC,GAAG,EAAE;wCACR,GAAG,GAAG,IAAI,CAAC,2CAA2C,CACpD,MAAM,EACN,MAAM,EACN,CAAC,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,EAAE,CAAqB,CAC5C,CAAC;wCACF,IAAI,GAAG,EAAE;4CACP,GAAG,CAAC,KAAK,CACP,UAAU,CAAC,UAAa,CAAC,EACzB,wBAAwB,EACxB,oDAAoD,EACpD,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CACvB,CAAC;yCACH;qCACF;oCACD,IAAI,GAAG,EAAE;wCACP,QAAQ,CAAC,GAAG,CAAC,CAAC;wCACd,OAAO;qCACR;oCACD,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;gCACjC,CAAC,CAAC,CAAC;4BACP,CAAC;yBACF,CAAC;oBACJ,CAAC;iBACF,CAAC;YACJ,CAAC;SACa,CAAC;IACnB,CAAC;IAED,2CAA2C,CACzC,MAAc,EACd,MAAgB,EAChB,eAAiC;;QAEjC,IAAI,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAA,KAAK,QAAQ,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAIlE,OAAO,IAAI,KAAK,CACd,oDAAoD,MAAM,iBACxD,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IACV,GAAG,CACJ,CAAC;SACH;QAED,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,IAAI,MAAA,YAAY,CAAC,6BAA6B,0CAAE,MAAM,EAAE;gBACtD,OAAO,IAAI,KAAK,CACd,gEAAgE,EAAE,GAAG,CACtE,CAAC;aACH;YACD,OAAO;SACR;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;QAC/B,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;YAG7B,OAAO,IAAI,KAAK,CACd,2DAA2D,IAAI,CAAC,IAAI,cAAc,MAAM,CAAC,IAAI,EAAE,CAChG,CAAC;SACH;QACD,MAAM,OAAO,GAAG,+CAA+C,CAC7D,IAAI,CAAC,OAAO,CACb,CAAC;QAEF,KAAK,MAAM,sBAAsB,IAAI,MAAA,YAAY,CAAC,6BAA6B,mCAC7E,EAAE,EAAE;YACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAC,CAAC,OAAO,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,EAAE;gBACtE,OAAO,IAAI,KAAK,CACd,sCAAsC,sBAAsB,CAAC,IAAI,CAC/D,GAAG,CACJ,oBAAoB,EAAE,6BAA6B,CACrD,CAAC;aACH;SACF;IACH,CAAC;CACF;AAxQD,gEAwQC"}
@@ -1,23 +1,141 @@
1
1
  /// <reference types="node" />
2
2
  import { EventEmitter } from 'events';
3
- import type { AggregateOptions, AggregationCursor, BulkWriteOptions, ClientSession, Collection, CountDocumentsOptions, CreateCollectionOptions, CreateIndexesOptions, DeleteOptions, DeleteResult, Document, EstimatedDocumentCountOptions, ExplainOptions, Filter, FindCursor, FindOneAndReplaceOptions, FindOneAndUpdateOptions, FindOptions, IndexSpecification, InsertManyResult, InsertOneOptions, InsertOneResult, MongoClientOptions, ReadPreferenceLike, TopologyDescription, TopologyType, UpdateFilter, UpdateOptions, UpdateResult } from 'mongodb';
3
+ import type { AggregateOptions, AggregationCursor, BulkWriteOptions, ClientSession, Collection, CountDocumentsOptions, CreateCollectionOptions, CreateIndexesOptions, DeleteOptions, DeleteResult, Document, EstimatedDocumentCountOptions, Filter, FindCursor, FindOneAndReplaceOptions, FindOneAndUpdateOptions, FindOptions, IndexSpecification, InsertManyResult, InsertOneOptions, InsertOneResult, MongoClientOptions, ServerClosedEvent, ReadPreferenceLike, ServerDescriptionChangedEvent, ServerHeartbeatFailedEvent, ServerHeartbeatSucceededEvent, ServerOpeningEvent, TopologyClosedEvent, TopologyDescription, TopologyDescriptionChangedEvent, TopologyOpeningEvent, TopologyType, UpdateFilter, UpdateOptions, UpdateResult } from 'mongodb';
4
4
  import ConnectionStringUrl from 'mongodb-connection-string-url';
5
- import type { ConnectionOptions } from './connection-options';
5
+ import type { ConnectionFleOptions, ConnectionOptions } from './connection-options';
6
6
  import type { InstanceDetails } from './instance-detail-helper';
7
7
  import { adaptCollectionInfo, adaptDatabaseInfo } from './instance-detail-helper';
8
+ import type { CollectionInfo, CollectionInfoNameOnly } from './run-command';
8
9
  import type { Callback, CollectionStats } from './types';
9
10
  import type { ConnectionStatusWithPrivileges } from './run-command';
11
+ import type { CSFLECollectionTracker } from './csfle-collection-tracker';
12
+ import * as mongodb from 'mongodb';
13
+ import type { ClientEncryption as ClientEncryptionType, ClientEncryptionDataKeyProvider, ClientEncryptionCreateDataKeyProviderOptions } from 'mongodb-client-encryption';
10
14
  declare type ClientType = 'CRUD' | 'META';
11
15
  declare const kSessionClientType: unique symbol;
12
16
  interface CompassClientSession extends ClientSession {
13
17
  [kSessionClientType]: ClientType;
14
18
  }
15
- declare class DataService extends EventEmitter {
19
+ declare type AbortSignal = {
20
+ aborted: boolean;
21
+ onabort: ((this: AbortSignal, event: any) => void) | null;
22
+ addEventListener: (type: string, listener: (event: any) => void, options: Record<string, unknown>) => void;
23
+ removeEventListener: (type: string, listener: (event: any) => void) => void;
24
+ dispatchEvent: (event: any) => boolean;
25
+ };
26
+ declare type BSONServerExplainResults = Document;
27
+ declare type ExplainExecuteOptions = {
28
+ abortSignal?: AbortSignal;
29
+ explainVerbosity?: keyof typeof mongodb.ExplainVerbosity;
30
+ };
31
+ export interface DataServiceEventMap {
32
+ serverDescriptionChanged: (evt: ServerDescriptionChangedEvent) => void;
33
+ serverOpening: (evt: ServerOpeningEvent) => void;
34
+ serverClosed: (evt: ServerClosedEvent) => void;
35
+ topologyOpening: (evt: TopologyOpeningEvent) => void;
36
+ topologyClosed: (evt: TopologyClosedEvent) => void;
37
+ topologyDescriptionChanged: (evt: TopologyDescriptionChangedEvent) => void;
38
+ serverHeartbeatSucceeded: (evt: ServerHeartbeatSucceededEvent) => void;
39
+ serverHeartbeatFailed: (evt: ServerHeartbeatFailedEvent) => void;
40
+ collectionInfoFetched: (opts: {
41
+ databaseName: string;
42
+ nameOnly?: boolean;
43
+ }, result: CollectionInfoNameOnly & Partial<CollectionInfo>) => void;
44
+ }
45
+ export interface DataService {
46
+ on<K extends keyof DataServiceEventMap>(event: K, listener: DataServiceEventMap[K]): this;
47
+ once<K extends keyof DataServiceEventMap>(event: K, listener: DataServiceEventMap[K]): this;
48
+ emit<K extends keyof DataServiceEventMap>(event: K, ...args: DataServiceEventMap[K] extends (...args: infer P) => any ? P : never): unknown;
49
+ getMongoClientConnectionOptions(): {
50
+ url: string;
51
+ options: MongoClientOptions;
52
+ } | undefined;
53
+ getConnectionOptions(): Readonly<ConnectionOptions>;
54
+ getConnectionString(): ConnectionStringUrl;
55
+ getReadPreference(): ReadPreferenceLike;
56
+ setCSFLEEnabled(enabled: boolean): void;
57
+ configuredKMSProviders(): string[];
58
+ collection(ns: string, options: unknown, callback: Callback<Document>): void;
59
+ collections(databaseName: string, callback: Callback<CollectionStats[]>): void;
60
+ collectionStats(databaseName: string, collectionName: string, callback: Callback<CollectionStats>): void;
61
+ collectionInfo(dbName: string, collName: string): Promise<ReturnType<typeof adaptCollectionInfo> | null>;
62
+ command(databaseName: string, comm: Document, callback: Callback<Document>): void;
63
+ isWritable(): boolean;
64
+ isMongos(): boolean;
65
+ currentTopologyType(): TopologyType;
66
+ connectionStatus(): Promise<ConnectionStatusWithPrivileges>;
67
+ listCollections(databaseName: string, filter?: Document, options?: {
68
+ nameOnly?: true;
69
+ privileges?: ConnectionStatusWithPrivileges['authInfo']['authenticatedUserPrivileges'] | null;
70
+ }): Promise<ReturnType<typeof adaptCollectionInfo>[]>;
71
+ listDatabases(options?: {
72
+ nameOnly?: true;
73
+ privileges?: ConnectionStatusWithPrivileges['authInfo']['authenticatedUserPrivileges'] | null;
74
+ roles?: ConnectionStatusWithPrivileges['authInfo']['authenticatedUserRoles'] | null;
75
+ }): Promise<{
76
+ _id: string;
77
+ name: string;
78
+ }[]>;
79
+ connect(): Promise<void>;
80
+ estimatedCount(ns: string, options: EstimatedDocumentCountOptions, callback: Callback<number>): void;
81
+ count(ns: string, filter: Filter<Document>, options: CountDocumentsOptions, callback: Callback<number>): void;
82
+ createCollection(ns: string, options: CreateCollectionOptions, callback: Callback<Collection<Document>>): void;
83
+ createIndex(ns: string, spec: IndexSpecification, options: CreateIndexesOptions, callback: Callback<string>): void;
84
+ database(name: string, options: unknown, callback: Callback<Document>): void;
85
+ deleteOne(ns: string, filter: Filter<Document>, options: DeleteOptions, callback: Callback<DeleteResult>): void;
86
+ deleteMany(ns: string, filter: Filter<Document>, options: DeleteOptions, callback: Callback<DeleteResult>): void;
87
+ disconnect(): Promise<void>;
88
+ dropCollection(ns: string, callback: Callback<boolean>): void;
89
+ dropDatabase(name: string, callback: Callback<boolean>): void;
90
+ dropIndex(ns: string, name: string, callback: Callback<Document>): void;
91
+ aggregate(ns: string, pipeline: Document[], options?: AggregateOptions): AggregationCursor;
92
+ aggregate(ns: string, pipeline: Document[], callback: Callback<AggregationCursor>): void;
93
+ aggregate(ns: string, pipeline: Document[], options: AggregateOptions | undefined, callback: Callback<AggregationCursor>): void;
94
+ find(ns: string, filter: Filter<Document>, options: FindOptions, callback: Callback<Document[]>): void;
95
+ fetch(ns: string, filter: Filter<Document>, options: FindOptions): FindCursor;
96
+ findOneAndReplace(ns: string, filter: Filter<Document>, replacement: Document, options: FindOneAndReplaceOptions, callback: Callback<Document>): void;
97
+ findOneAndUpdate(ns: string, filter: Filter<Document>, update: Document, options: FindOneAndUpdateOptions, callback: Callback<Document>): void;
98
+ explain(ns: string, filter: Filter<Document>, options: FindOptions, callback: Callback<Document>): void;
99
+ explainAggregate(ns: string, pipeline: Document[], options: AggregateOptions, executionOptions?: ExplainExecuteOptions): Promise<BSONServerExplainResults>;
100
+ indexes(ns: string, options: unknown, callback: Callback<Document>): void;
101
+ instance(): Promise<InstanceDetails>;
102
+ insertOne(ns: string, doc: Document, options: InsertOneOptions, callback: Callback<InsertOneResult<Document>>): void;
103
+ insertMany(ns: string, docs: Document[], options: BulkWriteOptions, callback: Callback<InsertManyResult<Document>>): void;
104
+ putMany(ns: string, docs: Document[], options: BulkWriteOptions): Promise<InsertManyResult<Document>>;
105
+ updateCollection(ns: string, flags: Document & {
106
+ collMod?: never;
107
+ }, callback: Callback<Document>): void;
108
+ updateOne(ns: string, filter: Filter<Document>, update: Document | UpdateFilter<Document>, options: UpdateOptions, callback: Callback<Document>): void;
109
+ updateMany(ns: string, filter: Filter<Document>, update: UpdateFilter<Document>, options: UpdateOptions, callback: Callback<Document | UpdateResult>): void;
110
+ currentOp(includeAll: boolean, callback: Callback<Document>): void;
111
+ getLastSeenTopology(): null | TopologyDescription;
112
+ serverstats(callback: Callback<Document>): void;
113
+ top(callback: Callback<Document>): void;
114
+ createView(name: string, sourceNs: string, pipeline: Document[], options: CreateCollectionOptions, callback: Callback<Collection<Document>>): void;
115
+ updateView(name: string, sourceNs: string, pipeline: Document[], options: Document, callback: Callback<Document>): void;
116
+ dropView(ns: string, callback: Callback<boolean>): void;
117
+ sample(ns: string, args?: {
118
+ query?: Filter<Document>;
119
+ size?: number;
120
+ fields?: Document;
121
+ }, options?: AggregateOptions): AggregationCursor;
122
+ startSession(clientType: ClientType): CompassClientSession;
123
+ killSessions(sessions: CompassClientSession | CompassClientSession[]): Promise<Document>;
124
+ isConnected(): boolean;
125
+ isOperationCancelledError(error: Error): boolean;
126
+ databaseStats(name: string): Promise<ReturnType<typeof adaptDatabaseInfo> & {
127
+ name: string;
128
+ }>;
129
+ createDataKey(provider: string, options?: unknown): Promise<Document>;
130
+ }
131
+ export declare class DataServiceImpl extends EventEmitter implements DataService {
16
132
  private readonly _connectionOptions;
17
133
  private _isConnecting;
18
134
  private _mongoClientConnectionOptions?;
19
135
  private _metadataClient?;
20
136
  private _crudClient?;
137
+ private _useCRUDClient;
138
+ private _csfleCollectionTracker?;
21
139
  private _tunnel?;
22
140
  private _lastSeenTopology;
23
141
  private _isWritable;
@@ -32,6 +150,8 @@ declare class DataService extends EventEmitter {
32
150
  getConnectionOptions(): Readonly<ConnectionOptions>;
33
151
  getConnectionString(): ConnectionStringUrl;
34
152
  getReadPreference(): ReadPreferenceLike;
153
+ setCSFLEEnabled(enabled: boolean): void;
154
+ getCSFLEMode(): 'enabled' | 'disabled' | 'unavailable';
35
155
  collection(ns: string, options: unknown, callback: Callback<Document>): void;
36
156
  collections(databaseName: string, callback: Callback<CollectionStats[]>): void;
37
157
  collectionStats(databaseName: string, collectionName: string, callback: Callback<CollectionStats>): void;
@@ -42,13 +162,15 @@ declare class DataService extends EventEmitter {
42
162
  currentTopologyType(): TopologyType;
43
163
  connectionStatus(): Promise<ConnectionStatusWithPrivileges>;
44
164
  private _getPrivilegesOrFallback;
165
+ private _getRolesOrFallback;
45
166
  listCollections(databaseName: string, filter?: Document, { nameOnly, privileges, }?: {
46
167
  nameOnly?: true;
47
168
  privileges?: ConnectionStatusWithPrivileges['authInfo']['authenticatedUserPrivileges'] | null;
48
169
  }): Promise<ReturnType<typeof adaptCollectionInfo>[]>;
49
- listDatabases({ nameOnly, privileges, }?: {
170
+ listDatabases({ nameOnly, privileges, roles, }?: {
50
171
  nameOnly?: true;
51
172
  privileges?: ConnectionStatusWithPrivileges['authInfo']['authenticatedUserPrivileges'] | null;
173
+ roles?: ConnectionStatusWithPrivileges['authInfo']['authenticatedUserRoles'] | null;
52
174
  }): Promise<{
53
175
  _id: string;
54
176
  name: string;
@@ -72,7 +194,8 @@ declare class DataService extends EventEmitter {
72
194
  fetch(ns: string, filter: Filter<Document>, options: FindOptions): FindCursor;
73
195
  findOneAndReplace(ns: string, filter: Filter<Document>, replacement: Document, options: FindOneAndReplaceOptions, callback: Callback<Document>): void;
74
196
  findOneAndUpdate(ns: string, filter: Filter<Document>, update: Document, options: FindOneAndUpdateOptions, callback: Callback<Document>): void;
75
- explain(ns: string, filter: Filter<Document>, options: ExplainOptions, callback: Callback<Document>): void;
197
+ explain(ns: string, filter: Filter<Document>, options: FindOptions, callback: Callback<Document>): void;
198
+ explainAggregate(ns: string, pipeline: Document[], options: AggregateOptions, executionOptions?: ExplainExecuteOptions): Promise<BSONServerExplainResults>;
76
199
  indexes(ns: string, options: unknown, callback: Callback<Document>): void;
77
200
  instance(): Promise<InstanceDetails>;
78
201
  insertOne(ns: string, doc: Document, options: InsertOneOptions, callback: Callback<InsertOneResult<Document>>): void;
@@ -98,8 +221,11 @@ declare class DataService extends EventEmitter {
98
221
  startSession(clientType: ClientType): CompassClientSession;
99
222
  killSessions(sessions: CompassClientSession | CompassClientSession[]): Promise<Document>;
100
223
  isConnected(): boolean;
224
+ isOperationCancelledError(error: Error): boolean;
225
+ private cancellableOperation;
101
226
  private setupListeners;
102
227
  private _initializedClient;
228
+ getCSFLECollectionTracker(): CSFLECollectionTracker;
103
229
  databaseStats(name: string): Promise<ReturnType<typeof adaptDatabaseInfo> & {
104
230
  name: string;
105
231
  }>;
@@ -114,6 +240,10 @@ declare class DataService extends EventEmitter {
114
240
  private _translateMessage;
115
241
  private _cleanup;
116
242
  private _startLogOp;
243
+ configuredKMSProviders(): string[];
244
+ _csfleLogInformation(fleOptions?: Readonly<ConnectionFleOptions>): null | Record<string, unknown>;
245
+ createDataKey(provider: ClientEncryptionDataKeyProvider, options?: ClientEncryptionCreateDataKeyProviderOptions): Promise<Document>;
246
+ _getClientEncryption(): ClientEncryptionType;
117
247
  }
118
248
  export default DataService;
119
249
  //# sourceMappingURL=data-service.d.ts.map