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.
- package/lib/connect-mongo-client.d.ts +1 -1
- package/lib/connect-mongo-client.d.ts.map +1 -1
- package/lib/connect-mongo-client.js +10 -1
- package/lib/connect-mongo-client.js.map +1 -1
- package/lib/connect.d.ts +1 -1
- package/lib/connect.d.ts.map +1 -1
- package/lib/connect.js +2 -5
- package/lib/connect.js.map +1 -1
- package/lib/connection-options.d.ts +1 -1
- package/lib/connection-options.d.ts.map +1 -1
- package/lib/connection-secrets.d.ts.map +1 -1
- package/lib/connection-secrets.js +3 -1
- package/lib/connection-secrets.js.map +1 -1
- package/lib/csfle-collection-tracker.d.ts +39 -0
- package/lib/csfle-collection-tracker.d.ts.map +1 -0
- package/lib/csfle-collection-tracker.js +205 -0
- package/lib/csfle-collection-tracker.js.map +1 -0
- package/lib/data-service.d.ts +135 -5
- package/lib/data-service.d.ts.map +1 -1
- package/lib/data-service.js +212 -14
- package/lib/data-service.js.map +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -3
- package/lib/index.js.map +1 -1
- package/lib/instance-detail-helper.d.ts +10 -2
- package/lib/instance-detail-helper.d.ts.map +1 -1
- package/lib/instance-detail-helper.js +31 -2
- package/lib/instance-detail-helper.js.map +1 -1
- package/package.json +22 -19
|
@@ -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
|
|
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,
|
|
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":";;;;;AACA,qCAAsC;AACtC,mEAA8E;AAG9E,oDAAkC;AAClC,qCAA2E;AAC3E,oDAAuB;AAEvB,kFAAmE;AAEnE,6CAIsB;AAEtB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAA,yBAAwB,EAAC,iBAAiB,CAAC,CAAC;AAEpD,KAAK,UAAU,yBAAyB,CACrD,
|
|
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
|
package/lib/connect.d.ts.map
CHANGED
|
@@ -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;
|
|
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 =
|
|
3
|
+
const data_service_1 = require("./data-service");
|
|
7
4
|
async function connect(connectionOptions) {
|
|
8
|
-
const dataService = new data_service_1.
|
|
5
|
+
const dataService = new data_service_1.DataServiceImpl(connectionOptions);
|
|
9
6
|
await dataService.connect();
|
|
10
7
|
return dataService;
|
|
11
8
|
}
|
package/lib/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"
|
|
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 +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;
|
|
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,
|
|
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
|
-
|
|
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":"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"}
|
|
@@ -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":"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"}
|
package/lib/data-service.d.ts
CHANGED
|
@@ -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,
|
|
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
|
|
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:
|
|
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
|