pinggy 0.4.2 → 0.4.4
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/dist/index.cjs +34 -16
- package/dist/index.js +1 -1
- package/dist/{main-X7XBLBTU.js → main-PFPDXIRG.js} +29 -11
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -3279,6 +3279,11 @@ function removeIPv6Brackets(ip) {
|
|
|
3279
3279
|
}
|
|
3280
3280
|
return ip;
|
|
3281
3281
|
}
|
|
3282
|
+
function isValidHostAddress(host) {
|
|
3283
|
+
const normalized = removeIPv6Brackets(host.trim());
|
|
3284
|
+
if (normalized.length === 0) return false;
|
|
3285
|
+
return normalized === "localhost" || (0, import_net2.isIP)(normalized) !== 0;
|
|
3286
|
+
}
|
|
3282
3287
|
function ipv6SafeSplitColon(s) {
|
|
3283
3288
|
const result = [];
|
|
3284
3289
|
let buf = "";
|
|
@@ -3412,17 +3417,22 @@ function parseReverseTunnelAddr(finalConfig, values, primaryType) {
|
|
|
3412
3417
|
function parseLocalTunnelAddr(finalConfig, values) {
|
|
3413
3418
|
if (!Array.isArray(values.L) || values.L.length === 0) return null;
|
|
3414
3419
|
const firstL = values.L[0];
|
|
3415
|
-
const parts = firstL
|
|
3420
|
+
const parts = ipv6SafeSplitColon(firstL);
|
|
3421
|
+
let debuggerHost = "localhost";
|
|
3416
3422
|
let lp;
|
|
3417
3423
|
if (parts.length === 3) {
|
|
3418
3424
|
lp = parseInt(parts[0], 10);
|
|
3419
3425
|
} else if (parts.length === 4) {
|
|
3426
|
+
debuggerHost = removeIPv6Brackets(parts[0]);
|
|
3420
3427
|
lp = parseInt(parts[1], 10);
|
|
3421
3428
|
} else {
|
|
3422
3429
|
return new Error("Incorrect command line arguments: web debugger address incorrect. Please use '-h' option for help.");
|
|
3423
3430
|
}
|
|
3431
|
+
if (!isValidHostAddress(debuggerHost)) {
|
|
3432
|
+
return new Error(`Invalid debugger host ${debuggerHost}. Please use localhost, IPv4, or IPv6 address.`);
|
|
3433
|
+
}
|
|
3424
3434
|
if (!Number.isNaN(lp) && isValidPort(lp)) {
|
|
3425
|
-
finalConfig.webDebugger =
|
|
3435
|
+
finalConfig.webDebugger = `${debuggerHost}:${lp}`;
|
|
3426
3436
|
} else {
|
|
3427
3437
|
return new Error(`Invalid debugger port ${lp}`);
|
|
3428
3438
|
}
|
|
@@ -3556,7 +3566,7 @@ async function buildFinalConfig(values, positionals) {
|
|
|
3556
3566
|
storeJson(finalConfig, saveconf);
|
|
3557
3567
|
return finalConfig;
|
|
3558
3568
|
}
|
|
3559
|
-
var import_pinggy4, import_fs4, import_path4, domainRegex, KEYWORDS, VALID_PROTOCOLS;
|
|
3569
|
+
var import_pinggy4, import_fs4, import_path4, import_net2, domainRegex, KEYWORDS, VALID_PROTOCOLS;
|
|
3560
3570
|
var init_buildConfig = __esm({
|
|
3561
3571
|
"src/cli/buildConfig.ts"() {
|
|
3562
3572
|
"use strict";
|
|
@@ -3568,6 +3578,7 @@ var init_buildConfig = __esm({
|
|
|
3568
3578
|
import_pinggy4 = require("@pinggy/pinggy");
|
|
3569
3579
|
import_fs4 = __toESM(require("fs"), 1);
|
|
3570
3580
|
import_path4 = __toESM(require("path"), 1);
|
|
3581
|
+
import_net2 = require("net");
|
|
3571
3582
|
domainRegex = /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
|
|
3572
3583
|
KEYWORDS = /* @__PURE__ */ new Set([
|
|
3573
3584
|
import_pinggy4.TunnelType.Http,
|
|
@@ -3583,8 +3594,16 @@ var init_buildConfig = __esm({
|
|
|
3583
3594
|
});
|
|
3584
3595
|
|
|
3585
3596
|
// src/utils/parseArgs.ts
|
|
3586
|
-
function
|
|
3587
|
-
return /^-
|
|
3597
|
+
function isAttachedReverseOrLocalFlag(arg) {
|
|
3598
|
+
return /^-[RL].+/.test(arg);
|
|
3599
|
+
}
|
|
3600
|
+
function shouldMergeReverseOrLocalFragment(current, next) {
|
|
3601
|
+
if (next.startsWith("-")) return false;
|
|
3602
|
+
if (next.startsWith(".")) return true;
|
|
3603
|
+
const body = current.slice(2);
|
|
3604
|
+
if (body.endsWith(":")) return true;
|
|
3605
|
+
if (body.includes("//") && !body.includes(":")) return true;
|
|
3606
|
+
return false;
|
|
3588
3607
|
}
|
|
3589
3608
|
function preprocessWindowsArgs(args) {
|
|
3590
3609
|
if (os2.platform() !== "win32") return args;
|
|
@@ -3592,14 +3611,13 @@ function preprocessWindowsArgs(args) {
|
|
|
3592
3611
|
let i = 0;
|
|
3593
3612
|
while (i < args.length) {
|
|
3594
3613
|
const arg = args[i];
|
|
3595
|
-
if (
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3601
|
-
|
|
3602
|
-
out.push(arg);
|
|
3614
|
+
if (isAttachedReverseOrLocalFlag(arg)) {
|
|
3615
|
+
let merged = arg;
|
|
3616
|
+
while (i + 1 < args.length && shouldMergeReverseOrLocalFragment(merged, args[i + 1])) {
|
|
3617
|
+
merged += args[i + 1];
|
|
3618
|
+
i++;
|
|
3619
|
+
}
|
|
3620
|
+
out.push(merged);
|
|
3603
3621
|
i++;
|
|
3604
3622
|
continue;
|
|
3605
3623
|
}
|
|
@@ -3636,7 +3654,7 @@ var init_parseArgs = __esm({
|
|
|
3636
3654
|
function getFreePort(webDebugger) {
|
|
3637
3655
|
return new Promise((resolve, reject) => {
|
|
3638
3656
|
const tryPort = (portToTry) => {
|
|
3639
|
-
const server =
|
|
3657
|
+
const server = import_net3.default.createServer();
|
|
3640
3658
|
server.unref();
|
|
3641
3659
|
server.on("error", (err) => {
|
|
3642
3660
|
if (portToTry !== 0) {
|
|
@@ -3662,12 +3680,12 @@ function getFreePort(webDebugger) {
|
|
|
3662
3680
|
tryPort(providedPort);
|
|
3663
3681
|
});
|
|
3664
3682
|
}
|
|
3665
|
-
var
|
|
3683
|
+
var import_net3;
|
|
3666
3684
|
var init_getFreePort = __esm({
|
|
3667
3685
|
"src/utils/getFreePort.ts"() {
|
|
3668
3686
|
"use strict";
|
|
3669
3687
|
init_cjs_shims();
|
|
3670
|
-
|
|
3688
|
+
import_net3 = __toESM(require("net"), 1);
|
|
3671
3689
|
}
|
|
3672
3690
|
});
|
|
3673
3691
|
|
package/dist/index.js
CHANGED
|
@@ -254,6 +254,7 @@ function isValidIpV6Cidr(input) {
|
|
|
254
254
|
import { TunnelType } from "@pinggy/pinggy";
|
|
255
255
|
import fs from "fs";
|
|
256
256
|
import path from "path";
|
|
257
|
+
import { isIP as isIP2 } from "net";
|
|
257
258
|
var domainRegex = /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
|
|
258
259
|
var KEYWORDS = /* @__PURE__ */ new Set([
|
|
259
260
|
TunnelType.Http,
|
|
@@ -389,6 +390,11 @@ function removeIPv6Brackets(ip) {
|
|
|
389
390
|
}
|
|
390
391
|
return ip;
|
|
391
392
|
}
|
|
393
|
+
function isValidHostAddress(host) {
|
|
394
|
+
const normalized = removeIPv6Brackets(host.trim());
|
|
395
|
+
if (normalized.length === 0) return false;
|
|
396
|
+
return normalized === "localhost" || isIP2(normalized) !== 0;
|
|
397
|
+
}
|
|
392
398
|
function ipv6SafeSplitColon(s) {
|
|
393
399
|
const result = [];
|
|
394
400
|
let buf = "";
|
|
@@ -523,17 +529,22 @@ function parseReverseTunnelAddr(finalConfig, values, primaryType) {
|
|
|
523
529
|
function parseLocalTunnelAddr(finalConfig, values) {
|
|
524
530
|
if (!Array.isArray(values.L) || values.L.length === 0) return null;
|
|
525
531
|
const firstL = values.L[0];
|
|
526
|
-
const parts = firstL
|
|
532
|
+
const parts = ipv6SafeSplitColon(firstL);
|
|
533
|
+
let debuggerHost = "localhost";
|
|
527
534
|
let lp;
|
|
528
535
|
if (parts.length === 3) {
|
|
529
536
|
lp = parseInt(parts[0], 10);
|
|
530
537
|
} else if (parts.length === 4) {
|
|
538
|
+
debuggerHost = removeIPv6Brackets(parts[0]);
|
|
531
539
|
lp = parseInt(parts[1], 10);
|
|
532
540
|
} else {
|
|
533
541
|
return new Error("Incorrect command line arguments: web debugger address incorrect. Please use '-h' option for help.");
|
|
534
542
|
}
|
|
543
|
+
if (!isValidHostAddress(debuggerHost)) {
|
|
544
|
+
return new Error(`Invalid debugger host ${debuggerHost}. Please use localhost, IPv4, or IPv6 address.`);
|
|
545
|
+
}
|
|
535
546
|
if (!Number.isNaN(lp) && isValidPort(lp)) {
|
|
536
|
-
finalConfig.webDebugger =
|
|
547
|
+
finalConfig.webDebugger = `${debuggerHost}:${lp}`;
|
|
537
548
|
} else {
|
|
538
549
|
return new Error(`Invalid debugger port ${lp}`);
|
|
539
550
|
}
|
|
@@ -671,8 +682,16 @@ async function buildFinalConfig(values, positionals) {
|
|
|
671
682
|
// src/utils/parseArgs.ts
|
|
672
683
|
import { parseArgs as parseArgs2 } from "util";
|
|
673
684
|
import * as os from "os";
|
|
674
|
-
function
|
|
675
|
-
return /^-
|
|
685
|
+
function isAttachedReverseOrLocalFlag(arg) {
|
|
686
|
+
return /^-[RL].+/.test(arg);
|
|
687
|
+
}
|
|
688
|
+
function shouldMergeReverseOrLocalFragment(current, next) {
|
|
689
|
+
if (next.startsWith("-")) return false;
|
|
690
|
+
if (next.startsWith(".")) return true;
|
|
691
|
+
const body = current.slice(2);
|
|
692
|
+
if (body.endsWith(":")) return true;
|
|
693
|
+
if (body.includes("//") && !body.includes(":")) return true;
|
|
694
|
+
return false;
|
|
676
695
|
}
|
|
677
696
|
function preprocessWindowsArgs(args) {
|
|
678
697
|
if (os.platform() !== "win32") return args;
|
|
@@ -680,14 +699,13 @@ function preprocessWindowsArgs(args) {
|
|
|
680
699
|
let i = 0;
|
|
681
700
|
while (i < args.length) {
|
|
682
701
|
const arg = args[i];
|
|
683
|
-
if (
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
continue;
|
|
702
|
+
if (isAttachedReverseOrLocalFlag(arg)) {
|
|
703
|
+
let merged = arg;
|
|
704
|
+
while (i + 1 < args.length && shouldMergeReverseOrLocalFragment(merged, args[i + 1])) {
|
|
705
|
+
merged += args[i + 1];
|
|
706
|
+
i++;
|
|
689
707
|
}
|
|
690
|
-
out.push(
|
|
708
|
+
out.push(merged);
|
|
691
709
|
i++;
|
|
692
710
|
continue;
|
|
693
711
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pinggy",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Create secure, shareable tunnels to your localhost and manage them from the command line. ",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
]
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@pinggy/pinggy": "^0.4.
|
|
54
|
+
"@pinggy/pinggy": "^0.4.2",
|
|
55
55
|
"blessed": "^0.1.81",
|
|
56
56
|
"clipboardy": "^5.0.0",
|
|
57
57
|
"mime": "^4.1.0",
|