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
@@ -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":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,MAAM,GACN,gBAAgB,GAChB,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,GAAG,YAAY,GAAG,aAAa,CAAC;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,eAAe,EAAE;QACf,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,gBAAgB,CAAC;QACzB,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;KAChC,CAAC;IACF,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Audit utility types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -5,4 +5,5 @@ export * from "./types";
5
5
  export * from "./token-store";
6
6
  export * from "./formatter";
7
7
  export * from "./sender";
8
+ export * from "./notification-handler";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -5,4 +5,5 @@ export * from "./types";
5
5
  export * from "./token-store";
6
6
  export * from "./formatter";
7
7
  export * from "./sender";
8
+ export * from "./notification-handler";
8
9
  //# sourceMappingURL=index.js.map
@@ -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"}