@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.
- package/dist/public/assets/AdaptiveButlerPage-CUyNL98E.js +3 -0
- package/dist/public/assets/App-BFP7LCSC.js +30 -0
- package/dist/public/assets/{BootstrapPage-Vu5oEJ8z.js → BootstrapPage-G74dX2Us.js} +1 -1
- package/dist/public/assets/ConversationPage-Bz0_tvvM.js +2 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-BgeEqbc5.js → DesktopDetachPreviewPage-IV7oEdOX.js} +1 -1
- package/dist/public/assets/DesktopWindowPage-BBmHyRg5.js +2 -0
- package/dist/public/assets/FileContextPanel--FVTxDrq.js +1 -0
- package/dist/public/assets/GitSidebar-DAiSi9oc.js +6 -0
- package/dist/public/assets/{MobileCreateSessionSheet-DLq5qPkx.js → MobileCreateSessionSheet-DqVwz_Hp.js} +1 -1
- package/dist/public/assets/MobileSheet-D1lMrcvD.js +1 -0
- package/dist/public/assets/{MobileTopHeaderFrame-DArgZI7L.js → MobileTopHeaderFrame-COTc7cRr.js} +1 -1
- package/dist/public/assets/{MobileWorkspaceSwitcherHeader-0ywJKfBQ.js → MobileWorkspaceSwitcherHeader-DJPV9ym2.js} +1 -1
- package/dist/public/assets/RelayConnectEntryPage-dSwU8VzK.js +1 -0
- package/dist/public/assets/{ServerSettingsModal-izoYMx9U.js → ServerSettingsModal-B34ms3ze.js} +1 -1
- package/dist/public/assets/{SessionIndexPage-C5aG8FIv.js → SessionIndexPage-D3tG1gmM.js} +1 -1
- package/dist/public/assets/SettingsPage-B3-6-5GL.js +1 -0
- package/dist/public/assets/TerminalManagerPanel-DhuTEdzV.js +1 -0
- package/dist/public/assets/{TerminalPage-CtKXIU0h.js → TerminalPage-DpsvQQVR.js} +19 -19
- package/dist/public/assets/{TerminalRuntimeFallbackModal-CRhOQOsT.js → TerminalRuntimeFallbackModal-CNzOt5v5.js} +1 -1
- package/dist/public/assets/{ToolFilesPage-DcYPsS-e.js → ToolFilesPage-BX9QDi9Y.js} +1 -1
- package/dist/public/assets/{ToolGitPage-CsPl89ty.js → ToolGitPage-4VtFox3p.js} +1 -1
- package/dist/public/assets/{ToolProcessesPage-D0dvR8xK.js → ToolProcessesPage-DZJC6Qnt.js} +1 -1
- package/dist/public/assets/{ToolsHomePage-4fP-KRiv.js → ToolsHomePage-D7JbrAWv.js} +1 -1
- package/dist/public/assets/{WorkbenchLandingPage-kvlfyxRo.js → WorkbenchLandingPage-C0yqnzqh.js} +1 -1
- package/dist/public/assets/WorkbenchLayout-Brlj8K3i.js +3 -0
- package/dist/public/assets/{WorkbenchModal-Ctob14VR.js → WorkbenchModal-CbDxaCOR.js} +1 -1
- package/dist/public/assets/WorkbenchShellRoute-BMcnFadA.css +1 -0
- package/dist/public/assets/WorkbenchShellRoute-puGpdDFY.js +1 -0
- package/dist/public/assets/{WorkspaceDebugDetailPage-Com5kEXJ.js → WorkspaceDebugDetailPage-fTGweC9N.js} +1 -1
- package/dist/public/assets/WorkspaceDetailPage-BtaIzSDB.js +1 -0
- package/dist/public/assets/WorkspaceHomePage-CUmmYDrM.js +1 -0
- package/dist/public/assets/client-runtime-manager-RHFa_iWo.js +1 -0
- package/dist/public/assets/{default-session-permission-mode-CcGwR4Kk.js → default-session-permission-mode-Cu5SreTG.js} +1 -1
- package/dist/public/assets/file-tree-icon-BMKuc5pw.js +31 -0
- package/dist/public/assets/index-Cq3ue0za.css +1 -0
- package/dist/public/assets/index-DEbFT-Aq.js +42 -0
- package/dist/public/assets/{preferences-service-KIYeE2gk.js → preferences-service-gv_9vGKz.js} +1 -1
- package/dist/public/assets/session-runtime-machine-Bfnxkk9B.js +17 -0
- package/dist/public/assets/{terminal-runtime-meta-AWXJpN4r.js → terminal-runtime-meta-B9xJGY__.js} +1 -1
- package/dist/public/assets/{useRegisteredDebugTemplates-DBDRdptr.js → useRegisteredDebugTemplates-CDfl54Wt.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.d.ts +1 -0
- package/dist/server/config/env.js +36 -0
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/modules/client/client-controller.js +1 -1
- package/dist/server/modules/client/client-controller.js.map +1 -1
- package/dist/server/modules/client/client-service.d.ts +16 -2
- package/dist/server/modules/client/client-service.js +21 -3
- package/dist/server/modules/client/client-service.js.map +1 -1
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.d.ts +16 -1
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js.map +1 -1
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.d.ts +2 -1
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js +18 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js.map +1 -1
- package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.d.ts +13 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.js +2 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-client-context.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.d.ts +6 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js +110 -10
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js.map +1 -1
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.d.ts +16 -4
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js +216 -101
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js.map +1 -1
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.d.ts +6 -2
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js +457 -40
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js.map +1 -1
- package/dist/server/modules/sessions/session-activity-inspector.js +6 -8
- package/dist/server/modules/sessions/session-activity-inspector.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-history-service.js +62 -7
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/workbench/snapshot-revision.d.ts +4 -0
- package/dist/server/modules/workbench/snapshot-revision.js +13 -0
- package/dist/server/modules/workbench/snapshot-revision.js.map +1 -0
- package/dist/server/modules/workbench/workbench-service.d.ts +33 -2
- package/dist/server/modules/workbench/workbench-service.js +39 -4
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +6 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +10 -8
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
- package/dist/server/server/create-server.js +11 -6
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/types/domain.d.ts +9 -0
- package/dist/server/ws/workbench-ws-hub.js +295 -43
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/dist/server/ws/ws-server.js +141 -8
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +33 -6
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +78 -36
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/AdaptiveButlerPage-R-XZw7pd.js +0 -3
- package/dist/public/assets/App-DkvE5EyM.js +0 -30
- package/dist/public/assets/ConversationPage-Cjpg6g0J.js +0 -2
- package/dist/public/assets/DesktopWindowPage-1WelvxdH.js +0 -2
- package/dist/public/assets/FileContextPanel-D_ghXJuW.js +0 -1
- package/dist/public/assets/GitSidebar-D9f9Jxwr.js +0 -6
- package/dist/public/assets/MobileSheet-DLg-gX1t.js +0 -1
- package/dist/public/assets/SettingsPage-HJIC-P-4.js +0 -1
- package/dist/public/assets/TerminalManagerPanel-DpyUTo9k.js +0 -1
- package/dist/public/assets/WorkbenchLayout-ByFw4eeu.js +0 -3
- package/dist/public/assets/WorkbenchShellRoute-BUITtdAg.css +0 -1
- package/dist/public/assets/WorkbenchShellRoute-Kw7JEZI3.js +0 -1
- package/dist/public/assets/WorkspaceDetailPage-D0Lrx4Uz.js +0 -1
- package/dist/public/assets/WorkspaceHomePage-wR8d3aP9.js +0 -1
- package/dist/public/assets/file-tree-icon-UFVoVzhM.js +0 -31
- package/dist/public/assets/index-Byp9hJ0c.js +0 -42
- package/dist/public/assets/index-_52jxu4a.css +0 -1
- 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
|
|
34
|
+
private openHostUpstreamChannel;
|
|
27
35
|
private buildHeartbeatRequest;
|
|
28
|
-
private
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
},
|
|
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
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
210
|
-
|
|
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
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
this.activeSessions.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
-
|
|
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", "
|
|
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
|
|
298
|
+
if (!activeSession.cryptoSession || activeSession.closed) {
|
|
274
299
|
return;
|
|
275
300
|
}
|
|
276
301
|
const frame = encryptRelayTunnelFrame(activeSession.cryptoSession, serializeRelayTunnelPacket(packet));
|
|
277
|
-
|
|
302
|
+
await this.sendControlEnvelope(activeSession.relaySessionId, {
|
|
278
303
|
type: "encrypted_frame",
|
|
279
304
|
frame
|
|
280
|
-
})
|
|
305
|
+
});
|
|
281
306
|
}
|
|
282
307
|
});
|
|
283
|
-
|
|
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
|
|
316
|
-
if (
|
|
343
|
+
async sendControlEnvelope(sessionId, envelope) {
|
|
344
|
+
if (!this.hostChannelSocket || this.hostChannelSocket.readyState !== WebSocket.OPEN) {
|
|
317
345
|
return;
|
|
318
346
|
}
|
|
319
|
-
|
|
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
|
|
415
|
+
function buildRelayHostWebSocketUrl(relayBaseUrl, bindingId, challengeId, proof) {
|
|
365
416
|
const url = resolveRelayBaseUrl(relayBaseUrl, "ws");
|
|
366
|
-
url.searchParams.set("
|
|
367
|
-
url.searchParams.set("
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
551
|
+
buildRelayHostWebSocketUrl,
|
|
437
552
|
buildControlHttpUrl
|
|
438
553
|
};
|
|
439
554
|
function normalizeRequiredText(value) {
|