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,20 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command';
|
|
2
|
+
export default class TunnelUpdate 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
|
+
'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=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/tunnel/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,OAAO,SAA6C;IAC3D,MAAM,CAAC,WAAW,SAEgF;IAClG,MAAM,CAAC,QAAQ,WAEb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;;MASV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB3B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
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_process_1 = require("../../lib/tunnel-process");
|
|
7
|
+
class TunnelUpdate extends base_command_1.BaseCommand {
|
|
8
|
+
async run() {
|
|
9
|
+
const { args, flags } = await this.parse(TunnelUpdate);
|
|
10
|
+
this.setParsedFlags(flags);
|
|
11
|
+
const selectors = (0, tunnel_process_1.parseTunnelSelectors)(flags.selector);
|
|
12
|
+
await this.withAuth(async () => {
|
|
13
|
+
const organizationId = await (0, backend_1.tunnelOrganization)(this.client);
|
|
14
|
+
const tunnel = await (0, backend_1.findTunnel)(this.client, organizationId, args.name);
|
|
15
|
+
if (!tunnel) {
|
|
16
|
+
this.error(`Tunnel ${args.name} does not exist.`);
|
|
17
|
+
}
|
|
18
|
+
const updated = await (0, backend_1.updateTunnelSelectors)(this.client, organizationId, tunnel, [...selectors]);
|
|
19
|
+
if (flags.json) {
|
|
20
|
+
this.outputJson(updated);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.output(`Updated the selectors of tunnel ${args.name}. Instances attached from now on get them; restart the ` +
|
|
24
|
+
'connector to apply them to attached instances.');
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
TunnelUpdate.summary = "Replace a persistent tunnel's selectors";
|
|
29
|
+
TunnelUpdate.description = "Replace a persistent tunnel's selectors. Instances attached after the change get the new ones; " +
|
|
30
|
+
"restart the connector to apply them to attached instances. Needs an admin's API key or login.";
|
|
31
|
+
TunnelUpdate.examples = [
|
|
32
|
+
'<%= config.bin %> tunnel update staging --selector localhost:3000 --selector localhost:4000',
|
|
33
|
+
];
|
|
34
|
+
TunnelUpdate.args = {
|
|
35
|
+
name: core_1.Args.string({ description: 'Name of the tunnel to update.', required: true }),
|
|
36
|
+
};
|
|
37
|
+
TunnelUpdate.flags = {
|
|
38
|
+
...base_command_1.BaseCommand.baseFlags,
|
|
39
|
+
selector: core_1.Flags.string({
|
|
40
|
+
description: 'Destination instances reach through the connector, as localhost:port, IPv4:port, [IPv6]:port, or ' +
|
|
41
|
+
'an exact or *. wildcard domain. Repeat for more selectors; they replace the current ones.',
|
|
42
|
+
multiple: true,
|
|
43
|
+
required: true,
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
exports.default = TunnelUpdate;
|
|
47
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/tunnel/update.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,qDAAiD;AACjD,+CAA0F;AAC1F,6DAAgE;AAEhE,MAAqB,YAAa,SAAQ,0BAAW;IAwBnD,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,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,OAAO,GAAG,MAAM,IAAA,+BAAqB,EAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;YACjG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACzB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CACT,mCAAmC,IAAI,CAAC,IAAI,yDAAyD;gBACnG,gDAAgD,CACnD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;;AA5CM,oBAAO,GAAG,yCAAyC,CAAC;AACpD,wBAAW,GAChB,iGAAiG;IACjG,+FAA+F,CAAC;AAC3F,qBAAQ,GAAG;IAChB,6FAA6F;CAC9F,CAAC;AAEK,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;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,QAAQ,EAAE,YAAK,CAAC,MAAM,CAAC;QACrB,WAAW,EACT,mGAAmG;YACnG,2FAA2F;QAC7F,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;kBAtBiB,YAAY"}
|
package/dist/lib/backend.d.ts
CHANGED
|
@@ -24,26 +24,71 @@ export interface PersistentTunnel {
|
|
|
24
24
|
id: string;
|
|
25
25
|
name: string;
|
|
26
26
|
ephemeral: boolean;
|
|
27
|
+
online: boolean;
|
|
28
|
+
selectors: string[];
|
|
29
|
+
hostname?: string;
|
|
30
|
+
tokenExpiresAt?: string;
|
|
31
|
+
instances: {
|
|
32
|
+
id: string;
|
|
33
|
+
platform: string;
|
|
34
|
+
state: string;
|
|
35
|
+
}[];
|
|
27
36
|
}
|
|
37
|
+
/** A tunnel token as the backend returns it, once: Limrun never stores it. */
|
|
38
|
+
export interface TunnelToken {
|
|
39
|
+
token: string;
|
|
40
|
+
expiresAt: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolves the organization a credential manages tunnels for. It must be an
|
|
44
|
+
* organization key or login, so a user token's default organization does not
|
|
45
|
+
* count. A tunnel token belongs in `lim tunnel run --token`: the backend
|
|
46
|
+
* accepts no signed token.
|
|
47
|
+
*/
|
|
48
|
+
export declare function tunnelOrganization(client: Limrun): Promise<string>;
|
|
28
49
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* organization does not count.
|
|
50
|
+
* Reads the organization and tunnel a tunnel token names, without verifying
|
|
51
|
+
* it; undefined when the token is no tunnel token. Its only scope is
|
|
52
|
+
* tunnel:<id>:connect.
|
|
33
53
|
*/
|
|
34
|
-
export declare function
|
|
54
|
+
export declare function tunnelTokenClaims(token: string): {
|
|
35
55
|
organizationId: string;
|
|
36
|
-
tunnelId
|
|
37
|
-
}
|
|
56
|
+
tunnelId: string;
|
|
57
|
+
} | undefined;
|
|
58
|
+
/** Lists an organization's tunnels. */
|
|
59
|
+
export declare function listTunnels(client: Limrun, organizationId: string): Promise<PersistentTunnel[]>;
|
|
38
60
|
/** Finds an organization's tunnel by the name instances use. */
|
|
39
61
|
export declare function findTunnel(client: Limrun, organizationId: string, name: string): Promise<PersistentTunnel | undefined>;
|
|
40
|
-
/** Creates a throwaway tunnel that goes away when its connector does. */
|
|
41
|
-
export declare function createQuickTunnel(client: Limrun, organizationId: string, name: string, selectors: string[]): Promise<PersistentTunnel>;
|
|
42
62
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
63
|
+
* Creates a tunnel with the token its connector runs with: only tunnel tokens
|
|
64
|
+
* connect. The token is returned only here.
|
|
65
|
+
*/
|
|
66
|
+
export declare function createTunnel(client: Limrun, organizationId: string, request: {
|
|
67
|
+
name: string;
|
|
68
|
+
selectors: string[];
|
|
69
|
+
expirationMonths: number;
|
|
70
|
+
ephemeral?: boolean;
|
|
71
|
+
}): Promise<{
|
|
72
|
+
tunnel: PersistentTunnel;
|
|
73
|
+
token: TunnelToken;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* Creates a quick tunnel that goes away when its connector does. Its token
|
|
77
|
+
* goes with the tunnel, so it lasts a month, the shortest the API takes.
|
|
78
|
+
*/
|
|
79
|
+
export declare function createQuickTunnel(client: Limrun, organizationId: string, name: string, selectors: string[]): Promise<{
|
|
80
|
+
tunnel: PersistentTunnel;
|
|
81
|
+
token: string;
|
|
82
|
+
}>;
|
|
83
|
+
/** Replaces a tunnel's selectors. Instances attached after the change get them. */
|
|
84
|
+
export declare function updateTunnelSelectors(client: Limrun, organizationId: string, tunnel: PersistentTunnel, selectors: string[]): Promise<PersistentTunnel>;
|
|
85
|
+
/** Issues a tunnel's token, which revokes the one it had. */
|
|
86
|
+
export declare function rotateTunnelToken(client: Limrun, organizationId: string, tunnel: PersistentTunnel, expirationMonths: number): Promise<TunnelToken>;
|
|
87
|
+
/**
|
|
88
|
+
* Deletes a tunnel, which revokes its token. A tunnel already gone is fine:
|
|
89
|
+
* the hub deletes a quick tunnel when its connector says bye.
|
|
45
90
|
*/
|
|
46
|
-
export declare function
|
|
91
|
+
export declare function deleteTunnel(client: Limrun, organizationId: string, tunnelId: string): Promise<void>;
|
|
47
92
|
/** Fetches a secret's data, or undefined when it does not exist. */
|
|
48
93
|
export declare function getSecret(client: Limrun, organizationId: string, secretType: string, secretName: string): Promise<SecretData | undefined>;
|
|
49
94
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/lib/backend.ts"],"names":[],"mappings":"AAAA,OAAO,MAAwD,MAAM,aAAa,CAAC;AAEnF;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAU/D;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5D;
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/lib/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/backend.js
CHANGED
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.androidSigningKeySecretType = void 0;
|
|
4
4
|
exports.whoAmI = whoAmI;
|
|
5
|
-
exports.
|
|
5
|
+
exports.tunnelOrganization = tunnelOrganization;
|
|
6
|
+
exports.tunnelTokenClaims = tunnelTokenClaims;
|
|
7
|
+
exports.listTunnels = listTunnels;
|
|
6
8
|
exports.findTunnel = findTunnel;
|
|
9
|
+
exports.createTunnel = createTunnel;
|
|
7
10
|
exports.createQuickTunnel = createQuickTunnel;
|
|
8
|
-
exports.
|
|
11
|
+
exports.updateTunnelSelectors = updateTunnelSelectors;
|
|
12
|
+
exports.rotateTunnelToken = rotateTunnelToken;
|
|
13
|
+
exports.deleteTunnel = deleteTunnel;
|
|
9
14
|
exports.getSecret = getSecret;
|
|
10
15
|
exports.putSecret = putSecret;
|
|
11
16
|
const api_1 = require("@limrun/api");
|
|
@@ -40,26 +45,65 @@ async function fetchWhoAmI(client) {
|
|
|
40
45
|
}
|
|
41
46
|
}
|
|
42
47
|
/**
|
|
43
|
-
* Resolves the organization
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
48
|
+
* Resolves the organization a credential manages tunnels for. It must be an
|
|
49
|
+
* organization key or login, so a user token's default organization does not
|
|
50
|
+
* count. A tunnel token belongs in `lim tunnel run --token`: the backend
|
|
51
|
+
* accepts no signed token.
|
|
47
52
|
*/
|
|
48
|
-
async function
|
|
53
|
+
async function tunnelOrganization(client) {
|
|
54
|
+
if ((client.apiKey ?? '').startsWith(SIGNED_TOKEN_PREFIX)) {
|
|
55
|
+
throw new Error('The API key is a signed token. Pass a tunnel token to lim tunnel run with --token or ' +
|
|
56
|
+
'LIM_TUNNEL_TOKEN; managing tunnels needs an organization API key or login.');
|
|
57
|
+
}
|
|
49
58
|
const body = await fetchWhoAmI(client);
|
|
50
59
|
const organizationId = body.organization?.id;
|
|
51
60
|
if (!organizationId) {
|
|
52
|
-
throw new Error('
|
|
61
|
+
throw new Error('Managing tunnels needs an organization API key or login.');
|
|
53
62
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
return organizationId;
|
|
64
|
+
}
|
|
65
|
+
/** The tunnel a credential's scopes name, when its only scope connects one. */
|
|
66
|
+
function onlyTunnelOf(scopes) {
|
|
67
|
+
const [scope, ...rest] = Array.isArray(scopes) ? scopes : [];
|
|
68
|
+
const match = rest.length === 0 && typeof scope === 'string' ? /^tunnel:(tunnel_[0-9a-z]+):connect$/.exec(scope) : null;
|
|
69
|
+
return match?.[1];
|
|
70
|
+
}
|
|
71
|
+
const SIGNED_TOKEN_PREFIX = 'lim_st_';
|
|
72
|
+
/**
|
|
73
|
+
* Reads the organization and tunnel a tunnel token names, without verifying
|
|
74
|
+
* it; undefined when the token is no tunnel token. Its only scope is
|
|
75
|
+
* tunnel:<id>:connect.
|
|
76
|
+
*/
|
|
77
|
+
function tunnelTokenClaims(token) {
|
|
78
|
+
const payload = token.slice(SIGNED_TOKEN_PREFIX.length).split('.')[1];
|
|
79
|
+
if (!token.startsWith(SIGNED_TOKEN_PREFIX) || !payload) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
let claims;
|
|
83
|
+
try {
|
|
84
|
+
claims = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
if (typeof claims !== 'object' || claims === null) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
const { sub, scopes } = claims;
|
|
93
|
+
const tunnelId = onlyTunnelOf(scopes);
|
|
94
|
+
if (!tunnelId || typeof sub !== 'string' || sub === '') {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
return { organizationId: sub, tunnelId };
|
|
57
98
|
}
|
|
58
99
|
function tunnelsPath(organizationId) {
|
|
59
100
|
return `/v1/organizations/${encodeURIComponent(organizationId)}/tunnels`;
|
|
60
101
|
}
|
|
61
|
-
|
|
62
|
-
|
|
102
|
+
function tunnelPath(organizationId, tunnelId) {
|
|
103
|
+
return `${tunnelsPath(organizationId)}/${encodeURIComponent(tunnelId)}`;
|
|
104
|
+
}
|
|
105
|
+
/** Lists an organization's tunnels. */
|
|
106
|
+
async function listTunnels(client, organizationId) {
|
|
63
107
|
let body;
|
|
64
108
|
try {
|
|
65
109
|
body = await client.get(tunnelsPath(organizationId));
|
|
@@ -67,27 +111,74 @@ async function findTunnel(client, organizationId, name) {
|
|
|
67
111
|
catch (err) {
|
|
68
112
|
rethrow(err, 'Failed to list tunnels');
|
|
69
113
|
}
|
|
70
|
-
return body.tunnels
|
|
114
|
+
return body.tunnels ?? [];
|
|
71
115
|
}
|
|
72
|
-
/**
|
|
73
|
-
async function
|
|
116
|
+
/** Finds an organization's tunnel by the name instances use. */
|
|
117
|
+
async function findTunnel(client, organizationId, name) {
|
|
118
|
+
return (await listTunnels(client, organizationId)).find((tunnel) => tunnel.name === name);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Creates a tunnel with the token its connector runs with: only tunnel tokens
|
|
122
|
+
* connect. The token is returned only here.
|
|
123
|
+
*/
|
|
124
|
+
async function createTunnel(client, organizationId, request) {
|
|
125
|
+
const { name, selectors, expirationMonths, ephemeral } = request;
|
|
126
|
+
let body;
|
|
74
127
|
try {
|
|
75
|
-
|
|
76
|
-
body: { name, selectors, ephemeral:
|
|
128
|
+
body = await client.post(tunnelsPath(organizationId), {
|
|
129
|
+
body: { name, selectors, ...(ephemeral && { ephemeral }), token: { expirationMonths } },
|
|
77
130
|
});
|
|
78
|
-
return body.tunnel;
|
|
79
131
|
}
|
|
80
132
|
catch (err) {
|
|
81
133
|
rethrow(err, `Failed to create tunnel ${name}`);
|
|
82
134
|
}
|
|
135
|
+
if (!body.token?.token) {
|
|
136
|
+
// Nothing can run a tunnel without its token, so it goes at once.
|
|
137
|
+
await deleteTunnel(client, organizationId, body.tunnel.id).catch(() => { });
|
|
138
|
+
throw new Error(`Limrun created tunnel ${name} but returned no token to run it with.`);
|
|
139
|
+
}
|
|
140
|
+
return { tunnel: body.tunnel, token: body.token };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Creates a quick tunnel that goes away when its connector does. Its token
|
|
144
|
+
* goes with the tunnel, so it lasts a month, the shortest the API takes.
|
|
145
|
+
*/
|
|
146
|
+
async function createQuickTunnel(client, organizationId, name, selectors) {
|
|
147
|
+
const created = await createTunnel(client, organizationId, {
|
|
148
|
+
name,
|
|
149
|
+
selectors,
|
|
150
|
+
expirationMonths: 1,
|
|
151
|
+
ephemeral: true,
|
|
152
|
+
});
|
|
153
|
+
return { tunnel: created.tunnel, token: created.token.token };
|
|
154
|
+
}
|
|
155
|
+
/** Replaces a tunnel's selectors. Instances attached after the change get them. */
|
|
156
|
+
async function updateTunnelSelectors(client, organizationId, tunnel, selectors) {
|
|
157
|
+
try {
|
|
158
|
+
return await client.patch(tunnelPath(organizationId, tunnel.id), { body: { selectors } });
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
rethrow(err, `Failed to update tunnel ${tunnel.name}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/** Issues a tunnel's token, which revokes the one it had. */
|
|
165
|
+
async function rotateTunnelToken(client, organizationId, tunnel, expirationMonths) {
|
|
166
|
+
try {
|
|
167
|
+
return await client.post(`${tunnelPath(organizationId, tunnel.id)}/token`, {
|
|
168
|
+
body: { expirationMonths },
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
rethrow(err, `Failed to rotate the token of tunnel ${tunnel.name}`);
|
|
173
|
+
}
|
|
83
174
|
}
|
|
84
175
|
/**
|
|
85
|
-
* Deletes a
|
|
86
|
-
*
|
|
176
|
+
* Deletes a tunnel, which revokes its token. A tunnel already gone is fine:
|
|
177
|
+
* the hub deletes a quick tunnel when its connector says bye.
|
|
87
178
|
*/
|
|
88
|
-
async function
|
|
179
|
+
async function deleteTunnel(client, organizationId, tunnelId) {
|
|
89
180
|
try {
|
|
90
|
-
await client.delete(
|
|
181
|
+
await client.delete(tunnelPath(organizationId, tunnelId));
|
|
91
182
|
}
|
|
92
183
|
catch (err) {
|
|
93
184
|
if (err instanceof api_1.NotFoundError) {
|
package/dist/lib/backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/lib/backend.ts"],"names":[],"mappings":";;;AAiCA,wBAOC;
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/lib/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/backend.test.js
CHANGED
|
@@ -57,26 +57,39 @@ describe('backend client', () => {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
describe('tunnels', () => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
organizationId: 'org_1',
|
|
68
|
-
tunnelId: 'tunnel_01h455vb4pex5vsknk084sn02q',
|
|
69
|
-
});
|
|
60
|
+
// A signed token's header and signature do not matter here; only the
|
|
61
|
+
// payload's claims are read.
|
|
62
|
+
function signedToken(claims) {
|
|
63
|
+
return `lim_st_eyJhbGciOiJFZERTQSJ9.${Buffer.from(JSON.stringify(claims)).toString('base64url')}.c2ln`;
|
|
64
|
+
}
|
|
65
|
+
it('reads the organization and tunnel a tunnel token names', () => {
|
|
66
|
+
expect((0, backend_1.tunnelTokenClaims)(signedToken({ sub: 'org_1', scopes: ['tunnel:tunnel_01h455vb4pex5vsknk084sn02q:connect'] }))).toEqual({ organizationId: 'org_1', tunnelId: 'tunnel_01h455vb4pex5vsknk084sn02q' });
|
|
70
67
|
});
|
|
71
68
|
it.each([
|
|
72
|
-
['
|
|
73
|
-
['
|
|
74
|
-
['a
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
69
|
+
['a payload that is null', null],
|
|
70
|
+
['an instance token', { sub: 'org_1', scopes: ['ios:ios_euna_x:all'] }],
|
|
71
|
+
['a token for every tunnel', { sub: 'org_1', scopes: ['tunnel:*:connect'] }],
|
|
72
|
+
[
|
|
73
|
+
'a token with more than its tunnel',
|
|
74
|
+
{ sub: 'org_1', scopes: ['tunnel:tunnel_01h455vb4pex5vsknk084sn02q:connect', 'ios:*:read'] },
|
|
75
|
+
],
|
|
76
|
+
])('reads no tunnel from %s', (_, claims) => {
|
|
77
|
+
expect((0, backend_1.tunnelTokenClaims)(signedToken(claims))).toBeUndefined();
|
|
78
|
+
});
|
|
79
|
+
it("asks whoami for the organization of an admin's key", async () => {
|
|
80
|
+
fetchMock.mockResolvedValue(mockResponse(200, { organization: { id: 'org_1' } }));
|
|
81
|
+
await expect((0, backend_1.tunnelOrganization)(client)).resolves.toBe('org_1');
|
|
82
|
+
});
|
|
83
|
+
it('refuses a signed token as the API key, without a call', async () => {
|
|
84
|
+
const tokenClient = new api_1.default({
|
|
85
|
+
apiKey: signedToken({ sub: 'org_1', scopes: ['tunnel:tunnel_01h455vb4pex5vsknk084sn02q:connect'] }),
|
|
86
|
+
baseURL: apiEndpoint,
|
|
87
|
+
maxRetries: 0,
|
|
88
|
+
});
|
|
89
|
+
await expect((0, backend_1.tunnelOrganization)(tokenClient)).rejects.toThrow('--token or LIM_TUNNEL_TOKEN');
|
|
90
|
+
expect(fetchMock).not.toHaveBeenCalled();
|
|
91
|
+
});
|
|
92
|
+
it('finds a tunnel by name and creates a quick one', async () => {
|
|
80
93
|
fetchMock.mockResolvedValueOnce(mockResponse(200, { tunnels: [{ id: 'tunnel_1', name: 'staging', ephemeral: false }] }));
|
|
81
94
|
await expect((0, backend_1.findTunnel)(client, 'org_1', 'staging')).resolves.toEqual({
|
|
82
95
|
id: 'tunnel_1',
|
|
@@ -84,26 +97,63 @@ describe('backend client', () => {
|
|
|
84
97
|
ephemeral: false,
|
|
85
98
|
});
|
|
86
99
|
expect(requestOf(fetchMock.mock.calls[0]).url).toBe(`${apiEndpoint}/v1/organizations/org_1/tunnels`);
|
|
87
|
-
fetchMock.mockResolvedValueOnce(mockResponse(201, {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
100
|
+
fetchMock.mockResolvedValueOnce(mockResponse(201, {
|
|
101
|
+
tunnel: { id: 'tunnel_2', name: 'scratch', ephemeral: true },
|
|
102
|
+
token: { token: 'lim_st_quick', expiresAt: '2026-11-09T00:00:00Z' },
|
|
103
|
+
}));
|
|
104
|
+
await expect((0, backend_1.createQuickTunnel)(client, 'org_1', 'scratch', ['localhost:3000'])).resolves.toEqual({
|
|
105
|
+
tunnel: { id: 'tunnel_2', name: 'scratch', ephemeral: true },
|
|
106
|
+
token: 'lim_st_quick',
|
|
91
107
|
});
|
|
92
108
|
const [, init] = fetchMock.mock.calls[1];
|
|
93
109
|
expect(JSON.parse(String(init.body))).toEqual({
|
|
94
110
|
name: 'scratch',
|
|
95
111
|
selectors: ['localhost:3000'],
|
|
96
112
|
ephemeral: true,
|
|
113
|
+
token: { expirationMonths: 1 },
|
|
114
|
+
});
|
|
115
|
+
// Without its token the tunnel could not run, so the create fails and
|
|
116
|
+
// the tunnel goes at once.
|
|
117
|
+
fetchMock.mockResolvedValueOnce(mockResponse(201, { tunnel: { id: 'tunnel_3', name: 'other', ephemeral: true } }));
|
|
118
|
+
fetchMock.mockResolvedValueOnce(new Response(null, { status: 204 }));
|
|
119
|
+
await expect((0, backend_1.createQuickTunnel)(client, 'org_1', 'other', ['localhost:3000'])).rejects.toThrow('returned no token');
|
|
120
|
+
const [deleteURL, deleteInit] = fetchMock.mock.calls[3];
|
|
121
|
+
expect(deleteURL).toBe(`${apiEndpoint}/v1/organizations/org_1/tunnels/tunnel_3`);
|
|
122
|
+
expect(deleteInit.method).toBe('DELETE');
|
|
123
|
+
});
|
|
124
|
+
it('replaces selectors and rotates the token of a tunnel by its ID', async () => {
|
|
125
|
+
const tunnel = {
|
|
126
|
+
id: 'tunnel_1',
|
|
127
|
+
name: 'staging',
|
|
128
|
+
ephemeral: false,
|
|
129
|
+
online: true,
|
|
130
|
+
selectors: [],
|
|
131
|
+
instances: [],
|
|
132
|
+
};
|
|
133
|
+
fetchMock.mockResolvedValueOnce(mockResponse(200, { ...tunnel, selectors: ['localhost:4000'] }));
|
|
134
|
+
await (0, backend_1.updateTunnelSelectors)(client, 'org_1', tunnel, ['localhost:4000']);
|
|
135
|
+
const [updateURL, updateInit] = fetchMock.mock.calls[0];
|
|
136
|
+
expect(updateURL).toBe(`${apiEndpoint}/v1/organizations/org_1/tunnels/tunnel_1`);
|
|
137
|
+
expect(updateInit.method).toBe('PATCH');
|
|
138
|
+
expect(JSON.parse(String(updateInit.body))).toEqual({ selectors: ['localhost:4000'] });
|
|
139
|
+
fetchMock.mockResolvedValueOnce(mockResponse(201, { token: 'lim_st_new', expiresAt: '2027-10-10T00:00:00Z' }));
|
|
140
|
+
await expect((0, backend_1.rotateTunnelToken)(client, 'org_1', tunnel, 3)).resolves.toEqual({
|
|
141
|
+
token: 'lim_st_new',
|
|
142
|
+
expiresAt: '2027-10-10T00:00:00Z',
|
|
97
143
|
});
|
|
144
|
+
const [rotateURL, rotateInit] = fetchMock.mock.calls[1];
|
|
145
|
+
expect(rotateURL).toBe(`${apiEndpoint}/v1/organizations/org_1/tunnels/tunnel_1/token`);
|
|
146
|
+
expect(rotateInit.method).toBe('POST');
|
|
147
|
+
expect(JSON.parse(String(rotateInit.body))).toEqual({ expirationMonths: 3 });
|
|
98
148
|
});
|
|
99
|
-
it('deletes a
|
|
149
|
+
it('deletes a quick tunnel by ID, and a tunnel the hub already removed is fine', async () => {
|
|
100
150
|
fetchMock.mockResolvedValueOnce(new Response(null, { status: 204 }));
|
|
101
|
-
await (0, backend_1.
|
|
151
|
+
await (0, backend_1.deleteTunnel)(client, 'org_1', 'tunnel_2');
|
|
102
152
|
const [url, init] = fetchMock.mock.calls[0];
|
|
103
153
|
expect(url).toBe(`${apiEndpoint}/v1/organizations/org_1/tunnels/tunnel_2`);
|
|
104
154
|
expect(init.method).toBe('DELETE');
|
|
105
155
|
fetchMock.mockResolvedValueOnce(mockResponse(404, { message: 'tunnel not found' }));
|
|
106
|
-
await expect((0, backend_1.
|
|
156
|
+
await expect((0, backend_1.deleteTunnel)(client, 'org_1', 'tunnel_2')).resolves.toBeUndefined();
|
|
107
157
|
});
|
|
108
158
|
});
|
|
109
159
|
describe('whoAmI', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.test.js","sourceRoot":"","sources":["../../src/lib/backend.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"backend.test.js","sourceRoot":"","sources":["../../src/lib/backend.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/tunnel-run.d.ts
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import type { TunnelConnectorEvent } from '@limrun/api';
|
|
2
2
|
/**
|
|
3
3
|
* One human-readable log line per connector event. name is undefined until
|
|
4
|
-
* the first active, for a connector started with a tunnel
|
|
4
|
+
* the first active, for a connector started with a tunnel token alone.
|
|
5
5
|
*/
|
|
6
6
|
export declare function formatTunnelConnectorEvent(name: string | undefined, event: TunnelConnectorEvent, ephemeral?: boolean): string;
|
|
7
|
+
/**
|
|
8
|
+
* The lines that hand over a tunnel token after `create` or `rotate`: the
|
|
9
|
+
* connector command with the token, which Limrun shows only this once.
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatIssuedToken(lead: string, token: {
|
|
12
|
+
token: string;
|
|
13
|
+
expiresAt: string;
|
|
14
|
+
}): string;
|
|
7
15
|
//# sourceMappingURL=tunnel-run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-run.d.ts","sourceRoot":"","sources":["../../src/lib/tunnel-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,oBAAoB,EAC3B,SAAS,UAAQ,GAChB,MAAM,
|
|
1
|
+
{"version":3,"file":"tunnel-run.d.ts","sourceRoot":"","sources":["../../src/lib/tunnel-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,oBAAoB,EAC3B,SAAS,UAAQ,GAChB,MAAM,CAoCR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQnG"}
|