@blue-soda/dsh-remote 0.4.28

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 (225) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +81 -0
  3. package/bin/ds-harness-remote.js +11 -0
  4. package/cordis.patch.yml +32 -0
  5. package/dist/acp.d.ts +75 -0
  6. package/dist/acp.d.ts.map +1 -0
  7. package/dist/acp.js +61 -0
  8. package/dist/acp.js.map +1 -0
  9. package/dist/api-proxy-switch.d.ts +33 -0
  10. package/dist/api-proxy-switch.d.ts.map +1 -0
  11. package/dist/api-proxy-switch.js +109 -0
  12. package/dist/api-proxy-switch.js.map +1 -0
  13. package/dist/bin/doctor.d.ts +3 -0
  14. package/dist/bin/doctor.d.ts.map +1 -0
  15. package/dist/bin/doctor.js +13 -0
  16. package/dist/bin/doctor.js.map +1 -0
  17. package/dist/cli.d.ts +32 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +289 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/client-runtime.d.ts +239 -0
  22. package/dist/client-runtime.d.ts.map +1 -0
  23. package/dist/client-runtime.js +1391 -0
  24. package/dist/client-runtime.js.map +1 -0
  25. package/dist/client-secure-transport.d.ts +23 -0
  26. package/dist/client-secure-transport.d.ts.map +1 -0
  27. package/dist/client-secure-transport.js +143 -0
  28. package/dist/client-secure-transport.js.map +1 -0
  29. package/dist/client.d.ts +13 -0
  30. package/dist/client.d.ts.map +1 -0
  31. package/dist/client.github.js +4231 -0
  32. package/dist/client.js +4231 -0
  33. package/dist/codex/app-server.d.ts +71 -0
  34. package/dist/codex/app-server.d.ts.map +1 -0
  35. package/dist/codex/app-server.js +268 -0
  36. package/dist/codex/app-server.js.map +1 -0
  37. package/dist/codex/codex-image-codec.d.ts +7 -0
  38. package/dist/codex/codex-image-codec.d.ts.map +1 -0
  39. package/dist/codex/codex-image-codec.js +288 -0
  40. package/dist/codex/codex-image-codec.js.map +1 -0
  41. package/dist/codex/domain.d.ts +93 -0
  42. package/dist/codex/domain.d.ts.map +1 -0
  43. package/dist/codex/domain.js +1282 -0
  44. package/dist/codex/domain.js.map +1 -0
  45. package/dist/codex/method-policy.d.ts +338 -0
  46. package/dist/codex/method-policy.d.ts.map +1 -0
  47. package/dist/codex/method-policy.js +141 -0
  48. package/dist/codex/method-policy.js.map +1 -0
  49. package/dist/codex/peer-bridge.d.ts +57 -0
  50. package/dist/codex/peer-bridge.d.ts.map +1 -0
  51. package/dist/codex/peer-bridge.js +299 -0
  52. package/dist/codex/peer-bridge.js.map +1 -0
  53. package/dist/codex/permissions.d.ts +4 -0
  54. package/dist/codex/permissions.d.ts.map +1 -0
  55. package/dist/codex/permissions.js +21 -0
  56. package/dist/codex/permissions.js.map +1 -0
  57. package/dist/codex/session-id.d.ts +10 -0
  58. package/dist/codex/session-id.d.ts.map +1 -0
  59. package/dist/codex/session-id.js +15 -0
  60. package/dist/codex/session-id.js.map +1 -0
  61. package/dist/codex/virtual-harness.d.ts +209 -0
  62. package/dist/codex/virtual-harness.d.ts.map +1 -0
  63. package/dist/codex/virtual-harness.js +2616 -0
  64. package/dist/codex/virtual-harness.js.map +1 -0
  65. package/dist/codex-workspace-bridge.d.ts +108 -0
  66. package/dist/codex-workspace-bridge.d.ts.map +1 -0
  67. package/dist/codex-workspace-bridge.js +502 -0
  68. package/dist/codex-workspace-bridge.js.map +1 -0
  69. package/dist/config.d.ts +99 -0
  70. package/dist/config.d.ts.map +1 -0
  71. package/dist/config.js +127 -0
  72. package/dist/config.js.map +1 -0
  73. package/dist/connection-controller.d.ts +44 -0
  74. package/dist/connection-controller.d.ts.map +1 -0
  75. package/dist/connection-controller.js +185 -0
  76. package/dist/connection-controller.js.map +1 -0
  77. package/dist/control-route.d.ts +34 -0
  78. package/dist/control-route.d.ts.map +1 -0
  79. package/dist/control-route.js +136 -0
  80. package/dist/control-route.js.map +1 -0
  81. package/dist/control-runtime.d.ts +138 -0
  82. package/dist/control-runtime.d.ts.map +1 -0
  83. package/dist/control-runtime.js +543 -0
  84. package/dist/control-runtime.js.map +1 -0
  85. package/dist/control-stream.d.ts +67 -0
  86. package/dist/control-stream.d.ts.map +1 -0
  87. package/dist/control-stream.js +179 -0
  88. package/dist/control-stream.js.map +1 -0
  89. package/dist/defaults.d.ts +9 -0
  90. package/dist/defaults.d.ts.map +1 -0
  91. package/dist/defaults.js +9 -0
  92. package/dist/defaults.js.map +1 -0
  93. package/dist/file-viewer-bridge.d.ts +30 -0
  94. package/dist/file-viewer-bridge.d.ts.map +1 -0
  95. package/dist/file-viewer-bridge.js +128 -0
  96. package/dist/file-viewer-bridge.js.map +1 -0
  97. package/dist/file-viewer-contract.d.ts +5 -0
  98. package/dist/file-viewer-contract.d.ts.map +1 -0
  99. package/dist/file-viewer-contract.js +4 -0
  100. package/dist/file-viewer-contract.js.map +1 -0
  101. package/dist/harness-api-bridge.d.ts +79 -0
  102. package/dist/harness-api-bridge.d.ts.map +1 -0
  103. package/dist/harness-api-bridge.js +852 -0
  104. package/dist/harness-api-bridge.js.map +1 -0
  105. package/dist/harness-api-history.d.ts +3 -0
  106. package/dist/harness-api-history.d.ts.map +1 -0
  107. package/dist/harness-api-history.js +59 -0
  108. package/dist/harness-api-history.js.map +1 -0
  109. package/dist/harness-remote-bridge.d.ts +52 -0
  110. package/dist/harness-remote-bridge.d.ts.map +1 -0
  111. package/dist/harness-remote-bridge.js +529 -0
  112. package/dist/harness-remote-bridge.js.map +1 -0
  113. package/dist/harness-version.d.ts +23 -0
  114. package/dist/harness-version.d.ts.map +1 -0
  115. package/dist/harness-version.js +95 -0
  116. package/dist/harness-version.js.map +1 -0
  117. package/dist/identity-store.d.ts +45 -0
  118. package/dist/identity-store.d.ts.map +1 -0
  119. package/dist/identity-store.js +183 -0
  120. package/dist/identity-store.js.map +1 -0
  121. package/dist/ids.d.ts +2 -0
  122. package/dist/ids.d.ts.map +1 -0
  123. package/dist/ids.js +17 -0
  124. package/dist/ids.js.map +1 -0
  125. package/dist/index.d.ts +78 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +28870 -0
  128. package/dist/index.js.map +7 -0
  129. package/dist/logging.d.ts +18 -0
  130. package/dist/logging.d.ts.map +1 -0
  131. package/dist/logging.js +30 -0
  132. package/dist/logging.js.map +1 -0
  133. package/dist/loopback-host.d.ts +20 -0
  134. package/dist/loopback-host.d.ts.map +1 -0
  135. package/dist/loopback-host.js +245 -0
  136. package/dist/loopback-host.js.map +1 -0
  137. package/dist/loopback-preview.d.ts +19 -0
  138. package/dist/loopback-preview.d.ts.map +1 -0
  139. package/dist/loopback-preview.js +232 -0
  140. package/dist/loopback-preview.js.map +1 -0
  141. package/dist/native-rtc-helper.d.ts +14 -0
  142. package/dist/native-rtc-helper.d.ts.map +1 -0
  143. package/dist/native-rtc-helper.js +575 -0
  144. package/dist/native-rtc-helper.js.map +1 -0
  145. package/dist/remote-api-proxy.d.ts +17 -0
  146. package/dist/remote-api-proxy.d.ts.map +1 -0
  147. package/dist/remote-api-proxy.js +400 -0
  148. package/dist/remote-api-proxy.js.map +1 -0
  149. package/dist/remote-directory-browser.d.ts +16 -0
  150. package/dist/remote-directory-browser.d.ts.map +1 -0
  151. package/dist/remote-directory-browser.js +48 -0
  152. package/dist/remote-directory-browser.js.map +1 -0
  153. package/dist/remote-file-content-provider.d.ts +48 -0
  154. package/dist/remote-file-content-provider.d.ts.map +1 -0
  155. package/dist/remote-file-content-provider.js +93 -0
  156. package/dist/remote-file-content-provider.js.map +1 -0
  157. package/dist/remote-typert-gateway.d.ts +20 -0
  158. package/dist/remote-typert-gateway.d.ts.map +1 -0
  159. package/dist/remote-typert-gateway.js +332 -0
  160. package/dist/remote-typert-gateway.js.map +1 -0
  161. package/dist/rpc-router.d.ts +31 -0
  162. package/dist/rpc-router.d.ts.map +1 -0
  163. package/dist/rpc-router.js +201 -0
  164. package/dist/rpc-router.js.map +1 -0
  165. package/dist/safe-error.d.ts +8 -0
  166. package/dist/safe-error.d.ts.map +1 -0
  167. package/dist/safe-error.js +20 -0
  168. package/dist/safe-error.js.map +1 -0
  169. package/dist/server-api.d.ts +109 -0
  170. package/dist/server-api.d.ts.map +1 -0
  171. package/dist/server-api.js +520 -0
  172. package/dist/server-api.js.map +1 -0
  173. package/dist/server-connection.d.ts +79 -0
  174. package/dist/server-connection.d.ts.map +1 -0
  175. package/dist/server-connection.js +1023 -0
  176. package/dist/server-connection.js.map +1 -0
  177. package/dist/server-credentials.d.ts +55 -0
  178. package/dist/server-credentials.d.ts.map +1 -0
  179. package/dist/server-credentials.js +105 -0
  180. package/dist/server-credentials.js.map +1 -0
  181. package/dist/service.d.ts +141 -0
  182. package/dist/service.d.ts.map +1 -0
  183. package/dist/service.js +432 -0
  184. package/dist/service.js.map +1 -0
  185. package/dist/session-format-compat.d.ts +3 -0
  186. package/dist/session-format-compat.d.ts.map +1 -0
  187. package/dist/session-format-compat.js +183 -0
  188. package/dist/session-format-compat.js.map +1 -0
  189. package/dist/status-stream.d.ts +48 -0
  190. package/dist/status-stream.d.ts.map +1 -0
  191. package/dist/status-stream.js +133 -0
  192. package/dist/status-stream.js.map +1 -0
  193. package/dist/terminal-policy.d.ts +21 -0
  194. package/dist/terminal-policy.d.ts.map +1 -0
  195. package/dist/terminal-policy.js +68 -0
  196. package/dist/terminal-policy.js.map +1 -0
  197. package/dist/tui-command.d.ts +13 -0
  198. package/dist/tui-command.d.ts.map +1 -0
  199. package/dist/tui-command.js +390 -0
  200. package/dist/tui-command.js.map +1 -0
  201. package/dist/typert-gateway-contract.d.ts +59 -0
  202. package/dist/typert-gateway-contract.d.ts.map +1 -0
  203. package/dist/typert-gateway-contract.js +2 -0
  204. package/dist/typert-gateway-contract.js.map +1 -0
  205. package/dist/typert-gateway-switch.d.ts +85 -0
  206. package/dist/typert-gateway-switch.d.ts.map +1 -0
  207. package/dist/typert-gateway-switch.js +315 -0
  208. package/dist/typert-gateway-switch.js.map +1 -0
  209. package/dist/types.d.ts +20 -0
  210. package/dist/types.d.ts.map +1 -0
  211. package/dist/types.js +2 -0
  212. package/dist/types.js.map +1 -0
  213. package/dist/version.d.ts +12 -0
  214. package/dist/version.d.ts.map +1 -0
  215. package/dist/version.js +12 -0
  216. package/dist/version.js.map +1 -0
  217. package/dist/werift-rtc.d.ts +121 -0
  218. package/dist/werift-rtc.d.ts.map +1 -0
  219. package/dist/werift-rtc.js +490 -0
  220. package/dist/werift-rtc.js.map +1 -0
  221. package/dsh-plugin.json +41 -0
  222. package/locale/en.json +6 -0
  223. package/locale/zh.json +6 -0
  224. package/package.json +165 -0
  225. package/public.d.ts +26 -0
@@ -0,0 +1,14 @@
1
+ import type { RtcPeerConnectionFactory } from '@dsh-remote/webrtc';
2
+ export declare function loadExternalNativeRtcFactory(): Promise<RtcPeerConnectionFactory | undefined>;
3
+ export declare function buildExternalNativeRtcFactory(nodeBinary: string, requireFrom?: string): RtcPeerConnectionFactory;
4
+ /**
5
+ * Resolve dependencies from the plugin's physical package location.
6
+ *
7
+ * DSH profiles load plugins through a top-level symlink (or a Windows
8
+ * junction), while pnpm links optional dependencies such as `@roamhq/wrtc`
9
+ * beside the physical package under `.pnpm`. Using the surfaced plugin path
10
+ * makes Node skip that virtual dependency directory and incorrectly reports
11
+ * that the installed native backend is missing.
12
+ */
13
+ export declare function resolveNativeRtcRequireFrom(moduleUrl?: string): string;
14
+ //# sourceMappingURL=native-rtc-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-rtc-helper.d.ts","sourceRoot":"","sources":["../src/native-rtc-helper.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAOV,wBAAwB,EAIzB,MAAM,oBAAoB,CAAA;AA8C3B,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAQlG;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,MAAM,EAClB,WAAW,SAAgC,GAC1C,wBAAwB,CAM1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,SAAkB,GAAG,MAAM,CAO/E"}
@@ -0,0 +1,575 @@
1
+ import { spawn, spawnSync } from 'node:child_process';
2
+ import { existsSync, readdirSync, realpathSync, statSync } from 'node:fs';
3
+ import { delimiter, dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ let cachedExternalFactory;
6
+ let cachedExternalFactoryResolved = false;
7
+ let cachedNodeBinary;
8
+ let cachedNodeBinaryResolved = false;
9
+ export async function loadExternalNativeRtcFactory() {
10
+ if (cachedExternalFactory !== undefined)
11
+ return cachedExternalFactory;
12
+ if (cachedExternalFactoryResolved)
13
+ return undefined;
14
+ cachedExternalFactoryResolved = true;
15
+ const nodeBinary = resolveExternalNodeBinaryForRtc();
16
+ if (nodeBinary === undefined)
17
+ return undefined;
18
+ cachedExternalFactory = buildExternalNativeRtcFactory(nodeBinary);
19
+ return cachedExternalFactory;
20
+ }
21
+ export function buildExternalNativeRtcFactory(nodeBinary, requireFrom = resolveNativeRtcRequireFrom()) {
22
+ return {
23
+ create(configuration) {
24
+ return new ExternalNativePeerConnection(nodeBinary, requireFrom, configuration);
25
+ },
26
+ };
27
+ }
28
+ /**
29
+ * Resolve dependencies from the plugin's physical package location.
30
+ *
31
+ * DSH profiles load plugins through a top-level symlink (or a Windows
32
+ * junction), while pnpm links optional dependencies such as `@roamhq/wrtc`
33
+ * beside the physical package under `.pnpm`. Using the surfaced plugin path
34
+ * makes Node skip that virtual dependency directory and incorrectly reports
35
+ * that the installed native backend is missing.
36
+ */
37
+ export function resolveNativeRtcRequireFrom(moduleUrl = import.meta.url) {
38
+ const modulePath = fileURLToPath(moduleUrl);
39
+ try {
40
+ return realpathSync(modulePath);
41
+ }
42
+ catch {
43
+ return modulePath;
44
+ }
45
+ }
46
+ function resolveExternalNodeBinaryForRtc() {
47
+ if (cachedNodeBinaryResolved)
48
+ return cachedNodeBinary;
49
+ cachedNodeBinaryResolved = true;
50
+ const requireFrom = resolveNativeRtcRequireFrom();
51
+ for (const candidate of nodeBinaryCandidates()) {
52
+ if (isUsableExternalNode(candidate, requireFrom)) {
53
+ cachedNodeBinary = candidate;
54
+ return candidate;
55
+ }
56
+ }
57
+ return undefined;
58
+ }
59
+ function nodeBinaryCandidates() {
60
+ const candidates = [];
61
+ const add = (value) => {
62
+ if (value === undefined || value.trim() === '')
63
+ return;
64
+ if (!candidates.includes(value))
65
+ candidates.push(value);
66
+ };
67
+ add(process.env.DSH_REMOTE_NODE);
68
+ add(process.env.NODE);
69
+ // The helper refuses to run under Electron by construction, so the running
70
+ // executable is only a candidate when it is a plain Node build. Relying on the
71
+ // probe alone was not enough: an Electron that slips past it is spawned with
72
+ // node-only flags, and Electron then reads the helper *source* as the app path
73
+ // and fails with an unrelated "Unable to find Electron app" dialog.
74
+ if (process.versions.electron === undefined)
75
+ add(process.execPath);
76
+ for (const part of (process.env.PATH ?? '').split(delimiter))
77
+ add(join(part, process.platform === 'win32' ? 'node.exe' : 'node'));
78
+ add('/opt/homebrew/bin/node');
79
+ add('/usr/local/bin/node');
80
+ add('/usr/bin/node');
81
+ add(join(process.env.HOME ?? '', '.volta', 'bin', process.platform === 'win32' ? 'node.exe' : 'node'));
82
+ add(join(process.env.HOME ?? '', '.asdf', 'shims', process.platform === 'win32' ? 'node.exe' : 'node'));
83
+ add(join(process.env.HOME ?? '', '.local', 'bin', process.platform === 'win32' ? 'node.exe' : 'node'));
84
+ for (const nvmNode of nvmNodeCandidates())
85
+ add(nvmNode);
86
+ return candidates;
87
+ }
88
+ function nvmNodeCandidates() {
89
+ const root = join(process.env.HOME ?? '', '.nvm', 'versions', 'node');
90
+ if (root === '' || !existsSync(root))
91
+ return [];
92
+ try {
93
+ return readdirSync(root)
94
+ .map(version => join(root, version, 'bin', process.platform === 'win32' ? 'node.exe' : 'node'))
95
+ .sort((left, right) => right.localeCompare(left, 'en', { numeric: true }));
96
+ }
97
+ catch {
98
+ return [];
99
+ }
100
+ }
101
+ function isUsableExternalNode(candidate, requireFrom) {
102
+ if (!isExecutableFile(candidate))
103
+ return false;
104
+ const env = { ...process.env, DSH_REMOTE_RTC_HELPER_REQUIRE_FROM: requireFrom };
105
+ delete env.ELECTRON_RUN_AS_NODE;
106
+ const probe = spawnSync(candidate, [
107
+ '--input-type=module',
108
+ '--eval',
109
+ [
110
+ "import { createRequire } from 'node:module';",
111
+ "const require = createRequire(process.env.DSH_REMOTE_RTC_HELPER_REQUIRE_FROM);",
112
+ "if (process.versions.electron) throw new Error('electron-node');",
113
+ "const wrtc = require('@roamhq/wrtc');",
114
+ "const RTCPeerConnection = wrtc.RTCPeerConnection ?? wrtc.default?.RTCPeerConnection;",
115
+ "if (typeof RTCPeerConnection !== 'function') throw new Error('missing-rtc');",
116
+ "console.log(`node:${process.versions.node}`);",
117
+ ].join(''),
118
+ ], {
119
+ cwd: dirname(requireFrom),
120
+ env,
121
+ encoding: 'utf8',
122
+ timeout: 3_000,
123
+ });
124
+ return probe.status === 0 && probe.stdout.startsWith('node:');
125
+ }
126
+ function isExecutableFile(candidate) {
127
+ try {
128
+ const stat = statSync(candidate);
129
+ if (!stat.isFile())
130
+ return false;
131
+ if (process.platform === 'win32')
132
+ return true;
133
+ return (stat.mode & 0o111) !== 0;
134
+ }
135
+ catch {
136
+ return false;
137
+ }
138
+ }
139
+ class ExternalNativePeerConnection {
140
+ nodeBinary;
141
+ requireFrom;
142
+ connectionState = 'new';
143
+ iceConnectionState = 'new';
144
+ iceGatheringState = 'new';
145
+ signalingState = 'stable';
146
+ onconnectionstatechange = null;
147
+ oniceconnectionstatechange = null;
148
+ onicegatheringstatechange = null;
149
+ onicecandidate = null;
150
+ ondatachannel = null;
151
+ child;
152
+ pending = new Map();
153
+ channels = new Map();
154
+ nextRequestId = 1;
155
+ nextChannelId = 1;
156
+ stdout = '';
157
+ closed = false;
158
+ ready;
159
+ constructor(nodeBinary, requireFrom, configuration) {
160
+ this.nodeBinary = nodeBinary;
161
+ this.requireFrom = requireFrom;
162
+ this.child = spawn(this.nodeBinary, ['--input-type=module', '--eval', HELPER_SOURCE], {
163
+ cwd: dirname(this.requireFrom),
164
+ env: { ...process.env, DSH_REMOTE_RTC_HELPER_REQUIRE_FROM: this.requireFrom },
165
+ stdio: ['pipe', 'pipe', 'pipe'],
166
+ });
167
+ this.child.stdout.setEncoding('utf8');
168
+ this.child.stdout.on('data', chunk => this.handleStdout(String(chunk)));
169
+ this.child.stderr.on('data', () => undefined);
170
+ this.child.on('exit', () => this.handleExit());
171
+ this.child.on('error', error => this.handleExit(error));
172
+ this.child.stdin.on('error', error => this.handleExit(error));
173
+ this.ready = this.request('init', { iceServers: configuration.iceServers ?? [] }).then(() => undefined);
174
+ }
175
+ createDataChannel(label, options) {
176
+ const channelId = this.nextChannelId++;
177
+ const channel = new ExternalNativeDataChannel(this, channelId, label, options?.ordered ?? true);
178
+ this.channels.set(channelId, channel);
179
+ this.notify('createDataChannel', { channelId, label, options: { ordered: options?.ordered ?? true } });
180
+ return channel;
181
+ }
182
+ async createOffer() {
183
+ await this.ready;
184
+ return this.request('createOffer', {});
185
+ }
186
+ async createAnswer() {
187
+ await this.ready;
188
+ return this.request('createAnswer', {});
189
+ }
190
+ async setLocalDescription(description) {
191
+ await this.ready;
192
+ await this.request('setLocalDescription', { description });
193
+ }
194
+ async setRemoteDescription(description) {
195
+ await this.ready;
196
+ await this.request('setRemoteDescription', { description });
197
+ }
198
+ async addIceCandidate(candidate) {
199
+ await this.ready;
200
+ await this.request('addIceCandidate', { candidate: candidate ?? null });
201
+ }
202
+ async getStats() {
203
+ await this.ready;
204
+ return this.request('getStats', {});
205
+ }
206
+ close() {
207
+ if (this.closed)
208
+ return;
209
+ this.closed = true;
210
+ this.notify('close', {});
211
+ const timer = setTimeout(() => {
212
+ if (this.child.exitCode === null && this.child.signalCode === null)
213
+ this.child.kill();
214
+ }, 1_000);
215
+ timer.unref?.();
216
+ }
217
+ sendChannelData(channelId, data) {
218
+ const payload = typeof data === 'string'
219
+ ? { channelId, text: data }
220
+ : { channelId, base64: Buffer.from(data).toString('base64') };
221
+ this.notify('channelSend', payload);
222
+ }
223
+ closeChannel(channelId) {
224
+ this.notify('channelClose', { channelId });
225
+ }
226
+ request(method, payload) {
227
+ if (this.closed)
228
+ return Promise.reject(new Error('native rtc helper is closed'));
229
+ const id = this.nextRequestId++;
230
+ const promise = new Promise((resolve, reject) => {
231
+ this.pending.set(id, { resolve, reject });
232
+ });
233
+ this.write({ id, method, payload });
234
+ return promise;
235
+ }
236
+ notify(method, payload) {
237
+ if (this.closed && method !== 'close')
238
+ return;
239
+ this.write({ method, payload });
240
+ }
241
+ write(message) {
242
+ try {
243
+ this.child.stdin.write(`${JSON.stringify(message)}\n`);
244
+ }
245
+ catch {
246
+ this.handleExit(new Error('native rtc helper stdin is closed'));
247
+ }
248
+ }
249
+ handleStdout(chunk) {
250
+ this.stdout += chunk;
251
+ for (;;) {
252
+ const newline = this.stdout.indexOf('\n');
253
+ if (newline < 0)
254
+ return;
255
+ const line = this.stdout.slice(0, newline);
256
+ this.stdout = this.stdout.slice(newline + 1);
257
+ if (line.trim() === '')
258
+ continue;
259
+ try {
260
+ this.handleMessage(JSON.parse(line));
261
+ }
262
+ catch {
263
+ this.handleExit(new Error('native rtc helper sent invalid JSON'));
264
+ }
265
+ }
266
+ }
267
+ handleMessage(message) {
268
+ if ('id' in message) {
269
+ const pending = this.pending.get(message.id);
270
+ if (pending === undefined)
271
+ return;
272
+ this.pending.delete(message.id);
273
+ if (message.ok)
274
+ pending.resolve(message.value);
275
+ else
276
+ pending.reject(new Error(message.error ?? 'native rtc helper command failed'));
277
+ return;
278
+ }
279
+ if (message.event === 'state') {
280
+ this.connectionState = message.connectionState;
281
+ this.iceConnectionState = message.iceConnectionState;
282
+ this.iceGatheringState = message.iceGatheringState;
283
+ this.signalingState = message.signalingState;
284
+ this.onconnectionstatechange?.();
285
+ this.oniceconnectionstatechange?.();
286
+ this.onicegatheringstatechange?.();
287
+ return;
288
+ }
289
+ if (message.event === 'icecandidate') {
290
+ this.onicecandidate?.({ candidate: message.candidate });
291
+ return;
292
+ }
293
+ if (message.event === 'datachannel') {
294
+ const channel = this.channelFor(message.channelId, message.label, message.ordered);
295
+ this.ondatachannel?.({ channel });
296
+ channel.updateState(message.readyState, message.bufferedAmount);
297
+ return;
298
+ }
299
+ if (message.event === 'channel-state') {
300
+ this.channels.get(message.channelId)?.updateState(message.readyState, message.bufferedAmount);
301
+ return;
302
+ }
303
+ if (message.event === 'channel-message') {
304
+ const channel = this.channels.get(message.channelId);
305
+ if (channel === undefined)
306
+ return;
307
+ if (message.text !== undefined)
308
+ channel.emitMessage(message.text);
309
+ else if (message.base64 !== undefined)
310
+ channel.emitMessage(bufferToArrayBuffer(Buffer.from(message.base64, 'base64')));
311
+ return;
312
+ }
313
+ if (message.event === 'channel-error') {
314
+ this.channels.get(message.channelId)?.emitError();
315
+ }
316
+ }
317
+ channelFor(channelId, label, ordered) {
318
+ const existing = this.channels.get(channelId);
319
+ if (existing !== undefined)
320
+ return existing;
321
+ const channel = new ExternalNativeDataChannel(this, channelId, label, ordered);
322
+ this.channels.set(channelId, channel);
323
+ return channel;
324
+ }
325
+ handleExit(error) {
326
+ if (!this.closed)
327
+ this.closed = true;
328
+ const reason = error ?? new Error('native rtc helper exited');
329
+ for (const pending of this.pending.values())
330
+ pending.reject(reason);
331
+ this.pending.clear();
332
+ for (const channel of this.channels.values())
333
+ channel.updateState('closed', 0);
334
+ }
335
+ }
336
+ class ExternalNativeDataChannel {
337
+ owner;
338
+ channelId;
339
+ label;
340
+ ordered;
341
+ readyState = 'connecting';
342
+ bufferedAmount = 0;
343
+ binaryType = 'arraybuffer';
344
+ onopen = null;
345
+ onmessage = null;
346
+ onclose = null;
347
+ onerror = null;
348
+ onbufferedamountlow = null;
349
+ constructor(owner, channelId, label, ordered) {
350
+ this.owner = owner;
351
+ this.channelId = channelId;
352
+ this.label = label;
353
+ this.ordered = ordered;
354
+ }
355
+ send(data) {
356
+ this.owner.sendChannelData(this.channelId, data);
357
+ }
358
+ close() {
359
+ this.owner.closeChannel(this.channelId);
360
+ }
361
+ updateState(readyState, bufferedAmount) {
362
+ const previous = this.readyState;
363
+ this.readyState = readyState;
364
+ this.bufferedAmount = bufferedAmount;
365
+ if (previous !== 'open' && readyState === 'open')
366
+ this.onopen?.();
367
+ if (previous !== 'closed' && readyState === 'closed')
368
+ this.onclose?.();
369
+ if (bufferedAmount === 0)
370
+ this.onbufferedamountlow?.();
371
+ }
372
+ emitMessage(data) {
373
+ this.onmessage?.({ data });
374
+ }
375
+ emitError() {
376
+ this.onerror?.();
377
+ }
378
+ }
379
+ function bufferToArrayBuffer(buffer) {
380
+ return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
381
+ }
382
+ const HELPER_SOURCE = String.raw `
383
+ import { createRequire } from 'node:module'
384
+ import { createInterface } from 'node:readline'
385
+
386
+ const require = createRequire(process.env.DSH_REMOTE_RTC_HELPER_REQUIRE_FROM || (process.cwd() + '/package.json'))
387
+ const wrtc = require('@roamhq/wrtc')
388
+ const RTCPeerConnection = wrtc.RTCPeerConnection ?? wrtc.default?.RTCPeerConnection
389
+ if (typeof RTCPeerConnection !== 'function') throw new Error('missing RTCPeerConnection')
390
+
391
+ let pc
392
+ let nextRemoteChannelId = 100000
393
+ const channels = new Map()
394
+ let chain = Promise.resolve()
395
+
396
+ function send(message) {
397
+ process.stdout.write(JSON.stringify(message) + '\n')
398
+ }
399
+
400
+ function respond(id, ok, value, error) {
401
+ if (id === undefined) return
402
+ send(ok ? { id, ok: true, value } : { id, ok: false, error: String(error?.message ?? error ?? 'command failed') })
403
+ }
404
+
405
+ function state() {
406
+ return {
407
+ event: 'state',
408
+ connectionState: pc?.connectionState ?? 'closed',
409
+ iceConnectionState: pc?.iceConnectionState ?? 'closed',
410
+ iceGatheringState: pc?.iceGatheringState ?? 'complete',
411
+ signalingState: pc?.signalingState ?? 'closed',
412
+ }
413
+ }
414
+
415
+ function emitState() {
416
+ send(state())
417
+ }
418
+
419
+ function normalizeHelperSdpMLineIndex(value) {
420
+ if (value === undefined) return undefined
421
+ if (value === null) return null
422
+ if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) return null
423
+ return value
424
+ }
425
+
426
+ function normalizeCandidate(candidate) {
427
+ if (candidate === null || candidate === undefined) return null
428
+ const json = typeof candidate.toJSON === 'function'
429
+ ? candidate.toJSON()
430
+ : {
431
+ candidate: candidate.candidate,
432
+ sdpMid: candidate.sdpMid,
433
+ sdpMLineIndex: candidate.sdpMLineIndex,
434
+ usernameFragment: candidate.usernameFragment,
435
+ }
436
+ return {
437
+ ...json,
438
+ sdpMLineIndex: normalizeHelperSdpMLineIndex(json.sdpMLineIndex),
439
+ }
440
+ }
441
+
442
+ function attachChannel(channelId, channel) {
443
+ channels.set(channelId, channel)
444
+ try { channel.binaryType = 'arraybuffer' } catch {}
445
+ const emitChannel = () => send({
446
+ event: 'channel-state',
447
+ channelId,
448
+ readyState: channel.readyState,
449
+ bufferedAmount: channel.bufferedAmount ?? 0,
450
+ })
451
+ channel.onopen = emitChannel
452
+ channel.onclose = emitChannel
453
+ channel.onerror = () => send({ event: 'channel-error', channelId })
454
+ channel.onmessage = event => {
455
+ const data = event.data
456
+ if (typeof data === 'string') {
457
+ send({ event: 'channel-message', channelId, text: data })
458
+ return
459
+ }
460
+ send({ event: 'channel-message', channelId, base64: Buffer.from(data).toString('base64') })
461
+ }
462
+ send({
463
+ event: 'datachannel',
464
+ channelId,
465
+ label: channel.label,
466
+ ordered: channel.ordered,
467
+ readyState: channel.readyState,
468
+ bufferedAmount: channel.bufferedAmount ?? 0,
469
+ })
470
+ }
471
+
472
+ function serializeStats(stats) {
473
+ const entries = []
474
+ const push = (key, value) => {
475
+ const copy = {}
476
+ for (const [entryKey, entryValue] of Object.entries(value ?? {})) {
477
+ if (typeof entryValue !== 'function') copy[entryKey] = entryValue
478
+ }
479
+ entries.push([String(key), copy])
480
+ }
481
+ if (typeof stats?.forEach === 'function') stats.forEach((value, key) => push(key, value))
482
+ else for (const [key, value] of stats ?? []) push(key, value)
483
+ return entries
484
+ }
485
+
486
+ async function handle(command) {
487
+ const { id, method, payload = {} } = command
488
+ try {
489
+ if (method === 'init') {
490
+ pc = new RTCPeerConnection({ iceServers: payload.iceServers ?? [] })
491
+ pc.onconnectionstatechange = emitState
492
+ pc.oniceconnectionstatechange = emitState
493
+ pc.onicegatheringstatechange = emitState
494
+ pc.onsignalingstatechange = emitState
495
+ pc.onicecandidate = event => send({ event: 'icecandidate', candidate: normalizeCandidate(event.candidate) })
496
+ pc.ondatachannel = event => attachChannel(nextRemoteChannelId++, event.channel)
497
+ emitState()
498
+ respond(id, true, {})
499
+ return
500
+ }
501
+ if (method === 'createDataChannel') {
502
+ const channel = pc.createDataChannel(payload.label, payload.options)
503
+ attachChannel(payload.channelId, channel)
504
+ respond(id, true, {})
505
+ return
506
+ }
507
+ if (method === 'createOffer') {
508
+ respond(id, true, await pc.createOffer())
509
+ return
510
+ }
511
+ if (method === 'createAnswer') {
512
+ respond(id, true, await pc.createAnswer())
513
+ return
514
+ }
515
+ if (method === 'setLocalDescription') {
516
+ await pc.setLocalDescription(payload.description)
517
+ emitState()
518
+ respond(id, true, {})
519
+ return
520
+ }
521
+ if (method === 'setRemoteDescription') {
522
+ await pc.setRemoteDescription(payload.description)
523
+ emitState()
524
+ respond(id, true, {})
525
+ return
526
+ }
527
+ if (method === 'addIceCandidate') {
528
+ await pc.addIceCandidate(payload.candidate)
529
+ respond(id, true, {})
530
+ return
531
+ }
532
+ if (method === 'getStats') {
533
+ respond(id, true, serializeStats(await pc.getStats()))
534
+ return
535
+ }
536
+ if (method === 'channelSend') {
537
+ const channel = channels.get(payload.channelId)
538
+ if (channel === undefined) throw new Error('unknown data channel')
539
+ channel.send(payload.text ?? Buffer.from(payload.base64, 'base64'))
540
+ respond(id, true, {})
541
+ return
542
+ }
543
+ if (method === 'channelClose') {
544
+ channels.get(payload.channelId)?.close()
545
+ respond(id, true, {})
546
+ return
547
+ }
548
+ if (method === 'close') {
549
+ for (const channel of channels.values()) {
550
+ try { channel.close() } catch {}
551
+ }
552
+ channels.clear()
553
+ try { pc?.close() } catch {}
554
+ respond(id, true, {})
555
+ setTimeout(() => process.exit(0), 0)
556
+ return
557
+ }
558
+ throw new Error('unknown method ' + method)
559
+ } catch (error) {
560
+ respond(id, false, undefined, error)
561
+ }
562
+ }
563
+
564
+ const rl = createInterface({ input: process.stdin })
565
+ rl.on('line', line => {
566
+ chain = chain.then(() => handle(JSON.parse(line))).catch(error => {
567
+ send({ id: -1, ok: false, error: String(error?.message ?? error) })
568
+ })
569
+ })
570
+ process.stdin.on('end', () => {
571
+ try { pc?.close() } catch {}
572
+ process.exit(0)
573
+ })
574
+ `;
575
+ //# sourceMappingURL=native-rtc-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-rtc-helper.js","sourceRoot":"","sources":["../src/native-rtc-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAuC,MAAM,oBAAoB,CAAA;AAC1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACzE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAqDxC,IAAI,qBAA2D,CAAA;AAC/D,IAAI,6BAA6B,GAAG,KAAK,CAAA;AACzC,IAAI,gBAAoC,CAAA;AACxC,IAAI,wBAAwB,GAAG,KAAK,CAAA;AAEpC,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAChD,IAAI,qBAAqB,KAAK,SAAS;QAAE,OAAO,qBAAqB,CAAA;IACrE,IAAI,6BAA6B;QAAE,OAAO,SAAS,CAAA;IACnD,6BAA6B,GAAG,IAAI,CAAA;IACpC,MAAM,UAAU,GAAG,+BAA+B,EAAE,CAAA;IACpD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC9C,qBAAqB,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAA;IACjE,OAAO,qBAAqB,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,UAAkB,EAClB,WAAW,GAAG,2BAA2B,EAAE;IAE3C,OAAO;QACL,MAAM,CAAC,aAAa;YAClB,OAAO,IAAI,4BAA4B,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;QACjF,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;IACrE,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IAC3C,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,UAAU,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAA;IACnB,CAAC;AACH,CAAC;AAED,SAAS,+BAA+B;IACtC,IAAI,wBAAwB;QAAE,OAAO,gBAAgB,CAAA;IACrD,wBAAwB,GAAG,IAAI,CAAA;IAC/B,MAAM,WAAW,GAAG,2BAA2B,EAAE,CAAA;IACjD,KAAK,MAAM,SAAS,IAAI,oBAAoB,EAAE,EAAE,CAAC;QAC/C,IAAI,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;YACjD,gBAAgB,GAAG,SAAS,CAAA;YAC5B,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,MAAM,GAAG,GAAG,CAAC,KAAyB,EAAQ,EAAE;QAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAM;QACtD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzD,CAAC,CAAA;IACD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAChC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACrB,2EAA2E;IAC3E,+EAA+E;IAC/E,6EAA6E;IAC7E,+EAA+E;IAC/E,oEAAoE;IACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACjI,GAAG,CAAC,wBAAwB,CAAC,CAAA;IAC7B,GAAG,CAAC,qBAAqB,CAAC,CAAA;IAC1B,GAAG,CAAC,eAAe,CAAC,CAAA;IACpB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACtG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACvG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACtG,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE;QAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IACrE,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IAC/C,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC;aACrB,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;aAC9F,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAiB,EAAE,WAAmB;IAClE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAA;IAC9C,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,kCAAkC,EAAE,WAAW,EAAE,CAAA;IAClG,OAAO,GAAG,CAAC,oBAAoB,CAAA;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE;QACjC,qBAAqB;QACrB,QAAQ;QACR;YACE,8CAA8C;YAC9C,gFAAgF;YAChF,kEAAkE;YAClE,uCAAuC;YACvC,sFAAsF;YACtF,8EAA8E;YAC9E,+CAA+C;SAChD,CAAC,IAAI,CAAC,EAAE,CAAC;KACX,EAAE;QACD,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;QACzB,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,KAAK;KACf,CAAC,CAAA;IACF,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,KAAK,CAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO,IAAI,CAAA;QAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,4BAA4B;IAqBb;IACA;IArBnB,eAAe,GAAG,KAAK,CAAA;IACvB,kBAAkB,GAAG,KAAK,CAAA;IAC1B,iBAAiB,GAAG,KAAK,CAAA;IACzB,cAAc,GAAG,QAAQ,CAAA;IACzB,uBAAuB,GAAwB,IAAI,CAAA;IACnD,0BAA0B,GAAwB,IAAI,CAAA;IACtD,yBAAyB,GAAwB,IAAI,CAAA;IACrD,cAAc,GAAwE,IAAI,CAAA;IAC1F,aAAa,GAA0D,IAAI,CAAA;IAE1D,KAAK,CAAgC;IACrC,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAA;IAC3C,QAAQ,GAAG,IAAI,GAAG,EAAqC,CAAA;IAChE,aAAa,GAAG,CAAC,CAAA;IACjB,aAAa,GAAG,CAAC,CAAA;IACjB,MAAM,GAAG,EAAE,CAAA;IACX,MAAM,GAAG,KAAK,CAAA;IACL,KAAK,CAAe;IAErC,YACmB,UAAkB,EAClB,WAAmB,EACpC,aAA6C;QAF5B,eAAU,GAAV,UAAU,CAAQ;QAClB,gBAAW,GAAX,WAAW,CAAQ;QAGpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,qBAAqB,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE;YACpF,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,kCAAkC,EAAE,IAAI,CAAC,WAAW,EAAE;YAC7E,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAmC,CAAA;QACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACvE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QACvD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QAC7D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IACzG,CAAC;IAED,iBAAiB,CAAC,KAAa,EAAE,OAA4B;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACtC,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAA;QAC/F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,EAAE,CAAC,CAAA;QACtG,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,KAAK,CAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAuC,CAAA;IAC9E,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,KAAK,CAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAuC,CAAA;IAC/E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,WAAuC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAA;QAChB,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,WAAsC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAA;QAChB,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAA+B;QACnD,MAAM,IAAI,CAAC,KAAK,CAAA;QAChB,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,KAAK,CAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAqD,CAAA;IACzF,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QACxB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;QACvF,CAAC,EAAE,KAAK,CAAC,CAAA;QACT,KAAK,CAAC,KAAK,EAAE,EAAE,CAAA;IACjB,CAAC;IAED,eAAe,CAAC,SAAiB,EAAE,IAA0B;QAC3D,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ;YACtC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;YAC3B,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;QAC/D,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;IAC5C,CAAC;IAEO,OAAO,CAAC,MAAc,EAAE,OAAgB;QAC9C,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAA;QAChF,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;QACnC,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,MAAM,CAAC,MAAc,EAAE,OAAgB;QAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO;YAAE,OAAM;QAC7C,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IACjC,CAAC;IAEO,KAAK,CAAC,OAAgB;QAC5B,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,KAAa;QAChC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAA;QACpB,SAAS,CAAC;YACR,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,OAAO,GAAG,CAAC;gBAAE,OAAM;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;YAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAQ;YAChC,IAAI,CAAC;gBACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiC,CAAC,CAAA;YACtE,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAA;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,OAAqC;QACzD,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC5C,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAM;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC/B,IAAI,OAAO,CAAC,EAAE;gBAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;;gBACzC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,kCAAkC,CAAC,CAAC,CAAA;YACnF,OAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;YAC9C,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;YACpD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAA;YAClD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;YAC5C,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAA;YAChC,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAA;YACnC,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAA;YAClC,OAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;YACvD,OAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;YAClF,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;YACjC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;YAC/D,OAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;YAC7F,OAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YACpD,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAM;YACjC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;iBAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;YACtH,OAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAA;QACnD,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,SAAiB,EAAE,KAAa,EAAE,OAAgB;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAC9E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACrC,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACpC,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC7D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACnE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IAChF,CAAC;CACF;AAED,MAAM,yBAAyB;IAWV;IACA;IACR;IACA;IAbX,UAAU,GAAiC,YAAY,CAAA;IACvD,cAAc,GAAG,CAAC,CAAA;IAClB,UAAU,GAAG,aAAa,CAAA;IAC1B,MAAM,GAAwB,IAAI,CAAA;IAClC,SAAS,GAA6D,IAAI,CAAA;IAC1E,OAAO,GAAwB,IAAI,CAAA;IACnC,OAAO,GAAwB,IAAI,CAAA;IACnC,mBAAmB,GAAwB,IAAI,CAAA;IAE/C,YACmB,KAAmC,EACnC,SAAiB,EACzB,KAAa,EACb,OAAgB;QAHR,UAAK,GAAL,KAAK,CAA8B;QACnC,cAAS,GAAT,SAAS,CAAQ;QACzB,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAS;IACxB,CAAC;IAEJ,IAAI,CAAC,IAA0B;QAC7B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAClD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC;IAED,WAAW,CAAC,UAAwC,EAAE,cAAsB;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAA;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,QAAQ,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM;YAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAA;QACjE,IAAI,QAAQ,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ;YAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;QACtE,IAAI,cAAc,KAAK,CAAC;YAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAA;IACxD,CAAC;IAED,WAAW,CAAC,IAA0B;QACpC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,SAAS;QACP,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;IAClB,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAgB,CAAA;AACrG,CAAC;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgM/B,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { ApiProxy } from '@deepseek-ai/dsh-host-apiproxy/api';
2
+ import { type RemoteClientCore } from '@dsh-remote/client-core';
3
+ /** ApiProxy-compatible face that preserves the native Harness envelopes over Remote RPC. */
4
+ export declare class RemoteHarnessApiProxy {
5
+ private readonly client;
6
+ private readonly harnessVersion?;
7
+ readonly api: ApiProxy;
8
+ private legacyWelcomeAcknowledged;
9
+ private settingsDescribeValue?;
10
+ constructor(client: RemoteClientCore, harnessVersion?: string | undefined);
11
+ private call;
12
+ private normalizeLegacyWelcomeSettings;
13
+ private callTransferred;
14
+ private respond;
15
+ private stream;
16
+ }
17
+ //# sourceMappingURL=remote-api-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-api-proxy.d.ts","sourceRoot":"","sources":["../src/remote-api-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAMT,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AA0BlF,4FAA4F;AAC5F,qBAAa,qBAAqB;IAKpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAoB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAJvF,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAA;IACtB,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,qBAAqB,CAAC,CAAyB;gBAE1B,MAAM,EAAE,gBAAgB,EAAmB,cAAc,CAAC,EAAE,MAAM,YAAA;YAkFjF,IAAI;IAiBlB,OAAO,CAAC,8BAA8B;YAcxB,eAAe;YAiEf,OAAO;YAIN,MAAM;CAmCtB"}