lim 0.42.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.
Files changed (40) hide show
  1. package/dist/commands/tunnel/create.d.ts +21 -0
  2. package/dist/commands/tunnel/create.d.ts.map +1 -0
  3. package/dist/commands/tunnel/create.js +63 -0
  4. package/dist/commands/tunnel/create.js.map +1 -0
  5. package/dist/commands/tunnel/delete.d.ts +19 -0
  6. package/dist/commands/tunnel/delete.d.ts.map +1 -0
  7. package/dist/commands/tunnel/delete.js +30 -0
  8. package/dist/commands/tunnel/delete.js.map +1 -0
  9. package/dist/commands/tunnel/list.d.ts +16 -0
  10. package/dist/commands/tunnel/list.d.ts.map +1 -0
  11. package/dist/commands/tunnel/list.js +34 -0
  12. package/dist/commands/tunnel/list.js.map +1 -0
  13. package/dist/commands/tunnel/manage.test.d.ts +2 -0
  14. package/dist/commands/tunnel/manage.test.d.ts.map +1 -0
  15. package/dist/commands/tunnel/manage.test.js +156 -0
  16. package/dist/commands/tunnel/manage.test.js.map +1 -0
  17. package/dist/commands/tunnel/rotate.d.ts +20 -0
  18. package/dist/commands/tunnel/rotate.d.ts.map +1 -0
  19. package/dist/commands/tunnel/rotate.js +57 -0
  20. package/dist/commands/tunnel/rotate.js.map +1 -0
  21. package/dist/commands/tunnel/run.d.ts.map +1 -1
  22. package/dist/commands/tunnel/run.js +12 -12
  23. package/dist/commands/tunnel/run.js.map +1 -1
  24. package/dist/commands/tunnel/run.test.js +25 -17
  25. package/dist/commands/tunnel/run.test.js.map +1 -1
  26. package/dist/commands/tunnel/update.d.ts +20 -0
  27. package/dist/commands/tunnel/update.d.ts.map +1 -0
  28. package/dist/commands/tunnel/update.js +47 -0
  29. package/dist/commands/tunnel/update.js.map +1 -0
  30. package/dist/lib/backend.d.ts +41 -9
  31. package/dist/lib/backend.d.ts.map +1 -1
  32. package/dist/lib/backend.js +67 -23
  33. package/dist/lib/backend.js.map +1 -1
  34. package/dist/lib/backend.test.js +29 -4
  35. package/dist/lib/backend.test.js.map +1 -1
  36. package/dist/lib/tunnel-run.d.ts +8 -0
  37. package/dist/lib/tunnel-run.d.ts.map +1 -1
  38. package/dist/lib/tunnel-run.js +16 -2
  39. package/dist/lib/tunnel-run.js.map +1 -1
  40. package/package.json +2 -2
@@ -0,0 +1,21 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class TunnelCreate extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ name: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ selector: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ 'expiration-months': import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
16
+ workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ daemon: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
+ };
19
+ run(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,OAAO,SAAmE;IACjF,MAAM,CAAC,WAAW,SAG2F;IAC7G,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAOT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;MAeV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B3B"}
@@ -0,0 +1,63 @@
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
+ const tunnel_process_1 = require("../../lib/tunnel-process");
8
+ class TunnelCreate extends base_command_1.BaseCommand {
9
+ async run() {
10
+ const { args, flags } = await this.parse(TunnelCreate);
11
+ this.setParsedFlags(flags);
12
+ const selectors = (0, tunnel_process_1.parseTunnelSelectors)(flags.selector);
13
+ await this.withAuth(async () => {
14
+ const organizationId = await (0, backend_1.tunnelOrganization)(this.client);
15
+ const created = await (0, backend_1.createTunnel)(this.client, organizationId, {
16
+ name: args.name,
17
+ selectors: [...selectors],
18
+ expirationMonths: flags['expiration-months'],
19
+ });
20
+ if (flags.json) {
21
+ this.outputJson(created);
22
+ }
23
+ else if (flags.quiet) {
24
+ this.output(created.token.token);
25
+ }
26
+ else {
27
+ this.output((0, tunnel_run_1.formatIssuedToken)(`Created tunnel ${args.name}. Run its connector on a machine that reaches its selectors:`, created.token));
28
+ }
29
+ });
30
+ }
31
+ }
32
+ TunnelCreate.summary = 'Create a persistent tunnel and print the command that runs it';
33
+ TunnelCreate.description = 'Create a persistent tunnel that serves every iOS and Android instance created with --tunnel <name>, ' +
34
+ 'and print `lim tunnel run --token <token>` for its connector. The token runs this tunnel and nothing ' +
35
+ "else, and it is shown only once. Needs an admin's API key or login. With --quiet, prints only the token.";
36
+ TunnelCreate.examples = [
37
+ '<%= config.bin %> tunnel create staging --selector localhost:3000 --selector "*.internal.example.com"',
38
+ '<%= config.bin %> tunnel create staging --selector localhost:3000 --expiration-months 3',
39
+ ];
40
+ TunnelCreate.args = {
41
+ name: core_1.Args.string({
42
+ description: 'Tunnel name that instances use with --tunnel: lowercase letters, digits and dashes, at most 63 ' +
43
+ 'characters. It cannot be changed later.',
44
+ required: true,
45
+ }),
46
+ };
47
+ TunnelCreate.flags = {
48
+ ...base_command_1.BaseCommand.baseFlags,
49
+ selector: core_1.Flags.string({
50
+ description: 'Destination instances reach through the connector, as localhost:port, IPv4:port, [IPv6]:port, or ' +
51
+ 'an exact or *. wildcard domain. Repeat for more selectors.',
52
+ multiple: true,
53
+ required: true,
54
+ }),
55
+ 'expiration-months': core_1.Flags.integer({
56
+ description: 'Months until the token expires, from 1 to 60.',
57
+ default: 12,
58
+ min: 1,
59
+ max: 60,
60
+ }),
61
+ };
62
+ exports.default = TunnelCreate;
63
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/tunnel/create.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+CAAqE;AACrE,qDAAyD;AACzD,6DAAgE;AAEhE,MAAqB,YAAa,SAAQ,0BAAW;IAqCnD,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;QAC3B,MAAM,SAAS,GAAG,IAAA,qCAAoB,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEvD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,cAAc,GAAG,MAAM,IAAA,4BAAkB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAY,EAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE;gBAC9D,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;gBACzB,gBAAgB,EAAE,KAAK,CAAC,mBAAmB,CAAC;aAC7C,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CACT,IAAA,8BAAiB,EACf,kBAAkB,IAAI,CAAC,IAAI,8DAA8D,EACzF,OAAO,CAAC,KAAK,CACd,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AA7DM,oBAAO,GAAG,+DAA+D,CAAC;AAC1E,wBAAW,GAChB,sGAAsG;IACtG,uGAAuG;IACvG,0GAA0G,CAAC;AACtG,qBAAQ,GAAG;IAChB,uGAAuG;IACvG,yFAAyF;CAC1F,CAAC;AAEK,iBAAI,GAAG;IACZ,IAAI,EAAE,WAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EACT,iGAAiG;YACjG,yCAAyC;QAC3C,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,kBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,QAAQ,EAAE,YAAK,CAAC,MAAM,CAAC;QACrB,WAAW,EACT,mGAAmG;YACnG,4DAA4D;QAC9D,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,mBAAmB,EAAE,YAAK,CAAC,OAAO,CAAC;QACjC,WAAW,EAAE,+CAA+C;QAC5D,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;KACR,CAAC;CACH,CAAC;kBAnCiB,YAAY"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class TunnelDelete extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ name: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ daemon: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,OAAO,SAAgC;IAC9C,MAAM,CAAC,WAAW,SAEiD;IACnE,MAAM,CAAC,QAAQ,WAA+C;IAE9D,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAc3B"}
@@ -0,0 +1,30 @@
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
+ class TunnelDelete extends base_command_1.BaseCommand {
7
+ async run() {
8
+ const { args, flags } = await this.parse(TunnelDelete);
9
+ this.setParsedFlags(flags);
10
+ await this.withAuth(async () => {
11
+ const organizationId = await (0, backend_1.tunnelOrganization)(this.client);
12
+ const tunnel = await (0, backend_1.findTunnel)(this.client, organizationId, args.name);
13
+ if (!tunnel) {
14
+ this.error(`Tunnel ${args.name} does not exist.`);
15
+ }
16
+ await (0, backend_1.deleteTunnel)(this.client, organizationId, tunnel.id);
17
+ this.output(`Deleted tunnel ${args.name}. Its connector exits and its token stops working.`);
18
+ });
19
+ }
20
+ }
21
+ TunnelDelete.summary = 'Delete a persistent tunnel';
22
+ TunnelDelete.description = 'Delete a persistent tunnel. Its connector exits, its token stops working, and instances that name it ' +
23
+ "lose access to its network. Needs an admin's API key or login.";
24
+ TunnelDelete.examples = ['<%= config.bin %> tunnel delete staging'];
25
+ TunnelDelete.args = {
26
+ name: core_1.Args.string({ description: 'Name of the tunnel to delete.', required: true }),
27
+ };
28
+ TunnelDelete.flags = { ...base_command_1.BaseCommand.baseFlags };
29
+ exports.default = TunnelDelete;
30
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/tunnel/delete.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AACjD,+CAAiF;AAEjF,MAAqB,YAAa,SAAQ,0BAAW;IAanD,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,MAAM,IAAA,sBAAY,EAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,IAAI,oDAAoD,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;IACL,CAAC;;AAzBM,oBAAO,GAAG,4BAA4B,CAAC;AACvC,wBAAW,GAChB,uGAAuG;IACvG,gEAAgE,CAAC;AAC5D,qBAAQ,GAAG,CAAC,yCAAyC,CAAC,CAAC;AAEvD,iBAAI,GAAG;IACZ,IAAI,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CACpF,CAAC;AAEK,kBAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBAXzB,YAAY"}
@@ -0,0 +1,16 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class TunnelList extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static flags: {
7
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
+ workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ daemon: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAA6B;IAC3C,MAAM,CAAC,WAAW,SAEiF;IACnG,MAAM,CAAC,QAAQ,WAA6E;IAE5F,MAAM,CAAC,KAAK;;;;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB3B"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const base_command_1 = require("../../base-command");
4
+ const backend_1 = require("../../lib/backend");
5
+ class TunnelList extends base_command_1.BaseCommand {
6
+ async run() {
7
+ const { flags } = await this.parse(TunnelList);
8
+ this.setParsedFlags(flags);
9
+ await this.withAuth(async () => {
10
+ const organizationId = await (0, backend_1.tunnelOrganization)(this.client);
11
+ const tunnels = await (0, backend_1.listTunnels)(this.client, organizationId);
12
+ if (flags.json) {
13
+ this.outputJson(tunnels);
14
+ return;
15
+ }
16
+ this.outputTable(['Name', 'ID', 'Status', 'Connector', 'Selectors', 'Token expires', 'Instances'], tunnels.map((tunnel) => [
17
+ tunnel.ephemeral ? `${tunnel.name} (quick)` : tunnel.name,
18
+ tunnel.id,
19
+ tunnel.online ? 'online' : 'offline',
20
+ tunnel.hostname ?? '',
21
+ tunnel.selectors.join(' '),
22
+ tunnel.tokenExpiresAt?.slice(0, 10) ?? 'none',
23
+ String(tunnel.instances.length),
24
+ ]));
25
+ });
26
+ }
27
+ }
28
+ TunnelList.summary = 'List persistent tunnels';
29
+ TunnelList.description = "List the organization's persistent tunnels: whether a connector holds each, where it runs, its " +
30
+ 'selectors, when its token expires, and how many instances name it. --json includes tunnel IDs.';
31
+ TunnelList.examples = ['<%= config.bin %> tunnel list', '<%= config.bin %> tunnel list --json'];
32
+ TunnelList.flags = { ...base_command_1.BaseCommand.baseFlags };
33
+ exports.default = TunnelList;
34
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/tunnel/list.ts"],"names":[],"mappings":";;AAAA,qDAAiD;AACjD,+CAAoE;AAEpE,MAAqB,UAAW,SAAQ,0BAAW;IASjD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,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,OAAO,GAAG,MAAM,IAAA,qBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACzB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,WAAW,CACd,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,CAAC,EAChF,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;gBACzD,MAAM,CAAC,EAAE;gBACT,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBACpC,MAAM,CAAC,QAAQ,IAAI,EAAE;gBACrB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM;gBAC7C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;aAChC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;;AAhCM,kBAAO,GAAG,yBAAyB,CAAC;AACpC,sBAAW,GAChB,iGAAiG;IACjG,gGAAgG,CAAC;AAC5F,mBAAQ,GAAG,CAAC,+BAA+B,EAAE,sCAAsC,CAAC,CAAC;AAErF,gBAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBAPzB,UAAU"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=manage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.test.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/manage.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const create_1 = __importDefault(require("./create"));
7
+ const delete_1 = __importDefault(require("./delete"));
8
+ const list_1 = __importDefault(require("./list"));
9
+ const rotate_1 = __importDefault(require("./rotate"));
10
+ const update_1 = __importDefault(require("./update"));
11
+ const backend_1 = require("../../lib/backend");
12
+ jest.mock('../../lib/backend', () => ({
13
+ tunnelOrganization: jest.fn(async () => 'org_1'),
14
+ listTunnels: jest.fn(),
15
+ findTunnel: jest.fn(),
16
+ createTunnel: jest.fn(),
17
+ updateTunnelSelectors: jest.fn(),
18
+ rotateTunnelToken: jest.fn(),
19
+ deleteTunnel: jest.fn(async () => { }),
20
+ }));
21
+ const staging = {
22
+ id: 'tunnel_1',
23
+ name: 'staging',
24
+ ephemeral: false,
25
+ online: true,
26
+ selectors: ['localhost:3000', '*.internal.example.com'],
27
+ hostname: 'build-runner-7',
28
+ tokenExpiresAt: '2027-10-10T12:00:00Z',
29
+ instances: [{ id: 'ios_1', platform: 'ios', state: 'ready' }],
30
+ };
31
+ const issued = { token: 'lim_st_issued', expiresAt: '2027-10-10T12:00:00Z' };
32
+ beforeEach(() => {
33
+ jest.clearAllMocks();
34
+ jest.mocked(backend_1.tunnelOrganization).mockResolvedValue('org_1');
35
+ });
36
+ /** Runs a tunnel command with parsed args and flags, capturing what it prints. */
37
+ function setup(Command, args, flags = {}) {
38
+ const output = jest.fn();
39
+ const table = jest.fn();
40
+ const json = jest.fn();
41
+ const command = Object.assign(Object.create(Command.prototype), {
42
+ parse: async () => ({ args, flags: { json: false, quiet: false, ...flags } }),
43
+ setParsedFlags: jest.fn(),
44
+ withAuth: async (run) => run(),
45
+ output,
46
+ outputTable: table,
47
+ outputJson: json,
48
+ error: (message) => {
49
+ throw new Error(message);
50
+ },
51
+ });
52
+ Object.defineProperty(command, 'client', { value: { apiKey: 'lim_admin' } });
53
+ return { command, output, table, json };
54
+ }
55
+ describe('tunnel create', () => {
56
+ test('creates the tunnel and prints the connector command with its token', async () => {
57
+ jest.mocked(backend_1.createTunnel).mockResolvedValue({ tunnel: staging, token: issued });
58
+ const { command, output } = setup(create_1.default, { name: 'staging' }, { selector: ['localhost:3000', '*.internal.example.com'], 'expiration-months': 3 });
59
+ await command.run();
60
+ expect(backend_1.createTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', {
61
+ name: 'staging',
62
+ selectors: ['localhost:3000', '*.internal.example.com'],
63
+ expirationMonths: 3,
64
+ });
65
+ expect(output.mock.calls[0][0]).toContain(' lim tunnel run --token lim_st_issued');
66
+ expect(output.mock.calls[0][0]).toContain('shown only once');
67
+ });
68
+ test('prints only the token with --quiet, for scripts', async () => {
69
+ jest.mocked(backend_1.createTunnel).mockResolvedValue({ tunnel: staging, token: issued });
70
+ const { command, output } = setup(create_1.default, { name: 'staging' }, { selector: ['localhost:3000'], 'expiration-months': 12, quiet: true });
71
+ await command.run();
72
+ expect(output).toHaveBeenCalledWith('lim_st_issued');
73
+ });
74
+ test('refuses an invalid selector before calling Limrun', async () => {
75
+ const { command } = setup(create_1.default, { name: 'staging' }, { selector: ['localhost:http'] });
76
+ await expect(command.run()).rejects.toThrow();
77
+ expect(backend_1.createTunnel).not.toHaveBeenCalled();
78
+ });
79
+ });
80
+ describe('tunnel list', () => {
81
+ test('shows each tunnel with its status, connector, selectors, token expiry and instance count', async () => {
82
+ jest.mocked(backend_1.listTunnels).mockResolvedValue([
83
+ staging,
84
+ {
85
+ ...staging,
86
+ id: 'tunnel_2',
87
+ name: 'scratch',
88
+ ephemeral: true,
89
+ online: false,
90
+ hostname: undefined,
91
+ tokenExpiresAt: undefined,
92
+ instances: [],
93
+ },
94
+ ]);
95
+ const { command, table } = setup(list_1.default, {});
96
+ await command.run();
97
+ expect(table).toHaveBeenCalledWith(['Name', 'ID', 'Status', 'Connector', 'Selectors', 'Token expires', 'Instances'], [
98
+ [
99
+ 'staging',
100
+ 'tunnel_1',
101
+ 'online',
102
+ 'build-runner-7',
103
+ 'localhost:3000 *.internal.example.com',
104
+ '2027-10-10',
105
+ '1',
106
+ ],
107
+ ['scratch (quick)', 'tunnel_2', 'offline', '', 'localhost:3000 *.internal.example.com', 'none', '0'],
108
+ ]);
109
+ });
110
+ });
111
+ describe('tunnel update, rotate and delete', () => {
112
+ test('replace the selectors of the tunnel they name', async () => {
113
+ jest.mocked(backend_1.findTunnel).mockResolvedValue(staging);
114
+ jest.mocked(backend_1.updateTunnelSelectors).mockResolvedValue(staging);
115
+ const { command, output } = setup(update_1.default, { name: 'staging' }, { selector: ['localhost:4000'] });
116
+ await command.run();
117
+ expect(backend_1.updateTunnelSelectors).toHaveBeenCalledWith(expect.anything(), 'org_1', staging, [
118
+ 'localhost:4000',
119
+ ]);
120
+ expect(output.mock.calls[0][0]).toContain('restart the connector');
121
+ });
122
+ test('rotate the token and print the new connector command', async () => {
123
+ jest.mocked(backend_1.findTunnel).mockResolvedValue(staging);
124
+ jest.mocked(backend_1.rotateTunnelToken).mockResolvedValue(issued);
125
+ const { command, output } = setup(rotate_1.default, { name: 'staging' }, { 'expiration-months': 12 });
126
+ await command.run();
127
+ expect(backend_1.rotateTunnelToken).toHaveBeenCalledWith(expect.anything(), 'org_1', staging, 12);
128
+ expect(output.mock.calls[0][0]).toContain(' lim tunnel run --token lim_st_issued');
129
+ });
130
+ test('refuse to rotate the token of a quick tunnel', async () => {
131
+ jest.mocked(backend_1.findTunnel).mockResolvedValue({ ...staging, ephemeral: true });
132
+ const { command } = setup(rotate_1.default, { name: 'staging' }, { 'expiration-months': 12 });
133
+ await expect(command.run()).rejects.toThrow('is a quick tunnel');
134
+ expect(backend_1.rotateTunnelToken).not.toHaveBeenCalled();
135
+ });
136
+ test('delete the tunnel by its ID', async () => {
137
+ jest.mocked(backend_1.findTunnel).mockResolvedValue(staging);
138
+ const { command, output } = setup(delete_1.default, { name: 'staging' });
139
+ await command.run();
140
+ expect(backend_1.deleteTunnel).toHaveBeenCalledWith(expect.anything(), 'org_1', 'tunnel_1');
141
+ expect(output).toHaveBeenCalledWith('Deleted tunnel staging. Its connector exits and its token stops working.');
142
+ });
143
+ test.each([
144
+ [update_1.default, { selector: ['localhost:4000'] }],
145
+ [rotate_1.default, { 'expiration-months': 12 }],
146
+ [delete_1.default, {}],
147
+ ])('refuse a tunnel that does not exist (%p)', async (Command, flags) => {
148
+ jest.mocked(backend_1.findTunnel).mockResolvedValue(undefined);
149
+ const { command } = setup(Command, { name: 'missing' }, flags);
150
+ await expect(command.run()).rejects.toThrow('Tunnel missing does not exist.');
151
+ expect(backend_1.updateTunnelSelectors).not.toHaveBeenCalled();
152
+ expect(backend_1.rotateTunnelToken).not.toHaveBeenCalled();
153
+ expect(backend_1.deleteTunnel).not.toHaveBeenCalled();
154
+ });
155
+ });
156
+ //# sourceMappingURL=manage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.test.js","sourceRoot":"","sources":["../../../src/commands/tunnel/manage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class TunnelRotate extends BaseCommand {
3
+ static summary: string;
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ name: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ 'expiration-months': import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ 'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
+ quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
+ daemon: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
+ };
18
+ run(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=rotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/rotate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,OAAO,SAA8D;IAC5E,MAAM,CAAC,WAAW,SAG+D;IACjF,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;;MAQV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+B3B"}
@@ -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"}
@@ -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;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;;;;;;;;;;;;;;;;MAoCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C1B;;;OAGG;YACW,KAAK;IAmDnB;;;OAGG;YACW,WAAW;CAyB1B"}
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"}
@@ -26,11 +26,11 @@ class TunnelRun extends base_command_1.BaseCommand {
26
26
  if (flags.token) {
27
27
  const claims = (0, backend_1.tunnelTokenClaims)(flags.token);
28
28
  if (!claims) {
29
- this.error('--token takes a tunnel token from the console (Network) or the API; this is not one.');
29
+ this.error('--token takes a tunnel token, as printed by `lim tunnel create`; this is not one.');
30
30
  }
31
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.');
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
34
  }
35
35
  await this.serve({ ...claims, token: flags.token, created: false }, flags, inspection);
36
36
  return;
@@ -41,7 +41,7 @@ class TunnelRun extends base_command_1.BaseCommand {
41
41
  }
42
42
  const name = flags.name;
43
43
  await this.withAuth(async () => {
44
- const organizationId = await (0, backend_1.quickTunnelOrganization)(this.client);
44
+ const organizationId = await (0, backend_1.tunnelOrganization)(this.client);
45
45
  const tunnel = await this.createQuick(organizationId, name, selectors);
46
46
  await this.serve({ organizationId, tunnelId: tunnel.id, token: tunnel.token, created: true }, flags, inspection);
47
47
  });
@@ -90,7 +90,7 @@ class TunnelRun extends base_command_1.BaseCommand {
90
90
  // never said bye, so its quick tunnel would hold the name until the
91
91
  // hub sweeps it.
92
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.`));
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
94
  }
95
95
  }
96
96
  }
@@ -105,11 +105,11 @@ class TunnelRun extends base_command_1.BaseCommand {
105
105
  this.error(`Tunnel ${name} is another connector's quick tunnel; pick another name.`);
106
106
  }
107
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.');
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}.`);
110
110
  }
111
111
  if (!selectors) {
112
- this.error(`Tunnel ${name} does not exist. Create it in the console (Network > New tunnel), or pass --selector to ` +
112
+ this.error(`Tunnel ${name} does not exist. Create it with lim tunnel create ${name} --selector <destination>, or pass --selector to ` +
113
113
  'run a quick tunnel.');
114
114
  }
115
115
  const created = await (0, backend_1.createQuickTunnel)(this.client, organizationId, name, selectors);
@@ -117,9 +117,9 @@ class TunnelRun extends base_command_1.BaseCommand {
117
117
  }
118
118
  }
119
119
  TunnelRun.summary = 'Serve a persistent tunnel to every instance that names it';
120
- TunnelRun.description = 'Run the connector of a tunnel created in the console (Network > New tunnel) or the API, and open ' +
120
+ TunnelRun.description = 'Run the connector of a tunnel created with `lim tunnel create` or in the console (Network), and open ' +
121
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 ' +
122
+ 'Run it with the tunnel token (--token or LIM_TUNNEL_TOKEN); the token names its tunnel, and the ' +
123
123
  "tunnel's selectors decide which destinations instances reach through this machine. With an " +
124
124
  "admin's login, --name and --selector run a quick tunnel that goes away when this connector " +
125
125
  'exits. Instance tunnels stay up while the connection to Limrun reconnects. One connector holds a ' +
@@ -132,7 +132,7 @@ TunnelRun.examples = [
132
132
  TunnelRun.flags = {
133
133
  ...base_command_1.BaseCommand.baseFlags,
134
134
  token: core_1.Flags.string({
135
- description: 'Tunnel token from the console (Network) or the API.',
135
+ description: 'Tunnel token printed by `lim tunnel create` or `lim tunnel rotate`, or shown in the console.',
136
136
  env: 'LIM_TUNNEL_TOKEN',
137
137
  }),
138
138
  name: core_1.Flags.string({
@@ -141,7 +141,7 @@ TunnelRun.flags = {
141
141
  }),
142
142
  selector: core_1.Flags.string({
143
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. ' +
144
+ 'an exact or *. wildcard domain. A created tunnel keeps its own selectors. ' +
145
145
  'Repeat for more selectors.',
146
146
  multiple: true,
147
147
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/tunnel/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/tunnel/run.ts"],"names":[],"mappings":"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"}