opencode-mobile 1.0.9 → 1.1.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/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/src/tunnel/cloudflare.d.ts +8 -0
- package/dist/src/tunnel/cloudflare.d.ts.map +1 -1
- package/dist/src/tunnel/cloudflare.js +74 -47
- package/dist/src/tunnel/cloudflare.js.map +1 -1
- package/dist/src/tunnel/index.d.ts +7 -1
- package/dist/src/tunnel/index.d.ts.map +1 -1
- package/dist/src/tunnel/index.js +88 -22
- package/dist/src/tunnel/index.js.map +1 -1
- package/dist/src/tunnel/localtunnel.d.ts +4 -0
- package/dist/src/tunnel/localtunnel.d.ts.map +1 -1
- package/dist/src/tunnel/localtunnel.js +28 -11
- package/dist/src/tunnel/localtunnel.js.map +1 -1
- package/dist/src/tunnel/ngrok.d.ts +12 -1
- package/dist/src/tunnel/ngrok.d.ts.map +1 -1
- package/dist/src/tunnel/ngrok.js +337 -19
- package/dist/src/tunnel/ngrok.js.map +1 -1
- package/dist/src/tunnel/qrcode.d.ts +6 -2
- package/dist/src/tunnel/qrcode.d.ts.map +1 -1
- package/dist/src/tunnel/qrcode.js +45 -8
- package/dist/src/tunnel/qrcode.js.map +1 -1
- package/dist/src/utils/index.d.ts +5 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +5 -0
- package/dist/src/utils/index.js.map +1 -0
- package/package.json +2 -3
- package/dist/tunnel-manager.d.ts +0 -30
- package/dist/tunnel-manager.d.ts.map +0 -1
- package/dist/tunnel-manager.js +0 -641
- package/dist/tunnel-manager.js.map +0 -1
package/dist/src/tunnel/ngrok.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ngrok tunnel provider implementation
|
|
3
3
|
*/
|
|
4
|
-
import * as fs from "fs";
|
|
5
4
|
import ngrok from "@ngrok/ngrok";
|
|
6
5
|
let ngrokInstance = null;
|
|
7
6
|
/**
|
|
@@ -36,34 +35,347 @@ export async function diagnoseNgrok() {
|
|
|
36
35
|
const { existsSync } = await import("fs");
|
|
37
36
|
if (existsSync(configPath)) {
|
|
38
37
|
diagnostics.configPath = configPath;
|
|
39
|
-
const content = fs.readFileSync(configPath, "utf-8");
|
|
40
|
-
diagnostics.authtokenConfigured = content.includes("authtoken:");
|
|
41
38
|
break;
|
|
42
39
|
}
|
|
43
40
|
}
|
|
44
|
-
catch {
|
|
45
|
-
|
|
41
|
+
catch { }
|
|
42
|
+
}
|
|
43
|
+
if (!diagnostics.configPath) {
|
|
44
|
+
diagnostics.error = "No ngrok config found";
|
|
45
|
+
return diagnostics;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const { readFileSync } = await import("fs");
|
|
49
|
+
const configContent = readFileSync(diagnostics.configPath, "utf-8");
|
|
50
|
+
// Check for v3 format first (current standard)
|
|
51
|
+
const v3Match = configContent.match(/agent:\s*\n\s*authtoken:\s*(.+)/);
|
|
52
|
+
// Fallback to v2 format (deprecated but still supported)
|
|
53
|
+
const v2Match = configContent.match(/authtoken:\s*(.+)/);
|
|
54
|
+
const authtoken = v3Match?.[1]?.trim() || v2Match?.[1]?.trim();
|
|
55
|
+
if (authtoken && authtoken.length > 10) {
|
|
56
|
+
diagnostics.authtokenConfigured = true;
|
|
57
|
+
// Validate authtoken by calling ngrok API
|
|
58
|
+
try {
|
|
59
|
+
const { promisify } = await import("util");
|
|
60
|
+
const execAsync = promisify((await import("child_process")).exec);
|
|
61
|
+
// Quick API check - timeout after 5 seconds
|
|
62
|
+
try {
|
|
63
|
+
const result = await execAsync(`curl -s --max-time 5 -H "Authorization: Bearer ${authtoken}" https://api.ngrok.com/tunnels 2>&1`);
|
|
64
|
+
const output = result.stdout + result.stderr;
|
|
65
|
+
// Only fail on clear auth errors
|
|
66
|
+
const hasAuthError = output.includes("ERR_NGROK_206") ||
|
|
67
|
+
output.includes("authentication") ||
|
|
68
|
+
output.includes("invalid_token") ||
|
|
69
|
+
output.includes("Unauthorized");
|
|
70
|
+
if (hasAuthError && output.length < 200) {
|
|
71
|
+
diagnostics.error = "Authtoken invalid or expired";
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Any other response means token is valid
|
|
75
|
+
diagnostics.authtokenValid = true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// If curl fails, proceed anyway - SDK might work
|
|
80
|
+
diagnostics.authtokenValid = true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
diagnostics.error = `Authtoken test failed: ${e.message}`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
diagnostics.error = "No authtoken in config";
|
|
46
89
|
}
|
|
47
90
|
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
diagnostics.error = `Failed to read config: ${e.message}`;
|
|
93
|
+
}
|
|
48
94
|
return diagnostics;
|
|
49
95
|
}
|
|
50
96
|
/**
|
|
51
|
-
*
|
|
97
|
+
* Setup ngrok with user input for authtoken
|
|
52
98
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
99
|
+
async function setupNgrokWithUserInput() {
|
|
100
|
+
console.log("\n[Setup] Ngrok configuration needed.");
|
|
101
|
+
console.log("[Setup] 1. Get authtoken from: https://dashboard.ngrok.com/get-started/your-authtoken");
|
|
102
|
+
console.log("[Setup] 2. Run: ngrok config add-authtoken YOUR_AUTHTOKEN");
|
|
103
|
+
console.log("");
|
|
104
|
+
const readline = await import("readline");
|
|
105
|
+
const rl = readline.createInterface({
|
|
106
|
+
input: process.stdin,
|
|
107
|
+
output: process.stdout,
|
|
108
|
+
});
|
|
109
|
+
return new Promise((resolve) => {
|
|
110
|
+
rl.question("[Setup] Paste your ngrok authtoken (or press Enter to skip): ", async (authtoken) => {
|
|
111
|
+
rl.close();
|
|
112
|
+
if (!authtoken || authtoken.trim().length < 10) {
|
|
113
|
+
console.log("[Setup] Skipping ngrok setup.");
|
|
114
|
+
resolve(null);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const token = authtoken.trim();
|
|
118
|
+
try {
|
|
119
|
+
const { promisify } = await import("util");
|
|
120
|
+
const execAsync = promisify((await import("child_process")).exec);
|
|
121
|
+
// Use ngrok config command which writes v3 format
|
|
122
|
+
await execAsync(`ngrok config add-authtoken ${token}`);
|
|
123
|
+
console.log("[Setup] Ngrok authtoken configured successfully! (v3 format)");
|
|
124
|
+
resolve(token);
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
// If ngrok config command fails, write v3 format manually
|
|
128
|
+
console.log("[Setup] Ngrok config command failed, writing config manually...");
|
|
129
|
+
try {
|
|
130
|
+
const { writeFileSync, existsSync, mkdirSync } = await import("fs");
|
|
131
|
+
const configPath = `${process.env.HOME}/Library/Application Support/ngrok/ngrok.yml`;
|
|
132
|
+
const configDir = `${process.env.HOME}/Library/Application Support/ngrok`;
|
|
133
|
+
if (!existsSync(configDir)) {
|
|
134
|
+
mkdirSync(configDir, { recursive: true });
|
|
135
|
+
}
|
|
136
|
+
// Write v3 format
|
|
137
|
+
const v3Config = `version: "3"
|
|
138
|
+
|
|
139
|
+
agent:
|
|
140
|
+
authtoken: ${token}
|
|
141
|
+
`;
|
|
142
|
+
writeFileSync(configPath, v3Config);
|
|
143
|
+
console.log("[Setup] Ngrok config written successfully! (v3 format)");
|
|
144
|
+
resolve(token);
|
|
145
|
+
}
|
|
146
|
+
catch (writeError) {
|
|
147
|
+
console.error(`[Setup] Failed to write config: ${writeError.message}`);
|
|
148
|
+
resolve(null);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
});
|
|
59
152
|
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Ensure ngrok is ready for use (diagnose + interactive setup if needed)
|
|
156
|
+
*/
|
|
157
|
+
export async function ensureNgrokReady() {
|
|
158
|
+
console.log("\n[Diagnostics] Checking ngrok configuration...");
|
|
159
|
+
const diagnostics = await diagnoseNgrok();
|
|
160
|
+
console.log(`[Diagnostics] Installed: ${diagnostics.installed ? "✓" : "✗"}`);
|
|
161
|
+
console.log(`[Diagnostics] Config: ${diagnostics.configPath || "none"}`);
|
|
162
|
+
console.log(`[Diagnostics] Authtoken: ${diagnostics.authtokenConfigured ? "✓" : "✗"}`);
|
|
163
|
+
if (diagnostics.error) {
|
|
164
|
+
console.log(`[Diagnostics] Issue: ${diagnostics.error}`);
|
|
165
|
+
}
|
|
166
|
+
if (!diagnostics.installed) {
|
|
167
|
+
console.log("\n[Setup] Please install ngrok: brew install ngrok");
|
|
168
|
+
return { ready: false, authtoken: null };
|
|
169
|
+
}
|
|
170
|
+
if (!diagnostics.authtokenConfigured || diagnostics.error) {
|
|
171
|
+
const authtoken = await setupNgrokWithUserInput();
|
|
172
|
+
return { ready: !!authtoken, authtoken };
|
|
173
|
+
}
|
|
174
|
+
console.log("[Diagnostics] Ngrok appears configured, attempting connection...");
|
|
175
|
+
return { ready: true, authtoken: null };
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Start an ngrok tunnel with multi-strategy fallback
|
|
179
|
+
*/
|
|
180
|
+
export async function startNgrokTunnel(config) {
|
|
181
|
+
const { exec } = await import("child_process");
|
|
182
|
+
const { promisify } = await import("util");
|
|
183
|
+
const execAsync = promisify(exec);
|
|
184
|
+
async function cleanupNgrok() {
|
|
185
|
+
try {
|
|
186
|
+
await ngrok.kill();
|
|
187
|
+
ngrokInstance = null;
|
|
188
|
+
}
|
|
189
|
+
catch (e) {
|
|
190
|
+
console.log("[Tunnel] Could not clean up ngrok session");
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// First, ensure ngrok is properly configured
|
|
194
|
+
const { ready, authtoken } = await ensureNgrokReady();
|
|
195
|
+
if (!ready) {
|
|
196
|
+
throw new Error("Ngrok not configured. Please set up your authtoken.");
|
|
197
|
+
}
|
|
198
|
+
await cleanupNgrok();
|
|
199
|
+
console.log("\n[Tunnel] Starting ngrok...");
|
|
200
|
+
// Get config path for debugging
|
|
201
|
+
const configPaths = [
|
|
202
|
+
`${process.env.HOME}/Library/Application Support/ngrok/ngrok.yml`,
|
|
203
|
+
`${process.env.HOME}/.config/ngrok/ngrok.yml`,
|
|
204
|
+
"/etc/ngrok/ngrok.yml",
|
|
205
|
+
];
|
|
206
|
+
let activeConfigPath = "none";
|
|
207
|
+
for (const p of configPaths) {
|
|
208
|
+
try {
|
|
209
|
+
const { existsSync } = require("fs");
|
|
210
|
+
if (existsSync(p)) {
|
|
211
|
+
activeConfigPath = p;
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch { }
|
|
216
|
+
}
|
|
217
|
+
// Read config for debugging
|
|
218
|
+
let configContent = "";
|
|
219
|
+
if (activeConfigPath !== "none") {
|
|
220
|
+
try {
|
|
221
|
+
const { readFileSync } = require("fs");
|
|
222
|
+
configContent = readFileSync(activeConfigPath, "utf-8");
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
configContent = "(failed to read)";
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
console.log(`[Tunnel] Config: ${activeConfigPath}`);
|
|
229
|
+
console.log(`[Tunnel] Format: ${configContent.includes('version: "3"') ? "v3" : configContent.includes("version: 2") ? "v2" : "unknown"}`);
|
|
230
|
+
console.log(`[Tunnel] Token: ${configContent.includes("authtoken:") || configContent.includes("agent:") ? "✓" : "✗"}`);
|
|
231
|
+
// Try multiple strategies if one fails
|
|
232
|
+
const strategies = [
|
|
233
|
+
// Strategy 1: Basic ngrok.forward()
|
|
234
|
+
async () => {
|
|
235
|
+
console.log("[Tunnel] Strategy 1: ngrok.forward()...");
|
|
236
|
+
const token = config.authToken || authtoken;
|
|
237
|
+
if (token && typeof token === "string") {
|
|
238
|
+
console.log(`[Tunnel] Token: ${token.substring(0, 8)}...`);
|
|
239
|
+
}
|
|
240
|
+
const options = { addr: config.port };
|
|
241
|
+
if (token && typeof token === "string")
|
|
242
|
+
options.authtoken = token;
|
|
243
|
+
const listener = await ngrok.forward(options);
|
|
244
|
+
console.log(`[Tunnel] URL: ${listener.url()}`);
|
|
245
|
+
return listener.url();
|
|
246
|
+
},
|
|
247
|
+
// Strategy 2: With session metadata
|
|
248
|
+
async () => {
|
|
249
|
+
console.log("[Tunnel] Strategy 2: + metadata...");
|
|
250
|
+
await cleanupNgrok();
|
|
251
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
252
|
+
const token = config.authToken || authtoken;
|
|
253
|
+
if (token && typeof token === "string") {
|
|
254
|
+
console.log(`[Tunnel] Token: ${token.substring(0, 8)}...`);
|
|
255
|
+
}
|
|
256
|
+
const options = {
|
|
257
|
+
addr: config.port,
|
|
258
|
+
session_metadata: `opencode-${Date.now()}`,
|
|
259
|
+
};
|
|
260
|
+
if (token && typeof token === "string")
|
|
261
|
+
options.authtoken = token;
|
|
262
|
+
const listener = await ngrok.forward(options);
|
|
263
|
+
console.log(`[Tunnel] URL: ${listener.url()}`);
|
|
264
|
+
return listener.url();
|
|
265
|
+
},
|
|
266
|
+
// Strategy 3: Clean session
|
|
267
|
+
async () => {
|
|
268
|
+
console.log("[Tunnel] Strategy 3: clean session...");
|
|
269
|
+
await cleanupNgrok();
|
|
270
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
271
|
+
const token = config.authToken || authtoken;
|
|
272
|
+
if (token && typeof token === "string") {
|
|
273
|
+
console.log(`[Tunnel] Token: ${token.substring(0, 8)}...`);
|
|
274
|
+
}
|
|
275
|
+
const options = { addr: config.port };
|
|
276
|
+
if (token && typeof token === "string")
|
|
277
|
+
options.authtoken = token;
|
|
278
|
+
const listener = await ngrok.forward(options);
|
|
279
|
+
console.log(`[Tunnel] URL: ${listener.url()}`);
|
|
280
|
+
return listener.url();
|
|
281
|
+
},
|
|
282
|
+
// Strategy 4: Use ngrok binary directly
|
|
283
|
+
async () => {
|
|
284
|
+
console.log("[Tunnel] Strategy 4: ngrok binary...");
|
|
285
|
+
await cleanupNgrok();
|
|
286
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
287
|
+
const configPath = activeConfigPath !== "none" ? activeConfigPath : "";
|
|
288
|
+
console.log(`[Tunnel] Config: ${configPath || "(default)"}`);
|
|
289
|
+
const cmd = configPath
|
|
290
|
+
? `ngrok http ${config.port} --config="${configPath}" --log=stdout 2>&1`
|
|
291
|
+
: `ngrok http ${config.port} --log=stdout 2>&1`;
|
|
292
|
+
console.log(`[Tunnel] Running: ngrok http ${config.port}`);
|
|
293
|
+
const { spawn } = require("child_process");
|
|
294
|
+
const ngrokProcess = spawn("sh", ["-c", cmd], {
|
|
295
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
296
|
+
});
|
|
297
|
+
let output = "";
|
|
298
|
+
let resolved = false;
|
|
299
|
+
let resolvePromise;
|
|
300
|
+
const onData = (data) => {
|
|
301
|
+
const text = data.toString();
|
|
302
|
+
output += text;
|
|
303
|
+
// Extract URL from format: url=https://abc.ngrok-free.app
|
|
304
|
+
const urlMatch = text.match(/url=([^\s]+)/);
|
|
305
|
+
if (urlMatch && !resolved) {
|
|
306
|
+
resolved = true;
|
|
307
|
+
ngrokProcess.kill();
|
|
308
|
+
if (resolvePromise)
|
|
309
|
+
resolvePromise(true);
|
|
310
|
+
console.log(`[Tunnel] URL: ${urlMatch[1]}`);
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
ngrokProcess.stdout.on("data", onData);
|
|
314
|
+
ngrokProcess.stderr.on("data", onData);
|
|
315
|
+
const waitPromise = new Promise((resolve) => {
|
|
316
|
+
resolvePromise = resolve;
|
|
317
|
+
});
|
|
318
|
+
const timeoutPromise = new Promise((_resolve, reject) => {
|
|
319
|
+
setTimeout(() => {
|
|
320
|
+
if (!resolved) {
|
|
321
|
+
ngrokProcess.kill();
|
|
322
|
+
reject(new Error("timeout"));
|
|
323
|
+
}
|
|
324
|
+
}, 15000);
|
|
325
|
+
});
|
|
326
|
+
await Promise.race([waitPromise, timeoutPromise]);
|
|
327
|
+
// Final extraction
|
|
328
|
+
const finalUrlMatch = output.match(/url=([^\s]+)/);
|
|
329
|
+
if (finalUrlMatch) {
|
|
330
|
+
return finalUrlMatch[1];
|
|
331
|
+
}
|
|
332
|
+
throw new Error("failed to extract URL");
|
|
333
|
+
},
|
|
334
|
+
];
|
|
335
|
+
let lastError = null;
|
|
336
|
+
let firstAuthError = null;
|
|
337
|
+
for (let i = 0; i < strategies.length; i++) {
|
|
338
|
+
try {
|
|
339
|
+
console.log(`[Tunnel] Connecting to port ${config.port}...`);
|
|
340
|
+
ngrokInstance = await strategies[i]();
|
|
341
|
+
const tunnelUrl = ngrokInstance;
|
|
342
|
+
const urlObj = new URL(tunnelUrl);
|
|
343
|
+
const tunnelId = urlObj.hostname.split(".")[0];
|
|
344
|
+
console.log("[Tunnel] URL:", tunnelUrl);
|
|
345
|
+
return {
|
|
346
|
+
url: tunnelUrl,
|
|
347
|
+
tunnelId,
|
|
348
|
+
port: config.port,
|
|
349
|
+
provider: "ngrok",
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
lastError = error;
|
|
354
|
+
console.log(`[Tunnel] Strategy ${i + 1} failed: ${error.message}`);
|
|
355
|
+
// Capture first auth-related error for proper detection
|
|
356
|
+
const errorMsg = error.message.toLowerCase();
|
|
357
|
+
const isAuthError = errorMsg.includes("invalid tunnel configuration") ||
|
|
358
|
+
errorMsg.includes("authtoken") ||
|
|
359
|
+
errorMsg.includes("authentication") ||
|
|
360
|
+
errorMsg.includes("auth token") ||
|
|
361
|
+
errorMsg.includes("session failed");
|
|
362
|
+
if (isAuthError && !firstAuthError) {
|
|
363
|
+
firstAuthError = error;
|
|
364
|
+
console.log(`[Tunnel] Auth error detected in strategy ${i + 1}: ${error.message}`);
|
|
365
|
+
}
|
|
366
|
+
if (i === strategies.length - 1) {
|
|
367
|
+
console.error(`[Tunnel] All strategies exhausted. Last error: ${error.message}`);
|
|
368
|
+
// If we captured an auth error earlier, throw that instead
|
|
369
|
+
if (firstAuthError) {
|
|
370
|
+
console.error(`[Tunnel] Original auth error: ${firstAuthError.message}`);
|
|
371
|
+
throw firstAuthError;
|
|
372
|
+
}
|
|
373
|
+
throw error;
|
|
374
|
+
}
|
|
375
|
+
console.log(`[Tunnel] Trying next strategy...`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
throw lastError || new Error("Unknown error");
|
|
67
379
|
}
|
|
68
380
|
/**
|
|
69
381
|
* Stop the ngrok tunnel
|
|
@@ -74,6 +386,12 @@ export async function stopNgrokTunnel() {
|
|
|
74
386
|
ngrokInstance = null;
|
|
75
387
|
}
|
|
76
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Stop ngrok (legacy name for compatibility)
|
|
391
|
+
*/
|
|
392
|
+
export async function stopNgrok() {
|
|
393
|
+
await stopNgrokTunnel();
|
|
394
|
+
}
|
|
77
395
|
/**
|
|
78
396
|
* Check if ngrok is installed
|
|
79
397
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngrok.js","sourceRoot":"","sources":["../../../src/tunnel/ngrok.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngrok.js","sourceRoot":"","sources":["../../../src/tunnel/ngrok.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
* QR code display utilities
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* Display QR code in terminal
|
|
5
|
+
* Display QR code in terminal with validation
|
|
6
6
|
*/
|
|
7
|
-
export declare function displayQRCode(url: string): void
|
|
7
|
+
export declare function displayQRCode(url: string): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Display QR code and optionally save to file
|
|
10
|
+
*/
|
|
11
|
+
export declare function displayQRCodeAndSave(url: string, filepath?: string): Promise<string>;
|
|
8
12
|
/**
|
|
9
13
|
* Generate QR code as data URL
|
|
10
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qrcode.d.ts","sourceRoot":"","sources":["../../../src/tunnel/qrcode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"qrcode.d.ts","sourceRoot":"","sources":["../../../src/tunnel/qrcode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB9D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAExE"}
|
|
@@ -4,16 +4,53 @@
|
|
|
4
4
|
import qrcode from "qrcode";
|
|
5
5
|
import qrcodeTerminal from "qrcode-terminal";
|
|
6
6
|
/**
|
|
7
|
-
* Display QR code in terminal
|
|
7
|
+
* Display QR code in terminal with validation
|
|
8
8
|
*/
|
|
9
|
-
export function displayQRCode(url) {
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
export async function displayQRCode(url) {
|
|
10
|
+
if (typeof url !== "string" || !url || url === "undefined" || !url.startsWith("http")) {
|
|
11
|
+
console.error("[QR] Invalid URL, skipping QR (already displayed or stale call)");
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
console.log("\n" + "=".repeat(50));
|
|
15
|
+
console.log(" OpenCode Mobile Connection Ready!");
|
|
16
|
+
console.log("=".repeat(50));
|
|
17
|
+
console.log(`\n ${url}\n`);
|
|
12
18
|
console.log("Scan to connect mobile device:\n");
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
try {
|
|
20
|
+
qrcodeTerminal.generate(url, { small: false }, (qrcode) => {
|
|
21
|
+
console.log(qrcode);
|
|
22
|
+
console.log("=".repeat(50) + "\n");
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
console.log(" Install qrcode-terminal for QR code display");
|
|
27
|
+
console.log(" npm install -g qrcode-terminal\n");
|
|
28
|
+
console.log("=".repeat(50) + "\n");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Display QR code and optionally save to file
|
|
33
|
+
*/
|
|
34
|
+
export async function displayQRCodeAndSave(url, filepath) {
|
|
35
|
+
await displayQRCode(url);
|
|
36
|
+
if (filepath) {
|
|
37
|
+
try {
|
|
38
|
+
await qrcode.toFile(filepath, url, {
|
|
39
|
+
width: 300,
|
|
40
|
+
margin: 2,
|
|
41
|
+
color: {
|
|
42
|
+
dark: "#000000",
|
|
43
|
+
light: "#ffffff",
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
console.log(`[QR] Saved QR code to: ${filepath}`);
|
|
47
|
+
return filepath;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error("[QR] Failed to save QR code:", error.message);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return url;
|
|
17
54
|
}
|
|
18
55
|
/**
|
|
19
56
|
* Generate QR code as data URL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qrcode.js","sourceRoot":"","sources":["../../../src/tunnel/qrcode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;
|
|
1
|
+
{"version":3,"file":"qrcode.js","sourceRoot":"","sources":["../../../src/tunnel/qrcode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAc,EAAE,EAAE;YAChE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAW,EACX,QAAiB;IAEjB,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACjC,KAAK,EAAE,GAAG;gBACV,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,SAAS;iBACjB;aACF,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;YAClD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-mobile",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Mobile push notification plugin for OpenCode - enables push notifications via Expo for mobile devices",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -40,9 +40,8 @@
|
|
|
40
40
|
"cloudflared": "^0.1.1",
|
|
41
41
|
"cloudflared-tunnel": "^1.0.3",
|
|
42
42
|
"expo": "^54.0.31",
|
|
43
|
-
"localtunnel": "^
|
|
43
|
+
"localtunnel": "^1.8.3",
|
|
44
44
|
"ngrok": "^5.0.0-beta.2",
|
|
45
|
-
"opencode-mobile": "^1.0.4",
|
|
46
45
|
"qrcode": "^1.5.4",
|
|
47
46
|
"qrcode-terminal": "^0.12.0"
|
|
48
47
|
},
|
package/dist/tunnel-manager.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export interface TunnelConfig {
|
|
2
|
-
port: number;
|
|
3
|
-
authToken?: string;
|
|
4
|
-
region?: string;
|
|
5
|
-
subdomain?: string;
|
|
6
|
-
provider?: "localtunnel" | "cloudflare" | "ngrok";
|
|
7
|
-
}
|
|
8
|
-
export interface TunnelInfo {
|
|
9
|
-
url: string;
|
|
10
|
-
tunnelId: string;
|
|
11
|
-
port: number;
|
|
12
|
-
provider: string;
|
|
13
|
-
}
|
|
14
|
-
export interface TunnelDetails {
|
|
15
|
-
type: string;
|
|
16
|
-
url: string | null;
|
|
17
|
-
loginStatus: string;
|
|
18
|
-
loginId: string | null;
|
|
19
|
-
configPath: string | null;
|
|
20
|
-
}
|
|
21
|
-
export declare function stopNgrok(): Promise<void>;
|
|
22
|
-
export declare function stopTunnel(): Promise<void>;
|
|
23
|
-
export declare function startTunnel(config: TunnelConfig): Promise<TunnelInfo>;
|
|
24
|
-
export declare function getTunnelInfo(): TunnelInfo | null;
|
|
25
|
-
export declare function getTunnelDetails(): TunnelDetails;
|
|
26
|
-
export declare function getServerUrl(): string | null;
|
|
27
|
-
export declare function displayQRCode(url: string): Promise<void>;
|
|
28
|
-
export declare function displayQRCodeAndSave(url: string, filepath?: string): Promise<string>;
|
|
29
|
-
export declare function gracefulShutdown(): Promise<void>;
|
|
30
|
-
//# sourceMappingURL=tunnel-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-manager.d.ts","sourceRoot":"","sources":["../tunnel-manager.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,aAAa,GAAG,YAAY,GAAG,OAAO,CAAC;CACnD;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AA6jBD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAU/C;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAKhD;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAa3E;AAED,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAoEhD;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB9D;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD"}
|