mongodb-data-service 21.11.0 → 21.15.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/README.md +7 -22
- package/lib/connect-mongo-client.d.ts +11 -0
- package/lib/connect-mongo-client.js +89 -0
- package/lib/connect-mongo-client.js.map +1 -0
- package/lib/connect.js +2 -15
- package/lib/connect.js.map +1 -1
- package/lib/connection-info.d.ts +12 -0
- package/lib/connection-info.js +3 -0
- package/lib/connection-info.js.map +1 -0
- package/lib/connection-options.d.ts +2 -11
- package/lib/connection-secrets.d.ts +13 -0
- package/lib/connection-secrets.js +98 -0
- package/lib/connection-secrets.js.map +1 -0
- package/lib/connection-storage.d.ts +4 -6
- package/lib/connection-storage.js +8 -8
- package/lib/connection-storage.js.map +1 -1
- package/lib/connection-title.d.ts +2 -0
- package/lib/connection-title.js +25 -0
- package/lib/connection-title.js.map +1 -0
- package/lib/data-service.d.ts +42 -21
- package/lib/data-service.js +440 -175
- package/lib/data-service.js.map +1 -1
- package/lib/index.d.ts +8 -1
- package/lib/index.js +15 -1
- package/lib/index.js.map +1 -1
- package/lib/instance-detail-helper.d.ts +77 -32
- package/lib/instance-detail-helper.js +143 -433
- package/lib/instance-detail-helper.js.map +1 -1
- package/lib/{legacy-connection-model.d.ts → legacy/legacy-connection-model.d.ts} +17 -8
- package/lib/legacy/legacy-connection-model.js +207 -0
- package/lib/legacy/legacy-connection-model.js.map +1 -0
- package/lib/redact.d.ts +4 -1
- package/lib/redact.js +23 -11
- package/lib/redact.js.map +1 -1
- package/lib/run-command.d.ts +209 -0
- package/lib/run-command.js +11 -0
- package/lib/run-command.js.map +1 -0
- package/lib/ssh-tunnel.d.ts +5 -0
- package/lib/ssh-tunnel.js +73 -0
- package/lib/ssh-tunnel.js.map +1 -0
- package/lib/types.d.ts +7 -98
- package/package.json +24 -25
- package/lib/.esm-wrapper.mjs +0 -3
- package/lib/legacy-connect.d.ts +0 -7
- package/lib/legacy-connect.js +0 -123
- package/lib/legacy-connect.js.map +0 -1
- package/lib/legacy-connection-model.js +0 -158
- package/lib/legacy-connection-model.js.map +0 -1
package/lib/types.d.ts
CHANGED
|
@@ -1,102 +1,9 @@
|
|
|
1
|
-
import { AnyError, CollStats
|
|
1
|
+
import type { AnyError, CollStats } from 'mongodb';
|
|
2
2
|
export interface Callback<R> {
|
|
3
3
|
(err: Error | AnyError | {
|
|
4
4
|
message: string;
|
|
5
5
|
} | null | undefined, result: R): void;
|
|
6
6
|
}
|
|
7
|
-
export interface ResolvedInstanceTaskData {
|
|
8
|
-
client: MongoClient;
|
|
9
|
-
db: Db;
|
|
10
|
-
userInfo: Document;
|
|
11
|
-
host: HostInfoDetails;
|
|
12
|
-
build: BuildInfoDetails;
|
|
13
|
-
cmdLineOpts: Document;
|
|
14
|
-
genuineMongoDB: GenuineMongoDBDetails;
|
|
15
|
-
dataLake: DataLakeDetails;
|
|
16
|
-
listDatabases: string[];
|
|
17
|
-
allowedDatabases: string[];
|
|
18
|
-
databases: InstanceDatabaseDetails[];
|
|
19
|
-
listCollections: InstanceCollectionDetails[];
|
|
20
|
-
allowedCollections: InstanceCollectionDetails[];
|
|
21
|
-
collections: InstanceCollectionDetails[];
|
|
22
|
-
hierarchy: never;
|
|
23
|
-
stats: InstanceDatabaseStats;
|
|
24
|
-
}
|
|
25
|
-
export declare type InstanceDetails = Omit<ResolvedInstanceTaskData, 'db' | 'listDatabases' | 'allowedDatabases' | 'userInfo' | 'listCollections' | 'allowedCollections' | 'cmdLineOpts'>;
|
|
26
|
-
export interface Instance extends InstanceDetails {
|
|
27
|
-
_id?: string;
|
|
28
|
-
hostname: string;
|
|
29
|
-
port: number;
|
|
30
|
-
}
|
|
31
|
-
export interface InstanceCollectionDetails {
|
|
32
|
-
_id: string;
|
|
33
|
-
name: string;
|
|
34
|
-
database: string;
|
|
35
|
-
readonly: boolean;
|
|
36
|
-
collation: string | null;
|
|
37
|
-
type: string;
|
|
38
|
-
view_on?: string;
|
|
39
|
-
pipeline?: Document[];
|
|
40
|
-
}
|
|
41
|
-
export interface InstanceDatabaseDetails {
|
|
42
|
-
_id: string;
|
|
43
|
-
name: string;
|
|
44
|
-
document_count: number;
|
|
45
|
-
storage_size: number;
|
|
46
|
-
index_count: number;
|
|
47
|
-
index_size: number;
|
|
48
|
-
collections?: InstanceCollectionDetails[];
|
|
49
|
-
}
|
|
50
|
-
export interface HostInfoDetails {
|
|
51
|
-
system_time?: any;
|
|
52
|
-
hostname?: string;
|
|
53
|
-
os?: string;
|
|
54
|
-
os_family?: string;
|
|
55
|
-
kernel_version?: string;
|
|
56
|
-
kernel_version_string?: string;
|
|
57
|
-
memory_bits?: number;
|
|
58
|
-
memory_page_size?: number;
|
|
59
|
-
arch?: string;
|
|
60
|
-
cpu_cores?: number;
|
|
61
|
-
cpu_cores_physical?: number;
|
|
62
|
-
cpu_scheduler?: string;
|
|
63
|
-
cpu_frequency?: number;
|
|
64
|
-
cpu_string?: string;
|
|
65
|
-
cpu_bits?: number;
|
|
66
|
-
machine_model?: string;
|
|
67
|
-
feature_numa?: boolean;
|
|
68
|
-
feature_always_full_sync?: number;
|
|
69
|
-
feature_nfs_async?: number;
|
|
70
|
-
}
|
|
71
|
-
export interface GenuineMongoDBDetails {
|
|
72
|
-
isGenuine: boolean;
|
|
73
|
-
dbType: string;
|
|
74
|
-
}
|
|
75
|
-
export interface BuildInfoDetails {
|
|
76
|
-
version: string;
|
|
77
|
-
commit: string;
|
|
78
|
-
commit_url: string;
|
|
79
|
-
flags_loader: any;
|
|
80
|
-
flags_compiler: any;
|
|
81
|
-
allocator: string;
|
|
82
|
-
javascript_engine: string;
|
|
83
|
-
debug: boolean;
|
|
84
|
-
for_bits: number;
|
|
85
|
-
max_bson_object_size: number;
|
|
86
|
-
enterprise_module: boolean;
|
|
87
|
-
query_engine: any;
|
|
88
|
-
raw: Document;
|
|
89
|
-
}
|
|
90
|
-
export interface InstanceDatabaseStats {
|
|
91
|
-
document_count: number;
|
|
92
|
-
storage_size: number;
|
|
93
|
-
index_count: number;
|
|
94
|
-
index_size: number;
|
|
95
|
-
}
|
|
96
|
-
export interface DataLakeDetails {
|
|
97
|
-
isDataLake: boolean;
|
|
98
|
-
version: string;
|
|
99
|
-
}
|
|
100
7
|
export interface CollectionStats {
|
|
101
8
|
ns: string;
|
|
102
9
|
name: string;
|
|
@@ -105,11 +12,13 @@ export interface CollectionStats {
|
|
|
105
12
|
max?: number;
|
|
106
13
|
is_power_of_two: boolean;
|
|
107
14
|
index_sizes?: CollStats['indexSizes'];
|
|
108
|
-
document_count: CollStats['
|
|
15
|
+
document_count: CollStats['count'];
|
|
109
16
|
document_size?: CollStats['size'];
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
17
|
+
avg_document_size: number;
|
|
18
|
+
storage_size: number;
|
|
19
|
+
free_storage_size: number;
|
|
20
|
+
index_count: number;
|
|
21
|
+
index_size: number;
|
|
113
22
|
padding_factor?: CollStats['paddingFactor'];
|
|
114
23
|
extent_count?: CollStats['numExtents'];
|
|
115
24
|
extent_last_size?: CollStats['lastExtentSize'];
|
package/package.json
CHANGED
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
"email": "compass@mongodb.com"
|
|
8
8
|
},
|
|
9
9
|
"homepage": "https://github.com/mongodb-js/compass",
|
|
10
|
-
"version": "21.
|
|
10
|
+
"version": "21.15.0",
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
13
|
"url": "https://github.com/mongodb-js/compass.git"
|
|
14
14
|
},
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
16
|
+
"node": ">=14.17.5"
|
|
17
17
|
},
|
|
18
18
|
"license": "SSPL",
|
|
19
19
|
"keywords": [
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
],
|
|
22
22
|
"main": "lib/index.js",
|
|
23
23
|
"exports": {
|
|
24
|
+
"webpack": "./src/index.ts",
|
|
24
25
|
"require": "./lib/index.js",
|
|
25
26
|
"import": "./lib/.esm-wrapper.mjs"
|
|
26
27
|
},
|
|
@@ -35,14 +36,14 @@
|
|
|
35
36
|
"prepublishOnly": "npm run compile",
|
|
36
37
|
"clean": "rimraf lib",
|
|
37
38
|
"precompile": "npm run clean",
|
|
38
|
-
"compile": "tsc -p tsconfig.json
|
|
39
|
+
"compile": "tsc -p tsconfig.json",
|
|
39
40
|
"depcheck": "depcheck",
|
|
40
41
|
"eslint": "eslint",
|
|
41
42
|
"prettier": "prettier",
|
|
42
43
|
"lint": "npm run eslint . && npm run prettier -- --check .",
|
|
43
44
|
"check": "npm run lint && npm run depcheck",
|
|
44
45
|
"check-ci": "npm run check",
|
|
45
|
-
"pretest": "
|
|
46
|
+
"pretest": "mongodb-runner start --port=27018 && node ../../scripts/rebuild.js keytar",
|
|
46
47
|
"test": "mocha",
|
|
47
48
|
"posttest": "mongodb-runner stop --port=27018",
|
|
48
49
|
"test-cov": "nyc -x \"**/*.spec.*\" npm run test",
|
|
@@ -52,30 +53,29 @@
|
|
|
52
53
|
"reformat": "npm run prettier -- --write ."
|
|
53
54
|
},
|
|
54
55
|
"peerDependencies": {
|
|
55
|
-
"mongodb": "^4.
|
|
56
|
+
"mongodb": "^4.2.2",
|
|
56
57
|
"mongodb-connection-model": "*"
|
|
57
58
|
},
|
|
58
59
|
"dependencies": {
|
|
59
|
-
"@mongodb-js/compass-logging": "^0.
|
|
60
|
-
"@mongodb-js/ssh-tunnel": "^1.2.
|
|
60
|
+
"@mongodb-js/compass-logging": "^0.6.0",
|
|
61
|
+
"@mongodb-js/ssh-tunnel": "^1.2.1",
|
|
61
62
|
"async": "^3.2.0",
|
|
62
|
-
"debug": "
|
|
63
|
+
"debug": "4.3.0",
|
|
64
|
+
"get-port": "^5.1.1",
|
|
63
65
|
"lodash": "^4.17.20",
|
|
64
|
-
"mongodb-build-info": "^1.
|
|
65
|
-
"mongodb-connection-string-url": "^
|
|
66
|
-
"mongodb-index-model": "^3.
|
|
67
|
-
"mongodb-js-errors": "^0.5.0",
|
|
66
|
+
"mongodb-build-info": "^1.3.0",
|
|
67
|
+
"mongodb-connection-string-url": "^2.4.1",
|
|
68
|
+
"mongodb-index-model": "^3.7.0",
|
|
68
69
|
"mongodb-ns": "^2.2.0",
|
|
69
|
-
"mongodb-
|
|
70
|
-
"resolve-mongodb-srv": "^1.1.0",
|
|
70
|
+
"resolve-mongodb-srv": "^1.1.1",
|
|
71
71
|
"uuid": "^8.3.2"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
|
-
"@mongodb-js/devtools-docker-test-envs": "^1.
|
|
75
|
-
"@mongodb-js/eslint-config-compass": "^0.
|
|
76
|
-
"@mongodb-js/mocha-config-compass": "^0.
|
|
77
|
-
"@mongodb-js/prettier-config-compass": "^0.
|
|
78
|
-
"@mongodb-js/tsconfig-compass": "^0.
|
|
74
|
+
"@mongodb-js/devtools-docker-test-envs": "^1.2.2",
|
|
75
|
+
"@mongodb-js/eslint-config-compass": "^0.5.0",
|
|
76
|
+
"@mongodb-js/mocha-config-compass": "^0.7.0",
|
|
77
|
+
"@mongodb-js/prettier-config-compass": "^0.4.0",
|
|
78
|
+
"@mongodb-js/tsconfig-compass": "^0.4.0",
|
|
79
79
|
"@types/async": "^3.2.7",
|
|
80
80
|
"@types/debug": "^4.1.7",
|
|
81
81
|
"@types/lodash": "^4.14.172",
|
|
@@ -85,18 +85,17 @@
|
|
|
85
85
|
"chai": "^4.2.0",
|
|
86
86
|
"depcheck": "^1.4.1",
|
|
87
87
|
"eslint": "^7.25.0",
|
|
88
|
+
"kerberos": "^2.0.0-beta.0",
|
|
88
89
|
"mocha": "^8.4.0",
|
|
89
|
-
"
|
|
90
|
-
"mongodb": "^
|
|
91
|
-
"mongodb-connection-model": "^21.8.0",
|
|
90
|
+
"mongodb": "^4.2.1",
|
|
91
|
+
"mongodb-connection-model": "^21.11.0",
|
|
92
92
|
"mongodb-runner": "^4.8.3",
|
|
93
93
|
"nyc": "^15.0.0",
|
|
94
94
|
"prettier": "2.3.2",
|
|
95
95
|
"rimraf": "^3.0.2",
|
|
96
96
|
"sinon": "^9.2.3",
|
|
97
|
-
"
|
|
98
|
-
"storage-mixin": "^4.7.0",
|
|
97
|
+
"storage-mixin": "^4.9.0",
|
|
99
98
|
"typescript": "^4.3.5"
|
|
100
99
|
},
|
|
101
|
-
"gitHead": "
|
|
100
|
+
"gitHead": "542e3fa07d48435b1a7acc21c96de20562b843b3"
|
|
102
101
|
}
|
package/lib/.esm-wrapper.mjs
DELETED
package/lib/legacy-connect.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { MongoClientOptions, MongoClient } from 'mongodb';
|
|
2
|
-
import SSHTunnel from '@mongodb-js/ssh-tunnel';
|
|
3
|
-
import { LegacyConnectionModel } from './legacy-connection-model';
|
|
4
|
-
export default function connectCallback(model: LegacyConnectionModel, setupListeners: (client: MongoClient) => void, done: (err: Error | null, client: MongoClient, tunnel: SSHTunnel | null, options: {
|
|
5
|
-
url: string;
|
|
6
|
-
options: MongoClientOptions;
|
|
7
|
-
}) => void): void;
|
package/lib/legacy-connect.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
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
|
-
const events_1 = require("events");
|
|
7
|
-
const mongodb_1 = require("mongodb");
|
|
8
|
-
const ssh_tunnel_1 = __importDefault(require("@mongodb-js/ssh-tunnel"));
|
|
9
|
-
const mongodb_connection_string_url_1 = __importDefault(require("mongodb-connection-string-url"));
|
|
10
|
-
const resolve_mongodb_srv_1 = __importDefault(require("resolve-mongodb-srv"));
|
|
11
|
-
const redact_1 = require("./redact");
|
|
12
|
-
const compass_logging_1 = __importDefault(require("@mongodb-js/compass-logging"));
|
|
13
|
-
const debug_1 = __importDefault(require("debug"));
|
|
14
|
-
const debug = debug_1.default('mongodb-data-service:connect');
|
|
15
|
-
const { log, mongoLogId } = compass_logging_1.default('COMPASS-CONNECT');
|
|
16
|
-
function removeGssapiServiceName(url) {
|
|
17
|
-
const uri = new mongodb_connection_string_url_1.default(url);
|
|
18
|
-
uri.searchParams.delete('gssapiServiceName');
|
|
19
|
-
return uri.toString();
|
|
20
|
-
}
|
|
21
|
-
async function openSshTunnel(model) {
|
|
22
|
-
if (!model.sshTunnel ||
|
|
23
|
-
model.sshTunnel === 'NONE' ||
|
|
24
|
-
!model.sshTunnelOptions) {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
log.info(mongoLogId(1001000006), 'SSHTunnel', 'Creating SSH tunnel', redact_1.redactSshTunnelOptions(model.sshTunnelOptions));
|
|
28
|
-
debug('creating ssh tunnel with options', model.sshTunnel, redact_1.redactSshTunnelOptions(model.sshTunnelOptions));
|
|
29
|
-
const tunnel = new ssh_tunnel_1.default(model.sshTunnelOptions);
|
|
30
|
-
debug('ssh tunnel listen ...');
|
|
31
|
-
await tunnel.listen();
|
|
32
|
-
debug('ssh tunnel opened');
|
|
33
|
-
log.info(mongoLogId(1001000007), 'SSHTunnel', 'SSH tunnel opened');
|
|
34
|
-
return tunnel;
|
|
35
|
-
}
|
|
36
|
-
async function forceCloseTunnel(tunnelToClose) {
|
|
37
|
-
if (tunnelToClose) {
|
|
38
|
-
log.info(mongoLogId(1001000008), 'SSHTunnel', 'Closing SSH tunnel');
|
|
39
|
-
try {
|
|
40
|
-
await tunnelToClose.close();
|
|
41
|
-
debug('ssh tunnel stopped');
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
debug('ssh tunnel stopped with error: %s', err.message);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
async function waitForTunnelError(tunnel) {
|
|
49
|
-
const [error] = await events_1.once(tunnel || new events_1.EventEmitter(), 'error');
|
|
50
|
-
throw error;
|
|
51
|
-
}
|
|
52
|
-
function addDirectConnectionWhenNeeded(options, model) {
|
|
53
|
-
var _a;
|
|
54
|
-
if (model.directConnection === undefined &&
|
|
55
|
-
((_a = model.hosts) === null || _a === void 0 ? void 0 : _a.length) === 1 &&
|
|
56
|
-
!model.isSrvRecord &&
|
|
57
|
-
!model.loadBalanced &&
|
|
58
|
-
(model.replicaSet === undefined || model.replicaSet === '')) {
|
|
59
|
-
return {
|
|
60
|
-
...options,
|
|
61
|
-
directConnection: true,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
return options;
|
|
65
|
-
}
|
|
66
|
-
async function connect(model, setupListeners) {
|
|
67
|
-
debug('connecting ...');
|
|
68
|
-
const url = removeGssapiServiceName(model.driverUrlWithSsh);
|
|
69
|
-
const options = {
|
|
70
|
-
...addDirectConnectionWhenNeeded(model.driverOptions, model),
|
|
71
|
-
};
|
|
72
|
-
delete options.auth;
|
|
73
|
-
const tunnel = await openSshTunnel(model);
|
|
74
|
-
debug('creating MongoClient', {
|
|
75
|
-
url: redact_1.redactConnectionString(url),
|
|
76
|
-
options,
|
|
77
|
-
});
|
|
78
|
-
log.info(mongoLogId(1001000009), 'Connect', 'Initiating connection', {
|
|
79
|
-
url: redact_1.redactConnectionString(url),
|
|
80
|
-
options,
|
|
81
|
-
});
|
|
82
|
-
let resolvedUrl;
|
|
83
|
-
try {
|
|
84
|
-
resolvedUrl = await resolve_mongodb_srv_1.default(url);
|
|
85
|
-
log.info(mongoLogId(1001000010), 'Connect', 'Resolved SRV record', {
|
|
86
|
-
from: redact_1.redactConnectionString(url),
|
|
87
|
-
to: redact_1.redactConnectionString(resolvedUrl),
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
log.error(mongoLogId(1001000011), 'Connect', 'Resolving SRV record failed', { from: redact_1.redactConnectionString(url), error: error.message });
|
|
92
|
-
throw error;
|
|
93
|
-
}
|
|
94
|
-
const mongoClient = new mongodb_1.MongoClient(resolvedUrl, options);
|
|
95
|
-
if (setupListeners) {
|
|
96
|
-
setupListeners(mongoClient);
|
|
97
|
-
}
|
|
98
|
-
try {
|
|
99
|
-
debug('waiting for MongoClient to connect ...');
|
|
100
|
-
const client = (await Promise.race([
|
|
101
|
-
mongoClient.connect(),
|
|
102
|
-
waitForTunnelError(tunnel),
|
|
103
|
-
]));
|
|
104
|
-
log.info(mongoLogId(1001000012), 'Connect', 'Connection established', {
|
|
105
|
-
url: redact_1.redactConnectionString(url),
|
|
106
|
-
});
|
|
107
|
-
return [client, tunnel, { url, options }];
|
|
108
|
-
}
|
|
109
|
-
catch (err) {
|
|
110
|
-
log.error(mongoLogId(1001000013), 'Connect', 'Connection attempt failed', { error: err.message });
|
|
111
|
-
debug('connection error', err);
|
|
112
|
-
debug('force shutting down ssh tunnel ...');
|
|
113
|
-
await forceCloseTunnel(tunnel);
|
|
114
|
-
throw err;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
function connectCallback(model, setupListeners, done) {
|
|
118
|
-
connect(model, setupListeners).then(([client, tunnel, options]) => process.nextTick(() => done(null, client, tunnel, options)), (err) => process.nextTick(() => {
|
|
119
|
-
return done(err);
|
|
120
|
-
}));
|
|
121
|
-
}
|
|
122
|
-
exports.default = connectCallback;
|
|
123
|
-
//# sourceMappingURL=legacy-connect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-connect.js","sourceRoot":"","sources":["../src/legacy-connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,158 +0,0 @@
|
|
|
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.convertConnectionOptionsToModel = exports.convertConnectionModelToOptions = void 0;
|
|
7
|
-
const mongodb_connection_string_url_1 = __importDefault(require("mongodb-connection-string-url"));
|
|
8
|
-
const util_1 = require("util");
|
|
9
|
-
const ConnectionModel = require('mongodb-connection-model');
|
|
10
|
-
function convertConnectionModelToOptions(model) {
|
|
11
|
-
const options = {
|
|
12
|
-
id: model._id,
|
|
13
|
-
connectionString: model.driverUrl,
|
|
14
|
-
};
|
|
15
|
-
convertSslPropertiesToConnectionOptions(model, options);
|
|
16
|
-
if (model.sslCert && model.sslCert !== model.sslKey) {
|
|
17
|
-
options.tlsCertificateFile = model.sslCert;
|
|
18
|
-
}
|
|
19
|
-
if (model.sshTunnel !== 'NONE' &&
|
|
20
|
-
model.sshTunnelHostname &&
|
|
21
|
-
model.sshTunnelUsername) {
|
|
22
|
-
options.sshTunnel = {
|
|
23
|
-
host: model.sshTunnelHostname,
|
|
24
|
-
port: model.sshTunnelPort,
|
|
25
|
-
username: model.sshTunnelUsername,
|
|
26
|
-
};
|
|
27
|
-
if (model.sshTunnelPassword !== undefined) {
|
|
28
|
-
options.sshTunnel.password = model.sshTunnelPassword;
|
|
29
|
-
}
|
|
30
|
-
if (model.sshTunnelIdentityFile !== undefined) {
|
|
31
|
-
options.sshTunnel.privateKeyFile = model.sshTunnelIdentityFile;
|
|
32
|
-
}
|
|
33
|
-
if (model.sshTunnelPassphrase !== undefined) {
|
|
34
|
-
options.sshTunnel.privateKeyPassphrase = model.sshTunnelPassphrase;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (model.isFavorite) {
|
|
38
|
-
options.favorite = {
|
|
39
|
-
name: model.name,
|
|
40
|
-
color: model.color,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
return options;
|
|
44
|
-
}
|
|
45
|
-
exports.convertConnectionModelToOptions = convertConnectionModelToOptions;
|
|
46
|
-
function convertSslPropertiesToConnectionOptions(model, options) {
|
|
47
|
-
const url = new mongodb_connection_string_url_1.default(options.connectionString);
|
|
48
|
-
switch (model.sslMethod) {
|
|
49
|
-
case 'SERVER':
|
|
50
|
-
url.searchParams.set('tlsAllowInvalidCertificates', 'false');
|
|
51
|
-
convertSslCAToConnectionString(model.sslCA, url);
|
|
52
|
-
break;
|
|
53
|
-
case 'ALL':
|
|
54
|
-
url.searchParams.set('tlsAllowInvalidCertificates', 'false');
|
|
55
|
-
convertSslCAToConnectionString(model.sslCA, url);
|
|
56
|
-
if (model.sslCert && model.sslCert !== model.sslKey) {
|
|
57
|
-
options.tlsCertificateFile = model.sslCert;
|
|
58
|
-
}
|
|
59
|
-
if (model.sslKey) {
|
|
60
|
-
url.searchParams.set('tlsCertificateKeyFile', model.sslKey);
|
|
61
|
-
}
|
|
62
|
-
if (model.sslPass) {
|
|
63
|
-
url.searchParams.set('tlsCertificateKeyFilePassword', model.sslPass);
|
|
64
|
-
}
|
|
65
|
-
break;
|
|
66
|
-
case 'UNVALIDATED':
|
|
67
|
-
url.searchParams.set('tlsAllowInvalidCertificates', 'true');
|
|
68
|
-
url.searchParams.set('tlsAllowInvalidHostnames', 'true');
|
|
69
|
-
break;
|
|
70
|
-
case 'SYSTEMCA':
|
|
71
|
-
url.searchParams.set('tlsAllowInvalidCertificates', 'false');
|
|
72
|
-
url.searchParams.set('tlsAllowInvalidHostnames', 'false');
|
|
73
|
-
break;
|
|
74
|
-
case 'IFAVAILABLE':
|
|
75
|
-
url.searchParams.set('tlsAllowInvalidCertificates', 'false');
|
|
76
|
-
url.searchParams.set('tlsAllowInvalidHostnames', 'true');
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
options.connectionString = url.toString();
|
|
80
|
-
}
|
|
81
|
-
function convertSslCAToConnectionString(sslCA, url) {
|
|
82
|
-
if (!sslCA) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (typeof sslCA === 'string') {
|
|
86
|
-
url.searchParams.set('tlsCAFile', sslCA);
|
|
87
|
-
}
|
|
88
|
-
else if (Array.isArray(sslCA) && sslCA.length > 0) {
|
|
89
|
-
url.searchParams.set('tlsCAFile', sslCA[0]);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
async function convertConnectionOptionsToModel(options) {
|
|
93
|
-
const connection = await util_1.promisify(ConnectionModel.from)(options.connectionString);
|
|
94
|
-
const additionalOptions = {
|
|
95
|
-
_id: options.id,
|
|
96
|
-
};
|
|
97
|
-
convertSslOptionsToLegacyProperties(options, additionalOptions);
|
|
98
|
-
if (options.sshTunnel) {
|
|
99
|
-
additionalOptions.sshTunnel = !options.sshTunnel.privateKeyFile
|
|
100
|
-
? 'USER_PASSWORD'
|
|
101
|
-
: 'IDENTITY_FILE';
|
|
102
|
-
additionalOptions.sshTunnelHostname = options.sshTunnel.host;
|
|
103
|
-
additionalOptions.sshTunnelUsername = options.sshTunnel.username;
|
|
104
|
-
additionalOptions.sshTunnelPassword = options.sshTunnel.password;
|
|
105
|
-
additionalOptions.sshTunnelIdentityFile = options.sshTunnel.privateKeyFile;
|
|
106
|
-
additionalOptions.sshTunnelPassphrase =
|
|
107
|
-
options.sshTunnel.privateKeyPassphrase;
|
|
108
|
-
}
|
|
109
|
-
if (options.favorite) {
|
|
110
|
-
additionalOptions.isFavorite = true;
|
|
111
|
-
additionalOptions.name = options.favorite.name;
|
|
112
|
-
additionalOptions.color = options.favorite.color;
|
|
113
|
-
}
|
|
114
|
-
return new ConnectionModel({
|
|
115
|
-
...connection.toJSON(),
|
|
116
|
-
...additionalOptions,
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
exports.convertConnectionOptionsToModel = convertConnectionOptionsToModel;
|
|
120
|
-
function convertSslOptionsToLegacyProperties(options, properties) {
|
|
121
|
-
var _a;
|
|
122
|
-
const url = new mongodb_connection_string_url_1.default(options.connectionString);
|
|
123
|
-
const tlsAllowInvalidCertificates = url.searchParams.get('tlsAllowInvalidCertificates');
|
|
124
|
-
const tlsAllowInvalidHostnames = url.searchParams.get('tlsAllowInvalidHostnames');
|
|
125
|
-
const tlsCAFile = url.searchParams.get('tlsCAFile');
|
|
126
|
-
const tlsCertificateKeyFile = url.searchParams.get('tlsCertificateKeyFile');
|
|
127
|
-
const tlsCertificateKeyFilePassword = url.searchParams.get('tlsCertificateKeyFilePassword');
|
|
128
|
-
if (tlsAllowInvalidCertificates === 'false' && tlsCAFile) {
|
|
129
|
-
properties.sslMethod = 'SERVER';
|
|
130
|
-
properties.sslCert = undefined;
|
|
131
|
-
properties.sslKey = undefined;
|
|
132
|
-
if (options.tlsCertificateFile || tlsCertificateKeyFile) {
|
|
133
|
-
properties.sslMethod = 'ALL';
|
|
134
|
-
properties.sslCert = (_a = options.tlsCertificateFile) !== null && _a !== void 0 ? _a : tlsCertificateKeyFile;
|
|
135
|
-
properties.sslKey = tlsCertificateKeyFile !== null && tlsCertificateKeyFile !== void 0 ? tlsCertificateKeyFile : undefined;
|
|
136
|
-
properties.sslPass = tlsCertificateKeyFilePassword !== null && tlsCertificateKeyFilePassword !== void 0 ? tlsCertificateKeyFilePassword : undefined;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
properties.sslCA = undefined;
|
|
141
|
-
properties.sslCert = undefined;
|
|
142
|
-
properties.sslKey = undefined;
|
|
143
|
-
properties.sslPass = undefined;
|
|
144
|
-
if (tlsAllowInvalidCertificates === 'true' &&
|
|
145
|
-
tlsAllowInvalidHostnames === 'true') {
|
|
146
|
-
properties.sslMethod = 'UNVALIDATED';
|
|
147
|
-
}
|
|
148
|
-
else if (tlsAllowInvalidCertificates === 'false' &&
|
|
149
|
-
tlsAllowInvalidHostnames === 'false') {
|
|
150
|
-
properties.sslMethod = 'SYSTEMCA';
|
|
151
|
-
}
|
|
152
|
-
else if (tlsAllowInvalidCertificates === 'false' &&
|
|
153
|
-
tlsAllowInvalidHostnames === 'true') {
|
|
154
|
-
properties.sslMethod = 'IFAVAILABLE';
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=legacy-connection-model.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-connection-model.js","sourceRoot":"","sources":["../src/legacy-connection-model.ts"],"names":[],"mappings":";;;;;;AAEA,kGAA6D;AAC7D,+BAAiC;AAIjC,MAAM,eAAe,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAkI5D,SAAgB,+BAA+B,CAC7C,KAA4B;IAE5B,MAAM,OAAO,GAAsB;QACjC,EAAE,EAAE,KAAK,CAAC,GAAG;QACb,gBAAgB,EAAE,KAAK,CAAC,SAAS;KAClC,CAAC;IAEF,uCAAuC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE;QACnD,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC;KAC5C;IAED,IACE,KAAK,CAAC,SAAS,KAAK,MAAM;QAC1B,KAAK,CAAC,iBAAiB;QACvB,KAAK,CAAC,iBAAiB,EACvB;QACA,OAAO,CAAC,SAAS,GAAG;YAClB,IAAI,EAAE,KAAK,CAAC,iBAAiB;YAC7B,IAAI,EAAE,KAAK,CAAC,aAAa;YACzB,QAAQ,EAAE,KAAK,CAAC,iBAAiB;SAClC,CAAC;QACF,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACzC,OAAO,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC;SACtD;QACD,IAAI,KAAK,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC7C,OAAO,CAAC,SAAS,CAAC,cAAc,GAAG,KAAK,CAAC,qBAAqB,CAAC;SAChE;QACD,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,EAAE;YAC3C,OAAO,CAAC,SAAS,CAAC,oBAAoB,GAAG,KAAK,CAAC,mBAAmB,CAAC;SACpE;KACF;IAED,IAAI,KAAK,CAAC,UAAU,EAAE;QACpB,OAAO,CAAC,QAAQ,GAAG;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;KACH;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AA1CD,0EA0CC;AAED,SAAS,uCAAuC,CAC9C,KAA4B,EAC5B,OAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,uCAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE3D,QAAQ,KAAK,CAAC,SAAS,EAAE;QACvB,KAAK,QAAQ;YACX,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YAC7D,8BAA8B,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM;QACR,KAAK,KAAK;YACR,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YAC7D,8BAA8B,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE;gBACnD,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC;aAC5C;YACD,IAAI,KAAK,CAAC,MAAM,EAAE;gBAChB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;aAC7D;YACD,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aACtE;YACD,MAAM;QACR,KAAK,aAAa;YAChB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YAC5D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;YACzD,MAAM;QACR,KAAK,UAAU;YACb,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM;QACR,KAAK,aAAa;YAChB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;YACzD,MAAM;KACT;IAED,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAoC,EACpC,GAAqB;IAErB,IAAI,CAAC,KAAK,EAAE;QACV,OAAO;KACR;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;KAC1C;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;AACH,CAAC;AAEM,KAAK,UAAU,+BAA+B,CACnD,OAA0B;IAE1B,MAAM,UAAU,GAA0B,MAAM,gBAAS,CACvD,eAAe,CAAC,IAAI,CACrB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5B,MAAM,iBAAiB,GAA6C;QAClE,GAAG,EAAE,OAAO,CAAC,EAAE;KAChB,CAAC;IAEF,mCAAmC,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,SAAS,EAAE;QACrB,iBAAiB,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc;YAC7D,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,eAAe,CAAC;QACpB,iBAAiB,CAAC,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7D,iBAAiB,CAAC,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;QACjE,iBAAiB,CAAC,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;QACjE,iBAAiB,CAAC,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC;QAC3E,iBAAiB,CAAC,mBAAmB;YACnC,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC;KAC1C;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE;QACpB,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC;QACpC,iBAAiB,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC/C,iBAAiB,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;KAClD;IAED,OAAO,IAAI,eAAe,CAAC;QACzB,GAAG,UAAU,CAAC,MAAM,EAAE;QACtB,GAAG,iBAAiB;KACrB,CAAC,CAAC;AACL,CAAC;AAnCD,0EAmCC;AAED,SAAS,mCAAmC,CAC1C,OAA0B,EAC1B,UAAoD;;IAEpD,MAAM,GAAG,GAAG,IAAI,uCAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,2BAA2B,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CACtD,6BAA6B,CAC9B,CAAC;IACF,MAAM,wBAAwB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CACnD,0BAA0B,CAC3B,CAAC;IACF,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,qBAAqB,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC5E,MAAM,6BAA6B,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CACxD,+BAA+B,CAChC,CAAC;IAEF,IAAI,2BAA2B,KAAK,OAAO,IAAI,SAAS,EAAE;QACxD,UAAU,CAAC,SAAS,GAAG,QAAQ,CAAC;QAChC,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/B,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC;QAE9B,IAAI,OAAO,CAAC,kBAAkB,IAAI,qBAAqB,EAAE;YACvD,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;YAC7B,UAAU,CAAC,OAAO,GAAG,MAAA,OAAO,CAAC,kBAAkB,mCAAI,qBAAqB,CAAC;YACzE,UAAU,CAAC,MAAM,GAAG,qBAAqB,aAArB,qBAAqB,cAArB,qBAAqB,GAAI,SAAS,CAAC;YACvD,UAAU,CAAC,OAAO,GAAG,6BAA6B,aAA7B,6BAA6B,cAA7B,6BAA6B,GAAI,SAAS,CAAC;SACjE;KACF;SAAM;QACL,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAC7B,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/B,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC;QAC9B,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QAC/B,IACE,2BAA2B,KAAK,MAAM;YACtC,wBAAwB,KAAK,MAAM,EACnC;YACA,UAAU,CAAC,SAAS,GAAG,aAAa,CAAC;SACtC;aAAM,IACL,2BAA2B,KAAK,OAAO;YACvC,wBAAwB,KAAK,OAAO,EACpC;YACA,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC;SACnC;aAAM,IACL,2BAA2B,KAAK,OAAO;YACvC,wBAAwB,KAAK,MAAM,EACnC;YACA,UAAU,CAAC,SAAS,GAAG,aAAa,CAAC;SACtC;KACF;AACH,CAAC"}
|