@walkhi/code-relax 0.1.0-beta.1 → 0.1.0-beta.100

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 (834) hide show
  1. package/README.md +67 -45
  2. package/dist/bin/cleanup-accounts.mjs +63 -0
  3. package/dist/bin/codex-remote.mjs +387 -210
  4. package/dist/bin/manage-relay-admin.mjs +20 -0
  5. package/dist/bin/migrate-relay-db.mjs +109 -0
  6. package/dist/bin/publish-android-release.mjs +63 -0
  7. package/dist/bin/publish-harmony-release.mjs +46 -0
  8. package/dist/bin/release-upload-server.mjs +190 -0
  9. package/dist/bin/self-relay-admin.mjs +8 -0
  10. package/dist/bin/self-relay-demo.mjs +2 -2
  11. package/dist/bin/self-relay-server.mjs +46 -30
  12. package/dist/bin/set-relay-admin-password.mjs +11 -0
  13. package/dist/build-platform.json +1 -0
  14. package/dist/get-shared-service-url.ps1 +12 -4
  15. package/dist/shared/app-server-events.cjs +500 -255
  16. package/dist/shared/code-browser.cjs +159 -0
  17. package/dist/shared/file-changes.cjs +31 -0
  18. package/dist/shared/file-citations.cjs +117 -0
  19. package/dist/shared/file-mentions.cjs +92 -0
  20. package/dist/shared/message-delivery.cjs +115 -0
  21. package/dist/shared/p2p-data-channel.cjs +72 -0
  22. package/dist/shared/p2p-diagnostics.cjs +1 -1
  23. package/dist/shared/p2p-file-channel.cjs +87 -0
  24. package/dist/shared/p2p-ice-policy.cjs +22 -0
  25. package/dist/shared/plan-pricing.cjs +32 -0
  26. package/dist/shared/question-attention.cjs +100 -0
  27. package/dist/shared/release-version.cjs +31 -0
  28. package/dist/shared/server-requests.cjs +347 -67
  29. package/dist/shared/service-endpoints.cjs +21 -0
  30. package/dist/shared/timeline-sync.cjs +173 -67
  31. package/dist/skills/code-relax/SKILL.md +22 -17
  32. package/dist/src/archived-threads.mjs +22 -0
  33. package/dist/src/bounded-process-log.mjs +63 -0
  34. package/dist/src/browser-auth-operations.mjs +46 -0
  35. package/dist/src/celsius-client.mjs +107 -0
  36. package/dist/src/code-browser.mjs +99 -0
  37. package/dist/src/desktop-launcher.mjs +57 -35
  38. package/dist/src/desktop-operation.mjs +46 -0
  39. package/dist/src/dots-approval-timeline.mjs +99 -0
  40. package/dist/src/dots-avatar.mjs +42 -0
  41. package/dist/src/dots-chat-projection.mjs +50 -0
  42. package/dist/src/dots-chat-server.mjs +623 -0
  43. package/dist/src/dots-message-images.mjs +318 -0
  44. package/dist/src/dots-profile.mjs +77 -0
  45. package/dist/src/dots-room-activity.mjs +199 -0
  46. package/dist/src/dots-room-client.mjs +163 -0
  47. package/dist/src/dots-room-projection.mjs +94 -0
  48. package/dist/src/dots-schedules.mjs +66 -0
  49. package/dist/src/dots-summary-tasks.mjs +32 -0
  50. package/dist/src/dots-task-catalog.mjs +433 -0
  51. package/dist/src/dots-task-files.mjs +52 -0
  52. package/dist/src/file-transfer-range.mjs +22 -0
  53. package/dist/src/file-upload-session.mjs +151 -0
  54. package/dist/src/hosted-history-app-server.mjs +103 -0
  55. package/dist/src/hosted-history-cache.mjs +113 -0
  56. package/dist/src/lan-socket-server.mjs +270 -31
  57. package/dist/src/managed-app-server.mjs +398 -207
  58. package/dist/src/managed-endpoint.mjs +25 -0
  59. package/dist/src/message-images.mjs +0 -18
  60. package/dist/src/message-upload-files.mjs +111 -0
  61. package/dist/src/onboarding.mjs +9 -28
  62. package/dist/src/plan-pricing.mjs +47 -0
  63. package/dist/src/platform/README.md +7 -12
  64. package/dist/src/platform/codex-protocol.mjs +51 -0
  65. package/dist/src/platform/codex-runtime.mjs +4 -0
  66. package/dist/src/platform/credential-store.mjs +19 -0
  67. package/dist/src/platform/desktop-host.mjs +3 -0
  68. package/dist/src/platform/desktop-permission-mode.mjs +17 -0
  69. package/dist/src/platform/desktop-project-registration.mjs +3 -0
  70. package/dist/src/platform/desktop-project-store.mjs +219 -0
  71. package/dist/src/platform/file-opener.mjs +9 -0
  72. package/dist/src/platform/linux/codex-runtime.mjs +56 -0
  73. package/dist/src/platform/linux/desktop-host.mjs +87 -0
  74. package/dist/src/platform/linux/desktop-installation.mjs +36 -0
  75. package/dist/src/platform/linux/desktop-project-registration.mjs +11 -0
  76. package/dist/src/platform/linux/network-info.mjs +11 -0
  77. package/dist/src/platform/linux/process.mjs +53 -0
  78. package/dist/src/platform/linux/project-locations.mjs +17 -0
  79. package/dist/src/platform/linux/resident-startup.mjs +52 -0
  80. package/dist/src/platform/linux/retained-runtime.mjs +76 -0
  81. package/dist/src/platform/linux/service-host.mjs +18 -0
  82. package/dist/src/platform/linux/system.mjs +50 -0
  83. package/dist/src/platform/linux/user-environment.mjs +31 -0
  84. package/dist/src/platform/macos/codex-runtime.mjs +121 -0
  85. package/dist/src/platform/macos/desktop-host.mjs +114 -0
  86. package/dist/src/platform/macos/desktop-project-registration.mjs +11 -0
  87. package/dist/src/platform/macos/network-info.mjs +8 -0
  88. package/dist/src/platform/macos/project-locations.mjs +8 -0
  89. package/dist/src/platform/macos/resident-startup.mjs +84 -0
  90. package/dist/src/platform/macos/retained-runtime.mjs +127 -0
  91. package/dist/src/platform/macos/service-host.mjs +18 -0
  92. package/dist/src/platform/macos/system.mjs +29 -0
  93. package/dist/src/platform/macos/user-environment.mjs +31 -0
  94. package/dist/src/platform/managed-user-environment.mjs +78 -0
  95. package/dist/src/platform/native-package.mjs +69 -0
  96. package/dist/src/platform/network-info.mjs +3 -0
  97. package/dist/src/platform/path-identity.mjs +5 -0
  98. package/dist/src/platform/posix/network-candidates.mjs +23 -0
  99. package/dist/src/platform/posix/runtime-paths.mjs +25 -0
  100. package/dist/src/platform/power-inhibitor.mjs +22 -0
  101. package/dist/src/platform/project-locations.mjs +3 -0
  102. package/dist/src/platform/runtime-paths.mjs +8 -0
  103. package/dist/src/platform/select.mjs +5 -0
  104. package/dist/src/platform/service-host.mjs +3 -0
  105. package/dist/src/platform/user-environment.mjs +3 -0
  106. package/dist/src/platform/windows/IsolatedProcess.cs +7 -3
  107. package/dist/src/platform/windows/activate-desktop.ps1 +49 -0
  108. package/dist/src/platform/windows/background-process.mjs +7 -2
  109. package/dist/src/platform/windows/codex-runtime.mjs +225 -0
  110. package/dist/src/platform/windows/desktop-helper.mjs +272 -0
  111. package/dist/src/platform/windows/desktop-host.mjs +45 -18
  112. package/dist/src/platform/windows/desktop-info.ps1 +27 -5
  113. package/dist/src/platform/windows/desktop-project-registration.mjs +4 -0
  114. package/dist/src/platform/windows/desktop-runtime.ps1 +10 -0
  115. package/dist/src/platform/windows/desktop-shortcuts.ps1 +7 -14
  116. package/dist/src/platform/windows/dots-profile.mjs +49 -0
  117. package/dist/src/platform/windows/keep-awake.ps1 +20 -0
  118. package/dist/src/platform/windows/launch-worker.mjs +41 -0
  119. package/dist/src/platform/windows/project-locations.mjs +16 -0
  120. package/dist/src/platform/windows/resident-start.js +20 -0
  121. package/dist/src/platform/windows/resident-startup.ps1 +76 -20
  122. package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
  123. package/dist/src/platform/windows/service-host.mjs +15 -23
  124. package/dist/src/platform/windows/start-hidden-console.ps1 +27 -8
  125. package/dist/src/platform/windows/stop-desktop.ps1 +7 -4
  126. package/dist/src/platform/windows/user-environment.mjs +52 -50
  127. package/dist/src/project-create.mjs +121 -0
  128. package/dist/src/project-management.mjs +59 -0
  129. package/dist/src/project-remove.mjs +55 -0
  130. package/dist/src/project-update.mjs +59 -0
  131. package/dist/src/relay-config-import.mjs +45 -0
  132. package/dist/src/remote-control.mjs +51 -0
  133. package/dist/src/runtime-discovery.mjs +67 -0
  134. package/dist/src/self-relay/account-cleanup.mjs +30 -0
  135. package/dist/src/self-relay/account-connections.mjs +63 -0
  136. package/dist/src/self-relay/admin-auth.mjs +59 -0
  137. package/dist/src/self-relay/admin-cloud.mjs +101 -0
  138. package/dist/src/self-relay/admin-login-page.mjs +7 -0
  139. package/dist/src/self-relay/admin-page.mjs +87 -0
  140. package/dist/src/self-relay/admin-server.mjs +105 -0
  141. package/dist/src/self-relay/admin-state.mjs +127 -0
  142. package/dist/src/self-relay/admin-style.mjs +58 -0
  143. package/dist/src/self-relay/admin-workstations-page.mjs +95 -0
  144. package/dist/src/self-relay/admin-workstations.mjs +145 -0
  145. package/dist/src/self-relay/android-releases.mjs +61 -0
  146. package/dist/src/self-relay/client.mjs +47 -45
  147. package/dist/src/self-relay/connection-reporting.mjs +38 -0
  148. package/dist/src/self-relay/connector.mjs +473 -147
  149. package/dist/src/self-relay/demo.mjs +5 -6
  150. package/dist/src/self-relay/device-info.mjs +27 -0
  151. package/dist/src/self-relay/device-store.mjs +10 -2
  152. package/dist/src/self-relay/diagnostics.mjs +54 -0
  153. package/dist/src/self-relay/email-accounts.mjs +195 -0
  154. package/dist/src/self-relay/file-wire.mjs +76 -0
  155. package/dist/src/self-relay/lan-authorizations.mjs +44 -2
  156. package/dist/src/self-relay/lifecycle.mjs +271 -274
  157. package/dist/src/self-relay/long-pairing.mjs +40 -0
  158. package/dist/src/self-relay/mysql-state.mjs +118 -0
  159. package/dist/src/self-relay/p2p-probe.mjs +103 -18
  160. package/dist/src/self-relay/phone-connections.mjs +55 -0
  161. package/dist/src/self-relay/privacy-page.mjs +26 -0
  162. package/dist/src/self-relay/public-releases.mjs +67 -0
  163. package/dist/src/self-relay/rtc-file-bridge.mjs +46 -0
  164. package/dist/src/self-relay/server.mjs +1073 -296
  165. package/dist/src/self-relay/usage-daily.mjs +55 -0
  166. package/dist/src/self-relay/usage-meter.mjs +141 -0
  167. package/dist/src/server.mjs +1231 -1295
  168. package/dist/src/service-control.mjs +17 -7
  169. package/dist/src/service-doctor.mjs +150 -63
  170. package/dist/src/service-health.mjs +2 -2
  171. package/dist/src/service-install.mjs +16 -10
  172. package/dist/src/service-lifecycle.mjs +48 -38
  173. package/dist/src/service-power.mjs +58 -0
  174. package/dist/src/service-restart.mjs +45 -12
  175. package/dist/src/service-update-worker.mjs +42 -0
  176. package/dist/src/service-update.mjs +80 -0
  177. package/dist/src/shared-app-server.mjs +495 -133
  178. package/dist/src/shared-catalog.mjs +132 -60
  179. package/dist/src/shared-recovery.mjs +24 -14
  180. package/dist/src/shared-thread-stream.mjs +143 -51
  181. package/dist/src/skill-install.mjs +0 -13
  182. package/dist/src/thread-goals.mjs +40 -0
  183. package/dist/src/turn-model-history.mjs +47 -0
  184. package/dist/src/usage-reset.mjs +17 -0
  185. package/dist/src/workstation-downloads.mjs +120 -0
  186. package/package.json +35 -37
  187. package/tools/postinstall.mjs +186 -9
  188. package/dist/src/app-server-client.mjs +0 -468
  189. package/dist/src/app-server-tasks.mjs +0 -355
  190. package/dist/src/debug-ui.mjs +0 -131
  191. package/dist/src/platform/windows/credential-store.mjs +0 -27
  192. package/dist/src/platform/windows/credential-store.ps1 +0 -49
  193. package/dist/src/platform/windows/desktop-monitor.mjs +0 -34
  194. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +0 -5
  195. package/dist/src/platform/windows/desktop-tools.mjs +0 -48
  196. package/dist/src/platform/windows/launch-worker.ps1 +0 -13
  197. package/dist/src/thread-catalog.mjs +0 -42
  198. package/dist/tools/find-desktop-pipe.mjs +0 -10
  199. package/dist/web/approval-ui.js +0 -188
  200. package/dist/web/capabilities.js +0 -57
  201. package/dist/web/chat-transport.js +0 -196
  202. package/dist/web/chat.css +0 -736
  203. package/dist/web/chat.js +0 -5149
  204. package/dist/web/client-platform.js +0 -11
  205. package/dist/web/harmony-platform.js +0 -51
  206. package/dist/web/highlight-powershell.min.js +0 -39
  207. package/dist/web/highlight.min.js +0 -1262
  208. package/dist/web/history-cache.js +0 -146
  209. package/dist/web/index.html +0 -222
  210. package/dist/web/lan-session.js +0 -122
  211. package/dist/web/p2p-diagnostics.js +0 -28
  212. package/dist/web/p2p-probe.js +0 -83
  213. package/dist/web/resources.json +0 -1
  214. package/dist/web/self-relay-session.js +0 -119
  215. package/dist/web/server-requests.js +0 -67
  216. package/dist/web/timeline-sync.js +0 -67
  217. package/dist/web/vendor/README.md +0 -14
  218. package/dist/web/vendor/highlight-powershell.min.js +0 -39
  219. package/dist/web/vendor/highlight.LICENSE.txt +0 -29
  220. package/dist/web/vendor/highlight.min.js +0 -1262
  221. package/node_modules/@img/colour/LICENSE.md +0 -82
  222. package/node_modules/@img/colour/README.md +0 -15
  223. package/node_modules/@img/colour/color.cjs +0 -1596
  224. package/node_modules/@img/colour/index.cjs +0 -1
  225. package/node_modules/@img/colour/index.d.ts +0 -929
  226. package/node_modules/@img/colour/package.json +0 -58
  227. package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
  228. package/node_modules/@img/sharp-win32-x64/README.md +0 -59
  229. package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
  230. package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
  231. package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
  232. package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
  233. package/node_modules/@img/sharp-win32-x64/package.json +0 -40
  234. package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
  235. package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
  236. package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
  237. package/node_modules/ansi-regex/index.d.ts +0 -37
  238. package/node_modules/ansi-regex/index.js +0 -10
  239. package/node_modules/ansi-regex/license +0 -9
  240. package/node_modules/ansi-regex/package.json +0 -55
  241. package/node_modules/ansi-regex/readme.md +0 -78
  242. package/node_modules/ansi-styles/index.d.ts +0 -345
  243. package/node_modules/ansi-styles/index.js +0 -163
  244. package/node_modules/ansi-styles/license +0 -9
  245. package/node_modules/ansi-styles/package.json +0 -56
  246. package/node_modules/ansi-styles/readme.md +0 -152
  247. package/node_modules/camelcase/index.d.ts +0 -63
  248. package/node_modules/camelcase/index.js +0 -76
  249. package/node_modules/camelcase/license +0 -9
  250. package/node_modules/camelcase/package.json +0 -43
  251. package/node_modules/camelcase/readme.md +0 -99
  252. package/node_modules/cliui/CHANGELOG.md +0 -76
  253. package/node_modules/cliui/LICENSE.txt +0 -14
  254. package/node_modules/cliui/README.md +0 -115
  255. package/node_modules/cliui/index.js +0 -354
  256. package/node_modules/cliui/package.json +0 -65
  257. package/node_modules/color-convert/CHANGELOG.md +0 -54
  258. package/node_modules/color-convert/LICENSE +0 -21
  259. package/node_modules/color-convert/README.md +0 -68
  260. package/node_modules/color-convert/conversions.js +0 -839
  261. package/node_modules/color-convert/index.js +0 -81
  262. package/node_modules/color-convert/package.json +0 -48
  263. package/node_modules/color-convert/route.js +0 -97
  264. package/node_modules/color-name/LICENSE +0 -8
  265. package/node_modules/color-name/README.md +0 -11
  266. package/node_modules/color-name/index.js +0 -152
  267. package/node_modules/color-name/package.json +0 -28
  268. package/node_modules/decamelize/index.js +0 -13
  269. package/node_modules/decamelize/license +0 -21
  270. package/node_modules/decamelize/package.json +0 -38
  271. package/node_modules/decamelize/readme.md +0 -48
  272. package/node_modules/detect-libc/LICENSE +0 -201
  273. package/node_modules/detect-libc/README.md +0 -163
  274. package/node_modules/detect-libc/index.d.ts +0 -14
  275. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  276. package/node_modules/detect-libc/lib/elf.js +0 -39
  277. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  278. package/node_modules/detect-libc/lib/process.js +0 -24
  279. package/node_modules/detect-libc/package.json +0 -44
  280. package/node_modules/dijkstrajs/.travis.yml +0 -4
  281. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  282. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  283. package/node_modules/dijkstrajs/README.md +0 -18
  284. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  285. package/node_modules/dijkstrajs/package.json +0 -60
  286. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  287. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  288. package/node_modules/emoji-regex/README.md +0 -73
  289. package/node_modules/emoji-regex/es2015/index.js +0 -6
  290. package/node_modules/emoji-regex/es2015/text.js +0 -6
  291. package/node_modules/emoji-regex/index.d.ts +0 -23
  292. package/node_modules/emoji-regex/index.js +0 -6
  293. package/node_modules/emoji-regex/package.json +0 -50
  294. package/node_modules/emoji-regex/text.js +0 -6
  295. package/node_modules/find-up/index.d.ts +0 -137
  296. package/node_modules/find-up/index.js +0 -89
  297. package/node_modules/find-up/license +0 -9
  298. package/node_modules/find-up/package.json +0 -53
  299. package/node_modules/find-up/readme.md +0 -156
  300. package/node_modules/get-caller-file/LICENSE.md +0 -6
  301. package/node_modules/get-caller-file/README.md +0 -41
  302. package/node_modules/get-caller-file/index.d.ts +0 -2
  303. package/node_modules/get-caller-file/index.js +0 -22
  304. package/node_modules/get-caller-file/index.js.map +0 -1
  305. package/node_modules/get-caller-file/package.json +0 -42
  306. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  307. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  308. package/node_modules/is-fullwidth-code-point/license +0 -9
  309. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  310. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  311. package/node_modules/locate-path/index.d.ts +0 -83
  312. package/node_modules/locate-path/index.js +0 -65
  313. package/node_modules/locate-path/license +0 -9
  314. package/node_modules/locate-path/package.json +0 -45
  315. package/node_modules/locate-path/readme.md +0 -122
  316. package/node_modules/node-datachannel/.clang-format +0 -17
  317. package/node_modules/node-datachannel/.editorconfig +0 -12
  318. package/node_modules/node-datachannel/.eslintignore +0 -8
  319. package/node_modules/node-datachannel/.eslintrc.json +0 -27
  320. package/node_modules/node-datachannel/.gitmodules +0 -3
  321. package/node_modules/node-datachannel/.prettierignore +0 -7
  322. package/node_modules/node-datachannel/.prettierrc +0 -13
  323. package/node_modules/node-datachannel/API.md +0 -247
  324. package/node_modules/node-datachannel/BULDING.md +0 -26
  325. package/node_modules/node-datachannel/CMakeLists.txt +0 -153
  326. package/node_modules/node-datachannel/LICENSE +0 -373
  327. package/node_modules/node-datachannel/README.md +0 -129
  328. package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
  329. package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
  330. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
  331. package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
  332. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
  333. package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
  334. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
  335. package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
  336. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
  337. package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
  338. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
  339. package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
  340. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
  341. package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
  342. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
  343. package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
  344. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
  345. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
  346. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
  347. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
  348. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
  349. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
  350. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
  351. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
  352. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
  353. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
  354. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
  355. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
  356. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
  357. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
  358. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
  359. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
  360. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
  361. package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
  362. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
  363. package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
  364. package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
  365. package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
  366. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
  367. package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
  368. package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
  369. package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
  370. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
  371. package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
  372. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
  373. package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
  374. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
  375. package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
  376. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
  377. package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
  378. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
  379. package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
  380. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
  381. package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
  382. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
  383. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
  384. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
  385. package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
  386. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
  387. package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
  388. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
  389. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
  390. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
  391. package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
  392. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
  393. package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
  394. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
  395. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
  396. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
  397. package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
  398. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
  399. package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
  400. package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
  401. package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
  402. package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
  403. package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
  404. package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
  405. package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
  406. package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
  407. package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
  408. package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
  409. package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
  410. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
  411. package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
  412. package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
  413. package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
  414. package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
  415. package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
  416. package/node_modules/node-datachannel/jest.config.ts +0 -14
  417. package/node_modules/node-datachannel/package.json +0 -133
  418. package/node_modules/node-datachannel/rollup.config.mjs +0 -67
  419. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
  420. package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
  421. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
  422. package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
  423. package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
  424. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
  425. package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
  426. package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
  427. package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
  428. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
  429. package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
  430. package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
  431. package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
  432. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
  433. package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
  434. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
  435. package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
  436. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
  437. package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
  438. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
  439. package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
  440. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
  441. package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
  442. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
  443. package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
  444. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
  445. package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
  446. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
  447. package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
  448. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
  449. package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
  450. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
  451. package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
  452. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
  453. package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
  454. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
  455. package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
  456. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
  457. package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
  458. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
  459. package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
  460. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
  461. package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
  462. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
  463. package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
  464. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
  465. package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
  466. package/node_modules/node-datachannel/src/index.ts +0 -9
  467. package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
  468. package/node_modules/node-datachannel/src/lib/index.ts +0 -290
  469. package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
  470. package/node_modules/node-datachannel/src/lib/types.ts +0 -169
  471. package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
  472. package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
  473. package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
  474. package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
  475. package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
  476. package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
  477. package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
  478. package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
  479. package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
  480. package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
  481. package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
  482. package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
  483. package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
  484. package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
  485. package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
  486. package/node_modules/node-datachannel/tsconfig.json +0 -21
  487. package/node_modules/p-limit/index.d.ts +0 -38
  488. package/node_modules/p-limit/index.js +0 -57
  489. package/node_modules/p-limit/license +0 -9
  490. package/node_modules/p-limit/package.json +0 -52
  491. package/node_modules/p-limit/readme.md +0 -101
  492. package/node_modules/p-locate/index.d.ts +0 -64
  493. package/node_modules/p-locate/index.js +0 -52
  494. package/node_modules/p-locate/license +0 -9
  495. package/node_modules/p-locate/package.json +0 -53
  496. package/node_modules/p-locate/readme.md +0 -90
  497. package/node_modules/p-try/index.d.ts +0 -39
  498. package/node_modules/p-try/index.js +0 -9
  499. package/node_modules/p-try/license +0 -9
  500. package/node_modules/p-try/package.json +0 -42
  501. package/node_modules/p-try/readme.md +0 -58
  502. package/node_modules/path-exists/index.d.ts +0 -28
  503. package/node_modules/path-exists/index.js +0 -23
  504. package/node_modules/path-exists/license +0 -9
  505. package/node_modules/path-exists/package.json +0 -39
  506. package/node_modules/path-exists/readme.md +0 -52
  507. package/node_modules/pngjs/.eslintignore +0 -2
  508. package/node_modules/pngjs/.eslintrc.json +0 -19
  509. package/node_modules/pngjs/.prettierignore +0 -3
  510. package/node_modules/pngjs/LICENSE +0 -20
  511. package/node_modules/pngjs/README.md +0 -429
  512. package/node_modules/pngjs/browser.js +0 -16096
  513. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  514. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  515. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  516. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  517. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  518. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  519. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  520. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  521. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  522. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  523. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  524. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  525. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  526. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  527. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  528. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  529. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  530. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  531. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  532. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  533. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  534. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  535. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  536. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  537. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  538. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  539. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  540. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  541. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  542. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  543. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  544. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  545. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  546. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  547. package/node_modules/pngjs/lib/constants.js +0 -32
  548. package/node_modules/pngjs/lib/crc.js +0 -40
  549. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  550. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  551. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  552. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  553. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  554. package/node_modules/pngjs/lib/interlace.js +0 -95
  555. package/node_modules/pngjs/lib/packer-async.js +0 -50
  556. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  557. package/node_modules/pngjs/lib/packer.js +0 -129
  558. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  559. package/node_modules/pngjs/lib/parser-async.js +0 -165
  560. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  561. package/node_modules/pngjs/lib/parser.js +0 -290
  562. package/node_modules/pngjs/lib/png-sync.js +0 -12
  563. package/node_modules/pngjs/lib/png.js +0 -194
  564. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  565. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  566. package/node_modules/pngjs/package.json +0 -73
  567. package/node_modules/qrcode/README.md +0 -770
  568. package/node_modules/qrcode/bin/qrcode +0 -159
  569. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  570. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  571. package/node_modules/qrcode/lib/browser.js +0 -76
  572. package/node_modules/qrcode/lib/can-promise.js +0 -7
  573. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  574. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  575. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  576. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  577. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  578. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  579. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  580. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  581. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  582. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  583. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  584. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  585. package/node_modules/qrcode/lib/core/mode.js +0 -167
  586. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  587. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  588. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  589. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  590. package/node_modules/qrcode/lib/core/regex.js +0 -31
  591. package/node_modules/qrcode/lib/core/segments.js +0 -330
  592. package/node_modules/qrcode/lib/core/utils.js +0 -63
  593. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  594. package/node_modules/qrcode/lib/core/version.js +0 -163
  595. package/node_modules/qrcode/lib/index.js +0 -12
  596. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  597. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  598. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  599. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  600. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  601. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  602. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  603. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  604. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  605. package/node_modules/qrcode/lib/server.js +0 -138
  606. package/node_modules/qrcode/license +0 -10
  607. package/node_modules/qrcode/package.json +0 -77
  608. package/node_modules/require-directory/.jshintrc +0 -67
  609. package/node_modules/require-directory/.npmignore +0 -1
  610. package/node_modules/require-directory/.travis.yml +0 -3
  611. package/node_modules/require-directory/LICENSE +0 -22
  612. package/node_modules/require-directory/README.markdown +0 -184
  613. package/node_modules/require-directory/index.js +0 -86
  614. package/node_modules/require-directory/package.json +0 -40
  615. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  616. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  617. package/node_modules/require-main-filename/README.md +0 -26
  618. package/node_modules/require-main-filename/index.js +0 -18
  619. package/node_modules/require-main-filename/package.json +0 -35
  620. package/node_modules/semver/LICENSE +0 -15
  621. package/node_modules/semver/README.md +0 -680
  622. package/node_modules/semver/bin/semver.js +0 -195
  623. package/node_modules/semver/classes/comparator.js +0 -143
  624. package/node_modules/semver/classes/index.js +0 -7
  625. package/node_modules/semver/classes/range.js +0 -577
  626. package/node_modules/semver/classes/semver.js +0 -350
  627. package/node_modules/semver/functions/clean.js +0 -8
  628. package/node_modules/semver/functions/cmp.js +0 -54
  629. package/node_modules/semver/functions/coerce.js +0 -62
  630. package/node_modules/semver/functions/compare-build.js +0 -9
  631. package/node_modules/semver/functions/compare-loose.js +0 -5
  632. package/node_modules/semver/functions/compare.js +0 -7
  633. package/node_modules/semver/functions/diff.js +0 -60
  634. package/node_modules/semver/functions/eq.js +0 -5
  635. package/node_modules/semver/functions/gt.js +0 -5
  636. package/node_modules/semver/functions/gte.js +0 -5
  637. package/node_modules/semver/functions/inc.js +0 -21
  638. package/node_modules/semver/functions/lt.js +0 -5
  639. package/node_modules/semver/functions/lte.js +0 -5
  640. package/node_modules/semver/functions/major.js +0 -5
  641. package/node_modules/semver/functions/minor.js +0 -5
  642. package/node_modules/semver/functions/neq.js +0 -5
  643. package/node_modules/semver/functions/parse.js +0 -18
  644. package/node_modules/semver/functions/patch.js +0 -5
  645. package/node_modules/semver/functions/prerelease.js +0 -8
  646. package/node_modules/semver/functions/rcompare.js +0 -5
  647. package/node_modules/semver/functions/rsort.js +0 -5
  648. package/node_modules/semver/functions/satisfies.js +0 -12
  649. package/node_modules/semver/functions/sort.js +0 -5
  650. package/node_modules/semver/functions/truncate.js +0 -48
  651. package/node_modules/semver/functions/valid.js +0 -8
  652. package/node_modules/semver/index.js +0 -93
  653. package/node_modules/semver/internal/constants.js +0 -37
  654. package/node_modules/semver/internal/debug.js +0 -11
  655. package/node_modules/semver/internal/identifiers.js +0 -29
  656. package/node_modules/semver/internal/lrucache.js +0 -42
  657. package/node_modules/semver/internal/parse-options.js +0 -17
  658. package/node_modules/semver/internal/re.js +0 -223
  659. package/node_modules/semver/package.json +0 -78
  660. package/node_modules/semver/preload.js +0 -4
  661. package/node_modules/semver/range.bnf +0 -17
  662. package/node_modules/semver/ranges/gtr.js +0 -6
  663. package/node_modules/semver/ranges/intersects.js +0 -9
  664. package/node_modules/semver/ranges/ltr.js +0 -6
  665. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  666. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  667. package/node_modules/semver/ranges/min-version.js +0 -63
  668. package/node_modules/semver/ranges/outside.js +0 -82
  669. package/node_modules/semver/ranges/simplify.js +0 -49
  670. package/node_modules/semver/ranges/subset.js +0 -249
  671. package/node_modules/semver/ranges/to-comparators.js +0 -10
  672. package/node_modules/semver/ranges/valid.js +0 -13
  673. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  674. package/node_modules/set-blocking/LICENSE.txt +0 -14
  675. package/node_modules/set-blocking/README.md +0 -31
  676. package/node_modules/set-blocking/index.js +0 -7
  677. package/node_modules/set-blocking/package.json +0 -42
  678. package/node_modules/sharp/LICENSE +0 -191
  679. package/node_modules/sharp/README.md +0 -112
  680. package/node_modules/sharp/dist/channel.cjs +0 -177
  681. package/node_modules/sharp/dist/channel.mjs +0 -177
  682. package/node_modules/sharp/dist/colour.cjs +0 -199
  683. package/node_modules/sharp/dist/colour.mjs +0 -199
  684. package/node_modules/sharp/dist/composite.cjs +0 -213
  685. package/node_modules/sharp/dist/composite.mjs +0 -213
  686. package/node_modules/sharp/dist/constructor.cjs +0 -511
  687. package/node_modules/sharp/dist/constructor.mjs +0 -511
  688. package/node_modules/sharp/dist/index.cjs +0 -25
  689. package/node_modules/sharp/dist/index.d.cts +0 -1999
  690. package/node_modules/sharp/dist/index.d.mts +0 -2046
  691. package/node_modules/sharp/dist/index.mjs +0 -25
  692. package/node_modules/sharp/dist/input.cjs +0 -819
  693. package/node_modules/sharp/dist/input.mjs +0 -819
  694. package/node_modules/sharp/dist/is.cjs +0 -143
  695. package/node_modules/sharp/dist/is.mjs +0 -143
  696. package/node_modules/sharp/dist/libvips.cjs +0 -212
  697. package/node_modules/sharp/dist/libvips.mjs +0 -212
  698. package/node_modules/sharp/dist/operation.cjs +0 -1002
  699. package/node_modules/sharp/dist/operation.mjs +0 -1002
  700. package/node_modules/sharp/dist/output.cjs +0 -1785
  701. package/node_modules/sharp/dist/output.mjs +0 -1785
  702. package/node_modules/sharp/dist/resize.cjs +0 -617
  703. package/node_modules/sharp/dist/resize.mjs +0 -617
  704. package/node_modules/sharp/dist/sharp.cjs +0 -174
  705. package/node_modules/sharp/dist/sharp.mjs +0 -174
  706. package/node_modules/sharp/dist/utility.cjs +0 -301
  707. package/node_modules/sharp/dist/utility.mjs +0 -301
  708. package/node_modules/sharp/install/build.js +0 -38
  709. package/node_modules/sharp/lib/index.d.ts +0 -1999
  710. package/node_modules/sharp/package.json +0 -227
  711. package/node_modules/sharp/src/binding.gyp +0 -303
  712. package/node_modules/sharp/src/common.cc +0 -1186
  713. package/node_modules/sharp/src/common.h +0 -421
  714. package/node_modules/sharp/src/metadata.cc +0 -404
  715. package/node_modules/sharp/src/metadata.h +0 -95
  716. package/node_modules/sharp/src/operations.cc +0 -516
  717. package/node_modules/sharp/src/operations.h +0 -137
  718. package/node_modules/sharp/src/pipeline.cc +0 -1948
  719. package/node_modules/sharp/src/pipeline.h +0 -422
  720. package/node_modules/sharp/src/sharp.cc +0 -43
  721. package/node_modules/sharp/src/stats.cc +0 -186
  722. package/node_modules/sharp/src/stats.h +0 -62
  723. package/node_modules/sharp/src/utilities.cc +0 -289
  724. package/node_modules/sharp/src/utilities.h +0 -22
  725. package/node_modules/string-width/index.d.ts +0 -29
  726. package/node_modules/string-width/index.js +0 -47
  727. package/node_modules/string-width/license +0 -9
  728. package/node_modules/string-width/package.json +0 -56
  729. package/node_modules/string-width/readme.md +0 -50
  730. package/node_modules/strip-ansi/index.d.ts +0 -17
  731. package/node_modules/strip-ansi/index.js +0 -4
  732. package/node_modules/strip-ansi/license +0 -9
  733. package/node_modules/strip-ansi/package.json +0 -54
  734. package/node_modules/strip-ansi/readme.md +0 -46
  735. package/node_modules/which-module/LICENSE +0 -13
  736. package/node_modules/which-module/README.md +0 -58
  737. package/node_modules/which-module/index.js +0 -9
  738. package/node_modules/which-module/package.json +0 -41
  739. package/node_modules/wrap-ansi/index.js +0 -186
  740. package/node_modules/wrap-ansi/license +0 -9
  741. package/node_modules/wrap-ansi/package.json +0 -61
  742. package/node_modules/wrap-ansi/readme.md +0 -97
  743. package/node_modules/ws/LICENSE +0 -20
  744. package/node_modules/ws/README.md +0 -548
  745. package/node_modules/ws/browser.js +0 -8
  746. package/node_modules/ws/index.js +0 -22
  747. package/node_modules/ws/lib/buffer-util.js +0 -131
  748. package/node_modules/ws/lib/constants.js +0 -19
  749. package/node_modules/ws/lib/event-target.js +0 -292
  750. package/node_modules/ws/lib/extension.js +0 -203
  751. package/node_modules/ws/lib/limiter.js +0 -55
  752. package/node_modules/ws/lib/permessage-deflate.js +0 -530
  753. package/node_modules/ws/lib/receiver.js +0 -743
  754. package/node_modules/ws/lib/sender.js +0 -607
  755. package/node_modules/ws/lib/stream.js +0 -161
  756. package/node_modules/ws/lib/subprotocol.js +0 -62
  757. package/node_modules/ws/lib/validation.js +0 -152
  758. package/node_modules/ws/lib/websocket-server.js +0 -562
  759. package/node_modules/ws/lib/websocket.js +0 -1407
  760. package/node_modules/ws/package.json +0 -74
  761. package/node_modules/ws/wrapper.mjs +0 -21
  762. package/node_modules/y18n/CHANGELOG.md +0 -35
  763. package/node_modules/y18n/LICENSE +0 -13
  764. package/node_modules/y18n/README.md +0 -109
  765. package/node_modules/y18n/index.js +0 -188
  766. package/node_modules/y18n/package.json +0 -39
  767. package/node_modules/yargs/CHANGELOG.md +0 -420
  768. package/node_modules/yargs/LICENSE +0 -21
  769. package/node_modules/yargs/README.md +0 -140
  770. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  771. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  772. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  773. package/node_modules/yargs/build/lib/argsert.js +0 -65
  774. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  775. package/node_modules/yargs/build/lib/command.js +0 -416
  776. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  777. package/node_modules/yargs/build/lib/common-types.js +0 -25
  778. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  779. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  780. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  781. package/node_modules/yargs/build/lib/completion.js +0 -135
  782. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  783. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  784. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  785. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  786. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  787. package/node_modules/yargs/build/lib/middleware.js +0 -57
  788. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  789. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  790. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  791. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  792. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  793. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  794. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  795. package/node_modules/yargs/build/lib/usage.js +0 -540
  796. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  797. package/node_modules/yargs/build/lib/validation.js +0 -330
  798. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  799. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  800. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  801. package/node_modules/yargs/build/lib/yerror.js +0 -11
  802. package/node_modules/yargs/index.js +0 -40
  803. package/node_modules/yargs/locales/be.json +0 -46
  804. package/node_modules/yargs/locales/de.json +0 -46
  805. package/node_modules/yargs/locales/en.json +0 -51
  806. package/node_modules/yargs/locales/es.json +0 -46
  807. package/node_modules/yargs/locales/fi.json +0 -49
  808. package/node_modules/yargs/locales/fr.json +0 -53
  809. package/node_modules/yargs/locales/hi.json +0 -49
  810. package/node_modules/yargs/locales/hu.json +0 -46
  811. package/node_modules/yargs/locales/id.json +0 -50
  812. package/node_modules/yargs/locales/it.json +0 -46
  813. package/node_modules/yargs/locales/ja.json +0 -51
  814. package/node_modules/yargs/locales/ko.json +0 -49
  815. package/node_modules/yargs/locales/nb.json +0 -44
  816. package/node_modules/yargs/locales/nl.json +0 -49
  817. package/node_modules/yargs/locales/nn.json +0 -44
  818. package/node_modules/yargs/locales/pirate.json +0 -13
  819. package/node_modules/yargs/locales/pl.json +0 -49
  820. package/node_modules/yargs/locales/pt.json +0 -45
  821. package/node_modules/yargs/locales/pt_BR.json +0 -48
  822. package/node_modules/yargs/locales/ru.json +0 -46
  823. package/node_modules/yargs/locales/th.json +0 -46
  824. package/node_modules/yargs/locales/tr.json +0 -48
  825. package/node_modules/yargs/locales/zh_CN.json +0 -48
  826. package/node_modules/yargs/locales/zh_TW.json +0 -47
  827. package/node_modules/yargs/package.json +0 -92
  828. package/node_modules/yargs/yargs.js +0 -14
  829. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  830. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  831. package/node_modules/yargs-parser/README.md +0 -449
  832. package/node_modules/yargs-parser/index.js +0 -1032
  833. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  834. package/node_modules/yargs-parser/package.json +0 -46
@@ -0,0 +1,118 @@
1
+ import fs from 'node:fs';
2
+ import { createHash } from 'node:crypto';
3
+ import { fileURLToPath } from 'node:url';
4
+ import mysql from 'mysql2/promise';
5
+ import { deviceStore } from './device-store.mjs';
6
+ import { relayAdminState } from './admin-state.mjs';
7
+ import { relaySchemaVersions } from '../../database/versions.mjs';
8
+ import { connectionInfo } from './device-info.mjs';
9
+
10
+ const sqlTime = value => value.replace('T', ' ').replace(/Z$/, '');
11
+ const isoTime = value => value.replace(' ', 'T') + 'Z';
12
+
13
+ export async function openRelayMysql(configFile, initialMaxRelaySessions) {
14
+ const config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
15
+ if (!config.database || !config.user || !config.password || !(config.socketPath || config.host)) {
16
+ throw new Error('Incomplete relay MySQL configuration');
17
+ }
18
+ const pool = mysql.createPool({ ...config, waitForConnections: true, connectionLimit: 4,
19
+ namedPlaceholders: false, dateStrings: true, timezone: 'Z', multipleStatements: false });
20
+ try {
21
+ const [versions] = await pool.query('SELECT version, sha256 FROM schema_migrations');
22
+ const knownVersions = relaySchemaVersions;
23
+ if (!versions.some(row => row.version === knownVersions[0]) || versions.length > knownVersions.length) throw new Error('Unexpected relay database schema');
24
+ for (const row of versions) {
25
+ if (!knownVersions.includes(row.version)) throw new Error('Unexpected relay database schema');
26
+ const source = fs.readFileSync(fileURLToPath(new URL(`../../database/${row.version}.sql`, import.meta.url)));
27
+ if (row.sha256 !== createHash('sha256').update(source).digest('hex')) throw new Error(`Unexpected relay database schema: ${row.version}`);
28
+ }
29
+ const [computers] = await pool.query('SELECT id, host_hash, status, revision, created_at, updated_at FROM computers');
30
+ const [clients] = await pool.query('SELECT computer_id, client_id, credential_hash, created_at, updated_at, last_connected_at, platform, device_name FROM mobile_authorizations ORDER BY created_at');
31
+ const [official] = await pool.query('SELECT computer_id, environment_id, name, hostname, updated_at FROM official_computers');
32
+ const records = new Map(computers.map(row => [row.id, { id: row.id, hostHash: row.host_hash, status: row.status,
33
+ revision: Number(row.revision), createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at), clients: [] }]));
34
+ for (const row of clients) {
35
+ const record = records.get(row.computer_id);
36
+ if (!record) throw new Error('Orphan mobile authorization');
37
+ record.clients.push({ id: row.client_id, hash: row.credential_hash,
38
+ createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at),
39
+ ...(row.last_connected_at ? { lastConnectedAt: isoTime(row.last_connected_at) } : {}),
40
+ ...(row.platform ? { platform: row.platform } : {}), ...(row.device_name ? { deviceName: row.device_name } : {}) });
41
+ }
42
+ for (const row of official) {
43
+ const record = records.get(row.computer_id);
44
+ if (!record) throw new Error('Orphan official computer');
45
+ record.officialComputer = { environmentId: row.environment_id, name: row.name,
46
+ hostname: row.hostname, updatedAt: isoTime(row.updated_at) };
47
+ }
48
+ const validator = deviceStore();
49
+ for (const record of records.values()) validator.save(record);
50
+
51
+ const [settings] = await pool.query('SELECT max_relay_sessions FROM relay_settings WHERE id = 1');
52
+ if (settings.length !== 1) throw new Error('Missing relay settings');
53
+ const [rows] = await pool.query('SELECT id, title, message, status, created_at, updated_at, published_at FROM announcements ORDER BY created_at DESC');
54
+ const announcements = rows.map(row => ({ id: row.id, title: row.title, message: row.message, status: row.status,
55
+ createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at),
56
+ publishedAt: row.published_at ? isoTime(row.published_at) : null }));
57
+ const active = announcements.find(item => item.status === 'active');
58
+ const initial = { version: 3, maxRelaySessions: settings[0].max_relay_sessions, announcements,
59
+ announcement: active ? { id: active.id, title: active.title, message: active.message, publishedAt: active.publishedAt } : null };
60
+ const admin = relayAdminState(undefined, initialMaxRelaySessions, { initial, persist: async next => {
61
+ const connection = await pool.getConnection();
62
+ try {
63
+ await connection.beginTransaction();
64
+ await connection.execute('UPDATE relay_settings SET max_relay_sessions = ?, updated_at = UTC_TIMESTAMP(3) WHERE id = 1', [next.maxRelaySessions]);
65
+ await connection.query('DELETE FROM announcements');
66
+ for (const item of next.announcements) await connection.execute(
67
+ 'INSERT INTO announcements (id,title,message,status,created_at,updated_at,published_at) VALUES (?,?,?,?,?,?,?)',
68
+ [item.id, item.title, item.message, item.status, sqlTime(item.createdAt), sqlTime(item.updatedAt),
69
+ item.publishedAt ? sqlTime(item.publishedAt) : null]);
70
+ await connection.commit();
71
+ } catch (error) { await connection.rollback(); throw error; }
72
+ finally { connection.release(); }
73
+ } });
74
+ return {
75
+ pool,
76
+ schemaVersions: versions.map(row => row.version),
77
+ devices: {
78
+ entries: () => [...records.values()],
79
+ async recordConnection(id, clientId, at, info) {
80
+ const record = records.get(id), client = record?.clients.find(item => item.id === clientId);
81
+ if (!client) return;
82
+ const updated = connectionInfo(client, at, info);
83
+ await pool.execute('UPDATE mobile_authorizations SET last_connected_at=?,platform=?,device_name=? WHERE computer_id=? AND client_id=?',
84
+ [sqlTime(updated.lastConnectedAt), updated.platform || null, updated.deviceName || null, id, clientId]);
85
+ records.set(id, { ...record, clients: record.clients.map(item => item.id === clientId ? updated : item) });
86
+ return updated;
87
+ },
88
+ async save(record) {
89
+ validator.save(record);
90
+ const connection = await pool.getConnection();
91
+ try {
92
+ await connection.beginTransaction();
93
+ await connection.execute(`INSERT INTO computers (id,host_hash,status,revision,created_at,updated_at)
94
+ VALUES (?,?,?,?,?,?) ON DUPLICATE KEY UPDATE host_hash=VALUES(host_hash),status=VALUES(status),
95
+ revision=VALUES(revision),updated_at=VALUES(updated_at)`,
96
+ [record.id, record.hostHash, record.status, record.revision, sqlTime(record.createdAt), sqlTime(record.updatedAt)]);
97
+ await connection.execute('DELETE FROM mobile_authorizations WHERE computer_id = ?', [record.id]);
98
+ for (const client of record.clients) await connection.execute(
99
+ 'INSERT INTO mobile_authorizations (computer_id,client_id,credential_hash,created_at,updated_at,last_connected_at,platform,device_name) VALUES (?,?,?,?,?,?,?,?)',
100
+ [record.id, client.id, client.hash, sqlTime(client.createdAt), sqlTime(client.updatedAt),
101
+ client.lastConnectedAt ? sqlTime(client.lastConnectedAt) : null, client.platform || null, client.deviceName || null]);
102
+ if (record.officialComputer) {
103
+ const item = record.officialComputer;
104
+ await connection.execute(`INSERT INTO official_computers (computer_id,environment_id,name,hostname,updated_at)
105
+ VALUES (?,?,?,?,?) ON DUPLICATE KEY UPDATE environment_id=VALUES(environment_id),name=VALUES(name),
106
+ hostname=VALUES(hostname),updated_at=VALUES(updated_at)`,
107
+ [record.id, item.environmentId, item.name, item.hostname, sqlTime(item.updatedAt)]);
108
+ }
109
+ await connection.commit(); records.set(record.id, record);
110
+ } catch (error) { await connection.rollback(); throw error; }
111
+ finally { connection.release(); }
112
+ },
113
+ },
114
+ admin,
115
+ close: () => pool.end(),
116
+ };
117
+ } catch (error) { await pool.end(); throw error; }
118
+ }
@@ -1,61 +1,145 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import P2pDiagnostics from '../../shared/p2p-diagnostics.cjs';
3
+ import P2pDataFramer from '../../shared/p2p-data-channel.cjs';
4
+ import FileChannel from '../../shared/p2p-file-channel.cjs';
5
+ import IcePolicy from '../../shared/p2p-ice-policy.cjs';
3
6
 
4
- // Reserve this narrow range so a full-TUN client can identify only the P2P UDP flow.
5
7
  const PROBE_UDP_PORT_RANGE = Object.freeze({ begin: 42000, end: 42031 });
8
+ const HIGH_WATER = 1024 * 1024;
9
+ const LOW_WATER = 512 * 1024;
10
+ const MAX_QUEUED = 16 * 1024 * 1024;
6
11
 
7
- // Capability probe only: never accepts or forwards Bridge business messages.
8
- export async function createP2pProbe({ signal, report = () => {}, iceServers = [] }) {
12
+ export async function createP2pProbe({ signal, report = () => {}, onData = () => {}, onFileChannel, iceServers = [], purpose = '' }) {
9
13
  if (!validProbeIceServers(iceServers)) throw new Error('Invalid probe STUN configuration');
10
14
  const { default: rtc } = await import('node-datachannel');
11
15
  const peer = new rtc.PeerConnection('code-relax-probe', {
12
16
  iceServers,
13
- maxMessageSize: 4096,
17
+ maxMessageSize: 65536,
14
18
  portRangeBegin: PROBE_UDP_PORT_RANGE.begin,
15
19
  portRangeEnd: PROBE_UDP_PORT_RANGE.end
16
20
  });
17
21
  const diagnostic = new P2pDiagnostics();
18
- let channel, closed = false, answered = false, candidates = [], received = 0, verified = false;
22
+ const framer = new P2pDataFramer();
23
+ const dataPrefix = randomUUID().replaceAll('-', '');
24
+ let channel, closed = false, answered = false, candidates = [], verified = false, remoteDirect = false;
25
+ let pingReceived = false, pongReceived = false, dataSerial = 0, queuedBytes = 0;
26
+ const outbound = [];
27
+ const files = new Map();
19
28
  const nonce = randomUUID();
29
+ const idle = new P2pDataFramer.IdleWatch(message => {
30
+ channel.sendMessage(JSON.stringify(message));
31
+ }, () => finish('idle-timeout'));
20
32
  const timer = setTimeout(() => finish(verified ? 'closed' : 'timeout'), 15000);
21
33
  function finish(state) {
22
34
  if (closed) return;
23
- closed = true; clearTimeout(timer); candidates = [];
35
+ closed = true; clearTimeout(timer); idle.close(); candidates = []; queuedBytes = 0; outbound.length = 0; framer.reset();
36
+ for (const socket of files.values()) socket.close(1011);
37
+ files.clear();
24
38
  const summary = diagnostic.snapshot(state);
25
39
  channel?.close(); peer.close(); report(state, summary);
40
+ signal({ kind: 'close' });
41
+ }
42
+ function verify() {
43
+ if (verified || !pingReceived || !pongReceived) return;
44
+ const pair = peer.getSelectedCandidatePair();
45
+ if (!pair || !IcePolicy.pair(pair.local.type, pair.remote.type)) { diagnostic.error = 'ice-policy'; finish('failed'); return; }
46
+ verified = true; clearTimeout(timer);
47
+ if (remoteDirect) idle.received();
48
+ report(remoteDirect ? 'direct' : 'verified', diagnostic.snapshot('verified'));
49
+ pump();
50
+ for (const raw of files.keys()) activateFile(raw);
51
+ }
52
+ function activateFile(raw) {
53
+ const socket = files.get(raw);
54
+ if (!socket || socket.readyState !== 0 || !raw.isOpen() || !verified || !remoteDirect || closed) return;
55
+ socket.opened();
56
+ raw.sendMessage('{"type":"rtc-file-ready"}');
57
+ }
58
+ peer.onDataChannel(raw => {
59
+ if (closed || purpose !== 'file' || !onFileChannel || raw.getLabel() !== 'code-relax-file-v1' || files.size >= 4) { raw.close(); return; }
60
+ const socket = new FileChannel({ buffered: () => raw.bufferedAmount(), maxMessageSize: () => peer.maxMessageSize(),
61
+ send: value => typeof value === 'string' ? raw.sendMessage(value) : raw.sendMessageBinary(value), close: () => raw.close(), received: () => idle.received() });
62
+ files.set(raw, socket);
63
+ socket.addEventListener('close', () => files.delete(raw));
64
+ try { onFileChannel(socket); }
65
+ catch { socket.close(1011); return; }
66
+ raw.setBufferedAmountLowThreshold(128 * 1024);
67
+ raw.onBufferedAmountLow(() => socket.pump());
68
+ raw.onOpen(() => activateFile(raw));
69
+ raw.onClosed(() => socket.close(1011)); raw.onError(() => socket.close(1011));
70
+ raw.onMessage(value => {
71
+ if (!verified || !remoteDirect || closed || socket.readyState !== 1) { socket.close(1008); return; }
72
+ socket.receive(value);
73
+ });
74
+ activateFile(raw);
75
+ });
76
+ function pump() {
77
+ if (!verified || !remoteDirect || closed || !channel?.isOpen()) return;
78
+ try {
79
+ while (outbound.length && channel.bufferedAmount() < HIGH_WATER) {
80
+ const item = outbound[0], frame = framer.frame(item);
81
+ // false means accepted into libdatachannel's buffer, not rejected. Never replay it.
82
+ channel.sendMessage(frame);
83
+ if (framer.commit(item)) { outbound.shift(); queuedBytes -= item.bytes; }
84
+ }
85
+ } catch { diagnostic.error = 'channel'; finish('failed'); }
86
+ }
87
+ function sendData(payload) {
88
+ if (!verified || !remoteDirect || closed || purpose === 'file' || !channel?.isOpen()) return false;
89
+ let item;
90
+ try { item = framer.create(payload, `${dataPrefix}-${++dataSerial}`); }
91
+ catch { return false; }
92
+ if (queuedBytes + item.bytes > MAX_QUEUED) return false;
93
+ outbound.push(item); queuedBytes += item.bytes; pump(); return true;
26
94
  }
27
95
  peer.onIceStateChange(state => { if (!closed) diagnostic.ice = state; });
28
96
  peer.onGatheringStateChange(state => { if (!closed) diagnostic.gathering = state; });
29
97
  peer.onStateChange(state => { if (!closed && (state === 'failed' || state === 'closed')) { diagnostic.error = 'peer'; finish('failed'); } });
30
- peer.onLocalDescription((sdp, type) => { if (!closed) { diagnostic.offer = type === 'offer'; signal({ kind: type, sdp, iceServers }); } });
31
- peer.onLocalCandidate((candidate, mid) => { if (!closed) { diagnostic.candidate('local', candidate); signal({ kind: 'candidate', candidate, mid }); } });
98
+ peer.onLocalDescription((sdp, type) => { if (!closed) { diagnostic.offer = type === 'offer'; signal({ kind: type, sdp, iceServers, direct: 1 }); } });
99
+ peer.onLocalCandidate((candidate, mid) => {
100
+ if (closed) return;
101
+ if (!IcePolicy.candidate(candidate)) { diagnostic.error = 'ice-policy'; finish('failed'); return; }
102
+ diagnostic.candidate('local', candidate); signal({ kind: 'candidate', candidate, mid });
103
+ });
32
104
  channel = peer.createDataChannel('code-relax-probe-v1');
105
+ channel.setBufferedAmountLowThreshold(LOW_WATER);
106
+ channel.onBufferedAmountLow(pump);
33
107
  channel.onOpen(() => { if (!closed) { diagnostic.open = true; channel.sendMessage(JSON.stringify({ type: 'ping', nonce })); } });
34
108
  channel.onError(() => { if (!closed) diagnostic.error = 'channel'; finish('failed'); });
35
109
  channel.onClosed(() => finish('closed'));
36
110
  channel.onMessage(value => {
37
111
  try {
38
- if (closed) return;
39
- if (typeof value !== 'string' || value.length > 4096 || ++received > 4) throw new Error('Invalid probe frame');
112
+ if (closed || typeof value !== 'string' || value.length > 65536) throw new Error('Invalid P2P frame');
40
113
  const message = JSON.parse(value);
114
+ if (verified && remoteDirect && idle.accept(message)) return;
115
+ const data = framer.accept(message);
116
+ if (data.handled) {
117
+ if (!verified || !remoteDirect || purpose === 'file') throw new Error('P2P transport not verified');
118
+ idle.received();
119
+ if (data.complete) onData(data.payload);
120
+ return;
121
+ }
41
122
  if (message.type === 'ping' && /^[\w-]{16,128}$/.test(message.nonce)) {
42
- diagnostic.ping = true;
123
+ diagnostic.ping = true; pingReceived = true;
43
124
  channel.sendMessage(JSON.stringify({ type: 'pong', nonce: message.nonce }));
44
125
  } else if (message.type === 'pong' && message.nonce === nonce) {
45
- diagnostic.pong = true; verified = true; report('verified', diagnostic.snapshot('verified'));
46
- } else throw new Error('Invalid probe response');
126
+ diagnostic.pong = true; pongReceived = true;
127
+ } else throw new Error('Invalid P2P response');
128
+ verify();
47
129
  } catch { diagnostic.error = 'frame'; finish('failed'); }
48
130
  });
49
131
  return {
50
132
  receive(message) {
51
133
  if (closed) return;
52
134
  if (message.kind === 'answer' && !answered) {
135
+ if (!IcePolicy.sdp(message.sdp)) { diagnostic.error = 'ice-policy'; finish('failed'); return; }
53
136
  try { peer.setRemoteDescription(message.sdp, 'answer'); }
54
137
  catch { diagnostic.error = 'description'; finish('failed'); return; }
55
- answered = true; diagnostic.answer = true;
138
+ answered = true; remoteDirect = message.direct === 1; diagnostic.answer = true;
56
139
  for (const item of candidates) peer.addRemoteCandidate(item.candidate, item.mid);
57
140
  candidates = [];
58
141
  } else if (message.kind === 'candidate') {
142
+ if (!IcePolicy.candidate(message.candidate)) { diagnostic.error = 'ice-policy'; finish('failed'); return; }
59
143
  diagnostic.candidate('remote', message.candidate);
60
144
  if (answered) peer.addRemoteCandidate(message.candidate, message.mid);
61
145
  else if (candidates.length < 64) candidates.push(message);
@@ -63,6 +147,7 @@ export async function createP2pProbe({ signal, report = () => {}, iceServers = [
63
147
  } else if (message.kind === 'close') finish('closed');
64
148
  else finish('failed');
65
149
  },
150
+ send: sendData,
66
151
  close() { finish('closed'); }
67
152
  };
68
153
  }
@@ -70,14 +155,14 @@ export async function createP2pProbe({ signal, report = () => {}, iceServers = [
70
155
  export function validProbeSignal(value) {
71
156
  if (!value || value.version !== 1 || !/^[\w-]{16,128}$/.test(value.probeId || '')) return false;
72
157
  if (['start', 'close'].includes(value.kind)) return true;
73
- if (['offer', 'answer'].includes(value.kind)) return typeof value.sdp === 'string' && value.sdp.length <= 65536 &&
158
+ if (['offer', 'answer'].includes(value.kind)) return IcePolicy.sdp(value.sdp) &&
159
+ (value.direct === undefined || value.direct === 0 || value.direct === 1) &&
74
160
  (value.iceServers === undefined || validProbeIceServers(value.iceServers));
75
- if (value.kind === 'candidate') return typeof value.candidate === 'string' && value.candidate.length <= 2048 &&
161
+ if (value.kind === 'candidate') return IcePolicy.candidate(value.candidate) &&
76
162
  typeof value.mid === 'string' && value.mid.length <= 64;
77
163
  return false;
78
164
  }
79
165
 
80
166
  export function validProbeIceServers(value) {
81
- return Array.isArray(value) && value.length <= 4 && value.every(item =>
82
- typeof item === 'string' && /^stun:[a-zA-Z0-9.-]+:[0-9]{1,5}$/.test(item) && Number(item.split(':').at(-1)) <= 65535);
167
+ return IcePolicy.servers(value);
83
168
  }
@@ -0,0 +1,55 @@
1
+ import { validId } from './device-store.mjs';
2
+
3
+ export function validPhoneConnection(value) {
4
+ return value && validId(value.connectionId) && validId(value.clientId) && ['lan', 'self-relay'].includes(value.mode);
5
+ }
6
+
7
+ export function phoneConnectionEvents(pool) {
8
+ const recent = new Map();
9
+ const lastConnections = new Map();
10
+ return {
11
+ async record(computerId, event) {
12
+ if (!validPhoneConnection(event) || !validId(event.id) ||
13
+ !['connected', 'disconnected'].includes(event.state) ||
14
+ typeof event.at !== 'string' || !/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$/.test(event.at) ||
15
+ !Number.isFinite(Date.parse(event.at)) || new Date(event.at).toISOString() !== event.at) throw new Error('Invalid phone connection event');
16
+ const item = { id: event.id, connectionId: event.connectionId, clientId: event.clientId,
17
+ mode: event.mode, state: event.state, at: event.at, receivedAt: new Date().toISOString() };
18
+ if (pool) await pool.execute(`INSERT INTO workstation_phone_events
19
+ (event_id,computer_id,client_id,connection_id,mode,state,occurred_at,received_at) VALUES (?,?,?,?,?,?,?,?)
20
+ ON DUPLICATE KEY UPDATE event_id=event_id`,
21
+ [item.id, computerId, item.clientId, item.connectionId, item.mode, item.state,
22
+ item.at.slice(0, 23).replace('T', ' '), item.receivedAt.slice(0, 23).replace('T', ' ')]);
23
+ else {
24
+ const items = recent.get(computerId) || [];
25
+ if (!items.some(value => value.id === item.id)) items.push(item);
26
+ recent.set(computerId, items.slice(-20));
27
+ if (item.state === 'connected') {
28
+ const phones = lastConnections.get(computerId) || new Map();
29
+ if (!phones.has(item.clientId) || phones.get(item.clientId).at <= item.at) phones.set(item.clientId, item);
30
+ lastConnections.set(computerId, phones);
31
+ }
32
+ }
33
+ },
34
+ async latest(computerIds) {
35
+ if (!computerIds.length) return [];
36
+ if (!pool) return computerIds.flatMap(computerId => [...(lastConnections.get(computerId)?.values() || [])]
37
+ .map(item => ({ computerId, clientId: item.clientId, mode: item.mode, at: item.at })));
38
+ const [rows] = await pool.execute(`SELECT computer_id,client_id,mode,occurred_at FROM (
39
+ SELECT computer_id,client_id,mode,occurred_at,
40
+ ROW_NUMBER() OVER (PARTITION BY computer_id,client_id ORDER BY occurred_at DESC,sequence_id DESC) AS connection_rank
41
+ FROM workstation_phone_events WHERE state='connected' AND computer_id IN (${computerIds.map(() => '?').join(',')})
42
+ ) latest WHERE connection_rank=1`, computerIds);
43
+ return rows.map(row => ({ computerId: row.computer_id, clientId: row.client_id,
44
+ mode: row.mode, at: row.occurred_at.replace(' ', 'T') + 'Z' }));
45
+ },
46
+ async list(computerId) {
47
+ if (!pool) return [...(recent.get(computerId) || [])].reverse();
48
+ const [rows] = await pool.execute(`SELECT event_id,client_id,connection_id,mode,state,occurred_at,received_at
49
+ FROM workstation_phone_events WHERE computer_id=? ORDER BY sequence_id DESC LIMIT 20`, [computerId]);
50
+ return rows.map(row => ({ id: row.event_id, clientId: row.client_id, connectionId: row.connection_id,
51
+ mode: row.mode, state: row.state, at: row.occurred_at.replace(' ', 'T') + 'Z',
52
+ receivedAt: row.received_at.replace(' ', 'T') + 'Z' }));
53
+ },
54
+ };
55
+ }
@@ -0,0 +1,26 @@
1
+ // Public policy page: no scripts, cookies, external assets or native bridge.
2
+ export const privacyPage = `<!doctype html>
3
+ <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="color-scheme" content="light dark"><title>Code Relax 隐私政策</title>
4
+ <style>:root{--page-background:#ffffff;--primary-text:#202520;--secondary-text:#667066;--surface-border:#d5ddd8;--space:16px;--body:14px;--title:20px}@media(prefers-color-scheme:dark){:root{--page-background:#181d1a;--primary-text:#eef4ef;--secondary-text:#a5afa7;--surface-border:#354139}}*{box-sizing:border-box}body{margin:0;padding:24px var(--space);background:var(--page-background);color:var(--primary-text);font:var(--body)/1.8 system-ui,sans-serif;overflow-wrap:anywhere}main{max-width:720px;margin:auto}h1{font-size:var(--title)}h2{font-size:16px;margin-top:24px}p,li{margin-block:8px}.meta{color:var(--secondary-text)}a{color:inherit}footer{margin-top:24px;border-top:1px solid var(--surface-border);padding-top:var(--space)}</style></head><body><main>
5
+ <h1>Code Relax 隐私政策</h1><p class="meta">更新及生效日期:2026 年 9 月 26 日<br>运营者:房鹤<br>联系邮箱:wyshmily@126.com</p>
6
+ <p>Code Relax 用于通过手机访问您已授权的电脑上的 Codex。本文说明当前私测版本如何处理信息。请在使用邮箱账号、配对、语音、图片或文件功能前阅读;相关权限在您使用对应功能时申请。</p>
7
+ <h2>一、我们处理哪些信息</h2>
8
+ <ul><li><strong>邮箱账号:</strong>邮箱地址、验证状态、账号标识、登录会话及验证码校验记录,用于登录、身份校验和注销。验证码不以明文保存;服务端保存登录令牌的哈希。</li>
9
+ <li><strong>工作站配对:</strong>工作站标识、名称、连接地址和配对授权标识,用于发现、鉴权和重新连接。工作站及手机凭据保存在各自设备的受保护存储中,云端保存凭据哈希。</li>
10
+ <li><strong>聊天与附件:</strong>您输入的文本、所选图片或文件、Codex 的回复和工具状态,用于远程交互。局域网直连不经过 Code Relax 云中继;使用 Code Relax 中继时,业务数据可能经服务器转发,采用 TLS 传输,目前不提供端到端加密。中继不以聊天历史库或附件库的形式保存这些内容。工作站会保存收到的附件,Codex 历史由电脑上的 Codex 管理。</li>
11
+ <li><strong>用量与诊断:</strong>账号、工作站、手机授权标识、消息/轮次标识、数量、任务时长及时间记录,用于展示服务用量与排障;服务还会产生必要的连接、错误和访问日志,可能包含 IP 地址、设备标识和时间。我们不以用量统计为目的记录聊天正文。</li>
12
+ <li><strong>手机缓存:</strong>手机保留配对记录、账号凭据、展示历史、缩略图和诊断日志,以支持恢复和显示。当前历史与图片缓存有容量淘汰策略,缓存并非电脑原始历史的唯一副本。</li></ul>
13
+ <h2>二、权限与第三方服务</h2>
14
+ <p>扫码时使用相机,语音录入时使用麦克风与华为系统语音识别,添加附件时读取您选择的图片或文件。语音识别由手机系统能力完成,识别结果用于输入框;Code Relax 不建立云端录音库。系统服务自身的信息处理以对应服务说明为准。</p>
15
+ <p>邮箱验证码使用腾讯云邮件推送;人机验证使用腾讯云验证码服务,涉及邮箱、IP 及验证票据等完成验证所需信息。服务部署于腾讯云基础设施。使用 OpenAI 登录、官方中继及 Codex 时,相关账号与业务数据由 OpenAI 按其政策处理;Code Relax 邮箱账号不等于 OpenAI 账号。我们不出售您的个人信息,不使用广告 SDK。</p>
16
+ <h2>三、保存和删除</h2>
17
+ <p>邮箱账号信息与账号用量明细在账号存续期间保存。注销后账号立即停用,相关个人信息及账号用量记录将在7天内删除。清理期间该邮箱暂时无法注册或登录;清理完成后,同一邮箱可重新注册为新用户,不继承原账号记录或额度。登录会话有效期为 30 天,邮件验证码有效期为 10 分钟;有效期指授权或验证有效时间,不代表数据库记录恰好在该时刻物理清除。安全限流记录、诊断及系统日志按其用途和清理策略保留;您可通过上述邮箱申请查询或删除与您相关的信息。</p>
18
+ <p>服务器部署会生成受访问限制的数据库备份,仅用于故障恢复;这些备份定时过期清理,注销相关账号数据及备份副本的清理纳入上述7天期限。</p>
19
+ <h2>四、账号注销与您的选择</h2>
20
+ <p>您可在“我的账号 → 注销账号”确认注销。确认后账号被标记为已注销,全部登录会话失效,停止账号计时并断开该账号中继业务连接;如有管理员权限,也不能继续使用。邮箱登录身份、会话、账号用量和账号关联记录将在7天内删除;7天是最长期限,不代表必须保留满7天。清理完成前不能用同一邮箱注册或登录,清理完成后可重新注册。</p>
21
+ <p><strong>注销 Code Relax 账号不会删除电脑上的 Codex 对话和文件、OpenAI 账号,也不会撤销独立的工作站与手机配对授权。</strong>如需撤销配对,请在工作站授权管理中处理。工作站级汇总统计与独立设备授权记录可能继续保留;这些记录不应被理解为完全匿名数据。手机已有历史缓存也不会因邮箱账号注销而全部清除;可通过清除 App 数据或卸载清理本地数据,此操作会丢失本机保存的配对凭据。</p>
22
+ <p>您可联系运营者申请查询、更正、删除相关个人信息、说明保存期限或提出投诉。我们会核验请求者身份,并在收到有效请求后 15 个工作日内答复处理情况;必要的核验只用于保护您的账号与数据。</p>
23
+ <h2>五、政策更新</h2>
24
+ <p>当处理目的、信息类型或服务发生变化时,我们会更新本页面,并按变化情况在应用中告知、取得必要的授权。本页面的说明必须与实际功能一致;未启用的社区、广告或付费功能不作为本政策已实施的内容。</p>
25
+ <footer>运营者:房鹤<br>个人信息与账号问题:wyshmily@126.com</footer>
26
+ </main></body></html>`;
@@ -0,0 +1,67 @@
1
+ import fs from 'node:fs';
2
+
3
+ export const publicManifestFile = '/var/www/coderelax-homepage/release-status.json';
4
+ export function readPublicManifest(file = publicManifestFile) {
5
+ const manifest = JSON.parse(fs.readFileSync(file, 'utf8'));
6
+ if (manifest.schemaVersion !== 1 || ['windows', 'macos', 'linux', 'harmonyos', 'android', 'ios']
7
+ .some(key => !manifest[key] || typeof manifest[key].statusText?.zh !== 'string'
8
+ || typeof manifest[key].statusText?.en !== 'string')) throw new Error('Invalid public platform manifest');
9
+ return manifest;
10
+ }
11
+
12
+ export function updatePublicAndroid(release, file = publicManifestFile) {
13
+ if (!Number.isSafeInteger(release.versionCode) || release.versionCode <= 0
14
+ || !/^\d+\.\d+\.\d+\.\d+$/.test(release.versionName)
15
+ || !Number.isSafeInteger(release.size) || release.size <= 0
16
+ || !/^[a-f0-9]{64}$/.test(release.sha256)) throw new Error('Invalid public Android release');
17
+ return updateMobileManifest('android', release, file);
18
+ }
19
+
20
+ export function updatePublicHarmony(release, file = publicManifestFile) {
21
+ if (!Number.isSafeInteger(release.versionCode) || !/^\d+\.\d+\.\d+$/.test(release.versionName)
22
+ || !/^[a-f0-9]{64}$/.test(release.sha256) || !Number.isSafeInteger(release.size) || release.size <= 0
23
+ || release.manifestUrl !== `https://download.coderelax.cn/code-relax/harmony/${release.versionCode}/manifest.json5`)
24
+ throw Error('Invalid public Harmony release');
25
+ return updateMobileManifest('harmonyos', release, file);
26
+ }
27
+
28
+ function updateMobileManifest(platform, release, file) {
29
+ return updatePublicManifest(manifest => {
30
+ if (manifest[platform].versionCode > release.versionCode) throw new Error('Public Android version would go backwards');
31
+ manifest[platform] = { status: 'published', statusText: { zh: '', en: '' }, version: release.versionName,
32
+ versionCode: release.versionCode, size: release.size, sha256: release.sha256,
33
+ url: `https://api.coderelax.cn/code-relax/android/download?versionCode=${release.versionCode}&redirect=1`, action: 'download' };
34
+ if (platform === 'harmonyos') {
35
+ manifest.harmonyos.statusText = { zh: '指定设备测试版', en: 'Registered-device test' };
36
+ manifest.harmonyos.url = 'https://www.coderelax.cn/code-relax/install';
37
+ manifest.harmonyos.manifestUrl = release.manifestUrl;
38
+ }
39
+ }, file);
40
+ }
41
+
42
+ export function updatePublicWorkstations(version, file = publicManifestFile) {
43
+ if (!/^\d+\.\d+\.\d+-beta\.\d+$/.test(version)) throw Error('Invalid npm version');
44
+ return updatePublicManifest(manifest => {
45
+ for (const platform of ['windows', 'macos', 'linux']) {
46
+ if (manifest[platform].status === 'published') manifest[platform].version = version;
47
+ }
48
+ }, file);
49
+ }
50
+
51
+ export function updatePublicManifest(update, file = publicManifestFile) {
52
+ const lock = file + '.lock', temporary = file + '.new';
53
+ const handle = fs.openSync(lock, 'wx', 0o600);
54
+ try {
55
+ const manifest = readPublicManifest(file);
56
+ update(manifest);
57
+ const owner = fs.statSync(file);
58
+ fs.writeFileSync(temporary, JSON.stringify(manifest, null, 2) + '\n', { mode: owner.mode & 0o777 });
59
+ fs.chmodSync(temporary, owner.mode & 0o777);
60
+ if (process.platform !== 'win32') fs.chownSync(temporary, owner.uid, owner.gid);
61
+ fs.renameSync(temporary, file);
62
+ } finally {
63
+ fs.closeSync(handle);
64
+ fs.unlinkSync(lock);
65
+ if (fs.existsSync(temporary)) fs.unlinkSync(temporary);
66
+ }
67
+ }
@@ -0,0 +1,46 @@
1
+ import WebSocket from 'ws';
2
+ import { loopbackUrl } from './wire.mjs';
3
+
4
+ // The RTC peer belongs to an authenticated relay chat session. Its teardown
5
+ // closes this channel on logout, expiry, revocation or signaling disconnect.
6
+ export function attachRtcFile(channel, connection, authorized, clientId) {
7
+ let local, authenticated = false;
8
+ const timer = setTimeout(() => channel.close(1008), 5000);
9
+ channel.addEventListener('close', () => { clearTimeout(timer); local?.terminate(); });
10
+ channel.onmessage = event => {
11
+ try {
12
+ if (!authorized()) throw new Error('File authorization expired');
13
+ if (!local) {
14
+ if (typeof event.data !== 'string') throw new Error('File authentication required');
15
+ const auth = JSON.parse(event.data);
16
+ if (auth.type !== 'auth' || !['upload', 'download'].includes(auth.purpose)) throw new Error('Invalid file purpose');
17
+ const url = new URL(connection.url); url.pathname = '/api/file-transfer';
18
+ loopbackUrl(url.href, '/api/file-transfer');
19
+ local = new WebSocket(url.href, { maxPayload: 512 * 1024, perMessageDeflate: false });
20
+ local.on('open', () => {
21
+ if (!authorized() || channel.readyState !== 1) { local.terminate(); return; }
22
+ local.send(JSON.stringify({ type: 'auth', token: connection.token, purpose: auth.purpose,
23
+ uploadSessionId: auth.uploadSessionId, resumeUpload: auth.resumeUpload, relayClientId: clientId }));
24
+ });
25
+ local.on('message', (bytes, binary) => {
26
+ if (!authorized() || channel.readyState !== 1) { channel.close(4401); return; }
27
+ try {
28
+ if (!authenticated) {
29
+ const response = binary ? null : JSON.parse(bytes.toString());
30
+ if (response?.type === 'error') {
31
+ channel.send(bytes.toString()); clearTimeout(timer); return;
32
+ }
33
+ if (response?.type !== 'ready') throw new Error('File authentication failed');
34
+ authenticated = true; clearTimeout(timer);
35
+ }
36
+ channel.send(binary ? bytes : bytes.toString());
37
+ } catch { channel.close(1011); }
38
+ });
39
+ local.on('close', () => channel.close(1011)); local.on('error', () => channel.close(1011));
40
+ return;
41
+ }
42
+ if (!authenticated || local.readyState !== WebSocket.OPEN || local.bufferedAmount > 1024 * 1024) throw new Error('File channel unavailable');
43
+ local.send(typeof event.data === 'string' ? event.data : Buffer.from(event.data));
44
+ } catch { channel.close(1008); }
45
+ };
46
+ }