@jingyi0605/codingns 0.5.0 → 0.5.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.
Files changed (110) hide show
  1. package/dist/public/assets/AdaptiveButlerPage-CUyNL98E.js +3 -0
  2. package/dist/public/assets/App-BFP7LCSC.js +30 -0
  3. package/dist/public/assets/{BootstrapPage-Vu5oEJ8z.js → BootstrapPage-G74dX2Us.js} +1 -1
  4. package/dist/public/assets/ConversationPage-Bz0_tvvM.js +2 -0
  5. package/dist/public/assets/{DesktopDetachPreviewPage-BgeEqbc5.js → DesktopDetachPreviewPage-IV7oEdOX.js} +1 -1
  6. package/dist/public/assets/DesktopWindowPage-BBmHyRg5.js +2 -0
  7. package/dist/public/assets/FileContextPanel--FVTxDrq.js +1 -0
  8. package/dist/public/assets/GitSidebar-DAiSi9oc.js +6 -0
  9. package/dist/public/assets/{MobileCreateSessionSheet-DLq5qPkx.js → MobileCreateSessionSheet-DqVwz_Hp.js} +1 -1
  10. package/dist/public/assets/MobileSheet-D1lMrcvD.js +1 -0
  11. package/dist/public/assets/{MobileTopHeaderFrame-DArgZI7L.js → MobileTopHeaderFrame-COTc7cRr.js} +1 -1
  12. package/dist/public/assets/{MobileWorkspaceSwitcherHeader-0ywJKfBQ.js → MobileWorkspaceSwitcherHeader-DJPV9ym2.js} +1 -1
  13. package/dist/public/assets/RelayConnectEntryPage-dSwU8VzK.js +1 -0
  14. package/dist/public/assets/{ServerSettingsModal-izoYMx9U.js → ServerSettingsModal-B34ms3ze.js} +1 -1
  15. package/dist/public/assets/{SessionIndexPage-C5aG8FIv.js → SessionIndexPage-D3tG1gmM.js} +1 -1
  16. package/dist/public/assets/SettingsPage-B3-6-5GL.js +1 -0
  17. package/dist/public/assets/TerminalManagerPanel-DhuTEdzV.js +1 -0
  18. package/dist/public/assets/{TerminalPage-CtKXIU0h.js → TerminalPage-DpsvQQVR.js} +19 -19
  19. package/dist/public/assets/{TerminalRuntimeFallbackModal-CRhOQOsT.js → TerminalRuntimeFallbackModal-CNzOt5v5.js} +1 -1
  20. package/dist/public/assets/{ToolFilesPage-DcYPsS-e.js → ToolFilesPage-BX9QDi9Y.js} +1 -1
  21. package/dist/public/assets/{ToolGitPage-CsPl89ty.js → ToolGitPage-4VtFox3p.js} +1 -1
  22. package/dist/public/assets/{ToolProcessesPage-D0dvR8xK.js → ToolProcessesPage-DZJC6Qnt.js} +1 -1
  23. package/dist/public/assets/{ToolsHomePage-4fP-KRiv.js → ToolsHomePage-D7JbrAWv.js} +1 -1
  24. package/dist/public/assets/{WorkbenchLandingPage-kvlfyxRo.js → WorkbenchLandingPage-C0yqnzqh.js} +1 -1
  25. package/dist/public/assets/WorkbenchLayout-Brlj8K3i.js +3 -0
  26. package/dist/public/assets/{WorkbenchModal-Ctob14VR.js → WorkbenchModal-CbDxaCOR.js} +1 -1
  27. package/dist/public/assets/WorkbenchShellRoute-BMcnFadA.css +1 -0
  28. package/dist/public/assets/WorkbenchShellRoute-puGpdDFY.js +1 -0
  29. package/dist/public/assets/{WorkspaceDebugDetailPage-Com5kEXJ.js → WorkspaceDebugDetailPage-fTGweC9N.js} +1 -1
  30. package/dist/public/assets/WorkspaceDetailPage-BtaIzSDB.js +1 -0
  31. package/dist/public/assets/WorkspaceHomePage-CUmmYDrM.js +1 -0
  32. package/dist/public/assets/client-runtime-manager-RHFa_iWo.js +1 -0
  33. package/dist/public/assets/{default-session-permission-mode-CcGwR4Kk.js → default-session-permission-mode-Cu5SreTG.js} +1 -1
  34. package/dist/public/assets/file-tree-icon-BMKuc5pw.js +31 -0
  35. package/dist/public/assets/index-Cq3ue0za.css +1 -0
  36. package/dist/public/assets/index-DEbFT-Aq.js +42 -0
  37. package/dist/public/assets/{preferences-service-KIYeE2gk.js → preferences-service-gv_9vGKz.js} +1 -1
  38. package/dist/public/assets/session-runtime-machine-Bfnxkk9B.js +17 -0
  39. package/dist/public/assets/{terminal-runtime-meta-AWXJpN4r.js → terminal-runtime-meta-B9xJGY__.js} +1 -1
  40. package/dist/public/assets/{useRegisteredDebugTemplates-DBDRdptr.js → useRegisteredDebugTemplates-CDfl54Wt.js} +1 -1
  41. package/dist/public/index.html +2 -2
  42. package/dist/server/config/env.d.ts +1 -0
  43. package/dist/server/config/env.js +36 -0
  44. package/dist/server/config/env.js.map +1 -1
  45. package/dist/server/modules/client/client-controller.js +1 -1
  46. package/dist/server/modules/client/client-controller.js.map +1 -1
  47. package/dist/server/modules/client/client-service.d.ts +16 -2
  48. package/dist/server/modules/client/client-service.js +21 -3
  49. package/dist/server/modules/client/client-service.js.map +1 -1
  50. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.d.ts +16 -1
  51. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js.map +1 -1
  52. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.d.ts +2 -1
  53. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js +18 -0
  54. package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js.map +1 -1
  55. package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.d.ts +13 -0
  56. package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.js +2 -0
  57. package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.js.map +1 -0
  58. package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.d.ts +6 -0
  59. package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js +110 -10
  60. package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js.map +1 -1
  61. package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.d.ts +16 -4
  62. package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js +216 -101
  63. package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js.map +1 -1
  64. package/dist/server/modules/relay-tunnel/relay-tunnel-service.d.ts +6 -2
  65. package/dist/server/modules/relay-tunnel/relay-tunnel-service.js +457 -40
  66. package/dist/server/modules/relay-tunnel/relay-tunnel-service.js.map +1 -1
  67. package/dist/server/modules/sessions/session-activity-inspector.js +6 -8
  68. package/dist/server/modules/sessions/session-activity-inspector.js.map +1 -1
  69. package/dist/server/modules/sessions/session-history-service.d.ts +1 -0
  70. package/dist/server/modules/sessions/session-history-service.js +62 -7
  71. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  72. package/dist/server/modules/workbench/snapshot-revision.d.ts +4 -0
  73. package/dist/server/modules/workbench/snapshot-revision.js +13 -0
  74. package/dist/server/modules/workbench/snapshot-revision.js.map +1 -0
  75. package/dist/server/modules/workbench/workbench-service.d.ts +33 -2
  76. package/dist/server/modules/workbench/workbench-service.js +39 -4
  77. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  78. package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +6 -1
  79. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +10 -8
  80. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
  81. package/dist/server/server/create-server.js +11 -6
  82. package/dist/server/server/create-server.js.map +1 -1
  83. package/dist/server/types/domain.d.ts +9 -0
  84. package/dist/server/ws/workbench-ws-hub.js +295 -43
  85. package/dist/server/ws/workbench-ws-hub.js.map +1 -1
  86. package/dist/server/ws/ws-server.js +141 -8
  87. package/dist/server/ws/ws-server.js.map +1 -1
  88. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +33 -6
  89. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  90. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +78 -36
  91. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  92. package/package.json +1 -1
  93. package/dist/public/assets/AdaptiveButlerPage-R-XZw7pd.js +0 -3
  94. package/dist/public/assets/App-DkvE5EyM.js +0 -30
  95. package/dist/public/assets/ConversationPage-Cjpg6g0J.js +0 -2
  96. package/dist/public/assets/DesktopWindowPage-1WelvxdH.js +0 -2
  97. package/dist/public/assets/FileContextPanel-D_ghXJuW.js +0 -1
  98. package/dist/public/assets/GitSidebar-D9f9Jxwr.js +0 -6
  99. package/dist/public/assets/MobileSheet-DLg-gX1t.js +0 -1
  100. package/dist/public/assets/SettingsPage-HJIC-P-4.js +0 -1
  101. package/dist/public/assets/TerminalManagerPanel-DpyUTo9k.js +0 -1
  102. package/dist/public/assets/WorkbenchLayout-ByFw4eeu.js +0 -3
  103. package/dist/public/assets/WorkbenchShellRoute-BUITtdAg.css +0 -1
  104. package/dist/public/assets/WorkbenchShellRoute-Kw7JEZI3.js +0 -1
  105. package/dist/public/assets/WorkspaceDetailPage-D0Lrx4Uz.js +0 -1
  106. package/dist/public/assets/WorkspaceHomePage-wR8d3aP9.js +0 -1
  107. package/dist/public/assets/file-tree-icon-UFVoVzhM.js +0 -31
  108. package/dist/public/assets/index-Byp9hJ0c.js +0 -42
  109. package/dist/public/assets/index-_52jxu4a.css +0 -1
  110. package/dist/public/assets/session-runtime-machine-0KNSSPp5.js +0 -17
@@ -1 +1 @@
1
- {"version":3,"file":"relay-tunnel-gateway-service.js","sourceRoot":"","sources":["../../../../src/modules/relay-tunnel/relay-tunnel-gateway-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-tunnel-gateway-service.js","sourceRoot":"","sources":["../../../../src/modules/relay-tunnel/relay-tunnel-gateway-service.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,12 @@ import type { InstanceRelayTunnelIdentityRepository } from "../../storage/reposi
3
3
  import type { InstanceRelayTunnelRepository } from "../../storage/repositories/instance-relay-tunnel-repository.js";
4
4
  import type { InstanceRelayTunnelConfig, InstanceRelayTunnelStatus } from "../../types/domain.js";
5
5
  import type { RelayTunnelRuntimeAdapter } from "./relay-tunnel-service.js";
6
+ export declare class RelayTunnelRuntimeHttpError extends Error {
7
+ readonly statusCode: number;
8
+ readonly errorCode: string | null;
9
+ readonly detail: string;
10
+ constructor(statusCode: number, errorCode: string | null, detail: string, prefix: string);
11
+ }
6
12
  export declare class RelayTunnelRuntimeEdgeAdapter implements RelayTunnelRuntimeAdapter {
7
13
  private readonly identityRepository;
8
14
  private readonly repository;
@@ -10,6 +16,7 @@ export declare class RelayTunnelRuntimeEdgeAdapter implements RelayTunnelRuntime
10
16
  private currentConfigKey;
11
17
  private runtimeAbortController;
12
18
  private runtimePromise;
19
+ private hostChannelSocket;
13
20
  private activeSessions;
14
21
  private lastPhase;
15
22
  private latestRemainingBytes;
@@ -22,20 +29,25 @@ export declare class RelayTunnelRuntimeEdgeAdapter implements RelayTunnelRuntime
22
29
  connect(config: InstanceRelayTunnelConfig, signal: AbortSignal): Promise<InstanceRelayTunnelStatus>;
23
30
  disconnect(_reason?: string): Promise<void>;
24
31
  private runSupervisor;
32
+ private runHostUpstreamChannel;
25
33
  private maybeSendHeartbeat;
26
- private claimNextSession;
34
+ private openHostUpstreamChannel;
27
35
  private buildHeartbeatRequest;
28
- private startRelaySession;
36
+ private handleHostChannelPayload;
37
+ private ensureRelaySession;
29
38
  private handleRelayPayload;
39
+ private sendControlEnvelope;
40
+ private sendSessionClose;
30
41
  private emitRelayError;
31
42
  private teardownRelaySession;
43
+ private closeAllSessions;
32
44
  }
33
45
  declare function buildHttpUrl(baseUrl: string, pathname: string): string;
34
- declare function buildRelayWebSocketUrl(relayBaseUrl: string, sessionId: string): string;
46
+ declare function buildRelayHostWebSocketUrl(relayBaseUrl: string, bindingId: string, challengeId: string, proof: string): string;
35
47
  declare function buildControlHttpUrl(controlBaseUrl: string, pathname: string): string;
36
48
  export declare const __internal__: {
37
49
  buildHttpUrl: typeof buildHttpUrl;
38
- buildRelayWebSocketUrl: typeof buildRelayWebSocketUrl;
50
+ buildRelayHostWebSocketUrl: typeof buildRelayHostWebSocketUrl;
39
51
  buildControlHttpUrl: typeof buildControlHttpUrl;
40
52
  };
41
53
  export {};
@@ -5,9 +5,21 @@ import { acceptRelayTunnelClientHandshake, decryptRelayTunnelFrame, encryptRelay
5
5
  import { deserializeRelayTunnelPacket, serializeRelayTunnelPacket } from "./crypto/relay-tunnel-packets.js";
6
6
  import { createRelayTunnelHostClaimProof } from "./relay-tunnel-edge-proof.js";
7
7
  import { RelayTunnelGatewayService } from "./relay-tunnel-gateway-service.js";
8
+ export class RelayTunnelRuntimeHttpError extends Error {
9
+ statusCode;
10
+ errorCode;
11
+ detail;
12
+ constructor(statusCode, errorCode, detail, prefix) {
13
+ super(`${prefix}:${detail}`);
14
+ this.statusCode = statusCode;
15
+ this.errorCode = errorCode;
16
+ this.detail = detail;
17
+ this.name = "RelayTunnelRuntimeHttpError";
18
+ }
19
+ }
8
20
  const IDLE_POLL_MS = 1_000;
9
21
  const ERROR_RETRY_MS = 2_000;
10
- const CLAIM_TIMEOUT_MS = 8_000;
22
+ const CHALLENGE_TIMEOUT_MS = 8_000;
11
23
  const HEARTBEAT_INTERVAL_MS = 5_000;
12
24
  const HEARTBEAT_TIMEOUT_MS = 5_000;
13
25
  export class RelayTunnelRuntimeEdgeAdapter {
@@ -17,6 +29,7 @@ export class RelayTunnelRuntimeEdgeAdapter {
17
29
  currentConfigKey = null;
18
30
  runtimeAbortController = null;
19
31
  runtimePromise = null;
32
+ hostChannelSocket = null;
20
33
  activeSessions = new Map();
21
34
  lastPhase = "connecting";
22
35
  latestRemainingBytes = null;
@@ -29,7 +42,7 @@ export class RelayTunnelRuntimeEdgeAdapter {
29
42
  async connect(config, signal) {
30
43
  const identity = this.identityRepository.findIdentity();
31
44
  if (!identity) {
32
- throw new Error("当前 Host 还没有可用的公共隧道身份密钥");
45
+ throw new Error("当前 Host 还没有可用的 CodingNS Connect 身份密钥");
33
46
  }
34
47
  const configKey = serializeConfigKey(config);
35
48
  if (this.currentConfigKey !== configKey) {
@@ -54,17 +67,14 @@ export class RelayTunnelRuntimeEdgeAdapter {
54
67
  if (controller) {
55
68
  controller.abort();
56
69
  }
57
- for (const activeSession of this.activeSessions.values()) {
58
- activeSession.closed = true;
59
- activeSession.gateway?.close();
60
- activeSession.socket.close();
61
- }
62
- this.activeSessions.clear();
70
+ this.hostChannelSocket?.close();
71
+ this.hostChannelSocket = null;
72
+ this.closeAllSessions();
63
73
  try {
64
74
  await this.runtimePromise;
65
75
  }
66
76
  catch {
67
- // 这里是停机路径,错误已经在状态里体现,不再向上抛。
77
+ // 停机路径不再额外抛错。
68
78
  }
69
79
  this.runtimePromise = null;
70
80
  }
@@ -72,21 +82,7 @@ export class RelayTunnelRuntimeEdgeAdapter {
72
82
  while (!signal.aborted) {
73
83
  try {
74
84
  await this.maybeSendHeartbeat(config, identity, signal);
75
- const claim = await this.claimNextSession(config, identity, signal);
76
- const remainingBytes = claim?.remainingBytes ?? this.latestRemainingBytes;
77
- this.latestRemainingBytes = remainingBytes;
78
- if (claim) {
79
- this.lastPhase = "running";
80
- this.startRelaySession(config, identity, claim);
81
- }
82
- else if (this.lastPhase === "connecting") {
83
- this.lastPhase = "running";
84
- }
85
- const status = buildStatus(this.lastPhase, config, identity.keyFingerprint, remainingBytes);
86
- this.repository.upsertStatus(status);
87
- if (!claim) {
88
- await waitForDelay(IDLE_POLL_MS, signal);
89
- }
85
+ await this.runHostUpstreamChannel(config, identity, signal);
90
86
  }
91
87
  catch (error) {
92
88
  if (signal.aborted) {
@@ -94,16 +90,49 @@ export class RelayTunnelRuntimeEdgeAdapter {
94
90
  }
95
91
  const message = error instanceof Error ? error.message : String(error);
96
92
  const phase = this.lastPhase === "quota_exhausted" ? "quota_exhausted" : "error";
97
- const failedStatus = {
93
+ this.repository.upsertStatus({
98
94
  ...buildStatus(phase, config, identity.keyFingerprint, this.latestRemainingBytes),
99
95
  connected: false,
100
96
  lastError: message
101
- };
102
- this.repository.upsertStatus(failedStatus);
97
+ });
103
98
  await waitForDelay(ERROR_RETRY_MS, signal);
104
99
  }
105
100
  }
106
101
  }
102
+ async runHostUpstreamChannel(config, identity, signal) {
103
+ const socket = await this.openHostUpstreamChannel(config, identity, signal);
104
+ this.hostChannelSocket = socket;
105
+ this.lastPhase = "running";
106
+ this.repository.upsertStatus(buildStatus("running", config, identity.keyFingerprint, this.latestRemainingBytes));
107
+ const closed = createSocketCloseSignal(socket);
108
+ socket.on("message", (payload, isBinary) => {
109
+ if (isBinary) {
110
+ socket.close(1008, "HOST_CHANNEL_BINARY_NOT_SUPPORTED");
111
+ return;
112
+ }
113
+ const rawPayload = typeof payload === "string" ? payload : payload.toString("utf8");
114
+ void this.handleHostChannelPayload(config, identity, rawPayload);
115
+ });
116
+ while (!signal.aborted) {
117
+ const result = await Promise.race([
118
+ closed.promise,
119
+ waitForDelay(IDLE_POLL_MS, signal).then(() => null)
120
+ ]);
121
+ if (result) {
122
+ this.hostChannelSocket = null;
123
+ this.closeAllSessions();
124
+ if (result.error) {
125
+ throw result.error;
126
+ }
127
+ throw new Error(`Host 上游信道已断开(code=${result.code}${result.reason ? `, reason=${result.reason}` : ""})`);
128
+ }
129
+ await this.maybeSendHeartbeat(config, identity, signal);
130
+ }
131
+ socket.close(1000, "relay_tunnel_runtime_abort");
132
+ await closed.promise;
133
+ this.hostChannelSocket = null;
134
+ this.closeAllSessions();
135
+ }
107
136
  async maybeSendHeartbeat(config, identity, signal) {
108
137
  const heartbeatRequest = this.buildHeartbeatRequest(config, identity);
109
138
  if (!heartbeatRequest) {
@@ -128,10 +157,10 @@ export class RelayTunnelRuntimeEdgeAdapter {
128
157
  }
129
158
  }
130
159
  catch {
131
- // 心跳只负责在线统计,不能反过来把隧道主链路打断。
160
+ // 心跳只负责在线统计,不能打断主链路。
132
161
  }
133
162
  }
134
- async claimNextSession(config, identity, signal) {
163
+ async openHostUpstreamChannel(config, identity, signal) {
135
164
  const fetchFn = this.dependencies?.fetchFn ?? fetch;
136
165
  const challengeResponse = await fetchWithTimeout(fetchFn, buildHttpUrl(config.relayBaseUrl, "/api/public/hosts/challenge"), {
137
166
  method: "POST",
@@ -144,9 +173,9 @@ export class RelayTunnelRuntimeEdgeAdapter {
144
173
  hostFingerprint: identity.keyFingerprint
145
174
  }),
146
175
  signal
147
- }, CLAIM_TIMEOUT_MS);
176
+ }, CHALLENGE_TIMEOUT_MS);
148
177
  if (!challengeResponse.ok) {
149
- throw await buildHttpError(challengeResponse, "申请 Host 领取挑战失败");
178
+ throw await buildHttpError(challengeResponse, "申请 Host 上游接入挑战失败");
150
179
  }
151
180
  const challengePayload = await challengeResponse.json();
152
181
  const proof = createRelayTunnelHostClaimProof({
@@ -158,22 +187,9 @@ export class RelayTunnelRuntimeEdgeAdapter {
158
187
  relayPublicKey: challengePayload.challenge.relayPublicKey,
159
188
  hostPrivateKeyPem: identity.privateKeyPem
160
189
  });
161
- const claimResponse = await fetchWithTimeout(fetchFn, buildHttpUrl(config.relayBaseUrl, "/api/public/hosts/claim-next-session"), {
162
- method: "POST",
163
- headers: {
164
- "Content-Type": "application/json"
165
- },
166
- body: JSON.stringify({
167
- challengeId: challengePayload.challenge.challengeId,
168
- proof
169
- }),
170
- signal
171
- }, CLAIM_TIMEOUT_MS);
172
- if (!claimResponse.ok) {
173
- throw await buildHttpError(claimResponse, "领取待接会话失败");
174
- }
175
- const claimPayload = await claimResponse.json();
176
- return claimPayload.reservation;
190
+ const socket = (this.dependencies?.createWebSocket ?? ((url) => new WebSocket(url)))(buildRelayHostWebSocketUrl(config.relayBaseUrl, config.bindingId, challengePayload.challenge.challengeId, proof));
191
+ await waitForSocketOpen(socket, signal);
192
+ return socket;
177
193
  }
178
194
  buildHeartbeatRequest(config, identity) {
179
195
  const controlBaseUrl = normalizeRequiredText(config.controlBaseUrl);
@@ -206,54 +222,61 @@ export class RelayTunnelRuntimeEdgeAdapter {
206
222
  return null;
207
223
  }
208
224
  }
209
- startRelaySession(config, identity, reservation) {
210
- if (this.activeSessions.has(reservation.sessionId)) {
225
+ async handleHostChannelPayload(config, identity, rawPayload) {
226
+ let envelope;
227
+ try {
228
+ envelope = JSON.parse(rawPayload);
229
+ }
230
+ catch {
231
+ this.hostChannelSocket?.close(1008, "HOST_CHANNEL_INVALID_ENVELOPE");
211
232
  return;
212
233
  }
213
- const socket = (this.dependencies?.createWebSocket ?? ((url) => new WebSocket(url)))(buildRelayWebSocketUrl(config.relayBaseUrl, reservation.sessionId));
214
- const activeSession = {
215
- relaySessionId: reservation.sessionId,
216
- socket,
217
- gateway: null,
218
- cryptoSession: null,
219
- closed: false
220
- };
221
- this.activeSessions.set(reservation.sessionId, activeSession);
222
- socket.on("message", (payload, isBinary) => {
223
- if (isBinary) {
224
- void this.emitRelayError(activeSession, "UNSUPPORTED_BINARY_FRAME", "公共隧道控制面不支持二进制帧");
234
+ if (envelope.type === "session.open") {
235
+ this.ensureRelaySession(envelope.sessionId, envelope.clientContext ?? null);
236
+ return;
237
+ }
238
+ if (envelope.type === "session.close") {
239
+ this.teardownRelaySession(envelope.sessionId);
240
+ return;
241
+ }
242
+ const activeSession = this.activeSessions.get(envelope.sessionId) ?? null;
243
+ if (!activeSession) {
244
+ this.sendSessionClose(envelope.sessionId, 1008, "SESSION_NOT_FOUND");
245
+ return;
246
+ }
247
+ activeSession.inboundQueue = activeSession.inboundQueue
248
+ .catch(() => undefined)
249
+ .then(async () => {
250
+ if (activeSession.closed) {
225
251
  return;
226
252
  }
227
- const rawPayload = typeof payload === "string" ? payload : payload.toString("utf8");
228
- void this.handleRelayPayload(activeSession, config, identity, rawPayload);
229
- });
230
- socket.on("close", (code, reason) => {
231
- this.teardownRelaySession(reservation.sessionId);
232
- if (code === 1008 && reason.toString("utf8") === "QUOTA_EXHAUSTED") {
233
- this.lastPhase = "quota_exhausted";
234
- this.latestRemainingBytes = "0";
235
- this.repository.upsertStatus({
236
- ...buildStatus("quota_exhausted", config, identity.keyFingerprint, "0"),
237
- connected: false,
238
- lastError: "公共隧道流量额度已经耗尽"
239
- });
240
- }
241
- });
242
- socket.on("error", (error) => {
243
- this.repository.upsertStatus({
244
- ...buildStatus("error", config, identity.keyFingerprint, this.latestRemainingBytes),
245
- connected: false,
246
- lastError: error.message
247
- });
253
+ await this.handleRelayPayload(activeSession, config, identity, Buffer.from(envelope.payloadBase64Url, "base64url").toString("utf8"));
248
254
  });
249
255
  }
256
+ ensureRelaySession(sessionId, clientContext = null) {
257
+ const existing = this.activeSessions.get(sessionId);
258
+ if (existing) {
259
+ existing.clientContext = clientContext;
260
+ return existing;
261
+ }
262
+ const created = {
263
+ relaySessionId: sessionId,
264
+ clientContext,
265
+ gateway: null,
266
+ cryptoSession: null,
267
+ closed: false,
268
+ inboundQueue: Promise.resolve()
269
+ };
270
+ this.activeSessions.set(sessionId, created);
271
+ return created;
272
+ }
250
273
  async handleRelayPayload(activeSession, config, identity, rawPayload) {
251
274
  let envelope;
252
275
  try {
253
276
  envelope = JSON.parse(rawPayload);
254
277
  }
255
278
  catch {
256
- await this.emitRelayError(activeSession, "INVALID_CONTROL_ENVELOPE", "公共隧道控制包不是合法 JSON");
279
+ await this.emitRelayError(activeSession, "INVALID_CONTROL_ENVELOPE", "CodingNS Connect 控制包不是合法 JSON");
257
280
  return;
258
281
  }
259
282
  if (envelope.type === "client_hello") {
@@ -269,21 +292,23 @@ export class RelayTunnelRuntimeEdgeAdapter {
269
292
  activeSession.cryptoSession = accepted.session;
270
293
  activeSession.gateway = new RelayTunnelGatewayService({
271
294
  localTargetBaseUrl: config.localTargetBaseUrl,
295
+ sessionId: activeSession.relaySessionId,
296
+ clientContext: activeSession.clientContext,
272
297
  onPacket: async (packet) => {
273
- if (!activeSession.cryptoSession || activeSession.closed || activeSession.socket.readyState !== WebSocket.OPEN) {
298
+ if (!activeSession.cryptoSession || activeSession.closed) {
274
299
  return;
275
300
  }
276
301
  const frame = encryptRelayTunnelFrame(activeSession.cryptoSession, serializeRelayTunnelPacket(packet));
277
- activeSession.socket.send(JSON.stringify({
302
+ await this.sendControlEnvelope(activeSession.relaySessionId, {
278
303
  type: "encrypted_frame",
279
304
  frame
280
- }));
305
+ });
281
306
  }
282
307
  });
283
- activeSession.socket.send(JSON.stringify({
308
+ await this.sendControlEnvelope(activeSession.relaySessionId, {
284
309
  type: "server_hello",
285
310
  hello: accepted.serverHello
286
- }));
311
+ });
287
312
  }
288
313
  catch (error) {
289
314
  await this.emitRelayError(activeSession, "HANDSHAKE_FAILED", error instanceof Error ? error.message : String(error));
@@ -297,6 +322,9 @@ export class RelayTunnelRuntimeEdgeAdapter {
297
322
  }
298
323
  try {
299
324
  const plaintext = decryptRelayTunnelFrame(activeSession.cryptoSession, envelope.frame);
325
+ if (!plaintext) {
326
+ return;
327
+ }
300
328
  await activeSession.gateway.handlePacket(deserializeRelayTunnelPacket(plaintext));
301
329
  }
302
330
  catch (error) {
@@ -312,15 +340,33 @@ export class RelayTunnelRuntimeEdgeAdapter {
312
340
  });
313
341
  }
314
342
  }
315
- async emitRelayError(activeSession, errorCode, detail) {
316
- if (activeSession.closed || activeSession.socket.readyState !== WebSocket.OPEN) {
343
+ async sendControlEnvelope(sessionId, envelope) {
344
+ if (!this.hostChannelSocket || this.hostChannelSocket.readyState !== WebSocket.OPEN) {
317
345
  return;
318
346
  }
319
- activeSession.socket.send(JSON.stringify({
347
+ this.hostChannelSocket.send(JSON.stringify({
348
+ type: "session.frame",
349
+ sessionId,
350
+ payloadBase64Url: Buffer.from(JSON.stringify(envelope), "utf8").toString("base64url")
351
+ }));
352
+ }
353
+ sendSessionClose(sessionId, code, reason) {
354
+ if (!this.hostChannelSocket || this.hostChannelSocket.readyState !== WebSocket.OPEN) {
355
+ return;
356
+ }
357
+ this.hostChannelSocket.send(JSON.stringify({
358
+ type: "session.close",
359
+ sessionId,
360
+ code,
361
+ reason
362
+ }));
363
+ }
364
+ async emitRelayError(activeSession, errorCode, detail) {
365
+ await this.sendControlEnvelope(activeSession.relaySessionId, {
320
366
  type: "error",
321
367
  errorCode,
322
368
  detail
323
- }));
369
+ });
324
370
  }
325
371
  teardownRelaySession(sessionId) {
326
372
  const activeSession = this.activeSessions.get(sessionId);
@@ -331,6 +377,11 @@ export class RelayTunnelRuntimeEdgeAdapter {
331
377
  activeSession.gateway?.close();
332
378
  this.activeSessions.delete(sessionId);
333
379
  }
380
+ closeAllSessions() {
381
+ for (const sessionId of this.activeSessions.keys()) {
382
+ this.teardownRelaySession(sessionId);
383
+ }
384
+ }
334
385
  }
335
386
  function buildStatus(phase, config, hostFingerprint, remainingBytes) {
336
387
  return {
@@ -361,10 +412,12 @@ function buildHttpUrl(baseUrl, pathname) {
361
412
  url.protocol = url.protocol === "wss:" || url.protocol === "https:" ? "https:" : "http:";
362
413
  return url.toString();
363
414
  }
364
- function buildRelayWebSocketUrl(relayBaseUrl, sessionId) {
415
+ function buildRelayHostWebSocketUrl(relayBaseUrl, bindingId, challengeId, proof) {
365
416
  const url = resolveRelayBaseUrl(relayBaseUrl, "ws");
366
- url.searchParams.set("sessionId", sessionId);
367
- url.searchParams.set("role", "upstream");
417
+ url.searchParams.set("role", "host-upstream");
418
+ url.searchParams.set("bindingId", bindingId);
419
+ url.searchParams.set("challengeId", challengeId);
420
+ url.searchParams.set("proof", proof);
368
421
  url.protocol = url.protocol === "https:" || url.protocol === "wss:" ? "wss:" : "ws:";
369
422
  return url.toString();
370
423
  }
@@ -379,6 +432,68 @@ function ensureTrailingSlash(value) {
379
432
  function resolveRelayBaseUrl(baseUrl, pathname) {
380
433
  return new URL(pathname.replace(/^\/+/, ""), ensureTrailingSlash(baseUrl));
381
434
  }
435
+ async function waitForSocketOpen(socket, signal) {
436
+ if (socket.readyState === WebSocket.OPEN) {
437
+ return;
438
+ }
439
+ await new Promise((resolve, reject) => {
440
+ const handleOpen = () => {
441
+ cleanup();
442
+ resolve();
443
+ };
444
+ const handleClose = (code, reason) => {
445
+ cleanup();
446
+ reject(new Error(`Host 上游信道建立失败(code=${code}${reason.length > 0 ? `, reason=${reason.toString("utf8")}` : ""})`));
447
+ };
448
+ const handleError = (error) => {
449
+ cleanup();
450
+ reject(error);
451
+ };
452
+ const handleAbort = () => {
453
+ cleanup();
454
+ reject(new Error("操作已取消"));
455
+ };
456
+ const cleanup = () => {
457
+ socket.off("open", handleOpen);
458
+ socket.off("close", handleClose);
459
+ socket.off("error", handleError);
460
+ signal.removeEventListener("abort", handleAbort);
461
+ };
462
+ socket.on("open", handleOpen);
463
+ socket.on("close", handleClose);
464
+ socket.on("error", handleError);
465
+ signal.addEventListener("abort", handleAbort, {
466
+ once: true
467
+ });
468
+ });
469
+ }
470
+ function createSocketCloseSignal(socket) {
471
+ return {
472
+ promise: new Promise((resolve) => {
473
+ let settled = false;
474
+ const finish = (value) => {
475
+ if (settled) {
476
+ return;
477
+ }
478
+ settled = true;
479
+ resolve(value);
480
+ };
481
+ socket.once("close", (code, reason) => {
482
+ finish({
483
+ code,
484
+ reason: reason.length > 0 ? reason.toString("utf8") : ""
485
+ });
486
+ });
487
+ socket.once("error", (error) => {
488
+ finish({
489
+ code: 1006,
490
+ reason: error.message,
491
+ error
492
+ });
493
+ });
494
+ })
495
+ };
496
+ }
382
497
  async function fetchWithTimeout(fetchFn, input, init, timeoutMs) {
383
498
  const controller = new AbortController();
384
499
  const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
@@ -400,18 +515,18 @@ async function fetchWithTimeout(fetchFn, input, init, timeoutMs) {
400
515
  async function buildHttpError(response, prefix) {
401
516
  const raw = await response.text();
402
517
  if (!raw.trim()) {
403
- return new Error(`${prefix}(HTTP ${response.status})`);
518
+ return new RelayTunnelRuntimeHttpError(response.status, null, `HTTP ${response.status}`, prefix);
404
519
  }
405
520
  try {
406
521
  const parsed = JSON.parse(raw);
407
- if (parsed.detail) {
408
- return new Error(`${prefix}:${parsed.detail}`);
522
+ if (typeof parsed.detail === "string" && parsed.detail.trim()) {
523
+ return new RelayTunnelRuntimeHttpError(response.status, typeof parsed.errorCode === "string" ? parsed.errorCode : null, parsed.detail.trim(), prefix);
409
524
  }
410
525
  }
411
526
  catch {
412
- // 这里退回可读文本错误。
527
+ // 回退到可读文本错误。
413
528
  }
414
- return new Error(`${prefix}:${raw.trim()}`);
529
+ return new RelayTunnelRuntimeHttpError(response.status, null, raw.trim(), prefix);
415
530
  }
416
531
  async function waitForDelay(delayMs, signal) {
417
532
  if (signal.aborted) {
@@ -433,7 +548,7 @@ async function waitForDelay(delayMs, signal) {
433
548
  }
434
549
  export const __internal__ = {
435
550
  buildHttpUrl,
436
- buildRelayWebSocketUrl,
551
+ buildRelayHostWebSocketUrl,
437
552
  buildControlHttpUrl
438
553
  };
439
554
  function normalizeRequiredText(value) {