@ripeseed/rs-tunnel 0.1.2

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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/commands/doctor.d.ts +1 -0
  4. package/dist/commands/doctor.js +20 -0
  5. package/dist/commands/doctor.js.map +1 -0
  6. package/dist/commands/list.d.ts +1 -0
  7. package/dist/commands/list.js +18 -0
  8. package/dist/commands/list.js.map +1 -0
  9. package/dist/commands/login.d.ts +1 -0
  10. package/dist/commands/login.js +45 -0
  11. package/dist/commands/login.js.map +1 -0
  12. package/dist/commands/logout.d.ts +1 -0
  13. package/dist/commands/logout.js +19 -0
  14. package/dist/commands/logout.js.map +1 -0
  15. package/dist/commands/stop.d.ts +1 -0
  16. package/dist/commands/stop.js +15 -0
  17. package/dist/commands/stop.js.map +1 -0
  18. package/dist/commands/up.d.ts +32 -0
  19. package/dist/commands/up.js +319 -0
  20. package/dist/commands/up.js.map +1 -0
  21. package/dist/commands/up.test.d.ts +1 -0
  22. package/dist/commands/up.test.js +467 -0
  23. package/dist/commands/up.test.js.map +1 -0
  24. package/dist/config.d.ts +10 -0
  25. package/dist/config.js +135 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/config.test.d.ts +1 -0
  28. package/dist/config.test.js +67 -0
  29. package/dist/config.test.js.map +1 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.js +75 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/lib/api-client.d.ts +73 -0
  34. package/dist/lib/api-client.js +146 -0
  35. package/dist/lib/api-client.js.map +1 -0
  36. package/dist/lib/cloudflared.d.ts +3 -0
  37. package/dist/lib/cloudflared.js +165 -0
  38. package/dist/lib/cloudflared.js.map +1 -0
  39. package/dist/lib/local-callback.d.ts +9 -0
  40. package/dist/lib/local-callback.js +68 -0
  41. package/dist/lib/local-callback.js.map +1 -0
  42. package/dist/lib/local-proxy.d.ts +27 -0
  43. package/dist/lib/local-proxy.js +200 -0
  44. package/dist/lib/local-proxy.js.map +1 -0
  45. package/dist/lib/local-proxy.test.d.ts +1 -0
  46. package/dist/lib/local-proxy.test.js +181 -0
  47. package/dist/lib/local-proxy.test.js.map +1 -0
  48. package/dist/lib/pkce.d.ts +4 -0
  49. package/dist/lib/pkce.js +10 -0
  50. package/dist/lib/pkce.js.map +1 -0
  51. package/dist/lib/session.d.ts +4 -0
  52. package/dist/lib/session.js +47 -0
  53. package/dist/lib/session.js.map +1 -0
  54. package/dist/lib/tunnel-stats.d.ts +19 -0
  55. package/dist/lib/tunnel-stats.js +75 -0
  56. package/dist/lib/tunnel-stats.js.map +1 -0
  57. package/dist/lib/tunnel-stats.test.d.ts +1 -0
  58. package/dist/lib/tunnel-stats.test.js +44 -0
  59. package/dist/lib/tunnel-stats.test.js.map +1 -0
  60. package/dist/lib/up-dashboard.d.ts +19 -0
  61. package/dist/lib/up-dashboard.js +170 -0
  62. package/dist/lib/up-dashboard.js.map +1 -0
  63. package/dist/lib/version.d.ts +1 -0
  64. package/dist/lib/version.js +18 -0
  65. package/dist/lib/version.js.map +1 -0
  66. package/dist/store/credentials.d.ts +4 -0
  67. package/dist/store/credentials.js +99 -0
  68. package/dist/store/credentials.js.map +1 -0
  69. package/dist/types.d.ts +10 -0
  70. package/dist/types.js +2 -0
  71. package/dist/types.js.map +1 -0
  72. package/package.json +51 -0
@@ -0,0 +1,467 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { PassThrough } from 'node:stream';
3
+ import { describe, expect, it, vi } from 'vitest';
4
+ import { upCommand } from './up.js';
5
+ import { ApiClientError } from '../lib/api-client.js';
6
+ function createFakeChildProcess() {
7
+ const child = new EventEmitter();
8
+ child.stdout = new PassThrough();
9
+ child.stderr = new PassThrough();
10
+ child.kill = vi.fn(() => true);
11
+ return child;
12
+ }
13
+ function createProcessRef() {
14
+ const listeners = new Map();
15
+ const processRef = {
16
+ once: vi.fn((event, handler) => {
17
+ listeners.set(event, handler);
18
+ return processRef;
19
+ }),
20
+ removeListener: vi.fn((event, handler) => {
21
+ if (listeners.get(event) === handler) {
22
+ listeners.delete(event);
23
+ }
24
+ return processRef;
25
+ }),
26
+ exit: vi.fn(),
27
+ stderr: {
28
+ write: vi.fn(),
29
+ },
30
+ };
31
+ return {
32
+ processRef,
33
+ listeners,
34
+ };
35
+ }
36
+ describe('upCommand', () => {
37
+ it('ships telemetry with sanitized paths', async () => {
38
+ const child = createFakeChildProcess();
39
+ const proxyStop = vi.fn(async () => { });
40
+ const dashboard = {
41
+ setRegion: vi.fn(),
42
+ setMetrics: vi.fn(),
43
+ addRequest: vi.fn(),
44
+ addCloudflaredLine: vi.fn(),
45
+ addMessage: vi.fn(),
46
+ stop: vi.fn(),
47
+ };
48
+ const apiClient = {
49
+ refreshTokens: vi.fn(),
50
+ createTunnel: vi.fn(async () => ({
51
+ tunnelId: 'tunnel-id',
52
+ hostname: 'demo.tunnel.example.com',
53
+ cloudflaredToken: 'cf-token',
54
+ heartbeatIntervalSec: 20,
55
+ })),
56
+ stopTunnel: vi.fn(async () => { }),
57
+ heartbeat: vi.fn(async () => ({ expiresAt: '2026-01-01T00:00:00.000Z' })),
58
+ ingestTelemetry: vi.fn(async () => { }),
59
+ };
60
+ const { processRef } = createProcessRef();
61
+ let proxyInput;
62
+ const startLocalProxy = vi.fn(async (input) => {
63
+ proxyInput = input;
64
+ return {
65
+ port: 4545,
66
+ stop: proxyStop,
67
+ };
68
+ });
69
+ const intervalCallbacks = [];
70
+ const setIntervalFn = vi.fn((fn, ms) => {
71
+ intervalCallbacks.push({ fn, ms });
72
+ return intervalCallbacks.length;
73
+ });
74
+ const runPromise = upCommand({ port: 3000, url: 'demo', verbose: false }, {
75
+ createApiClient: () => apiClient,
76
+ requireSession: vi.fn(async () => ({
77
+ accessToken: 'access',
78
+ refreshToken: 'refresh',
79
+ expiresAtEpochSec: 1,
80
+ profile: {
81
+ email: 'osama@example.com',
82
+ slackUserId: 'U1',
83
+ slackTeamId: 'TRIPESEED',
84
+ },
85
+ })),
86
+ saveSession: vi.fn(async () => { }),
87
+ ensureCloudflaredInstalled: vi.fn(async () => '/usr/local/bin/cloudflared'),
88
+ startLocalProxy,
89
+ createUpDashboard: vi.fn(() => dashboard),
90
+ getCliVersion: vi.fn(() => '0.1.0'),
91
+ spawn: vi.fn(() => child),
92
+ processRef: processRef,
93
+ setInterval: setIntervalFn,
94
+ clearInterval: vi.fn(),
95
+ });
96
+ await new Promise((resolve) => setImmediate(resolve));
97
+ if (!proxyInput?.onRequest) {
98
+ throw new Error('Expected onRequest callback to be registered.');
99
+ }
100
+ proxyInput.onRequest({
101
+ startedAtEpochMs: 1700000000000,
102
+ method: 'GET',
103
+ path: '/foo/bar?token=secret',
104
+ statusCode: 200,
105
+ statusMessage: 'OK',
106
+ durationMs: 12.3,
107
+ responseBytes: 42,
108
+ error: false,
109
+ protocol: 'http',
110
+ });
111
+ const telemetryInterval = intervalCallbacks.find((interval) => interval.ms === 2000);
112
+ if (!telemetryInterval) {
113
+ throw new Error('Expected telemetry interval to be registered.');
114
+ }
115
+ telemetryInterval.fn();
116
+ await new Promise((resolve) => setImmediate(resolve));
117
+ expect(apiClient.ingestTelemetry).toHaveBeenCalledTimes(1);
118
+ const payload = apiClient.ingestTelemetry.mock.calls[0]?.[2];
119
+ expect(payload.metrics.requests).toBe(1);
120
+ expect(payload.metrics.errors).toBe(0);
121
+ expect(payload.metrics.bytes).toBe(42);
122
+ expect(payload.requests[0]?.path).toBe('/foo/bar');
123
+ child.emit('exit', 0);
124
+ await runPromise;
125
+ });
126
+ it('disables telemetry when server does not support it', async () => {
127
+ const child = createFakeChildProcess();
128
+ const dashboard = {
129
+ setRegion: vi.fn(),
130
+ setMetrics: vi.fn(),
131
+ addRequest: vi.fn(),
132
+ addCloudflaredLine: vi.fn(),
133
+ addMessage: vi.fn(),
134
+ stop: vi.fn(),
135
+ };
136
+ const apiClient = {
137
+ refreshTokens: vi.fn(),
138
+ createTunnel: vi.fn(async () => ({
139
+ tunnelId: 'tunnel-id',
140
+ hostname: 'demo.tunnel.example.com',
141
+ cloudflaredToken: 'cf-token',
142
+ heartbeatIntervalSec: 20,
143
+ })),
144
+ stopTunnel: vi.fn(async () => { }),
145
+ heartbeat: vi.fn(async () => ({ expiresAt: '2026-01-01T00:00:00.000Z' })),
146
+ ingestTelemetry: vi.fn(async () => {
147
+ throw new ApiClientError(404, 'NOT_FOUND', 'missing');
148
+ }),
149
+ };
150
+ const { processRef } = createProcessRef();
151
+ const intervalCallbacks = [];
152
+ const setIntervalFn = vi.fn((fn, ms) => {
153
+ intervalCallbacks.push({ fn, ms });
154
+ return intervalCallbacks.length;
155
+ });
156
+ const clearIntervalFn = vi.fn();
157
+ const runPromise = upCommand({ port: 3000, url: 'demo', verbose: false }, {
158
+ createApiClient: () => apiClient,
159
+ requireSession: vi.fn(async () => ({
160
+ accessToken: 'access',
161
+ refreshToken: 'refresh',
162
+ expiresAtEpochSec: 1,
163
+ profile: {
164
+ email: 'osama@example.com',
165
+ slackUserId: 'U1',
166
+ slackTeamId: 'TRIPESEED',
167
+ },
168
+ })),
169
+ saveSession: vi.fn(async () => { }),
170
+ ensureCloudflaredInstalled: vi.fn(async () => '/usr/local/bin/cloudflared'),
171
+ startLocalProxy: vi.fn(async () => ({
172
+ port: 4545,
173
+ stop: vi.fn(async () => { }),
174
+ })),
175
+ createUpDashboard: vi.fn(() => dashboard),
176
+ getCliVersion: vi.fn(() => '0.1.0'),
177
+ spawn: vi.fn(() => child),
178
+ processRef: processRef,
179
+ setInterval: setIntervalFn,
180
+ clearInterval: clearIntervalFn,
181
+ });
182
+ await new Promise((resolve) => setImmediate(resolve));
183
+ const telemetryInterval = intervalCallbacks.find((interval) => interval.ms === 2000);
184
+ if (!telemetryInterval) {
185
+ throw new Error('Expected telemetry interval to be registered.');
186
+ }
187
+ telemetryInterval.fn();
188
+ await new Promise((resolve) => setImmediate(resolve));
189
+ expect(clearIntervalFn).toHaveBeenCalled();
190
+ expect(dashboard.addMessage).toHaveBeenCalledWith(expect.stringMatching(/telemetry disabled/i));
191
+ child.emit('exit', 0);
192
+ await runPromise;
193
+ });
194
+ it('prints heartbeat API status and code when heartbeat fails', async () => {
195
+ const child = createFakeChildProcess();
196
+ const dashboard = {
197
+ setRegion: vi.fn(),
198
+ setMetrics: vi.fn(),
199
+ addRequest: vi.fn(),
200
+ addCloudflaredLine: vi.fn(),
201
+ addMessage: vi.fn(),
202
+ stop: vi.fn(),
203
+ };
204
+ const apiClient = {
205
+ refreshTokens: vi.fn(),
206
+ createTunnel: vi.fn(async () => ({
207
+ tunnelId: 'tunnel-id',
208
+ hostname: 'demo.tunnel.example.com',
209
+ cloudflaredToken: 'cf-token',
210
+ heartbeatIntervalSec: 20,
211
+ })),
212
+ stopTunnel: vi.fn(async () => { }),
213
+ heartbeat: vi.fn(async () => {
214
+ throw new ApiClientError(500, 'INTERNAL_ERROR', 'Unexpected server error');
215
+ }),
216
+ ingestTelemetry: vi.fn(async () => { }),
217
+ };
218
+ const { processRef } = createProcessRef();
219
+ const intervalCallbacks = [];
220
+ const setIntervalFn = vi.fn((fn, ms) => {
221
+ intervalCallbacks.push({ fn, ms });
222
+ return intervalCallbacks.length;
223
+ });
224
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
225
+ const runPromise = upCommand({ port: 3000, url: 'demo', verbose: false }, {
226
+ createApiClient: () => apiClient,
227
+ requireSession: vi.fn(async () => ({
228
+ accessToken: 'access',
229
+ refreshToken: 'refresh',
230
+ expiresAtEpochSec: 1,
231
+ profile: {
232
+ email: 'osama@example.com',
233
+ slackUserId: 'U1',
234
+ slackTeamId: 'TRIPESEED',
235
+ },
236
+ })),
237
+ saveSession: vi.fn(async () => { }),
238
+ ensureCloudflaredInstalled: vi.fn(async () => '/usr/local/bin/cloudflared'),
239
+ startLocalProxy: vi.fn(async () => ({
240
+ port: 4545,
241
+ stop: vi.fn(async () => { }),
242
+ })),
243
+ createUpDashboard: vi.fn(() => dashboard),
244
+ getCliVersion: vi.fn(() => '0.1.0'),
245
+ spawn: vi.fn(() => child),
246
+ processRef: processRef,
247
+ setInterval: setIntervalFn,
248
+ clearInterval: vi.fn(),
249
+ });
250
+ await new Promise((resolve) => setImmediate(resolve));
251
+ const heartbeatInterval = intervalCallbacks.find((interval) => interval.ms === 20_000);
252
+ if (!heartbeatInterval) {
253
+ throw new Error('Expected heartbeat interval to be registered.');
254
+ }
255
+ heartbeatInterval.fn();
256
+ await new Promise((resolve) => setImmediate(resolve));
257
+ expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('Heartbeat failed (status=500, code=INTERNAL_ERROR): Unexpected server error'));
258
+ errorSpy.mockRestore();
259
+ child.emit('exit', 0);
260
+ await runPromise;
261
+ });
262
+ it('creates tunnel using local proxy port and initializes dashboard fields', async () => {
263
+ const child = createFakeChildProcess();
264
+ const proxyStop = vi.fn(async () => { });
265
+ const dashboard = {
266
+ setRegion: vi.fn(),
267
+ setMetrics: vi.fn(),
268
+ addRequest: vi.fn(),
269
+ addCloudflaredLine: vi.fn(),
270
+ addMessage: vi.fn(),
271
+ stop: vi.fn(),
272
+ };
273
+ const apiClient = {
274
+ refreshTokens: vi.fn(),
275
+ createTunnel: vi.fn(async () => ({
276
+ tunnelId: 'tunnel-id',
277
+ hostname: 'demo.tunnel.example.com',
278
+ cloudflaredToken: 'cf-token',
279
+ heartbeatIntervalSec: 20,
280
+ })),
281
+ stopTunnel: vi.fn(async () => { }),
282
+ heartbeat: vi.fn(async () => ({ expiresAt: '2026-01-01T00:00:00.000Z' })),
283
+ };
284
+ const { processRef } = createProcessRef();
285
+ const startLocalProxy = vi.fn(async () => ({
286
+ port: 4545,
287
+ stop: proxyStop,
288
+ }));
289
+ const createUpDashboard = vi.fn(() => dashboard);
290
+ const spawnFn = vi.fn(() => {
291
+ setImmediate(() => {
292
+ child.emit('exit', 0);
293
+ });
294
+ return child;
295
+ });
296
+ await upCommand({ port: 3000, url: 'demo', verbose: false }, {
297
+ createApiClient: () => apiClient,
298
+ requireSession: vi.fn(async () => ({
299
+ accessToken: 'access',
300
+ refreshToken: 'refresh',
301
+ expiresAtEpochSec: 1,
302
+ profile: {
303
+ email: 'osama@example.com',
304
+ slackUserId: 'U1',
305
+ slackTeamId: 'TRIPESEED',
306
+ },
307
+ })),
308
+ saveSession: vi.fn(async () => { }),
309
+ ensureCloudflaredInstalled: vi.fn(async () => '/usr/local/bin/cloudflared'),
310
+ startLocalProxy,
311
+ createUpDashboard,
312
+ getCliVersion: vi.fn(() => '0.1.0'),
313
+ spawn: spawnFn,
314
+ processRef: processRef,
315
+ setInterval: vi.fn(() => 1),
316
+ clearInterval: vi.fn(),
317
+ });
318
+ expect(startLocalProxy).toHaveBeenCalledWith(expect.objectContaining({
319
+ targetPort: 3000,
320
+ }));
321
+ expect(apiClient.createTunnel).toHaveBeenCalledWith('access', expect.objectContaining({
322
+ port: 4545,
323
+ requestedSlug: 'demo',
324
+ }));
325
+ expect(createUpDashboard).toHaveBeenCalledWith({
326
+ account: 'osama@example.com',
327
+ version: '0.1.0',
328
+ forwarding: 'https://demo.tunnel.example.com -> http://localhost:3000',
329
+ verbose: false,
330
+ });
331
+ expect(dashboard.setMetrics).toHaveBeenCalled();
332
+ expect(processRef.exit.mock.calls[0]?.[0]).toBe(0);
333
+ expect(proxyStop).toHaveBeenCalledTimes(1);
334
+ expect(apiClient.stopTunnel).toHaveBeenCalledWith('access', 'tunnel-id');
335
+ expect(spawnFn).toHaveBeenCalled();
336
+ });
337
+ it('emits raw cloudflared lines only when verbose mode is enabled', async () => {
338
+ const runCase = async (verbose) => {
339
+ const child = createFakeChildProcess();
340
+ const dashboard = {
341
+ setRegion: vi.fn(),
342
+ setMetrics: vi.fn(),
343
+ addRequest: vi.fn(),
344
+ addCloudflaredLine: vi.fn(),
345
+ addMessage: vi.fn(),
346
+ stop: vi.fn(),
347
+ };
348
+ const apiClient = {
349
+ refreshTokens: vi.fn(),
350
+ createTunnel: vi.fn(async () => ({
351
+ tunnelId: 'tunnel-id',
352
+ hostname: 'demo.tunnel.example.com',
353
+ cloudflaredToken: 'cf-token',
354
+ heartbeatIntervalSec: 20,
355
+ })),
356
+ stopTunnel: vi.fn(async () => { }),
357
+ heartbeat: vi.fn(async () => ({ expiresAt: '2026-01-01T00:00:00.000Z' })),
358
+ };
359
+ const { processRef } = createProcessRef();
360
+ const spawnFn = vi.fn(() => {
361
+ setImmediate(() => {
362
+ child.stderr.write('location=iad\n');
363
+ child.stderr.end();
364
+ child.emit('exit', 0);
365
+ });
366
+ return child;
367
+ });
368
+ await upCommand({ port: 3000, verbose }, {
369
+ createApiClient: () => apiClient,
370
+ requireSession: vi.fn(async () => ({
371
+ accessToken: 'access',
372
+ refreshToken: 'refresh',
373
+ expiresAtEpochSec: 1,
374
+ profile: {
375
+ email: 'osama@example.com',
376
+ slackUserId: 'U1',
377
+ slackTeamId: 'TRIPESEED',
378
+ },
379
+ })),
380
+ saveSession: vi.fn(async () => { }),
381
+ ensureCloudflaredInstalled: vi.fn(async () => '/usr/local/bin/cloudflared'),
382
+ startLocalProxy: vi.fn(async () => ({
383
+ port: 4545,
384
+ stop: vi.fn(async () => { }),
385
+ })),
386
+ createUpDashboard: vi.fn(() => dashboard),
387
+ getCliVersion: vi.fn(() => '0.1.0'),
388
+ spawn: spawnFn,
389
+ processRef: processRef,
390
+ setInterval: vi.fn(() => 1),
391
+ clearInterval: vi.fn(),
392
+ });
393
+ expect(dashboard.setRegion).toHaveBeenCalledWith('IAD');
394
+ return dashboard.addCloudflaredLine.mock.calls.length;
395
+ };
396
+ expect(await runCase(false)).toBe(0);
397
+ expect(await runCase(true)).toBeGreaterThan(0);
398
+ });
399
+ it('cleans up resources and kills child process on SIGINT', async () => {
400
+ const child = createFakeChildProcess();
401
+ const proxyStop = vi.fn(async () => { });
402
+ const dashboard = {
403
+ setRegion: vi.fn(),
404
+ setMetrics: vi.fn(),
405
+ addRequest: vi.fn(),
406
+ addCloudflaredLine: vi.fn(),
407
+ addMessage: vi.fn(),
408
+ stop: vi.fn(),
409
+ };
410
+ const apiClient = {
411
+ refreshTokens: vi.fn(),
412
+ createTunnel: vi.fn(async () => ({
413
+ tunnelId: 'tunnel-id',
414
+ hostname: 'demo.tunnel.example.com',
415
+ cloudflaredToken: 'cf-token',
416
+ heartbeatIntervalSec: 20,
417
+ })),
418
+ stopTunnel: vi.fn(async () => { }),
419
+ heartbeat: vi.fn(async () => ({ expiresAt: '2026-01-01T00:00:00.000Z' })),
420
+ };
421
+ const { processRef, listeners } = createProcessRef();
422
+ child.kill = vi.fn((signal) => {
423
+ setImmediate(() => {
424
+ child.emit('exit', signal === 'SIGINT' ? 130 : 0);
425
+ });
426
+ return true;
427
+ });
428
+ const runPromise = upCommand({ port: 3000, verbose: false }, {
429
+ createApiClient: () => apiClient,
430
+ requireSession: vi.fn(async () => ({
431
+ accessToken: 'access',
432
+ refreshToken: 'refresh',
433
+ expiresAtEpochSec: 1,
434
+ profile: {
435
+ email: 'osama@example.com',
436
+ slackUserId: 'U1',
437
+ slackTeamId: 'TRIPESEED',
438
+ },
439
+ })),
440
+ saveSession: vi.fn(async () => { }),
441
+ ensureCloudflaredInstalled: vi.fn(async () => '/usr/local/bin/cloudflared'),
442
+ startLocalProxy: vi.fn(async () => ({
443
+ port: 4545,
444
+ stop: proxyStop,
445
+ })),
446
+ createUpDashboard: vi.fn(() => dashboard),
447
+ getCliVersion: vi.fn(() => '0.1.0'),
448
+ spawn: vi.fn(() => child),
449
+ processRef: processRef,
450
+ setInterval: vi.fn(() => 1),
451
+ clearInterval: vi.fn(),
452
+ });
453
+ await new Promise((resolve) => setImmediate(resolve));
454
+ const sigintHandler = listeners.get('SIGINT');
455
+ if (!sigintHandler) {
456
+ throw new Error('Expected SIGINT handler to be registered.');
457
+ }
458
+ sigintHandler();
459
+ await runPromise;
460
+ expect(child.kill).toHaveBeenCalledWith('SIGINT');
461
+ expect(apiClient.stopTunnel).toHaveBeenCalledTimes(1);
462
+ expect(proxyStop).toHaveBeenCalledTimes(1);
463
+ expect(dashboard.stop).toHaveBeenCalledTimes(1);
464
+ expect(processRef.exit.mock.calls[0]?.[0]).toBe(130);
465
+ });
466
+ });
467
+ //# sourceMappingURL=up.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"up.test.js","sourceRoot":"","sources":["../../src/commands/up.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { CliConfig } from './types.js';
2
+ export declare const DEFAULT_API_BASE_URL = "http://localhost:8080";
3
+ export declare function setApiBaseUrlOverride(value?: string): void;
4
+ export declare function getCliConfigPath(): string;
5
+ export declare function ensureApiBaseUrlConfigured(domainOption?: string): Promise<string>;
6
+ export declare function getCliConfig(): CliConfig;
7
+ export declare function getCliHomeDir(): string;
8
+ export declare function getFallbackSessionPath(): string;
9
+ export declare function getFallbackKeyPath(): string;
10
+ export declare function getBundledBinDir(): string;
package/dist/config.js ADDED
@@ -0,0 +1,135 @@
1
+ import os from 'node:os';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import fsPromises from 'node:fs/promises';
5
+ import { createInterface } from 'node:readline/promises';
6
+ function stripTrailingSlash(value) {
7
+ return value.endsWith('/') ? value.replace(/\/+$/, '') : value;
8
+ }
9
+ function normalizeApiBaseUrl(value, source) {
10
+ const trimmed = value.trim();
11
+ if (!trimmed) {
12
+ throw new Error(`Invalid API base URL from ${source}: value is empty.`);
13
+ }
14
+ let parsed;
15
+ try {
16
+ parsed = new URL(trimmed);
17
+ }
18
+ catch {
19
+ throw new Error(`Invalid API base URL from ${source}: "${value}". Expected absolute URL like https://api.example.com.`);
20
+ }
21
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
22
+ throw new Error(`Invalid API base URL from ${source}: protocol must be http or https.`);
23
+ }
24
+ return stripTrailingSlash(parsed.toString());
25
+ }
26
+ export const DEFAULT_API_BASE_URL = 'http://localhost:8080';
27
+ const CLI_CONFIG_FILENAME = 'config.json';
28
+ let apiBaseUrlOverride;
29
+ export function setApiBaseUrlOverride(value) {
30
+ apiBaseUrlOverride = value ? normalizeApiBaseUrl(value, '--domain') : undefined;
31
+ }
32
+ function getApiBaseUrlFromEnv() {
33
+ const apiUrl = process.env.RS_TUNNEL_API_URL;
34
+ if (apiUrl) {
35
+ return normalizeApiBaseUrl(apiUrl, 'RS_TUNNEL_API_URL');
36
+ }
37
+ const legacyApiBaseUrl = process.env.RS_TUNNEL_API_BASE_URL;
38
+ if (legacyApiBaseUrl) {
39
+ return normalizeApiBaseUrl(legacyApiBaseUrl, 'RS_TUNNEL_API_BASE_URL');
40
+ }
41
+ return undefined;
42
+ }
43
+ export function getCliConfigPath() {
44
+ return path.join(getCliHomeDir(), CLI_CONFIG_FILENAME);
45
+ }
46
+ function readApiBaseUrlFromLocalConfig() {
47
+ try {
48
+ const raw = fs.readFileSync(getCliConfigPath(), 'utf8');
49
+ const parsed = JSON.parse(raw);
50
+ if (!parsed.apiBaseUrl) {
51
+ return undefined;
52
+ }
53
+ return normalizeApiBaseUrl(parsed.apiBaseUrl, getCliConfigPath());
54
+ }
55
+ catch {
56
+ return undefined;
57
+ }
58
+ }
59
+ async function saveApiBaseUrlToLocalConfig(apiBaseUrl) {
60
+ const homeDir = getCliHomeDir();
61
+ await fsPromises.mkdir(homeDir, { recursive: true, mode: 0o700 });
62
+ const payload = { apiBaseUrl };
63
+ await fsPromises.writeFile(getCliConfigPath(), `${JSON.stringify(payload, null, 2)}\n`, {
64
+ mode: 0o600,
65
+ });
66
+ }
67
+ export async function ensureApiBaseUrlConfigured(domainOption) {
68
+ if (domainOption) {
69
+ const normalized = normalizeApiBaseUrl(domainOption, '--domain');
70
+ await saveApiBaseUrlToLocalConfig(normalized);
71
+ setApiBaseUrlOverride(normalized);
72
+ return normalized;
73
+ }
74
+ const envApiBaseUrl = getApiBaseUrlFromEnv();
75
+ if (envApiBaseUrl) {
76
+ setApiBaseUrlOverride(envApiBaseUrl);
77
+ return envApiBaseUrl;
78
+ }
79
+ const localApiBaseUrl = readApiBaseUrlFromLocalConfig();
80
+ if (localApiBaseUrl) {
81
+ setApiBaseUrlOverride(localApiBaseUrl);
82
+ return localApiBaseUrl;
83
+ }
84
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
85
+ throw new Error('No API domain configured. Re-run with --domain <url> or set RS_TUNNEL_API_URL in your environment.');
86
+ }
87
+ const prompt = createInterface({
88
+ input: process.stdin,
89
+ output: process.stdout,
90
+ });
91
+ try {
92
+ console.log('No API domain configured for rs-tunnel.');
93
+ const answer = await prompt.question(`Enter your API domain (press Enter for ${DEFAULT_API_BASE_URL}): `);
94
+ const normalized = normalizeApiBaseUrl(answer.trim() || DEFAULT_API_BASE_URL, 'interactive prompt');
95
+ await saveApiBaseUrlToLocalConfig(normalized);
96
+ setApiBaseUrlOverride(normalized);
97
+ console.log(`Saved API domain to ${getCliConfigPath()}`);
98
+ return normalized;
99
+ }
100
+ finally {
101
+ prompt.close();
102
+ }
103
+ }
104
+ function resolveApiBaseUrl() {
105
+ if (apiBaseUrlOverride) {
106
+ return apiBaseUrlOverride;
107
+ }
108
+ const envApiBaseUrl = getApiBaseUrlFromEnv();
109
+ if (envApiBaseUrl) {
110
+ return envApiBaseUrl;
111
+ }
112
+ const localApiBaseUrl = readApiBaseUrlFromLocalConfig();
113
+ if (localApiBaseUrl) {
114
+ return localApiBaseUrl;
115
+ }
116
+ return DEFAULT_API_BASE_URL;
117
+ }
118
+ export function getCliConfig() {
119
+ return {
120
+ apiBaseUrl: resolveApiBaseUrl(),
121
+ };
122
+ }
123
+ export function getCliHomeDir() {
124
+ return path.join(os.homedir(), '.rs-tunnel');
125
+ }
126
+ export function getFallbackSessionPath() {
127
+ return path.join(getCliHomeDir(), 'session.enc');
128
+ }
129
+ export function getFallbackKeyPath() {
130
+ return path.join(getCliHomeDir(), 'session.key');
131
+ }
132
+ export function getBundledBinDir() {
133
+ return path.join(getCliHomeDir(), 'bin');
134
+ }
135
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};