opencode-mobile 1.1.0 â 1.2.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/bin/audit +31 -0
- package/bin/qr +13 -0
- package/dist/index.d.ts +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +545 -5
- package/dist/index.js.map +1 -1
- package/dist/src/cli/endpoint-tester.d.ts +19 -0
- package/dist/src/cli/endpoint-tester.d.ts.map +1 -0
- package/dist/src/cli/endpoint-tester.js +233 -0
- package/dist/src/cli/endpoint-tester.js.map +1 -0
- package/dist/src/cli/index.d.ts +20 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +166 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/push-tester.d.ts +16 -0
- package/dist/src/cli/push-tester.d.ts.map +1 -0
- package/dist/src/cli/push-tester.js +293 -0
- package/dist/src/cli/push-tester.js.map +1 -0
- package/dist/src/cli/qr.d.ts +5 -0
- package/dist/src/cli/qr.d.ts.map +1 -0
- package/dist/src/cli/qr.js +127 -0
- package/dist/src/cli/qr.js.map +1 -0
- package/dist/src/cli/report.d.ts +25 -0
- package/dist/src/cli/report.d.ts.map +1 -0
- package/dist/src/cli/report.js +215 -0
- package/dist/src/cli/report.js.map +1 -0
- package/dist/src/cli/server-manager.d.ts +28 -0
- package/dist/src/cli/server-manager.d.ts.map +1 -0
- package/dist/src/cli/server-manager.js +340 -0
- package/dist/src/cli/server-manager.js.map +1 -0
- package/dist/src/cli/test-runner.d.ts +16 -0
- package/dist/src/cli/test-runner.d.ts.map +1 -0
- package/dist/src/cli/test-runner.js +201 -0
- package/dist/src/cli/test-runner.js.map +1 -0
- package/dist/src/cli/tunnel-qr.d.ts +8 -0
- package/dist/src/cli/tunnel-qr.d.ts.map +1 -0
- package/dist/src/cli/tunnel-qr.js +163 -0
- package/dist/src/cli/tunnel-qr.js.map +1 -0
- package/dist/src/cli/tunnel-tester.d.ts +22 -0
- package/dist/src/cli/tunnel-tester.d.ts.map +1 -0
- package/dist/src/cli/tunnel-tester.js +360 -0
- package/dist/src/cli/tunnel-tester.js.map +1 -0
- package/dist/src/cli/types.d.ts +112 -0
- package/dist/src/cli/types.d.ts.map +1 -0
- package/dist/src/cli/types.js +5 -0
- package/dist/src/cli/types.js.map +1 -0
- package/dist/src/push/index.d.ts +1 -0
- package/dist/src/push/index.d.ts.map +1 -1
- package/dist/src/push/index.js +1 -0
- package/dist/src/push/index.js.map +1 -1
- package/dist/src/push/notification-handler.d.ts +58 -0
- package/dist/src/push/notification-handler.d.ts.map +1 -0
- package/dist/src/push/notification-handler.js +110 -0
- package/dist/src/push/notification-handler.js.map +1 -0
- package/dist/src/tunnel/cloudflare.d.ts +32 -3
- package/dist/src/tunnel/cloudflare.d.ts.map +1 -1
- package/dist/src/tunnel/cloudflare.js +102 -32
- package/dist/src/tunnel/cloudflare.js.map +1 -1
- package/dist/src/tunnel/localtunnel.d.ts +28 -1
- package/dist/src/tunnel/localtunnel.d.ts.map +1 -1
- package/dist/src/tunnel/localtunnel.js +53 -11
- package/dist/src/tunnel/localtunnel.js.map +1 -1
- package/dist/src/tunnel/metadata.d.ts +29 -0
- package/dist/src/tunnel/metadata.d.ts.map +1 -0
- package/dist/src/tunnel/metadata.js +83 -0
- package/dist/src/tunnel/metadata.js.map +1 -0
- package/dist/src/tunnel/ngrok.d.ts +12 -0
- package/dist/src/tunnel/ngrok.d.ts.map +1 -1
- package/dist/src/tunnel/ngrok.js +72 -29
- package/dist/src/tunnel/ngrok.js.map +1 -1
- package/dist/src/tunnel/qrcode.d.ts +8 -0
- package/dist/src/tunnel/qrcode.d.ts.map +1 -1
- package/dist/src/tunnel/qrcode.js +60 -9
- package/dist/src/tunnel/qrcode.js.map +1 -1
- package/package.json +21 -3
- package/dist/push-notifications.d.ts +0 -4
- package/dist/push-notifications.d.ts.map +0 -1
- package/dist/push-notifications.js +0 -260
- package/dist/push-notifications.js.map +0 -1
- package/dist/reverse-proxy.d.ts +0 -9
- package/dist/reverse-proxy.d.ts.map +0 -1
- package/dist/reverse-proxy.js +0 -78
- package/dist/reverse-proxy.js.map +0 -1
- package/dist/sdk-logger.d.ts +0 -19
- package/dist/sdk-logger.d.ts.map +0 -1
- package/dist/sdk-logger.js +0 -103
- package/dist/sdk-logger.js.map +0 -1
- package/dist/src/tunnel/index.d.ts +0 -35
- package/dist/src/tunnel/index.d.ts.map +0 -1
- package/dist/src/tunnel/index.js +0 -191
- package/dist/src/tunnel/index.js.map +0 -1
- package/dist/src/utils/index.d.ts +0 -5
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js +0 -5
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/port.d.ts +0 -12
- package/dist/src/utils/port.d.ts.map +0 -1
- package/dist/src/utils/port.js +0 -41
- package/dist/src/utils/port.js.map +0 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test runner engine - orchestrates all audit tests
|
|
3
|
+
*/
|
|
4
|
+
import { startServer, stopServer, getServerInfo } from "./server-manager.js";
|
|
5
|
+
import { testEndpoints } from "./endpoint-tester.js";
|
|
6
|
+
import { testTunnelProviders, compareTunnelProviders } from "./tunnel-tester.js";
|
|
7
|
+
import { testPush, getPushRecommendations } from "./push-tester.js";
|
|
8
|
+
/**
|
|
9
|
+
* Run all audit tests
|
|
10
|
+
*/
|
|
11
|
+
export async function runAudit(options) {
|
|
12
|
+
const startTime = Date.now();
|
|
13
|
+
const allResults = [];
|
|
14
|
+
const recommendations = [];
|
|
15
|
+
console.log("[Audit] Starting comprehensive endpoint audit...");
|
|
16
|
+
// Determine which tests to run
|
|
17
|
+
const runServer = !options.connect;
|
|
18
|
+
const runEndpoints = !options.tunnelOnly;
|
|
19
|
+
const runTunnels = !options.endpointsOnly && !options.pushOnly;
|
|
20
|
+
const runPush = !options.endpointsOnly && !options.tunnelOnly;
|
|
21
|
+
let serverPort = options.port || 4096;
|
|
22
|
+
// Start server if needed
|
|
23
|
+
if (runServer && !options.connect) {
|
|
24
|
+
console.log("[Audit] Starting server...");
|
|
25
|
+
try {
|
|
26
|
+
const { port } = await startServer(options);
|
|
27
|
+
serverPort = port;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
31
|
+
console.error(`[Audit] Failed to start server: ${errorMessage}`);
|
|
32
|
+
return createFailedReport(options, errorMessage, allResults);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (options.connect) {
|
|
36
|
+
// Parse connection string
|
|
37
|
+
const [host, port] = options.connect.split(":");
|
|
38
|
+
serverPort = parseInt(port || "4096", 10);
|
|
39
|
+
console.log(`[Audit] Connecting to existing server at ${options.connect}`);
|
|
40
|
+
}
|
|
41
|
+
// Wait a moment for server to be ready
|
|
42
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
43
|
+
// Run server health check
|
|
44
|
+
let serverInfo;
|
|
45
|
+
try {
|
|
46
|
+
serverInfo = await getServerInfo(serverPort);
|
|
47
|
+
if (!serverInfo.reachable) {
|
|
48
|
+
allResults.push({
|
|
49
|
+
name: "Server: Reachable",
|
|
50
|
+
category: "server",
|
|
51
|
+
status: "fail",
|
|
52
|
+
message: `Server on port ${serverPort} is not responding`,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
allResults.push({
|
|
57
|
+
name: "Server: Reachable",
|
|
58
|
+
category: "server",
|
|
59
|
+
status: "pass",
|
|
60
|
+
message: `Server responding on port ${serverPort}`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
66
|
+
serverInfo = {
|
|
67
|
+
port: serverPort,
|
|
68
|
+
proxyPort: serverPort + 1,
|
|
69
|
+
reachable: false,
|
|
70
|
+
corsConfigured: false,
|
|
71
|
+
};
|
|
72
|
+
allResults.push({
|
|
73
|
+
name: "Server: Reachable",
|
|
74
|
+
category: "server",
|
|
75
|
+
status: "fail",
|
|
76
|
+
message: `Health check failed: ${errorMessage}`,
|
|
77
|
+
error: errorMessage,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// Run endpoint tests
|
|
81
|
+
let endpointTestsResult;
|
|
82
|
+
if (runEndpoints) {
|
|
83
|
+
console.log("[Audit] Testing endpoints...");
|
|
84
|
+
endpointTestsResult = await testEndpoints(serverPort, options);
|
|
85
|
+
allResults.push(...endpointTestsResult.results);
|
|
86
|
+
}
|
|
87
|
+
// Run tunnel tests
|
|
88
|
+
let tunnelResults;
|
|
89
|
+
if (runTunnels) {
|
|
90
|
+
console.log("[Audit] Testing tunnel providers...");
|
|
91
|
+
tunnelResults = await testTunnelProviders(serverPort, options);
|
|
92
|
+
allResults.push(...tunnelResults.results);
|
|
93
|
+
// Add tunnel provider recommendations
|
|
94
|
+
const tunnelRecs = compareTunnelProviders(tunnelResults);
|
|
95
|
+
recommendations.push(...tunnelRecs);
|
|
96
|
+
}
|
|
97
|
+
// Run push tests
|
|
98
|
+
let pushResults;
|
|
99
|
+
if (runPush) {
|
|
100
|
+
console.log("[Audit] Testing push notifications...");
|
|
101
|
+
pushResults = await testPush(options);
|
|
102
|
+
allResults.push(...pushResults.results);
|
|
103
|
+
// Add push recommendations
|
|
104
|
+
const pushRecs = getPushRecommendations(pushResults.result);
|
|
105
|
+
recommendations.push(...pushRecs);
|
|
106
|
+
}
|
|
107
|
+
// Stop server if we started it
|
|
108
|
+
if (runServer && options.connect === undefined && options.cleanup !== false) {
|
|
109
|
+
console.log("[Audit] Cleaning up...");
|
|
110
|
+
await stopServer();
|
|
111
|
+
}
|
|
112
|
+
// Calculate summary
|
|
113
|
+
const summary = calculateSummary(allResults);
|
|
114
|
+
// Build report
|
|
115
|
+
const report = {
|
|
116
|
+
timestamp: new Date().toISOString(),
|
|
117
|
+
options,
|
|
118
|
+
summary,
|
|
119
|
+
server: serverInfo,
|
|
120
|
+
endpoints: endpointTestsResult?.tests,
|
|
121
|
+
tunnels: tunnelResults
|
|
122
|
+
? {
|
|
123
|
+
ngrok: tunnelResults.ngrok,
|
|
124
|
+
cloudflare: tunnelResults.cloudflare,
|
|
125
|
+
localtunnel: tunnelResults.localtunnel,
|
|
126
|
+
}
|
|
127
|
+
: undefined,
|
|
128
|
+
push: pushResults?.result,
|
|
129
|
+
results: allResults,
|
|
130
|
+
recommendations,
|
|
131
|
+
};
|
|
132
|
+
const totalDuration = Date.now() - startTime;
|
|
133
|
+
console.log(`[Audit] Audit completed in ${(totalDuration / 1000).toFixed(2)}s`);
|
|
134
|
+
return report;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Calculate test summary
|
|
138
|
+
*/
|
|
139
|
+
function calculateSummary(results) {
|
|
140
|
+
const passed = results.filter((r) => r.status === "pass").length;
|
|
141
|
+
const failed = results.filter((r) => r.status === "fail").length;
|
|
142
|
+
const skipped = results.filter((r) => r.status === "skip").length;
|
|
143
|
+
const warnings = results.filter((r) => r.status === "warn").length;
|
|
144
|
+
const testsRun = passed + failed + warnings; // Skipped don't count as run
|
|
145
|
+
const score = testsRun > 0 ? (passed / testsRun) * 100 : 0;
|
|
146
|
+
return {
|
|
147
|
+
testsRun,
|
|
148
|
+
passed,
|
|
149
|
+
failed,
|
|
150
|
+
skipped,
|
|
151
|
+
warnings,
|
|
152
|
+
score,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a failed report when audit can't complete
|
|
157
|
+
*/
|
|
158
|
+
function createFailedReport(options, error, results) {
|
|
159
|
+
return {
|
|
160
|
+
timestamp: new Date().toISOString(),
|
|
161
|
+
options,
|
|
162
|
+
summary: {
|
|
163
|
+
testsRun: 0,
|
|
164
|
+
passed: 0,
|
|
165
|
+
failed: 1,
|
|
166
|
+
skipped: 0,
|
|
167
|
+
warnings: 0,
|
|
168
|
+
score: 0,
|
|
169
|
+
},
|
|
170
|
+
results: [
|
|
171
|
+
...results,
|
|
172
|
+
{
|
|
173
|
+
name: "Audit: Initialization",
|
|
174
|
+
category: "infrastructure",
|
|
175
|
+
status: "fail",
|
|
176
|
+
message: `Audit failed to initialize: ${error}`,
|
|
177
|
+
error,
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
recommendations: [
|
|
181
|
+
"Check that the server can be started or an existing server is reachable",
|
|
182
|
+
"Verify all dependencies are installed",
|
|
183
|
+
],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Run specific test category
|
|
188
|
+
*/
|
|
189
|
+
export async function runCategoryTest(category, port, options) {
|
|
190
|
+
switch (category) {
|
|
191
|
+
case "endpoint":
|
|
192
|
+
return { results: (await testEndpoints(port, options)).results };
|
|
193
|
+
case "tunnel":
|
|
194
|
+
return { results: (await testTunnelProviders(port, options)).results };
|
|
195
|
+
case "push":
|
|
196
|
+
return { results: (await testPush(options)).results };
|
|
197
|
+
default:
|
|
198
|
+
return { results: [] };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=test-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../../src/cli/test-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-qr.d.ts","sourceRoot":"","sources":["../../../src/cli/tunnel-qr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0HH,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyEnC;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tunnel QR Code TUI Command
|
|
3
|
+
* Displays QR code for tunnel URL with interactive TUI
|
|
4
|
+
* Run with: npx opencode-mobile tunnel-qr
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from "fs";
|
|
7
|
+
import * as path from "path";
|
|
8
|
+
import { displayQRCode } from "../tunnel/qrcode.js";
|
|
9
|
+
const CONFIG_DIR = path.join(process.env.HOME || "", ".config/opencode");
|
|
10
|
+
const TUNNEL_METADATA_FILE = path.join(CONFIG_DIR, "tunnel.json");
|
|
11
|
+
function loadMetadata() {
|
|
12
|
+
try {
|
|
13
|
+
if (fs.existsSync(TUNNEL_METADATA_FILE)) {
|
|
14
|
+
const data = fs.readFileSync(TUNNEL_METADATA_FILE, "utf-8");
|
|
15
|
+
return JSON.parse(data);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
console.error("[TunnelQR] Failed to load metadata:", e);
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
function clearScreen() {
|
|
24
|
+
console.clear();
|
|
25
|
+
}
|
|
26
|
+
function drawBox(title, content) {
|
|
27
|
+
const lines = content.split("\n");
|
|
28
|
+
const maxWidth = Math.max(...lines.map((l) => l.length), title.length) + 4;
|
|
29
|
+
console.log("â" + "â".repeat(maxWidth - 2) + "â");
|
|
30
|
+
console.log("â " + title.padEnd(maxWidth - 4) + " â");
|
|
31
|
+
console.log("â" + "â".repeat(maxWidth - 2) + "â¤");
|
|
32
|
+
for (const line of lines) {
|
|
33
|
+
console.log("â " + line.padEnd(maxWidth - 4) + " â");
|
|
34
|
+
}
|
|
35
|
+
console.log("â" + "â".repeat(maxWidth - 2) + "â");
|
|
36
|
+
}
|
|
37
|
+
function formatTimestamp(ts) {
|
|
38
|
+
if (!ts)
|
|
39
|
+
return "Never";
|
|
40
|
+
const date = new Date(ts);
|
|
41
|
+
return date.toLocaleString();
|
|
42
|
+
}
|
|
43
|
+
async function showTUI(url) {
|
|
44
|
+
clearScreen();
|
|
45
|
+
console.log("");
|
|
46
|
+
console.log("â".repeat(60));
|
|
47
|
+
console.log(" đ OpenCode Mobile - Tunnel QR Code");
|
|
48
|
+
console.log("â".repeat(60));
|
|
49
|
+
console.log("");
|
|
50
|
+
const metadata = loadMetadata();
|
|
51
|
+
if (metadata) {
|
|
52
|
+
console.log(" đ Tunnel Information:");
|
|
53
|
+
console.log(" â".repeat(30));
|
|
54
|
+
console.log(` â Provider: ${metadata.provider || "N/A"}`);
|
|
55
|
+
console.log(` â URL: ${metadata.url || "N/A"}`);
|
|
56
|
+
console.log(` â Tunnel ID: ${metadata.tunnelId || "N/A"}`);
|
|
57
|
+
console.log(` â Local: localhost:${metadata.port || "N/A"}`);
|
|
58
|
+
console.log(` â Target: localhost:${metadata.targetPort || "N/A"}`);
|
|
59
|
+
console.log(` â Started: ${formatTimestamp(metadata.startedAt)}`);
|
|
60
|
+
console.log(` â Updated: ${formatTimestamp(metadata.lastUpdated)}`);
|
|
61
|
+
console.log("");
|
|
62
|
+
}
|
|
63
|
+
console.log(" đą Scan to connect:");
|
|
64
|
+
console.log(" â".repeat(30));
|
|
65
|
+
console.log("");
|
|
66
|
+
await displayQRCode(url);
|
|
67
|
+
console.log("");
|
|
68
|
+
console.log(" đĄ Tips:");
|
|
69
|
+
console.log(" â".repeat(30));
|
|
70
|
+
console.log(" â âĸ Point camera at QR code");
|
|
71
|
+
console.log(" â âĸ Ensure mobile device is on same network");
|
|
72
|
+
console.log(" â âĸ Tunnel connects directly to OpenCode server");
|
|
73
|
+
console.log(" â");
|
|
74
|
+
console.log(" â Press Ctrl+C to exit");
|
|
75
|
+
console.log("");
|
|
76
|
+
console.log("â".repeat(60));
|
|
77
|
+
}
|
|
78
|
+
async function showNoTunnel() {
|
|
79
|
+
clearScreen();
|
|
80
|
+
console.log("");
|
|
81
|
+
console.log("â".repeat(60));
|
|
82
|
+
console.log(" đ OpenCode Mobile - Tunnel QR Code");
|
|
83
|
+
console.log("â".repeat(60));
|
|
84
|
+
console.log("");
|
|
85
|
+
console.log(" â No active tunnel found");
|
|
86
|
+
console.log("");
|
|
87
|
+
console.log(" đ To start a tunnel:");
|
|
88
|
+
console.log(" â".repeat(30));
|
|
89
|
+
console.log(" â 1. Start the plugin: bun run index.ts serve");
|
|
90
|
+
console.log(" â 2. Or run: npx opencode-mobile tunnel");
|
|
91
|
+
console.log(" â 3. The tunnel URL will be saved to:");
|
|
92
|
+
console.log(` â ${TUNNEL_METADATA_FILE}`);
|
|
93
|
+
console.log("");
|
|
94
|
+
console.log(" đ Then run this command again:");
|
|
95
|
+
console.log(" â npx opencode-mobile tunnel-qr");
|
|
96
|
+
console.log("");
|
|
97
|
+
console.log("â".repeat(60));
|
|
98
|
+
}
|
|
99
|
+
async function main() {
|
|
100
|
+
const args = process.argv.slice(2);
|
|
101
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
102
|
+
console.log(`
|
|
103
|
+
OpenCode Mobile - Tunnel QR Code TUI
|
|
104
|
+
|
|
105
|
+
USAGE:
|
|
106
|
+
npx opencode-mobile tunnel-qr
|
|
107
|
+
|
|
108
|
+
DESCRIPTION:
|
|
109
|
+
Displays a QR code for the tunnel URL in an interactive TUI.
|
|
110
|
+
Reads tunnel metadata from .config/opencode/tunnel.json
|
|
111
|
+
|
|
112
|
+
OPTIONS:
|
|
113
|
+
-h, --help Show this help message
|
|
114
|
+
--refresh Refresh every 5 seconds (default: interactive)
|
|
115
|
+
|
|
116
|
+
EXAMPLES:
|
|
117
|
+
npx opencode-mobile tunnel-qr # Show QR code TUI
|
|
118
|
+
npx opencode-mobile tunnel-qr --help # Show help
|
|
119
|
+
`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const metadata = loadMetadata();
|
|
123
|
+
if (!metadata?.url) {
|
|
124
|
+
await showNoTunnel();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const refresh = args.includes("--refresh");
|
|
128
|
+
if (refresh) {
|
|
129
|
+
let iterations = 0;
|
|
130
|
+
const maxIterations = 12; // 1 minute
|
|
131
|
+
while (iterations < maxIterations) {
|
|
132
|
+
const currentMetadata = loadMetadata();
|
|
133
|
+
if (!currentMetadata?.url) {
|
|
134
|
+
console.log("\n âšī¸ Tunnel closed. Exiting...");
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
await showTUI(currentMetadata.url);
|
|
138
|
+
console.log(` đ Auto-refresh: ${iterations + 1}/${maxIterations} (Ctrl+C to stop)`);
|
|
139
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
140
|
+
iterations++;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
await showTUI(metadata.url);
|
|
145
|
+
// Keep alive with signal handling
|
|
146
|
+
await new Promise((resolve) => {
|
|
147
|
+
const cleanup = () => {
|
|
148
|
+
console.log("\n đ Goodbye!");
|
|
149
|
+
resolve();
|
|
150
|
+
};
|
|
151
|
+
process.on("SIGINT", cleanup);
|
|
152
|
+
process.on("SIGTERM", cleanup);
|
|
153
|
+
// Exit after first display if not refreshing
|
|
154
|
+
setTimeout(() => {
|
|
155
|
+
process.removeListener("SIGINT", cleanup);
|
|
156
|
+
process.removeListener("SIGTERM", cleanup);
|
|
157
|
+
resolve();
|
|
158
|
+
}, 100);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
export { main };
|
|
163
|
+
//# sourceMappingURL=tunnel-qr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-qr.js","sourceRoot":"","sources":["../../../src/cli/tunnel-qr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tunnel provider tester - ngrok, cloudflare, localtunnel
|
|
3
|
+
*/
|
|
4
|
+
import type { AuditOptions, TunnelTestResult, TestResult } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Test all tunnel providers
|
|
7
|
+
*/
|
|
8
|
+
export declare function testTunnelProviders(port: number, options: AuditOptions): Promise<{
|
|
9
|
+
ngrok?: TunnelTestResult;
|
|
10
|
+
cloudflare?: TunnelTestResult;
|
|
11
|
+
localtunnel?: TunnelTestResult;
|
|
12
|
+
results: TestResult[];
|
|
13
|
+
}>;
|
|
14
|
+
/**
|
|
15
|
+
* Compare tunnel providers and return recommendations
|
|
16
|
+
*/
|
|
17
|
+
export declare function compareTunnelProviders(results: {
|
|
18
|
+
ngrok?: TunnelTestResult;
|
|
19
|
+
cloudflare?: TunnelTestResult;
|
|
20
|
+
localtunnel?: TunnelTestResult;
|
|
21
|
+
}): string[];
|
|
22
|
+
//# sourceMappingURL=tunnel-tester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-tester.d.ts","sourceRoot":"","sources":["../../../src/cli/tunnel-tester.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACX,MAAM,YAAY,CAAC;AAcpB;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;IACT,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,CAAC,CAiBD;AAwTD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC,GAAG,MAAM,EAAE,CA6CX"}
|