@lllanyard/proxy 0.1.2 → 0.1.4

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 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
- checkServeOptions(opts, new LicenseStore().status().tier);
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -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 is a Pro feature (lllanyard license activate).');
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,uFAAuF,CAAC,CAAC;IAC9H,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"}
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
- const m = /^\/([A-Za-z0-9-]+)(.*)$/s.exec(req.url ?? '/');
56
- if (!m)
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
- if (!def)
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 agent = token ? deps.verify(token) : null;
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
- try {
98
- key = keyFor(provider, agent.client);
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
- catch {
101
- return send(res, 503, 'Key store unavailable');
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 {
@@ -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.2",
3
+ "version": "0.1.4",
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.2"
18
+ "@lllanyard/core": "^0.1.4"
19
19
  },
20
20
  "license": "BUSL-1.1",
21
21
  "engines": {