@lllanyard/proxy 0.1.2 → 0.1.5
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/index.d.ts +2 -0
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/relay.d.ts +24 -0
- package/dist/relay.js +95 -0
- package/dist/relay.js.map +1 -0
- package/dist/serve-options.js +1 -1
- package/dist/serve-options.js.map +1 -1
- package/dist/server.d.ts +29 -1
- package/dist/server.js +168 -15
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export { fromConfig } from './providers.js';
|
|
|
3
3
|
export { isPublicAddress } from './netguard.js';
|
|
4
4
|
export { startEgressProxy, hostAllowed } from './egress.js';
|
|
5
5
|
export { AuthGuard } from './ratelimit.js';
|
|
6
|
+
export { startRelay, relayEnv } from './relay.js';
|
|
7
|
+
export type { RelayOptions } from './relay.js';
|
|
6
8
|
export { checkServeOptions } from './serve-options.js';
|
|
7
9
|
export type { ServeOptions } from './serve-options.js';
|
|
8
10
|
export type { EgressProxy, EgressOptions } from './egress.js';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AgentStore, DEFAULT_PORT, LicenseStore, createUsageLog, KeyringStore, ProviderStore, allProviders, } from '@lllanyard/core';
|
|
1
|
+
import { AgentStore, DEFAULT_PORT, DEVICE_LIMITS, DeviceStore, LicenseStore, createUsageLog, KeyringStore, ProviderStore, TeamStore, allProviders, bindingsForAllKeys, } from '@lllanyard/core';
|
|
2
2
|
import { createProxy } from './server.js';
|
|
3
3
|
import { fromConfig } from './providers.js';
|
|
4
4
|
export { createProxy } from './server.js';
|
|
@@ -6,12 +6,14 @@ export { fromConfig } from './providers.js';
|
|
|
6
6
|
export { isPublicAddress } from './netguard.js';
|
|
7
7
|
export { startEgressProxy, hostAllowed } from './egress.js';
|
|
8
8
|
export { AuthGuard } from './ratelimit.js';
|
|
9
|
+
export { startRelay, relayEnv } from './relay.js';
|
|
9
10
|
export { checkServeOptions } from './serve-options.js';
|
|
10
11
|
import { checkServeOptions } from './serve-options.js';
|
|
11
12
|
/** Starts the proxy. By default loopback only; a non-loopback host needs a Pro license, TLS and --allow-host. */
|
|
12
13
|
export function startProxy(opts = {}) {
|
|
13
14
|
const host = opts.host ?? '127.0.0.1';
|
|
14
|
-
|
|
15
|
+
const tier = new LicenseStore().status().tier;
|
|
16
|
+
checkServeOptions(opts, tier);
|
|
15
17
|
const port = opts.port ?? Number(process.env.LLLANYARD_PORT ?? DEFAULT_PORT);
|
|
16
18
|
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
17
19
|
throw new Error('Invalid port');
|
|
@@ -24,13 +26,22 @@ export function startProxy(opts = {}) {
|
|
|
24
26
|
m.set(id, fromConfig(c));
|
|
25
27
|
return m;
|
|
26
28
|
};
|
|
29
|
+
// Team members only: requests with no personal key go on to the team server (lllanyard team join).
|
|
30
|
+
const teamLink = () => (new LicenseStore().status().tier === 'team' ? new TeamStore().get() : null);
|
|
27
31
|
let verify = agents.verifier();
|
|
28
32
|
let providers = build();
|
|
33
|
+
let team = teamLink();
|
|
34
|
+
// Pro: other computers come in as paired devices (lllanyard device add), up to the plan's limit.
|
|
35
|
+
const devices = new DeviceStore();
|
|
36
|
+
const deviceLimit = () => DEVICE_LIMITS[new LicenseStore().status().tier];
|
|
37
|
+
let verifyDevice = devices.verifier(deviceLimit());
|
|
29
38
|
// Picks up new/revoked agents and provider changes within ~10s without a keychain read per request.
|
|
30
39
|
const timer = setInterval(() => {
|
|
31
40
|
try {
|
|
32
41
|
verify = agents.verifier();
|
|
33
42
|
providers = build();
|
|
43
|
+
team = teamLink();
|
|
44
|
+
verifyDevice = devices.verifier(deviceLimit());
|
|
34
45
|
}
|
|
35
46
|
catch (e) {
|
|
36
47
|
process.stderr.write(`refresh failed: ${e.message}\n`);
|
|
@@ -46,6 +57,14 @@ export function startProxy(opts = {}) {
|
|
|
46
57
|
rpm: Number(process.env.LLLANYARD_RPM ?? 120),
|
|
47
58
|
allowOrigin: process.env.LLLANYARD_ALLOW_ORIGIN === '1',
|
|
48
59
|
tls: opts.tls, allowedHosts: opts.allowedHosts,
|
|
60
|
+
team: () => team,
|
|
61
|
+
devices: {
|
|
62
|
+
verify: (t, m) => verifyDevice(t, m),
|
|
63
|
+
pair: (code, machine) => { const r = devices.pair(code, machine); verifyDevice = devices.verifier(deviceLimit()); return r; },
|
|
64
|
+
},
|
|
65
|
+
// On Pro, the shared proxy is for one person's devices: other computers need to be paired, and count towards 3.
|
|
66
|
+
agentsLoopbackOnly: tier === 'pro',
|
|
67
|
+
keyVars: () => bindingsForAllKeys(new KeyringStore()),
|
|
49
68
|
});
|
|
50
69
|
return new Promise((resolve, reject) => {
|
|
51
70
|
server.once('error', (e) => reject(new Error(e.code === 'EADDRINUSE' ? `Port ${port} is already in use (set --port or LLLANYARD_PORT)` : e.message)));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/relay.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs on a paired device (no API keys here). Tools on this device talk to the relay on 127.0.0.1 with a local
|
|
3
|
+
* token; the relay passes each request to the main computer's proxy with this device's token and machine ID, and
|
|
4
|
+
* the main computer adds the real key. Neither the device token nor the machine ID reaches the tool.
|
|
5
|
+
*/
|
|
6
|
+
export interface RelayOptions {
|
|
7
|
+
url: string;
|
|
8
|
+
deviceToken: string;
|
|
9
|
+
machine: string;
|
|
10
|
+
ca?: string;
|
|
11
|
+
localToken: string;
|
|
12
|
+
port?: number;
|
|
13
|
+
log?: (rec: Record<string, unknown>) => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function startRelay(o: RelayOptions): Promise<{
|
|
16
|
+
port: number;
|
|
17
|
+
base: string;
|
|
18
|
+
close: () => void;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Environment for a tool on a paired device: SDK base URLs pointing at the relay, and the relay's token as each
|
|
22
|
+
* API key. `keyVars` are the main computer's variable names for its keys (e.g. GITHUB_TOKEN → github).
|
|
23
|
+
*/
|
|
24
|
+
export declare function relayEnv(base: string, localToken: string, keyVars: Record<string, string>): Record<string, string>;
|
package/dist/relay.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import https from 'node:https';
|
|
3
|
+
import { timingSafeEqual } from 'node:crypto';
|
|
4
|
+
const DROP = new Set([
|
|
5
|
+
'host', 'connection', 'keep-alive', 'proxy-authorization', 'proxy-connection', 'te', 'trailer', 'transfer-encoding',
|
|
6
|
+
'upgrade', 'expect', 'authorization', 'x-api-key', 'cookie', 'x-lllanyard-machine',
|
|
7
|
+
]);
|
|
8
|
+
const DROP_RES = new Set(['connection', 'keep-alive', 'transfer-encoding', 'proxy-authenticate', 'upgrade', 'set-cookie']);
|
|
9
|
+
const same = (a, b) => a.length === b.length && timingSafeEqual(Buffer.from(a), Buffer.from(b));
|
|
10
|
+
export function startRelay(o) {
|
|
11
|
+
const origin = new URL(o.url).origin;
|
|
12
|
+
const send = (res, code, msg) => {
|
|
13
|
+
if (res.headersSent) {
|
|
14
|
+
res.destroy();
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const body = JSON.stringify({ error: msg });
|
|
18
|
+
res.writeHead(code, { 'content-type': 'application/json', 'content-length': Buffer.byteLength(body) });
|
|
19
|
+
res.end(body);
|
|
20
|
+
};
|
|
21
|
+
const server = http.createServer((req, res) => {
|
|
22
|
+
const port = req.socket.localPort;
|
|
23
|
+
const host = String(req.headers.host ?? '').toLowerCase();
|
|
24
|
+
if (![`127.0.0.1:${port}`, `localhost:${port}`, `[::1]:${port}`].includes(host))
|
|
25
|
+
return send(res, 403, 'Forbidden host');
|
|
26
|
+
if (req.headers.origin)
|
|
27
|
+
return send(res, 403, 'Browser-origin requests are not allowed');
|
|
28
|
+
const bearer = /^Bearer\s+(.+)$/i.exec(String(req.headers.authorization ?? ''))?.[1];
|
|
29
|
+
const xkey = typeof req.headers['x-api-key'] === 'string' ? req.headers['x-api-key'] : undefined;
|
|
30
|
+
const token = bearer ?? xkey;
|
|
31
|
+
if (!token || !same(token, o.localToken))
|
|
32
|
+
return send(res, 401, 'Invalid or missing token for the LLLanyard relay');
|
|
33
|
+
if (!(req.url ?? '').startsWith('/') || (req.url ?? '').startsWith('//'))
|
|
34
|
+
return send(res, 404, 'Not found');
|
|
35
|
+
let target;
|
|
36
|
+
try {
|
|
37
|
+
target = new URL(origin + req.url);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return send(res, 400, 'Bad request path');
|
|
41
|
+
}
|
|
42
|
+
if (target.origin !== origin)
|
|
43
|
+
return send(res, 400, 'Bad request path');
|
|
44
|
+
const headers = {};
|
|
45
|
+
for (const [k, v] of Object.entries(req.headers))
|
|
46
|
+
if (!DROP.has(k) && v !== undefined)
|
|
47
|
+
headers[k] = v;
|
|
48
|
+
headers.authorization = `Bearer ${o.deviceToken}`;
|
|
49
|
+
headers['x-lllanyard-machine'] = o.machine;
|
|
50
|
+
const started = Date.now();
|
|
51
|
+
let up;
|
|
52
|
+
res.on('close', () => { o.log?.({ ts: new Date().toISOString(), via: 'relay', method: req.method, path: target.pathname, status: res.statusCode, ms: Date.now() - started }); up?.destroy(); });
|
|
53
|
+
try {
|
|
54
|
+
up = https.request(target, { method: req.method, headers, timeout: 300_000, minVersion: 'TLSv1.2', ...(o.ca ? { ca: o.ca } : {}) }, (ures) => {
|
|
55
|
+
const rh = {};
|
|
56
|
+
for (const [k, v] of Object.entries(ures.headers))
|
|
57
|
+
if (!DROP_RES.has(k) && v !== undefined)
|
|
58
|
+
rh[k] = v;
|
|
59
|
+
res.writeHead(ures.statusCode ?? 502, rh);
|
|
60
|
+
ures.pipe(res);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return send(res, 502, 'Could not reach your main computer');
|
|
65
|
+
}
|
|
66
|
+
up.on('timeout', () => up.destroy(new Error('timeout')));
|
|
67
|
+
up.on('error', (e) => send(res, 502, `Could not reach your main computer (${o.url}): ${e.message}`));
|
|
68
|
+
req.pipe(up);
|
|
69
|
+
});
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
server.once('error', (e) => reject(new Error(e.code === 'EADDRINUSE' ? `Port ${o.port} is already in use (choose another with --port)` : e.message)));
|
|
72
|
+
server.listen(o.port ?? 0, '127.0.0.1', () => {
|
|
73
|
+
const port = server.address().port;
|
|
74
|
+
resolve({ port, base: `http://127.0.0.1:${port}`, close: () => server.close() });
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Environment for a tool on a paired device: SDK base URLs pointing at the relay, and the relay's token as each
|
|
80
|
+
* API key. `keyVars` are the main computer's variable names for its keys (e.g. GITHUB_TOKEN → github).
|
|
81
|
+
*/
|
|
82
|
+
export function relayEnv(base, localToken, keyVars) {
|
|
83
|
+
const env = {
|
|
84
|
+
LLLANYARD_PROXY_URL: base,
|
|
85
|
+
ANTHROPIC_BASE_URL: `${base}/anthropic`, ANTHROPIC_API_KEY: localToken,
|
|
86
|
+
OPENAI_BASE_URL: `${base}/openai/v1`, OPENAI_API_KEY: localToken,
|
|
87
|
+
};
|
|
88
|
+
for (const [name, provider] of Object.entries(keyVars)) {
|
|
89
|
+
env[name] = localToken;
|
|
90
|
+
const id = provider.split(':')[0].toUpperCase().replace(/-/g, '_');
|
|
91
|
+
env[`LLLANYARD_${id}_URL`] = `${base}/${provider.split(':')[0]}`;
|
|
92
|
+
}
|
|
93
|
+
return env;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=relay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
|
package/dist/serve-options.js
CHANGED
|
@@ -4,7 +4,7 @@ export function checkServeOptions(o, tier) {
|
|
|
4
4
|
if (!o.host || LOOPBACK.has(o.host))
|
|
5
5
|
return;
|
|
6
6
|
if (tier === 'free')
|
|
7
|
-
throw new Error('Sharing the proxy beyond this computer
|
|
7
|
+
throw new Error('Sharing the proxy beyond this computer needs Pro (your own devices) or Team (your team). See: lllanyard license activate');
|
|
8
8
|
if (!o.tls)
|
|
9
9
|
throw new Error('A shared proxy must use TLS: pass --tls-cert and --tls-key. Plain HTTP would expose agent tokens on the network.');
|
|
10
10
|
if (!o.allowedHosts?.length)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve-options.js","sourceRoot":"","sources":["../src/serve-options.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAI5D,0GAA0G;AAC1G,MAAM,UAAU,iBAAiB,CAAC,CAAe,EAAE,IAA6B;IAC9E,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO;IAC5C,IAAI,IAAI,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"serve-options.js","sourceRoot":"","sources":["../src/serve-options.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAI5D,0GAA0G;AAC1G,MAAM,UAAU,iBAAiB,CAAC,CAAe,EAAE,IAA6B;IAC9E,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO;IAC5C,IAAI,IAAI,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0HAA0H,CAAC,CAAC;IACjK,IAAI,CAAC,CAAC,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kHAAkH,CAAC,CAAC;IAChJ,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;AAClI,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import http from 'node:http';
|
|
2
2
|
import https from 'node:https';
|
|
3
|
-
import type { AgentIdentity, SecureStore } from '@lllanyard/core';
|
|
3
|
+
import type { AgentIdentity, DeviceIdentity, SecureStore } from '@lllanyard/core';
|
|
4
4
|
import { AuthGuard } from './ratelimit.js';
|
|
5
5
|
export interface ProviderDef {
|
|
6
6
|
upstream: string;
|
|
@@ -23,5 +23,33 @@ export interface ProxyDeps {
|
|
|
23
23
|
key: string | Buffer;
|
|
24
24
|
};
|
|
25
25
|
authGuard?: AuthGuard;
|
|
26
|
+
/**
|
|
27
|
+
* Team members: where a request goes when this proxy holds no key for it (the team's shared proxy), and this
|
|
28
|
+
* member's token there. Personal keys always win and never leave this machine.
|
|
29
|
+
*/
|
|
30
|
+
team?: () => {
|
|
31
|
+
url: string;
|
|
32
|
+
token: string;
|
|
33
|
+
ca?: string;
|
|
34
|
+
} | null;
|
|
35
|
+
/**
|
|
36
|
+
* Pro: paired devices. A device token works only with the machine ID it was paired with (x-lllanyard-machine).
|
|
37
|
+
* pair() uses a one-time code from `lllanyard device add`.
|
|
38
|
+
*/
|
|
39
|
+
devices?: {
|
|
40
|
+
verify: (token: string, machine: string | undefined) => DeviceIdentity | 'wrong-machine' | null;
|
|
41
|
+
pair: (code: string, machine: string) => {
|
|
42
|
+
name: string;
|
|
43
|
+
token: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* For paired devices: the variable names of this computer's keys (GITHUB_TOKEN → github or github:label), shown in
|
|
48
|
+
* whoami, and the ones a device may fetch for one run (POST /_lllanyard/keys).
|
|
49
|
+
*/
|
|
50
|
+
keyVars?: () => Record<string, string>;
|
|
51
|
+
/** Pro: agent tokens work from this computer only; other computers must be paired devices. */
|
|
52
|
+
agentsLoopbackOnly?: boolean;
|
|
53
|
+
isLocalAddress?: (ip: string) => boolean;
|
|
26
54
|
}
|
|
27
55
|
export declare function createProxy(deps: ProxyDeps): http.Server | https.Server;
|
package/dist/server.js
CHANGED
|
@@ -5,9 +5,10 @@ import { isPublicAddress, safeLookup } from './netguard.js';
|
|
|
5
5
|
import { AuthGuard, RateLimiter } from './ratelimit.js';
|
|
6
6
|
const DROP_REQ = new Set([
|
|
7
7
|
'host', 'connection', 'keep-alive', 'proxy-authorization', 'proxy-connection', 'te', 'trailer',
|
|
8
|
-
'transfer-encoding', 'upgrade', 'expect', 'authorization', 'x-api-key', 'cookie',
|
|
8
|
+
'transfer-encoding', 'upgrade', 'expect', 'authorization', 'x-api-key', 'cookie', 'x-lllanyard-machine',
|
|
9
9
|
]);
|
|
10
10
|
const DROP_RES = new Set(['connection', 'keep-alive', 'transfer-encoding', 'proxy-authenticate', 'upgrade', 'set-cookie']);
|
|
11
|
+
const isLoopbackAddr = (ip) => ip === '127.0.0.1' || ip === '::1' || ip === '::ffff:127.0.0.1';
|
|
11
12
|
export function createProxy(deps) {
|
|
12
13
|
const lookupProvider = (id) => {
|
|
13
14
|
const src = deps.providers;
|
|
@@ -42,6 +43,46 @@ export function createProxy(deps) {
|
|
|
42
43
|
res.writeHead(code, { 'content-type': 'application/json', 'content-length': Buffer.byteLength(body) });
|
|
43
44
|
res.end(body);
|
|
44
45
|
};
|
|
46
|
+
/** No personal key: pass the request to the team server, as this member, with the caller's own token removed. */
|
|
47
|
+
const forward = (req, res, team, provider, rest, agent, ip, started) => {
|
|
48
|
+
let target;
|
|
49
|
+
try {
|
|
50
|
+
target = new URL(team.url + '/' + provider + rest);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return send(res, 400, 'Bad request path');
|
|
54
|
+
}
|
|
55
|
+
if (target.origin !== new URL(team.url).origin || target.protocol !== 'https:')
|
|
56
|
+
return send(res, 400, 'Bad request path');
|
|
57
|
+
const headers = {};
|
|
58
|
+
for (const [k, v] of Object.entries(req.headers))
|
|
59
|
+
if (!DROP_REQ.has(k) && v !== undefined)
|
|
60
|
+
headers[k] = v;
|
|
61
|
+
headers.authorization = `Bearer ${team.token}`;
|
|
62
|
+
let up;
|
|
63
|
+
res.on('close', () => {
|
|
64
|
+
log({ ts: new Date().toISOString(), agent: agent.name, client: agent.client, ip, provider, via: 'team', method: req.method,
|
|
65
|
+
path: target.pathname, status: res.statusCode, ms: now() - started });
|
|
66
|
+
up?.destroy();
|
|
67
|
+
});
|
|
68
|
+
// The team server is usually on the local network or a VPN, so private addresses are expected here.
|
|
69
|
+
try {
|
|
70
|
+
up = https.request(target, { method: req.method, headers, timeout: 300_000, minVersion: 'TLSv1.2', ...(team.ca ? { ca: team.ca } : {}) }, (ures) => {
|
|
71
|
+
const rh = {};
|
|
72
|
+
for (const [k, v] of Object.entries(ures.headers))
|
|
73
|
+
if (!DROP_RES.has(k) && v !== undefined)
|
|
74
|
+
rh[k] = v;
|
|
75
|
+
res.writeHead(ures.statusCode ?? 502, rh);
|
|
76
|
+
ures.pipe(res);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return send(res, 502, 'Team server request failed');
|
|
81
|
+
}
|
|
82
|
+
up.on('timeout', () => up.destroy(new Error('team server timeout')));
|
|
83
|
+
up.on('error', () => send(res, 502, 'Team server unreachable'));
|
|
84
|
+
req.pipe(up);
|
|
85
|
+
};
|
|
45
86
|
const handler = (req, res) => {
|
|
46
87
|
const started = now();
|
|
47
88
|
const ip = req.socket.remoteAddress ?? 'unknown';
|
|
@@ -52,13 +93,51 @@ export function createProxy(deps) {
|
|
|
52
93
|
return send(res, 403, 'Forbidden host');
|
|
53
94
|
if (req.headers.origin && !deps.allowOrigin)
|
|
54
95
|
return send(res, 403, 'Browser-origin requests are not allowed');
|
|
55
|
-
|
|
56
|
-
if (
|
|
96
|
+
// Pairing a device: a one-time code (from `lllanyard device add` here) and the device's machine ID, for a token.
|
|
97
|
+
if (req.url === '/_lllanyard/pair') {
|
|
98
|
+
if (!deps.devices)
|
|
99
|
+
return send(res, 404, 'Not found');
|
|
100
|
+
if (req.method !== 'POST')
|
|
101
|
+
return send(res, 405, 'Use POST');
|
|
102
|
+
if (guard.blocked(ip)) {
|
|
103
|
+
res.setHeader('retry-after', '900');
|
|
104
|
+
return send(res, 429, 'Too many failed attempts');
|
|
105
|
+
}
|
|
106
|
+
let body = '';
|
|
107
|
+
req.setEncoding('utf8');
|
|
108
|
+
req.on('data', (d) => { body += d; if (body.length > 4096)
|
|
109
|
+
req.destroy(); });
|
|
110
|
+
req.on('end', () => {
|
|
111
|
+
try {
|
|
112
|
+
const { code, machine } = JSON.parse(body);
|
|
113
|
+
if (typeof code !== 'string' || typeof machine !== 'string')
|
|
114
|
+
throw new Error('Send a pairing code and machine ID.');
|
|
115
|
+
const r = deps.devices.pair(code, machine);
|
|
116
|
+
guard.ok(ip);
|
|
117
|
+
log({ ts: new Date().toISOString(), event: 'device-paired', device: r.name, ip });
|
|
118
|
+
const out = JSON.stringify(r);
|
|
119
|
+
res.writeHead(200, { 'content-type': 'application/json', 'content-length': Buffer.byteLength(out), 'cache-control': 'no-store' });
|
|
120
|
+
res.end(out);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
guard.fail(ip);
|
|
124
|
+
log({ ts: new Date().toISOString(), ip, status: 400, reason: 'pair-failed' });
|
|
125
|
+
send(res, 400, e.message);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// A token check with no key involved: lets a member's LLLanyard test its link to this server.
|
|
131
|
+
const whoami = req.url === '/_lllanyard/whoami';
|
|
132
|
+
const keysReq = req.url === '/_lllanyard/keys';
|
|
133
|
+
const m = whoami || keysReq ? null : /^\/([A-Za-z0-9-]+)(.*)$/s.exec(req.url ?? '/');
|
|
134
|
+
if (!m && !whoami && !keysReq)
|
|
57
135
|
return send(res, 404, 'Not found');
|
|
58
|
-
const provider = m[1].toLowerCase();
|
|
59
|
-
let rest = m[2] ?? '';
|
|
60
|
-
const def = lookupProvider(provider);
|
|
61
|
-
|
|
136
|
+
const provider = m ? m[1].toLowerCase() : '';
|
|
137
|
+
let rest = m?.[2] ?? '';
|
|
138
|
+
const def = m ? lookupProvider(provider) : undefined;
|
|
139
|
+
const team = deps.team?.() ?? null;
|
|
140
|
+
if (m && !def && !team)
|
|
62
141
|
return send(res, 404, 'Unknown provider');
|
|
63
142
|
if (rest === '')
|
|
64
143
|
rest = '/';
|
|
@@ -75,13 +154,79 @@ export function createProxy(deps) {
|
|
|
75
154
|
res.setHeader('retry-after', '900');
|
|
76
155
|
return send(res, 429, 'Too many failed attempts');
|
|
77
156
|
}
|
|
78
|
-
const
|
|
157
|
+
const machine = typeof req.headers['x-lllanyard-machine'] === 'string' ? req.headers['x-lllanyard-machine'] : undefined;
|
|
158
|
+
const dev = token && deps.devices ? deps.devices.verify(token, machine) : null;
|
|
159
|
+
if (dev === 'wrong-machine') {
|
|
160
|
+
guard.fail(ip);
|
|
161
|
+
log({ ts: new Date().toISOString(), ip, provider, status: 401, reason: 'device-wrong-machine' });
|
|
162
|
+
return send(res, 401, 'This device token belongs to a different computer. Pair this one: lllanyard device join');
|
|
163
|
+
}
|
|
164
|
+
const agent = dev ?? (token ? deps.verify(token) : null);
|
|
79
165
|
if (!agent) {
|
|
80
166
|
guard.fail(ip);
|
|
81
167
|
log({ ts: new Date().toISOString(), ip, provider, status: 401, reason: 'bad-token' });
|
|
82
168
|
return send(res, 401, 'Invalid or missing agent token');
|
|
83
169
|
}
|
|
170
|
+
if (!dev && deps.agentsLoopbackOnly && !(deps.isLocalAddress ?? isLoopbackAddr)(ip)) {
|
|
171
|
+
log({ ts: new Date().toISOString(), agent: agent.name, ip, provider, status: 403, reason: 'agent-not-local' });
|
|
172
|
+
return send(res, 403, 'Agent tokens work on this computer only. To use your keys from another computer, pair it: lllanyard device add <name> (Pro allows 3 devices)');
|
|
173
|
+
}
|
|
84
174
|
guard.ok(ip);
|
|
175
|
+
if (whoami) {
|
|
176
|
+
const vars = dev && deps.keyVars ? deps.keyVars() : undefined;
|
|
177
|
+
const body = JSON.stringify({ name: agent.name, client: agent.client, providers: agent.providers ?? null, ...(dev ? { vars: vars ?? {}, keys: dev.keys } : {}) });
|
|
178
|
+
res.writeHead(200, { 'content-type': 'application/json', 'content-length': Buffer.byteLength(body) });
|
|
179
|
+
return res.end(body);
|
|
180
|
+
}
|
|
181
|
+
// exec --remote on a paired device: the keys for one run, by variable name. Nothing else can ask for a key.
|
|
182
|
+
if (keysReq) {
|
|
183
|
+
if (!dev)
|
|
184
|
+
return send(res, 403, 'Only a paired device can fetch keys');
|
|
185
|
+
if (!dev.keys)
|
|
186
|
+
return send(res, 403, 'This device was paired to use the proxy only (device add --no-keys), so it cannot fetch keys');
|
|
187
|
+
if (req.method !== 'POST')
|
|
188
|
+
return send(res, 405, 'Use POST');
|
|
189
|
+
if (limiter.hit(agent.name) !== 'ok') {
|
|
190
|
+
res.setHeader('retry-after', '60');
|
|
191
|
+
return send(res, 429, 'Rate limit exceeded');
|
|
192
|
+
}
|
|
193
|
+
let body = '';
|
|
194
|
+
req.setEncoding('utf8');
|
|
195
|
+
req.on('data', (d) => { body += d; if (body.length > 16_384)
|
|
196
|
+
req.destroy(); });
|
|
197
|
+
req.on('end', () => {
|
|
198
|
+
let vars, tool;
|
|
199
|
+
try {
|
|
200
|
+
({ vars, tool } = JSON.parse(body));
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return send(res, 400, 'Bad request');
|
|
204
|
+
}
|
|
205
|
+
if (!Array.isArray(vars) || vars.length > 50 || !vars.every((v) => typeof v === 'string'))
|
|
206
|
+
return send(res, 400, 'Send the variable names you need');
|
|
207
|
+
const map = deps.keyVars?.() ?? {};
|
|
208
|
+
const keys = {};
|
|
209
|
+
try {
|
|
210
|
+
for (const v of vars) {
|
|
211
|
+
const ref = Object.prototype.hasOwnProperty.call(map, v) ? map[v] : undefined;
|
|
212
|
+
if (!ref)
|
|
213
|
+
continue;
|
|
214
|
+
const i = ref.indexOf(':');
|
|
215
|
+
const k = deps.store.get(i < 0 ? ref : ref.slice(0, i), i < 0 ? 'default' : ref.slice(i + 1));
|
|
216
|
+
if (k)
|
|
217
|
+
keys[v] = k;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return send(res, 503, 'Key store unavailable');
|
|
222
|
+
}
|
|
223
|
+
log({ ts: new Date().toISOString(), event: 'device-keys', agent: agent.name, ip, keys: Object.keys(keys), tool: typeof tool === 'string' ? tool.slice(0, 200) : undefined });
|
|
224
|
+
const out = JSON.stringify({ keys });
|
|
225
|
+
res.writeHead(200, { 'content-type': 'application/json', 'content-length': Buffer.byteLength(out), 'cache-control': 'no-store' });
|
|
226
|
+
res.end(out);
|
|
227
|
+
});
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
85
230
|
// Least privilege: an agent created with --providers may only reach those.
|
|
86
231
|
if (agent.providers && !agent.providers.includes(provider)) {
|
|
87
232
|
log({ ts: new Date().toISOString(), agent: agent.name, provider, status: 403, reason: 'provider-not-allowed' });
|
|
@@ -93,15 +238,23 @@ export function createProxy(deps) {
|
|
|
93
238
|
res.setHeader('retry-after', '60');
|
|
94
239
|
return send(res, 429, verdict === 'killed' ? 'Agent blocked by kill switch' : 'Rate limit exceeded');
|
|
95
240
|
}
|
|
96
|
-
let key;
|
|
97
|
-
|
|
98
|
-
|
|
241
|
+
let key = null;
|
|
242
|
+
if (def) {
|
|
243
|
+
try {
|
|
244
|
+
key = keyFor(provider, agent.client);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
if (!team)
|
|
248
|
+
return send(res, 503, 'Key store unavailable');
|
|
249
|
+
}
|
|
99
250
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (!key)
|
|
251
|
+
if (!key) {
|
|
252
|
+
if (team)
|
|
253
|
+
return forward(req, res, team, provider, rest, agent, ip, started);
|
|
104
254
|
return send(res, 503, `No ${provider} key stored for client "${agent.client}"`);
|
|
255
|
+
}
|
|
256
|
+
if (!def)
|
|
257
|
+
return send(res, 404, 'Unknown provider');
|
|
105
258
|
// Never let the request path change the destination host.
|
|
106
259
|
let target;
|
|
107
260
|
try {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lllanyard/proxy",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "LLLanyard proxy: swaps placeholder tokens for real API keys on the way out.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"dist"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@lllanyard/core": "^0.1.
|
|
18
|
+
"@lllanyard/core": "^0.1.5"
|
|
19
19
|
},
|
|
20
20
|
"license": "BUSL-1.1",
|
|
21
21
|
"engines": {
|