@linkshell/gateway 0.2.46 → 0.2.48

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 (39) hide show
  1. package/dist/gateway/src/agent-permission-http.d.ts +18 -9
  2. package/dist/gateway/src/agent-permission-http.js +18 -10
  3. package/dist/gateway/src/agent-permission-http.js.map +1 -1
  4. package/dist/gateway/src/embedded.js +119 -55
  5. package/dist/gateway/src/embedded.js.map +1 -1
  6. package/dist/gateway/src/index.js +158 -91
  7. package/dist/gateway/src/index.js.map +1 -1
  8. package/dist/gateway/src/pairings.d.ts +3 -3
  9. package/dist/gateway/src/pairings.js +4 -5
  10. package/dist/gateway/src/pairings.js.map +1 -1
  11. package/dist/gateway/src/relay.d.ts +1 -1
  12. package/dist/gateway/src/relay.js +25 -18
  13. package/dist/gateway/src/relay.js.map +1 -1
  14. package/dist/gateway/src/sessions.d.ts +35 -28
  15. package/dist/gateway/src/sessions.js +165 -145
  16. package/dist/gateway/src/sessions.js.map +1 -1
  17. package/dist/gateway/src/state-store.d.ts +9 -6
  18. package/dist/gateway/src/state-store.js +26 -19
  19. package/dist/gateway/src/state-store.js.map +1 -1
  20. package/dist/gateway/src/tokens.d.ts +27 -7
  21. package/dist/gateway/src/tokens.js +86 -60
  22. package/dist/gateway/src/tokens.js.map +1 -1
  23. package/dist/gateway/src/tunnel.d.ts +11 -10
  24. package/dist/gateway/src/tunnel.js +46 -35
  25. package/dist/gateway/src/tunnel.js.map +1 -1
  26. package/dist/gateway/tsconfig.tsbuildinfo +1 -1
  27. package/dist/shared-protocol/src/index.d.ts +662 -494
  28. package/dist/shared-protocol/src/index.js +52 -15
  29. package/dist/shared-protocol/src/index.js.map +1 -1
  30. package/package.json +2 -2
  31. package/src/agent-permission-http.ts +18 -10
  32. package/src/embedded.ts +122 -54
  33. package/src/index.ts +162 -91
  34. package/src/pairings.ts +6 -7
  35. package/src/relay.ts +28 -20
  36. package/src/sessions.ts +179 -150
  37. package/src/state-store.ts +41 -25
  38. package/src/tokens.ts +109 -63
  39. package/src/tunnel.ts +57 -39
@@ -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
+ getTokenForSession(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
+ getTokenForSession(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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"}
@@ -10,22 +10,26 @@ 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
+ hostDeviceId: string;
15
16
  sessionId: string;
16
17
  port: number;
17
18
  token: string;
18
19
  } | null;
19
20
  export declare function parseTunnelPath(pathname: string): {
21
+ hostDeviceId: string;
20
22
  sessionId: string;
21
23
  port: number;
22
24
  path: string;
23
25
  } | null;
24
- export declare function handleTunnelRequest(req: IncomingMessage, res: ServerResponse, sessions: SessionManager, tokens: TokenManager, parsed: {
25
- sessionId: string;
26
+ type ParsedTunnelTarget = {
27
+ hostDeviceId?: string;
28
+ sessionId?: string;
26
29
  port: number;
27
30
  path: string;
28
- }, url: URL, preAuthToken?: string): Promise<void>;
31
+ };
32
+ export declare function handleTunnelRequest(req: IncomingMessage, res: ServerResponse, sessions: SessionManager, tokens: TokenManager, parsed: ParsedTunnelTarget, url: URL, preAuthToken?: string): Promise<void>;
29
33
  export declare function handleTunnelResponse(payload: {
30
34
  requestId: string;
31
35
  statusCode: number;
@@ -45,9 +49,6 @@ export declare function handleTunnelWsClose(payload: {
45
49
  }): void;
46
50
  export declare function registerTunnelWs(requestId: string, ws: WebSocket): void;
47
51
  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>;
52
+ export declare function cleanupSessionTunnels(hostDeviceId: string): void;
53
+ export declare function handleTunnelWsUpgrade(ws: WebSocket, parsed: ParsedTunnelTarget, url: URL, sessions: SessionManager, tokens: TokenManager): Promise<void>;
54
+ 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, sessionId: hostDeviceId, port, token };
65
65
  }
66
66
  function errorResponse(res, status, message) {
67
67
  if (res.headersSent)
@@ -80,16 +80,22 @@ export function parseTunnelPath(pathname) {
80
80
  if (port < 1 || port > 65535)
81
81
  return null;
82
82
  return {
83
+ hostDeviceId: match[1],
83
84
  sessionId: match[1],
84
85
  port,
85
86
  path: match[3] || "/",
86
87
  };
87
88
  }
88
89
  export async function handleTunnelRequest(req, res, sessions, tokens, parsed, url, preAuthToken) {
89
- const { sessionId, port, path } = parsed;
90
+ const hostDeviceId = parsed.hostDeviceId ?? parsed.sessionId;
91
+ const { port, path } = parsed;
92
+ if (!hostDeviceId) {
93
+ errorResponse(res, 400, "Missing host device id");
94
+ return;
95
+ }
90
96
  // Auth: device token OR Supabase JWT (userId owns session)
91
97
  const token = preAuthToken || extractToken(req, url);
92
- const tokenOwns = token && tokens.owns(token, sessionId);
98
+ const tokenOwns = token && tokens.owns(token, hostDeviceId);
93
99
  let authOwns = false;
94
100
  let authJwt = null;
95
101
  if (!tokenOwns && AUTH_REQUIRED) {
@@ -114,7 +120,7 @@ export async function handleTunnelRequest(req, res, sessions, tokens, parsed, ur
114
120
  });
115
121
  if (userRes.ok) {
116
122
  const user = (await userRes.json());
117
- const session = sessions.get(sessionId);
123
+ const session = sessions.get(hostDeviceId);
118
124
  if (user.id && session?.userId && user.id === session.userId) {
119
125
  authOwns = true;
120
126
  authJwt = jwtCandidate;
@@ -132,11 +138,11 @@ export async function handleTunnelRequest(req, res, sessions, tokens, parsed, ur
132
138
  // Set auth cookie for subsequent sub-resource requests
133
139
  const cookieToken = tokenOwns ? token : authJwt;
134
140
  if (cookieToken) {
135
- const cookieVal = encodeURIComponent(`${sessionId}:${port}:${cookieToken}`);
141
+ const cookieVal = encodeURIComponent(`${hostDeviceId}:${port}:${cookieToken}`);
136
142
  res.setHeader("Set-Cookie", `lsh_tunnel=${cookieVal}; Path=/; HttpOnly; SameSite=Lax`);
137
143
  }
138
144
  // Validate session & host
139
- const session = sessions.get(sessionId);
145
+ const session = sessions.get(hostDeviceId);
140
146
  if (!session || !session.host || session.host.socket.readyState !== session.host.socket.OPEN) {
141
147
  errorResponse(res, 502, "Host not connected");
142
148
  return;
@@ -177,16 +183,16 @@ export async function handleTunnelRequest(req, res, sessions, tokens, parsed, ur
177
183
  headersSent: false,
178
184
  timeout: setTimeout(() => {
179
185
  pendingRequests.delete(requestId);
180
- untrackRequest(sessionId, requestId);
186
+ untrackRequest(hostDeviceId, requestId);
181
187
  errorResponse(res, 504, "Tunnel request timed out");
182
188
  }, TUNNEL_TIMEOUT),
183
189
  };
184
190
  pendingRequests.set(requestId, pending);
185
- trackRequest(sessionId, requestId);
191
+ trackRequest(hostDeviceId, requestId);
186
192
  // Send tunnel.request to host
187
193
  const envelope = createEnvelope({
188
194
  type: "tunnel.request",
189
- sessionId,
195
+ hostDeviceId,
190
196
  payload: {
191
197
  requestId,
192
198
  method,
@@ -203,7 +209,7 @@ export async function handleTunnelRequest(req, res, sessions, tokens, parsed, ur
203
209
  if (p) {
204
210
  clearTimeout(p.timeout);
205
211
  pendingRequests.delete(requestId);
206
- untrackRequest(sessionId, requestId);
212
+ untrackRequest(hostDeviceId, requestId);
207
213
  }
208
214
  });
209
215
  }
@@ -260,8 +266,8 @@ export function registerTunnelWs(requestId, ws) {
260
266
  export function removeTunnelWs(requestId) {
261
267
  pendingWsSockets.delete(requestId);
262
268
  }
263
- export function cleanupSessionTunnels(sessionId) {
264
- const requestIds = sessionRequests.get(sessionId);
269
+ export function cleanupSessionTunnels(hostDeviceId) {
270
+ const requestIds = deviceRequests.get(hostDeviceId);
265
271
  if (!requestIds)
266
272
  return;
267
273
  for (const rid of requestIds) {
@@ -277,13 +283,18 @@ export function cleanupSessionTunnels(sessionId) {
277
283
  pendingWsSockets.delete(rid);
278
284
  }
279
285
  }
280
- sessionRequests.delete(sessionId);
286
+ deviceRequests.delete(hostDeviceId);
281
287
  }
282
288
  export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
283
- const { sessionId, port, path } = parsed;
289
+ const hostDeviceId = parsed.hostDeviceId ?? parsed.sessionId;
290
+ const { port, path } = parsed;
291
+ if (!hostDeviceId) {
292
+ ws.close(1008, "Missing host device id");
293
+ return;
294
+ }
284
295
  // Auth: device token OR Supabase JWT (userId owns session)
285
296
  const token = url.searchParams.get("token");
286
- const tokenOwns = token && tokens.owns(token, sessionId);
297
+ const tokenOwns = token && tokens.owns(token, hostDeviceId);
287
298
  let authOwns = false;
288
299
  if (!tokenOwns && AUTH_REQUIRED) {
289
300
  // Try auth_token param first, then fall back to token param (cookie fallback stores JWT there)
@@ -299,7 +310,7 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
299
310
  });
300
311
  if (userRes.ok) {
301
312
  const user = (await userRes.json());
302
- const session = sessions.get(sessionId);
313
+ const session = sessions.get(hostDeviceId);
303
314
  if (user.id && session?.userId && user.id === session.userId) {
304
315
  authOwns = true;
305
316
  }
@@ -313,7 +324,7 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
313
324
  ws.close(4001, "Unauthorized");
314
325
  return;
315
326
  }
316
- const session = sessions.get(sessionId);
327
+ const session = sessions.get(hostDeviceId);
317
328
  if (!session || !session.host || session.host.socket.readyState !== session.host.socket.OPEN) {
318
329
  ws.close(4002, "Host not connected");
319
330
  return;
@@ -322,11 +333,11 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
322
333
  const fullUrl = path + (url.search || "");
323
334
  // Register this WS so host responses route here
324
335
  registerTunnelWs(requestId, ws);
325
- trackRequest(sessionId, requestId);
336
+ trackRequest(hostDeviceId, requestId);
326
337
  // Send tunnel.request with upgrade header to host
327
338
  const envelope = createEnvelope({
328
339
  type: "tunnel.request",
329
- sessionId,
340
+ hostDeviceId,
330
341
  payload: {
331
342
  requestId,
332
343
  method: "GET",
@@ -340,14 +351,14 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
340
351
  // Forward data from browser WS to host
341
352
  ws.on("message", (data) => {
342
353
  try {
343
- const s = sessions.get(sessionId);
354
+ const s = sessions.get(hostDeviceId);
344
355
  if (!s?.host || s.host.socket.readyState !== s.host.socket.OPEN)
345
356
  return;
346
357
  const isBinary = typeof data !== "string";
347
358
  const buf = typeof data === "string" ? Buffer.from(data) : data;
348
359
  const fwd = createEnvelope({
349
360
  type: "tunnel.ws.data",
350
- sessionId,
361
+ hostDeviceId,
351
362
  payload: {
352
363
  requestId,
353
364
  data: buf.toString("base64"),
@@ -361,14 +372,14 @@ export async function handleTunnelWsUpgrade(ws, parsed, url, sessions, tokens) {
361
372
  ws.on("close", (code, reason) => {
362
373
  try {
363
374
  removeTunnelWs(requestId);
364
- untrackRequest(sessionId, requestId);
365
- const s = sessions.get(sessionId);
375
+ untrackRequest(hostDeviceId, requestId);
376
+ const s = sessions.get(hostDeviceId);
366
377
  if (!s?.host || s.host.socket.readyState !== s.host.socket.OPEN)
367
378
  return;
368
379
  const safeCode = typeof code === "number" && code >= 1000 && code <= 4999 ? code : 1000;
369
380
  const fwd = createEnvelope({
370
381
  type: "tunnel.ws.close",
371
- sessionId,
382
+ hostDeviceId,
372
383
  payload: {
373
384
  requestId,
374
385
  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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"}