roomsync 0.0.0-stage → 0.1.7

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 CHANGED
@@ -1,3 +1,159 @@
1
- # Temporary Holding Version
1
+ # RoomSync npm launcher
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ A small, dependency-free launcher for the **Windows x64 RoomSync 0.1.7 host**.
4
+ It bundles the native executable and opens its local setup page. No Rust compiler,
5
+ extra runtime download, install script or paid service is needed. The launcher
6
+ does not install a virtual driver; optional synchronized Windows speakers require
7
+ one to be installed and routed separately by the user.
8
+ Requires Node.js 20+ and Windows 10 version 1703 or newer with x64 Node.js.
9
+ The Android receiver app is installed separately. Download [the latest APK](https://github.com/Nyaughh/roomsync/releases/latest/download/RoomSync.apk)
10
+ or run `npx roomsync@latest apk`. GitHub sign-in with repository access is required
11
+ while the repository is private. Android **0.1.7** uses a new retained signing key;
12
+ uninstall older previews once before installing it. Use Android **0.1.6 or newer** for
13
+ the matching receive-side diagnostics; earlier revision-3 receivers remain
14
+ wire-compatible.
15
+
16
+ **0.1.6 is a diagnostic update, not a verified fix for silence or cutouts.** It
17
+ adds bounded host queue/send timing counters to Connection details. They help
18
+ separate host dispatch delay from downstream delay, but do not measure Wi-Fi
19
+ transit or prove the physical cause. The shared timeline and playback buffering
20
+ are unchanged by this update.
21
+
22
+ **0.1.7 adds the latest APK link on startup, in help, and through `roomsync apk`.**
23
+ Audio behavior is unchanged from 0.1.6. The package is published as `roomsync`
24
+ by `nyaughh` and remains `UNLICENSED`. Third-party notices are included separately.
25
+
26
+ ## Run from npm
27
+
28
+ In **Windows PowerShell**:
29
+
30
+ ```powershell
31
+ # Run the latest published launcher:
32
+ npx roomsync@latest start
33
+
34
+ # Get the latest Android APK link:
35
+ npx roomsync@latest apk
36
+
37
+ # Or install the local package, then use the short command:
38
+ npm install --global roomsync@latest
39
+ roomsync start
40
+ ```
41
+
42
+ For a verified local tarball, use
43
+ `npx --package ./roomsync-0.1.7.tgz roomsync start`.
44
+
45
+ ## Commands
46
+
47
+ ```text
48
+ roomsync start Open the local control page
49
+ roomsync start --no-browser Start controls and print their address
50
+ roomsync devices List Windows playback endpoints
51
+ roomsync apk Show the latest Android APK download link
52
+ roomsync doctor Verify platform and packaged-host integrity
53
+ roomsync --version
54
+ roomsync --help
55
+ ```
56
+
57
+ Keep the terminal open. Ctrl+C reaches the native host's stop handler. The local
58
+ page binds to a random `127.0.0.1` port; opening it does not start sharing audio.
59
+ Create a private setup code, connect the Android receiver and choose **Start
60
+ listening** in the page. No firewall or audio-routing settings change automatically.
61
+
62
+ macOS, Linux, WSL, Windows 32-bit and native ARM64 Node.js are not supported.
63
+ Help, version, APK links and package inspection still work there, but no host is launched.
64
+ Use Windows PowerShell/Command Prompt, not a WSL shell.
65
+
66
+ In default phone-only capture mode, original Windows audio is not muted or delayed.
67
+ Keep it inaudible in the listening room, for example through headphones, to avoid
68
+ echo. For synchronized Windows speakers, use the explicit routing below. This is an
69
+ unsigned preview, not a claim of zero latency or physically measured speaker
70
+ synchronization. The launcher does not validate audio hardware; `doctor` verifies
71
+ only package integrity/platform support.
72
+
73
+ ## Optional synchronized Windows speakers
74
+
75
+ This opt-in preview sends the same timestamped PCM and common presentation
76
+ timeline to Windows speakers and Android. It does not retroactively delay audio
77
+ already playing through the captured physical endpoint.
78
+
79
+ 1. Separately install a virtual cable from its official provider, such as
80
+ [VB-Audio's VB-CABLE](https://vb-audio.com/Cable/), following its driver,
81
+ administrator/restart and license instructions. No driver is bundled here.
82
+ 2. Route the source applications you intend to share to the cable's **playback**
83
+ endpoint, normally **CABLE Input**. RoomSync captures that output by loopback;
84
+ the recording endpoint **CABLE Output** is not the capture selection.
85
+ 3. In RoomSync Advanced settings, select that explicit virtual capture source,
86
+ enable local speaker playback, and select a different physical speaker output.
87
+ Review and confirm the route. RoomSync will not change Windows/app routing.
88
+ 4. Do not enable Windows **Listen to this device** or another monitor/mixer path
89
+ that duplicates the source or routes speaker output back into the cable.
90
+ 5. Pair the Android receivers and start the group. The local output is measured
91
+ while silent and included in the same budget as the phones. Keep the source
92
+ and speaker selection unchanged during playback.
93
+ 6. Stop the group before changing devices. Restore your usual app/Windows output
94
+ afterward if you changed it, otherwise audio routed into the cable may be silent.
95
+
96
+ Same-endpoint routes are rejected. Strict queue and clock checks can reject
97
+ unsupported outputs or stop a session instead of silently shifting its timeline;
98
+ guarded local playback requires at least two engine periods of actual shared
99
+ buffer capacity. This remains a cloud-built preview, not physically verified
100
+ speaker synchronization. Bluetooth/DSP can add unmeasured delay. Use built-in or
101
+ wired speakers for initial testing.
102
+
103
+ ## Safety and packaging
104
+
105
+ - The complete Windows executable is in the package. No `postinstall`, dynamic
106
+ downloader, PowerShell script, shell command or PATH-selected executable runs.
107
+ - `start` maps only to the native `web` command. `--no-browser` maps to
108
+ `web-headless`; `devices` maps to `list-devices`. Unknown options fail explicitly.
109
+ - SHA256, architecture, package/manifest version consistency and manifest fields
110
+ are checked before execution. The manifest version is release metadata, not a
111
+ runtime query of the executable; CI checks the native source version matches.
112
+ This detects accidental modification/mismatched packages, **not** a compromise
113
+ of both the package binary and manifest. The preview is not code-signed.
114
+ - No telemetry or automatic updater is added. No secret is stored in this package.
115
+ The native app's private pairing and local-controller protections remain intact.
116
+ - npm's tarball integrity covers distribution. Verify the supplied tarball checksum
117
+ and only install a release from the project's confirmed owner.
118
+
119
+ ## Build a package from source (maintainers)
120
+
121
+ The release target is **x86_64-pc-windows-gnu**, matching the bundled preview and
122
+ the dependency-notice inventory. The default Windows MSVC target is not a drop-in
123
+ replacement: it may introduce different notice entries and VC runtime dependencies.
124
+ On Linux with the official distribution's MinGW cross-linker installed:
125
+
126
+ ```sh
127
+ rustup target add x86_64-pc-windows-gnu
128
+ export CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc
129
+ cargo build --release --locked --target x86_64-pc-windows-gnu --manifest-path apps/desktop/Cargo.toml
130
+ binary=apps/desktop/target/x86_64-pc-windows-gnu/release/roomsync-desktop.exe
131
+ hash=$(sha256sum "$binary" | cut -d' ' -f1)
132
+ node packages/npm/scripts/stage-native.cjs --binary "$binary" --notices docs/THIRD_PARTY_NOTICES.txt --source-commit "$(git rev-parse HEAD)" --expected-sha256 "$hash"
133
+ npm --prefix packages/npm test
134
+ mkdir -p dist
135
+ npm pack ./packages/npm --pack-destination dist
136
+ ```
137
+
138
+ The stage command accepts a known,
139
+ locally built or independently verified Windows x64 executable; it never fetches
140
+ one. The manifest is written last and `prepack` refuses an incomplete or mismatched
141
+ bundle. Existing release inputs require their published/previously verified binary
142
+ digest, not a guessed digest. Keep npm/native versions in sync. If registry
143
+ dependencies change, regenerate the upstream notice inventory rather than merely
144
+ replacing its lock fingerprint.
145
+
146
+ Cloud packaging can use the existing verified Windows release without changing
147
+ its native audio implementation. Native builds/tests, JavaScript wrapper tests,
148
+ real tarball installation and physical hardware testing are separate checks;
149
+ passing one does not imply the others passed.
150
+
151
+ The repository's npm workflow tests the wrapper on Linux and Windows, builds the
152
+ Windows GNU host, audits DLL imports, stages the bundle and uploads a tarball artifact.
153
+ A separate Windows job installs the artifact and invokes native `--help` without
154
+ starting capture. It contains **no publish step, npm credentials, or auto-release**.
155
+ Maintainers publish the verified artifact separately.
156
+ See [release instructions](../../docs/RELEASING.md).
157
+
158
+ References: [npm bin/files metadata](https://docs.npmjs.com/cli/v11/configuring-npm/package-json/),
159
+ [Node child-process execution](https://nodejs.org/api/child_process.html).