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.
Files changed (99) hide show
  1. package/bin/audit +31 -0
  2. package/bin/qr +13 -0
  3. package/dist/index.d.ts +11 -4
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +545 -5
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/cli/endpoint-tester.d.ts +19 -0
  8. package/dist/src/cli/endpoint-tester.d.ts.map +1 -0
  9. package/dist/src/cli/endpoint-tester.js +233 -0
  10. package/dist/src/cli/endpoint-tester.js.map +1 -0
  11. package/dist/src/cli/index.d.ts +20 -0
  12. package/dist/src/cli/index.d.ts.map +1 -0
  13. package/dist/src/cli/index.js +166 -0
  14. package/dist/src/cli/index.js.map +1 -0
  15. package/dist/src/cli/push-tester.d.ts +16 -0
  16. package/dist/src/cli/push-tester.d.ts.map +1 -0
  17. package/dist/src/cli/push-tester.js +293 -0
  18. package/dist/src/cli/push-tester.js.map +1 -0
  19. package/dist/src/cli/qr.d.ts +5 -0
  20. package/dist/src/cli/qr.d.ts.map +1 -0
  21. package/dist/src/cli/qr.js +127 -0
  22. package/dist/src/cli/qr.js.map +1 -0
  23. package/dist/src/cli/report.d.ts +25 -0
  24. package/dist/src/cli/report.d.ts.map +1 -0
  25. package/dist/src/cli/report.js +215 -0
  26. package/dist/src/cli/report.js.map +1 -0
  27. package/dist/src/cli/server-manager.d.ts +28 -0
  28. package/dist/src/cli/server-manager.d.ts.map +1 -0
  29. package/dist/src/cli/server-manager.js +340 -0
  30. package/dist/src/cli/server-manager.js.map +1 -0
  31. package/dist/src/cli/test-runner.d.ts +16 -0
  32. package/dist/src/cli/test-runner.d.ts.map +1 -0
  33. package/dist/src/cli/test-runner.js +201 -0
  34. package/dist/src/cli/test-runner.js.map +1 -0
  35. package/dist/src/cli/tunnel-qr.d.ts +8 -0
  36. package/dist/src/cli/tunnel-qr.d.ts.map +1 -0
  37. package/dist/src/cli/tunnel-qr.js +163 -0
  38. package/dist/src/cli/tunnel-qr.js.map +1 -0
  39. package/dist/src/cli/tunnel-tester.d.ts +22 -0
  40. package/dist/src/cli/tunnel-tester.d.ts.map +1 -0
  41. package/dist/src/cli/tunnel-tester.js +360 -0
  42. package/dist/src/cli/tunnel-tester.js.map +1 -0
  43. package/dist/src/cli/types.d.ts +112 -0
  44. package/dist/src/cli/types.d.ts.map +1 -0
  45. package/dist/src/cli/types.js +5 -0
  46. package/dist/src/cli/types.js.map +1 -0
  47. package/dist/src/push/index.d.ts +1 -0
  48. package/dist/src/push/index.d.ts.map +1 -1
  49. package/dist/src/push/index.js +1 -0
  50. package/dist/src/push/index.js.map +1 -1
  51. package/dist/src/push/notification-handler.d.ts +58 -0
  52. package/dist/src/push/notification-handler.d.ts.map +1 -0
  53. package/dist/src/push/notification-handler.js +110 -0
  54. package/dist/src/push/notification-handler.js.map +1 -0
  55. package/dist/src/tunnel/cloudflare.d.ts +32 -3
  56. package/dist/src/tunnel/cloudflare.d.ts.map +1 -1
  57. package/dist/src/tunnel/cloudflare.js +102 -32
  58. package/dist/src/tunnel/cloudflare.js.map +1 -1
  59. package/dist/src/tunnel/localtunnel.d.ts +28 -1
  60. package/dist/src/tunnel/localtunnel.d.ts.map +1 -1
  61. package/dist/src/tunnel/localtunnel.js +53 -11
  62. package/dist/src/tunnel/localtunnel.js.map +1 -1
  63. package/dist/src/tunnel/metadata.d.ts +29 -0
  64. package/dist/src/tunnel/metadata.d.ts.map +1 -0
  65. package/dist/src/tunnel/metadata.js +83 -0
  66. package/dist/src/tunnel/metadata.js.map +1 -0
  67. package/dist/src/tunnel/ngrok.d.ts +12 -0
  68. package/dist/src/tunnel/ngrok.d.ts.map +1 -1
  69. package/dist/src/tunnel/ngrok.js +72 -29
  70. package/dist/src/tunnel/ngrok.js.map +1 -1
  71. package/dist/src/tunnel/qrcode.d.ts +8 -0
  72. package/dist/src/tunnel/qrcode.d.ts.map +1 -1
  73. package/dist/src/tunnel/qrcode.js +60 -9
  74. package/dist/src/tunnel/qrcode.js.map +1 -1
  75. package/package.json +21 -3
  76. package/dist/push-notifications.d.ts +0 -4
  77. package/dist/push-notifications.d.ts.map +0 -1
  78. package/dist/push-notifications.js +0 -260
  79. package/dist/push-notifications.js.map +0 -1
  80. package/dist/reverse-proxy.d.ts +0 -9
  81. package/dist/reverse-proxy.d.ts.map +0 -1
  82. package/dist/reverse-proxy.js +0 -78
  83. package/dist/reverse-proxy.js.map +0 -1
  84. package/dist/sdk-logger.d.ts +0 -19
  85. package/dist/sdk-logger.d.ts.map +0 -1
  86. package/dist/sdk-logger.js +0 -103
  87. package/dist/sdk-logger.js.map +0 -1
  88. package/dist/src/tunnel/index.d.ts +0 -35
  89. package/dist/src/tunnel/index.d.ts.map +0 -1
  90. package/dist/src/tunnel/index.js +0 -191
  91. package/dist/src/tunnel/index.js.map +0 -1
  92. package/dist/src/utils/index.d.ts +0 -5
  93. package/dist/src/utils/index.d.ts.map +0 -1
  94. package/dist/src/utils/index.js +0 -5
  95. package/dist/src/utils/index.js.map +0 -1
  96. package/dist/src/utils/port.d.ts +0 -12
  97. package/dist/src/utils/port.d.ts.map +0 -1
  98. package/dist/src/utils/port.js +0 -41
  99. package/dist/src/utils/port.js.map +0 -1
@@ -1,191 +0,0 @@
1
- /**
2
- * Tunnel manager - unified interface for all tunnel providers
3
- */
4
- import * as fs from "fs";
5
- import { startNgrokTunnel, stopNgrokTunnel, diagnoseNgrok, ensureNgrokReady } from "./ngrok";
6
- import { startLocaltunnel, stopLocaltunnel, getLocaltunnelUrl } from "./localtunnel";
7
- import { startCloudflareTunnel, stopCloudflareTunnel, getCloudflareUrl } from "./cloudflare";
8
- import { displayQRCode } from "./qrcode";
9
- let currentTunnel = null;
10
- /**
11
- * Start a tunnel with the specified provider
12
- */
13
- export async function startTunnel(config) {
14
- // Validate that we have a proper TunnelConfig object
15
- if (!config || typeof config !== "object") {
16
- console.log("[Tunnel] startTunnel called with invalid config type:", typeof config);
17
- throw new Error("Invalid tunnel config: config must be an object");
18
- }
19
- // Check if this looks like the OpenCode client context (has 'client' property)
20
- if ("client" in config) {
21
- console.log("[Tunnel] startTunnel called with OpenCode client context instead of TunnelConfig");
22
- console.log("[Tunnel] This indicates a plugin initialization issue");
23
- throw new Error("Invalid tunnel config: received OpenCode client context");
24
- }
25
- if (!config?.port) {
26
- console.log("[Tunnel] startTunnel called with invalid config:", JSON.stringify(config).substring(0, 200));
27
- throw new Error("Invalid tunnel config: port is required");
28
- }
29
- const provider = config.provider || "ngrok";
30
- switch (provider) {
31
- case "ngrok":
32
- currentTunnel = await startNgrokTunnel(config);
33
- break;
34
- case "localtunnel":
35
- currentTunnel = await startLocaltunnel(config);
36
- break;
37
- case "cloudflare":
38
- currentTunnel = await startCloudflareTunnel(config);
39
- break;
40
- default:
41
- throw new Error(`Unknown tunnel provider: ${provider}`);
42
- }
43
- return currentTunnel;
44
- }
45
- /**
46
- * Stop the current tunnel
47
- */
48
- export async function stopTunnel() {
49
- if (!currentTunnel) {
50
- return;
51
- }
52
- switch (currentTunnel.provider) {
53
- case "ngrok":
54
- await stopNgrokTunnel();
55
- break;
56
- case "localtunnel":
57
- await stopLocaltunnel();
58
- break;
59
- case "cloudflare":
60
- await stopCloudflareTunnel();
61
- break;
62
- }
63
- currentTunnel = null;
64
- }
65
- /**
66
- * Display QR code for tunnel URL
67
- */
68
- export async function displayQR(tunnelInfo) {
69
- // Validate that we have a proper TunnelInfo object, not the OpenCode client context
70
- if (!tunnelInfo || typeof tunnelInfo !== "object") {
71
- console.log("[Tunnel] displayQR called with invalid tunnelInfo type:", typeof tunnelInfo);
72
- return;
73
- }
74
- // Check if this looks like the OpenCode client context (has 'client' property)
75
- if ("client" in tunnelInfo) {
76
- console.log("[Tunnel] displayQR called with OpenCode client context instead of TunnelInfo");
77
- console.log("[Tunnel] This indicates a plugin initialization issue");
78
- return;
79
- }
80
- if (!tunnelInfo?.url) {
81
- console.log("[Tunnel] displayQR called with invalid tunnelInfo:", JSON.stringify(tunnelInfo).substring(0, 200));
82
- console.log("[Tunnel] Stack:", new Error().stack?.split("\n").slice(2, 6).join("\n"));
83
- return;
84
- }
85
- await displayQRCode(tunnelInfo.url);
86
- }
87
- /**
88
- * Get current tunnel details with login status
89
- */
90
- export function getTunnelDetails() {
91
- const details = {
92
- type: "none",
93
- url: null,
94
- loginStatus: "unknown",
95
- loginId: null,
96
- configPath: null,
97
- };
98
- // Determine tunnel type and URL
99
- if (currentTunnel) {
100
- details.type = currentTunnel.provider;
101
- details.url = currentTunnel.url;
102
- }
103
- else if (getLocaltunnelUrl()) {
104
- details.type = "localtunnel";
105
- details.url = getLocaltunnelUrl();
106
- }
107
- else if (getCloudflareUrl()) {
108
- details.type = "cloudflare";
109
- details.url = getCloudflareUrl();
110
- }
111
- // Get config path for ngrok
112
- const configPaths = [
113
- `${process.env.HOME}/Library/Application Support/ngrok/ngrok.yml`,
114
- `${process.env.HOME}/.config/ngrok/ngrok.yml`,
115
- "/etc/ngrok/ngrok.yml",
116
- ];
117
- for (const p of configPaths) {
118
- try {
119
- if (fs.existsSync(p)) {
120
- details.configPath = p;
121
- break;
122
- }
123
- }
124
- catch { }
125
- }
126
- // Check ngrok config for login status
127
- if (details.configPath && details.type === "ngrok") {
128
- try {
129
- const configContent = fs.readFileSync(details.configPath, "utf-8");
130
- // Check for authtoken (indicates logged in)
131
- if (configContent.includes("authtoken:")) {
132
- details.loginStatus = "authenticated";
133
- // Try to extract account info from config comments
134
- const accountMatch = configContent.match(/account:\s*(.+)/);
135
- if (accountMatch) {
136
- details.loginId = accountMatch[1].trim();
137
- }
138
- }
139
- else {
140
- details.loginStatus = "free";
141
- }
142
- }
143
- catch { }
144
- }
145
- // Localtunnel is always free/anonymous
146
- if (details.type === "localtunnel") {
147
- details.loginStatus = "anonymous";
148
- }
149
- // Cloudflare might have config info
150
- if (details.type === "cloudflare") {
151
- details.loginStatus = "unknown";
152
- }
153
- return details;
154
- }
155
- /**
156
- * Get current tunnel info
157
- */
158
- export function getTunnelInfo() {
159
- if (!currentTunnel?.url) {
160
- return null;
161
- }
162
- return currentTunnel;
163
- }
164
- /**
165
- * Get current server URL from tunnel
166
- */
167
- export function getServerUrl() {
168
- if (!currentTunnel?.url) {
169
- throw new Error("No tunnel active");
170
- }
171
- return currentTunnel.url;
172
- }
173
- /**
174
- * Graceful shutdown
175
- */
176
- export async function gracefulShutdown() {
177
- console.log("\n[Tunnel] Graceful shutdown...");
178
- await stopTunnel();
179
- console.log("[Tunnel] Shutdown complete");
180
- }
181
- // Handle process signals for graceful shutdown
182
- const signals = ["SIGINT", "SIGTERM", "SIGHUP"];
183
- signals.forEach((signal) => {
184
- process.on(signal, async () => {
185
- await gracefulShutdown();
186
- process.exit(0);
187
- });
188
- });
189
- // Re-export ngrok utilities
190
- export { diagnoseNgrok, ensureNgrokReady };
191
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tunnel/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Utilities barrel export
3
- */
4
- export * from "./port";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,QAAQ,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Utilities barrel export
3
- */
4
- export * from "./port";
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,QAAQ,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Port detection utilities
3
- */
4
- /**
5
- * Find the next available port starting from a given port
6
- * @param startPort - Port to start searching from
7
- * @param maxAttempts - Maximum number of ports to try
8
- * @returns The first available port
9
- * @throws Error if no port is found after maxAttempts
10
- */
11
- export declare function getNextAvailablePort(startPort: number, maxAttempts?: number): Promise<number>;
12
- //# sourceMappingURL=port.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../../src/utils/port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAoCjB"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Port detection utilities
3
- */
4
- import * as net from "net";
5
- /**
6
- * Find the next available port starting from a given port
7
- * @param startPort - Port to start searching from
8
- * @param maxAttempts - Maximum number of ports to try
9
- * @returns The first available port
10
- * @throws Error if no port is found after maxAttempts
11
- */
12
- export function getNextAvailablePort(startPort, maxAttempts = 50) {
13
- return new Promise((resolve, reject) => {
14
- let attempts = 0;
15
- const tryPort = (port) => {
16
- if (attempts >= maxAttempts) {
17
- reject(new Error(`Could not find available port after ${maxAttempts} attempts`));
18
- return;
19
- }
20
- attempts++;
21
- const server = net.createServer();
22
- server.on("error", (e) => {
23
- if (e.message?.includes("EADDRINUSE")) {
24
- console.log(`[PushPlugin] Port ${port} in use, trying next...`);
25
- tryPort(port + 1);
26
- }
27
- else {
28
- // Don't retry on other errors - could mask serious issues
29
- reject(new Error(`Port ${port} error: ${e.message}`));
30
- }
31
- });
32
- server.listen(port, "127.0.0.1", () => {
33
- server.close(() => {
34
- resolve(port);
35
- });
36
- });
37
- };
38
- tryPort(startPort);
39
- });
40
- }
41
- //# sourceMappingURL=port.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"port.js","sourceRoot":"","sources":["../../../src/utils/port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,cAAsB,EAAE;IAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;YAC/B,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;gBAC5B,MAAM,CACJ,IAAI,KAAK,CACP,uCAAuC,WAAW,WAAW,CAC9D,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,QAAQ,EAAE,CAAC;YAEX,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YAElC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAM,EAAE,EAAE;gBAC5B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,yBAAyB,CAAC,CAAC;oBAChE,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACN,0DAA0D;oBAC1D,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;oBAChB,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC"}