@walkhi/code-relax 0.1.0-beta.29 → 0.1.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -3
- package/dist/bin/codex-remote.mjs +54 -37
- package/dist/bin/manage-relay-admin.mjs +20 -20
- package/dist/bin/migrate-relay-db.mjs +109 -109
- package/dist/bin/publish-android-release.mjs +58 -0
- package/dist/bin/self-relay-admin.mjs +8 -8
- package/dist/bin/self-relay-demo.mjs +33 -33
- package/dist/bin/self-relay-server.mjs +66 -64
- package/dist/build-platform.json +1 -0
- package/dist/get-lan-networks.ps1 +40 -40
- package/dist/shared/file-mentions.cjs +12 -0
- package/dist/shared/message-delivery.cjs +17 -1
- package/dist/shared/p2p-data-channel.cjs +72 -50
- package/dist/shared/p2p-diagnostics.cjs +28 -28
- package/dist/shared/p2p-file-channel.cjs +3 -3
- package/dist/shared/plan-pricing.cjs +32 -0
- package/dist/shared/server-requests.cjs +17 -1
- package/dist/skills/code-relax/SKILL.md +3 -3
- package/dist/src/background-process.mjs +18 -18
- package/dist/src/code-browser.mjs +7 -8
- package/dist/src/dots-chat-server.mjs +50 -1
- package/dist/src/dots-room-client.mjs +2 -2
- package/dist/src/dots-task-catalog.mjs +22 -3
- package/dist/src/dots-task-files.mjs +52 -0
- package/dist/src/execution-health.mjs +26 -26
- package/dist/src/lan-socket-server.mjs +2 -2
- package/dist/src/managed-app-server.mjs +9 -6
- package/dist/src/message-images.mjs +9 -9
- package/dist/src/onboarding.mjs +9 -26
- package/dist/src/plan-pricing.mjs +47 -0
- package/dist/src/platform/README.md +11 -11
- package/dist/src/platform/codex-protocol.mjs +46 -0
- package/dist/src/platform/codex-runtime.mjs +3 -0
- package/dist/src/platform/credential-store.mjs +3 -0
- package/dist/src/platform/desktop-host.mjs +3 -0
- package/dist/src/platform/desktop-project-registration.mjs +3 -0
- package/dist/src/platform/desktop-project-store.mjs +149 -0
- package/dist/src/platform/linux/README.md +3 -3
- package/dist/src/platform/macos/README.md +3 -3
- package/dist/src/platform/macos/codex-runtime.mjs +125 -0
- package/dist/src/platform/macos/credential-store.mjs +10 -0
- package/dist/src/platform/macos/desktop-host.mjs +82 -0
- package/dist/src/platform/macos/desktop-project-registration.mjs +10 -0
- package/dist/src/platform/macos/network-info.mjs +28 -0
- package/dist/src/platform/macos/project-locations.mjs +8 -0
- package/dist/src/platform/macos/resident-startup.mjs +84 -0
- package/dist/src/platform/macos/retained-runtime.mjs +127 -0
- package/dist/src/platform/macos/service-host.mjs +18 -0
- package/dist/src/platform/macos/system.mjs +29 -0
- package/dist/src/platform/macos/user-environment.mjs +7 -0
- package/dist/src/platform/native-package.mjs +46 -0
- package/dist/src/platform/network-info.mjs +3 -0
- package/dist/src/platform/path-identity.mjs +5 -0
- package/dist/src/platform/posix/runtime-paths.mjs +25 -0
- package/dist/src/platform/project-locations.mjs +3 -0
- package/dist/src/platform/runtime-paths.mjs +8 -0
- package/dist/src/platform/select.mjs +5 -0
- package/dist/src/platform/service-host.mjs +3 -0
- package/dist/src/platform/user-environment.mjs +3 -0
- package/dist/src/platform/windows/IsolatedProcess.cs +79 -79
- package/dist/src/platform/windows/background-process.mjs +30 -30
- package/dist/src/platform/windows/codex-runtime.mjs +2 -40
- package/dist/src/platform/windows/desktop-helper.mjs +179 -0
- package/dist/src/platform/windows/desktop-project-registration.mjs +3 -152
- package/dist/src/platform/windows/desktop-runtime.ps1 +10 -10
- package/dist/src/platform/windows/desktop-shortcuts.ps1 +7 -7
- package/dist/src/platform/windows/network-info.mjs +34 -34
- package/dist/src/platform/windows/resident-start.js +20 -20
- package/dist/src/platform/windows/resident-start.ps1 +7 -7
- package/dist/src/platform/windows/resident-startup.ps1 +83 -83
- package/dist/src/platform/windows/resolve-state-root.ps1 +14 -14
- package/dist/src/platform/windows/runtime-paths.mjs +20 -20
- package/dist/src/platform/windows/rustdesk-video-probe.mjs +168 -0
- package/dist/src/platform/windows/service-host.mjs +11 -11
- package/dist/src/platform/windows/start-hidden-console.ps1 +49 -49
- package/dist/src/platform/windows/stop-desktop.ps1 +22 -22
- package/dist/src/platform/windows/user-environment.mjs +50 -50
- package/dist/src/platform/windows/user-environment.ps1 +41 -41
- package/dist/src/project-create.mjs +4 -4
- package/dist/src/runtime-discovery.mjs +47 -43
- package/dist/src/self-relay/account-connections.mjs +52 -52
- package/dist/src/self-relay/admin-cloud.mjs +101 -101
- package/dist/src/self-relay/admin-server.mjs +74 -74
- package/dist/src/self-relay/admin-state.mjs +127 -127
- package/dist/src/self-relay/android-releases.mjs +61 -0
- package/dist/src/self-relay/client.mjs +61 -61
- package/dist/src/self-relay/connector.mjs +36 -20
- package/dist/src/self-relay/debug-allowlist.mjs +33 -33
- package/dist/src/self-relay/demo.mjs +6 -6
- package/dist/src/self-relay/device-store.mjs +84 -84
- package/dist/src/self-relay/lan-authorizations.mjs +42 -42
- package/dist/src/self-relay/lifecycle.mjs +250 -250
- package/dist/src/self-relay/long-pairing.mjs +40 -40
- package/dist/src/self-relay/mysql-state.mjs +105 -105
- package/dist/src/self-relay/p2p-probe.mjs +13 -6
- package/dist/src/self-relay/server.mjs +19 -9
- package/dist/src/self-relay/usage-daily.mjs +55 -55
- package/dist/src/self-relay/windows-route-helper.mjs +75 -75
- package/dist/src/self-relay/wire.mjs +36 -36
- package/dist/src/server.mjs +132 -32
- package/dist/src/service-control.mjs +82 -82
- package/dist/src/service-doctor.mjs +51 -13
- package/dist/src/service-health.mjs +33 -33
- package/dist/src/service-install.mjs +10 -7
- package/dist/src/service-lifecycle.mjs +1 -1
- package/dist/src/service-restart.mjs +81 -81
- package/dist/src/shared-app-server.mjs +16 -7
- package/dist/src/shared-recovery.mjs +146 -144
- package/dist/src/skill-install.mjs +51 -51
- package/dist/src/thread-title-generation.mjs +150 -150
- package/dist/src/turn-model-history.mjs +47 -47
- package/dist/tools/rtc-route-helper.ps1 +99 -99
- package/dist/tools/start-rtc-route-helper.ps1 +15 -15
- package/dist/web/vendor/markdown-it.LICENSE.txt +22 -22
- package/dist/web/vendor/markdown-it.umd.min.js +13 -13
- package/package.json +47 -49
- package/tools/postinstall.mjs +127 -127
- package/node_modules/@img/colour/LICENSE.md +0 -82
- package/node_modules/@img/colour/README.md +0 -15
- package/node_modules/@img/colour/color.cjs +0 -1596
- package/node_modules/@img/colour/index.cjs +0 -1
- package/node_modules/@img/colour/index.d.ts +0 -929
- package/node_modules/@img/colour/package.json +0 -58
- package/node_modules/@img/sharp-win32-x64/LICENSE +0 -191
- package/node_modules/@img/sharp-win32-x64/README.md +0 -59
- package/node_modules/@img/sharp-win32-x64/index.cjs +0 -1
- package/node_modules/@img/sharp-win32-x64/lib/libvips-42.dll +0 -0
- package/node_modules/@img/sharp-win32-x64/lib/libvips-cpp-8.18.6.dll +0 -0
- package/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64-0.35.4.node +0 -0
- package/node_modules/@img/sharp-win32-x64/package.json +0 -40
- package/node_modules/@img/sharp-win32-x64/versions.json +0 -30
- package/node_modules/@node-datachannel/win32-x64-msvc/node_datachannel.node +0 -0
- package/node_modules/@node-datachannel/win32-x64-msvc/package.json +0 -20
- package/node_modules/ansi-regex/index.d.ts +0 -37
- package/node_modules/ansi-regex/index.js +0 -10
- package/node_modules/ansi-regex/license +0 -9
- package/node_modules/ansi-regex/package.json +0 -55
- package/node_modules/ansi-regex/readme.md +0 -78
- package/node_modules/ansi-styles/index.d.ts +0 -345
- package/node_modules/ansi-styles/index.js +0 -163
- package/node_modules/ansi-styles/license +0 -9
- package/node_modules/ansi-styles/package.json +0 -56
- package/node_modules/ansi-styles/readme.md +0 -152
- package/node_modules/camelcase/index.d.ts +0 -63
- package/node_modules/camelcase/index.js +0 -76
- package/node_modules/camelcase/license +0 -9
- package/node_modules/camelcase/package.json +0 -43
- package/node_modules/camelcase/readme.md +0 -99
- package/node_modules/cliui/CHANGELOG.md +0 -76
- package/node_modules/cliui/LICENSE.txt +0 -14
- package/node_modules/cliui/README.md +0 -115
- package/node_modules/cliui/index.js +0 -354
- package/node_modules/cliui/package.json +0 -65
- package/node_modules/color-convert/CHANGELOG.md +0 -54
- package/node_modules/color-convert/LICENSE +0 -21
- package/node_modules/color-convert/README.md +0 -68
- package/node_modules/color-convert/conversions.js +0 -839
- package/node_modules/color-convert/index.js +0 -81
- package/node_modules/color-convert/package.json +0 -48
- package/node_modules/color-convert/route.js +0 -97
- package/node_modules/color-name/LICENSE +0 -8
- package/node_modules/color-name/README.md +0 -11
- package/node_modules/color-name/index.js +0 -152
- package/node_modules/color-name/package.json +0 -28
- package/node_modules/decamelize/index.js +0 -13
- package/node_modules/decamelize/license +0 -21
- package/node_modules/decamelize/package.json +0 -38
- package/node_modules/decamelize/readme.md +0 -48
- package/node_modules/detect-libc/LICENSE +0 -201
- package/node_modules/detect-libc/README.md +0 -163
- package/node_modules/detect-libc/index.d.ts +0 -14
- package/node_modules/detect-libc/lib/detect-libc.js +0 -313
- package/node_modules/detect-libc/lib/elf.js +0 -39
- package/node_modules/detect-libc/lib/filesystem.js +0 -51
- package/node_modules/detect-libc/lib/process.js +0 -24
- package/node_modules/detect-libc/package.json +0 -44
- package/node_modules/dijkstrajs/.travis.yml +0 -4
- package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
- package/node_modules/dijkstrajs/LICENSE.md +0 -19
- package/node_modules/dijkstrajs/README.md +0 -18
- package/node_modules/dijkstrajs/dijkstra.js +0 -165
- package/node_modules/dijkstrajs/package.json +0 -60
- package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
- package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
- package/node_modules/emoji-regex/README.md +0 -73
- package/node_modules/emoji-regex/es2015/index.js +0 -6
- package/node_modules/emoji-regex/es2015/text.js +0 -6
- package/node_modules/emoji-regex/index.d.ts +0 -23
- package/node_modules/emoji-regex/index.js +0 -6
- package/node_modules/emoji-regex/package.json +0 -50
- package/node_modules/emoji-regex/text.js +0 -6
- package/node_modules/find-up/index.d.ts +0 -137
- package/node_modules/find-up/index.js +0 -89
- package/node_modules/find-up/license +0 -9
- package/node_modules/find-up/package.json +0 -53
- package/node_modules/find-up/readme.md +0 -156
- package/node_modules/get-caller-file/LICENSE.md +0 -6
- package/node_modules/get-caller-file/README.md +0 -41
- package/node_modules/get-caller-file/index.d.ts +0 -2
- package/node_modules/get-caller-file/index.js +0 -22
- package/node_modules/get-caller-file/index.js.map +0 -1
- package/node_modules/get-caller-file/package.json +0 -42
- package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
- package/node_modules/is-fullwidth-code-point/index.js +0 -50
- package/node_modules/is-fullwidth-code-point/license +0 -9
- package/node_modules/is-fullwidth-code-point/package.json +0 -42
- package/node_modules/is-fullwidth-code-point/readme.md +0 -39
- package/node_modules/locate-path/index.d.ts +0 -83
- package/node_modules/locate-path/index.js +0 -65
- package/node_modules/locate-path/license +0 -9
- package/node_modules/locate-path/package.json +0 -45
- package/node_modules/locate-path/readme.md +0 -122
- package/node_modules/node-datachannel/.clang-format +0 -17
- package/node_modules/node-datachannel/.editorconfig +0 -12
- package/node_modules/node-datachannel/.eslintignore +0 -8
- package/node_modules/node-datachannel/.eslintrc.json +0 -27
- package/node_modules/node-datachannel/.gitmodules +0 -3
- package/node_modules/node-datachannel/.prettierignore +0 -7
- package/node_modules/node-datachannel/.prettierrc +0 -13
- package/node_modules/node-datachannel/API.md +0 -247
- package/node_modules/node-datachannel/BULDING.md +0 -26
- package/node_modules/node-datachannel/CMakeLists.txt +0 -153
- package/node_modules/node-datachannel/LICENSE +0 -373
- package/node_modules/node-datachannel/README.md +0 -129
- package/node_modules/node-datachannel/dist/cjs/index.cjs +0 -11
- package/node_modules/node-datachannel/dist/cjs/index.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs +0 -101
- package/node_modules/node-datachannel/dist/cjs/lib/datachannel-stream.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/index.cjs +0 -91
- package/node_modules/node-datachannel/dist/cjs/lib/index.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs +0 -94
- package/node_modules/node-datachannel/dist/cjs/lib/node-datachannel.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs +0 -45
- package/node_modules/node-datachannel/dist/cjs/lib/websocket-server.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs +0 -8
- package/node_modules/node-datachannel/dist/cjs/lib/websocket.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs +0 -86
- package/node_modules/node-datachannel/dist/cjs/polyfill/Events.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs +0 -34
- package/node_modules/node-datachannel/dist/cjs/polyfill/Exception.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs +0 -34
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCCertificate.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs +0 -214
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDataChannel.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs +0 -53
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs +0 -83
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCError.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -132
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceCandidate.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs +0 -94
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCIceTransport.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -434
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCPeerConnection.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs +0 -59
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSctpTransport.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs +0 -45
- package/node_modules/node-datachannel/dist/cjs/polyfill/RTCSessionDescription.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs +0 -42
- package/node_modules/node-datachannel/dist/cjs/polyfill/index.cjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/index.mjs +0 -8
- package/node_modules/node-datachannel/dist/esm/index.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs +0 -78
- package/node_modules/node-datachannel/dist/esm/lib/datachannel-stream.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/index.mjs +0 -64
- package/node_modules/node-datachannel/dist/esm/lib/index.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs +0 -78
- package/node_modules/node-datachannel/dist/esm/lib/node-datachannel.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs +0 -43
- package/node_modules/node-datachannel/dist/esm/lib/websocket-server.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs +0 -6
- package/node_modules/node-datachannel/dist/esm/lib/websocket.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs +0 -82
- package/node_modules/node-datachannel/dist/esm/polyfill/Events.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs +0 -28
- package/node_modules/node-datachannel/dist/esm/polyfill/Exception.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs +0 -30
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCCertificate.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs +0 -210
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCDataChannel.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs +0 -49
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCDtlsTransport.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs +0 -79
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCError.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs +0 -128
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceCandidate.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs +0 -89
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCIceTransport.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs +0 -430
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCPeerConnection.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs +0 -55
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCSctpTransport.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs +0 -41
- package/node_modules/node-datachannel/dist/esm/polyfill/RTCSessionDescription.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs +0 -27
- package/node_modules/node-datachannel/dist/esm/polyfill/index.mjs.map +0 -1
- package/node_modules/node-datachannel/dist/types/lib/datachannel-stream.d.ts +0 -24
- package/node_modules/node-datachannel/dist/types/lib/index.d.ts +0 -241
- package/node_modules/node-datachannel/dist/types/lib/types.d.ts +0 -119
- package/node_modules/node-datachannel/dist/types/lib/websocket-server.d.ts +0 -13
- package/node_modules/node-datachannel/dist/types/lib/websocket.d.ts +0 -25
- package/node_modules/node-datachannel/dist/types/polyfill/Events.d.ts +0 -15
- package/node_modules/node-datachannel/dist/types/polyfill/RTCCertificate.d.ts +0 -9
- package/node_modules/node-datachannel/dist/types/polyfill/RTCDataChannel.d.ts +0 -29
- package/node_modules/node-datachannel/dist/types/polyfill/RTCDtlsTransport.d.ts +0 -15
- package/node_modules/node-datachannel/dist/types/polyfill/RTCError.d.ts +0 -17
- package/node_modules/node-datachannel/dist/types/polyfill/RTCIceCandidate.d.ts +0 -21
- package/node_modules/node-datachannel/dist/types/polyfill/RTCIceTransport.d.ts +0 -30
- package/node_modules/node-datachannel/dist/types/polyfill/RTCPeerConnection.d.ts +0 -64
- package/node_modules/node-datachannel/dist/types/polyfill/RTCSctpTransport.d.ts +0 -15
- package/node_modules/node-datachannel/dist/types/polyfill/RTCSessionDescription.d.ts +0 -10
- package/node_modules/node-datachannel/dist/types/polyfill/index.d.ts +0 -26
- package/node_modules/node-datachannel/jest.config.ts +0 -14
- package/node_modules/node-datachannel/package.json +0 -133
- package/node_modules/node-datachannel/rollup.config.mjs +0 -67
- package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.cpp +0 -530
- package/node_modules/node-datachannel/src/cpp/data-channel-wrapper.h +0 -63
- package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.cpp +0 -172
- package/node_modules/node-datachannel/src/cpp/ice-udp-mux-listener-wrapper.h +0 -43
- package/node_modules/node-datachannel/src/cpp/main.cpp +0 -58
- package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.cpp +0 -457
- package/node_modules/node-datachannel/src/cpp/media-audio-wrapper.h +0 -52
- package/node_modules/node-datachannel/src/cpp/media-av1packetization.cpp +0 -24
- package/node_modules/node-datachannel/src/cpp/media-av1packetization.h +0 -11
- package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.cpp +0 -126
- package/node_modules/node-datachannel/src/cpp/media-av1rtppacketizer-wrapper.h +0 -29
- package/node_modules/node-datachannel/src/cpp/media-direction.cpp +0 -43
- package/node_modules/node-datachannel/src/cpp/media-direction.h +0 -10
- package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.cpp +0 -126
- package/node_modules/node-datachannel/src/cpp/media-h264rtppacketizer-wrapper.h +0 -30
- package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.cpp +0 -126
- package/node_modules/node-datachannel/src/cpp/media-h265rtppacketizer-wrapper.h +0 -30
- package/node_modules/node-datachannel/src/cpp/media-h26xseparator.cpp +0 -32
- package/node_modules/node-datachannel/src/cpp/media-h26xseparator.h +0 -11
- package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.cpp +0 -31
- package/node_modules/node-datachannel/src/cpp/media-mediahandler-helper.h +0 -11
- package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.cpp +0 -79
- package/node_modules/node-datachannel/src/cpp/media-pacinghandler-wrapper.h +0 -28
- package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.cpp +0 -68
- package/node_modules/node-datachannel/src/cpp/media-rtcpnackresponder-wrapper.h +0 -28
- package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.cpp +0 -57
- package/node_modules/node-datachannel/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -28
- package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.cpp +0 -93
- package/node_modules/node-datachannel/src/cpp/media-rtcpsrreporter-wrapper.h +0 -30
- package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.cpp +0 -167
- package/node_modules/node-datachannel/src/cpp/media-rtppacketizationconfig-wrapper.h +0 -35
- package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.cpp +0 -95
- package/node_modules/node-datachannel/src/cpp/media-rtppacketizer-wrapper.h +0 -30
- package/node_modules/node-datachannel/src/cpp/media-track-wrapper.cpp +0 -458
- package/node_modules/node-datachannel/src/cpp/media-track-wrapper.h +0 -61
- package/node_modules/node-datachannel/src/cpp/media-video-wrapper.cpp +0 -526
- package/node_modules/node-datachannel/src/cpp/media-video-wrapper.h +0 -56
- package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.cpp +0 -1298
- package/node_modules/node-datachannel/src/cpp/peer-connection-wrapper.h +0 -89
- package/node_modules/node-datachannel/src/cpp/rtc-wrapper.cpp +0 -205
- package/node_modules/node-datachannel/src/cpp/rtc-wrapper.h +0 -24
- package/node_modules/node-datachannel/src/cpp/thread-safe-callback.cpp +0 -57
- package/node_modules/node-datachannel/src/cpp/thread-safe-callback.h +0 -47
- package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.cpp +0 -275
- package/node_modules/node-datachannel/src/cpp/web-socket-server-wrapper.h +0 -41
- package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.cpp +0 -796
- package/node_modules/node-datachannel/src/cpp/web-socket-wrapper.h +0 -63
- package/node_modules/node-datachannel/src/index.ts +0 -9
- package/node_modules/node-datachannel/src/lib/datachannel-stream.ts +0 -100
- package/node_modules/node-datachannel/src/lib/index.ts +0 -290
- package/node_modules/node-datachannel/src/lib/node-datachannel.ts +0 -84
- package/node_modules/node-datachannel/src/lib/types.ts +0 -169
- package/node_modules/node-datachannel/src/lib/websocket-server.ts +0 -37
- package/node_modules/node-datachannel/src/lib/websocket.ts +0 -26
- package/node_modules/node-datachannel/src/polyfill/Events.ts +0 -82
- package/node_modules/node-datachannel/src/polyfill/Exception.ts +0 -37
- package/node_modules/node-datachannel/src/polyfill/README.md +0 -41
- package/node_modules/node-datachannel/src/polyfill/RTCCertificate.ts +0 -21
- package/node_modules/node-datachannel/src/polyfill/RTCDataChannel.ts +0 -225
- package/node_modules/node-datachannel/src/polyfill/RTCDtlsTransport.ts +0 -46
- package/node_modules/node-datachannel/src/polyfill/RTCError.ts +0 -78
- package/node_modules/node-datachannel/src/polyfill/RTCIceCandidate.ts +0 -128
- package/node_modules/node-datachannel/src/polyfill/RTCIceTransport.ts +0 -90
- package/node_modules/node-datachannel/src/polyfill/RTCPeerConnection.ts +0 -527
- package/node_modules/node-datachannel/src/polyfill/RTCSctpTransport.ts +0 -51
- package/node_modules/node-datachannel/src/polyfill/RTCSessionDescription.ts +0 -41
- package/node_modules/node-datachannel/src/polyfill/index.ts +0 -38
- package/node_modules/node-datachannel/tsconfig.json +0 -21
- package/node_modules/p-limit/index.d.ts +0 -38
- package/node_modules/p-limit/index.js +0 -57
- package/node_modules/p-limit/license +0 -9
- package/node_modules/p-limit/package.json +0 -52
- package/node_modules/p-limit/readme.md +0 -101
- package/node_modules/p-locate/index.d.ts +0 -64
- package/node_modules/p-locate/index.js +0 -52
- package/node_modules/p-locate/license +0 -9
- package/node_modules/p-locate/package.json +0 -53
- package/node_modules/p-locate/readme.md +0 -90
- package/node_modules/p-try/index.d.ts +0 -39
- package/node_modules/p-try/index.js +0 -9
- package/node_modules/p-try/license +0 -9
- package/node_modules/p-try/package.json +0 -42
- package/node_modules/p-try/readme.md +0 -58
- package/node_modules/path-exists/index.d.ts +0 -28
- package/node_modules/path-exists/index.js +0 -23
- package/node_modules/path-exists/license +0 -9
- package/node_modules/path-exists/package.json +0 -39
- package/node_modules/path-exists/readme.md +0 -52
- package/node_modules/pngjs/.eslintignore +0 -2
- package/node_modules/pngjs/.eslintrc.json +0 -19
- package/node_modules/pngjs/.prettierignore +0 -3
- package/node_modules/pngjs/LICENSE +0 -20
- package/node_modules/pngjs/README.md +0 -429
- package/node_modules/pngjs/browser.js +0 -16096
- package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
- package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
- package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
- package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
- package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
- package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
- package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
- package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
- package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
- package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
- package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
- package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
- package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
- package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
- package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
- package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
- package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
- package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
- package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
- package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
- package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
- package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
- package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
- package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
- package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
- package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
- package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
- package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
- package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
- package/node_modules/pngjs/coverage/lcov.info +0 -2177
- package/node_modules/pngjs/lib/bitmapper.js +0 -267
- package/node_modules/pngjs/lib/bitpacker.js +0 -158
- package/node_modules/pngjs/lib/chunkstream.js +0 -189
- package/node_modules/pngjs/lib/constants.js +0 -32
- package/node_modules/pngjs/lib/crc.js +0 -40
- package/node_modules/pngjs/lib/filter-pack.js +0 -171
- package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
- package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
- package/node_modules/pngjs/lib/filter-parse.js +0 -177
- package/node_modules/pngjs/lib/format-normaliser.js +0 -93
- package/node_modules/pngjs/lib/interlace.js +0 -95
- package/node_modules/pngjs/lib/packer-async.js +0 -50
- package/node_modules/pngjs/lib/packer-sync.js +0 -56
- package/node_modules/pngjs/lib/packer.js +0 -129
- package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
- package/node_modules/pngjs/lib/parser-async.js +0 -165
- package/node_modules/pngjs/lib/parser-sync.js +0 -108
- package/node_modules/pngjs/lib/parser.js +0 -290
- package/node_modules/pngjs/lib/png-sync.js +0 -12
- package/node_modules/pngjs/lib/png.js +0 -194
- package/node_modules/pngjs/lib/sync-inflate.js +0 -168
- package/node_modules/pngjs/lib/sync-reader.js +0 -45
- package/node_modules/pngjs/package.json +0 -73
- package/node_modules/qrcode/README.md +0 -770
- package/node_modules/qrcode/bin/qrcode +0 -159
- package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
- package/node_modules/qrcode/helper/to-sjis.js +0 -105
- package/node_modules/qrcode/lib/browser.js +0 -76
- package/node_modules/qrcode/lib/can-promise.js +0 -7
- package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
- package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
- package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
- package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
- package/node_modules/qrcode/lib/core/byte-data.js +0 -30
- package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
- package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
- package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
- package/node_modules/qrcode/lib/core/format-info.js +0 -29
- package/node_modules/qrcode/lib/core/galois-field.js +0 -69
- package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
- package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
- package/node_modules/qrcode/lib/core/mode.js +0 -167
- package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
- package/node_modules/qrcode/lib/core/polynomial.js +0 -62
- package/node_modules/qrcode/lib/core/qrcode.js +0 -495
- package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
- package/node_modules/qrcode/lib/core/regex.js +0 -31
- package/node_modules/qrcode/lib/core/segments.js +0 -330
- package/node_modules/qrcode/lib/core/utils.js +0 -63
- package/node_modules/qrcode/lib/core/version-check.js +0 -9
- package/node_modules/qrcode/lib/core/version.js +0 -163
- package/node_modules/qrcode/lib/index.js +0 -12
- package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
- package/node_modules/qrcode/lib/renderer/png.js +0 -78
- package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
- package/node_modules/qrcode/lib/renderer/svg.js +0 -19
- package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
- package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
- package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
- package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
- package/node_modules/qrcode/lib/renderer/utils.js +0 -99
- package/node_modules/qrcode/lib/server.js +0 -138
- package/node_modules/qrcode/license +0 -10
- package/node_modules/qrcode/package.json +0 -77
- package/node_modules/require-directory/.jshintrc +0 -67
- package/node_modules/require-directory/.npmignore +0 -1
- package/node_modules/require-directory/.travis.yml +0 -3
- package/node_modules/require-directory/LICENSE +0 -22
- package/node_modules/require-directory/README.markdown +0 -184
- package/node_modules/require-directory/index.js +0 -86
- package/node_modules/require-directory/package.json +0 -40
- package/node_modules/require-main-filename/CHANGELOG.md +0 -26
- package/node_modules/require-main-filename/LICENSE.txt +0 -14
- package/node_modules/require-main-filename/README.md +0 -26
- package/node_modules/require-main-filename/index.js +0 -18
- package/node_modules/require-main-filename/package.json +0 -35
- package/node_modules/semver/LICENSE +0 -15
- package/node_modules/semver/README.md +0 -680
- package/node_modules/semver/bin/semver.js +0 -195
- package/node_modules/semver/classes/comparator.js +0 -143
- package/node_modules/semver/classes/index.js +0 -7
- package/node_modules/semver/classes/range.js +0 -577
- package/node_modules/semver/classes/semver.js +0 -350
- package/node_modules/semver/functions/clean.js +0 -8
- package/node_modules/semver/functions/cmp.js +0 -54
- package/node_modules/semver/functions/coerce.js +0 -62
- package/node_modules/semver/functions/compare-build.js +0 -9
- package/node_modules/semver/functions/compare-loose.js +0 -5
- package/node_modules/semver/functions/compare.js +0 -7
- package/node_modules/semver/functions/diff.js +0 -60
- package/node_modules/semver/functions/eq.js +0 -5
- package/node_modules/semver/functions/gt.js +0 -5
- package/node_modules/semver/functions/gte.js +0 -5
- package/node_modules/semver/functions/inc.js +0 -21
- package/node_modules/semver/functions/lt.js +0 -5
- package/node_modules/semver/functions/lte.js +0 -5
- package/node_modules/semver/functions/major.js +0 -5
- package/node_modules/semver/functions/minor.js +0 -5
- package/node_modules/semver/functions/neq.js +0 -5
- package/node_modules/semver/functions/parse.js +0 -18
- package/node_modules/semver/functions/patch.js +0 -5
- package/node_modules/semver/functions/prerelease.js +0 -8
- package/node_modules/semver/functions/rcompare.js +0 -5
- package/node_modules/semver/functions/rsort.js +0 -5
- package/node_modules/semver/functions/satisfies.js +0 -12
- package/node_modules/semver/functions/sort.js +0 -5
- package/node_modules/semver/functions/truncate.js +0 -48
- package/node_modules/semver/functions/valid.js +0 -8
- package/node_modules/semver/index.js +0 -93
- package/node_modules/semver/internal/constants.js +0 -37
- package/node_modules/semver/internal/debug.js +0 -11
- package/node_modules/semver/internal/identifiers.js +0 -29
- package/node_modules/semver/internal/lrucache.js +0 -42
- package/node_modules/semver/internal/parse-options.js +0 -17
- package/node_modules/semver/internal/re.js +0 -223
- package/node_modules/semver/package.json +0 -78
- package/node_modules/semver/preload.js +0 -4
- package/node_modules/semver/range.bnf +0 -17
- package/node_modules/semver/ranges/gtr.js +0 -6
- package/node_modules/semver/ranges/intersects.js +0 -9
- package/node_modules/semver/ranges/ltr.js +0 -6
- package/node_modules/semver/ranges/max-satisfying.js +0 -27
- package/node_modules/semver/ranges/min-satisfying.js +0 -26
- package/node_modules/semver/ranges/min-version.js +0 -63
- package/node_modules/semver/ranges/outside.js +0 -82
- package/node_modules/semver/ranges/simplify.js +0 -49
- package/node_modules/semver/ranges/subset.js +0 -249
- package/node_modules/semver/ranges/to-comparators.js +0 -10
- package/node_modules/semver/ranges/valid.js +0 -13
- package/node_modules/set-blocking/CHANGELOG.md +0 -26
- package/node_modules/set-blocking/LICENSE.txt +0 -14
- package/node_modules/set-blocking/README.md +0 -31
- package/node_modules/set-blocking/index.js +0 -7
- package/node_modules/set-blocking/package.json +0 -42
- package/node_modules/sharp/LICENSE +0 -191
- package/node_modules/sharp/README.md +0 -112
- package/node_modules/sharp/dist/channel.cjs +0 -177
- package/node_modules/sharp/dist/channel.mjs +0 -177
- package/node_modules/sharp/dist/colour.cjs +0 -199
- package/node_modules/sharp/dist/colour.mjs +0 -199
- package/node_modules/sharp/dist/composite.cjs +0 -213
- package/node_modules/sharp/dist/composite.mjs +0 -213
- package/node_modules/sharp/dist/constructor.cjs +0 -511
- package/node_modules/sharp/dist/constructor.mjs +0 -511
- package/node_modules/sharp/dist/index.cjs +0 -25
- package/node_modules/sharp/dist/index.d.cts +0 -1999
- package/node_modules/sharp/dist/index.d.mts +0 -2046
- package/node_modules/sharp/dist/index.mjs +0 -25
- package/node_modules/sharp/dist/input.cjs +0 -819
- package/node_modules/sharp/dist/input.mjs +0 -819
- package/node_modules/sharp/dist/is.cjs +0 -143
- package/node_modules/sharp/dist/is.mjs +0 -143
- package/node_modules/sharp/dist/libvips.cjs +0 -212
- package/node_modules/sharp/dist/libvips.mjs +0 -212
- package/node_modules/sharp/dist/operation.cjs +0 -1002
- package/node_modules/sharp/dist/operation.mjs +0 -1002
- package/node_modules/sharp/dist/output.cjs +0 -1785
- package/node_modules/sharp/dist/output.mjs +0 -1785
- package/node_modules/sharp/dist/resize.cjs +0 -617
- package/node_modules/sharp/dist/resize.mjs +0 -617
- package/node_modules/sharp/dist/sharp.cjs +0 -174
- package/node_modules/sharp/dist/sharp.mjs +0 -174
- package/node_modules/sharp/dist/utility.cjs +0 -301
- package/node_modules/sharp/dist/utility.mjs +0 -301
- package/node_modules/sharp/install/build.js +0 -38
- package/node_modules/sharp/lib/index.d.ts +0 -1999
- package/node_modules/sharp/package.json +0 -227
- package/node_modules/sharp/src/binding.gyp +0 -303
- package/node_modules/sharp/src/common.cc +0 -1186
- package/node_modules/sharp/src/common.h +0 -421
- package/node_modules/sharp/src/metadata.cc +0 -404
- package/node_modules/sharp/src/metadata.h +0 -95
- package/node_modules/sharp/src/operations.cc +0 -516
- package/node_modules/sharp/src/operations.h +0 -137
- package/node_modules/sharp/src/pipeline.cc +0 -1948
- package/node_modules/sharp/src/pipeline.h +0 -422
- package/node_modules/sharp/src/sharp.cc +0 -43
- package/node_modules/sharp/src/stats.cc +0 -186
- package/node_modules/sharp/src/stats.h +0 -62
- package/node_modules/sharp/src/utilities.cc +0 -289
- package/node_modules/sharp/src/utilities.h +0 -22
- package/node_modules/string-width/index.d.ts +0 -29
- package/node_modules/string-width/index.js +0 -47
- package/node_modules/string-width/license +0 -9
- package/node_modules/string-width/package.json +0 -56
- package/node_modules/string-width/readme.md +0 -50
- package/node_modules/strip-ansi/index.d.ts +0 -17
- package/node_modules/strip-ansi/index.js +0 -4
- package/node_modules/strip-ansi/license +0 -9
- package/node_modules/strip-ansi/package.json +0 -54
- package/node_modules/strip-ansi/readme.md +0 -46
- package/node_modules/which-module/LICENSE +0 -13
- package/node_modules/which-module/README.md +0 -58
- package/node_modules/which-module/index.js +0 -9
- package/node_modules/which-module/package.json +0 -41
- package/node_modules/wrap-ansi/index.js +0 -186
- package/node_modules/wrap-ansi/license +0 -9
- package/node_modules/wrap-ansi/package.json +0 -61
- package/node_modules/wrap-ansi/readme.md +0 -97
- package/node_modules/ws/LICENSE +0 -20
- package/node_modules/ws/README.md +0 -548
- package/node_modules/ws/browser.js +0 -8
- package/node_modules/ws/index.js +0 -22
- package/node_modules/ws/lib/buffer-util.js +0 -131
- package/node_modules/ws/lib/constants.js +0 -19
- package/node_modules/ws/lib/event-target.js +0 -292
- package/node_modules/ws/lib/extension.js +0 -203
- package/node_modules/ws/lib/limiter.js +0 -55
- package/node_modules/ws/lib/permessage-deflate.js +0 -530
- package/node_modules/ws/lib/receiver.js +0 -743
- package/node_modules/ws/lib/sender.js +0 -607
- package/node_modules/ws/lib/stream.js +0 -161
- package/node_modules/ws/lib/subprotocol.js +0 -62
- package/node_modules/ws/lib/validation.js +0 -152
- package/node_modules/ws/lib/websocket-server.js +0 -562
- package/node_modules/ws/lib/websocket.js +0 -1407
- package/node_modules/ws/package.json +0 -74
- package/node_modules/ws/wrapper.mjs +0 -21
- package/node_modules/y18n/CHANGELOG.md +0 -35
- package/node_modules/y18n/LICENSE +0 -13
- package/node_modules/y18n/README.md +0 -109
- package/node_modules/y18n/index.js +0 -188
- package/node_modules/y18n/package.json +0 -39
- package/node_modules/yargs/CHANGELOG.md +0 -420
- package/node_modules/yargs/LICENSE +0 -21
- package/node_modules/yargs/README.md +0 -140
- package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
- package/node_modules/yargs/build/lib/apply-extends.js +0 -65
- package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
- package/node_modules/yargs/build/lib/argsert.js +0 -65
- package/node_modules/yargs/build/lib/command.d.ts +0 -64
- package/node_modules/yargs/build/lib/command.js +0 -416
- package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
- package/node_modules/yargs/build/lib/common-types.js +0 -25
- package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
- package/node_modules/yargs/build/lib/completion-templates.js +0 -50
- package/node_modules/yargs/build/lib/completion.d.ts +0 -21
- package/node_modules/yargs/build/lib/completion.js +0 -135
- package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
- package/node_modules/yargs/build/lib/is-promise.js +0 -9
- package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
- package/node_modules/yargs/build/lib/levenshtein.js +0 -58
- package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
- package/node_modules/yargs/build/lib/middleware.js +0 -57
- package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
- package/node_modules/yargs/build/lib/obj-filter.js +0 -14
- package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
- package/node_modules/yargs/build/lib/parse-command.js +0 -36
- package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
- package/node_modules/yargs/build/lib/process-argv.js +0 -31
- package/node_modules/yargs/build/lib/usage.d.ts +0 -49
- package/node_modules/yargs/build/lib/usage.js +0 -540
- package/node_modules/yargs/build/lib/validation.d.ts +0 -34
- package/node_modules/yargs/build/lib/validation.js +0 -330
- package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
- package/node_modules/yargs/build/lib/yargs.js +0 -1190
- package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
- package/node_modules/yargs/build/lib/yerror.js +0 -11
- package/node_modules/yargs/index.js +0 -40
- package/node_modules/yargs/locales/be.json +0 -46
- package/node_modules/yargs/locales/de.json +0 -46
- package/node_modules/yargs/locales/en.json +0 -51
- package/node_modules/yargs/locales/es.json +0 -46
- package/node_modules/yargs/locales/fi.json +0 -49
- package/node_modules/yargs/locales/fr.json +0 -53
- package/node_modules/yargs/locales/hi.json +0 -49
- package/node_modules/yargs/locales/hu.json +0 -46
- package/node_modules/yargs/locales/id.json +0 -50
- package/node_modules/yargs/locales/it.json +0 -46
- package/node_modules/yargs/locales/ja.json +0 -51
- package/node_modules/yargs/locales/ko.json +0 -49
- package/node_modules/yargs/locales/nb.json +0 -44
- package/node_modules/yargs/locales/nl.json +0 -49
- package/node_modules/yargs/locales/nn.json +0 -44
- package/node_modules/yargs/locales/pirate.json +0 -13
- package/node_modules/yargs/locales/pl.json +0 -49
- package/node_modules/yargs/locales/pt.json +0 -45
- package/node_modules/yargs/locales/pt_BR.json +0 -48
- package/node_modules/yargs/locales/ru.json +0 -46
- package/node_modules/yargs/locales/th.json +0 -46
- package/node_modules/yargs/locales/tr.json +0 -48
- package/node_modules/yargs/locales/zh_CN.json +0 -48
- package/node_modules/yargs/locales/zh_TW.json +0 -47
- package/node_modules/yargs/package.json +0 -92
- package/node_modules/yargs/yargs.js +0 -14
- package/node_modules/yargs-parser/CHANGELOG.md +0 -601
- package/node_modules/yargs-parser/LICENSE.txt +0 -14
- package/node_modules/yargs-parser/README.md +0 -449
- package/node_modules/yargs-parser/index.js +0 -1032
- package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
- package/node_modules/yargs-parser/package.json +0 -46
|
@@ -1,105 +1,105 @@
|
|
|
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
|
-
|
|
9
|
-
const sqlTime = value => value.replace('T', ' ').replace(/Z$/, '');
|
|
10
|
-
const isoTime = value => value.replace(' ', 'T') + 'Z';
|
|
11
|
-
|
|
12
|
-
export async function openRelayMysql(configFile, initialMaxRelaySessions) {
|
|
13
|
-
const config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
|
14
|
-
if (!config.database || !config.user || !config.password || !(config.socketPath || config.host)) {
|
|
15
|
-
throw new Error('Incomplete relay MySQL configuration');
|
|
16
|
-
}
|
|
17
|
-
const pool = mysql.createPool({ ...config, waitForConnections: true, connectionLimit: 4,
|
|
18
|
-
namedPlaceholders: false, dateStrings: true, timezone: 'Z', multipleStatements: false });
|
|
19
|
-
try {
|
|
20
|
-
const [versions] = await pool.query('SELECT version, sha256 FROM schema_migrations');
|
|
21
|
-
const knownVersions = relaySchemaVersions;
|
|
22
|
-
if (!versions.some(row => row.version === knownVersions[0]) || versions.length > knownVersions.length) throw new Error('Unexpected relay database schema');
|
|
23
|
-
for (const row of versions) {
|
|
24
|
-
if (!knownVersions.includes(row.version)) throw new Error('Unexpected relay database schema');
|
|
25
|
-
const source = fs.readFileSync(fileURLToPath(new URL(`../../database/${row.version}.sql`, import.meta.url)));
|
|
26
|
-
if (row.sha256 !== createHash('sha256').update(source).digest('hex')) throw new Error(`Unexpected relay database schema: ${row.version}`);
|
|
27
|
-
}
|
|
28
|
-
const [computers] = await pool.query('SELECT id, host_hash, status, revision, created_at, updated_at FROM computers');
|
|
29
|
-
const [clients] = await pool.query('SELECT computer_id, client_id, credential_hash, created_at, updated_at FROM mobile_authorizations ORDER BY created_at');
|
|
30
|
-
const [official] = await pool.query('SELECT computer_id, environment_id, name, hostname, updated_at FROM official_computers');
|
|
31
|
-
const records = new Map(computers.map(row => [row.id, { id: row.id, hostHash: row.host_hash, status: row.status,
|
|
32
|
-
revision: Number(row.revision), createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at), clients: [] }]));
|
|
33
|
-
for (const row of clients) {
|
|
34
|
-
const record = records.get(row.computer_id);
|
|
35
|
-
if (!record) throw new Error('Orphan mobile authorization');
|
|
36
|
-
record.clients.push({ id: row.client_id, hash: row.credential_hash,
|
|
37
|
-
createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at) });
|
|
38
|
-
}
|
|
39
|
-
for (const row of official) {
|
|
40
|
-
const record = records.get(row.computer_id);
|
|
41
|
-
if (!record) throw new Error('Orphan official computer');
|
|
42
|
-
record.officialComputer = { environmentId: row.environment_id, name: row.name,
|
|
43
|
-
hostname: row.hostname, updatedAt: isoTime(row.updated_at) };
|
|
44
|
-
}
|
|
45
|
-
const validator = deviceStore();
|
|
46
|
-
for (const record of records.values()) validator.save(record);
|
|
47
|
-
|
|
48
|
-
const [settings] = await pool.query('SELECT max_relay_sessions FROM relay_settings WHERE id = 1');
|
|
49
|
-
if (settings.length !== 1) throw new Error('Missing relay settings');
|
|
50
|
-
const [rows] = await pool.query('SELECT id, title, message, status, created_at, updated_at, published_at FROM announcements ORDER BY created_at DESC');
|
|
51
|
-
const announcements = rows.map(row => ({ id: row.id, title: row.title, message: row.message, status: row.status,
|
|
52
|
-
createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at),
|
|
53
|
-
publishedAt: row.published_at ? isoTime(row.published_at) : null }));
|
|
54
|
-
const active = announcements.find(item => item.status === 'active');
|
|
55
|
-
const initial = { version: 3, maxRelaySessions: settings[0].max_relay_sessions, announcements,
|
|
56
|
-
announcement: active ? { id: active.id, title: active.title, message: active.message, publishedAt: active.publishedAt } : null };
|
|
57
|
-
const admin = relayAdminState(undefined, initialMaxRelaySessions, { initial, persist: async next => {
|
|
58
|
-
const connection = await pool.getConnection();
|
|
59
|
-
try {
|
|
60
|
-
await connection.beginTransaction();
|
|
61
|
-
await connection.execute('UPDATE relay_settings SET max_relay_sessions = ?, updated_at = UTC_TIMESTAMP(3) WHERE id = 1', [next.maxRelaySessions]);
|
|
62
|
-
await connection.query('DELETE FROM announcements');
|
|
63
|
-
for (const item of next.announcements) await connection.execute(
|
|
64
|
-
'INSERT INTO announcements (id,title,message,status,created_at,updated_at,published_at) VALUES (?,?,?,?,?,?,?)',
|
|
65
|
-
[item.id, item.title, item.message, item.status, sqlTime(item.createdAt), sqlTime(item.updatedAt),
|
|
66
|
-
item.publishedAt ? sqlTime(item.publishedAt) : null]);
|
|
67
|
-
await connection.commit();
|
|
68
|
-
} catch (error) { await connection.rollback(); throw error; }
|
|
69
|
-
finally { connection.release(); }
|
|
70
|
-
} });
|
|
71
|
-
return {
|
|
72
|
-
pool,
|
|
73
|
-
schemaVersions: versions.map(row => row.version),
|
|
74
|
-
devices: {
|
|
75
|
-
entries: () => [...records.values()],
|
|
76
|
-
async save(record) {
|
|
77
|
-
validator.save(record);
|
|
78
|
-
const connection = await pool.getConnection();
|
|
79
|
-
try {
|
|
80
|
-
await connection.beginTransaction();
|
|
81
|
-
await connection.execute(`INSERT INTO computers (id,host_hash,status,revision,created_at,updated_at)
|
|
82
|
-
VALUES (?,?,?,?,?,?) ON DUPLICATE KEY UPDATE host_hash=VALUES(host_hash),status=VALUES(status),
|
|
83
|
-
revision=VALUES(revision),updated_at=VALUES(updated_at)`,
|
|
84
|
-
[record.id, record.hostHash, record.status, record.revision, sqlTime(record.createdAt), sqlTime(record.updatedAt)]);
|
|
85
|
-
await connection.execute('DELETE FROM mobile_authorizations WHERE computer_id = ?', [record.id]);
|
|
86
|
-
for (const client of record.clients) await connection.execute(
|
|
87
|
-
'INSERT INTO mobile_authorizations (computer_id,client_id,credential_hash,created_at,updated_at) VALUES (?,?,?,?,?)',
|
|
88
|
-
[record.id, client.id, client.hash, sqlTime(client.createdAt), sqlTime(client.updatedAt)]);
|
|
89
|
-
if (record.officialComputer) {
|
|
90
|
-
const item = record.officialComputer;
|
|
91
|
-
await connection.execute(`INSERT INTO official_computers (computer_id,environment_id,name,hostname,updated_at)
|
|
92
|
-
VALUES (?,?,?,?,?) ON DUPLICATE KEY UPDATE environment_id=VALUES(environment_id),name=VALUES(name),
|
|
93
|
-
hostname=VALUES(hostname),updated_at=VALUES(updated_at)`,
|
|
94
|
-
[record.id, item.environmentId, item.name, item.hostname, sqlTime(item.updatedAt)]);
|
|
95
|
-
}
|
|
96
|
-
await connection.commit(); records.set(record.id, record);
|
|
97
|
-
} catch (error) { await connection.rollback(); throw error; }
|
|
98
|
-
finally { connection.release(); }
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
admin,
|
|
102
|
-
close: () => pool.end(),
|
|
103
|
-
};
|
|
104
|
-
} catch (error) { await pool.end(); throw error; }
|
|
105
|
-
}
|
|
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
|
+
|
|
9
|
+
const sqlTime = value => value.replace('T', ' ').replace(/Z$/, '');
|
|
10
|
+
const isoTime = value => value.replace(' ', 'T') + 'Z';
|
|
11
|
+
|
|
12
|
+
export async function openRelayMysql(configFile, initialMaxRelaySessions) {
|
|
13
|
+
const config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
|
14
|
+
if (!config.database || !config.user || !config.password || !(config.socketPath || config.host)) {
|
|
15
|
+
throw new Error('Incomplete relay MySQL configuration');
|
|
16
|
+
}
|
|
17
|
+
const pool = mysql.createPool({ ...config, waitForConnections: true, connectionLimit: 4,
|
|
18
|
+
namedPlaceholders: false, dateStrings: true, timezone: 'Z', multipleStatements: false });
|
|
19
|
+
try {
|
|
20
|
+
const [versions] = await pool.query('SELECT version, sha256 FROM schema_migrations');
|
|
21
|
+
const knownVersions = relaySchemaVersions;
|
|
22
|
+
if (!versions.some(row => row.version === knownVersions[0]) || versions.length > knownVersions.length) throw new Error('Unexpected relay database schema');
|
|
23
|
+
for (const row of versions) {
|
|
24
|
+
if (!knownVersions.includes(row.version)) throw new Error('Unexpected relay database schema');
|
|
25
|
+
const source = fs.readFileSync(fileURLToPath(new URL(`../../database/${row.version}.sql`, import.meta.url)));
|
|
26
|
+
if (row.sha256 !== createHash('sha256').update(source).digest('hex')) throw new Error(`Unexpected relay database schema: ${row.version}`);
|
|
27
|
+
}
|
|
28
|
+
const [computers] = await pool.query('SELECT id, host_hash, status, revision, created_at, updated_at FROM computers');
|
|
29
|
+
const [clients] = await pool.query('SELECT computer_id, client_id, credential_hash, created_at, updated_at FROM mobile_authorizations ORDER BY created_at');
|
|
30
|
+
const [official] = await pool.query('SELECT computer_id, environment_id, name, hostname, updated_at FROM official_computers');
|
|
31
|
+
const records = new Map(computers.map(row => [row.id, { id: row.id, hostHash: row.host_hash, status: row.status,
|
|
32
|
+
revision: Number(row.revision), createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at), clients: [] }]));
|
|
33
|
+
for (const row of clients) {
|
|
34
|
+
const record = records.get(row.computer_id);
|
|
35
|
+
if (!record) throw new Error('Orphan mobile authorization');
|
|
36
|
+
record.clients.push({ id: row.client_id, hash: row.credential_hash,
|
|
37
|
+
createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at) });
|
|
38
|
+
}
|
|
39
|
+
for (const row of official) {
|
|
40
|
+
const record = records.get(row.computer_id);
|
|
41
|
+
if (!record) throw new Error('Orphan official computer');
|
|
42
|
+
record.officialComputer = { environmentId: row.environment_id, name: row.name,
|
|
43
|
+
hostname: row.hostname, updatedAt: isoTime(row.updated_at) };
|
|
44
|
+
}
|
|
45
|
+
const validator = deviceStore();
|
|
46
|
+
for (const record of records.values()) validator.save(record);
|
|
47
|
+
|
|
48
|
+
const [settings] = await pool.query('SELECT max_relay_sessions FROM relay_settings WHERE id = 1');
|
|
49
|
+
if (settings.length !== 1) throw new Error('Missing relay settings');
|
|
50
|
+
const [rows] = await pool.query('SELECT id, title, message, status, created_at, updated_at, published_at FROM announcements ORDER BY created_at DESC');
|
|
51
|
+
const announcements = rows.map(row => ({ id: row.id, title: row.title, message: row.message, status: row.status,
|
|
52
|
+
createdAt: isoTime(row.created_at), updatedAt: isoTime(row.updated_at),
|
|
53
|
+
publishedAt: row.published_at ? isoTime(row.published_at) : null }));
|
|
54
|
+
const active = announcements.find(item => item.status === 'active');
|
|
55
|
+
const initial = { version: 3, maxRelaySessions: settings[0].max_relay_sessions, announcements,
|
|
56
|
+
announcement: active ? { id: active.id, title: active.title, message: active.message, publishedAt: active.publishedAt } : null };
|
|
57
|
+
const admin = relayAdminState(undefined, initialMaxRelaySessions, { initial, persist: async next => {
|
|
58
|
+
const connection = await pool.getConnection();
|
|
59
|
+
try {
|
|
60
|
+
await connection.beginTransaction();
|
|
61
|
+
await connection.execute('UPDATE relay_settings SET max_relay_sessions = ?, updated_at = UTC_TIMESTAMP(3) WHERE id = 1', [next.maxRelaySessions]);
|
|
62
|
+
await connection.query('DELETE FROM announcements');
|
|
63
|
+
for (const item of next.announcements) await connection.execute(
|
|
64
|
+
'INSERT INTO announcements (id,title,message,status,created_at,updated_at,published_at) VALUES (?,?,?,?,?,?,?)',
|
|
65
|
+
[item.id, item.title, item.message, item.status, sqlTime(item.createdAt), sqlTime(item.updatedAt),
|
|
66
|
+
item.publishedAt ? sqlTime(item.publishedAt) : null]);
|
|
67
|
+
await connection.commit();
|
|
68
|
+
} catch (error) { await connection.rollback(); throw error; }
|
|
69
|
+
finally { connection.release(); }
|
|
70
|
+
} });
|
|
71
|
+
return {
|
|
72
|
+
pool,
|
|
73
|
+
schemaVersions: versions.map(row => row.version),
|
|
74
|
+
devices: {
|
|
75
|
+
entries: () => [...records.values()],
|
|
76
|
+
async save(record) {
|
|
77
|
+
validator.save(record);
|
|
78
|
+
const connection = await pool.getConnection();
|
|
79
|
+
try {
|
|
80
|
+
await connection.beginTransaction();
|
|
81
|
+
await connection.execute(`INSERT INTO computers (id,host_hash,status,revision,created_at,updated_at)
|
|
82
|
+
VALUES (?,?,?,?,?,?) ON DUPLICATE KEY UPDATE host_hash=VALUES(host_hash),status=VALUES(status),
|
|
83
|
+
revision=VALUES(revision),updated_at=VALUES(updated_at)`,
|
|
84
|
+
[record.id, record.hostHash, record.status, record.revision, sqlTime(record.createdAt), sqlTime(record.updatedAt)]);
|
|
85
|
+
await connection.execute('DELETE FROM mobile_authorizations WHERE computer_id = ?', [record.id]);
|
|
86
|
+
for (const client of record.clients) await connection.execute(
|
|
87
|
+
'INSERT INTO mobile_authorizations (computer_id,client_id,credential_hash,created_at,updated_at) VALUES (?,?,?,?,?)',
|
|
88
|
+
[record.id, client.id, client.hash, sqlTime(client.createdAt), sqlTime(client.updatedAt)]);
|
|
89
|
+
if (record.officialComputer) {
|
|
90
|
+
const item = record.officialComputer;
|
|
91
|
+
await connection.execute(`INSERT INTO official_computers (computer_id,environment_id,name,hostname,updated_at)
|
|
92
|
+
VALUES (?,?,?,?,?) ON DUPLICATE KEY UPDATE environment_id=VALUES(environment_id),name=VALUES(name),
|
|
93
|
+
hostname=VALUES(hostname),updated_at=VALUES(updated_at)`,
|
|
94
|
+
[record.id, item.environmentId, item.name, item.hostname, sqlTime(item.updatedAt)]);
|
|
95
|
+
}
|
|
96
|
+
await connection.commit(); records.set(record.id, record);
|
|
97
|
+
} catch (error) { await connection.rollback(); throw error; }
|
|
98
|
+
finally { connection.release(); }
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
admin,
|
|
102
|
+
close: () => pool.end(),
|
|
103
|
+
};
|
|
104
|
+
} catch (error) { await pool.end(); throw error; }
|
|
105
|
+
}
|
|
@@ -8,7 +8,7 @@ const HIGH_WATER = 1024 * 1024;
|
|
|
8
8
|
const LOW_WATER = 512 * 1024;
|
|
9
9
|
const MAX_QUEUED = 16 * 1024 * 1024;
|
|
10
10
|
|
|
11
|
-
export async function createP2pProbe({ signal, report = () => {}, onData = () => {}, onFileChannel, iceServers = [] }) {
|
|
11
|
+
export async function createP2pProbe({ signal, report = () => {}, onData = () => {}, onFileChannel, iceServers = [], purpose = '' }) {
|
|
12
12
|
if (!validProbeIceServers(iceServers)) throw new Error('Invalid probe STUN configuration');
|
|
13
13
|
const { default: rtc } = await import('node-datachannel');
|
|
14
14
|
const peer = new rtc.PeerConnection('code-relax-probe', {
|
|
@@ -25,18 +25,23 @@ export async function createP2pProbe({ signal, report = () => {}, onData = () =>
|
|
|
25
25
|
const outbound = [];
|
|
26
26
|
const files = new Map();
|
|
27
27
|
const nonce = randomUUID();
|
|
28
|
+
const idle = new P2pDataFramer.IdleWatch(message => {
|
|
29
|
+
if (!channel.sendMessage(JSON.stringify(message))) throw new Error('Idle probe send failed');
|
|
30
|
+
}, () => finish('idle-timeout'));
|
|
28
31
|
const timer = setTimeout(() => finish(verified ? 'closed' : 'timeout'), 15000);
|
|
29
32
|
function finish(state) {
|
|
30
33
|
if (closed) return;
|
|
31
|
-
closed = true; clearTimeout(timer); candidates = []; queuedBytes = 0; outbound.length = 0; framer.reset();
|
|
34
|
+
closed = true; clearTimeout(timer); idle.close(); candidates = []; queuedBytes = 0; outbound.length = 0; framer.reset();
|
|
32
35
|
for (const socket of files.values()) socket.close(1011);
|
|
33
36
|
files.clear();
|
|
34
37
|
const summary = diagnostic.snapshot(state);
|
|
35
38
|
channel?.close(); peer.close(); report(state, summary);
|
|
39
|
+
signal({ kind: 'close' });
|
|
36
40
|
}
|
|
37
41
|
function verify() {
|
|
38
42
|
if (verified || !pingReceived || !pongReceived) return;
|
|
39
43
|
verified = true; clearTimeout(timer);
|
|
44
|
+
if (remoteDirect) idle.received();
|
|
40
45
|
report(remoteDirect ? 'direct' : 'verified', diagnostic.snapshot('verified'));
|
|
41
46
|
pump();
|
|
42
47
|
for (const raw of files.keys()) activateFile(raw);
|
|
@@ -48,9 +53,9 @@ export async function createP2pProbe({ signal, report = () => {}, onData = () =>
|
|
|
48
53
|
raw.sendMessage('{"type":"rtc-file-ready"}');
|
|
49
54
|
}
|
|
50
55
|
peer.onDataChannel(raw => {
|
|
51
|
-
if (closed || !onFileChannel || raw.getLabel() !== 'code-relax-file-v1' || files.size >= 4) { raw.close(); return; }
|
|
56
|
+
if (closed || purpose !== 'file' || !onFileChannel || raw.getLabel() !== 'code-relax-file-v1' || files.size >= 4) { raw.close(); return; }
|
|
52
57
|
const socket = new FileChannel({ buffered: () => raw.bufferedAmount(),
|
|
53
|
-
send: value => typeof value === 'string' ? raw.sendMessage(value) : raw.sendMessageBinary(value), close: () => raw.close() });
|
|
58
|
+
send: value => typeof value === 'string' ? raw.sendMessage(value) : raw.sendMessageBinary(value), close: () => raw.close(), received: () => idle.received() });
|
|
54
59
|
files.set(raw, socket);
|
|
55
60
|
socket.addEventListener('close', () => files.delete(raw));
|
|
56
61
|
try { onFileChannel(socket); }
|
|
@@ -76,7 +81,7 @@ export async function createP2pProbe({ signal, report = () => {}, onData = () =>
|
|
|
76
81
|
} catch { diagnostic.error = 'channel'; finish('failed'); }
|
|
77
82
|
}
|
|
78
83
|
function sendData(payload) {
|
|
79
|
-
if (!verified || !remoteDirect || closed || !channel?.isOpen()) return false;
|
|
84
|
+
if (!verified || !remoteDirect || closed || purpose === 'file' || !channel?.isOpen()) return false;
|
|
80
85
|
let item;
|
|
81
86
|
try { item = framer.create(payload, `${dataPrefix}-${++dataSerial}`); }
|
|
82
87
|
catch { return false; }
|
|
@@ -98,9 +103,11 @@ export async function createP2pProbe({ signal, report = () => {}, onData = () =>
|
|
|
98
103
|
try {
|
|
99
104
|
if (closed || typeof value !== 'string' || value.length > 65536) throw new Error('Invalid P2P frame');
|
|
100
105
|
const message = JSON.parse(value);
|
|
106
|
+
if (verified && remoteDirect && idle.accept(message)) return;
|
|
101
107
|
const data = framer.accept(message);
|
|
102
108
|
if (data.handled) {
|
|
103
|
-
if (!verified || !remoteDirect) throw new Error('P2P transport not verified');
|
|
109
|
+
if (!verified || !remoteDirect || purpose === 'file') throw new Error('P2P transport not verified');
|
|
110
|
+
idle.received();
|
|
104
111
|
if (data.complete) onData(data.payload);
|
|
105
112
|
return;
|
|
106
113
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { privacyPage } from './privacy-page.mjs';
|
|
2
|
+
import { createAndroidReleaseHandler } from './android-releases.mjs';
|
|
3
|
+
import { androidReleaseStorage } from '../../relay-admin/android-release-storage.mjs';
|
|
2
4
|
import { longPairing } from './long-pairing.mjs';
|
|
3
5
|
import http from 'node:http';
|
|
4
6
|
import fs from 'node:fs';
|
|
@@ -21,7 +23,10 @@ import { relayDiagnostics } from './diagnostics.mjs';
|
|
|
21
23
|
export async function startSelfRelay({ port = 0, hostKey = secret(), pairingTtlMs = 120000,
|
|
22
24
|
maxConnections = 128, maxClientsPerHost = 16, maxPayload = 8 * 1024 * 1024, stateFile,
|
|
23
25
|
maxRelaySessions = 8, adminStateFile, mysqlConfigFile, accountConfigFile, usageDiagnosticKeyFile,
|
|
24
|
-
publicRelayUrl = '', appDownloadUrl = '', debugAllowlistFile, longPairingFile,
|
|
26
|
+
publicRelayUrl = '', appDownloadUrl = '', debugAllowlistFile, longPairingFile,
|
|
27
|
+
androidReleaseConfigFile, androidReleaseCredentialFile, log = () => {} } = {}) {
|
|
28
|
+
const androidReleases = createAndroidReleaseHandler({
|
|
29
|
+
...(androidReleaseConfigFile ? androidReleaseStorage(androidReleaseConfigFile, androidReleaseCredentialFile) : {}), log });
|
|
25
30
|
const longInvitations = longPairing(longPairingFile);
|
|
26
31
|
longInvitations.list();
|
|
27
32
|
function longInvitation(code) {
|
|
@@ -107,6 +112,9 @@ export async function startSelfRelay({ port = 0, hostKey = secret(), pairingTtlM
|
|
|
107
112
|
}
|
|
108
113
|
const server = http.createServer((request, response) => {
|
|
109
114
|
const target = new URL(request.url || '/', `http://${request.headers.host || 'localhost'}`);
|
|
115
|
+
if (target.pathname.startsWith('/code-relax/android/')) {
|
|
116
|
+
void androidReleases(request, response, target); return;
|
|
117
|
+
}
|
|
110
118
|
if (target.pathname === '/admin' || target.pathname.startsWith('/admin/')) {
|
|
111
119
|
adminTail = adminTail.then(() => handleAdmin(request, response, target)).catch(() => {
|
|
112
120
|
if (!response.headersSent) adminReply(response, 500, { error: 'Admin operation failed' });
|
|
@@ -746,9 +754,10 @@ export async function startSelfRelay({ port = 0, hostKey = secret(), pairingTtlM
|
|
|
746
754
|
p2pProbeRepeat: connection.p2pProbe && connection.repeat });
|
|
747
755
|
else if (message.type === 'p2p-probe' && connection.p2pProbe && validProbeSignal(message)) {
|
|
748
756
|
const diagnostic = message.purpose === 'diagnostic';
|
|
749
|
-
|
|
750
|
-
if (
|
|
751
|
-
if (
|
|
757
|
+
const file = message.purpose === 'file';
|
|
758
|
+
if (message.purpose && !diagnostic && !file) return fail(1008, 'Invalid probe purpose');
|
|
759
|
+
if (connection[file ? 'fileProbeId' : diagnostic ? 'diagnosticProbeId' : 'probeId'] !== message.probeId) return;
|
|
760
|
+
if (++connection[file ? 'fileSignals' : diagnostic ? 'diagnosticSignals' : 'signals'] > 150) return fail(1008, 'Probe signal limit');
|
|
752
761
|
send(connection.ws, { ...message, session: undefined });
|
|
753
762
|
}
|
|
754
763
|
else if (message.type === 'detach') connection.ws.close(1011, 'Local Bridge unavailable');
|
|
@@ -773,14 +782,15 @@ export async function startSelfRelay({ port = 0, hostKey = secret(), pairingTtlM
|
|
|
773
782
|
const connection = room.connections.get(clientId);
|
|
774
783
|
if (!connection.p2pProbe || !validProbeSignal(message)) return fail(1008, 'Invalid probe signal');
|
|
775
784
|
const diagnostic = message.purpose === 'diagnostic';
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
const
|
|
779
|
-
const
|
|
785
|
+
const file = message.purpose === 'file';
|
|
786
|
+
if (message.purpose && !diagnostic && !file) return fail(1008, 'Invalid probe purpose');
|
|
787
|
+
const idField = file ? 'fileProbeId' : diagnostic ? 'diagnosticProbeId' : 'probeId';
|
|
788
|
+
const signalsField = file ? 'fileSignals' : diagnostic ? 'diagnosticSignals' : 'signals';
|
|
789
|
+
const startedField = file ? 'fileProbeStarted' : diagnostic ? 'diagnosticProbeStarted' : 'probeStarted';
|
|
780
790
|
if (message.kind === 'start') {
|
|
781
791
|
if (connection[idField] && (!connection.repeat || Date.now() - connection[startedField] < 2000)) {
|
|
782
792
|
send(ws, { type: 'p2p-probe', version: 1, probeId: message.probeId,
|
|
783
|
-
...(
|
|
793
|
+
...(message.purpose ? { purpose: message.purpose } : {}), kind: 'close' }); return;
|
|
784
794
|
}
|
|
785
795
|
connection[idField] = message.probeId; connection[signalsField] = 0; connection[startedField] = Date.now();
|
|
786
796
|
}
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
const dayMs = 86400000;
|
|
2
|
-
const chinaOffsetMs = 8 * 3600000;
|
|
3
|
-
|
|
4
|
-
export function usageDaySlices(start, end) {
|
|
5
|
-
const slices = [];
|
|
6
|
-
for (let cursor = start; cursor < end;) {
|
|
7
|
-
const date = new Date(cursor + chinaOffsetMs).toISOString().slice(0, 10);
|
|
8
|
-
const nextDay = Date.parse(`${date}T00:00:00Z`) + dayMs - chinaOffsetMs;
|
|
9
|
-
const until = Math.min(end, nextDay);
|
|
10
|
-
slices.push({ date, start: cursor, end: until });
|
|
11
|
-
cursor = until;
|
|
12
|
-
}
|
|
13
|
-
return slices;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const readIntervals = value => Array.isArray(value) ? value : JSON.parse(value || '[]');
|
|
17
|
-
|
|
18
|
-
export function mergeUsageIntervals(existing, start, end) {
|
|
19
|
-
const sorted = [...existing, [start, end]].sort((a, b) => a[0] - b[0]);
|
|
20
|
-
const merged = [];
|
|
21
|
-
for (const range of sorted) {
|
|
22
|
-
const last = merged.at(-1);
|
|
23
|
-
if (last && range[0] <= last[1]) last[1] = Math.max(last[1], range[1]);
|
|
24
|
-
else merged.push([...range]);
|
|
25
|
-
}
|
|
26
|
-
return { intervals: merged, seconds: merged.reduce((sum, [from, until]) => sum + until - from, 0) / 1000 };
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export async function recordDailyUsage(db, userId, computerId, free, start, end, now) {
|
|
30
|
-
for (const slice of usageDaySlices(start, end)) {
|
|
31
|
-
await db.execute(`INSERT IGNORE INTO relay_usage_user_days
|
|
32
|
-
(user_id,usage_date,intervals,updated_at) VALUES (?,?,'[]',?)`, [userId, slice.date, now]);
|
|
33
|
-
const [userRows] = await db.execute(`SELECT intervals FROM relay_usage_user_days
|
|
34
|
-
WHERE user_id=? AND usage_date=? FOR UPDATE`, [userId, slice.date]);
|
|
35
|
-
const user = mergeUsageIntervals(readIntervals(userRows[0].intervals), slice.start, slice.end);
|
|
36
|
-
await db.execute(`UPDATE relay_usage_user_days SET intervals=?,task_seconds=?,updated_at=?
|
|
37
|
-
WHERE user_id=? AND usage_date=?`,
|
|
38
|
-
[JSON.stringify(user.intervals), user.seconds, now, userId, slice.date]);
|
|
39
|
-
|
|
40
|
-
await db.execute(`INSERT IGNORE INTO relay_usage_computer_days
|
|
41
|
-
(computer_id,usage_date,intervals,free_intervals,updated_at) VALUES (?,?,'[]','[]',?)`,
|
|
42
|
-
[computerId, slice.date, now]);
|
|
43
|
-
const [computerRows] = await db.execute(`SELECT intervals,free_intervals FROM relay_usage_computer_days
|
|
44
|
-
WHERE computer_id=? AND usage_date=? FOR UPDATE`, [computerId, slice.date]);
|
|
45
|
-
const computer = mergeUsageIntervals(readIntervals(computerRows[0].intervals), slice.start, slice.end);
|
|
46
|
-
const freeIntervals = readIntervals(computerRows[0].free_intervals);
|
|
47
|
-
const freeComputer = free ? mergeUsageIntervals(freeIntervals, slice.start, slice.end) : null;
|
|
48
|
-
await db.execute(`UPDATE relay_usage_computer_days SET intervals=?,task_seconds=?,
|
|
49
|
-
free_intervals=?,free_task_seconds=COALESCE(?,free_task_seconds),updated_at=?
|
|
50
|
-
WHERE computer_id=? AND usage_date=?`,
|
|
51
|
-
[JSON.stringify(computer.intervals), computer.seconds,
|
|
52
|
-
JSON.stringify(freeComputer?.intervals || freeIntervals), freeComputer?.seconds ?? null,
|
|
53
|
-
now, computerId, slice.date]);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
1
|
+
const dayMs = 86400000;
|
|
2
|
+
const chinaOffsetMs = 8 * 3600000;
|
|
3
|
+
|
|
4
|
+
export function usageDaySlices(start, end) {
|
|
5
|
+
const slices = [];
|
|
6
|
+
for (let cursor = start; cursor < end;) {
|
|
7
|
+
const date = new Date(cursor + chinaOffsetMs).toISOString().slice(0, 10);
|
|
8
|
+
const nextDay = Date.parse(`${date}T00:00:00Z`) + dayMs - chinaOffsetMs;
|
|
9
|
+
const until = Math.min(end, nextDay);
|
|
10
|
+
slices.push({ date, start: cursor, end: until });
|
|
11
|
+
cursor = until;
|
|
12
|
+
}
|
|
13
|
+
return slices;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const readIntervals = value => Array.isArray(value) ? value : JSON.parse(value || '[]');
|
|
17
|
+
|
|
18
|
+
export function mergeUsageIntervals(existing, start, end) {
|
|
19
|
+
const sorted = [...existing, [start, end]].sort((a, b) => a[0] - b[0]);
|
|
20
|
+
const merged = [];
|
|
21
|
+
for (const range of sorted) {
|
|
22
|
+
const last = merged.at(-1);
|
|
23
|
+
if (last && range[0] <= last[1]) last[1] = Math.max(last[1], range[1]);
|
|
24
|
+
else merged.push([...range]);
|
|
25
|
+
}
|
|
26
|
+
return { intervals: merged, seconds: merged.reduce((sum, [from, until]) => sum + until - from, 0) / 1000 };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export async function recordDailyUsage(db, userId, computerId, free, start, end, now) {
|
|
30
|
+
for (const slice of usageDaySlices(start, end)) {
|
|
31
|
+
await db.execute(`INSERT IGNORE INTO relay_usage_user_days
|
|
32
|
+
(user_id,usage_date,intervals,updated_at) VALUES (?,?,'[]',?)`, [userId, slice.date, now]);
|
|
33
|
+
const [userRows] = await db.execute(`SELECT intervals FROM relay_usage_user_days
|
|
34
|
+
WHERE user_id=? AND usage_date=? FOR UPDATE`, [userId, slice.date]);
|
|
35
|
+
const user = mergeUsageIntervals(readIntervals(userRows[0].intervals), slice.start, slice.end);
|
|
36
|
+
await db.execute(`UPDATE relay_usage_user_days SET intervals=?,task_seconds=?,updated_at=?
|
|
37
|
+
WHERE user_id=? AND usage_date=?`,
|
|
38
|
+
[JSON.stringify(user.intervals), user.seconds, now, userId, slice.date]);
|
|
39
|
+
|
|
40
|
+
await db.execute(`INSERT IGNORE INTO relay_usage_computer_days
|
|
41
|
+
(computer_id,usage_date,intervals,free_intervals,updated_at) VALUES (?,?,'[]','[]',?)`,
|
|
42
|
+
[computerId, slice.date, now]);
|
|
43
|
+
const [computerRows] = await db.execute(`SELECT intervals,free_intervals FROM relay_usage_computer_days
|
|
44
|
+
WHERE computer_id=? AND usage_date=? FOR UPDATE`, [computerId, slice.date]);
|
|
45
|
+
const computer = mergeUsageIntervals(readIntervals(computerRows[0].intervals), slice.start, slice.end);
|
|
46
|
+
const freeIntervals = readIntervals(computerRows[0].free_intervals);
|
|
47
|
+
const freeComputer = free ? mergeUsageIntervals(freeIntervals, slice.start, slice.end) : null;
|
|
48
|
+
await db.execute(`UPDATE relay_usage_computer_days SET intervals=?,task_seconds=?,
|
|
49
|
+
free_intervals=?,free_task_seconds=COALESCE(?,free_task_seconds),updated_at=?
|
|
50
|
+
WHERE computer_id=? AND usage_date=?`,
|
|
51
|
+
[JSON.stringify(computer.intervals), computer.seconds,
|
|
52
|
+
JSON.stringify(freeComputer?.intervals || freeIntervals), freeComputer?.seconds ?? null,
|
|
53
|
+
now, computerId, slice.date]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import net from 'node:net';
|
|
2
|
-
|
|
3
|
-
const pipePath = String.raw`\\.\pipe\CodeRelaxRtcRouteHelper`;
|
|
4
|
-
|
|
5
|
-
export function createWindowsRouteHelper({ enabled = false, token = '', iceServers = [], report = () => {} } = {}) {
|
|
6
|
-
const addresses = new Set();
|
|
7
|
-
const routeAddresses = new Set(iceServers.map(stunAddress).filter(publicIpv4));
|
|
8
|
-
let chain = Promise.resolve();
|
|
9
|
-
const enqueue = task => chain = chain.then(task, task);
|
|
10
|
-
if (!enabled || process.platform !== 'win32') return { prepare() { return Promise.resolve(); }, include() { return Promise.resolve(); } };
|
|
11
|
-
if (!/^[A-Za-z0-9_-]{32,128}$/.test(token)) throw new Error('Windows RTC 路由辅助凭据无效');
|
|
12
|
-
const add = values => enqueue(async () => {
|
|
13
|
-
for (const value of values) addresses.add(value);
|
|
14
|
-
if (!values.length) return;
|
|
15
|
-
const result = await request({ token, action: 'add', addresses: [...addresses], ttlSeconds: 120 });
|
|
16
|
-
if (!result.ok) throw new Error(result.error || 'Windows RTC 路由辅助不可用');
|
|
17
|
-
report('windows-route-helper', { count: addresses.size });
|
|
18
|
-
});
|
|
19
|
-
return {
|
|
20
|
-
prepare() { return add([...routeAddresses]); },
|
|
21
|
-
include(message) {
|
|
22
|
-
const discovered = candidateAddresses(message);
|
|
23
|
-
return add(discovered.filter(value => !addresses.has(value)));
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function stunAddress(value) {
|
|
29
|
-
const match = /^stun:([^:]+):\d{1,5}$/i.exec(value || '');
|
|
30
|
-
return match?.[1] || '';
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function candidateAddresses(message) {
|
|
34
|
-
const text = message?.kind === 'candidate' ? message.candidate : ['offer', 'answer'].includes(message?.kind) ? message.sdp : '';
|
|
35
|
-
const result = new Set();
|
|
36
|
-
for (const line of String(text || '').split(/\r?\n/)) {
|
|
37
|
-
const parts = line.trim().replace(/^a=/, '').split(/\s+/);
|
|
38
|
-
if (parts[0]?.startsWith('candidate:') && parts[6] === 'typ' && publicIpv4(parts[4])) result.add(parts[4]);
|
|
39
|
-
}
|
|
40
|
-
return [...result];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function publicIpv4(value) {
|
|
44
|
-
const parts = String(value).split('.').map(Number);
|
|
45
|
-
if (parts.length !== 4 || parts.some(part => !Number.isInteger(part) || part < 0 || part > 255)) return false;
|
|
46
|
-
const [a, b] = parts;
|
|
47
|
-
return a !== 0 && a !== 10 && a !== 127 && a < 224 && !(a === 169 && b === 254) && !(a === 172 && b >= 16 && b <= 31) &&
|
|
48
|
-
!(a === 192 && b === 168) && !(a === 100 && b >= 64 && b <= 127) && !(a === 198 && (b === 18 || b === 19));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function request(value) {
|
|
52
|
-
return new Promise((resolve, reject) => {
|
|
53
|
-
const socket = net.createConnection(pipePath);
|
|
54
|
-
let text = '';
|
|
55
|
-
let settled = false;
|
|
56
|
-
const rejectOnce = error => { if (!settled) { settled = true; reject(error); } };
|
|
57
|
-
const resolveOnce = result => { if (!settled) { settled = true; resolve(result); } };
|
|
58
|
-
socket.setTimeout(3000);
|
|
59
|
-
socket.setEncoding('utf8');
|
|
60
|
-
socket.once('connect', () => socket.write(`${JSON.stringify(value)}\n`));
|
|
61
|
-
socket.on('data', chunk => {
|
|
62
|
-
text += chunk;
|
|
63
|
-
const line = text.indexOf('\n');
|
|
64
|
-
if (line < 0) return;
|
|
65
|
-
try { resolveOnce(JSON.parse(text.slice(0, line))); socket.end(); }
|
|
66
|
-
catch { rejectOnce(new Error('Windows RTC 路由辅助响应无效')); socket.destroy(); }
|
|
67
|
-
});
|
|
68
|
-
socket.once('timeout', () => socket.destroy(new Error('Windows RTC 路由辅助超时')));
|
|
69
|
-
socket.once('error', rejectOnce);
|
|
70
|
-
socket.once('close', hadError => {
|
|
71
|
-
if (hadError || settled) return;
|
|
72
|
-
rejectOnce(new Error('Windows RTC 路由辅助响应无效'));
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
}
|
|
1
|
+
import net from 'node:net';
|
|
2
|
+
|
|
3
|
+
const pipePath = String.raw`\\.\pipe\CodeRelaxRtcRouteHelper`;
|
|
4
|
+
|
|
5
|
+
export function createWindowsRouteHelper({ enabled = false, token = '', iceServers = [], report = () => {} } = {}) {
|
|
6
|
+
const addresses = new Set();
|
|
7
|
+
const routeAddresses = new Set(iceServers.map(stunAddress).filter(publicIpv4));
|
|
8
|
+
let chain = Promise.resolve();
|
|
9
|
+
const enqueue = task => chain = chain.then(task, task);
|
|
10
|
+
if (!enabled || process.platform !== 'win32') return { prepare() { return Promise.resolve(); }, include() { return Promise.resolve(); } };
|
|
11
|
+
if (!/^[A-Za-z0-9_-]{32,128}$/.test(token)) throw new Error('Windows RTC 路由辅助凭据无效');
|
|
12
|
+
const add = values => enqueue(async () => {
|
|
13
|
+
for (const value of values) addresses.add(value);
|
|
14
|
+
if (!values.length) return;
|
|
15
|
+
const result = await request({ token, action: 'add', addresses: [...addresses], ttlSeconds: 120 });
|
|
16
|
+
if (!result.ok) throw new Error(result.error || 'Windows RTC 路由辅助不可用');
|
|
17
|
+
report('windows-route-helper', { count: addresses.size });
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
prepare() { return add([...routeAddresses]); },
|
|
21
|
+
include(message) {
|
|
22
|
+
const discovered = candidateAddresses(message);
|
|
23
|
+
return add(discovered.filter(value => !addresses.has(value)));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function stunAddress(value) {
|
|
29
|
+
const match = /^stun:([^:]+):\d{1,5}$/i.exec(value || '');
|
|
30
|
+
return match?.[1] || '';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function candidateAddresses(message) {
|
|
34
|
+
const text = message?.kind === 'candidate' ? message.candidate : ['offer', 'answer'].includes(message?.kind) ? message.sdp : '';
|
|
35
|
+
const result = new Set();
|
|
36
|
+
for (const line of String(text || '').split(/\r?\n/)) {
|
|
37
|
+
const parts = line.trim().replace(/^a=/, '').split(/\s+/);
|
|
38
|
+
if (parts[0]?.startsWith('candidate:') && parts[6] === 'typ' && publicIpv4(parts[4])) result.add(parts[4]);
|
|
39
|
+
}
|
|
40
|
+
return [...result];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function publicIpv4(value) {
|
|
44
|
+
const parts = String(value).split('.').map(Number);
|
|
45
|
+
if (parts.length !== 4 || parts.some(part => !Number.isInteger(part) || part < 0 || part > 255)) return false;
|
|
46
|
+
const [a, b] = parts;
|
|
47
|
+
return a !== 0 && a !== 10 && a !== 127 && a < 224 && !(a === 169 && b === 254) && !(a === 172 && b >= 16 && b <= 31) &&
|
|
48
|
+
!(a === 192 && b === 168) && !(a === 100 && b >= 64 && b <= 127) && !(a === 198 && (b === 18 || b === 19));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function request(value) {
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
const socket = net.createConnection(pipePath);
|
|
54
|
+
let text = '';
|
|
55
|
+
let settled = false;
|
|
56
|
+
const rejectOnce = error => { if (!settled) { settled = true; reject(error); } };
|
|
57
|
+
const resolveOnce = result => { if (!settled) { settled = true; resolve(result); } };
|
|
58
|
+
socket.setTimeout(3000);
|
|
59
|
+
socket.setEncoding('utf8');
|
|
60
|
+
socket.once('connect', () => socket.write(`${JSON.stringify(value)}\n`));
|
|
61
|
+
socket.on('data', chunk => {
|
|
62
|
+
text += chunk;
|
|
63
|
+
const line = text.indexOf('\n');
|
|
64
|
+
if (line < 0) return;
|
|
65
|
+
try { resolveOnce(JSON.parse(text.slice(0, line))); socket.end(); }
|
|
66
|
+
catch { rejectOnce(new Error('Windows RTC 路由辅助响应无效')); socket.destroy(); }
|
|
67
|
+
});
|
|
68
|
+
socket.once('timeout', () => socket.destroy(new Error('Windows RTC 路由辅助超时')));
|
|
69
|
+
socket.once('error', rejectOnce);
|
|
70
|
+
socket.once('close', hadError => {
|
|
71
|
+
if (hadError || settled) return;
|
|
72
|
+
rejectOnce(new Error('Windows RTC 路由辅助响应无效'));
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|