lim 0.41.0 → 0.43.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.js +2 -2
- package/dist/base-command.js.map +1 -1
- package/dist/commands/tunnel/create.d.ts +21 -0
- package/dist/commands/tunnel/create.d.ts.map +1 -0
- package/dist/commands/tunnel/create.js +63 -0
- package/dist/commands/tunnel/create.js.map +1 -0
- package/dist/commands/tunnel/delete.d.ts +19 -0
- package/dist/commands/tunnel/delete.d.ts.map +1 -0
- package/dist/commands/tunnel/delete.js +30 -0
- package/dist/commands/tunnel/delete.js.map +1 -0
- package/dist/commands/tunnel/list.d.ts +16 -0
- package/dist/commands/tunnel/list.d.ts.map +1 -0
- package/dist/commands/tunnel/list.js +34 -0
- package/dist/commands/tunnel/list.js.map +1 -0
- package/dist/commands/tunnel/manage.test.d.ts +2 -0
- package/dist/commands/tunnel/manage.test.d.ts.map +1 -0
- package/dist/commands/tunnel/manage.test.js +156 -0
- package/dist/commands/tunnel/manage.test.js.map +1 -0
- package/dist/commands/tunnel/rotate.d.ts +20 -0
- package/dist/commands/tunnel/rotate.d.ts.map +1 -0
- package/dist/commands/tunnel/rotate.js +57 -0
- package/dist/commands/tunnel/rotate.js.map +1 -0
- package/dist/commands/tunnel/run.d.ts +8 -3
- package/dist/commands/tunnel/run.d.ts.map +1 -1
- package/dist/commands/tunnel/run.js +78 -61
- package/dist/commands/tunnel/run.js.map +1 -1
- package/dist/commands/tunnel/run.test.js +108 -59
- package/dist/commands/tunnel/run.test.js.map +1 -1
- package/dist/commands/tunnel/update.d.ts +20 -0
- package/dist/commands/tunnel/update.d.ts.map +1 -0
- package/dist/commands/tunnel/update.js +47 -0
- package/dist/commands/tunnel/update.js.map +1 -0
- package/dist/lib/backend.d.ts +57 -12
- package/dist/lib/backend.d.ts.map +1 -1
- package/dist/lib/backend.js +114 -23
- package/dist/lib/backend.js.map +1 -1
- package/dist/lib/backend.test.js +75 -25
- package/dist/lib/backend.test.js.map +1 -1
- package/dist/lib/tunnel-run.d.ts +9 -1
- package/dist/lib/tunnel-run.d.ts.map +1 -1
- package/dist/lib/tunnel-run.js +22 -5
- package/dist/lib/tunnel-run.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_1 = require("../../base-command");
|
|
5
|
+
const backend_1 = require("../../lib/backend");
|
|
6
|
+
const tunnel_run_1 = require("../../lib/tunnel-run");
|
|
7
|
+
class TunnelRotate extends base_command_1.BaseCommand {
|
|
8
|
+
async run() {
|
|
9
|
+
const { args, flags } = await this.parse(TunnelRotate);
|
|
10
|
+
this.setParsedFlags(flags);
|
|
11
|
+
await this.withAuth(async () => {
|
|
12
|
+
const organizationId = await (0, backend_1.tunnelOrganization)(this.client);
|
|
13
|
+
const tunnel = await (0, backend_1.findTunnel)(this.client, organizationId, args.name);
|
|
14
|
+
if (!tunnel) {
|
|
15
|
+
this.error(`Tunnel ${args.name} does not exist.`);
|
|
16
|
+
}
|
|
17
|
+
// A quick tunnel's token belongs to the connector that created it: rotating it
|
|
18
|
+
// ends that connector, which then deletes the tunnel and leaves the new token unusable.
|
|
19
|
+
if (tunnel.ephemeral) {
|
|
20
|
+
this.error(`Tunnel ${args.name} is a quick tunnel; its token lives only as long as its connector.`);
|
|
21
|
+
}
|
|
22
|
+
const token = await (0, backend_1.rotateTunnelToken)(this.client, organizationId, tunnel, flags['expiration-months']);
|
|
23
|
+
if (flags.json) {
|
|
24
|
+
this.outputJson(token);
|
|
25
|
+
}
|
|
26
|
+
else if (flags.quiet) {
|
|
27
|
+
this.output(token.token);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.output((0, tunnel_run_1.formatIssuedToken)(`Rotated the token of tunnel ${args.name}. Connectors running with the old token exit within ` +
|
|
31
|
+
'seconds; restart them with:', token));
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
TunnelRotate.summary = "Issue a persistent tunnel's token and revoke the old one";
|
|
37
|
+
TunnelRotate.description = 'Issue a new token for a persistent tunnel and print `lim tunnel run --token <token>`. The old token ' +
|
|
38
|
+
'stops working at once, and connectors running with it exit within seconds; restart them with the new ' +
|
|
39
|
+
"one. Needs an admin's API key or login. With --quiet, prints only the token.";
|
|
40
|
+
TunnelRotate.examples = [
|
|
41
|
+
'<%= config.bin %> tunnel rotate staging',
|
|
42
|
+
'<%= config.bin %> tunnel rotate staging --expiration-months 3',
|
|
43
|
+
];
|
|
44
|
+
TunnelRotate.args = {
|
|
45
|
+
name: core_1.Args.string({ description: 'Name of the tunnel whose token to rotate.', required: true }),
|
|
46
|
+
};
|
|
47
|
+
TunnelRotate.flags = {
|
|
48
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
49
|
+
'expiration-months': core_1.Flags.integer({
|
|
50
|
+
description: 'Months until the new token expires, from 1 to 60.',
|
|
51
|
+
default: 12,
|
|
52
|
+
min: 1,
|
|
53
|
+
max: 60,
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
exports.default = TunnelRotate;
|
|
57
|
+
//# sourceMappingURL=rotate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../../src/commands/tunnel/rotate.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+CAAsF;AACtF,qDAAyD;AAEzD,MAAqB,YAAa,SAAQ,0BAAW;IAyBnD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,cAAc,GAAG,MAAM,IAAA,4BAAkB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAU,EAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;YACpD,CAAC;YACD,+EAA+E;YAC/E,wFAAwF;YACxF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,oEAAoE,CAAC,CAAC;YACtG,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAA,2BAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACvG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CACT,IAAA,8BAAiB,EACf,+BAA+B,IAAI,CAAC,IAAI,sDAAsD;oBAC5F,6BAA6B,EAC/B,KAAK,CACN,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAtDM,oBAAO,GAAG,0DAA0D,CAAC;AACrE,wBAAW,GAChB,sGAAsG;IACtG,uGAAuG;IACvG,8EAA8E,CAAC;AAC1E,qBAAQ,GAAG;IAChB,yCAAyC;IACzC,+DAA+D;CAChE,CAAC;AAEK,iBAAI,GAAG;IACZ,IAAI,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAChG,CAAC;AAEK,kBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,mBAAmB,EAAE,YAAK,CAAC,OAAO,CAAC;QACjC,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;KACR,CAAC;CACH,CAAC;kBAvBiB,YAAY"}
|
|
@@ -22,9 +22,14 @@ export default class TunnelRun extends BaseCommand {
|
|
|
22
22
|
};
|
|
23
23
|
run(): Promise<void>;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
26
|
-
* a
|
|
25
|
+
* Runs the connector with the tunnel's token until Ctrl+C or a terminal
|
|
26
|
+
* error, and deletes a quick tunnel this command created on the way out.
|
|
27
27
|
*/
|
|
28
|
-
private
|
|
28
|
+
private serve;
|
|
29
|
+
/**
|
|
30
|
+
* Creates the quick tunnel --name and --selector ask for, with its own
|
|
31
|
+
* token, using the admin's credential.
|
|
32
|
+
*/
|
|
33
|
+
private createQuick;
|
|
29
34
|
}
|
|
30
35
|
//# sourceMappingURL=run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmBjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAA+D;IAC7E,MAAM,CAAC,WAAW,SAOyD;IAC3E,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MAqCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C1B;;;OAGG;YACW,KAAK;IAmDnB;;;OAGG;YACW,WAAW;CAyB1B"}
|
|
@@ -11,8 +11,7 @@ const VERSION = require('../../../package.json').version;
|
|
|
11
11
|
class TunnelRun extends base_command_1.BaseCommand {
|
|
12
12
|
async run() {
|
|
13
13
|
const { flags } = await this.parse(TunnelRun);
|
|
14
|
-
|
|
15
|
-
this.setParsedFlags(flags.token ? { ...flags, 'api-key': flags.token } : flags);
|
|
14
|
+
this.setParsedFlags(flags);
|
|
16
15
|
let inspection;
|
|
17
16
|
try {
|
|
18
17
|
inspection = (0, tunnel_inspection_flags_1.tunnelInspectionContext)(flags);
|
|
@@ -21,16 +20,46 @@ class TunnelRun extends base_command_1.BaseCommand {
|
|
|
21
20
|
this.error(error instanceof Error ? error.message : String(error));
|
|
22
21
|
}
|
|
23
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, as printed by `lim tunnel create`; 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 change the tunnel's " +
|
|
33
|
+
'selectors with `lim tunnel update`.');
|
|
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;
|
|
24
43
|
await this.withAuth(async () => {
|
|
25
|
-
const
|
|
26
|
-
const tunnel = await this.
|
|
27
|
-
|
|
28
|
-
|
|
44
|
+
const organizationId = await (0, backend_1.tunnelOrganization)(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 {
|
|
29
58
|
const connector = (0, api_1.runTunnel)({
|
|
30
|
-
|
|
59
|
+
token: tunnel.token,
|
|
31
60
|
baseURL: this.client.baseURL,
|
|
32
|
-
organizationId,
|
|
33
|
-
tunnelId: tunnel.
|
|
61
|
+
organizationId: tunnel.organizationId,
|
|
62
|
+
tunnelId: tunnel.tunnelId,
|
|
34
63
|
inspection: (0, tunnel_inspection_flags_1.tunnelInspectionConfig)(inspection),
|
|
35
64
|
replace: flags.replace,
|
|
36
65
|
clientVersion: VERSION,
|
|
@@ -43,89 +72,77 @@ class TunnelRun extends base_command_1.BaseCommand {
|
|
|
43
72
|
this.info((0, tunnel_run_1.formatTunnelConnectorEvent)(name, event, tunnel.created));
|
|
44
73
|
},
|
|
45
74
|
});
|
|
46
|
-
// close() says bye, which also takes a
|
|
47
|
-
|
|
75
|
+
// close() says bye, which also takes a quick tunnel away.
|
|
76
|
+
stop = () => void connector.close();
|
|
48
77
|
process.once('SIGINT', stop);
|
|
49
78
|
process.once('SIGTERM', stop);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
79
|
+
await connector.closed;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.error(error instanceof Error ? error.message : String(error));
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
if (stop) {
|
|
57
86
|
process.off('SIGINT', stop);
|
|
58
87
|
process.off('SIGTERM', stop);
|
|
59
|
-
// A connector stopped while connecting, refused, or out of retries
|
|
60
|
-
// never said bye, so its throwaway tunnel would hold the name until
|
|
61
|
-
// the hub sweeps it.
|
|
62
|
-
if (tunnel.created) {
|
|
63
|
-
await (0, backend_1.deleteQuickTunnel)(this.client, organizationId, tunnel.id).catch((error) => this.warn(`${error instanceof Error ? error.message : String(error)}; it goes away within ten minutes.`));
|
|
64
|
-
}
|
|
65
88
|
}
|
|
66
|
-
|
|
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.deleteTunnel)(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
|
+
}
|
|
67
96
|
}
|
|
68
97
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
98
|
+
* Creates the quick tunnel --name and --selector ask for, with its own
|
|
99
|
+
* token, using the admin's credential.
|
|
71
100
|
*/
|
|
72
|
-
async
|
|
73
|
-
if (keyTunnelId) {
|
|
74
|
-
if (name || selectors) {
|
|
75
|
-
this.error("A tunnel key runs its own tunnel as created; drop --name and --selector, and edit the tunnel's " +
|
|
76
|
-
'selectors in the console.');
|
|
77
|
-
}
|
|
78
|
-
return { id: keyTunnelId, created: false };
|
|
79
|
-
}
|
|
80
|
-
if (!name) {
|
|
81
|
-
this.error("Run with the tunnel's key (--token), or pass --name with an admin's credential.");
|
|
82
|
-
}
|
|
101
|
+
async createQuick(organizationId, name, selectors) {
|
|
83
102
|
const existing = await (0, backend_1.findTunnel)(this.client, organizationId, name);
|
|
84
103
|
if (existing?.ephemeral) {
|
|
85
|
-
// A
|
|
86
|
-
this.error(`Tunnel ${name} is another connector's
|
|
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.`);
|
|
87
106
|
}
|
|
88
107
|
if (existing) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
return { id: existing.id, created: false };
|
|
108
|
+
this.error(`Tunnel ${name} runs with its own token (--token). If you no longer have it, issue a new one with ` +
|
|
109
|
+
`lim tunnel rotate ${name}.`);
|
|
93
110
|
}
|
|
94
111
|
if (!selectors) {
|
|
95
|
-
this.error(`Tunnel ${name} does not exist. Create it
|
|
96
|
-
'run a
|
|
112
|
+
this.error(`Tunnel ${name} does not exist. Create it with lim tunnel create ${name} --selector <destination>, or pass --selector to ` +
|
|
113
|
+
'run a quick tunnel.');
|
|
97
114
|
}
|
|
98
115
|
const created = await (0, backend_1.createQuickTunnel)(this.client, organizationId, name, selectors);
|
|
99
|
-
return { id: created.id,
|
|
116
|
+
return { id: created.tunnel.id, token: created.token };
|
|
100
117
|
}
|
|
101
118
|
}
|
|
102
119
|
TunnelRun.summary = 'Serve a persistent tunnel to every instance that names it';
|
|
103
|
-
TunnelRun.description = 'Run the connector of a tunnel created in the console (Network
|
|
120
|
+
TunnelRun.description = 'Run the connector of a tunnel created with `lim tunnel create` or in the console (Network), and open ' +
|
|
104
121
|
'a destination tunnel to every iOS and Android instance created with --tunnel <name>, until Ctrl+C. ' +
|
|
105
|
-
'Run it with the tunnel
|
|
106
|
-
"tunnel's selectors decide which destinations instances reach through this machine.
|
|
107
|
-
'login
|
|
108
|
-
'
|
|
109
|
-
'
|
|
110
|
-
'it over.';
|
|
122
|
+
'Run it with the tunnel token (--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.';
|
|
111
127
|
TunnelRun.examples = [
|
|
112
|
-
'<%= config.bin %> tunnel run --token <tunnel
|
|
113
|
-
'<%= config.bin %> tunnel run --name staging',
|
|
128
|
+
'<%= config.bin %> tunnel run --token <tunnel token>',
|
|
114
129
|
'<%= config.bin %> tunnel run --name scratch --selector localhost:3000',
|
|
115
130
|
'<%= config.bin %> ios create --tunnel staging',
|
|
116
131
|
];
|
|
117
132
|
TunnelRun.flags = {
|
|
118
133
|
...base_command_1.BaseCommand.baseFlags,
|
|
119
134
|
token: core_1.Flags.string({
|
|
120
|
-
description: 'Tunnel
|
|
135
|
+
description: 'Tunnel token printed by `lim tunnel create` or `lim tunnel rotate`, or shown in the console.',
|
|
136
|
+
env: 'LIM_TUNNEL_TOKEN',
|
|
121
137
|
}),
|
|
122
138
|
name: core_1.Flags.string({
|
|
123
|
-
description: "
|
|
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.',
|
|
124
141
|
}),
|
|
125
142
|
selector: core_1.Flags.string({
|
|
126
|
-
description: 'Run a
|
|
127
|
-
'
|
|
128
|
-
'
|
|
143
|
+
description: 'Run a quick tunnel with this destination, as localhost:port, IPv4:port, [IPv6]:port, or a ' +
|
|
144
|
+
'an exact or *. wildcard domain. A created tunnel keeps its own selectors. ' +
|
|
145
|
+
'Repeat for more selectors.',
|
|
129
146
|
multiple: true,
|
|
130
147
|
}),
|
|
131
148
|
replace: 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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"}
|
|
@@ -10,11 +10,19 @@ 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
12
|
jest.mock('../../lib/backend', () => ({
|
|
13
|
-
|
|
13
|
+
tunnelOrganization: jest.fn(),
|
|
14
14
|
findTunnel: jest.fn(),
|
|
15
15
|
createQuickTunnel: jest.fn(),
|
|
16
|
-
|
|
16
|
+
deleteTunnel: jest.fn(async () => { }),
|
|
17
|
+
tunnelTokenClaims: jest.requireActual('../../lib/backend').tunnelTokenClaims,
|
|
17
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`;
|
|
22
|
+
/** A tunnel as the backend lists it, with the fields a test cares about. */
|
|
23
|
+
function tunnelFixture(fields) {
|
|
24
|
+
return { online: false, selectors: [], instances: [], ...fields };
|
|
25
|
+
}
|
|
18
26
|
beforeEach(() => jest.clearAllMocks());
|
|
19
27
|
describe('tunnel run flags', () => {
|
|
20
28
|
test('need neither a name nor selectors, with inspection on by default', async () => {
|
|
@@ -24,12 +32,31 @@ describe('tunnel run flags', () => {
|
|
|
24
32
|
expect(flags.selector).toBeUndefined();
|
|
25
33
|
expect(run_1.default.flags).not.toHaveProperty('har');
|
|
26
34
|
});
|
|
35
|
+
test('read the tunnel token from LIM_TUNNEL_TOKEN, never from LIM_API_KEY', async () => {
|
|
36
|
+
const saved = { token: process.env['LIM_TUNNEL_TOKEN'], key: process.env['LIM_API_KEY'] };
|
|
37
|
+
process.env['LIM_TUNNEL_TOKEN'] = tunnelToken;
|
|
38
|
+
process.env['LIM_API_KEY'] = 'lim_admin';
|
|
39
|
+
try {
|
|
40
|
+
const { flags } = await core_1.Parser.parse([], { flags: run_1.default.flags });
|
|
41
|
+
expect(flags.token).toBe(tunnelToken);
|
|
42
|
+
expect(flags['api-key']).toBe('lim_admin');
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
for (const [name, value] of [
|
|
46
|
+
['LIM_TUNNEL_TOKEN', saved.token],
|
|
47
|
+
['LIM_API_KEY', saved.key],
|
|
48
|
+
]) {
|
|
49
|
+
if (value === undefined)
|
|
50
|
+
delete process.env[name];
|
|
51
|
+
else
|
|
52
|
+
process.env[name] = value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
27
56
|
});
|
|
28
57
|
describe('tunnel run command', () => {
|
|
29
|
-
function setup(flags, {
|
|
30
|
-
jest
|
|
31
|
-
.mocked(backend_1.whoAmITunnel)
|
|
32
|
-
.mockResolvedValue({ organizationId: 'org_1', ...(keyTunnelId ? { tunnelId: keyTunnelId } : {}) });
|
|
58
|
+
function setup(flags, { closed = Promise.resolve() } = {}) {
|
|
59
|
+
jest.mocked(backend_1.tunnelOrganization).mockResolvedValue('org_1');
|
|
33
60
|
const close = jest.fn(async () => { });
|
|
34
61
|
jest.mocked(api_1.runTunnel).mockReturnValue({ closed, close });
|
|
35
62
|
const info = jest.fn();
|
|
@@ -61,15 +88,18 @@ describe('tunnel run command', () => {
|
|
|
61
88
|
function options() {
|
|
62
89
|
return jest.mocked(api_1.runTunnel).mock.calls[0][0];
|
|
63
90
|
}
|
|
64
|
-
test('runs the tunnel a tunnel
|
|
65
|
-
const { command, info } = setup({
|
|
91
|
+
test('runs the tunnel a tunnel token names with that token alone', async () => {
|
|
92
|
+
const { command, info } = setup({ token: tunnelToken });
|
|
66
93
|
await command.run();
|
|
94
|
+
// The admin's key in the shell is never used: no backend call, and the
|
|
95
|
+
// connector runs with the tunnel token.
|
|
96
|
+
expect(backend_1.tunnelOrganization).not.toHaveBeenCalled();
|
|
67
97
|
expect(backend_1.findTunnel).not.toHaveBeenCalled();
|
|
68
98
|
expect(options()).toMatchObject({
|
|
69
|
-
|
|
99
|
+
token: tunnelToken,
|
|
70
100
|
baseURL: 'https://api.example.test',
|
|
71
101
|
organizationId: 'org_1',
|
|
72
|
-
tunnelId: '
|
|
102
|
+
tunnelId: 'tunnel_01h455vb4pex5vsknk084sn02q',
|
|
73
103
|
inspection: { enabled: true, captureBodies: true, maxBodyBytes: 1024, persist: true, ttlSeconds: 3600 },
|
|
74
104
|
replace: true,
|
|
75
105
|
logLevel: 'warn',
|
|
@@ -80,81 +110,99 @@ describe('tunnel run command', () => {
|
|
|
80
110
|
expect(info).toHaveBeenCalledWith('Tunnel staging is active. Instances created with --tunnel staging attach here; press Ctrl+C to stop.');
|
|
81
111
|
expect(info).toHaveBeenCalledWith('Standby: ci-1 holds tunnel staging. Waiting for it to go away; use --replace to take it over.');
|
|
82
112
|
});
|
|
83
|
-
test(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const { command } = setup({ name: 'staging' });
|
|
91
|
-
await command.run();
|
|
92
|
-
expect(backend_1.findTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'staging');
|
|
93
|
-
expect(options()).toMatchObject({ tunnelId: 'tunnel_2' });
|
|
94
|
-
expect(backend_1.createQuickTunnel).not.toHaveBeenCalled();
|
|
95
|
-
expect(backend_1.deleteQuickTunnel).not.toHaveBeenCalled();
|
|
113
|
+
test.each([
|
|
114
|
+
['an API key', 'lim_' + 'k'.repeat(48)],
|
|
115
|
+
['a signed token for an instance', 'lim_st_e30.e30.c2ln'],
|
|
116
|
+
])('refuses %s passed as --token', async (_, token) => {
|
|
117
|
+
const { command } = setup({ token });
|
|
118
|
+
await expect(command.run()).rejects.toThrow('--token takes a tunnel token');
|
|
119
|
+
expect(backend_1.tunnelOrganization).not.toHaveBeenCalled();
|
|
96
120
|
});
|
|
97
|
-
test(
|
|
121
|
+
test("creates a quick tunnel for --name with --selector and runs it with the tunnel's token", async () => {
|
|
98
122
|
jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
|
|
99
|
-
jest.mocked(backend_1.createQuickTunnel).mockResolvedValue({
|
|
123
|
+
jest.mocked(backend_1.createQuickTunnel).mockResolvedValue({
|
|
124
|
+
tunnel: tunnelFixture({ id: 'tunnel_3', name: 'scratch', ephemeral: true }),
|
|
125
|
+
token: 'lim_st_quick',
|
|
126
|
+
});
|
|
100
127
|
const { command, info } = setup({ name: 'scratch', selector: ['localhost:3000'] });
|
|
101
128
|
await command.run();
|
|
102
129
|
expect(backend_1.createQuickTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'scratch', ['localhost:3000']);
|
|
103
|
-
|
|
130
|
+
// Only tunnel tokens connect, so the admin's login never reaches the hub.
|
|
131
|
+
expect(options()).toMatchObject({ tunnelId: 'tunnel_3', token: 'lim_st_quick' });
|
|
104
132
|
options().onEvent({ type: 'active', sessionId: 's1', name: 'scratch' });
|
|
105
133
|
expect(info).toHaveBeenCalledWith(expect.stringContaining('goes away when this connector exits'));
|
|
106
|
-
expect(backend_1.
|
|
134
|
+
expect(backend_1.deleteTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'tunnel_3');
|
|
135
|
+
});
|
|
136
|
+
test('deletes its quick tunnel when the connector cannot start', async () => {
|
|
137
|
+
jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
|
|
138
|
+
jest.mocked(backend_1.createQuickTunnel).mockResolvedValue({
|
|
139
|
+
tunnel: tunnelFixture({ id: 'tunnel_3', name: 'scratch', ephemeral: true }),
|
|
140
|
+
token: 'lim_st_quick',
|
|
141
|
+
});
|
|
142
|
+
const { command } = setup({ name: 'scratch', selector: ['localhost:3000'] });
|
|
143
|
+
jest.mocked(api_1.runTunnel).mockImplementation(() => {
|
|
144
|
+
throw new Error('invalid header value');
|
|
145
|
+
});
|
|
146
|
+
await expect(command.run()).rejects.toThrow('invalid header value');
|
|
147
|
+
expect(backend_1.deleteTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'tunnel_3');
|
|
107
148
|
});
|
|
108
|
-
test('deletes its
|
|
149
|
+
test('deletes its quick tunnel when the connector fails', async () => {
|
|
109
150
|
jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
|
|
110
|
-
jest.mocked(backend_1.createQuickTunnel).mockResolvedValue({
|
|
151
|
+
jest.mocked(backend_1.createQuickTunnel).mockResolvedValue({
|
|
152
|
+
tunnel: tunnelFixture({ id: 'tunnel_3', name: 'scratch', ephemeral: true }),
|
|
153
|
+
token: 'lim_st_quick',
|
|
154
|
+
});
|
|
111
155
|
const { command } = setup({ name: 'scratch', selector: ['localhost:3000'] }, { closed: Promise.reject(new Error('tunnel scratch: unauthorized')) });
|
|
112
156
|
await expect(command.run()).rejects.toThrow('tunnel scratch: unauthorized');
|
|
113
|
-
expect(backend_1.
|
|
157
|
+
expect(backend_1.deleteTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'tunnel_3');
|
|
114
158
|
});
|
|
115
159
|
test.each([
|
|
116
160
|
[
|
|
117
|
-
'a tunnel
|
|
118
|
-
{ selector: ['localhost:3000'] },
|
|
119
|
-
'
|
|
120
|
-
|
|
161
|
+
'a tunnel token with selectors',
|
|
162
|
+
{ token: tunnelToken, selector: ['localhost:3000'] },
|
|
163
|
+
'A tunnel token runs its own tunnel as created',
|
|
164
|
+
],
|
|
165
|
+
[
|
|
166
|
+
'a tunnel token with a name',
|
|
167
|
+
{ token: tunnelToken, name: 'b' },
|
|
168
|
+
'A tunnel token runs its own tunnel as created',
|
|
121
169
|
],
|
|
122
|
-
['a tunnel key with a name', { name: 'b' }, 'tunnel_1', 'A tunnel key runs its own tunnel as created'],
|
|
123
170
|
[
|
|
124
|
-
'no
|
|
171
|
+
'no token and no name',
|
|
125
172
|
{},
|
|
126
|
-
|
|
127
|
-
"Run with the tunnel's key (--token), or pass --name with an admin's credential.",
|
|
173
|
+
"Run with the tunnel's token (--token or LIM_TUNNEL_TOKEN), or pass --name and --selector for a quick tunnel.",
|
|
128
174
|
],
|
|
129
175
|
[
|
|
130
176
|
'a name that does not exist without selectors',
|
|
131
177
|
{ name: 'missing' },
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
'run a throwaway tunnel.',
|
|
178
|
+
'Tunnel missing does not exist. Create it with lim tunnel create missing --selector <destination>, or ' +
|
|
179
|
+
'pass --selector to run a quick tunnel.',
|
|
135
180
|
],
|
|
136
|
-
])('refuses %s', async (_, flags,
|
|
181
|
+
])('refuses %s', async (_, flags, message) => {
|
|
137
182
|
jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
|
|
138
|
-
const { command } = setup(flags
|
|
183
|
+
const { command } = setup(flags);
|
|
139
184
|
await expect(command.run()).rejects.toThrow(message);
|
|
140
185
|
expect(api_1.runTunnel).not.toHaveBeenCalled();
|
|
141
186
|
});
|
|
142
|
-
test('refuses
|
|
143
|
-
jest
|
|
144
|
-
|
|
145
|
-
|
|
187
|
+
test.each([[{ name: 'staging' }], [{ name: 'staging', selector: ['localhost:3000'] }]])('refuses to run a console-created tunnel without its token (%j)', async (flags) => {
|
|
188
|
+
jest
|
|
189
|
+
.mocked(backend_1.findTunnel)
|
|
190
|
+
.mockResolvedValue(tunnelFixture({ id: 'tunnel_2', name: 'staging', ephemeral: false }));
|
|
191
|
+
const { command } = setup(flags);
|
|
192
|
+
await expect(command.run()).rejects.toThrow('Tunnel staging runs with its own token (--token)');
|
|
193
|
+
expect(api_1.runTunnel).not.toHaveBeenCalled();
|
|
194
|
+
expect(backend_1.createQuickTunnel).not.toHaveBeenCalled();
|
|
146
195
|
});
|
|
147
|
-
test.each([[{ name: 'scratch' }], [{ name: 'scratch', selector: ['localhost:3000'] }]])("refuses another connector's
|
|
148
|
-
jest
|
|
196
|
+
test.each([[{ name: 'scratch' }], [{ name: 'scratch', selector: ['localhost:3000'] }]])("refuses another connector's quick tunnel (%j)", async (flags) => {
|
|
197
|
+
jest
|
|
198
|
+
.mocked(backend_1.findTunnel)
|
|
199
|
+
.mockResolvedValue(tunnelFixture({ id: 'tunnel_3', name: 'scratch', ephemeral: true }));
|
|
149
200
|
const { command } = setup(flags);
|
|
150
|
-
await expect(command.run()).rejects.toThrow("Tunnel scratch is another connector's
|
|
201
|
+
await expect(command.run()).rejects.toThrow("Tunnel scratch is another connector's quick tunnel");
|
|
151
202
|
expect(api_1.runTunnel).not.toHaveBeenCalled();
|
|
152
203
|
});
|
|
153
204
|
test('fails with the terminal connector error', async () => {
|
|
154
|
-
const { command } = setup({}, {
|
|
155
|
-
keyTunnelId: 'tunnel_1',
|
|
156
|
-
closed: Promise.reject(new Error('tunnel staging: the tunnel was deleted')),
|
|
157
|
-
});
|
|
205
|
+
const { command } = setup({ token: tunnelToken }, { closed: Promise.reject(new Error('tunnel staging: the tunnel was deleted')) });
|
|
158
206
|
await expect(command.run()).rejects.toThrow('tunnel staging: the tunnel was deleted');
|
|
159
207
|
});
|
|
160
208
|
});
|
|
@@ -165,9 +213,9 @@ describe('tunnel run event lines', () => {
|
|
|
165
213
|
'Tunnel staging is active. Instances created with --tunnel staging attach here; press Ctrl+C to stop.',
|
|
166
214
|
],
|
|
167
215
|
[
|
|
168
|
-
{ type: '
|
|
169
|
-
'The
|
|
170
|
-
'
|
|
216
|
+
{ type: 'tokenExpiring', expiresAt: '2026-10-20T00:00:00Z' },
|
|
217
|
+
'The token this connector runs with expires at 2026-10-20T00:00:00Z. Issue a new one with ' +
|
|
218
|
+
'lim tunnel rotate staging and restart the connector with it.',
|
|
171
219
|
],
|
|
172
220
|
[
|
|
173
221
|
{ type: 'standby', holder: { hostname: 'ci-1', since: '2026-10-08T10:00:00Z' } },
|
|
@@ -197,9 +245,10 @@ describe('tunnel run event lines', () => {
|
|
|
197
245
|
test('names the tunnel generically before the first active', () => {
|
|
198
246
|
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.');
|
|
199
247
|
});
|
|
200
|
-
test('says a
|
|
248
|
+
test('says a quick tunnel goes with its connector, and restarts for a new token', () => {
|
|
201
249
|
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. ' +
|
|
202
|
-
'It is a
|
|
250
|
+
'It is a quick tunnel and goes away when this connector exits.');
|
|
251
|
+
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.');
|
|
203
252
|
});
|
|
204
253
|
});
|
|
205
254
|
//# 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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"}
|