vpn-split 21.0.20 → 21.0.22
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/bin/vpn-split +10 -10
- package/bin/vpn-split-debug +10 -10
- package/browser/README.md +24 -24
- package/browser/fesm2022/vpn-split-browser.mjs.map +1 -1
- package/browser/package.json +1 -1
- package/browser-prod/README.md +24 -24
- package/browser-prod/fesm2022/vpn-split-browser.mjs.map +1 -1
- package/browser-prod/package.json +1 -1
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/package.json +1 -1
- package/lib-prod/build-info._auto-generated_.d.ts +24 -0
- package/lib-prod/build-info._auto-generated_.js +10 -6
- package/lib-prod/build-info._auto-generated_.js.map +1 -0
- package/lib-prod/env/env.angular-node-app.d.ts +64 -0
- package/lib-prod/env/env.angular-node-app.js +69 -64
- package/lib-prod/env/env.angular-node-app.js.map +1 -0
- package/lib-prod/env/env.docs-webapp.d.ts +64 -0
- package/lib-prod/env/env.docs-webapp.js +69 -64
- package/lib-prod/env/env.docs-webapp.js.map +1 -0
- package/lib-prod/env/env.electron-app.d.ts +64 -0
- package/lib-prod/env/env.electron-app.js +69 -64
- package/lib-prod/env/env.electron-app.js.map +1 -0
- package/lib-prod/env/env.mobile-app.d.ts +64 -0
- package/lib-prod/env/env.mobile-app.js +69 -64
- package/lib-prod/env/env.mobile-app.js.map +1 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +64 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js +69 -64
- package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib-prod/env/env.vscode-plugin.d.ts +64 -0
- package/lib-prod/env/env.vscode-plugin.js +69 -64
- package/lib-prod/env/env.vscode-plugin.js.map +1 -0
- package/lib-prod/env/index.d.ts +6 -0
- package/lib-prod/env/index.js +23 -6
- package/lib-prod/env/index.js.map +1 -0
- package/lib-prod/hostile.backend.d.ts +37 -0
- package/lib-prod/hostile.backend.js +15 -10
- package/lib-prod/hostile.backend.js.map +1 -0
- package/lib-prod/index._auto-generated_.d.ts +0 -0
- package/lib-prod/index._auto-generated_.js +2 -1
- package/lib-prod/index._auto-generated_.js.map +1 -0
- package/lib-prod/index.d.ts +2 -0
- package/lib-prod/index.js +19 -2
- package/lib-prod/index.js.map +1 -0
- package/lib-prod/migrations/index.d.ts +1 -0
- package/lib-prod/migrations/index.js +18 -1
- package/lib-prod/migrations/index.js.map +1 -0
- package/lib-prod/migrations/migrations_index._auto-generated_.d.ts +0 -0
- package/lib-prod/migrations/migrations_index._auto-generated_.js +1 -0
- package/lib-prod/migrations/migrations_index._auto-generated_.js.map +1 -0
- package/lib-prod/models.d.ts +61 -0
- package/lib-prod/models.js +32 -26
- package/lib-prod/models.js.map +1 -0
- package/lib-prod/package.json +1 -1
- package/lib-prod/start.backend.d.ts +0 -0
- package/lib-prod/start.backend.js +1 -0
- package/lib-prod/start.backend.js.map +1 -0
- package/lib-prod/vpn-split.backend.d.ts +56 -0
- package/lib-prod/vpn-split.backend.js +107 -96
- package/lib-prod/vpn-split.backend.js.map +1 -0
- package/package.json +1 -1
- package/websql/README.md +24 -24
- package/websql/fesm2022/vpn-split-websql.mjs.map +1 -1
- package/websql/package.json +1 -1
- package/websql-prod/README.md +24 -24
- package/websql-prod/fesm2022/vpn-split-websql.mjs.map +1 -1
- package/websql-prod/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,kBAAkB;AAClB,yCAAyC;AACzC,kDAAkD;AAClD,8DAA8D;AAE9D,oCAAoC;AAEpC,8CAA8C;AAC9C,4BAA4B;AAC5B,qEAAqE;AACrE,0CAA0C;AAC1C,6DAA6D;AAE7D,0CAA0C;AAC1C,yCAAyC;AACzC,2CAA2C;AAC3C,QAAQ;AAER,qCAAqC;AACrC,mDAAmD;AACnD,aAAa;AACb,2EAA2E;AAC3E,qEAAqE;AACrE,MAAM;AAEN,4BAA4B;AAC5B,IAAI;AACJ,YAAY"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { URL } from 'url';
|
|
2
|
+
import { EtcHosts, HostForServer } from './models';
|
|
3
|
+
export declare class VpnSplit {
|
|
4
|
+
private portsToPass;
|
|
5
|
+
private hosts;
|
|
6
|
+
private cwd;
|
|
7
|
+
get hostsArr(): HostForServer[];
|
|
8
|
+
get hostsArrWithoutDefault(): HostForServer[];
|
|
9
|
+
private get serveKeyName();
|
|
10
|
+
private get serveKeyPath();
|
|
11
|
+
private get serveCertName();
|
|
12
|
+
private get serveCertPath();
|
|
13
|
+
private get serveCertChainName();
|
|
14
|
+
private get serveCertChainPath();
|
|
15
|
+
private readonly __hostile;
|
|
16
|
+
private static _instances;
|
|
17
|
+
private constructor();
|
|
18
|
+
static Instance({ ports, additionalDefaultHosts, cwd, allowNotSudo, }?: {
|
|
19
|
+
ports?: number[];
|
|
20
|
+
additionalDefaultHosts?: EtcHosts;
|
|
21
|
+
cwd?: string;
|
|
22
|
+
allowNotSudo?: boolean;
|
|
23
|
+
}): Promise<VpnSplit>;
|
|
24
|
+
startServer(saveHostInUserFolder?: boolean): Promise<void>;
|
|
25
|
+
applyHosts(hosts: EtcHosts): void;
|
|
26
|
+
applyHostsLocal(hosts: EtcHosts): void;
|
|
27
|
+
startClient(vpnServerTargets: URL[] | URL, options: {
|
|
28
|
+
saveHostInUserFolder?: boolean;
|
|
29
|
+
useHost?: EtcHosts;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
private getRemoteHosts;
|
|
32
|
+
private createCertificateIfNotExists;
|
|
33
|
+
private getTarget;
|
|
34
|
+
private getProxyConfig;
|
|
35
|
+
private getNotFoundMsg;
|
|
36
|
+
private getMaybeChangeOriginTrueMsg;
|
|
37
|
+
private filterHeaders;
|
|
38
|
+
private isHttpsPort;
|
|
39
|
+
private serverPassthrough;
|
|
40
|
+
private clientPassthrough;
|
|
41
|
+
/**
|
|
42
|
+
* Start a UDP socket for “server” mode on a given port.
|
|
43
|
+
* This example forwards inbound messages right back to the sender,
|
|
44
|
+
* or you can forward them to an external IP:port if desired.
|
|
45
|
+
*/
|
|
46
|
+
private serverUdpPassthrough;
|
|
47
|
+
/**
|
|
48
|
+
* Start a UDP socket for “client” mode on a given port.
|
|
49
|
+
* This example also just does a trivial pass-through or echo,
|
|
50
|
+
* but you can adapt to forward to a remote server.
|
|
51
|
+
*/
|
|
52
|
+
private clientUdpPassthrough;
|
|
53
|
+
private getPortFromRequest;
|
|
54
|
+
private ensureMkcertCertificate;
|
|
55
|
+
private preventBadTargetForClient;
|
|
56
|
+
}
|
|
@@ -1,30 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VpnSplit = void 0;
|
|
1
4
|
//#region imports
|
|
2
|
-
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
3
6
|
// TODO I am using TCP ugrade not UDP!
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const HOST_FILE_PATH = UtilsNetwork__NS__getEtcHostsPath();
|
|
17
|
-
const log = Log.create('vpn-split', Level.INFO);
|
|
7
|
+
const dgram = require("dgram"); // <-- For UDP sockets
|
|
8
|
+
const http = require("http");
|
|
9
|
+
const axios_1 = require("axios");
|
|
10
|
+
const express = require("express");
|
|
11
|
+
const httpProxy = require("http-proxy");
|
|
12
|
+
const lib_prod_1 = require("ng2-logger/lib-prod");
|
|
13
|
+
const lib_prod_2 = require("tnp-core/lib-prod");
|
|
14
|
+
const lib_prod_3 = require("tnp-core/lib-prod");
|
|
15
|
+
const lib_prod_4 = require("tnp-core/lib-prod");
|
|
16
|
+
const lib_prod_5 = require("tnp-helpers/lib-prod");
|
|
17
|
+
const hostile_backend_1 = require("./hostile.backend");
|
|
18
|
+
const models_1 = require("./models");
|
|
19
|
+
const HOST_FILE_PATH = (0, lib_prod_3.UtilsNetwork__NS__getEtcHostsPath)();
|
|
20
|
+
const log = lib_prod_1.Log.create('vpn-split', lib_prod_1.Level.INFO);
|
|
18
21
|
//#endregion
|
|
19
22
|
//#region consts
|
|
20
23
|
const GENERATED = '#GENERATED_BY_CLI#';
|
|
21
24
|
const EOL = process.platform === 'win32' ? '\r\n' : '\n';
|
|
22
25
|
const SERVERS_PATH = '/$$$$servers$$$$';
|
|
23
|
-
const HOST_FILE_PATHUSER = crossPlatformPath([
|
|
24
|
-
UtilsOs__NS__getRealHomeDir(),
|
|
26
|
+
const HOST_FILE_PATHUSER = (0, lib_prod_3.crossPlatformPath)([
|
|
27
|
+
(0, lib_prod_3.UtilsOs__NS__getRealHomeDir)(),
|
|
25
28
|
'hosts-file__vpn-split',
|
|
26
29
|
]);
|
|
27
|
-
const from = HostForServer.From;
|
|
30
|
+
const from = models_1.HostForServer.From;
|
|
28
31
|
const DefaultEtcHosts = {
|
|
29
32
|
'localhost alias': from({
|
|
30
33
|
ipOrDomain: '127.0.0.1',
|
|
@@ -43,11 +46,14 @@ const DefaultEtcHosts = {
|
|
|
43
46
|
}),
|
|
44
47
|
};
|
|
45
48
|
//#endregion
|
|
46
|
-
|
|
49
|
+
class VpnSplit {
|
|
50
|
+
portsToPass;
|
|
51
|
+
hosts;
|
|
52
|
+
cwd;
|
|
47
53
|
//#region getters
|
|
48
54
|
get hostsArr() {
|
|
49
55
|
const hosts = this.hosts;
|
|
50
|
-
return ___NS__keys(hosts).map(hostName => {
|
|
56
|
+
return (0, lib_prod_3.___NS__keys)(hosts).map(hostName => {
|
|
51
57
|
const v = hosts[hostName];
|
|
52
58
|
v.name = hostName;
|
|
53
59
|
return v;
|
|
@@ -57,38 +63,41 @@ export class VpnSplit {
|
|
|
57
63
|
return this.hostsArr.filter(f => !f.isDefault);
|
|
58
64
|
}
|
|
59
65
|
get serveKeyName() {
|
|
60
|
-
return 'tmp-' + config.file.server_key;
|
|
66
|
+
return 'tmp-' + lib_prod_2.config.file.server_key;
|
|
61
67
|
}
|
|
62
68
|
get serveKeyPath() {
|
|
63
|
-
return path.join(this.cwd, this.serveKeyName);
|
|
69
|
+
return lib_prod_3.path.join(this.cwd, this.serveKeyName);
|
|
64
70
|
}
|
|
65
71
|
get serveCertName() {
|
|
66
|
-
return 'tmp-' + config.file.server_cert;
|
|
72
|
+
return 'tmp-' + lib_prod_2.config.file.server_cert;
|
|
67
73
|
}
|
|
68
74
|
get serveCertPath() {
|
|
69
|
-
return path.join(this.cwd, this.serveCertName);
|
|
75
|
+
return lib_prod_3.path.join(this.cwd, this.serveCertName);
|
|
70
76
|
}
|
|
71
77
|
get serveCertChainName() {
|
|
72
|
-
return 'tmp-' + config.file.server_chain_cert;
|
|
78
|
+
return 'tmp-' + lib_prod_2.config.file.server_chain_cert;
|
|
73
79
|
}
|
|
74
80
|
get serveCertChainPath() {
|
|
75
|
-
return path.join(this.cwd, this.serveCertChainName);
|
|
81
|
+
return lib_prod_3.path.join(this.cwd, this.serveCertChainName);
|
|
76
82
|
}
|
|
77
83
|
//#endregion
|
|
84
|
+
//#region fields
|
|
85
|
+
__hostile;
|
|
86
|
+
//#endregion
|
|
78
87
|
//#region singleton
|
|
79
|
-
static
|
|
88
|
+
static _instances = {};
|
|
80
89
|
constructor(portsToPass, hosts, cwd) {
|
|
81
90
|
this.portsToPass = portsToPass;
|
|
82
91
|
this.hosts = hosts;
|
|
83
92
|
this.cwd = cwd;
|
|
84
|
-
this.__hostile = new Hostile();
|
|
93
|
+
this.__hostile = new hostile_backend_1.Hostile();
|
|
85
94
|
}
|
|
86
95
|
static async Instance({ ports = [80, 443, 4443, 22, 2222, 8180, 8080, 4407, 7999, 9443], additionalDefaultHosts = {}, cwd = process.cwd(), allowNotSudo = false, } = {}) {
|
|
87
|
-
if (!(await isElevated()) && !allowNotSudo) {
|
|
88
|
-
Helpers__NS__error(`[vpn-split] Please run this program as sudo (or admin on windows)`, false, true);
|
|
96
|
+
if (!(await (0, lib_prod_3.isElevated)()) && !allowNotSudo) {
|
|
97
|
+
(0, lib_prod_5.Helpers__NS__error)(`[vpn-split] Please run this program as sudo (or admin on windows)`, false, true);
|
|
89
98
|
}
|
|
90
99
|
if (!VpnSplit._instances[cwd]) {
|
|
91
|
-
VpnSplit._instances[cwd] = new VpnSplit(ports, ___NS__merge(DefaultEtcHosts, additionalDefaultHosts), cwd);
|
|
100
|
+
VpnSplit._instances[cwd] = new VpnSplit(ports, (0, lib_prod_3.___NS__merge)(DefaultEtcHosts, additionalDefaultHosts), cwd);
|
|
92
101
|
}
|
|
93
102
|
return VpnSplit._instances[cwd];
|
|
94
103
|
}
|
|
@@ -120,7 +129,7 @@ export class VpnSplit {
|
|
|
120
129
|
for (const portToPassthrough of this.portsToPass) {
|
|
121
130
|
await this.serverUdpPassthrough(portToPassthrough);
|
|
122
131
|
}
|
|
123
|
-
Helpers__NS__info(`Activated (server).`);
|
|
132
|
+
(0, lib_prod_5.Helpers__NS__info)(`Activated (server).`);
|
|
124
133
|
}
|
|
125
134
|
//#endregion
|
|
126
135
|
//#region apply hosts
|
|
@@ -156,9 +165,9 @@ export class VpnSplit {
|
|
|
156
165
|
}
|
|
157
166
|
// Merge with original, redirecting all non-default entries to 127.0.0.1
|
|
158
167
|
const originalHosts = this.hostsArr;
|
|
159
|
-
const combinedHostsObj = ___NS__values([
|
|
168
|
+
const combinedHostsObj = (0, lib_prod_3.___NS__values)([
|
|
160
169
|
...originalHosts,
|
|
161
|
-
...hosts.map(h => HostForServer.From({
|
|
170
|
+
...hosts.map(h => models_1.HostForServer.From({
|
|
162
171
|
aliases: h.alias,
|
|
163
172
|
ipOrDomain: h.ip,
|
|
164
173
|
originHostname: h.originHostname,
|
|
@@ -172,7 +181,7 @@ export class VpnSplit {
|
|
|
172
181
|
return copy;
|
|
173
182
|
})
|
|
174
183
|
.reduce((prev, curr) => {
|
|
175
|
-
return ___NS__merge(prev, {
|
|
184
|
+
return (0, lib_prod_3.___NS__merge)(prev, {
|
|
176
185
|
[curr.aliases.join(' ')]: curr,
|
|
177
186
|
});
|
|
178
187
|
}, {}));
|
|
@@ -200,31 +209,31 @@ export class VpnSplit {
|
|
|
200
209
|
for (const portToPassthrough of this.portsToPass) {
|
|
201
210
|
await this.clientUdpPassthrough(portToPassthrough, vpnServerTargets, combinedHostsObj);
|
|
202
211
|
}
|
|
203
|
-
Helpers__NS__info(`Client activated`);
|
|
212
|
+
(0, lib_prod_5.Helpers__NS__info)(`Client activated`);
|
|
204
213
|
}
|
|
205
214
|
//#endregion
|
|
206
215
|
//#region private methods / get remote hosts
|
|
207
216
|
async getRemoteHosts(vpnServerTarget) {
|
|
208
217
|
try {
|
|
209
218
|
const url = `http://${vpnServerTarget.hostname}${SERVERS_PATH}`;
|
|
210
|
-
const response = await
|
|
219
|
+
const response = await (0, axios_1.default)({ url, method: 'GET' });
|
|
211
220
|
return response.data;
|
|
212
221
|
}
|
|
213
222
|
catch (err) {
|
|
214
|
-
Helpers__NS__error(`Remote server: ${vpnServerTarget.hostname} may be inactive...`, true, true);
|
|
223
|
+
(0, lib_prod_5.Helpers__NS__error)(`Remote server: ${vpnServerTarget.hostname} may be inactive...`, true, true);
|
|
215
224
|
return [];
|
|
216
225
|
}
|
|
217
226
|
}
|
|
218
227
|
//#endregion
|
|
219
228
|
//#region private methods / create certificate
|
|
220
229
|
createCertificateIfNotExists() {
|
|
221
|
-
if (!Helpers__NS__exists(this.serveKeyPath) ||
|
|
222
|
-
!Helpers__NS__exists(this.serveCertPath)) {
|
|
223
|
-
Helpers__NS__info(`[vpn-split] Generating new self-signed certificate for localhost...`);
|
|
224
|
-
const commandGen = UtilsOs__NS__isRunningInWindowsPowerShell()
|
|
230
|
+
if (!(0, lib_prod_5.Helpers__NS__exists)(this.serveKeyPath) ||
|
|
231
|
+
!(0, lib_prod_5.Helpers__NS__exists)(this.serveCertPath)) {
|
|
232
|
+
(0, lib_prod_5.Helpers__NS__info)(`[vpn-split] Generating new self-signed certificate for localhost...`);
|
|
233
|
+
const commandGen = (0, lib_prod_3.UtilsOs__NS__isRunningInWindowsPowerShell)()
|
|
225
234
|
? `powershell -Command "& 'C:\\Program Files\\Git\\usr\\bin\\openssl.exe' req -nodes -new -x509 -keyout ${this.serveKeyName} -out ${this.serveCertName}"`
|
|
226
235
|
: `openssl req -nodes -new -x509 -keyout ${this.serveKeyName} -out ${this.serveCertName}`;
|
|
227
|
-
Helpers__NS__run(commandGen, { cwd: this.cwd, output: true }).sync();
|
|
236
|
+
(0, lib_prod_5.Helpers__NS__run)(commandGen, { cwd: this.cwd, output: true }).sync();
|
|
228
237
|
}
|
|
229
238
|
}
|
|
230
239
|
//#endregion
|
|
@@ -251,8 +260,8 @@ export class VpnSplit {
|
|
|
251
260
|
? {
|
|
252
261
|
target,
|
|
253
262
|
ssl: {
|
|
254
|
-
key: fse.readFileSync(this.serveKeyPath),
|
|
255
|
-
cert: fse.readFileSync(this.serveCertPath),
|
|
263
|
+
key: lib_prod_3.fse.readFileSync(this.serveKeyPath),
|
|
264
|
+
cert: lib_prod_3.fse.readFileSync(this.serveCertPath),
|
|
256
265
|
},
|
|
257
266
|
// agent: new https.Agent({
|
|
258
267
|
// secureOptions: crypto.constants.SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION,
|
|
@@ -301,10 +310,10 @@ Port: ${port}`;
|
|
|
301
310
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
302
311
|
const app = express();
|
|
303
312
|
const proxy = httpProxy.createProxyServer({});
|
|
304
|
-
const localIp = await UtilsNetwork__NS__getLocalIpAddresses();
|
|
313
|
+
const localIp = await (0, lib_prod_3.UtilsNetwork__NS__getLocalIpAddresses)();
|
|
305
314
|
const currentLocalIps = [
|
|
306
|
-
CoreModels__NS__localhostDomain,
|
|
307
|
-
CoreModels__NS__localhostIp127,
|
|
315
|
+
lib_prod_4.CoreModels__NS__localhostDomain,
|
|
316
|
+
lib_prod_4.CoreModels__NS__localhostIp127,
|
|
308
317
|
...localIp.map(a => a.address),
|
|
309
318
|
];
|
|
310
319
|
app.use((req, res, next) => {
|
|
@@ -313,7 +322,7 @@ Port: ${port}`;
|
|
|
313
322
|
if (req.method === 'GET' && req.originalUrl === SERVERS_PATH) {
|
|
314
323
|
res.send(JSON.stringify(this.hostsArrWithoutDefault.map(h => ({
|
|
315
324
|
ip: h.ip,
|
|
316
|
-
alias: HelpersTaon__NS__arrays__NS__from(h.aliases).join(' '),
|
|
325
|
+
alias: (0, lib_prod_5.HelpersTaon__NS__arrays__NS__from)(h.aliases).join(' '),
|
|
317
326
|
}))));
|
|
318
327
|
}
|
|
319
328
|
else {
|
|
@@ -328,12 +337,12 @@ Port: ${port}`;
|
|
|
328
337
|
}
|
|
329
338
|
});
|
|
330
339
|
const server = isHttps
|
|
331
|
-
? https.createServer({
|
|
332
|
-
key: fse.readFileSync(this.serveKeyPath),
|
|
333
|
-
cert: fse.readFileSync(this.serveCertPath),
|
|
340
|
+
? lib_prod_3.https.createServer({
|
|
341
|
+
key: lib_prod_3.fse.readFileSync(this.serveKeyPath),
|
|
342
|
+
cert: lib_prod_3.fse.readFileSync(this.serveCertPath),
|
|
334
343
|
}, app)
|
|
335
344
|
: http.createServer(app);
|
|
336
|
-
await Helpers__NS__killProcessByPort(portToPassthrough, { silent: true });
|
|
345
|
+
await (0, lib_prod_5.Helpers__NS__killProcessByPort)(portToPassthrough, { silent: true });
|
|
337
346
|
await new Promise((resolve, reject) => {
|
|
338
347
|
server.listen(portToPassthrough, () => {
|
|
339
348
|
console.log(`TCP/HTTPS server listening on port ${portToPassthrough} (secure=${isHttps})`);
|
|
@@ -392,12 +401,12 @@ Port: ${port}`;
|
|
|
392
401
|
}), next);
|
|
393
402
|
});
|
|
394
403
|
const server = isHttps
|
|
395
|
-
? https.createServer({
|
|
396
|
-
key: fse.readFileSync(this.serveKeyPath),
|
|
397
|
-
cert: fse.readFileSync(this.serveCertPath),
|
|
404
|
+
? lib_prod_3.https.createServer({
|
|
405
|
+
key: lib_prod_3.fse.readFileSync(this.serveKeyPath),
|
|
406
|
+
cert: lib_prod_3.fse.readFileSync(this.serveCertPath),
|
|
398
407
|
}, app)
|
|
399
408
|
: http.createServer(app);
|
|
400
|
-
await Helpers__NS__killProcessByPort(portToPassthrough, { silent: true });
|
|
409
|
+
await (0, lib_prod_5.Helpers__NS__killProcessByPort)(portToPassthrough, { silent: true });
|
|
401
410
|
await new Promise((resolve, reject) => {
|
|
402
411
|
server.listen(portToPassthrough, () => {
|
|
403
412
|
log.i(`TCP/HTTPS client listening on port ${portToPassthrough} (secure=${isHttps})`);
|
|
@@ -473,7 +482,7 @@ Port: ${port}`;
|
|
|
473
482
|
// If the message is from the server, forward back to the correct client.
|
|
474
483
|
//
|
|
475
484
|
// Check if it’s from local or remote by address. This is simplistic:
|
|
476
|
-
const isFromLocal = !___NS__includes(hostsArr.map(h => h.ipOrDomain), rinfo.address);
|
|
485
|
+
const isFromLocal = !(0, lib_prod_3.___NS__includes)(hostsArr.map(h => h.ipOrDomain), rinfo.address);
|
|
477
486
|
if (isFromLocal) {
|
|
478
487
|
// Received from local => forward to “server” (the VPN server)
|
|
479
488
|
// Keep track of who we got this from (the local client)
|
|
@@ -533,8 +542,8 @@ Port: ${port}`;
|
|
|
533
542
|
//#region @backendFunc
|
|
534
543
|
// console.log('Domains for cert:', domains);
|
|
535
544
|
// Helpers__NS__error(``,false,true);
|
|
536
|
-
if (!UtilsOs__NS__commandExistsSync('mkcert')) {
|
|
537
|
-
Helpers__NS__error('[vpn-split] mkcert is not installed.', false, true);
|
|
545
|
+
if (!(0, lib_prod_3.UtilsOs__NS__commandExistsSync)('mkcert')) {
|
|
546
|
+
(0, lib_prod_5.Helpers__NS__error)('[vpn-split] mkcert is not installed.', false, true);
|
|
538
547
|
}
|
|
539
548
|
const certPath = this.serveCertPath; // e.g. .../tmp-server_cert
|
|
540
549
|
const keyPath = this.serveKeyPath; // e.g. .../tmp-server_key
|
|
@@ -551,12 +560,12 @@ Port: ${port}`;
|
|
|
551
560
|
// Helper: run mkcert and capture output
|
|
552
561
|
const runMkcert = (args) => {
|
|
553
562
|
try {
|
|
554
|
-
return execSync(`mkcert ${args}`, { stdio: 'pipe' }).toString().trim();
|
|
563
|
+
return (0, child_process_1.execSync)(`mkcert ${args}`, { stdio: 'pipe' }).toString().trim();
|
|
555
564
|
}
|
|
556
565
|
catch (err) {
|
|
557
566
|
const stderr = err.stderr?.toString() || '';
|
|
558
567
|
if (stderr.includes('command not found')) {
|
|
559
|
-
Helpers__NS__error('[vpn-split] mkcert is not installed. Install it first: https://github.com/FiloSottile/mkcert', false, true);
|
|
568
|
+
(0, lib_prod_5.Helpers__NS__error)('[vpn-split] mkcert is not installed. Install it first: https://github.com/FiloSottile/mkcert', false, true);
|
|
560
569
|
}
|
|
561
570
|
throw err;
|
|
562
571
|
}
|
|
@@ -566,28 +575,28 @@ Port: ${port}`;
|
|
|
566
575
|
try {
|
|
567
576
|
const output = runMkcert('-CAROOT');
|
|
568
577
|
// If -CAROOT succeeds and the root files exist → CA is installed
|
|
569
|
-
const rootDir = crossPlatformPath(output.trim());
|
|
578
|
+
const rootDir = (0, lib_prod_3.crossPlatformPath)(output.trim());
|
|
570
579
|
if (rootDir &&
|
|
571
|
-
fse.pathExistsSync(crossPlatformPath([rootDir, 'rootCA.pem']))) {
|
|
572
|
-
Helpers__NS__info('[vpn-split] mkcert local CA is already installed');
|
|
580
|
+
lib_prod_3.fse.pathExistsSync((0, lib_prod_3.crossPlatformPath)([rootDir, 'rootCA.pem']))) {
|
|
581
|
+
(0, lib_prod_5.Helpers__NS__info)('[vpn-split] mkcert local CA is already installed');
|
|
573
582
|
caInstalled = true;
|
|
574
583
|
}
|
|
575
584
|
else {
|
|
576
|
-
Helpers__NS__info('[vpn-split] mkcert local CA is NOT installed');
|
|
585
|
+
(0, lib_prod_5.Helpers__NS__info)('[vpn-split] mkcert local CA is NOT installed');
|
|
577
586
|
}
|
|
578
587
|
}
|
|
579
588
|
catch {
|
|
580
|
-
Helpers__NS__info('[vpn-split] mkcert error checking local CA installation');
|
|
589
|
+
(0, lib_prod_5.Helpers__NS__info)('[vpn-split] mkcert error checking local CA installation');
|
|
581
590
|
}
|
|
582
591
|
// 2. Install the local CA if needed (requires sudo once)
|
|
583
592
|
if (!caInstalled) {
|
|
584
|
-
Helpers__NS__info('[vpn-split] Installing mkcert local CA (requires sudo once)...');
|
|
593
|
+
(0, lib_prod_5.Helpers__NS__info)('[vpn-split] Installing mkcert local CA (requires sudo once)...');
|
|
585
594
|
try {
|
|
586
|
-
execSync('mkcert -install', { stdio: 'inherit' });
|
|
587
|
-
Helpers__NS__info('[vpn-split] Local CA installed and trusted system-wide');
|
|
595
|
+
(0, child_process_1.execSync)('mkcert -install', { stdio: 'inherit' });
|
|
596
|
+
(0, lib_prod_5.Helpers__NS__info)('[vpn-split] Local CA installed and trusted system-wide');
|
|
588
597
|
}
|
|
589
598
|
catch (err) {
|
|
590
|
-
Helpers__NS__error('[vpn-split] Failed to run "mkcert -install". Run it manually with sudo.', false, true);
|
|
599
|
+
(0, lib_prod_5.Helpers__NS__error)('[vpn-split] Failed to run "mkcert -install". Run it manually with sudo.', false, true);
|
|
591
600
|
}
|
|
592
601
|
}
|
|
593
602
|
const isWindows = process.platform === 'win32';
|
|
@@ -598,58 +607,59 @@ Port: ${port}`;
|
|
|
598
607
|
// Small list or non-Windows: one shot
|
|
599
608
|
const namesArg = allNames.map(d => `"${d}"`).join(' ');
|
|
600
609
|
const mkcertCmd = `-key-file "${keyPath}" -cert-file "${certPath}" ${namesArg}`;
|
|
601
|
-
fse.ensureDirSync(path.dirname(certPath));
|
|
610
|
+
lib_prod_3.fse.ensureDirSync(lib_prod_3.path.dirname(certPath));
|
|
602
611
|
runMkcert(mkcertCmd);
|
|
603
612
|
}
|
|
604
613
|
else {
|
|
605
614
|
// Big list on Windows: Batch into chunks of ~20 domains
|
|
606
615
|
const chunkSize = 20;
|
|
607
|
-
fse.ensureDirSync(path.dirname(certPath));
|
|
616
|
+
lib_prod_3.fse.ensureDirSync(lib_prod_3.path.dirname(certPath));
|
|
608
617
|
for (let i = 0; i < allNames.length; i += chunkSize) {
|
|
609
618
|
const chunk = allNames.slice(i, i + chunkSize);
|
|
610
619
|
const tempCert = `${certPath}.${i}.pem`;
|
|
611
620
|
const tempKey = `${keyPath}.${i}.pem`;
|
|
612
621
|
const namesArg = chunk.map(d => `"${d}"`).join(' ');
|
|
613
622
|
const mkcertCmd = `-key-file "${tempKey}" -cert-file "${tempCert}" ${namesArg}`;
|
|
614
|
-
Helpers__NS__info(`[vpn-split] Generating batch ${Math.floor(i / chunkSize) + 1}/${Math.ceil(allNames.length / chunkSize)}...`);
|
|
623
|
+
(0, lib_prod_5.Helpers__NS__info)(`[vpn-split] Generating batch ${Math.floor(i / chunkSize) + 1}/${Math.ceil(allNames.length / chunkSize)}...`);
|
|
615
624
|
runMkcert(mkcertCmd);
|
|
616
625
|
tempCertFiles.push(tempCert);
|
|
617
626
|
tempKeyFiles.push(tempKey);
|
|
618
627
|
}
|
|
619
628
|
// 3. Merge all temp certs into one (cert chain + leaves) and pick first key
|
|
620
|
-
Helpers__NS__info('[vpn-split] Merging batches into final cert...');
|
|
629
|
+
(0, lib_prod_5.Helpers__NS__info)('[vpn-split] Merging batches into final cert...');
|
|
621
630
|
const firstKey = tempKeyFiles[0];
|
|
622
|
-
fse.copySync(firstKey, keyPath); // Use the first key (all are identical)
|
|
631
|
+
lib_prod_3.fse.copySync(firstKey, keyPath); // Use the first key (all are identical)
|
|
623
632
|
// Concat all certs (mkcert output is already PEM-formatted)
|
|
624
633
|
const mergedCertContent = tempCertFiles
|
|
625
|
-
.map(f => fse.readFileSync(f, 'utf8'))
|
|
634
|
+
.map(f => lib_prod_3.fse.readFileSync(f, 'utf8'))
|
|
626
635
|
.join('\n'); // PEM certs stack nicely
|
|
627
|
-
fse.writeFileSync(certPath, mergedCertContent);
|
|
636
|
+
lib_prod_3.fse.writeFileSync(certPath, mergedCertContent);
|
|
628
637
|
// Clean up temps
|
|
629
|
-
tempCertFiles.forEach(f => fse.removeSync(f));
|
|
630
|
-
tempKeyFiles.slice(1).forEach(f => fse.removeSync(f)); // Keep first key as backup if needed
|
|
631
|
-
Helpers__NS__info('[vpn-split] Merged cert ready!');
|
|
638
|
+
tempCertFiles.forEach(f => lib_prod_3.fse.removeSync(f));
|
|
639
|
+
tempKeyFiles.slice(1).forEach(f => lib_prod_3.fse.removeSync(f)); // Keep first key as backup if needed
|
|
640
|
+
(0, lib_prod_5.Helpers__NS__info)('[vpn-split] Merged cert ready!');
|
|
632
641
|
}
|
|
633
642
|
// Verify
|
|
634
|
-
if (!fse.existsSync(certPath) || !fse.existsSync(keyPath)) {
|
|
635
|
-
Helpers__NS__error('[vpn-split] Files missing after generation!', false, true);
|
|
643
|
+
if (!lib_prod_3.fse.existsSync(certPath) || !lib_prod_3.fse.existsSync(keyPath)) {
|
|
644
|
+
(0, lib_prod_5.Helpers__NS__error)('[vpn-split] Files missing after generation!', false, true);
|
|
636
645
|
}
|
|
637
646
|
else {
|
|
638
|
-
Helpers__NS__info(`[vpn-split] Trusted cert ready: ${allNames.length} hostnames covered`);
|
|
647
|
+
(0, lib_prod_5.Helpers__NS__info)(`[vpn-split] Trusted cert ready: ${allNames.length} hostnames covered`);
|
|
639
648
|
}
|
|
640
649
|
//#endregion
|
|
641
650
|
}
|
|
642
651
|
//#region private methods / prevent bad target for client
|
|
643
652
|
async preventBadTargetForClient(vpnServerTarget) {
|
|
644
653
|
if (!vpnServerTarget) {
|
|
645
|
-
const currentLocalIp = await UtilsNetwork__NS__getFirstIpV4LocalActiveIpAddress();
|
|
646
|
-
Helpers__NS__error(`[vpn-server] Please provide a correct target server.\n` +
|
|
654
|
+
const currentLocalIp = await (0, lib_prod_3.UtilsNetwork__NS__getFirstIpV4LocalActiveIpAddress)();
|
|
655
|
+
(0, lib_prod_5.Helpers__NS__error)(`[vpn-server] Please provide a correct target server.\n` +
|
|
647
656
|
`Example:\n` +
|
|
648
657
|
`vpn-server ${currentLocalIp}\n\n` +
|
|
649
658
|
`Your local IP is: ${currentLocalIp}`, false, true);
|
|
650
659
|
}
|
|
651
660
|
}
|
|
652
661
|
}
|
|
662
|
+
exports.VpnSplit = VpnSplit;
|
|
653
663
|
//#region helper / gen msg
|
|
654
664
|
const genMsg = `
|
|
655
665
|
################################################
|
|
@@ -660,36 +670,36 @@ const genMsg = `
|
|
|
660
670
|
//#region helpers / save hosts
|
|
661
671
|
function saveHosts(hosts, options) {
|
|
662
672
|
const { saveHostInUserFolder } = options || {};
|
|
663
|
-
if (___NS__isArray(hosts)) {
|
|
673
|
+
if ((0, lib_prod_3.___NS__isArray)(hosts)) {
|
|
664
674
|
hosts = hosts.reduce((prev, curr) => {
|
|
665
|
-
return ___NS__merge(prev, {
|
|
675
|
+
return (0, lib_prod_3.___NS__merge)(prev, {
|
|
666
676
|
[curr.name]: curr,
|
|
667
677
|
});
|
|
668
678
|
}, {});
|
|
669
679
|
}
|
|
670
680
|
const toSave = parseHost(hosts, !!saveHostInUserFolder);
|
|
671
681
|
if (saveHostInUserFolder) {
|
|
672
|
-
Helpers__NS__writeFile(HOST_FILE_PATHUSER, toSave);
|
|
682
|
+
(0, lib_prod_5.Helpers__NS__writeFile)(HOST_FILE_PATHUSER, toSave);
|
|
673
683
|
}
|
|
674
684
|
else {
|
|
675
|
-
Helpers__NS__writeFile(HOST_FILE_PATH, toSave);
|
|
685
|
+
(0, lib_prod_5.Helpers__NS__writeFile)(HOST_FILE_PATH, toSave);
|
|
676
686
|
}
|
|
677
687
|
}
|
|
678
688
|
function saveHostsLocal(hosts, options) {
|
|
679
689
|
const { saveHostInUserFolder } = options || {};
|
|
680
|
-
if (___NS__isArray(hosts)) {
|
|
690
|
+
if ((0, lib_prod_3.___NS__isArray)(hosts)) {
|
|
681
691
|
hosts = hosts.reduce((prev, curr) => {
|
|
682
|
-
return ___NS__merge(prev, {
|
|
692
|
+
return (0, lib_prod_3.___NS__merge)(prev, {
|
|
683
693
|
[curr.name]: curr,
|
|
684
694
|
});
|
|
685
695
|
}, {});
|
|
686
696
|
}
|
|
687
697
|
const toSave = parseHost(hosts, !!saveHostInUserFolder, true);
|
|
688
698
|
if (saveHostInUserFolder) {
|
|
689
|
-
Helpers__NS__writeFile(HOST_FILE_PATHUSER, toSave);
|
|
699
|
+
(0, lib_prod_5.Helpers__NS__writeFile)(HOST_FILE_PATHUSER, toSave);
|
|
690
700
|
}
|
|
691
701
|
else {
|
|
692
|
-
Helpers__NS__writeFile(HOST_FILE_PATH, toSave);
|
|
702
|
+
(0, lib_prod_5.Helpers__NS__writeFile)(HOST_FILE_PATH, toSave);
|
|
693
703
|
}
|
|
694
704
|
}
|
|
695
705
|
//#endregion
|
|
@@ -700,13 +710,13 @@ function parseHost(hosts, saveHostInUserFolder, useLocal = false) {
|
|
|
700
710
|
...DefaultEtcHosts,
|
|
701
711
|
...hosts,
|
|
702
712
|
};
|
|
703
|
-
___NS__keys(hosts).forEach(hostName => {
|
|
713
|
+
(0, lib_prod_3.___NS__keys)(hosts).forEach(hostName => {
|
|
704
714
|
const v = hosts[hostName];
|
|
705
715
|
v.name = hostName;
|
|
706
716
|
});
|
|
707
717
|
return (genMsg +
|
|
708
718
|
EOL +
|
|
709
|
-
___NS__keys(hosts)
|
|
719
|
+
(0, lib_prod_3.___NS__keys)(hosts)
|
|
710
720
|
.map(hostName => {
|
|
711
721
|
const v = hosts[hostName];
|
|
712
722
|
if (v.skipUpdateOfServerEtcHosts) {
|
|
@@ -730,3 +740,4 @@ function parseHost(hosts, saveHostInUserFolder, useLocal = false) {
|
|
|
730
740
|
genMsg);
|
|
731
741
|
}
|
|
732
742
|
//#endregion
|
|
743
|
+
//# sourceMappingURL=vpn-split.backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpn-split.backend.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/websql/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# MyLib
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
|
|
8
|
-
> Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# MyLib
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
|
|
8
|
+
> Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|