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,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tunnel provider tester - ngrok, cloudflare, localtunnel
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import { promisify } from "util";
|
|
6
|
+
import { exec } from "child_process";
|
|
7
|
+
import { findCloudflared } from "../tunnel/cloudflare.js";
|
|
8
|
+
import { clearInstance as clearLocaltunnelInstance } from "../tunnel/localtunnel.js";
|
|
9
|
+
import { clearInstance as clearNgrokInstance } from "../tunnel/ngrok.js";
|
|
10
|
+
const execAsync = promisify(exec);
|
|
11
|
+
const CLOUDFLARED_PATHS = [
|
|
12
|
+
"/usr/local/bin/cloudflared",
|
|
13
|
+
"/usr/bin/cloudflared",
|
|
14
|
+
`${process.env.HOME || ""}/.cloudflared/cloudflared`,
|
|
15
|
+
"/opt/homebrew/bin/cloudflared",
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Test all tunnel providers
|
|
19
|
+
*/
|
|
20
|
+
export async function testTunnelProviders(port, options) {
|
|
21
|
+
const results = [];
|
|
22
|
+
const ngrokResult = await testNgrok(port, options);
|
|
23
|
+
results.push(...ngrokResult.results);
|
|
24
|
+
const cloudflareResult = await testCloudflare(port, options);
|
|
25
|
+
results.push(...cloudflareResult.results);
|
|
26
|
+
const localtunnelResult = await testLocaltunnel(port, options);
|
|
27
|
+
results.push(...localtunnelResult.results);
|
|
28
|
+
return {
|
|
29
|
+
ngrok: ngrokResult.result,
|
|
30
|
+
cloudflare: cloudflareResult.result,
|
|
31
|
+
localtunnel: localtunnelResult.result,
|
|
32
|
+
results,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Test ngrok provider
|
|
37
|
+
*/
|
|
38
|
+
async function testNgrok(port, _options) {
|
|
39
|
+
const results = [];
|
|
40
|
+
const result = {
|
|
41
|
+
provider: "ngrok",
|
|
42
|
+
installed: false,
|
|
43
|
+
configured: false,
|
|
44
|
+
};
|
|
45
|
+
// Test 1: Check if ngrok is installed
|
|
46
|
+
const startInstall = Date.now();
|
|
47
|
+
try {
|
|
48
|
+
const { stdout } = await execAsync("which ngrok");
|
|
49
|
+
result.installed = true;
|
|
50
|
+
result.installedPath = stdout.trim();
|
|
51
|
+
results.push({
|
|
52
|
+
name: "ngrok: Installed",
|
|
53
|
+
category: "tunnel",
|
|
54
|
+
status: "pass",
|
|
55
|
+
message: `Found at ${stdout.trim()}`,
|
|
56
|
+
duration: Date.now() - startInstall,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
results.push({
|
|
61
|
+
name: "ngrok: Installed",
|
|
62
|
+
category: "tunnel",
|
|
63
|
+
status: "fail",
|
|
64
|
+
message: "ngrok not found in PATH",
|
|
65
|
+
duration: Date.now() - startInstall,
|
|
66
|
+
});
|
|
67
|
+
return { result, results };
|
|
68
|
+
}
|
|
69
|
+
// Test 2: Check configuration
|
|
70
|
+
const startConfig = Date.now();
|
|
71
|
+
const configPaths = [
|
|
72
|
+
`${process.env.HOME}/Library/Application Support/ngrok/ngrok.yml`,
|
|
73
|
+
`${process.env.HOME}/.config/ngrok/ngrok.yml`,
|
|
74
|
+
"/etc/ngrok/ngrok.yml",
|
|
75
|
+
];
|
|
76
|
+
let configPath = null;
|
|
77
|
+
for (const p of configPaths) {
|
|
78
|
+
if (fs.existsSync(p)) {
|
|
79
|
+
configPath = p;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (configPath) {
|
|
84
|
+
result.configured = true;
|
|
85
|
+
try {
|
|
86
|
+
const content = fs.readFileSync(configPath, "utf-8");
|
|
87
|
+
const hasAuthtoken = content.includes("authtoken:") || content.includes("agent:") && content.includes("authtoken:");
|
|
88
|
+
result.configured = hasAuthtoken;
|
|
89
|
+
results.push({
|
|
90
|
+
name: "ngrok: Configured",
|
|
91
|
+
category: "tunnel",
|
|
92
|
+
status: hasAuthtoken ? "pass" : "warn",
|
|
93
|
+
message: hasAuthtoken
|
|
94
|
+
? `Config at ${configPath}`
|
|
95
|
+
: "Config exists but no authtoken found",
|
|
96
|
+
duration: Date.now() - startConfig,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
results.push({
|
|
101
|
+
name: "ngrok: Configured",
|
|
102
|
+
category: "tunnel",
|
|
103
|
+
status: "fail",
|
|
104
|
+
message: `Failed to read config at ${configPath}`,
|
|
105
|
+
duration: Date.now() - startConfig,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
results.push({
|
|
111
|
+
name: "ngrok: Configured",
|
|
112
|
+
category: "tunnel",
|
|
113
|
+
status: "fail",
|
|
114
|
+
message: "No ngrok config file found",
|
|
115
|
+
duration: Date.now() - startConfig,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// Test 3: Try to establish connection
|
|
119
|
+
const startConnect = Date.now();
|
|
120
|
+
clearNgrokInstance();
|
|
121
|
+
try {
|
|
122
|
+
const { startNgrokTunnel } = await import("../tunnel/ngrok.js");
|
|
123
|
+
const tunnel = await startNgrokTunnel({ port });
|
|
124
|
+
result.connection = {
|
|
125
|
+
success: true,
|
|
126
|
+
url: tunnel.url,
|
|
127
|
+
tunnelId: tunnel.tunnelId,
|
|
128
|
+
duration: Date.now() - startConnect,
|
|
129
|
+
};
|
|
130
|
+
results.push({
|
|
131
|
+
name: "ngrok: Connection",
|
|
132
|
+
category: "tunnel",
|
|
133
|
+
status: "pass",
|
|
134
|
+
message: `Established: ${tunnel.url}`,
|
|
135
|
+
duration: Date.now() - startConnect,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
140
|
+
result.connection = {
|
|
141
|
+
success: false,
|
|
142
|
+
error: errorMessage,
|
|
143
|
+
duration: Date.now() - startConnect,
|
|
144
|
+
};
|
|
145
|
+
results.push({
|
|
146
|
+
name: "ngrok: Connection",
|
|
147
|
+
category: "tunnel",
|
|
148
|
+
status: "fail",
|
|
149
|
+
message: `Connection failed: ${errorMessage}`,
|
|
150
|
+
duration: Date.now() - startConnect,
|
|
151
|
+
error: errorMessage,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
return { result, results };
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Test cloudflare provider
|
|
158
|
+
*/
|
|
159
|
+
async function testCloudflare(port, _options) {
|
|
160
|
+
const results = [];
|
|
161
|
+
const result = {
|
|
162
|
+
provider: "cloudflare",
|
|
163
|
+
installed: false,
|
|
164
|
+
configured: false,
|
|
165
|
+
};
|
|
166
|
+
// Test 1: Check if cloudflared is installed
|
|
167
|
+
const startInstall = Date.now();
|
|
168
|
+
const cloudflaredPath = findCloudflared(CLOUDFLARED_PATHS);
|
|
169
|
+
if (cloudflaredPath) {
|
|
170
|
+
result.installed = true;
|
|
171
|
+
result.installedPath = cloudflaredPath;
|
|
172
|
+
results.push({
|
|
173
|
+
name: "cloudflare: Installed",
|
|
174
|
+
category: "tunnel",
|
|
175
|
+
status: "pass",
|
|
176
|
+
message: `Found at ${cloudflaredPath}`,
|
|
177
|
+
duration: Date.now() - startInstall,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
results.push({
|
|
182
|
+
name: "cloudflare: Installed",
|
|
183
|
+
category: "tunnel",
|
|
184
|
+
status: "fail",
|
|
185
|
+
message: "cloudflared not found in PATH",
|
|
186
|
+
duration: Date.now() - startInstall,
|
|
187
|
+
});
|
|
188
|
+
return { result, results };
|
|
189
|
+
}
|
|
190
|
+
// Test 2: Check configuration (optional)
|
|
191
|
+
const startConfig = Date.now();
|
|
192
|
+
const cloudflareConfigPaths = [
|
|
193
|
+
`${process.env.HOME}/.cloudflared/config.yml`,
|
|
194
|
+
`${process.env.HOME}/.cloudflared/creds`,
|
|
195
|
+
];
|
|
196
|
+
let hasConfig = false;
|
|
197
|
+
for (const p of cloudflareConfigPaths) {
|
|
198
|
+
if (fs.existsSync(p)) {
|
|
199
|
+
hasConfig = true;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
result.configured = hasConfig;
|
|
204
|
+
results.push({
|
|
205
|
+
name: "cloudflare: Configured",
|
|
206
|
+
category: "tunnel",
|
|
207
|
+
status: hasConfig ? "pass" : "warn",
|
|
208
|
+
message: hasConfig
|
|
209
|
+
? "Configuration file found"
|
|
210
|
+
: "No config file (will use defaults)",
|
|
211
|
+
duration: Date.now() - startConfig,
|
|
212
|
+
});
|
|
213
|
+
// Test 3: Try to establish connection
|
|
214
|
+
const startConnect = Date.now();
|
|
215
|
+
try {
|
|
216
|
+
const { startCloudflareTunnel } = await import("../tunnel/cloudflare.js");
|
|
217
|
+
const tunnel = await startCloudflareTunnel({ port });
|
|
218
|
+
result.connection = {
|
|
219
|
+
success: true,
|
|
220
|
+
url: tunnel.url,
|
|
221
|
+
tunnelId: tunnel.tunnelId,
|
|
222
|
+
duration: Date.now() - startConnect,
|
|
223
|
+
};
|
|
224
|
+
results.push({
|
|
225
|
+
name: "cloudflare: Connection",
|
|
226
|
+
category: "tunnel",
|
|
227
|
+
status: "pass",
|
|
228
|
+
message: `Established: ${tunnel.url}`,
|
|
229
|
+
duration: Date.now() - startConnect,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
234
|
+
result.connection = {
|
|
235
|
+
success: false,
|
|
236
|
+
error: errorMessage,
|
|
237
|
+
duration: Date.now() - startConnect,
|
|
238
|
+
};
|
|
239
|
+
results.push({
|
|
240
|
+
name: "cloudflare: Connection",
|
|
241
|
+
category: "tunnel",
|
|
242
|
+
status: "fail",
|
|
243
|
+
message: `Connection failed: ${errorMessage}`,
|
|
244
|
+
duration: Date.now() - startConnect,
|
|
245
|
+
error: errorMessage,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
return { result, results };
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Test localtunnel provider
|
|
252
|
+
*/
|
|
253
|
+
async function testLocaltunnel(port, _options) {
|
|
254
|
+
const results = [];
|
|
255
|
+
const result = {
|
|
256
|
+
provider: "localtunnel",
|
|
257
|
+
installed: false,
|
|
258
|
+
configured: true, // localtunnel doesn't need config
|
|
259
|
+
};
|
|
260
|
+
// Test 1: Check if localtunnel package is available
|
|
261
|
+
const startInstall = Date.now();
|
|
262
|
+
try {
|
|
263
|
+
await import("localtunnel");
|
|
264
|
+
result.installed = true;
|
|
265
|
+
results.push({
|
|
266
|
+
name: "localtunnel: Installed",
|
|
267
|
+
category: "tunnel",
|
|
268
|
+
status: "pass",
|
|
269
|
+
message: "npm package available",
|
|
270
|
+
duration: Date.now() - startInstall,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
results.push({
|
|
275
|
+
name: "localtunnel: Installed",
|
|
276
|
+
category: "tunnel",
|
|
277
|
+
status: "fail",
|
|
278
|
+
message: "localtunnel package not found",
|
|
279
|
+
duration: Date.now() - startInstall,
|
|
280
|
+
});
|
|
281
|
+
return { result, results };
|
|
282
|
+
}
|
|
283
|
+
// Test 2: Try to establish connection
|
|
284
|
+
const startConnect = Date.now();
|
|
285
|
+
clearLocaltunnelInstance();
|
|
286
|
+
try {
|
|
287
|
+
const { startLocaltunnel } = await import("../tunnel/localtunnel.js");
|
|
288
|
+
const tunnel = await startLocaltunnel({ port });
|
|
289
|
+
result.connection = {
|
|
290
|
+
success: true,
|
|
291
|
+
url: tunnel.url,
|
|
292
|
+
tunnelId: tunnel.tunnelId,
|
|
293
|
+
duration: Date.now() - startConnect,
|
|
294
|
+
};
|
|
295
|
+
results.push({
|
|
296
|
+
name: "localtunnel: Connection",
|
|
297
|
+
category: "tunnel",
|
|
298
|
+
status: "pass",
|
|
299
|
+
message: `Established: ${tunnel.url}`,
|
|
300
|
+
duration: Date.now() - startConnect,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
305
|
+
result.connection = {
|
|
306
|
+
success: false,
|
|
307
|
+
error: errorMessage,
|
|
308
|
+
duration: Date.now() - startConnect,
|
|
309
|
+
};
|
|
310
|
+
results.push({
|
|
311
|
+
name: "localtunnel: Connection",
|
|
312
|
+
category: "tunnel",
|
|
313
|
+
status: "fail",
|
|
314
|
+
message: `Connection failed: ${errorMessage}`,
|
|
315
|
+
duration: Date.now() - startConnect,
|
|
316
|
+
error: errorMessage,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
return { result, results };
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Compare tunnel providers and return recommendations
|
|
323
|
+
*/
|
|
324
|
+
export function compareTunnelProviders(results) {
|
|
325
|
+
const recommendations = [];
|
|
326
|
+
const available = [];
|
|
327
|
+
const fastest = { provider: "", duration: Infinity };
|
|
328
|
+
if (results.ngrok?.connection?.success) {
|
|
329
|
+
available.push("ngrok");
|
|
330
|
+
if (results.ngrok.connection.duration < fastest.duration) {
|
|
331
|
+
fastest.provider = "ngrok";
|
|
332
|
+
fastest.duration = results.ngrok.connection.duration;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (results.cloudflare?.connection?.success) {
|
|
336
|
+
available.push("cloudflare");
|
|
337
|
+
if (results.cloudflare.connection.duration < fastest.duration) {
|
|
338
|
+
fastest.provider = "cloudflare";
|
|
339
|
+
fastest.duration = results.cloudflare.connection.duration;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (results.localtunnel?.connection?.success) {
|
|
343
|
+
available.push("localtunnel");
|
|
344
|
+
if (results.localtunnel.connection.duration < fastest.duration) {
|
|
345
|
+
fastest.provider = "localtunnel";
|
|
346
|
+
fastest.duration = results.localtunnel.connection.duration;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (available.length === 0) {
|
|
350
|
+
recommendations.push("No tunnel providers are working. Check your network connection and credentials.");
|
|
351
|
+
}
|
|
352
|
+
else if (available.length === 1) {
|
|
353
|
+
recommendations.push(`Only ${available[0]} is available. Consider setting up additional providers for redundancy.`);
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
recommendations.push(`${available.join(", ")} are available. ${fastest.provider} is the fastest.`);
|
|
357
|
+
}
|
|
358
|
+
return recommendations;
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=tunnel-tester.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-tester.js","sourceRoot":"","sources":["../../../src/cli/tunnel-tester.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit utility types
|
|
3
|
+
*/
|
|
4
|
+
export interface AuditOptions {
|
|
5
|
+
/** Connect to existing server instead of starting new one */
|
|
6
|
+
connect?: string;
|
|
7
|
+
/** Server port to use or connect to */
|
|
8
|
+
port?: number;
|
|
9
|
+
/** Proxy port (serverPort + 1) */
|
|
10
|
+
proxyPort?: number;
|
|
11
|
+
/** Only test tunnel providers */
|
|
12
|
+
tunnelOnly?: boolean;
|
|
13
|
+
/** Only test endpoints */
|
|
14
|
+
endpointsOnly?: boolean;
|
|
15
|
+
/** Only test push notifications */
|
|
16
|
+
pushOnly?: boolean;
|
|
17
|
+
/** Output as JSON */
|
|
18
|
+
json?: boolean;
|
|
19
|
+
/** Verbose output */
|
|
20
|
+
verbose?: boolean;
|
|
21
|
+
/** Stop tunnels after testing */
|
|
22
|
+
cleanup?: boolean;
|
|
23
|
+
/** Timeout for tests in milliseconds */
|
|
24
|
+
timeout?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface TestResult {
|
|
27
|
+
name: string;
|
|
28
|
+
category: TestCategory;
|
|
29
|
+
status: "pass" | "fail" | "skip" | "warn";
|
|
30
|
+
message?: string;
|
|
31
|
+
details?: Record<string, unknown>;
|
|
32
|
+
duration?: number;
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
export type TestCategory = "server" | "endpoint" | "tunnel" | "push" | "infrastructure" | "proxy";
|
|
36
|
+
export interface ServerInfo {
|
|
37
|
+
port: number;
|
|
38
|
+
proxyPort: number;
|
|
39
|
+
reachable: boolean;
|
|
40
|
+
corsConfigured: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface EndpointTest {
|
|
43
|
+
method: string;
|
|
44
|
+
path: string;
|
|
45
|
+
statusCode: number;
|
|
46
|
+
response?: unknown;
|
|
47
|
+
duration: number;
|
|
48
|
+
}
|
|
49
|
+
export interface TunnelTestResult {
|
|
50
|
+
provider: "ngrok" | "cloudflare" | "localtunnel";
|
|
51
|
+
installed: boolean;
|
|
52
|
+
installedPath?: string;
|
|
53
|
+
configured: boolean;
|
|
54
|
+
connection?: {
|
|
55
|
+
success: boolean;
|
|
56
|
+
url?: string;
|
|
57
|
+
tunnelId?: string;
|
|
58
|
+
duration: number;
|
|
59
|
+
error?: string;
|
|
60
|
+
};
|
|
61
|
+
diagnostics?: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
export interface PushTestResult {
|
|
64
|
+
tokenStore: {
|
|
65
|
+
readable: boolean;
|
|
66
|
+
writable: boolean;
|
|
67
|
+
initialCount: number;
|
|
68
|
+
};
|
|
69
|
+
expoApi: {
|
|
70
|
+
reachable: boolean;
|
|
71
|
+
responseTime?: number;
|
|
72
|
+
error?: string;
|
|
73
|
+
};
|
|
74
|
+
tokenOperations: {
|
|
75
|
+
register: boolean;
|
|
76
|
+
retrieve: boolean;
|
|
77
|
+
delete: boolean;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export interface AuditReport {
|
|
81
|
+
timestamp: string;
|
|
82
|
+
options: AuditOptions;
|
|
83
|
+
summary: {
|
|
84
|
+
testsRun: number;
|
|
85
|
+
passed: number;
|
|
86
|
+
failed: number;
|
|
87
|
+
skipped: number;
|
|
88
|
+
warnings: number;
|
|
89
|
+
score: number;
|
|
90
|
+
};
|
|
91
|
+
server?: ServerInfo;
|
|
92
|
+
endpoints?: EndpointTest[];
|
|
93
|
+
tunnels?: {
|
|
94
|
+
ngrok?: TunnelTestResult;
|
|
95
|
+
cloudflare?: TunnelTestResult;
|
|
96
|
+
localtunnel?: TunnelTestResult;
|
|
97
|
+
};
|
|
98
|
+
push?: PushTestResult;
|
|
99
|
+
results: TestResult[];
|
|
100
|
+
recommendations: string[];
|
|
101
|
+
}
|
|
102
|
+
export interface CliFlags {
|
|
103
|
+
tunnelOnly: boolean;
|
|
104
|
+
endpointsOnly: boolean;
|
|
105
|
+
pushOnly: boolean;
|
|
106
|
+
json: boolean;
|
|
107
|
+
verbose: boolean;
|
|
108
|
+
cleanup: boolean;
|
|
109
|
+
connect?: string;
|
|
110
|
+
port?: number;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/src/push/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/push/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/push/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,wBAAwB,CAAC"}
|
package/dist/src/push/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/push/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/push/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session notification handler
|
|
3
|
+
*
|
|
4
|
+
* Fetches the last assistant message from a session to form push notifications.
|
|
5
|
+
*
|
|
6
|
+
* USAGE: Uncomment and integrate into main plugin when ready.
|
|
7
|
+
*
|
|
8
|
+
* Integration example:
|
|
9
|
+
*
|
|
10
|
+
* import { handleSessionNotification } from "./notification-handler";
|
|
11
|
+
*
|
|
12
|
+
* export const PushNotificationPlugin: Plugin = async (ctx) => {
|
|
13
|
+
* return {
|
|
14
|
+
* event: async ({ event }) => {
|
|
15
|
+
* if (event.type === "chat.message") {
|
|
16
|
+
* await handleSessionNotification(ctx, event);
|
|
17
|
+
* }
|
|
18
|
+
* },
|
|
19
|
+
* };
|
|
20
|
+
* };
|
|
21
|
+
*/
|
|
22
|
+
import type { PluginInput } from "@opencode-ai/plugin";
|
|
23
|
+
export interface AssistantMessageInfo {
|
|
24
|
+
id: string;
|
|
25
|
+
content: string;
|
|
26
|
+
model: string;
|
|
27
|
+
provider: string;
|
|
28
|
+
created: string;
|
|
29
|
+
tokens: {
|
|
30
|
+
input: number;
|
|
31
|
+
output: number;
|
|
32
|
+
reasoning: number;
|
|
33
|
+
};
|
|
34
|
+
cost: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Handle session notification - fetch last assistant message for context
|
|
38
|
+
*
|
|
39
|
+
* This enables push notifications that include the assistant's response content,
|
|
40
|
+
* allowing users to see what the AI said without opening the app.
|
|
41
|
+
*/
|
|
42
|
+
export declare function handleSessionNotification(ctx: PluginInput, event: {
|
|
43
|
+
sessionID: string;
|
|
44
|
+
messageID?: string;
|
|
45
|
+
type: string;
|
|
46
|
+
}): Promise<AssistantMessageInfo | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Format assistant message for push notification
|
|
49
|
+
*
|
|
50
|
+
* Creates a notification payload from the assistant message info.
|
|
51
|
+
*/
|
|
52
|
+
export declare function formatAssistantNotification(assistant: AssistantMessageInfo, sessionName?: string): {
|
|
53
|
+
title: string;
|
|
54
|
+
body: string;
|
|
55
|
+
data?: Record<string, string>;
|
|
56
|
+
};
|
|
57
|
+
export default handleSessionNotification;
|
|
58
|
+
//# sourceMappingURL=notification-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-handler.d.ts","sourceRoot":"","sources":["../../../src/push/notification-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKvD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA8DtC;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,oBAAoB,EAC/B,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAchE;AAED,eAAe,yBAAyB,CAAC"}
|