@linkshell/gateway 0.2.47 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +14 -13
  2. package/dist/gateway/src/agent-permission-http.d.ts +10 -37
  3. package/dist/gateway/src/agent-permission-http.js +16 -56
  4. package/dist/gateway/src/agent-permission-http.js.map +1 -1
  5. package/dist/gateway/src/embedded.js +121 -57
  6. package/dist/gateway/src/embedded.js.map +1 -1
  7. package/dist/gateway/src/index.js +161 -94
  8. package/dist/gateway/src/index.js.map +1 -1
  9. package/dist/gateway/src/pairings.d.ts +3 -3
  10. package/dist/gateway/src/pairings.js +4 -5
  11. package/dist/gateway/src/pairings.js.map +1 -1
  12. package/dist/gateway/src/relay.d.ts +2 -2
  13. package/dist/gateway/src/relay.js +27 -38
  14. package/dist/gateway/src/relay.js.map +1 -1
  15. package/dist/gateway/src/sessions.d.ts +31 -28
  16. package/dist/gateway/src/sessions.js +163 -145
  17. package/dist/gateway/src/sessions.js.map +1 -1
  18. package/dist/gateway/src/state-store.d.ts +9 -6
  19. package/dist/gateway/src/state-store.js +26 -19
  20. package/dist/gateway/src/state-store.js.map +1 -1
  21. package/dist/gateway/src/tokens.d.ts +27 -7
  22. package/dist/gateway/src/tokens.js +86 -60
  23. package/dist/gateway/src/tokens.js.map +1 -1
  24. package/dist/gateway/src/tunnel.d.ts +11 -13
  25. package/dist/gateway/src/tunnel.js +36 -36
  26. package/dist/gateway/src/tunnel.js.map +1 -1
  27. package/dist/gateway/tsconfig.tsbuildinfo +1 -1
  28. package/dist/shared-protocol/src/index.d.ts +3961 -5788
  29. package/dist/shared-protocol/src/index.js +19 -84
  30. package/dist/shared-protocol/src/index.js.map +1 -1
  31. package/package.json +10 -10
  32. package/src/agent-permission-http.ts +20 -63
  33. package/src/embedded.ts +124 -56
  34. package/src/index.ts +165 -94
  35. package/src/pairings.ts +6 -7
  36. package/src/relay.ts +38 -48
  37. package/src/sessions.ts +174 -150
  38. package/src/state-store.ts +41 -25
  39. package/src/tokens.ts +109 -63
  40. package/src/tunnel.ts +49 -43
@@ -1,18 +1,38 @@
1
1
  import type { GatewayStateStore } from "./state-store.js";
2
- export declare class TokenManager {
2
+ interface DeviceAuthorization {
3
+ authorizationId: string;
4
+ hostDeviceId: string;
5
+ clientDeviceId: string | undefined;
6
+ clientName: string | undefined;
7
+ createdAt: number;
8
+ lastUsedAt: number;
9
+ }
10
+ export declare class AuthorizationManager {
3
11
  private readonly store?;
4
12
  private tokens;
5
- private sessionToToken;
6
- private cleanupTimer;
13
+ private hostDeviceToTokens;
7
14
  constructor(store?: GatewayStateStore | undefined);
8
15
  hydrate(): Promise<void>;
9
16
  register(deviceToken?: string): string;
10
- bind(token: string, sessionId: string): boolean;
17
+ authorize(token: string, hostDeviceId: string, input?: {
18
+ authorizationId?: string;
19
+ clientDeviceId?: string;
20
+ clientName?: string;
21
+ createdAt?: number;
22
+ lastUsedAt?: number;
23
+ persist?: boolean;
24
+ }): DeviceAuthorization | undefined;
11
25
  validate(token: string): boolean;
12
- owns(token: string, sessionId: string): boolean;
26
+ owns(token: string, hostDeviceId: string): boolean;
27
+ revoke(token: string, hostDeviceId: string, authorizationId: string): boolean;
28
+ getHostDeviceIds(token: string): Set<string>;
13
29
  getSessionIds(token: string): Set<string>;
14
- getTokenForSession(sessionId: string): string | undefined;
15
- private cleanup;
30
+ getAuthorizationId(token: string, hostDeviceId: string): string | undefined;
31
+ getTokenForHostDevice(hostDeviceId: string): string | undefined;
32
+ bind(token: string, hostDeviceId: string): boolean;
16
33
  private persist;
17
34
  destroy(): void;
18
35
  }
36
+ export declare class TokenManager extends AuthorizationManager {
37
+ }
38
+ export {};
@@ -1,119 +1,145 @@
1
1
  import { randomUUID } from "node:crypto";
2
- const CLEANUP_INTERVAL = 5 * 60_000;
3
- const SESSION_TTL = 7 * 24 * 60 * 60_000; // 7 days — prune stale bindings
4
- export class TokenManager {
2
+ export class AuthorizationManager {
5
3
  store;
6
4
  tokens = new Map();
7
- sessionToToken = new Map();
8
- cleanupTimer;
5
+ hostDeviceToTokens = new Map();
9
6
  constructor(store) {
10
7
  this.store = store;
11
- this.cleanupTimer = setInterval(() => this.cleanup(), CLEANUP_INTERVAL);
12
8
  }
13
9
  async hydrate() {
14
10
  if (!this.store)
15
11
  return;
16
12
  try {
17
- const records = await this.store.loadTokens();
18
- const now = Date.now();
13
+ const records = await this.store.loadAuthorizations();
19
14
  for (const record of records) {
20
- if (now - record.lastUsedAt > SESSION_TTL) {
21
- void this.store.deleteToken(record.token).catch(() => { });
22
- continue;
23
- }
24
- this.tokens.set(record.token, {
25
- token: record.token,
26
- sessionIds: new Set(record.sessionIds),
15
+ const token = this.register(record.token);
16
+ this.authorize(token, record.hostDeviceId, {
17
+ authorizationId: record.authorizationId,
18
+ clientDeviceId: record.clientDeviceId,
19
+ clientName: record.clientName,
27
20
  createdAt: record.createdAt,
28
21
  lastUsedAt: record.lastUsedAt,
22
+ persist: false,
29
23
  });
30
- for (const sessionId of record.sessionIds) {
31
- this.sessionToToken.set(sessionId, record.token);
32
- }
33
24
  }
34
25
  }
35
26
  catch (err) {
36
- process.stderr.write(`[gateway] token store hydrate failed, using memory only: ${err}\n`);
27
+ process.stderr.write(`[gateway] authorization store hydrate failed, using memory only: ${err}\n`);
37
28
  }
38
29
  }
39
30
  register(deviceToken) {
40
31
  if (deviceToken && this.tokens.has(deviceToken)) {
41
32
  const record = this.tokens.get(deviceToken);
42
33
  record.lastUsedAt = Date.now();
43
- this.persist(record);
44
34
  return deviceToken;
45
35
  }
46
36
  const token = deviceToken || randomUUID();
47
37
  this.tokens.set(token, {
48
38
  token,
49
- sessionIds: new Set(),
39
+ authorizations: new Map(),
50
40
  createdAt: Date.now(),
51
41
  lastUsedAt: Date.now(),
52
42
  });
53
- this.persist(this.tokens.get(token));
54
43
  return token;
55
44
  }
56
- bind(token, sessionId) {
45
+ authorize(token, hostDeviceId, input = {}) {
57
46
  const record = this.tokens.get(token);
58
47
  if (!record)
59
- return false;
60
- record.sessionIds.add(sessionId);
61
- record.lastUsedAt = Date.now();
62
- this.sessionToToken.set(sessionId, token);
63
- this.persist(record);
64
- return true;
48
+ return undefined;
49
+ const existing = record.authorizations.get(hostDeviceId);
50
+ const now = Date.now();
51
+ const authorization = {
52
+ authorizationId: input.authorizationId ?? existing?.authorizationId ?? randomUUID(),
53
+ hostDeviceId,
54
+ clientDeviceId: input.clientDeviceId ?? existing?.clientDeviceId,
55
+ clientName: input.clientName ?? existing?.clientName,
56
+ createdAt: input.createdAt ?? existing?.createdAt ?? now,
57
+ lastUsedAt: input.lastUsedAt ?? now,
58
+ };
59
+ record.authorizations.set(hostDeviceId, authorization);
60
+ record.lastUsedAt = now;
61
+ let tokens = this.hostDeviceToTokens.get(hostDeviceId);
62
+ if (!tokens) {
63
+ tokens = new Set();
64
+ this.hostDeviceToTokens.set(hostDeviceId, tokens);
65
+ }
66
+ tokens.add(token);
67
+ if (input.persist !== false) {
68
+ this.persist(token, authorization);
69
+ }
70
+ return authorization;
65
71
  }
66
72
  validate(token) {
67
73
  const record = this.tokens.get(token);
68
74
  if (!record)
69
75
  return false;
70
76
  record.lastUsedAt = Date.now();
71
- this.persist(record);
72
77
  return true;
73
78
  }
74
- owns(token, sessionId) {
79
+ owns(token, hostDeviceId) {
75
80
  const record = this.tokens.get(token);
76
81
  if (!record)
77
82
  return false;
78
- record.lastUsedAt = Date.now();
79
- this.persist(record);
80
- return record.sessionIds.has(sessionId);
83
+ const authorization = record.authorizations.get(hostDeviceId);
84
+ if (!authorization)
85
+ return false;
86
+ const now = Date.now();
87
+ record.lastUsedAt = now;
88
+ authorization.lastUsedAt = now;
89
+ this.persist(token, authorization);
90
+ return true;
81
91
  }
82
- getSessionIds(token) {
92
+ revoke(token, hostDeviceId, authorizationId) {
93
+ const record = this.tokens.get(token);
94
+ const authorization = record?.authorizations.get(hostDeviceId);
95
+ if (!record || !authorization || authorization.authorizationId !== authorizationId) {
96
+ return false;
97
+ }
98
+ record.authorizations.delete(hostDeviceId);
99
+ const tokens = this.hostDeviceToTokens.get(hostDeviceId);
100
+ tokens?.delete(token);
101
+ if (tokens && tokens.size === 0) {
102
+ this.hostDeviceToTokens.delete(hostDeviceId);
103
+ }
104
+ void this.store?.deleteAuthorization(authorizationId).catch((err) => {
105
+ process.stderr.write(`[gateway] authorization store delete failed: ${err}\n`);
106
+ });
107
+ return true;
108
+ }
109
+ getHostDeviceIds(token) {
83
110
  const record = this.tokens.get(token);
84
111
  if (!record)
85
112
  return new Set();
86
113
  record.lastUsedAt = Date.now();
87
- this.persist(record);
88
- return record.sessionIds;
114
+ return new Set(record.authorizations.keys());
89
115
  }
90
- getTokenForSession(sessionId) {
91
- return this.sessionToToken.get(sessionId);
116
+ getSessionIds(token) {
117
+ return this.getHostDeviceIds(token);
92
118
  }
93
- cleanup() {
94
- const now = Date.now();
95
- for (const [token, record] of this.tokens) {
96
- if (now - record.lastUsedAt > SESSION_TTL) {
97
- for (const sid of record.sessionIds) {
98
- this.sessionToToken.delete(sid);
99
- }
100
- this.tokens.delete(token);
101
- void this.store?.deleteToken(token).catch(() => { });
102
- }
103
- }
119
+ getAuthorizationId(token, hostDeviceId) {
120
+ return this.tokens.get(token)?.authorizations.get(hostDeviceId)?.authorizationId;
121
+ }
122
+ getTokenForHostDevice(hostDeviceId) {
123
+ return this.hostDeviceToTokens.get(hostDeviceId)?.values().next().value;
124
+ }
125
+ bind(token, hostDeviceId) {
126
+ return !!this.authorize(token, hostDeviceId);
104
127
  }
105
- persist(record) {
106
- void this.store?.saveToken({
107
- token: record.token,
108
- sessionIds: [...record.sessionIds],
109
- createdAt: record.createdAt,
110
- lastUsedAt: record.lastUsedAt,
128
+ persist(token, authorization) {
129
+ void this.store?.saveAuthorization({
130
+ token,
131
+ authorizationId: authorization.authorizationId,
132
+ hostDeviceId: authorization.hostDeviceId,
133
+ clientDeviceId: authorization.clientDeviceId,
134
+ clientName: authorization.clientName,
135
+ createdAt: authorization.createdAt,
136
+ lastUsedAt: authorization.lastUsedAt,
111
137
  }).catch((err) => {
112
- process.stderr.write(`[gateway] token store save failed: ${err}\n`);
138
+ process.stderr.write(`[gateway] authorization store save failed: ${err}\n`);
113
139
  });
114
140
  }
115
- destroy() {
116
- clearInterval(this.cleanupTimer);
117
- }
141
+ destroy() { }
142
+ }
143
+ export class TokenManager extends AuthorizationManager {
118
144
  }
119
145
  //# sourceMappingURL=tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/tokens.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import type WebSocket from "ws";
3
- import type { SessionManager } from "./sessions.js";
3
+ import type { DeviceManager } from "./sessions.js";
4
4
  import type { TokenManager } from "./tokens.js";
5
5
  export interface PendingTunnelRequest {
6
6
  res: ServerResponse;
@@ -10,22 +10,23 @@ export interface PendingTunnelRequest {
10
10
  export interface PendingTunnelWs {
11
11
  ws: WebSocket;
12
12
  }
13
- /** Parse lsh_tunnel cookie: "sessionId:port:token" */
13
+ /** Parse lsh_tunnel cookie: "hostDeviceId:port:token" */
14
14
  export declare function parseTunnelCookie(req: IncomingMessage): {
15
- sessionId: string;
15
+ hostDeviceId: string;
16
16
  port: number;
17
17
  token: string;
18
18
  } | null;
19
19
  export declare function parseTunnelPath(pathname: string): {
20
- sessionId: string;
20
+ hostDeviceId: string;
21
21
  port: number;
22
22
  path: string;
23
23
  } | null;
24
- export declare function handleTunnelRequest(req: IncomingMessage, res: ServerResponse, sessions: SessionManager, tokens: TokenManager, parsed: {
25
- sessionId: string;
24
+ type ParsedTunnelTarget = {
25
+ hostDeviceId: string;
26
26
  port: number;
27
27
  path: string;
28
- }, url: URL, preAuthToken?: string): Promise<void>;
28
+ };
29
+ export declare function handleTunnelRequest(req: IncomingMessage, res: ServerResponse, sessions: DeviceManager, tokens: TokenManager, parsed: ParsedTunnelTarget, url: URL, preAuthToken?: string): Promise<void>;
29
30
  export declare function handleTunnelResponse(payload: {
30
31
  requestId: string;
31
32
  statusCode: number;
@@ -45,9 +46,6 @@ export declare function handleTunnelWsClose(payload: {
45
46
  }): void;
46
47
  export declare function registerTunnelWs(requestId: string, ws: WebSocket): void;
47
48
  export declare function removeTunnelWs(requestId: string): void;
48
- export declare function cleanupSessionTunnels(sessionId: string): void;
49
- export declare function handleTunnelWsUpgrade(ws: WebSocket, parsed: {
50
- sessionId: string;
51
- port: number;
52
- path: string;
53
- }, url: URL, sessions: SessionManager, tokens: TokenManager): Promise<void>;
49
+ export declare function cleanupSessionTunnels(hostDeviceId: string): void;
50
+ export declare function handleTunnelWsUpgrade(ws: WebSocket, parsed: ParsedTunnelTarget, url: URL, sessions: DeviceManager, tokens: TokenManager): Promise<void>;
51
+ export {};
@@ -6,22 +6,22 @@ const MAX_TUNNEL_BODY = 10 * 1024 * 1024; // 10MB
6
6
  // Module-level maps keyed by requestId
7
7
  const pendingRequests = new Map();
8
8
  const pendingWsSockets = new Map();
9
- // Track requestIds per session for cleanup on host disconnect
10
- const sessionRequests = new Map();
11
- function trackRequest(sessionId, requestId) {
12
- let set = sessionRequests.get(sessionId);
9
+ // Track requestIds per host device for cleanup on host disconnect
10
+ const deviceRequests = new Map();
11
+ function trackRequest(hostDeviceId, requestId) {
12
+ let set = deviceRequests.get(hostDeviceId);
13
13
  if (!set) {
14
14
  set = new Set();
15
- sessionRequests.set(sessionId, set);
15
+ deviceRequests.set(hostDeviceId, set);
16
16
  }
17
17
  set.add(requestId);
18
18
  }
19
- function untrackRequest(sessionId, requestId) {
20
- const set = sessionRequests.get(sessionId);
19
+ function untrackRequest(hostDeviceId, requestId) {
20
+ const set = deviceRequests.get(hostDeviceId);
21
21
  if (set) {
22
22
  set.delete(requestId);
23
23
  if (set.size === 0)
24
- sessionRequests.delete(sessionId);
24
+ deviceRequests.delete(hostDeviceId);
25
25
  }
26
26
  }
27
27
  function extractToken(req, url) {
@@ -45,7 +45,7 @@ function extractToken(req, url) {
45
45
  }
46
46
  return null;
47
47
  }
48
- /** Parse lsh_tunnel cookie: "sessionId:port:token" */
48
+ /** Parse lsh_tunnel cookie: "hostDeviceId:port:token" */
49
49
  export function parseTunnelCookie(req) {
50
50
  const cookie = req.headers.cookie;
51
51
  if (!cookie)
@@ -56,12 +56,12 @@ export function parseTunnelCookie(req) {
56
56
  const parts = decodeURIComponent(match[1]).split(":");
57
57
  if (parts.length < 3)
58
58
  return null;
59
- const sessionId = parts[0];
59
+ const hostDeviceId = parts[0];
60
60
  const port = Number(parts[1]);
61
61
  const token = parts.slice(2).join(":"); // token may contain colons
62
- if (!sessionId || isNaN(port) || port < 1 || port > 65535 || !token)
62
+ if (!hostDeviceId || isNaN(port) || port < 1 || port > 65535 || !token)
63
63
  return null;
64
- return { sessionId, port, token };
64
+ return { hostDeviceId, port, token };
65
65
  }
66
66
  function errorResponse(res, status, message) {
67
67
  if (res.headersSent)
@@ -80,16 +80,16 @@ export function parseTunnelPath(pathname) {
80
80
  if (port < 1 || port > 65535)
81
81
  return null;
82
82
  return {
83
- sessionId: match[1],
83
+ hostDeviceId: match[1],
84
84
  port,
85
85
  path: match[3] || "/",
86
86
  };
87
87
  }
88
88
  export async function handleTunnelRequest(req, res, sessions, tokens, parsed, url, preAuthToken) {
89
- const { sessionId, port, path } = parsed;
89
+ const { hostDeviceId, port, path } = parsed;
90
90
  // Auth: device token OR Supabase JWT (userId owns session)
91
91
  const token = preAuthToken || extractToken(req, url);
92
- const tokenOwns = token && tokens.owns(token, sessionId);
92
+ const tokenOwns = token && tokens.owns(token, hostDeviceId);
93
93
  let authOwns = false;
94
94
  let authJwt = null;
95
95
  if (!tokenOwns && AUTH_REQUIRED) {
@@ -114,7 +114,7 @@ export async function handleTunnelRequest(req, res, sessions, tokens, parsed, ur
114
114
  });
115
115
  if (userRes.ok) {
116
116
  const user = (await userRes.json());
117
- const session = sessions.get(sessionId);
117
+ const session = sessions.get(hostDeviceId);
118
118
  if (user.id && session?.userId && user.id === session.userId) {
119
119
  authOwns = true;
120
120
  authJwt = jwtCandidate;
@@ -132,11 +132,11 @@ export async function handleTunnelRequest(req, res, sessions, tokens, parsed, ur
132
132
  // Set auth cookie for subsequent sub-resource requests
133
133
  const cookieToken = tokenOwns ? token : authJwt;
134
134
  if (cookieToken) {
135
- const cookieVal = encodeURIComponent(`${sessionId}:${port}:${cookieToken}`);
135
+ const cookieVal = encodeURIComponent(`${hostDeviceId}:${port}:${cookieToken}`);
136
136
  res.setHeader("Set-Cookie", `lsh_tunnel=${cookieVal}; Path=/; HttpOnly; SameSite=Lax`);
137
137
  }
138
138
  // Validate session & host
139
- const session = sessions.get(sessionId);
139
+ const session = sessions.get(hostDeviceId);
140
140
  if (!session || !session.host || session.host.socket.readyState !== session.host.socket.OPEN) {
141
141
  errorResponse(res, 502, "Host not connected");
142
142
  return;
@@ -177,16 +177,16 @@ export async function handleTunnelRequest(req, res, sessions, tokens, parsed, ur
177
177
  headersSent: false,
178
178
  timeout: setTimeout(() => {
179
179
  pendingRequests.delete(requestId);
180
- untrackRequest(sessionId, requestId);
180
+ untrackRequest(hostDeviceId, requestId);
181
181
  errorResponse(res, 504, "Tunnel request timed out");
182
182
  }, TUNNEL_TIMEOUT),
183
183
  };
184
184
  pendingRequests.set(requestId, pending);
185
- trackRequest(sessionId, requestId);
185
+ trackRequest(hostDeviceId, requestId);
186
186
  // Send tunnel.request to host
187
187
  const envelope = createEnvelope({
188
188
  type: "tunnel.request",
189
- sessionId,
189
+ hostDeviceId,
190
190
  payload: {
191
191
  requestId,
192
192
  method,
@@ -203,7 +203,7 @@ export async function handleTunnelRequest(req, res, sessions, tokens, parsed, ur
203
203
  if (p) {
204
204
  clearTimeout(p.timeout);
205
205
  pendingRequests.delete(requestId);
206
- untrackRequest(sessionId, requestId);
206
+ untrackRequest(hostDeviceId, requestId);
207
207
  }
208
208
  });
209
209
  }
@@ -260,8 +260,8 @@ export function registerTunnelWs(requestId, ws) {
260
260
  export function removeTunnelWs(requestId) {
261
261
  pendingWsSockets.delete(requestId);
262
262
  }
263
- export function cleanupSessionTunnels(sessionId) {
264
- const requestIds = sessionRequests.get(sessionId);
263
+ export function cleanupSessionTunnels(hostDeviceId) {
264
+ const requestIds = deviceRequests.get(hostDeviceId);
265
265
  if (!requestIds)
266
266
  return;
267
267
  for (const rid of requestIds) {
@@ -277,13 +277,13 @@ export function cleanupSessionTunnels(sessionId) {
277
277
  pendingWsSockets.delete(rid);
278
278
  }
279
279
  }
280
- sessionRequests.delete(sessionId);
280
+ deviceRequests.delete(hostDeviceId);
281
281
  }
282
282
  export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
283
- const { sessionId, port, path } = parsed;
283
+ const { hostDeviceId, port, path } = parsed;
284
284
  // Auth: device token OR Supabase JWT (userId owns session)
285
285
  const token = url.searchParams.get("token");
286
- const tokenOwns = token && tokens.owns(token, sessionId);
286
+ const tokenOwns = token && tokens.owns(token, hostDeviceId);
287
287
  let authOwns = false;
288
288
  if (!tokenOwns && AUTH_REQUIRED) {
289
289
  // Try auth_token param first, then fall back to token param (cookie fallback stores JWT there)
@@ -299,7 +299,7 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
299
299
  });
300
300
  if (userRes.ok) {
301
301
  const user = (await userRes.json());
302
- const session = sessions.get(sessionId);
302
+ const session = sessions.get(hostDeviceId);
303
303
  if (user.id && session?.userId && user.id === session.userId) {
304
304
  authOwns = true;
305
305
  }
@@ -313,7 +313,7 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
313
313
  ws.close(4001, "Unauthorized");
314
314
  return;
315
315
  }
316
- const session = sessions.get(sessionId);
316
+ const session = sessions.get(hostDeviceId);
317
317
  if (!session || !session.host || session.host.socket.readyState !== session.host.socket.OPEN) {
318
318
  ws.close(4002, "Host not connected");
319
319
  return;
@@ -322,11 +322,11 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
322
322
  const fullUrl = path + (url.search || "");
323
323
  // Register this WS so host responses route here
324
324
  registerTunnelWs(requestId, ws);
325
- trackRequest(sessionId, requestId);
325
+ trackRequest(hostDeviceId, requestId);
326
326
  // Send tunnel.request with upgrade header to host
327
327
  const envelope = createEnvelope({
328
328
  type: "tunnel.request",
329
- sessionId,
329
+ hostDeviceId,
330
330
  payload: {
331
331
  requestId,
332
332
  method: "GET",
@@ -340,14 +340,14 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
340
340
  // Forward data from browser WS to host
341
341
  ws.on("message", (data) => {
342
342
  try {
343
- const s = sessions.get(sessionId);
343
+ const s = sessions.get(hostDeviceId);
344
344
  if (!s?.host || s.host.socket.readyState !== s.host.socket.OPEN)
345
345
  return;
346
346
  const isBinary = typeof data !== "string";
347
347
  const buf = typeof data === "string" ? Buffer.from(data) : data;
348
348
  const fwd = createEnvelope({
349
349
  type: "tunnel.ws.data",
350
- sessionId,
350
+ hostDeviceId,
351
351
  payload: {
352
352
  requestId,
353
353
  data: buf.toString("base64"),
@@ -361,14 +361,14 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
361
361
  ws.on("close", (code, reason) => {
362
362
  try {
363
363
  removeTunnelWs(requestId);
364
- untrackRequest(sessionId, requestId);
365
- const s = sessions.get(sessionId);
364
+ untrackRequest(hostDeviceId, requestId);
365
+ const s = sessions.get(hostDeviceId);
366
366
  if (!s?.host || s.host.socket.readyState !== s.host.socket.OPEN)
367
367
  return;
368
368
  const safeCode = typeof code === "number" && code >= 1000 && code <= 4999 ? code : 1000;
369
369
  const fwd = createEnvelope({
370
370
  type: "tunnel.ws.close",
371
- sessionId,
371
+ hostDeviceId,
372
372
  payload: {
373
373
  requestId,
374
374
  code: safeCode,
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../../src/tunnel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../../src/tunnel.ts"],"names":[],"mappings":"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"}