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,19 @@
1
+ /**
2
+ * Endpoint tester for push-token and tunnel endpoints
3
+ */
4
+ import type { AuditOptions, EndpointTest, TestResult } from "./types.js";
5
+ /**
6
+ * Test all endpoints
7
+ */
8
+ export declare function testEndpoints(port: number, options: AuditOptions): Promise<{
9
+ tests: EndpointTest[];
10
+ results: TestResult[];
11
+ }>;
12
+ /**
13
+ * Quick health check for endpoints
14
+ */
15
+ export declare function quickHealthCheck(port: number): Promise<{
16
+ healthy: boolean;
17
+ endpoints: string[];
18
+ }>;
19
+ //# sourceMappingURL=endpoint-tester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint-tester.d.ts","sourceRoot":"","sources":["../../../src/cli/endpoint-tester.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACX,MAAM,YAAY,CAAC;AAQpB;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,CAyM3D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAwBpD"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Endpoint tester for push-token and tunnel endpoints
3
+ */
4
+ const CORS = {
5
+ "Access-Control-Allow-Origin": "*",
6
+ "Access-Control-Allow-Methods": "GET, POST, DELETE, OPTIONS",
7
+ "Access-Control-Allow-Headers": "Content-Type",
8
+ };
9
+ /**
10
+ * Test all endpoints
11
+ */
12
+ export async function testEndpoints(port, options) {
13
+ const baseUrl = `http://127.0.0.1:${port}`;
14
+ const results = [];
15
+ const tests = [];
16
+ // Define all endpoint tests
17
+ const endpointTests = [
18
+ // Push-token endpoints
19
+ {
20
+ category: "endpoint",
21
+ name: "GET /push-token",
22
+ method: "GET",
23
+ path: "/push-token",
24
+ expectedStatus: 200,
25
+ },
26
+ {
27
+ category: "endpoint",
28
+ name: "POST /push-token",
29
+ method: "POST",
30
+ path: "/push-token",
31
+ body: { token: "test-token-audit", platform: "ios", deviceId: `audit-test-${Date.now()}` },
32
+ expectedStatus: 200,
33
+ },
34
+ {
35
+ category: "endpoint",
36
+ name: "GET /push-token (after POST)",
37
+ method: "GET",
38
+ path: "/push-token",
39
+ expectedStatus: 200,
40
+ },
41
+ {
42
+ category: "endpoint",
43
+ name: "DELETE /push-token",
44
+ method: "DELETE",
45
+ path: "/push-token",
46
+ body: { deviceId: `audit-test-${Date.now()}` },
47
+ expectedStatus: 200,
48
+ },
49
+ // Tunnel endpoints
50
+ {
51
+ category: "endpoint",
52
+ name: "GET /tunnel (no tunnel)",
53
+ method: "GET",
54
+ path: "/tunnel",
55
+ expectedStatus: 200,
56
+ },
57
+ {
58
+ category: "endpoint",
59
+ name: "POST /tunnel",
60
+ method: "POST",
61
+ path: "/tunnel",
62
+ body: { port },
63
+ expectedStatus: 200,
64
+ skipIf: options.tunnelOnly === false,
65
+ },
66
+ {
67
+ category: "endpoint",
68
+ name: "GET /tunnel (with tunnel)",
69
+ method: "GET",
70
+ path: "/tunnel",
71
+ expectedStatus: 200,
72
+ skipIf: options.tunnelOnly === false,
73
+ },
74
+ {
75
+ category: "endpoint",
76
+ name: "DELETE /tunnel",
77
+ method: "DELETE",
78
+ path: "/tunnel",
79
+ expectedStatus: 200,
80
+ skipIf: options.tunnelOnly === false,
81
+ },
82
+ // CORS preflight
83
+ {
84
+ category: "endpoint",
85
+ name: "OPTIONS /push-token",
86
+ method: "OPTIONS",
87
+ path: "/push-token",
88
+ expectedStatus: 204,
89
+ },
90
+ {
91
+ category: "endpoint",
92
+ name: "OPTIONS /tunnel",
93
+ method: "OPTIONS",
94
+ path: "/tunnel",
95
+ expectedStatus: 204,
96
+ },
97
+ // Error cases
98
+ {
99
+ category: "endpoint",
100
+ name: "POST /push-token (missing fields)",
101
+ method: "POST",
102
+ path: "/push-token",
103
+ body: { token: "test" },
104
+ expectedStatus: 400,
105
+ },
106
+ {
107
+ category: "endpoint",
108
+ name: "DELETE /push-token (missing deviceId)",
109
+ method: "DELETE",
110
+ path: "/push-token",
111
+ body: {},
112
+ expectedStatus: 400,
113
+ },
114
+ {
115
+ category: "endpoint",
116
+ name: "POST /tunnel (invalid port)",
117
+ method: "POST",
118
+ path: "/tunnel",
119
+ body: { port: "invalid" },
120
+ expectedStatus: 400,
121
+ skipIf: options.tunnelOnly === false,
122
+ },
123
+ // 404 cases
124
+ {
125
+ category: "endpoint",
126
+ name: "GET /nonexistent",
127
+ method: "GET",
128
+ path: "/nonexistent",
129
+ expectedStatus: 404,
130
+ },
131
+ ];
132
+ // Execute tests
133
+ for (const test of endpointTests) {
134
+ if (test.skipIf) {
135
+ results.push({
136
+ name: test.name,
137
+ category: "endpoint",
138
+ status: "skip",
139
+ message: "Skipped by configuration",
140
+ });
141
+ continue;
142
+ }
143
+ const start = Date.now();
144
+ try {
145
+ const response = await fetch(`${baseUrl}${test.path}`, {
146
+ method: test.method,
147
+ headers: {
148
+ "Content-Type": "application/json",
149
+ ...(test.method === "OPTIONS" ? {} : CORS),
150
+ },
151
+ body: test.body ? JSON.stringify(test.body) : undefined,
152
+ });
153
+ const duration = Date.now() - start;
154
+ const success = response.status === test.expectedStatus;
155
+ // Try to parse response body for details
156
+ let responseBody;
157
+ const textBody = await response.text();
158
+ try {
159
+ responseBody = JSON.parse(textBody);
160
+ }
161
+ catch {
162
+ responseBody = textBody;
163
+ }
164
+ tests.push({
165
+ method: test.method,
166
+ path: test.path,
167
+ statusCode: response.status,
168
+ response: responseBody,
169
+ duration,
170
+ });
171
+ results.push({
172
+ name: test.name,
173
+ category: "endpoint",
174
+ status: success ? "pass" : "fail",
175
+ message: success
176
+ ? `${response.status} OK`
177
+ : `Expected ${test.expectedStatus}, got ${response.status}`,
178
+ details: {
179
+ responseBody,
180
+ duration: `${duration}ms`,
181
+ },
182
+ duration,
183
+ });
184
+ }
185
+ catch (error) {
186
+ const errorMessage = error instanceof Error ? error.message : String(error);
187
+ const duration = Date.now() - start;
188
+ tests.push({
189
+ method: test.method,
190
+ path: test.path,
191
+ statusCode: 0,
192
+ duration,
193
+ });
194
+ results.push({
195
+ name: test.name,
196
+ category: "endpoint",
197
+ status: "fail",
198
+ message: `Request failed: ${errorMessage}`,
199
+ error: errorMessage,
200
+ duration,
201
+ });
202
+ }
203
+ }
204
+ return { tests, results };
205
+ }
206
+ /**
207
+ * Quick health check for endpoints
208
+ */
209
+ export async function quickHealthCheck(port) {
210
+ const endpoints = [];
211
+ const checks = [
212
+ { method: "GET", path: "/push-token" },
213
+ { method: "GET", path: "/tunnel" },
214
+ ];
215
+ for (const check of checks) {
216
+ try {
217
+ const response = await fetch(`http://127.0.0.1:${port}${check.path}`, {
218
+ method: check.method,
219
+ });
220
+ if (response.status < 500) {
221
+ endpoints.push(`${check.method} ${check.path}`);
222
+ }
223
+ }
224
+ catch {
225
+ // Endpoint not available
226
+ }
227
+ }
228
+ return {
229
+ healthy: endpoints.length === checks.length,
230
+ endpoints,
231
+ };
232
+ }
233
+ //# sourceMappingURL=endpoint-tester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint-tester.js","sourceRoot":"","sources":["../../../src/cli/endpoint-tester.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CLI audit command - main entry point for npx audit
3
+ */
4
+ import type { AuditOptions } from "./types.js";
5
+ /**
6
+ * Parse command line arguments
7
+ */
8
+ export declare function parseArgs(args: string[]): AuditOptions;
9
+ /**
10
+ * Show help message
11
+ */
12
+ export declare function showHelp(): void;
13
+ /**
14
+ * Main CLI entry point
15
+ */
16
+ export declare function main(args?: string[]): Promise<void>;
17
+ export { runAudit } from "./test-runner.js";
18
+ export { generateConsoleReport, generateJsonReport } from "./report.js";
19
+ export type { AuditOptions, AuditReport, TestResult } from "./types.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAuEtD;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAsC/B;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChF;AAGD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * CLI audit command - main entry point for npx audit
3
+ */
4
+ import { runAudit } from "./test-runner.js";
5
+ import { printReport } from "./report.js";
6
+ /**
7
+ * Parse command line arguments
8
+ */
9
+ export function parseArgs(args) {
10
+ const options = {
11
+ port: 4096,
12
+ proxyPort: 4097,
13
+ timeout: 60000,
14
+ cleanup: true,
15
+ };
16
+ for (let i = 0; i < args.length; i++) {
17
+ const arg = args[i];
18
+ if (arg.startsWith("--")) {
19
+ const key = arg.slice(2).toLowerCase();
20
+ // Boolean flags
21
+ if (["tunnel-only", "tunnelOnly"].includes(key)) {
22
+ options.tunnelOnly = true;
23
+ }
24
+ else if (["endpoints-only", "endpointsOnly"].includes(key)) {
25
+ options.endpointsOnly = true;
26
+ }
27
+ else if (["push-only", "pushOnly"].includes(key)) {
28
+ options.pushOnly = true;
29
+ }
30
+ else if (["json"].includes(key)) {
31
+ options.json = true;
32
+ }
33
+ else if (["verbose"].includes(key)) {
34
+ options.verbose = true;
35
+ }
36
+ else if (["cleanup"].includes(key)) {
37
+ options.cleanup = true;
38
+ }
39
+ else if (["no-cleanup"].includes(key)) {
40
+ options.cleanup = false;
41
+ }
42
+ else if (["help", "h"].includes(key)) {
43
+ return { ...options, help: true };
44
+ }
45
+ else if (key === "port" && i + 1 < args.length) {
46
+ i++;
47
+ options.port = parseInt(args[i], 10);
48
+ }
49
+ else if (key === "connect" && i + 1 < args.length) {
50
+ i++;
51
+ options.connect = args[i];
52
+ }
53
+ else if (key === "timeout" && i + 1 < args.length) {
54
+ i++;
55
+ options.timeout = parseInt(args[i], 10);
56
+ }
57
+ }
58
+ else if (arg.startsWith("-")) {
59
+ const shortFlags = arg.slice(1).split("");
60
+ for (const short of shortFlags) {
61
+ switch (short) {
62
+ case "t":
63
+ options.tunnelOnly = true;
64
+ break;
65
+ case "e":
66
+ options.endpointsOnly = true;
67
+ break;
68
+ case "p":
69
+ options.pushOnly = true;
70
+ break;
71
+ case "j":
72
+ options.json = true;
73
+ break;
74
+ case "v":
75
+ options.verbose = true;
76
+ break;
77
+ case "c":
78
+ options.cleanup = false;
79
+ break;
80
+ case "h":
81
+ return { ...options, help: true };
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return options;
87
+ }
88
+ /**
89
+ * Show help message
90
+ */
91
+ export function showHelp() {
92
+ console.log(`
93
+ OpenCode Mobile Plugin - Endpoint Audit Utility
94
+
95
+ USAGE:
96
+ npx opencode-mobile audit [OPTIONS]
97
+
98
+ OPTIONS:
99
+ -t, --tunnel-only Test only tunnel providers
100
+ -e, --endpoints-only Test only API endpoints
101
+ -p, --push-only Test only push notifications
102
+ -j, --json Output results as JSON
103
+ -v, --verbose Show detailed output
104
+ -c, --no-cleanup Don't stop servers/tunnels after testing
105
+ --connect HOST:PORT Connect to existing server instead of starting new
106
+ --port PORT Server port to use (default: 4096)
107
+ --timeout MS Request timeout in milliseconds (default: 60000)
108
+ -h, --help Show this help message
109
+
110
+ EXAMPLES:
111
+ npx opencode-mobile audit # Full audit
112
+ npx opencode-mobile audit --tunnel-only # Test only tunnels
113
+ npx opencode-mobile audit -j --verbose # JSON output with details
114
+ npx opencode-mobile audit --connect localhost:4096 # Test existing server
115
+
116
+ OUTPUT:
117
+ The audit tests:
118
+ - Server health and CORS configuration
119
+ - All API endpoints (push-token, tunnel)
120
+ - Tunnel providers (ngrok, cloudflare, localtunnel)
121
+ - Push notification system (token store, Expo API)
122
+
123
+ Results include:
124
+ - Pass/fail/skip status for each test
125
+ - Response times and error messages
126
+ - Recommendations for fixes
127
+ - Overall health score
128
+ `);
129
+ }
130
+ /**
131
+ * Main CLI entry point
132
+ */
133
+ export async function main(args = process.argv.slice(2)) {
134
+ const options = parseArgs(args);
135
+ if (options.help) {
136
+ showHelp();
137
+ return;
138
+ }
139
+ console.log("");
140
+ console.log("=".repeat(60));
141
+ console.log(" OpenCode Mobile Plugin - Endpoint Audit");
142
+ console.log("=".repeat(60));
143
+ console.log("");
144
+ try {
145
+ const report = await runAudit(options);
146
+ console.log("");
147
+ console.log("=".repeat(60));
148
+ console.log(" AUDIT RESULTS");
149
+ console.log("=".repeat(60));
150
+ console.log("");
151
+ printReport(report, options.json || false);
152
+ // Exit with error code if tests failed
153
+ if (report.summary.failed > 0) {
154
+ process.exit(1);
155
+ }
156
+ }
157
+ catch (error) {
158
+ const errorMessage = error instanceof Error ? error.message : String(error);
159
+ console.error(`\n❌ Audit failed: ${errorMessage}`);
160
+ process.exit(1);
161
+ }
162
+ }
163
+ // Export for programmatic use
164
+ export { runAudit } from "./test-runner.js";
165
+ export { generateConsoleReport, generateJsonReport } from "./report.js";
166
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Push notification tester - token store and Expo API
3
+ */
4
+ import type { AuditOptions, PushTestResult, TestResult } from "./types.js";
5
+ /**
6
+ * Test push notification functionality
7
+ */
8
+ export declare function testPush(_options: AuditOptions): Promise<{
9
+ result: PushTestResult;
10
+ results: TestResult[];
11
+ }>;
12
+ /**
13
+ * Generate push notification recommendations
14
+ */
15
+ export declare function getPushRecommendations(result: PushTestResult): string[];
16
+ //# sourceMappingURL=push-tester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-tester.d.ts","sourceRoot":"","sources":["../../../src/cli/push-tester.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AAKpB;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,CAuQ5D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAwCvE"}