lim 0.42.0 → 0.44.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 (75) hide show
  1. package/README.md +26 -0
  2. package/bin/lim-bazel-credentials.js +14 -0
  3. package/dist/commands/android/create.js +1 -1
  4. package/dist/commands/android/create.js.map +1 -1
  5. package/dist/commands/android/create.test.js +1 -1
  6. package/dist/commands/android/create.test.js.map +1 -1
  7. package/dist/commands/bazel/credentials/get.d.ts +13 -0
  8. package/dist/commands/bazel/credentials/get.d.ts.map +1 -0
  9. package/dist/commands/bazel/credentials/get.js +74 -0
  10. package/dist/commands/bazel/credentials/get.js.map +1 -0
  11. package/dist/commands/bazel/setup.d.ts +21 -0
  12. package/dist/commands/bazel/setup.d.ts.map +1 -0
  13. package/dist/commands/bazel/setup.js +101 -0
  14. package/dist/commands/bazel/setup.js.map +1 -0
  15. package/dist/commands/ios/create.js +1 -1
  16. package/dist/commands/ios/create.js.map +1 -1
  17. package/dist/commands/ios/create.test.js +1 -1
  18. package/dist/commands/ios/create.test.js.map +1 -1
  19. package/dist/commands/ios/display-routing.test.js +68 -8
  20. package/dist/commands/ios/display-routing.test.js.map +1 -1
  21. package/dist/commands/ios/record.d.ts +1 -0
  22. package/dist/commands/ios/record.d.ts.map +1 -1
  23. package/dist/commands/ios/record.js +16 -12
  24. package/dist/commands/ios/record.js.map +1 -1
  25. package/dist/commands/tunnel/create.d.ts +21 -0
  26. package/dist/commands/tunnel/create.d.ts.map +1 -0
  27. package/dist/commands/tunnel/create.js +63 -0
  28. package/dist/commands/tunnel/create.js.map +1 -0
  29. package/dist/commands/tunnel/delete.d.ts +19 -0
  30. package/dist/commands/tunnel/delete.d.ts.map +1 -0
  31. package/dist/commands/tunnel/delete.js +30 -0
  32. package/dist/commands/tunnel/delete.js.map +1 -0
  33. package/dist/commands/tunnel/list.d.ts +16 -0
  34. package/dist/commands/tunnel/list.d.ts.map +1 -0
  35. package/dist/commands/tunnel/list.js +34 -0
  36. package/dist/commands/tunnel/list.js.map +1 -0
  37. package/dist/commands/tunnel/manage.test.d.ts +2 -0
  38. package/dist/commands/tunnel/manage.test.d.ts.map +1 -0
  39. package/dist/commands/tunnel/manage.test.js +156 -0
  40. package/dist/commands/tunnel/manage.test.js.map +1 -0
  41. package/dist/commands/tunnel/rotate.d.ts +20 -0
  42. package/dist/commands/tunnel/rotate.d.ts.map +1 -0
  43. package/dist/commands/tunnel/rotate.js +57 -0
  44. package/dist/commands/tunnel/rotate.js.map +1 -0
  45. package/dist/commands/tunnel/run.d.ts.map +1 -1
  46. package/dist/commands/tunnel/run.js +13 -13
  47. package/dist/commands/tunnel/run.js.map +1 -1
  48. package/dist/commands/tunnel/run.test.js +25 -17
  49. package/dist/commands/tunnel/run.test.js.map +1 -1
  50. package/dist/commands/tunnel/update.d.ts +20 -0
  51. package/dist/commands/tunnel/update.d.ts.map +1 -0
  52. package/dist/commands/tunnel/update.js +47 -0
  53. package/dist/commands/tunnel/update.js.map +1 -0
  54. package/dist/lib/backend.d.ts +45 -13
  55. package/dist/lib/backend.d.ts.map +1 -1
  56. package/dist/lib/backend.js +67 -23
  57. package/dist/lib/backend.js.map +1 -1
  58. package/dist/lib/backend.test.js +29 -4
  59. package/dist/lib/backend.test.js.map +1 -1
  60. package/dist/lib/bazel-setup.d.ts +88 -0
  61. package/dist/lib/bazel-setup.d.ts.map +1 -0
  62. package/dist/lib/bazel-setup.js +440 -0
  63. package/dist/lib/bazel-setup.js.map +1 -0
  64. package/dist/lib/bazel-setup.test.d.ts +2 -0
  65. package/dist/lib/bazel-setup.test.d.ts.map +1 -0
  66. package/dist/lib/bazel-setup.test.js +150 -0
  67. package/dist/lib/bazel-setup.test.js.map +1 -0
  68. package/dist/lib/daemon.d.ts.map +1 -1
  69. package/dist/lib/daemon.js +3 -1
  70. package/dist/lib/daemon.js.map +1 -1
  71. package/dist/lib/tunnel-run.d.ts +8 -0
  72. package/dist/lib/tunnel-run.d.ts.map +1 -1
  73. package/dist/lib/tunnel-run.js +16 -2
  74. package/dist/lib/tunnel-run.js.map +1 -1
  75. package/package.json +11 -3
@@ -9,6 +9,7 @@ export default class IosRecord extends BaseCommand {
9
9
  static flags: {
10
10
  display: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
11
  id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ 'touch-indicators': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
13
  quality: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
13
14
  output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
15
  'presigned-url': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/record.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAA6D;IAC3E,MAAM,CAAC,WAAW,SAC4J;IAC9K,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,IAAI;;MAOT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;MAgCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA+E1B,OAAO,CAAC,oBAAoB;CAI7B"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/record.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,OAAO,SAA6D;IAC3E,MAAM,CAAC,WAAW,SAC0S;IAC5T,MAAM,CAAC,QAAQ,WAQb;IAEF,MAAM,CAAC,IAAI;;MAOT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;MAsCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA6E1B,OAAO,CAAC,oBAAoB;CAI7B"}
@@ -15,9 +15,6 @@ class IosRecord extends base_command_1.BaseCommand {
15
15
  await this.withAuth(async () => {
16
16
  const resolvedInstance = this.resolveIosInstance(flags.id);
17
17
  const id = resolvedInstance.id;
18
- if (false) {
19
- this.error('ios record only supports iOS instances');
20
- }
21
18
  if (flags['persist-ttl'] && !flags.persist) {
22
19
  this.error('--persist-ttl requires --persist.');
23
20
  }
@@ -33,18 +30,19 @@ class IosRecord extends base_command_1.BaseCommand {
33
30
  { ttlSeconds: (0, duration_1.parseDurationSeconds)(flags['persist-ttl']) }
34
31
  : true
35
32
  : undefined;
36
- // Older daemons drop persistence and display options, so send those starts directly.
37
- if (!persist && !flags.display && (await (0, instance_client_factory_1.ensureDaemonSession)(resolvedInstance))) {
38
- await (0, instance_client_factory_1.sendSessionCommand)(id, 'start-recording', [flags.quality]);
33
+ const options = {
34
+ quality: flags.quality,
35
+ persist,
36
+ display: flags.display,
37
+ touchIndicators: flags['touch-indicators'],
38
+ };
39
+ if (await (0, instance_client_factory_1.ensureDaemonSession)(resolvedInstance)) {
40
+ await (0, instance_client_factory_1.sendSessionCommand)(id, 'start-recording', [options]);
39
41
  }
40
42
  else {
41
43
  const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
42
44
  try {
43
- await client.startRecording({
44
- quality: flags.quality,
45
- persist,
46
- display: flags.display,
47
- });
45
+ await client.startRecording(options);
48
46
  }
49
47
  finally {
50
48
  disconnect();
@@ -87,13 +85,14 @@ class IosRecord extends base_command_1.BaseCommand {
87
85
  }
88
86
  }
89
87
  IosRecord.summary = 'Start or stop video recording on a running iOS instance';
90
- IosRecord.description = 'Control screen recording on a running iOS instance. Start recording first, then stop recording to download the file locally or upload it directly with `--presigned-url`.';
88
+ IosRecord.description = 'Control screen recording on a running iOS instance. Touch ripples and drag trails show where touches occur and are enabled by default while recording. Use --no-touch-indicators to disable them. Start recording first, then stop recording to download the file locally or upload it directly with `--presigned-url`.';
91
89
  IosRecord.examples = [
92
90
  '<%= config.bin %> ios record start',
93
91
  '<%= config.bin %> ios record stop',
94
92
  '<%= config.bin %> ios record stop -o recording.mp4 --id <instance-ID>',
95
93
  '<%= config.bin %> ios record stop --presigned-url https://example.com/upload --id <instance-ID>',
96
94
  '<%= config.bin %> ios record start --quality 8',
95
+ '<%= config.bin %> ios record start --no-touch-indicators',
97
96
  '<%= config.bin %> ios record start --persist --persist-ttl 24h',
98
97
  ];
99
98
  IosRecord.args = {
@@ -112,6 +111,11 @@ IosRecord.flags = {
112
111
  id: core_1.Flags.string({
113
112
  description: 'iOS instance ID to record. Defaults to the last created iOS instance.',
114
113
  }),
114
+ 'touch-indicators': core_1.Flags.boolean({
115
+ description: 'Show touch ripples and drag trails while recording. Enabled by default. Applies to start.',
116
+ default: true,
117
+ allowNo: true,
118
+ }),
115
119
  quality: core_1.Flags.integer({
116
120
  description: 'Recording quality from 5 to 10. Higher values increase quality and file size when starting a recording.',
117
121
  default: 5,
@@ -1 +1 @@
1
- {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/commands/ios/record.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/commands/ios/record.ts"],"names":[],"mappings":"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"}
@@ -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,SAAgE;IAC9E,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 private tunnel and print the command that runs it';
33
+ TunnelCreate.description = 'Create a private 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,4DAA4D,CAAC;AACvE,wBAAW,GAChB,mGAAmG;IACnG,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,SAA6B;IAC3C,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 private tunnel';
22
+ TunnelDelete.description = 'Delete a private 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,yBAAyB,CAAC;AACpC,wBAAW,GAChB,oGAAoG;IACpG,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,SAA0B;IACxC,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 private tunnels';
29
+ TunnelList.description = "List the organization's private 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,sBAAsB,CAAC;AACjC,sBAAW,GAChB,8FAA8F;IAC9F,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,SAA2D;IACzE,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 private tunnel's token and revoke the old one";
37
+ TunnelRotate.description = 'Issue a new token for a private 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,uDAAuD,CAAC;AAClE,wBAAW,GAChB,mGAAmG;IACnG,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,SAA4D;IAC1E,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"}