mongodb-data-service 21.18.0 → 21.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/lib/connect-mongo-client.d.ts +7 -6
  2. package/lib/connect-mongo-client.d.ts.map +1 -1
  3. package/lib/connect-mongo-client.js +44 -11
  4. package/lib/connect-mongo-client.js.map +1 -1
  5. package/lib/connect.d.ts +1 -1
  6. package/lib/connect.d.ts.map +1 -1
  7. package/lib/connect.js +2 -5
  8. package/lib/connect.js.map +1 -1
  9. package/lib/connection-options.d.ts +7 -0
  10. package/lib/connection-options.d.ts.map +1 -1
  11. package/lib/connection-secrets.d.ts +2 -0
  12. package/lib/connection-secrets.d.ts.map +1 -1
  13. package/lib/connection-secrets.js +21 -1
  14. package/lib/connection-secrets.js.map +1 -1
  15. package/lib/connection-storage.d.ts +2 -1
  16. package/lib/connection-storage.d.ts.map +1 -1
  17. package/lib/connection-storage.js +56 -12
  18. package/lib/connection-storage.js.map +1 -1
  19. package/lib/connection-title.d.ts.map +1 -1
  20. package/lib/connection-title.js +0 -3
  21. package/lib/connection-title.js.map +1 -1
  22. package/lib/csfle-collection-tracker.d.ts +39 -0
  23. package/lib/csfle-collection-tracker.d.ts.map +1 -0
  24. package/lib/csfle-collection-tracker.js +205 -0
  25. package/lib/csfle-collection-tracker.js.map +1 -0
  26. package/lib/data-service.d.ts +129 -12
  27. package/lib/data-service.d.ts.map +1 -1
  28. package/lib/data-service.js +217 -68
  29. package/lib/data-service.js.map +1 -1
  30. package/lib/index.d.ts +3 -2
  31. package/lib/index.d.ts.map +1 -1
  32. package/lib/index.js +5 -3
  33. package/lib/index.js.map +1 -1
  34. package/lib/instance-detail-helper.d.ts +10 -2
  35. package/lib/instance-detail-helper.d.ts.map +1 -1
  36. package/lib/instance-detail-helper.js +31 -2
  37. package/lib/instance-detail-helper.js.map +1 -1
  38. package/lib/legacy/legacy-connection-model.d.ts.map +1 -1
  39. package/lib/legacy/legacy-connection-model.js +25 -1
  40. package/lib/legacy/legacy-connection-model.js.map +1 -1
  41. package/package.json +21 -17
@@ -1,13 +1,14 @@
1
- import type { MongoClientOptions } from 'mongodb';
2
1
  import { MongoClient } from 'mongodb';
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<[
6
- MongoClient,
7
- SSHTunnel | undefined,
8
- {
5
+ export default function connectMongoClientCompass(connectionOptions: Readonly<ConnectionOptions>, setupListeners: (client: MongoClient) => void): Promise<[
6
+ metadataClient: MongoClient,
7
+ crudClient: MongoClient,
8
+ sshTunnel: SSHTunnel | undefined,
9
+ options: {
9
10
  url: string;
10
- options: MongoClientOptions;
11
+ options: DevtoolsConnectOptions;
11
12
  }
12
13
  ]>;
13
14
  //# sourceMappingURL=connect-mongo-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect-mongo-client.d.ts","sourceRoot":"","sources":["../src/connect-mongo-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AAKpD,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,WAAW;IACX,SAAS,GAAG,SAAS;IACrB;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,kBAAkB,CAAA;KAAE;CAC7C,CACF,CA6DA"}
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;AAGtC,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,CAsGA"}
@@ -4,21 +4,40 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const mongodb_1 = require("mongodb");
7
+ const mongodb_fle_1 = require("mongodb-fle");
7
8
  const devtools_connect_1 = require("@mongodb-js/devtools-connect");
8
9
  const events_1 = __importDefault(require("events"));
9
10
  const redact_1 = require("./redact");
11
+ const lodash_1 = __importDefault(require("lodash"));
10
12
  const compass_logging_1 = __importDefault(require("@mongodb-js/compass-logging"));
11
13
  const ssh_tunnel_1 = require("./ssh-tunnel");
12
14
  const { debug, log } = (0, compass_logging_1.default)('COMPASS-CONNECT');
13
15
  async function connectMongoClientCompass(connectionOptions, setupListeners) {
16
+ var _a, _b;
14
17
  debug('connectMongoClient invoked', (0, redact_1.redactConnectionOptions)(connectionOptions));
15
18
  const url = connectionOptions.connectionString;
16
- const options = { monitorCommands: true };
19
+ const options = {
20
+ monitorCommands: true,
21
+ useSystemCA: connectionOptions.useSystemCA,
22
+ autoEncryption: (_a = connectionOptions.fleOptions) === null || _a === void 0 ? void 0 : _a.autoEncryption,
23
+ };
24
+ if (options.autoEncryption && process.env.COMPASS_CSFLE_LIBRARY_PATH) {
25
+ options.autoEncryption = {
26
+ ...options.autoEncryption,
27
+ extraOptions: {
28
+ ...(_b = options.autoEncryption) === null || _b === void 0 ? void 0 : _b.extraOptions,
29
+ csflePath: process.env.COMPASS_CSFLE_LIBRARY_PATH,
30
+ },
31
+ };
32
+ }
17
33
  const [tunnel, socks5Options] = await (0, ssh_tunnel_1.openSshTunnel)(connectionOptions.sshTunnel);
18
34
  if (socks5Options) {
19
35
  Object.assign(options, socks5Options);
20
36
  }
21
- class CompassMongoClient extends mongodb_1.MongoClient {
37
+ const BaseMongoClient = process.env.COMPASS_CSFLE_SUPPORT === 'true'
38
+ ? mongodb_fle_1.MongoClient
39
+ : mongodb_1.MongoClient;
40
+ class CompassMongoClient extends BaseMongoClient {
22
41
  constructor(url, options) {
23
42
  super(url, options);
24
43
  if (setupListeners) {
@@ -28,23 +47,37 @@ async function connectMongoClientCompass(connectionOptions, setupListeners) {
28
47
  }
29
48
  const connectLogger = new events_1.default();
30
49
  (0, devtools_connect_1.hookLogger)(connectLogger, log.unbound, 'compass', redact_1.redactConnectionString);
31
- let mongoClient;
50
+ async function connectSingleClient(overrideOptions) {
51
+ const client = await (0, devtools_connect_1.connectMongoClient)(url, lodash_1.default.cloneDeep({ ...options, ...overrideOptions }), connectLogger, CompassMongoClient);
52
+ await client.db('admin').command({ ping: 1 });
53
+ return client;
54
+ }
55
+ let metadataClient;
56
+ let crudClient;
32
57
  try {
33
58
  debug('waiting for MongoClient to connect ...');
34
- mongoClient = await Promise.race([
35
- (async () => {
36
- const mongoClient = await (0, devtools_connect_1.connectMongoClient)(url, options, connectLogger, CompassMongoClient);
37
- await mongoClient.db('admin').command({ ping: 1 });
38
- return mongoClient;
39
- })(),
59
+ [metadataClient, crudClient] = await Promise.race([
60
+ Promise.all([
61
+ connectSingleClient({ autoEncryption: undefined }),
62
+ options.autoEncryption ? connectSingleClient({}) : undefined,
63
+ ]),
40
64
  (0, ssh_tunnel_1.waitForTunnelError)(tunnel),
41
65
  ]);
42
- return [mongoClient, tunnel, { url, options }];
66
+ return [
67
+ metadataClient,
68
+ crudClient !== null && crudClient !== void 0 ? crudClient : metadataClient,
69
+ tunnel,
70
+ { url, options },
71
+ ];
43
72
  }
44
73
  catch (err) {
45
74
  debug('connection error', err);
46
75
  debug('force shutting down ssh tunnel ...');
47
- await Promise.all([(0, ssh_tunnel_1.forceCloseTunnel)(tunnel), mongoClient === null || mongoClient === void 0 ? void 0 : mongoClient.close()]).catch(() => {
76
+ await Promise.all([
77
+ (0, ssh_tunnel_1.forceCloseTunnel)(tunnel),
78
+ crudClient === null || crudClient === void 0 ? void 0 : crudClient.close(),
79
+ metadataClient === null || metadataClient === void 0 ? void 0 : metadataClient.close(),
80
+ ]).catch(() => {
48
81
  });
49
82
  throw err;
50
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connect-mongo-client.js","sourceRoot":"","sources":["../src/connect-mongo-client.ts"],"names":[],"mappings":";;;;;AACA,qCAAsC;AACtC,mEAA8E;AAE9E,oDAAkC;AAClC,qCAA2E;AAE3E,kFAAmE;AAEnE,6CAIsB;AAEtB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAA,yBAAwB,EAAC,iBAAiB,CAAC,CAAC;AAEpD,KAAK,UAAU,yBAAyB,CACrD,iBAAoC,EACpC,cAA6C;IAQ7C,KAAK,CACH,4BAA4B,EAC5B,IAAA,gCAAuB,EAAC,iBAAiB,CAAC,CAC3C,CAAC;IAEF,MAAM,GAAG,GAAG,iBAAiB,CAAC,gBAAgB,CAAC;IAC/C,MAAM,OAAO,GAAuB,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IAM9D,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,IAAA,0BAAa,EACjD,iBAAiB,CAAC,SAAS,CAC5B,CAAC;IAEF,IAAI,aAAa,EAAE;QACjB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;KACvC;IAED,MAAM,kBAAmB,SAAQ,qBAAW;QAC1C,YAAY,GAAW,EAAE,OAA4B;YACnD,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACpB,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,IAAI,CAAC,CAAC;aACtB;QACH,CAAC;KACF;IAED,MAAM,aAAa,GAAG,IAAI,gBAAY,EAAE,CAAC;IACzC,IAAA,6BAAU,EAAC,aAAa,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,+BAAsB,CAAC,CAAC;IAE1E,IAAI,WAAoC,CAAC;IACzC,IAAI;QACF,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAChD,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAC/B,CAAC,KAAK,IAAI,EAAE;gBACV,MAAM,WAAW,GAAG,MAAM,IAAA,qCAAkB,EAC1C,GAAG,EACH,OAAO,EACP,aAAa,EACb,kBAAkB,CACnB,CAAC;gBACF,MAAM,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnD,OAAO,WAAW,CAAC;YACrB,CAAC,CAAC,EAAE;YACJ,IAAA,+BAAkB,EAAC,MAAM,CAAC;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;KAChD;IAAC,OAAO,GAAQ,EAAE;QACjB,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAC/B,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC5C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAA,6BAAgB,EAAC,MAAM,CAAC,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CACvE,GAAG,EAAE;QAEL,CAAC,CACF,CAAC;QACF,MAAM,GAAG,CAAC;KACX;AACH,CAAC;AAtED,4CAsEC"}
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"}
@@ -1,6 +1,13 @@
1
+ import type { AutoEncryptionOptions } from 'mongodb';
1
2
  export interface ConnectionOptions {
2
3
  connectionString: string;
3
4
  sshTunnel?: ConnectionSshOptions;
5
+ useSystemCA?: boolean;
6
+ fleOptions?: ConnectionFleOptions;
7
+ }
8
+ export interface ConnectionFleOptions {
9
+ storeCredentials: boolean;
10
+ autoEncryption?: AutoEncryptionOptions;
4
11
  }
5
12
  export interface ConnectionSshOptions {
6
13
  host: string;
@@ -1 +1 @@
1
- {"version":3,"file":"connection-options.d.ts","sourceRoot":"","sources":["../src/connection-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAIhC,gBAAgB,EAAE,MAAM,CAAC;IAKzB,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC;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,4 +1,5 @@
1
1
  import type { ConnectionInfo } from './connection-info';
2
+ import type { AutoEncryptionOptions } from 'mongodb';
2
3
  export interface ConnectionSecrets {
3
4
  password?: string;
4
5
  sshTunnelPassword?: string;
@@ -6,6 +7,7 @@ export interface ConnectionSecrets {
6
7
  awsSessionToken?: string;
7
8
  tlsCertificateKeyFilePassword?: string;
8
9
  proxyPassword?: string;
10
+ autoEncryption?: AutoEncryptionOptions;
9
11
  }
10
12
  export declare function mergeSecrets(connectionInfo: Readonly<ConnectionInfo>, secrets: ConnectionSecrets | undefined): ConnectionInfo;
11
13
  export declare function extractSecrets(connectionInfo: Readonly<ConnectionInfo>): {
@@ -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;AAGxD,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;CACxB;AAED,wBAAgB,YAAY,CAC1B,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,EACxC,OAAO,EAAE,iBAAiB,GAAG,SAAS,GACrC,cAAc,CAwDhB;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG;IACxE,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CA4DA"}
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"}
@@ -26,6 +26,7 @@ exports.extractSecrets = exports.mergeSecrets = void 0;
26
26
  const lodash_1 = __importDefault(require("lodash"));
27
27
  const mongodb_connection_string_url_1 = __importStar(require("mongodb-connection-string-url"));
28
28
  function mergeSecrets(connectionInfo, secrets) {
29
+ var _a, _b;
29
30
  const connectionInfoWithSecrets = lodash_1.default.cloneDeep(connectionInfo);
30
31
  if (!secrets) {
31
32
  return connectionInfoWithSecrets;
@@ -43,6 +44,9 @@ function mergeSecrets(connectionInfo, secrets) {
43
44
  connectionOptions.sshTunnel.identityKeyPassphrase =
44
45
  secrets.sshTunnelPassphrase;
45
46
  }
47
+ if (secrets.autoEncryption && ((_a = connectionOptions.fleOptions) === null || _a === void 0 ? void 0 : _a.autoEncryption)) {
48
+ lodash_1.default.merge((_b = connectionOptions.fleOptions) === null || _b === void 0 ? void 0 : _b.autoEncryption, secrets.autoEncryption);
49
+ }
46
50
  if (secrets.tlsCertificateKeyFilePassword) {
47
51
  searchParams.set('tlsCertificateKeyFilePassword', secrets.tlsCertificateKeyFilePassword);
48
52
  }
@@ -59,7 +63,7 @@ function mergeSecrets(connectionInfo, secrets) {
59
63
  }
60
64
  exports.mergeSecrets = mergeSecrets;
61
65
  function extractSecrets(connectionInfo) {
62
- var _a, _b;
66
+ var _a, _b, _c;
63
67
  const connectionInfoWithoutSecrets = lodash_1.default.cloneDeep(connectionInfo);
64
68
  const secrets = {};
65
69
  const connectionOptions = connectionInfoWithoutSecrets.connectionOptions;
@@ -99,6 +103,22 @@ function extractSecrets(connectionInfo) {
99
103
  }
100
104
  }
101
105
  connectionInfoWithoutSecrets.connectionOptions.connectionString = uri.href;
106
+ if ((_c = connectionOptions.fleOptions) === null || _c === void 0 ? void 0 : _c.autoEncryption) {
107
+ const { autoEncryption } = connectionOptions.fleOptions;
108
+ const kmsProviders = ['aws', 'local', 'azure', 'gcp', 'kmip'];
109
+ const secretPaths = [
110
+ 'kmsProviders.aws.secretAccessKey',
111
+ 'kmsProviders.aws.sessionToken',
112
+ 'kmsProviders.local.key',
113
+ 'kmsProviders.azure.clientSecret',
114
+ 'kmsProviders.gcp.privateKey',
115
+ ...kmsProviders.map((p) => `tlsOptions.${p}.tlsCertificateKeyFilePassword`),
116
+ ];
117
+ connectionOptions.fleOptions.autoEncryption = lodash_1.default.omit(autoEncryption, secretPaths);
118
+ if (connectionOptions.fleOptions.storeCredentials) {
119
+ secrets.autoEncryption = lodash_1.default.pick(autoEncryption, secretPaths);
120
+ }
121
+ }
102
122
  return { connectionInfo: connectionInfoWithoutSecrets, secrets };
103
123
  }
104
124
  exports.extractSecrets = extractSecrets;
@@ -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":"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"}
@@ -3,7 +3,8 @@ import type { AmpersandMethodOptions } from './legacy/legacy-connection-model';
3
3
  export declare class ConnectionStorage {
4
4
  loadAll(): Promise<ConnectionInfo[]>;
5
5
  save(connectionInfo: ConnectionInfo): Promise<void>;
6
- delete(connectionOptions: ConnectionInfo): Promise<void>;
6
+ delete(connectionInfo: ConnectionInfo): Promise<void>;
7
+ load(id: string): Promise<ConnectionInfo | undefined>;
7
8
  }
8
9
  export declare function promisifyAmpersandMethod<T>(fn: (options: AmpersandMethodOptions<T>) => void): () => Promise<T>;
9
10
  //# sourceMappingURL=connection-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-storage.d.ts","sourceRoot":"","sources":["../src/connection-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAM/E,qBAAa,iBAAiB;IAMtB,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAoBpC,IAAI,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBnD,MAAM,CAAC,iBAAiB,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAU/D;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,EAAE,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,MAAM,OAAO,CAAC,CAAC,CAAC,CAYlB"}
1
+ {"version":3,"file":"connection-storage.d.ts","sourceRoot":"","sources":["../src/connection-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,kCAAkC,CAAC;AAS1C,qBAAa,iBAAiB;IAMtB,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA6CpC,IAAI,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCnD,MAAM,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BrD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;CAe5D;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,EAAE,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,MAAM,OAAO,CAAC,CAAC,CAAC,CAYlB"}
@@ -1,32 +1,76 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.promisifyAmpersandMethod = exports.ConnectionStorage = void 0;
4
7
  const uuid_1 = require("uuid");
5
8
  const legacy_connection_model_1 = require("./legacy/legacy-connection-model");
9
+ const compass_logging_1 = __importDefault(require("@mongodb-js/compass-logging"));
10
+ const { log, mongoLogId } = (0, compass_logging_1.default)('COMPASS-DATA-SERVICE');
6
11
  class ConnectionStorage {
7
12
  async loadAll() {
8
13
  const { ConnectionCollection } = require('mongodb-connection-model');
9
14
  const connectionCollection = new ConnectionCollection();
10
15
  const fetchConnectionModels = promisifyAmpersandMethod(connectionCollection.fetch.bind(connectionCollection));
11
- await fetchConnectionModels();
12
- return connectionCollection.map(legacy_connection_model_1.convertConnectionModelToInfo);
16
+ try {
17
+ await fetchConnectionModels();
18
+ }
19
+ catch (err) {
20
+ log.error(mongoLogId(1001000101), 'Connection Storage', 'Failed to load connection, error while fetching models', { message: err.message });
21
+ return [];
22
+ }
23
+ return connectionCollection
24
+ .map((model) => {
25
+ try {
26
+ return (0, legacy_connection_model_1.convertConnectionModelToInfo)(model);
27
+ }
28
+ catch (err) {
29
+ log.error(mongoLogId(1001000102), 'Connection Storage', 'Failed to load connection, error while converting from model', { message: err.message });
30
+ }
31
+ })
32
+ .filter(Boolean);
13
33
  }
14
34
  async save(connectionInfo) {
15
- if (!connectionInfo.id) {
16
- throw new Error('id is required');
35
+ try {
36
+ if (!connectionInfo.id) {
37
+ throw new Error('id is required');
38
+ }
39
+ if (!(0, uuid_1.validate)(connectionInfo.id)) {
40
+ throw new Error('id must be a uuid');
41
+ }
42
+ const model = await (0, legacy_connection_model_1.convertConnectionInfoToModel)(connectionInfo);
43
+ await new Promise((resolve, reject) => {
44
+ model.save(undefined, {
45
+ success: resolve,
46
+ error: reject,
47
+ });
48
+ });
17
49
  }
18
- if (!(0, uuid_1.validate)(connectionInfo.id)) {
19
- throw new Error('id must be a uuid');
50
+ catch (err) {
51
+ log.error(mongoLogId(1001000103), 'Connection Storage', 'Failed to save connection', { message: err.message });
52
+ throw err;
20
53
  }
21
- const model = await (0, legacy_connection_model_1.convertConnectionInfoToModel)(connectionInfo);
22
- model.save();
23
54
  }
24
- async delete(connectionOptions) {
25
- if (!connectionOptions.id) {
55
+ async delete(connectionInfo) {
56
+ if (!connectionInfo.id) {
26
57
  return;
27
58
  }
28
- const model = await (0, legacy_connection_model_1.convertConnectionInfoToModel)(connectionOptions);
29
- model.destroy();
59
+ try {
60
+ const model = await (0, legacy_connection_model_1.convertConnectionInfoToModel)(connectionInfo);
61
+ model.destroy();
62
+ }
63
+ catch (err) {
64
+ log.error(mongoLogId(1001000104), 'Connection Storage', 'Failed to delete connection', { message: err.message });
65
+ throw err;
66
+ }
67
+ }
68
+ async load(id) {
69
+ if (!id) {
70
+ return undefined;
71
+ }
72
+ const connections = await this.loadAll();
73
+ return connections.find((connection) => id === connection.id);
30
74
  }
31
75
  }
32
76
  exports.ConnectionStorage = ConnectionStorage;
@@ -1 +1 @@
1
- {"version":3,"file":"connection-storage.js","sourceRoot":"","sources":["../src/connection-storage.ts"],"names":[],"mappings":";;;AAEA,+BAAgD;AAEhD,8EAG0C;AAE1C,MAAa,iBAAiB;IAM5B,KAAK,CAAC,OAAO;QAEX,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACrE,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACxD,MAAM,qBAAqB,GAAG,wBAAwB,CACpD,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CACtD,CAAC;QAEF,MAAM,qBAAqB,EAAE,CAAC;QAC9B,OAAO,oBAAoB,CAAC,GAAG,CAAC,sDAA4B,CAAC,CAAC;IAChE,CAAC;IAUD,KAAK,CAAC,IAAI,CAAC,cAA8B;QACvC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SACnC;QAED,IAAI,CAAC,IAAA,eAAY,EAAC,cAAc,CAAC,EAAE,CAAC,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QAED,MAAM,KAAK,GAAG,MAAM,IAAA,sDAA4B,EAAC,cAAc,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;IAaD,KAAK,CAAC,MAAM,CAAC,iBAAiC;QAC5C,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE;YAGzB,OAAO;SACR;QAED,MAAM,KAAK,GAAG,MAAM,IAAA,sDAA4B,EAAC,iBAAiB,CAAC,CAAC;QACpE,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AA5DD,8CA4DC;AAED,SAAgB,wBAAwB,CACtC,EAAgD;IAEhD,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CACjB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9B,EAAE,CAAC,GAAG,IAAI,EAAE;YACV,OAAO,EAAE,CAAC,KAAQ,EAAE,EAAE;gBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YACD,KAAK,EAAE,CAAC,KAAQ,EAAE,KAAY,EAAE,EAAE;gBAChC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAdD,4DAcC"}
1
+ {"version":3,"file":"connection-storage.js","sourceRoot":"","sources":["../src/connection-storage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"connection-title.d.ts","sourceRoot":"","sources":["../src/connection-title.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAgB/D"}
1
+ {"version":3,"file":"connection-title.d.ts","sourceRoot":"","sources":["../src/connection-title.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAY/D"}
@@ -12,9 +12,6 @@ function getConnectionTitle(info) {
12
12
  }
13
13
  try {
14
14
  const url = new mongodb_connection_string_url_1.default(info.connectionOptions.connectionString);
15
- if (url.isSRV) {
16
- return url.hosts[0];
17
- }
18
15
  return url.hosts.join(',');
19
16
  }
20
17
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"connection-title.js","sourceRoot":"","sources":["../src/connection-title.ts"],"names":[],"mappings":";;;;;;AAAA,kGAA6D;AAG7D,SAAgB,kBAAkB,CAAC,IAAoB;;IACrD,IAAI,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,EAAE;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC3B;IAED,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,uCAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAC1E,IAAI,GAAG,CAAC,KAAK,EAAE;YACb,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACrB;QAED,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC5B;IAAC,OAAO,CAAC,EAAE;QAEV,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,IAAI,YAAY,CAAC;KAChE;AACH,CAAC;AAhBD,gDAgBC"}
1
+ {"version":3,"file":"connection-title.js","sourceRoot":"","sources":["../src/connection-title.ts"],"names":[],"mappings":";;;;;;AAAA,kGAA6D;AAG7D,SAAgB,kBAAkB,CAAC,IAAoB;;IACrD,IAAI,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,EAAE;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC3B;IAED,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,uCAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC5B;IAAC,OAAO,CAAC,EAAE;QAEV,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,IAAI,YAAY,CAAC;KAChE;AACH,CAAC;AAZD,gDAYC"}
@@ -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;AA2ED,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;IAoBjC,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"}