lim 0.40.0 → 0.42.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/dist/base-command.d.ts.map +1 -1
- package/dist/base-command.js +5 -0
- package/dist/base-command.js.map +1 -1
- package/dist/base-command.withauth.test.js +12 -0
- package/dist/base-command.withauth.test.js.map +1 -1
- package/dist/commands/android/create.d.ts.map +1 -1
- package/dist/commands/android/create.js +2 -1
- package/dist/commands/android/create.js.map +1 -1
- package/dist/commands/ios/create.d.ts.map +1 -1
- package/dist/commands/ios/create.js +2 -1
- package/dist/commands/ios/create.js.map +1 -1
- package/dist/commands/tunnel/run.d.ts +13 -2
- package/dist/commands/tunnel/run.d.ts.map +1 -1
- package/dist/commands/tunnel/run.js +98 -30
- package/dist/commands/tunnel/run.js.map +1 -1
- package/dist/commands/tunnel/run.test.js +159 -29
- package/dist/commands/tunnel/run.test.js.map +1 -1
- package/dist/lib/backend.d.ts +38 -0
- package/dist/lib/backend.d.ts.map +1 -1
- package/dist/lib/backend.js +114 -4
- package/dist/lib/backend.js.map +1 -1
- package/dist/lib/backend.test.js +75 -0
- package/dist/lib/backend.test.js.map +1 -1
- package/dist/lib/tunnel-run.d.ts +5 -2
- package/dist/lib/tunnel-run.d.ts.map +1 -1
- package/dist/lib/tunnel-run.js +17 -5
- package/dist/lib/tunnel-run.js.map +1 -1
- package/package.json +2 -2
|
@@ -19,66 +19,134 @@ class TunnelRun extends base_command_1.BaseCommand {
|
|
|
19
19
|
catch (error) {
|
|
20
20
|
this.error(error instanceof Error ? error.message : String(error));
|
|
21
21
|
}
|
|
22
|
-
const selectors = (0, tunnel_process_1.parseTunnelSelectors)(flags.selector);
|
|
22
|
+
const selectors = flags.selector?.length ? (0, tunnel_process_1.parseTunnelSelectors)(flags.selector) : undefined;
|
|
23
|
+
// A tunnel token names its organization and tunnel and is the only
|
|
24
|
+
// credential the connector needs. --api-key, LIM_API_KEY and lim login
|
|
25
|
+
// stay an admin's, which only create quick tunnels.
|
|
26
|
+
if (flags.token) {
|
|
27
|
+
const claims = (0, backend_1.tunnelTokenClaims)(flags.token);
|
|
28
|
+
if (!claims) {
|
|
29
|
+
this.error('--token takes a tunnel token from the console (Network) or the API; this is not one.');
|
|
30
|
+
}
|
|
31
|
+
if (flags.name || selectors) {
|
|
32
|
+
this.error("A tunnel token runs its own tunnel as created; drop --name and --selector, and edit the tunnel's " +
|
|
33
|
+
'selectors in the console.');
|
|
34
|
+
}
|
|
35
|
+
await this.serve({ ...claims, token: flags.token, created: false }, flags, inspection);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (!flags.name) {
|
|
39
|
+
this.error("Run with the tunnel's token (--token or LIM_TUNNEL_TOKEN), or pass --name and --selector for a " +
|
|
40
|
+
'quick tunnel.');
|
|
41
|
+
}
|
|
42
|
+
const name = flags.name;
|
|
23
43
|
await this.withAuth(async () => {
|
|
24
|
-
const organizationId = await (0, backend_1.
|
|
44
|
+
const organizationId = await (0, backend_1.quickTunnelOrganization)(this.client);
|
|
45
|
+
const tunnel = await this.createQuick(organizationId, name, selectors);
|
|
46
|
+
await this.serve({ organizationId, tunnelId: tunnel.id, token: tunnel.token, created: true }, flags, inspection);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Runs the connector with the tunnel's token until Ctrl+C or a terminal
|
|
51
|
+
* error, and deletes a quick tunnel this command created on the way out.
|
|
52
|
+
*/
|
|
53
|
+
async serve(tunnel, flags, inspection) {
|
|
54
|
+
// A tunnel token's tunnel learns its name from the first active.
|
|
55
|
+
let name = flags.name;
|
|
56
|
+
let stop;
|
|
57
|
+
try {
|
|
25
58
|
const connector = (0, api_1.runTunnel)({
|
|
26
|
-
|
|
59
|
+
token: tunnel.token,
|
|
27
60
|
baseURL: this.client.baseURL,
|
|
28
|
-
organizationId,
|
|
29
|
-
|
|
30
|
-
selectors,
|
|
61
|
+
organizationId: tunnel.organizationId,
|
|
62
|
+
tunnelId: tunnel.tunnelId,
|
|
31
63
|
inspection: (0, tunnel_inspection_flags_1.tunnelInspectionConfig)(inspection),
|
|
32
64
|
replace: flags.replace,
|
|
33
65
|
clientVersion: VERSION,
|
|
34
66
|
logLevel: flags.verbose ? 'debug'
|
|
35
67
|
: this.shouldSuppressInfo() ? 'none'
|
|
36
68
|
: 'warn',
|
|
37
|
-
onEvent: (event) =>
|
|
69
|
+
onEvent: (event) => {
|
|
70
|
+
if (event.type === 'active')
|
|
71
|
+
name = event.name;
|
|
72
|
+
this.info((0, tunnel_run_1.formatTunnelConnectorEvent)(name, event, tunnel.created));
|
|
73
|
+
},
|
|
38
74
|
});
|
|
39
|
-
|
|
75
|
+
// close() says bye, which also takes a quick tunnel away.
|
|
76
|
+
stop = () => void connector.close();
|
|
40
77
|
process.once('SIGINT', stop);
|
|
41
78
|
process.once('SIGTERM', stop);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
79
|
+
await connector.closed;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
if (stop) {
|
|
49
86
|
process.off('SIGINT', stop);
|
|
50
87
|
process.off('SIGTERM', stop);
|
|
51
88
|
}
|
|
52
|
-
|
|
89
|
+
// A connector stopped while connecting, refused, or out of retries
|
|
90
|
+
// never said bye, so its quick tunnel would hold the name until the
|
|
91
|
+
// hub sweeps it.
|
|
92
|
+
if (tunnel.created) {
|
|
93
|
+
await (0, backend_1.deleteQuickTunnel)(this.client, tunnel.organizationId, tunnel.tunnelId).catch((error) => this.warn(`${error instanceof Error ? error.message : String(error)}; it goes away within ten minutes.`));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Creates the quick tunnel --name and --selector ask for, with its own
|
|
99
|
+
* token, using the admin's credential.
|
|
100
|
+
*/
|
|
101
|
+
async createQuick(organizationId, name, selectors) {
|
|
102
|
+
const existing = await (0, backend_1.findTunnel)(this.client, organizationId, name);
|
|
103
|
+
if (existing?.ephemeral) {
|
|
104
|
+
// A quick tunnel is its creator's alone and goes when it stops.
|
|
105
|
+
this.error(`Tunnel ${name} is another connector's quick tunnel; pick another name.`);
|
|
106
|
+
}
|
|
107
|
+
if (existing) {
|
|
108
|
+
this.error(`Tunnel ${name} runs with its own token (--token). Rotate or create its token in the console ` +
|
|
109
|
+
'(Network) if you no longer have it.');
|
|
110
|
+
}
|
|
111
|
+
if (!selectors) {
|
|
112
|
+
this.error(`Tunnel ${name} does not exist. Create it in the console (Network > New tunnel), or pass --selector to ` +
|
|
113
|
+
'run a quick tunnel.');
|
|
114
|
+
}
|
|
115
|
+
const created = await (0, backend_1.createQuickTunnel)(this.client, organizationId, name, selectors);
|
|
116
|
+
return { id: created.tunnel.id, token: created.token };
|
|
53
117
|
}
|
|
54
118
|
}
|
|
55
119
|
TunnelRun.summary = 'Serve a persistent tunnel to every instance that names it';
|
|
56
|
-
TunnelRun.description = '
|
|
57
|
-
'with --tunnel <name>, until Ctrl+C.
|
|
58
|
-
'
|
|
59
|
-
'
|
|
60
|
-
'
|
|
61
|
-
'
|
|
120
|
+
TunnelRun.description = 'Run the connector of a tunnel created in the console (Network > New tunnel) or the API, and open ' +
|
|
121
|
+
'a destination tunnel to every iOS and Android instance created with --tunnel <name>, until Ctrl+C. ' +
|
|
122
|
+
'Run it with the tunnel token the console shows (--token or LIM_TUNNEL_TOKEN); the token names its tunnel, and the ' +
|
|
123
|
+
"tunnel's selectors decide which destinations instances reach through this machine. With an " +
|
|
124
|
+
"admin's login, --name and --selector run a quick tunnel that goes away when this connector " +
|
|
125
|
+
'exits. Instance tunnels stay up while the connection to Limrun reconnects. One connector holds a ' +
|
|
126
|
+
'tunnel at a time: others wait on standby, and --replace takes it over.';
|
|
62
127
|
TunnelRun.examples = [
|
|
63
|
-
'<%= config.bin %> tunnel run --
|
|
64
|
-
'<%= config.bin %> tunnel run --name
|
|
128
|
+
'<%= config.bin %> tunnel run --token <tunnel token>',
|
|
129
|
+
'<%= config.bin %> tunnel run --name scratch --selector localhost:3000',
|
|
65
130
|
'<%= config.bin %> ios create --tunnel staging',
|
|
66
131
|
];
|
|
67
132
|
TunnelRun.flags = {
|
|
68
133
|
...base_command_1.BaseCommand.baseFlags,
|
|
134
|
+
token: core_1.Flags.string({
|
|
135
|
+
description: 'Tunnel token from the console (Network) or the API.',
|
|
136
|
+
env: 'LIM_TUNNEL_TOKEN',
|
|
137
|
+
}),
|
|
69
138
|
name: core_1.Flags.string({
|
|
70
|
-
description:
|
|
71
|
-
|
|
139
|
+
description: "Name of a quick tunnel to run with --selector and an admin's login. A tunnel token runs its own " +
|
|
140
|
+
'tunnel and needs no name.',
|
|
72
141
|
}),
|
|
73
142
|
selector: core_1.Flags.string({
|
|
74
|
-
description: '
|
|
75
|
-
'or *. wildcard domain.
|
|
143
|
+
description: 'Run a quick tunnel with this destination, as localhost:port, IPv4:port, [IPv6]:port, or a ' +
|
|
144
|
+
'private exact or *. wildcard domain. A tunnel created in the console keeps its own selectors. ' +
|
|
76
145
|
'Repeat for more selectors.',
|
|
77
146
|
multiple: true,
|
|
78
|
-
required: true,
|
|
79
147
|
}),
|
|
80
148
|
replace: core_1.Flags.boolean({
|
|
81
|
-
description: 'Take the
|
|
149
|
+
description: 'Take the tunnel over from the connector that holds it now.',
|
|
82
150
|
default: false,
|
|
83
151
|
}),
|
|
84
152
|
verbose: core_1.Flags.boolean({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/tunnel/run.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qCAAwC;AACxC,qDAAiD;AACjD,+
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/tunnel/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,41 +9,63 @@ const run_1 = __importDefault(require("./run"));
|
|
|
9
9
|
const backend_1 = require("../../lib/backend");
|
|
10
10
|
const tunnel_run_1 = require("../../lib/tunnel-run");
|
|
11
11
|
jest.mock('@limrun/api', () => ({ ...jest.requireActual('@limrun/api'), runTunnel: jest.fn() }));
|
|
12
|
-
jest.mock('../../lib/backend', () => ({
|
|
12
|
+
jest.mock('../../lib/backend', () => ({
|
|
13
|
+
quickTunnelOrganization: jest.fn(),
|
|
14
|
+
findTunnel: jest.fn(),
|
|
15
|
+
createQuickTunnel: jest.fn(),
|
|
16
|
+
deleteQuickTunnel: jest.fn(async () => { }),
|
|
17
|
+
tunnelTokenClaims: jest.requireActual('../../lib/backend').tunnelTokenClaims,
|
|
18
|
+
}));
|
|
19
|
+
// A tunnel token's header and signature do not matter to the CLI; only the
|
|
20
|
+
// payload's claims are read.
|
|
21
|
+
const tunnelToken = `lim_st_eyJhbGciOiJFZERTQSJ9.${Buffer.from(JSON.stringify({ sub: 'org_1', scopes: ['tunnel:tunnel_01h455vb4pex5vsknk084sn02q:connect'] })).toString('base64url')}.c2ln`;
|
|
13
22
|
beforeEach(() => jest.clearAllMocks());
|
|
14
23
|
describe('tunnel run flags', () => {
|
|
15
|
-
test('
|
|
16
|
-
const { flags } = await core_1.Parser.parse([
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
expect(flags).
|
|
20
|
-
name: 'staging-2',
|
|
21
|
-
selector: ['localhost:3000'],
|
|
22
|
-
replace: false,
|
|
23
|
-
verbose: false,
|
|
24
|
-
inspect: true,
|
|
25
|
-
persist: false,
|
|
26
|
-
});
|
|
24
|
+
test('need neither a name nor selectors, with inspection on by default', async () => {
|
|
25
|
+
const { flags } = await core_1.Parser.parse([], { flags: run_1.default.flags });
|
|
26
|
+
expect(flags).toMatchObject({ replace: false, verbose: false, inspect: true, persist: false });
|
|
27
|
+
expect(flags.name).toBeUndefined();
|
|
28
|
+
expect(flags.selector).toBeUndefined();
|
|
27
29
|
expect(run_1.default.flags).not.toHaveProperty('har');
|
|
28
30
|
});
|
|
31
|
+
test('read the tunnel token from LIM_TUNNEL_TOKEN, never from LIM_API_KEY', async () => {
|
|
32
|
+
const saved = { token: process.env['LIM_TUNNEL_TOKEN'], key: process.env['LIM_API_KEY'] };
|
|
33
|
+
process.env['LIM_TUNNEL_TOKEN'] = tunnelToken;
|
|
34
|
+
process.env['LIM_API_KEY'] = 'lim_admin';
|
|
35
|
+
try {
|
|
36
|
+
const { flags } = await core_1.Parser.parse([], { flags: run_1.default.flags });
|
|
37
|
+
expect(flags.token).toBe(tunnelToken);
|
|
38
|
+
expect(flags['api-key']).toBe('lim_admin');
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
for (const [name, value] of [
|
|
42
|
+
['LIM_TUNNEL_TOKEN', saved.token],
|
|
43
|
+
['LIM_API_KEY', saved.key],
|
|
44
|
+
]) {
|
|
45
|
+
if (value === undefined)
|
|
46
|
+
delete process.env[name];
|
|
47
|
+
else
|
|
48
|
+
process.env[name] = value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
29
52
|
});
|
|
30
53
|
describe('tunnel run command', () => {
|
|
31
|
-
function setup(closed) {
|
|
32
|
-
jest.mocked(backend_1.
|
|
54
|
+
function setup(flags, { closed = Promise.resolve() } = {}) {
|
|
55
|
+
jest.mocked(backend_1.quickTunnelOrganization).mockResolvedValue('org_1');
|
|
33
56
|
const close = jest.fn(async () => { });
|
|
34
57
|
jest.mocked(api_1.runTunnel).mockReturnValue({ closed, close });
|
|
35
58
|
const info = jest.fn();
|
|
36
59
|
const command = Object.assign(Object.create(run_1.default.prototype), {
|
|
37
60
|
parse: async () => ({
|
|
38
61
|
flags: {
|
|
39
|
-
name: 'staging',
|
|
40
|
-
selector: ['localhost:3000', '*.corp.example'],
|
|
41
62
|
replace: true,
|
|
42
63
|
verbose: false,
|
|
43
64
|
inspect: true,
|
|
44
65
|
persist: true,
|
|
45
66
|
ttl: 3600,
|
|
46
67
|
'har-body-limit': 1024,
|
|
68
|
+
...flags,
|
|
47
69
|
},
|
|
48
70
|
}),
|
|
49
71
|
setParsedFlags: jest.fn(),
|
|
@@ -59,38 +81,138 @@ describe('tunnel run command', () => {
|
|
|
59
81
|
});
|
|
60
82
|
return { command, info };
|
|
61
83
|
}
|
|
62
|
-
|
|
63
|
-
|
|
84
|
+
function options() {
|
|
85
|
+
return jest.mocked(api_1.runTunnel).mock.calls[0][0];
|
|
86
|
+
}
|
|
87
|
+
test('runs the tunnel a tunnel token names with that token alone', async () => {
|
|
88
|
+
const { command, info } = setup({ token: tunnelToken });
|
|
64
89
|
await command.run();
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
90
|
+
// The admin's key in the shell is never used: no backend call, and the
|
|
91
|
+
// connector runs with the tunnel token.
|
|
92
|
+
expect(backend_1.quickTunnelOrganization).not.toHaveBeenCalled();
|
|
93
|
+
expect(backend_1.findTunnel).not.toHaveBeenCalled();
|
|
94
|
+
expect(options()).toMatchObject({
|
|
95
|
+
token: tunnelToken,
|
|
68
96
|
baseURL: 'https://api.example.test',
|
|
69
97
|
organizationId: 'org_1',
|
|
70
|
-
|
|
71
|
-
selectors: ['localhost:3000', '*.corp.example'],
|
|
98
|
+
tunnelId: 'tunnel_01h455vb4pex5vsknk084sn02q',
|
|
72
99
|
inspection: { enabled: true, captureBodies: true, maxBodyBytes: 1024, persist: true, ttlSeconds: 3600 },
|
|
73
100
|
replace: true,
|
|
74
101
|
logLevel: 'warn',
|
|
75
102
|
});
|
|
76
|
-
|
|
77
|
-
|
|
103
|
+
// The name arrives with the first active.
|
|
104
|
+
options().onEvent({ type: 'active', sessionId: 's1', name: 'staging' });
|
|
105
|
+
options().onEvent({ type: 'standby', holder: { hostname: 'ci-1' } });
|
|
106
|
+
expect(info).toHaveBeenCalledWith('Tunnel staging is active. Instances created with --tunnel staging attach here; press Ctrl+C to stop.');
|
|
107
|
+
expect(info).toHaveBeenCalledWith('Standby: ci-1 holds tunnel staging. Waiting for it to go away; use --replace to take it over.');
|
|
108
|
+
});
|
|
109
|
+
test.each([
|
|
110
|
+
['an API key', 'lim_' + 'k'.repeat(48)],
|
|
111
|
+
['a signed token for an instance', 'lim_st_e30.e30.c2ln'],
|
|
112
|
+
])('refuses %s passed as --token', async (_, token) => {
|
|
113
|
+
const { command } = setup({ token });
|
|
114
|
+
await expect(command.run()).rejects.toThrow('--token takes a tunnel token');
|
|
115
|
+
expect(backend_1.quickTunnelOrganization).not.toHaveBeenCalled();
|
|
116
|
+
});
|
|
117
|
+
test("creates a quick tunnel for --name with --selector and runs it with the tunnel's token", async () => {
|
|
118
|
+
jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
|
|
119
|
+
jest.mocked(backend_1.createQuickTunnel).mockResolvedValue({
|
|
120
|
+
tunnel: { id: 'tunnel_3', name: 'scratch', ephemeral: true },
|
|
121
|
+
token: 'lim_st_quick',
|
|
122
|
+
});
|
|
123
|
+
const { command, info } = setup({ name: 'scratch', selector: ['localhost:3000'] });
|
|
124
|
+
await command.run();
|
|
125
|
+
expect(backend_1.createQuickTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'scratch', ['localhost:3000']);
|
|
126
|
+
// Only tunnel tokens connect, so the admin's login never reaches the hub.
|
|
127
|
+
expect(options()).toMatchObject({ tunnelId: 'tunnel_3', token: 'lim_st_quick' });
|
|
128
|
+
options().onEvent({ type: 'active', sessionId: 's1', name: 'scratch' });
|
|
129
|
+
expect(info).toHaveBeenCalledWith(expect.stringContaining('goes away when this connector exits'));
|
|
130
|
+
expect(backend_1.deleteQuickTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'tunnel_3');
|
|
131
|
+
});
|
|
132
|
+
test('deletes its quick tunnel when the connector cannot start', async () => {
|
|
133
|
+
jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
|
|
134
|
+
jest.mocked(backend_1.createQuickTunnel).mockResolvedValue({
|
|
135
|
+
tunnel: { id: 'tunnel_3', name: 'scratch', ephemeral: true },
|
|
136
|
+
token: 'lim_st_quick',
|
|
137
|
+
});
|
|
138
|
+
const { command } = setup({ name: 'scratch', selector: ['localhost:3000'] });
|
|
139
|
+
jest.mocked(api_1.runTunnel).mockImplementation(() => {
|
|
140
|
+
throw new Error('invalid header value');
|
|
141
|
+
});
|
|
142
|
+
await expect(command.run()).rejects.toThrow('invalid header value');
|
|
143
|
+
expect(backend_1.deleteQuickTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'tunnel_3');
|
|
144
|
+
});
|
|
145
|
+
test('deletes its quick tunnel when the connector fails', async () => {
|
|
146
|
+
jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
|
|
147
|
+
jest.mocked(backend_1.createQuickTunnel).mockResolvedValue({
|
|
148
|
+
tunnel: { id: 'tunnel_3', name: 'scratch', ephemeral: true },
|
|
149
|
+
token: 'lim_st_quick',
|
|
150
|
+
});
|
|
151
|
+
const { command } = setup({ name: 'scratch', selector: ['localhost:3000'] }, { closed: Promise.reject(new Error('tunnel scratch: unauthorized')) });
|
|
152
|
+
await expect(command.run()).rejects.toThrow('tunnel scratch: unauthorized');
|
|
153
|
+
expect(backend_1.deleteQuickTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'tunnel_3');
|
|
154
|
+
});
|
|
155
|
+
test.each([
|
|
156
|
+
[
|
|
157
|
+
'a tunnel token with selectors',
|
|
158
|
+
{ token: tunnelToken, selector: ['localhost:3000'] },
|
|
159
|
+
'A tunnel token runs its own tunnel as created',
|
|
160
|
+
],
|
|
161
|
+
[
|
|
162
|
+
'a tunnel token with a name',
|
|
163
|
+
{ token: tunnelToken, name: 'b' },
|
|
164
|
+
'A tunnel token runs its own tunnel as created',
|
|
165
|
+
],
|
|
166
|
+
[
|
|
167
|
+
'no token and no name',
|
|
168
|
+
{},
|
|
169
|
+
"Run with the tunnel's token (--token or LIM_TUNNEL_TOKEN), or pass --name and --selector for a quick tunnel.",
|
|
170
|
+
],
|
|
171
|
+
[
|
|
172
|
+
'a name that does not exist without selectors',
|
|
173
|
+
{ name: 'missing' },
|
|
174
|
+
'Tunnel missing does not exist. Create it in the console (Network > New tunnel), or pass --selector to ' +
|
|
175
|
+
'run a quick tunnel.',
|
|
176
|
+
],
|
|
177
|
+
])('refuses %s', async (_, flags, message) => {
|
|
178
|
+
jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
|
|
179
|
+
const { command } = setup(flags);
|
|
180
|
+
await expect(command.run()).rejects.toThrow(message);
|
|
181
|
+
expect(api_1.runTunnel).not.toHaveBeenCalled();
|
|
182
|
+
});
|
|
183
|
+
test.each([[{ name: 'staging' }], [{ name: 'staging', selector: ['localhost:3000'] }]])('refuses to run a console-created tunnel without its token (%j)', async (flags) => {
|
|
184
|
+
jest.mocked(backend_1.findTunnel).mockResolvedValue({ id: 'tunnel_2', name: 'staging', ephemeral: false });
|
|
185
|
+
const { command } = setup(flags);
|
|
186
|
+
await expect(command.run()).rejects.toThrow('Tunnel staging runs with its own token (--token)');
|
|
187
|
+
expect(api_1.runTunnel).not.toHaveBeenCalled();
|
|
188
|
+
expect(backend_1.createQuickTunnel).not.toHaveBeenCalled();
|
|
189
|
+
});
|
|
190
|
+
test.each([[{ name: 'scratch' }], [{ name: 'scratch', selector: ['localhost:3000'] }]])("refuses another connector's quick tunnel (%j)", async (flags) => {
|
|
191
|
+
jest.mocked(backend_1.findTunnel).mockResolvedValue({ id: 'tunnel_3', name: 'scratch', ephemeral: true });
|
|
192
|
+
const { command } = setup(flags);
|
|
193
|
+
await expect(command.run()).rejects.toThrow("Tunnel scratch is another connector's quick tunnel");
|
|
194
|
+
expect(api_1.runTunnel).not.toHaveBeenCalled();
|
|
78
195
|
});
|
|
79
196
|
test('fails with the terminal connector error', async () => {
|
|
80
|
-
const { command } = setup(Promise.reject(new Error('tunnel staging: the tunnel was deleted')));
|
|
197
|
+
const { command } = setup({ token: tunnelToken }, { closed: Promise.reject(new Error('tunnel staging: the tunnel was deleted')) });
|
|
81
198
|
await expect(command.run()).rejects.toThrow('tunnel staging: the tunnel was deleted');
|
|
82
199
|
});
|
|
83
200
|
});
|
|
84
201
|
describe('tunnel run event lines', () => {
|
|
85
202
|
test.each([
|
|
86
203
|
[
|
|
87
|
-
{ type: 'active', sessionId: 'session-1' },
|
|
204
|
+
{ type: 'active', sessionId: 'session-1', name: 'staging' },
|
|
88
205
|
'Tunnel staging is active. Instances created with --tunnel staging attach here; press Ctrl+C to stop.',
|
|
89
206
|
],
|
|
207
|
+
[
|
|
208
|
+
{ type: 'tokenExpiring', expiresAt: '2026-10-20T00:00:00Z' },
|
|
209
|
+
'The token this connector runs with expires at 2026-10-20T00:00:00Z. Rotate the token of tunnel staging ' +
|
|
210
|
+
'in the console (Network) and restart the connector with the new one.',
|
|
211
|
+
],
|
|
90
212
|
[
|
|
91
213
|
{ type: 'standby', holder: { hostname: 'ci-1', since: '2026-10-08T10:00:00Z' } },
|
|
92
214
|
'Standby: ci-1 holds tunnel staging since 2026-10-08T10:00:00Z. ' +
|
|
93
|
-
'Waiting for it to go away; use --replace to take
|
|
215
|
+
'Waiting for it to go away; use --replace to take it over.',
|
|
94
216
|
],
|
|
95
217
|
[
|
|
96
218
|
{ type: 'attachFailed', instanceId: 'ios_1', code: 'instance_busy', message: 'busy' },
|
|
@@ -112,5 +234,13 @@ describe('tunnel run event lines', () => {
|
|
|
112
234
|
])('formats %j', (event, line) => {
|
|
113
235
|
expect((0, tunnel_run_1.formatTunnelConnectorEvent)('staging', event)).toBe(line);
|
|
114
236
|
});
|
|
237
|
+
test('names the tunnel generically before the first active', () => {
|
|
238
|
+
expect((0, tunnel_run_1.formatTunnelConnectorEvent)(undefined, { type: 'standby', holder: { hostname: 'ci-1' } })).toBe('Standby: ci-1 holds the tunnel. Waiting for it to go away; use --replace to take it over.');
|
|
239
|
+
});
|
|
240
|
+
test('says a quick tunnel goes with its connector, and restarts for a new token', () => {
|
|
241
|
+
expect((0, tunnel_run_1.formatTunnelConnectorEvent)('scratch', { type: 'active', sessionId: 's1', name: 'scratch' }, true)).toBe('Tunnel scratch is active. Instances created with --tunnel scratch attach here; press Ctrl+C to stop. ' +
|
|
242
|
+
'It is a quick tunnel and goes away when this connector exits.');
|
|
243
|
+
expect((0, tunnel_run_1.formatTunnelConnectorEvent)('scratch', { type: 'tokenExpiring', expiresAt: '2026-10-20T00:00:00Z' }, true)).toBe('The token of quick tunnel scratch expires at 2026-10-20T00:00:00Z. Restart the connector to get a new one.');
|
|
244
|
+
});
|
|
115
245
|
});
|
|
116
246
|
//# sourceMappingURL=run.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.test.js","sourceRoot":"","sources":["../../../src/commands/tunnel/run.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run.test.js","sourceRoot":"","sources":["../../../src/commands/tunnel/run.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/backend.d.ts
CHANGED
|
@@ -19,6 +19,44 @@ export declare const androidSigningKeySecretType = "androidSigningKey";
|
|
|
19
19
|
* /v1/whoami nests inside `user`.
|
|
20
20
|
*/
|
|
21
21
|
export declare function whoAmI(client: Limrun): Promise<string>;
|
|
22
|
+
/** A persistent tunnel as the backend lists it. */
|
|
23
|
+
export interface PersistentTunnel {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
ephemeral: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolves the organization an admin's credential acts for, to create a quick
|
|
30
|
+
* tunnel. It must be an organization key, so a user token's default
|
|
31
|
+
* organization does not count. A tunnel token belongs in --token: the backend
|
|
32
|
+
* accepts no signed token.
|
|
33
|
+
*/
|
|
34
|
+
export declare function quickTunnelOrganization(client: Limrun): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Reads the organization and tunnel a tunnel token names, without verifying
|
|
37
|
+
* it; undefined when the token is no tunnel token. Its only scope is
|
|
38
|
+
* tunnel:<id>:connect.
|
|
39
|
+
*/
|
|
40
|
+
export declare function tunnelTokenClaims(token: string): {
|
|
41
|
+
organizationId: string;
|
|
42
|
+
tunnelId: string;
|
|
43
|
+
} | undefined;
|
|
44
|
+
/** Finds an organization's tunnel by the name instances use. */
|
|
45
|
+
export declare function findTunnel(client: Limrun, organizationId: string, name: string): Promise<PersistentTunnel | undefined>;
|
|
46
|
+
/**
|
|
47
|
+
* Creates a quick tunnel that goes away when its connector does, with the
|
|
48
|
+
* token the connector runs it with: only tunnel tokens connect. The token
|
|
49
|
+
* goes with the tunnel, so it lasts a month, the shortest the API takes.
|
|
50
|
+
*/
|
|
51
|
+
export declare function createQuickTunnel(client: Limrun, organizationId: string, name: string, selectors: string[]): Promise<{
|
|
52
|
+
tunnel: PersistentTunnel;
|
|
53
|
+
token: string;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* Deletes a quick tunnel this CLI created. The hub deletes it when its
|
|
57
|
+
* connector says bye, so a missing tunnel is the normal case.
|
|
58
|
+
*/
|
|
59
|
+
export declare function deleteQuickTunnel(client: Limrun, organizationId: string, tunnelId: string): Promise<void>;
|
|
22
60
|
/** Fetches a secret's data, or undefined when it does not exist. */
|
|
23
61
|
export declare function getSecret(client: Limrun, organizationId: string, secretType: string, secretName: string): Promise<SecretData | undefined>;
|
|
24
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/lib/backend.ts"],"names":[],"mappings":"AAAA,OAAO,MAAwD,MAAM,aAAa,CAAC;AAEnF;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAU/D;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/lib/backend.ts"],"names":[],"mappings":"AAAA,OAAO,MAAwD,MAAM,aAAa,CAAC;AAEnF;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAU/D;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5D;AAeD,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa7E;AAYD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAoBzG;AAMD,gEAAgE;AAChE,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAQvC;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAetD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAQD,oEAAoE;AACpE,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAcjC;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,eAAe,CAAC,CAgB1B"}
|