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
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import SSHTunnel, { SshTunnelConfig } from '@mongodb-js/ssh-tunnel';
|
|
2
|
-
import { MongoClient, MongoClientOptions, ReadPreferenceLike } from 'mongodb';
|
|
3
|
-
import {
|
|
2
|
+
import type { MongoClient, MongoClientOptions, ReadPreferenceLike } from 'mongodb';
|
|
3
|
+
import { ConnectionInfo } from '../connection-info';
|
|
4
|
+
import { ConnectionSecrets } from '../connection-secrets';
|
|
5
|
+
declare type SslMethod = 'NONE' | 'SYSTEMCA' | 'IFAVAILABLE' | 'UNVALIDATED' | 'SERVER' | 'ALL';
|
|
4
6
|
export interface LegacyConnectionModelProperties {
|
|
5
7
|
_id: string;
|
|
6
8
|
hostname: string;
|
|
7
9
|
port: number;
|
|
8
10
|
ns?: string;
|
|
11
|
+
connectionInfo?: ConnectionInfo;
|
|
12
|
+
secrets?: ConnectionSecrets;
|
|
9
13
|
authStrategy: 'NONE' | 'MONGODB' | 'X509' | 'KERBEROS' | 'LDAP' | 'SCRAM-SHA-256';
|
|
10
|
-
hosts?:
|
|
14
|
+
hosts?: Array<{
|
|
15
|
+
host: string;
|
|
16
|
+
port: number;
|
|
17
|
+
}>;
|
|
11
18
|
isSrvRecord?: boolean;
|
|
12
19
|
replicaSet?: string;
|
|
13
20
|
connectTimeoutMS?: number;
|
|
@@ -47,12 +54,12 @@ export interface LegacyConnectionModelProperties {
|
|
|
47
54
|
kerberosServiceName?: string;
|
|
48
55
|
kerberosPrincipal?: string;
|
|
49
56
|
kerberosServiceRealm?: string;
|
|
50
|
-
kerberosCanonicalizeHostname
|
|
57
|
+
kerberosCanonicalizeHostname: boolean;
|
|
51
58
|
ldapUsername?: string;
|
|
52
59
|
ldapPassword?: string;
|
|
53
60
|
x509Username?: string;
|
|
54
61
|
ssl?: any;
|
|
55
|
-
sslMethod:
|
|
62
|
+
sslMethod: SslMethod;
|
|
56
63
|
sslCA?: string[];
|
|
57
64
|
sslCert?: any;
|
|
58
65
|
sslKey?: any;
|
|
@@ -63,11 +70,12 @@ export interface LegacyConnectionModelProperties {
|
|
|
63
70
|
sshTunnelBindToLocalPort?: number;
|
|
64
71
|
sshTunnelUsername?: string;
|
|
65
72
|
sshTunnelPassword?: string;
|
|
66
|
-
sshTunnelIdentityFile?: string;
|
|
73
|
+
sshTunnelIdentityFile?: string | string[];
|
|
67
74
|
sshTunnelPassphrase?: string;
|
|
68
75
|
lastUsed?: Date;
|
|
69
76
|
isFavorite: boolean;
|
|
70
77
|
name: string;
|
|
78
|
+
title?: string;
|
|
71
79
|
color?: string;
|
|
72
80
|
}
|
|
73
81
|
export interface AmpersandMethodOptions<T> {
|
|
@@ -85,5 +93,6 @@ export interface LegacyConnectionModel extends LegacyConnectionModelProperties {
|
|
|
85
93
|
destroy: (options?: AmpersandMethodOptions<LegacyConnectionModel>) => void;
|
|
86
94
|
once: (event: string, handler: () => void) => void;
|
|
87
95
|
}
|
|
88
|
-
export declare function
|
|
89
|
-
export declare function
|
|
96
|
+
export declare function convertConnectionModelToInfo(model: LegacyConnectionModelProperties): ConnectionInfo;
|
|
97
|
+
export declare function convertConnectionInfoToModel(connectionInfo: ConnectionInfo): Promise<LegacyConnectionModel>;
|
|
98
|
+
export {};
|
|
@@ -0,0 +1,207 @@
|
|
|
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.convertConnectionInfoToModel = exports.convertConnectionModelToInfo = void 0;
|
|
7
|
+
const mongodb_connection_string_url_1 = __importDefault(require("mongodb-connection-string-url"));
|
|
8
|
+
const util_1 = __importDefault(require("util"));
|
|
9
|
+
const connection_secrets_1 = require("../connection-secrets");
|
|
10
|
+
const ConnectionModel = require('mongodb-connection-model');
|
|
11
|
+
function convertConnectionModelToInfo(model) {
|
|
12
|
+
var _a;
|
|
13
|
+
const legacyModel = model instanceof ConnectionModel ? model : new ConnectionModel(model);
|
|
14
|
+
if (legacyModel.connectionInfo) {
|
|
15
|
+
const connectionInfo = (0, connection_secrets_1.mergeSecrets)(legacyModel.connectionInfo, (_a = legacyModel.secrets) !== null && _a !== void 0 ? _a : {});
|
|
16
|
+
if (connectionInfo.lastUsed) {
|
|
17
|
+
connectionInfo.lastUsed = new Date(connectionInfo.lastUsed);
|
|
18
|
+
}
|
|
19
|
+
return connectionInfo;
|
|
20
|
+
}
|
|
21
|
+
const info = {
|
|
22
|
+
id: legacyModel._id,
|
|
23
|
+
connectionOptions: {
|
|
24
|
+
connectionString: legacyModel.driverUrl,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
modelSslPropertiesToConnectionOptions(legacyModel.driverOptions, info.connectionOptions);
|
|
28
|
+
const sshTunnel = modelTunnelToConnectionOptions(legacyModel);
|
|
29
|
+
if (sshTunnel) {
|
|
30
|
+
info.connectionOptions.sshTunnel = sshTunnel;
|
|
31
|
+
}
|
|
32
|
+
if (legacyModel.driverOptions.directConnection !== undefined) {
|
|
33
|
+
setConnectionStringParam(info.connectionOptions, 'directConnection', legacyModel.driverOptions.directConnection ? 'true' : 'false');
|
|
34
|
+
}
|
|
35
|
+
if (legacyModel.driverOptions.readPreference !== undefined) {
|
|
36
|
+
setConnectionStringParam(info.connectionOptions, 'readPreference', typeof legacyModel.driverOptions.readPreference === 'string'
|
|
37
|
+
? legacyModel.driverOptions.readPreference
|
|
38
|
+
: legacyModel.driverOptions.readPreference.preference);
|
|
39
|
+
}
|
|
40
|
+
if (legacyModel.isFavorite) {
|
|
41
|
+
info.favorite = {
|
|
42
|
+
name: legacyModel.name,
|
|
43
|
+
color: legacyModel.color,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (legacyModel.lastUsed) {
|
|
47
|
+
info.lastUsed = legacyModel.lastUsed;
|
|
48
|
+
}
|
|
49
|
+
return info;
|
|
50
|
+
}
|
|
51
|
+
exports.convertConnectionModelToInfo = convertConnectionModelToInfo;
|
|
52
|
+
function setConnectionStringParam(connectionOptions, param, value) {
|
|
53
|
+
const url = new mongodb_connection_string_url_1.default(connectionOptions.connectionString);
|
|
54
|
+
url.typedSearchParams().set(param, value);
|
|
55
|
+
connectionOptions.connectionString = url.toString();
|
|
56
|
+
}
|
|
57
|
+
function modelSslPropertiesToConnectionOptions(driverOptions, connectionOptions) {
|
|
58
|
+
const url = new mongodb_connection_string_url_1.default(connectionOptions.connectionString);
|
|
59
|
+
const searchParams = url.typedSearchParams();
|
|
60
|
+
if (driverOptions.sslValidate === false) {
|
|
61
|
+
searchParams.set('tlsAllowInvalidCertificates', 'true');
|
|
62
|
+
}
|
|
63
|
+
if (driverOptions.tlsAllowInvalidHostnames) {
|
|
64
|
+
searchParams.set('tlsAllowInvalidHostnames', 'true');
|
|
65
|
+
}
|
|
66
|
+
const sslCA = getSslDriverOptionsFile(driverOptions.sslCA);
|
|
67
|
+
const sslCert = getSslDriverOptionsFile(driverOptions.sslCert);
|
|
68
|
+
const sslKey = getSslDriverOptionsFile(driverOptions.sslKey);
|
|
69
|
+
if (sslCA) {
|
|
70
|
+
searchParams.set('tlsCAFile', sslCA);
|
|
71
|
+
}
|
|
72
|
+
if (sslCert && sslCert !== sslKey) {
|
|
73
|
+
searchParams.set('tlsCertificateFile', sslCert);
|
|
74
|
+
}
|
|
75
|
+
if (sslKey) {
|
|
76
|
+
searchParams.set('tlsCertificateKeyFile', sslKey);
|
|
77
|
+
}
|
|
78
|
+
if (driverOptions.sslPass) {
|
|
79
|
+
searchParams.set('tlsCertificateKeyFilePassword', driverOptions.sslPass);
|
|
80
|
+
}
|
|
81
|
+
if (searchParams.get('ssl') === 'true' &&
|
|
82
|
+
searchParams.get('tls') === 'true') {
|
|
83
|
+
searchParams.delete('ssl');
|
|
84
|
+
}
|
|
85
|
+
connectionOptions.connectionString = url.toString();
|
|
86
|
+
}
|
|
87
|
+
function getSslDriverOptionsFile(value) {
|
|
88
|
+
if (!Array.isArray(value)) {
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
return value[0];
|
|
92
|
+
}
|
|
93
|
+
function modelTunnelToConnectionOptions(model) {
|
|
94
|
+
if (model.sshTunnel === 'NONE' ||
|
|
95
|
+
!model.sshTunnelHostname ||
|
|
96
|
+
!model.sshTunnelUsername) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const sshTunnel = {
|
|
100
|
+
host: model.sshTunnelHostname,
|
|
101
|
+
port: model.sshTunnelPort,
|
|
102
|
+
username: model.sshTunnelUsername,
|
|
103
|
+
};
|
|
104
|
+
if (model.sshTunnelPassword !== undefined) {
|
|
105
|
+
sshTunnel.password = model.sshTunnelPassword;
|
|
106
|
+
}
|
|
107
|
+
if (model.sshTunnelIdentityFile !== undefined) {
|
|
108
|
+
sshTunnel.identityKeyFile = Array.isArray(model.sshTunnelIdentityFile)
|
|
109
|
+
? model.sshTunnelIdentityFile[0]
|
|
110
|
+
: model.sshTunnelIdentityFile;
|
|
111
|
+
}
|
|
112
|
+
if (model.sshTunnelPassphrase !== undefined) {
|
|
113
|
+
sshTunnel.identityKeyPassphrase = model.sshTunnelPassphrase;
|
|
114
|
+
}
|
|
115
|
+
return sshTunnel;
|
|
116
|
+
}
|
|
117
|
+
async function convertConnectionInfoToModel(connectionInfo) {
|
|
118
|
+
const connection = await util_1.default.promisify(ConnectionModel.from)(removeAWSParams(connectionInfo.connectionOptions.connectionString));
|
|
119
|
+
const additionalOptions = {
|
|
120
|
+
_id: connectionInfo.id,
|
|
121
|
+
};
|
|
122
|
+
convertSslOptionsToLegacyProperties(connectionInfo.connectionOptions, additionalOptions);
|
|
123
|
+
const connectionOptions = connectionInfo.connectionOptions;
|
|
124
|
+
if (connectionOptions.sshTunnel) {
|
|
125
|
+
additionalOptions.sshTunnel = !connectionOptions.sshTunnel.identityKeyFile
|
|
126
|
+
? 'USER_PASSWORD'
|
|
127
|
+
: 'IDENTITY_FILE';
|
|
128
|
+
additionalOptions.sshTunnelPort = connectionOptions.sshTunnel.port;
|
|
129
|
+
additionalOptions.sshTunnelHostname = connectionOptions.sshTunnel.host;
|
|
130
|
+
additionalOptions.sshTunnelUsername = connectionOptions.sshTunnel.username;
|
|
131
|
+
additionalOptions.sshTunnelPassword = connectionOptions.sshTunnel.password;
|
|
132
|
+
additionalOptions.sshTunnelIdentityFile =
|
|
133
|
+
connectionOptions.sshTunnel.identityKeyFile;
|
|
134
|
+
additionalOptions.sshTunnelPassphrase =
|
|
135
|
+
connectionOptions.sshTunnel.identityKeyPassphrase;
|
|
136
|
+
}
|
|
137
|
+
if (connectionInfo.favorite) {
|
|
138
|
+
additionalOptions.isFavorite = true;
|
|
139
|
+
additionalOptions.name = connectionInfo.favorite.name;
|
|
140
|
+
additionalOptions.color = connectionInfo.favorite.color;
|
|
141
|
+
}
|
|
142
|
+
if (connectionInfo.lastUsed) {
|
|
143
|
+
additionalOptions.lastUsed = connectionInfo.lastUsed;
|
|
144
|
+
}
|
|
145
|
+
return new ConnectionModel({
|
|
146
|
+
...connection.toJSON(),
|
|
147
|
+
...additionalOptions,
|
|
148
|
+
...(0, connection_secrets_1.extractSecrets)(connectionInfo),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
exports.convertConnectionInfoToModel = convertConnectionInfoToModel;
|
|
152
|
+
function convertSslOptionsToLegacyProperties(options, properties) {
|
|
153
|
+
const url = new mongodb_connection_string_url_1.default(options.connectionString);
|
|
154
|
+
const searchParams = url.typedSearchParams();
|
|
155
|
+
const tlsCAFile = searchParams.get('tlsCAFile');
|
|
156
|
+
const tlsCertificateKeyFile = searchParams.get('tlsCertificateKeyFile');
|
|
157
|
+
const tlsCertificateKeyFilePassword = searchParams.get('tlsCertificateKeyFilePassword');
|
|
158
|
+
const tlsCertificateFile = searchParams.get('tlsCertificateFile');
|
|
159
|
+
if (tlsCAFile) {
|
|
160
|
+
properties.sslCA = [tlsCAFile];
|
|
161
|
+
}
|
|
162
|
+
if (tlsCertificateKeyFile) {
|
|
163
|
+
properties.sslKey = tlsCertificateKeyFile;
|
|
164
|
+
}
|
|
165
|
+
if (tlsCertificateKeyFilePassword) {
|
|
166
|
+
properties.sslPass = tlsCertificateKeyFilePassword;
|
|
167
|
+
}
|
|
168
|
+
if (tlsCertificateFile) {
|
|
169
|
+
properties.sslCert = tlsCertificateFile;
|
|
170
|
+
}
|
|
171
|
+
properties.sslMethod = optionsToSslMethod(options);
|
|
172
|
+
}
|
|
173
|
+
function optionsToSslMethod(options) {
|
|
174
|
+
const url = new mongodb_connection_string_url_1.default(options.connectionString);
|
|
175
|
+
const searchParams = url.typedSearchParams();
|
|
176
|
+
const tls = searchParams.get('tls') || searchParams.get('ssl');
|
|
177
|
+
const tlsAllowInvalidCertificates = searchParams.get('tlsAllowInvalidCertificates');
|
|
178
|
+
const tlsAllowInvalidHostnames = searchParams.get('tlsAllowInvalidHostnames');
|
|
179
|
+
const tlsInsecure = searchParams.get('tlsInsecure');
|
|
180
|
+
const tlsCAFile = searchParams.get('tlsCAFile');
|
|
181
|
+
const tlsCertificateKeyFile = searchParams.get('tlsCertificateKeyFile');
|
|
182
|
+
if (tls === 'false') {
|
|
183
|
+
return 'NONE';
|
|
184
|
+
}
|
|
185
|
+
if (tlsCertificateKeyFile) {
|
|
186
|
+
return 'ALL';
|
|
187
|
+
}
|
|
188
|
+
if (tlsCAFile) {
|
|
189
|
+
return 'SERVER';
|
|
190
|
+
}
|
|
191
|
+
if (tlsInsecure === 'true' ||
|
|
192
|
+
(tlsAllowInvalidCertificates === 'true' &&
|
|
193
|
+
tlsAllowInvalidHostnames === 'true')) {
|
|
194
|
+
return 'UNVALIDATED';
|
|
195
|
+
}
|
|
196
|
+
return 'SYSTEMCA';
|
|
197
|
+
}
|
|
198
|
+
function removeAWSParams(connectionString) {
|
|
199
|
+
const url = new mongodb_connection_string_url_1.default(connectionString);
|
|
200
|
+
const searchParams = url.typedSearchParams();
|
|
201
|
+
if (searchParams.get('authMechanism') === 'MONGODB-AWS') {
|
|
202
|
+
searchParams.delete('authMechanism');
|
|
203
|
+
searchParams.delete('authMechanismProperties');
|
|
204
|
+
}
|
|
205
|
+
return url.href;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=legacy-connection-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-connection-model.js","sourceRoot":"","sources":["../../src/legacy/legacy-connection-model.ts"],"names":[],"mappings":"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"}
|
package/lib/redact.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import { SshTunnelConfig } from '@mongodb-js/ssh-tunnel';
|
|
2
|
-
|
|
2
|
+
import { ConnectionOptions } from './connection-options';
|
|
3
|
+
import { redactConnectionString } from 'mongodb-connection-string-url';
|
|
4
|
+
export { redactConnectionString };
|
|
5
|
+
export declare function redactConnectionOptions(options: ConnectionOptions): ConnectionOptions;
|
|
3
6
|
export declare function redactSshTunnelOptions(options: SshTunnelConfig): SshTunnelConfig;
|
package/lib/redact.js
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.redactSshTunnelOptions = exports.redactConnectionString = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
exports.redactSshTunnelOptions = exports.redactConnectionOptions = exports.redactConnectionString = void 0;
|
|
4
|
+
const mongodb_connection_string_url_1 = require("mongodb-connection-string-url");
|
|
5
|
+
Object.defineProperty(exports, "redactConnectionString", { enumerable: true, get: function () { return mongodb_connection_string_url_1.redactConnectionString; } });
|
|
6
|
+
function redactConnectionOptions(options) {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
const redactedTunnelOptions = options.sshTunnel
|
|
9
|
+
? {
|
|
10
|
+
...options.sshTunnel,
|
|
11
|
+
}
|
|
12
|
+
: undefined;
|
|
13
|
+
const redacted = {
|
|
14
|
+
...options,
|
|
15
|
+
sshTunnel: redactedTunnelOptions,
|
|
16
|
+
};
|
|
17
|
+
redacted.connectionString = (0, mongodb_connection_string_url_1.redactConnectionString)(options.connectionString);
|
|
18
|
+
if ((_a = redacted.sshTunnel) === null || _a === void 0 ? void 0 : _a.password) {
|
|
19
|
+
redacted.sshTunnel.password = '<redacted>';
|
|
20
|
+
}
|
|
21
|
+
if ((_b = redacted.sshTunnel) === null || _b === void 0 ? void 0 : _b.identityKeyPassphrase) {
|
|
22
|
+
redacted.sshTunnel.identityKeyPassphrase = '<redacted>';
|
|
23
|
+
}
|
|
24
|
+
return redacted;
|
|
13
25
|
}
|
|
14
|
-
exports.
|
|
26
|
+
exports.redactConnectionOptions = redactConnectionOptions;
|
|
15
27
|
function redactSshTunnelOptions(options) {
|
|
16
28
|
const redacted = { ...options };
|
|
17
29
|
if (redacted.password) {
|
package/lib/redact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":";;;AAEA,iFAAuE;AAC9D,uGADA,sDAAsB,OACA;AAE/B,SAAgB,uBAAuB,CACrC,OAA0B;;IAE1B,MAAM,qBAAqB,GAAG,OAAO,CAAC,SAAS;QAC7C,CAAC,CAAC;YACE,GAAG,OAAO,CAAC,SAAS;SACrB;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,QAAQ,GAAsB;QAClC,GAAG,OAAO;QACV,SAAS,EAAE,qBAAqB;KACjC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,GAAG,IAAA,sDAAsB,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE7E,IAAI,MAAA,QAAQ,CAAC,SAAS,0CAAE,QAAQ,EAAE;QAChC,QAAQ,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC;KAC5C;IAED,IAAI,MAAA,QAAQ,CAAC,SAAS,0CAAE,qBAAqB,EAAE;QAC7C,QAAQ,CAAC,SAAS,CAAC,qBAAqB,GAAG,YAAY,CAAC;KACzD;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAzBD,0DAyBC;AAED,SAAgB,sBAAsB,CACpC,OAAwB;IAExB,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAEhC,IAAI,QAAQ,CAAC,QAAQ,EAAE;QACrB,QAAQ,CAAC,QAAQ,GAAG,YAAY,CAAC;KAClC;IAED,IAAI,QAAQ,CAAC,UAAU,EAAE;QACvB,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;KACpC;IAED,IAAI,QAAQ,CAAC,UAAU,EAAE;QACvB,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;KACpC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAlBD,wDAkBC"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Document, Db, RunCommandOptions } from 'mongodb';
|
|
2
|
+
import type { Binary } from 'bson';
|
|
3
|
+
export declare type ConnectionStatus = {
|
|
4
|
+
authInfo: {
|
|
5
|
+
authenticatedUsers: {
|
|
6
|
+
user: string;
|
|
7
|
+
db: string;
|
|
8
|
+
}[];
|
|
9
|
+
authenticatedUserRoles: {
|
|
10
|
+
role: string;
|
|
11
|
+
db: string;
|
|
12
|
+
}[];
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export declare type ConnectionStatusWithPrivileges = ConnectionStatus & {
|
|
16
|
+
authInfo: {
|
|
17
|
+
authenticatedUserPrivileges: {
|
|
18
|
+
resource: {
|
|
19
|
+
db?: never;
|
|
20
|
+
collection?: never;
|
|
21
|
+
cluster: true;
|
|
22
|
+
anyResource?: never;
|
|
23
|
+
} | {
|
|
24
|
+
db: string;
|
|
25
|
+
collection: string;
|
|
26
|
+
cluster?: never;
|
|
27
|
+
anyResource?: never;
|
|
28
|
+
} | {
|
|
29
|
+
db?: never;
|
|
30
|
+
collection?: never;
|
|
31
|
+
cluster?: never;
|
|
32
|
+
anyResource: true;
|
|
33
|
+
};
|
|
34
|
+
actions: string[];
|
|
35
|
+
}[];
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export declare type CmdLineOpts = {
|
|
39
|
+
argv: string[];
|
|
40
|
+
parsed: unknown;
|
|
41
|
+
};
|
|
42
|
+
export declare type HostInfo = {
|
|
43
|
+
system: {
|
|
44
|
+
currentTime: Date;
|
|
45
|
+
hostname: string;
|
|
46
|
+
cpuAddrSize: number;
|
|
47
|
+
memSizeMB: number;
|
|
48
|
+
memLimitMB?: number;
|
|
49
|
+
numCores: number;
|
|
50
|
+
cpuArch: string;
|
|
51
|
+
numaEnabled: boolean;
|
|
52
|
+
};
|
|
53
|
+
os: {
|
|
54
|
+
type: string;
|
|
55
|
+
name: string;
|
|
56
|
+
version: string;
|
|
57
|
+
};
|
|
58
|
+
extra: {
|
|
59
|
+
versionString: string;
|
|
60
|
+
libcVersion: string;
|
|
61
|
+
kernelVersion: string;
|
|
62
|
+
cpuFrequencyMHz: string;
|
|
63
|
+
cpuFeatures: string;
|
|
64
|
+
pageSize: number;
|
|
65
|
+
numPages: number;
|
|
66
|
+
maxOpenFiles: number;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export declare type BuildInfo = {
|
|
70
|
+
version: string;
|
|
71
|
+
gitVersion: string;
|
|
72
|
+
loaderFlags: string;
|
|
73
|
+
compilerFlags: string;
|
|
74
|
+
versionArray: number[];
|
|
75
|
+
openssl: unknown;
|
|
76
|
+
javascriptEngine: string;
|
|
77
|
+
bits: number;
|
|
78
|
+
debug: boolean;
|
|
79
|
+
maxBsonObjectSize: number;
|
|
80
|
+
storageEngines: string[];
|
|
81
|
+
sysInfo: 'deprecated';
|
|
82
|
+
allocator: string;
|
|
83
|
+
buildEnvironment: unknown;
|
|
84
|
+
};
|
|
85
|
+
export declare type DbStats = {
|
|
86
|
+
db: string;
|
|
87
|
+
collections: number;
|
|
88
|
+
views: number;
|
|
89
|
+
objects: number;
|
|
90
|
+
avgObjSize: number;
|
|
91
|
+
dataSize: number;
|
|
92
|
+
storageSize: number;
|
|
93
|
+
numExtents: number;
|
|
94
|
+
indexes: number;
|
|
95
|
+
indexSize: number;
|
|
96
|
+
scaleFactor: number;
|
|
97
|
+
fsUsedSize: number;
|
|
98
|
+
fsTotalSize: number;
|
|
99
|
+
};
|
|
100
|
+
interface RunDiagnosticsCommand {
|
|
101
|
+
(db: Db, spec: {
|
|
102
|
+
connectionStatus: 1;
|
|
103
|
+
showPrivileges?: never;
|
|
104
|
+
}, options?: RunCommandOptions): Promise<ConnectionStatus>;
|
|
105
|
+
(db: Db, spec: {
|
|
106
|
+
connectionStatus: 1;
|
|
107
|
+
showPrivileges: true;
|
|
108
|
+
}, options?: RunCommandOptions): Promise<ConnectionStatusWithPrivileges>;
|
|
109
|
+
(db: Db, spec: {
|
|
110
|
+
getCmdLineOpts: 1;
|
|
111
|
+
}, options?: RunCommandOptions): Promise<CmdLineOpts>;
|
|
112
|
+
(db: Db, spec: {
|
|
113
|
+
hostInfo: 1;
|
|
114
|
+
}, options?: RunCommandOptions): Promise<HostInfo>;
|
|
115
|
+
(db: Db, spec: {
|
|
116
|
+
buildInfo: 1;
|
|
117
|
+
}, options?: RunCommandOptions): Promise<BuildInfo>;
|
|
118
|
+
(db: Db, spec: {
|
|
119
|
+
dbStats: 1;
|
|
120
|
+
scale?: number;
|
|
121
|
+
}, options?: RunCommandOptions): Promise<DbStats>;
|
|
122
|
+
(db: Db, spec: {
|
|
123
|
+
atlasVersion: 1;
|
|
124
|
+
}, options?: RunCommandOptions): Promise<AtlasVersionInfo>;
|
|
125
|
+
}
|
|
126
|
+
export declare type ListDatabasesOptions = {
|
|
127
|
+
nameOnly?: never;
|
|
128
|
+
filter?: {
|
|
129
|
+
name: unknown;
|
|
130
|
+
sizeOnDisk: unknown;
|
|
131
|
+
empty: unknown;
|
|
132
|
+
shards: unknown;
|
|
133
|
+
};
|
|
134
|
+
authorizedDatabases?: boolean;
|
|
135
|
+
comment?: string;
|
|
136
|
+
};
|
|
137
|
+
export declare type ListDatabasesOptionsNamesOnly = Omit<ListDatabasesOptions, 'nameOnly'> & {
|
|
138
|
+
nameOnly: true;
|
|
139
|
+
};
|
|
140
|
+
export declare type DatabaseInfoNameOnly = {
|
|
141
|
+
name: string;
|
|
142
|
+
};
|
|
143
|
+
export declare type DatabaseInfo = DatabaseInfoNameOnly & {
|
|
144
|
+
sizeOnDisk: number;
|
|
145
|
+
empty: boolean;
|
|
146
|
+
};
|
|
147
|
+
export declare type ListDatabasesResult<DatabaseType> = DatabaseType extends DatabaseInfo ? {
|
|
148
|
+
databases: DatabaseType[];
|
|
149
|
+
totalSize: number;
|
|
150
|
+
totalSizeMb: number;
|
|
151
|
+
} : {
|
|
152
|
+
databases: DatabaseType[];
|
|
153
|
+
};
|
|
154
|
+
export declare type CollectionInfoNameOnly = {
|
|
155
|
+
name: string;
|
|
156
|
+
type?: 'collection' | 'view' | 'timeseries' | string;
|
|
157
|
+
};
|
|
158
|
+
export declare type CollectionInfo = CollectionInfoNameOnly & {
|
|
159
|
+
options: Document;
|
|
160
|
+
info: {
|
|
161
|
+
readOnly?: boolean;
|
|
162
|
+
uuid?: Binary;
|
|
163
|
+
};
|
|
164
|
+
idIndex?: Document;
|
|
165
|
+
};
|
|
166
|
+
export declare type ListCollectionsOptions = {
|
|
167
|
+
nameOnly?: never;
|
|
168
|
+
filter?: Document;
|
|
169
|
+
authorizedCollections?: boolean;
|
|
170
|
+
comment?: string;
|
|
171
|
+
};
|
|
172
|
+
export declare type ListCollectionsOptionsNamesOnly = Omit<ListCollectionsOptions, 'nameOnly'> & {
|
|
173
|
+
nameOnly: true;
|
|
174
|
+
};
|
|
175
|
+
export declare type AtlasVersionInfo = {
|
|
176
|
+
version: string;
|
|
177
|
+
gitVersion: string;
|
|
178
|
+
};
|
|
179
|
+
export declare type ListCollectionsResult<CollectionType> = {
|
|
180
|
+
cursor: {
|
|
181
|
+
firstBatch: CollectionType;
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
interface RunAdministrationCommand {
|
|
185
|
+
<Parameters extends Record<string, unknown>>(db: Db, spec: {
|
|
186
|
+
getParameter: 1;
|
|
187
|
+
comment?: string;
|
|
188
|
+
} & Record<keyof Parameters, unknown>, options?: RunCommandOptions): Promise<Omit<Parameters, 'getParameter' | 'comment'>>;
|
|
189
|
+
<Parameters extends Record<string, unknown>, Options = Record<string, unknown>>(db: Db, spec: {
|
|
190
|
+
getParameter: '*';
|
|
191
|
+
comment?: string;
|
|
192
|
+
} & Options, options?: RunCommandOptions): Promise<Omit<Parameters, keyof Options>>;
|
|
193
|
+
(db: Db, spec: {
|
|
194
|
+
listDatabases: 1;
|
|
195
|
+
} & ListDatabasesOptions, options?: RunCommandOptions): Promise<ListDatabasesResult<DatabaseInfo>>;
|
|
196
|
+
(db: Db, spec: {
|
|
197
|
+
listDatabases: 1;
|
|
198
|
+
} & ListDatabasesOptionsNamesOnly, options?: RunCommandOptions): Promise<ListDatabasesResult<DatabaseInfoNameOnly>>;
|
|
199
|
+
(db: Db, spec: {
|
|
200
|
+
listCollections: 1;
|
|
201
|
+
} & ListCollectionsOptions, options?: RunCommandOptions): Promise<ListCollectionsResult<CollectionInfo>>;
|
|
202
|
+
(db: Db, spec: {
|
|
203
|
+
listCollections: 1;
|
|
204
|
+
} & ListCollectionsOptionsNamesOnly, options?: RunCommandOptions): Promise<ListCollectionsResult<CollectionInfoNameOnly>>;
|
|
205
|
+
}
|
|
206
|
+
interface RunCommand extends RunDiagnosticsCommand, RunAdministrationCommand {
|
|
207
|
+
}
|
|
208
|
+
export declare const runCommand: RunCommand;
|
|
209
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runCommand = void 0;
|
|
4
|
+
const mongodb_1 = require("mongodb");
|
|
5
|
+
const runCommand = (db, spec, options) => {
|
|
6
|
+
var _a;
|
|
7
|
+
const readPreference = (_a = db.readPreference) !== null && _a !== void 0 ? _a : mongodb_1.ReadPreference.PRIMARY_PREFERRED;
|
|
8
|
+
return db.command({ ...spec }, { readPreference, ...options });
|
|
9
|
+
};
|
|
10
|
+
exports.runCommand = runCommand;
|
|
11
|
+
//# sourceMappingURL=run-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-command.js","sourceRoot":"","sources":["../src/run-command.ts"],"names":[],"mappings":";;;AAAA,qCAA0E;AAsQnE,MAAM,UAAU,GAAe,CACpC,EAAM,EACN,IAAc,EACd,OAA2B,EAC3B,EAAE;;IAUF,MAAM,cAAc,GAAG,MAAA,EAAE,CAAC,cAAc,mCAAI,wBAAc,CAAC,iBAAiB,CAAC;IAE7E,OAAO,EAAE,CAAC,OAAO,CACf,EAAE,GAAG,IAAI,EAAE,EACX,EAAE,cAAc,EAAE,GAAG,OAAO,EAAuB,CAI7C,CAAC;AACX,CAAC,CAAC;AAvBW,QAAA,UAAU,cAuBrB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import SSHTunnel from '@mongodb-js/ssh-tunnel';
|
|
2
|
+
import { ConnectionSshOptions } from './connection-options';
|
|
3
|
+
export declare function openSshTunnel(srvResolvedConnectionString: string, sshTunnelOptions: ConnectionSshOptions | undefined, localPort: number): Promise<[SSHTunnel | undefined, string]>;
|
|
4
|
+
export declare function forceCloseTunnel(tunnelToClose?: SSHTunnel | void): Promise<void>;
|
|
5
|
+
export declare function waitForTunnelError(tunnel: SSHTunnel | void): Promise<never>;
|
|
@@ -0,0 +1,73 @@
|
|
|
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.waitForTunnelError = exports.forceCloseTunnel = exports.openSshTunnel = void 0;
|
|
7
|
+
const events_1 = require("events");
|
|
8
|
+
const debug_1 = __importDefault(require("debug"));
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const mongodb_connection_string_url_1 = __importDefault(require("mongodb-connection-string-url"));
|
|
11
|
+
const ssh_tunnel_1 = __importDefault(require("@mongodb-js/ssh-tunnel"));
|
|
12
|
+
const compass_logging_1 = __importDefault(require("@mongodb-js/compass-logging"));
|
|
13
|
+
const redact_1 = require("./redact");
|
|
14
|
+
const debug = (0, debug_1.default)('mongodb-data-service:connect');
|
|
15
|
+
const { log, mongoLogId } = (0, compass_logging_1.default)('COMPASS-CONNECT');
|
|
16
|
+
async function openSshTunnel(srvResolvedConnectionString, sshTunnelOptions, localPort) {
|
|
17
|
+
if (!sshTunnelOptions) {
|
|
18
|
+
return [undefined, srvResolvedConnectionString];
|
|
19
|
+
}
|
|
20
|
+
const connectionStringUrl = new mongodb_connection_string_url_1.default(srvResolvedConnectionString);
|
|
21
|
+
if (connectionStringUrl.hosts.length !== 1) {
|
|
22
|
+
throw new Error('It is currently not possible to open an SSH tunnel to a replica set');
|
|
23
|
+
}
|
|
24
|
+
const [dstHost, dstPort = 27017] = connectionStringUrl.hosts[0].split(':');
|
|
25
|
+
const tunnelConstructorOptions = {
|
|
26
|
+
readyTimeout: 20000,
|
|
27
|
+
forwardTimeout: 20000,
|
|
28
|
+
keepaliveInterval: 20000,
|
|
29
|
+
srcAddr: '127.0.0.1',
|
|
30
|
+
dstPort: dstPort,
|
|
31
|
+
dstAddr: dstHost,
|
|
32
|
+
localPort: localPort,
|
|
33
|
+
localAddr: '127.0.0.1',
|
|
34
|
+
host: sshTunnelOptions.host,
|
|
35
|
+
port: sshTunnelOptions.port,
|
|
36
|
+
username: sshTunnelOptions.username,
|
|
37
|
+
password: sshTunnelOptions.password,
|
|
38
|
+
privateKey: sshTunnelOptions.identityKeyFile
|
|
39
|
+
? await fs_1.default.promises.readFile(sshTunnelOptions.identityKeyFile)
|
|
40
|
+
: undefined,
|
|
41
|
+
passphrase: sshTunnelOptions.identityKeyPassphrase,
|
|
42
|
+
};
|
|
43
|
+
const redactedTunnelOptions = (0, redact_1.redactSshTunnelOptions)(tunnelConstructorOptions);
|
|
44
|
+
log.info(mongoLogId(1001000006), 'SSHTunnel', 'Creating SSH tunnel', redactedTunnelOptions);
|
|
45
|
+
debug('creating ssh tunnel with options', redactedTunnelOptions);
|
|
46
|
+
const tunnel = new ssh_tunnel_1.default(tunnelConstructorOptions);
|
|
47
|
+
debug('ssh tunnel listen ...');
|
|
48
|
+
await tunnel.listen();
|
|
49
|
+
debug('ssh tunnel opened');
|
|
50
|
+
log.info(mongoLogId(1001000007), 'SSHTunnel', 'SSH tunnel opened');
|
|
51
|
+
connectionStringUrl.hosts = [`127.0.0.1:${localPort}`];
|
|
52
|
+
return [tunnel, connectionStringUrl.href];
|
|
53
|
+
}
|
|
54
|
+
exports.openSshTunnel = openSshTunnel;
|
|
55
|
+
async function forceCloseTunnel(tunnelToClose) {
|
|
56
|
+
if (tunnelToClose) {
|
|
57
|
+
log.info(mongoLogId(1001000008), 'SSHTunnel', 'Closing SSH tunnel');
|
|
58
|
+
try {
|
|
59
|
+
await tunnelToClose.close();
|
|
60
|
+
debug('ssh tunnel stopped');
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
debug('ssh tunnel stopped with error', err);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.forceCloseTunnel = forceCloseTunnel;
|
|
68
|
+
async function waitForTunnelError(tunnel) {
|
|
69
|
+
const [error] = await (0, events_1.once)(tunnel || new events_1.EventEmitter(), 'error');
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
exports.waitForTunnelError = waitForTunnelError;
|
|
73
|
+
//# sourceMappingURL=ssh-tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh-tunnel.js","sourceRoot":"","sources":["../src/ssh-tunnel.ts"],"names":[],"mappings":"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"}
|