@pollen-robotics/reachy-mini-sdk 1.7.3 → 1.8.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/README.md +68 -5
  3. package/dist/lib/math.d.ts +23 -0
  4. package/dist/lib/math.d.ts.map +1 -0
  5. package/dist/lib/math.js +40 -0
  6. package/dist/lib/math.js.map +1 -0
  7. package/dist/lib/reachy-mini.d.ts +150 -0
  8. package/dist/lib/reachy-mini.d.ts.map +1 -0
  9. package/dist/lib/reachy-mini.js +1452 -0
  10. package/dist/lib/reachy-mini.js.map +1 -0
  11. package/dist/lib/types.d.ts +384 -0
  12. package/dist/lib/types.d.ts.map +1 -0
  13. package/dist/lib/types.js +9 -0
  14. package/dist/lib/types.js.map +1 -0
  15. package/dist/lib/upload-helpers.d.ts +18 -0
  16. package/dist/lib/upload-helpers.d.ts.map +1 -0
  17. package/dist/lib/upload-helpers.js +44 -0
  18. package/dist/lib/upload-helpers.js.map +1 -0
  19. package/dist/lib/url-helpers.d.ts +63 -0
  20. package/dist/lib/url-helpers.d.ts.map +1 -0
  21. package/dist/lib/url-helpers.js +153 -0
  22. package/dist/lib/url-helpers.js.map +1 -0
  23. package/dist/reachy-mini-sdk.d.ts +69 -0
  24. package/dist/reachy-mini-sdk.d.ts.map +1 -0
  25. package/dist/reachy-mini-sdk.js +68 -0
  26. package/dist/reachy-mini-sdk.js.map +1 -0
  27. package/host/APP_AUTHOR_GUIDE.md +646 -0
  28. package/host/README.md +155 -0
  29. package/host/SPEC.md +618 -0
  30. package/host/dist/ReachyHost.d.ts +39 -0
  31. package/host/dist/ReachyHost.d.ts.map +1 -0
  32. package/host/dist/assets/index.d.ts +16 -0
  33. package/host/dist/assets/index.d.ts.map +1 -0
  34. package/host/dist/chunks/index-CyLPysJS.js +400 -0
  35. package/host/dist/chunks/mountHost-8f-laxwI.js +48279 -0
  36. package/host/dist/chunks/reachy-mini-B1hlBmDQ.js +1240 -0
  37. package/host/dist/components/ConnectingView.d.ts +13 -0
  38. package/host/dist/components/ConnectingView.d.ts.map +1 -0
  39. package/host/dist/components/EmbedFrame.d.ts +16 -0
  40. package/host/dist/components/EmbedFrame.d.ts.map +1 -0
  41. package/host/dist/components/ErrorView.d.ts +21 -0
  42. package/host/dist/components/ErrorView.d.ts.map +1 -0
  43. package/host/dist/components/LeavingView.d.ts +33 -0
  44. package/host/dist/components/LeavingView.d.ts.map +1 -0
  45. package/host/dist/components/PickerView.d.ts +51 -0
  46. package/host/dist/components/PickerView.d.ts.map +1 -0
  47. package/host/dist/components/ReachyHostShell.d.ts +21 -0
  48. package/host/dist/components/ReachyHostShell.d.ts.map +1 -0
  49. package/host/dist/components/SignInView.d.ts +32 -0
  50. package/host/dist/components/SignInView.d.ts.map +1 -0
  51. package/host/dist/components/StepsProgressIndicator.d.ts +41 -0
  52. package/host/dist/components/StepsProgressIndicator.d.ts.map +1 -0
  53. package/host/dist/components/TopBar.d.ts +52 -0
  54. package/host/dist/components/TopBar.d.ts.map +1 -0
  55. package/host/dist/components/WelcomeBackOverlay.d.ts +28 -0
  56. package/host/dist/components/WelcomeBackOverlay.d.ts.map +1 -0
  57. package/host/dist/embed/index.d.ts +151 -0
  58. package/host/dist/embed/index.d.ts.map +1 -0
  59. package/host/dist/entry/auto.d.ts +12 -0
  60. package/host/dist/entry/auto.d.ts.map +1 -0
  61. package/host/dist/entry/auto.js +6 -0
  62. package/host/dist/entry/embed.d.ts +12 -0
  63. package/host/dist/entry/embed.d.ts.map +1 -0
  64. package/host/dist/entry/embed.js +6 -0
  65. package/host/dist/hooks/useHfProfile.d.ts +7 -0
  66. package/host/dist/hooks/useHfProfile.d.ts.map +1 -0
  67. package/host/dist/hooks/useHostBridge.d.ts +37 -0
  68. package/host/dist/hooks/useHostBridge.d.ts.map +1 -0
  69. package/host/dist/hooks/useOAuth.d.ts +16 -0
  70. package/host/dist/hooks/useOAuth.d.ts.map +1 -0
  71. package/host/dist/hooks/useRobots.d.ts +17 -0
  72. package/host/dist/hooks/useRobots.d.ts.map +1 -0
  73. package/host/dist/hooks/useSdk.d.ts +16 -0
  74. package/host/dist/hooks/useSdk.d.ts.map +1 -0
  75. package/host/dist/index.d.ts +25 -0
  76. package/host/dist/index.d.ts.map +1 -0
  77. package/host/dist/index.js +14 -0
  78. package/host/dist/lib/centralListener.d.ts +73 -0
  79. package/host/dist/lib/centralListener.d.ts.map +1 -0
  80. package/host/dist/lib/centralRest.d.ts +35 -0
  81. package/host/dist/lib/centralRest.d.ts.map +1 -0
  82. package/host/dist/lib/protocol.d.ts +230 -0
  83. package/host/dist/lib/protocol.d.ts.map +1 -0
  84. package/host/dist/lib/protocol.js +47 -0
  85. package/host/dist/lib/sdk-types.d.ts +46 -0
  86. package/host/dist/lib/sdk-types.d.ts.map +1 -0
  87. package/host/dist/lib/settings.d.ts +69 -0
  88. package/host/dist/lib/settings.d.ts.map +1 -0
  89. package/host/dist/lib/signalingUrl.d.ts +28 -0
  90. package/host/dist/lib/signalingUrl.d.ts.map +1 -0
  91. package/host/dist/lib/theme.d.ts +4 -0
  92. package/host/dist/lib/theme.d.ts.map +1 -0
  93. package/host/dist/lib/themeMode.d.ts +9 -0
  94. package/host/dist/lib/themeMode.d.ts.map +1 -0
  95. package/host/dist/lib/tokens.d.ts +64 -0
  96. package/host/dist/lib/tokens.d.ts.map +1 -0
  97. package/host/dist/mountHost.d.ts +36 -0
  98. package/host/dist/mountHost.d.ts.map +1 -0
  99. package/package.json +76 -11
  100. package/reachy-mini-sdk.js +0 -2013
package/CHANGELOG.md ADDED
@@ -0,0 +1,188 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@pollen-robotics/reachy-mini-sdk` are
4
+ documented here. The format follows
5
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions
6
+ are kept in lock-step with the Reachy Mini Python daemon and are
7
+ driven from `pyproject.toml` at the repo root (the npm publish CI
8
+ overrides the `version` placeholder in `package.json`).
9
+
10
+ The host shell shares this package's version (single source of
11
+ truth); the wire protocol is versioned separately in
12
+ `PROTOCOL_VERSION` (see [host/SPEC.md §11](./host/SPEC.md#11-backlog)).
13
+
14
+ ## Unreleased — succeeds 1.7.3
15
+
16
+ > **Breaking change.** Every app currently using
17
+ > `@pollen-robotics/reachy-mini-host` has to update its imports
18
+ > when it upgrades. Existing `1.7.x` installs keep working against
19
+ > the legacy `reachy-mini-host@1.7.x` tarball that stays on npm;
20
+ > only consumers who upgrade past `1.7.3` need to migrate. The
21
+ > target version is intentionally left unset in this PR — it will
22
+ > be picked at release time when `pyproject.toml` is bumped from
23
+ > `1.7.3` to the next number (the npm publish CI mirrors that bump
24
+ > into the package manifest).
25
+
26
+ **Single-package release: `@pollen-robotics/reachy-mini-host` is folded
27
+ into `@pollen-robotics/reachy-mini-sdk`.** App authors install,
28
+ version, and import from one entry point. The old package stays
29
+ available on npm at `1.7.x` for one minor cycle for graceful
30
+ migration and will then be `npm deprecate`d with a pointer to the
31
+ new subpaths.
32
+
33
+ ### Migration
34
+
35
+ ```diff
36
+ - "@pollen-robotics/reachy-mini-host": "^1.7.x",
37
+ - "@pollen-robotics/reachy-mini-sdk": "^1.7.x"
38
+ + "@pollen-robotics/reachy-mini-sdk": "^<next-release>"
39
+ ```
40
+
41
+ ```diff
42
+ - import { mountHost } from '@pollen-robotics/reachy-mini-host/auto';
43
+ - import { connectToHost } from '@pollen-robotics/reachy-mini-host/embed';
44
+ - import { PROTOCOL_VERSION } from '@pollen-robotics/reachy-mini-host/protocol';
45
+ + import { mountHost } from '@pollen-robotics/reachy-mini-sdk/host/auto';
46
+ + import { connectToHost } from '@pollen-robotics/reachy-mini-sdk/host/embed';
47
+ + import { PROTOCOL_VERSION } from '@pollen-robotics/reachy-mini-sdk/host/protocol';
48
+ ```
49
+
50
+ The host CDN bundles also moved:
51
+
52
+ ```diff
53
+ - https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-host@1/dist/entry/auto.js
54
+ + https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/host/dist/entry/auto.js
55
+ ```
56
+
57
+ ### Added
58
+
59
+ - New subpath exports on `@pollen-robotics/reachy-mini-sdk`:
60
+ - `./host` — `mountHost`, `connectToHost`, types
61
+ - `./host/auto` — CDN auto bundle for standalone apps
62
+ - `./host/embed` — CDN embed bundle for the iframe side
63
+ - `./host/protocol` — `PROTOCOL_VERSION`, `decodeCredsFromHash`, etc.
64
+ - `reachy-mini-sdk.d.ts` ships next to `reachy-mini-sdk.js` as the
65
+ canonical SDK type surface. The host re-exports from there
66
+ (`host/src/lib/sdk-types.ts` is now a thin barrel), removing the
67
+ earlier duplication TODO.
68
+
69
+ ### Changed
70
+
71
+ - The host bundles (`./host`, `./host/auto`, `./host/embed`) now
72
+ import the SDK runtime directly and self-assign
73
+ `window.ReachyMini` (when unset) at module-load time, dispatching
74
+ `reachymini:ready`. App `index.html` files no longer need a
75
+ separate `<script type="module">` to load the SDK on the global,
76
+ and `useSdk` + `connectToHost` no longer race against a
77
+ late-arriving global. Apps that still set `window.ReachyMini`
78
+ themselves are unaffected — we only assign when it's missing.
79
+ - Log-prefix tag harmonised to `[reachy-mini-sdk/host]` /
80
+ `[reachy-mini-sdk/host/embed]` for greppability.
81
+ - Internal repo layout: `js/sdk/*` collapsed into `js/*` now that
82
+ there is only one package. The host source lives at `js/host/`,
83
+ the SDK runtime at `js/reachy-mini-sdk.js`, the package manifest
84
+ at `js/package.json`. No effect on consumers; only the
85
+ `repository.directory` field and the npm-publish CI working
86
+ directory changed.
87
+
88
+ ### Removed
89
+
90
+ - Workspace coordinator `js/package.json` (was an npm workspace
91
+ root) and `js/package-lock.json` at the workspace level. The
92
+ single package's lockfile lives at `js/package-lock.json`.
93
+ - `@pollen-robotics/reachy-mini-host` package manifest — the host
94
+ ships under `@pollen-robotics/reachy-mini-sdk/host*` now. The
95
+ legacy npm package stays on `1.7.x` for one minor cycle for
96
+ graceful migration, then will be `npm deprecate`d.
97
+
98
+ ### SDK changes drafted between 1.7.3 and the package merge
99
+
100
+ The following landed on `main` after `1.7.3` was published but
101
+ were never released on their own; they ship with this release:
102
+
103
+ - **Breaking (SDK)**: `wakeUp()` and `gotoSleep()` now return
104
+ `Promise<void>` (previously `boolean`). The promise resolves on
105
+ the daemon's `{command, completed: true}` response, after the
106
+ trajectory player has fully landed. Apps that previously relied
107
+ on the boolean return are unaffected in practice; apps that
108
+ *want* to await trajectory completion (e.g. to chain
109
+ `setMotorMode("disabled")` after a `gotoSleep`) can now do so
110
+ without racing.
111
+ - **SDK**: both motion helpers take an optional `{ timeoutMs }`
112
+ (default 8000 ms). The promise rejects on session teardown
113
+ (`stopSession` / `disconnect`) so consumers never wait forever
114
+ on an interrupted trajectory.
115
+ - **SDK**: `POST /send` responses with a 4xx / 5xx status now
116
+ produce a `console.warn` carrying the rejected message `type`
117
+ and the response body, making racy `setPeerStatus` /
118
+ `endSession` failures easier to diagnose.
119
+ - **Host types**: `src/lib/sdk-types.ts` refreshed to cover the
120
+ full SDK public surface (`autoConnect`, `gotoTarget`,
121
+ `setMotorTorque`, `subscribeLogs`, `requestState`, version /
122
+ hardware-id helpers, `robotState`, `isEmbedded`, jitter buffer
123
+ option, `autoStartFromUrl`). The motion helpers now type as
124
+ `Promise<void>` to match the SDK.
125
+
126
+ ## 0.3.0 - 2026-05-16 (unreleased)
127
+
128
+ **This release is a full rewrite of the package against
129
+ [SPEC.md v1.0](./host/SPEC.md).** The public surface and the wire
130
+ protocol both change in incompatible ways.
131
+
132
+ ### Breaking changes
133
+
134
+ - **API**: `mountHost()` options reduced to the documented surface
135
+ (`appName`, `appIconUrl`, `appEmoji`, `enableMicrophone`,
136
+ `clientId`, `devToken`, `target`). The following are removed:
137
+ - `theme: { light, dark }` (host owns its bundled MUI theme).
138
+ - `skipTheme` (no consumer-driven theming).
139
+ - `skipAuth` (host owns OAuth).
140
+ - **API**: `ConnectedHandle` reduced to the documented surface.
141
+ The following are removed:
142
+ - `sendCustom()` / `onCustom()` (no free-form bidi channel).
143
+ - `requestConfigUpdate()` (apps don't push config upstream).
144
+ - **API**: `devToken` payload renamed `{ token, username }` →
145
+ `{ token, userName }` for camelCase consistency with `appName`
146
+ and `hostName`.
147
+ - **API**: `ConnectedHandle.username` renamed to `ConnectedHandle.userName`.
148
+ - **Protocol**: `host:custom` / `embed:custom` removed.
149
+ - **Protocol**: `embed:request-config-update` removed.
150
+ - **Host shell**: removed the legacy `?app=<owner>/<space>`
151
+ branding-swap behaviour. The host renders exactly the app it
152
+ ships with, never another. Multi-app routing now lives in the
153
+ mobile catalog only.
154
+
155
+ ### Added
156
+
157
+ - `SPEC.md` (v1.0): behavioural contract, state machines,
158
+ 4 engineering invariants (single SDK per tab, token hygiene,
159
+ bundle pinning, React Strict Mode safety).
160
+ - `APP_AUTHOR_GUIDE.md`: step-by-step guide for building a new
161
+ app on top of the host.
162
+ - `REBUILD_PLAN.md`: project plan tracking the rewrite (deleted
163
+ once 0.3.0 ships).
164
+ - `LICENSE` (MIT).
165
+
166
+ ### Changed
167
+
168
+ - **Documentation**: replaced the legacy `SPEC.md` (823 lines,
169
+ ambitious-future spec) with a focused v1.0 spec (~620 lines)
170
+ matching what we actually want to ship.
171
+ - **Package metadata**: `repository.url` now points at the
172
+ host-only repo. `homepage` and `bugs` added.
173
+ - **Versioning policy**: stays permissive pre-1.0 (see SPEC §11
174
+ "Versioning policy"); each minor release between 0.x.y may
175
+ ship breaking changes. Semver-strict starts at 1.0.
176
+
177
+ ### Why a rewrite instead of a refactor
178
+
179
+ See `REBUILD_PLAN.md` § "Why a rebuild, not a refactor". TL;DR:
180
+ the API surface shrinks too much, and the previous code carried
181
+ half-implemented features (protocol-version negotiation,
182
+ heartbeat, custom channels) that were cheaper to retype than to
183
+ selectively remove.
184
+
185
+ ## 0.2.0 - 2026-05-15
186
+
187
+ Initial extraction of the host shell into a standalone package.
188
+ Predates the SPEC.md v1.0 rewrite; deprecated in favour of 0.3.0.
package/README.md CHANGED
@@ -1,8 +1,13 @@
1
1
  # @pollen-robotics/reachy-mini-sdk
2
2
 
3
- Browser SDK for controlling a [Reachy Mini](https://github.com/pollen-robotics/reachy_mini) robot over WebRTC.
3
+ The JS package for [Reachy Mini](https://github.com/pollen-robotics/reachy_mini). It ships:
4
4
 
5
- The full API reference lives in the JSDoc header of [`reachy-mini-sdk.js`](./reachy-mini-sdk.js): constructor options, read-only properties, the `disconnected → connected → streaming` state machine, the event list, and every command helper.
5
+ - The **browser SDK** (`ReachyMini` class) for direct WebRTC control the default export.
6
+ - An optional **host shell** (OAuth + robot picker + iframe bridge) for apps deployed as Hugging Face Spaces, exposed under the `./host*` subpaths.
7
+
8
+ Both used to be separate npm packages (`@pollen-robotics/reachy-mini-sdk` + `@pollen-robotics/reachy-mini-host`); they were merged into a single entry point so app authors only install, version, and import from one place.
9
+
10
+ The full SDK API reference lives in the JSDoc header of [`reachy-mini-sdk.js`](./reachy-mini-sdk.js): constructor options, read-only properties, the `disconnected → connected → streaming` state machine, the event list, and every command helper.
6
11
 
7
12
  ## Install
8
13
 
@@ -13,7 +18,13 @@ npm install @pollen-robotics/reachy-mini-sdk
13
18
  ```
14
19
 
15
20
  ```js
21
+ // Low-level robot control
16
22
  import { ReachyMini } from "@pollen-robotics/reachy-mini-sdk";
23
+
24
+ // Host shell for Hugging Face Spaces apps (OAuth + picker + iframe)
25
+ import { mountHost } from "@pollen-robotics/reachy-mini-sdk/host";
26
+ import { connectToHost } from "@pollen-robotics/reachy-mini-sdk/host/embed";
27
+ import { PROTOCOL_VERSION } from "@pollen-robotics/reachy-mini-sdk/host/protocol";
17
28
  ```
18
29
 
19
30
  ### From a browser, no build step (Hugging Face Spaces, static hosting…)
@@ -21,16 +32,38 @@ import { ReachyMini } from "@pollen-robotics/reachy-mini-sdk";
21
32
  Use an ESM CDN. The `+esm` suffix tells jsdelivr to resolve bare specifiers (the `@huggingface/hub` dependency) recursively, so the import just works:
22
33
 
23
34
  ```js
24
- import { ReachyMini } from "https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1.7.3/+esm";
35
+ import { ReachyMini } from "https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/+esm";
25
36
  ```
26
37
 
27
38
  Or via esm.sh:
28
39
 
29
40
  ```js
30
- import { ReachyMini } from "https://esm.sh/@pollen-robotics/reachy-mini-sdk@1.7.3";
41
+ import { ReachyMini } from "https://esm.sh/@pollen-robotics/reachy-mini-sdk@1";
42
+ ```
43
+
44
+ Track bleeding-edge from `main`:
45
+
46
+ ```js
47
+ import { ReachyMini } from "https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@main/+esm";
48
+ ```
49
+
50
+ The host CDN bundles live under the same package:
51
+
52
+ ```html
53
+ <!-- Standalone host shell entry -->
54
+ <script type="module"
55
+ src="https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/host/dist/entry/auto.js">
56
+ </script>
57
+
58
+ <!-- Embed-side client (inside the iframe) -->
59
+ <script type="module"
60
+ src="https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/host/dist/entry/embed.js">
61
+ </script>
31
62
  ```
32
63
 
33
- ## Quick start
64
+ Both bundles auto-install the SDK on `window.ReachyMini` at load time, so an app that uses the host no longer needs a separate `<script type="module">` to expose the SDK.
65
+
66
+ ## Quick start (SDK only)
34
67
 
35
68
  ```js
36
69
  import { ReachyMini } from "@pollen-robotics/reachy-mini-sdk";
@@ -61,6 +94,36 @@ robot.playSound("wake_up.wav");
61
94
 
62
95
  See the JSDoc header in [`reachy-mini-sdk.js`](./reachy-mini-sdk.js) for the full surface (events, raw `setTarget`, audio controls, embedded-mode auto-start, etc.).
63
96
 
97
+ ## Host shell
98
+
99
+ For Hugging Face Spaces apps that need OAuth + a robot picker + iframe lifecycle management:
100
+
101
+ - [`host/README.md`](./host/README.md) — quickstart and integration overview
102
+ - [`host/APP_AUTHOR_GUIDE.md`](./host/APP_AUTHOR_GUIDE.md) — full guide for app authors
103
+ - [`host/SPEC.md`](./host/SPEC.md) — host ↔ embed protocol spec
104
+
105
+ ## Migration from `@pollen-robotics/reachy-mini-host`
106
+
107
+ ```diff
108
+ - import { mountHost } from '@pollen-robotics/reachy-mini-host/auto';
109
+ - import { connectToHost } from '@pollen-robotics/reachy-mini-host/embed';
110
+ - import { PROTOCOL_VERSION } from '@pollen-robotics/reachy-mini-host/protocol';
111
+ + import { mountHost } from '@pollen-robotics/reachy-mini-sdk/host/auto';
112
+ + import { connectToHost } from '@pollen-robotics/reachy-mini-sdk/host/embed';
113
+ + import { PROTOCOL_VERSION } from '@pollen-robotics/reachy-mini-sdk/host/protocol';
114
+ ```
115
+
116
+ You can drop `@pollen-robotics/reachy-mini-host` from your `package.json`. The host CDN bundles also moved — adjust the jsdelivr URL in your `index.html`:
117
+
118
+ ```diff
119
+ - https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-host@1/dist/entry/auto.js
120
+ + https://cdn.jsdelivr.net/npm/@pollen-robotics/reachy-mini-sdk@1/host/dist/entry/auto.js
121
+ ```
122
+
123
+ The host bundles now import the SDK directly and assign it on `window.ReachyMini` at load time, so apps no longer need a second `<script type="module">` for the SDK alone.
124
+
125
+ See the [CHANGELOG](./CHANGELOG.md) for the full release history.
126
+
64
127
  ## License
65
128
 
66
129
  Apache-2.0 — see [LICENSE](./LICENSE).
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Math utilities for the ReachyMini SDK.
3
+ *
4
+ * These are the canonical conversions between human-readable
5
+ * roll/pitch/yaw degrees and the wire format the daemon expects
6
+ * (4×4 rotation matrices, ZYX convention).
7
+ */
8
+ export declare function degToRad(deg: number): number;
9
+ export declare function radToDeg(rad: number): number;
10
+ /**
11
+ * Roll/pitch/yaw (degrees) → 4×4 rotation matrix (ZYX convention).
12
+ * This is the wire format for the robot's `set_target` command.
13
+ */
14
+ export declare function rpyToMatrix(rollDeg: number, pitchDeg: number, yawDeg: number): number[][];
15
+ /**
16
+ * Rotation matrix (3×3 or 4×4) → { roll, pitch, yaw } in degrees.
17
+ */
18
+ export declare function matrixToRpy(m: number[][]): {
19
+ roll: number;
20
+ pitch: number;
21
+ yaw: number;
22
+ };
23
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../lib/math.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,MAAM,EAAE,EAAE,CAWZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CACvB,CAAC,EAAE,MAAM,EAAE,EAAE,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAM9C"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Math utilities for the ReachyMini SDK.
3
+ *
4
+ * These are the canonical conversions between human-readable
5
+ * roll/pitch/yaw degrees and the wire format the daemon expects
6
+ * (4×4 rotation matrices, ZYX convention).
7
+ */
8
+ export function degToRad(deg) {
9
+ return deg * Math.PI / 180;
10
+ }
11
+ export function radToDeg(rad) {
12
+ return rad * 180 / Math.PI;
13
+ }
14
+ /**
15
+ * Roll/pitch/yaw (degrees) → 4×4 rotation matrix (ZYX convention).
16
+ * This is the wire format for the robot's `set_target` command.
17
+ */
18
+ export function rpyToMatrix(rollDeg, pitchDeg, yawDeg) {
19
+ const r = degToRad(rollDeg), p = degToRad(pitchDeg), y = degToRad(yawDeg);
20
+ const cy = Math.cos(y), sy = Math.sin(y);
21
+ const cp = Math.cos(p), sp = Math.sin(p);
22
+ const cr = Math.cos(r), sr = Math.sin(r);
23
+ return [
24
+ [cy * cp, cy * sp * sr - sy * cr, cy * sp * cr + sy * sr, 0],
25
+ [sy * cp, sy * sp * sr + cy * cr, sy * sp * cr - cy * sr, 0],
26
+ [-sp, cp * sr, cp * cr, 0],
27
+ [0, 0, 0, 1],
28
+ ];
29
+ }
30
+ /**
31
+ * Rotation matrix (3×3 or 4×4) → { roll, pitch, yaw } in degrees.
32
+ */
33
+ export function matrixToRpy(m) {
34
+ return {
35
+ roll: radToDeg(Math.atan2(m[2][1], m[2][2])),
36
+ pitch: radToDeg(Math.asin(-m[2][0])),
37
+ yaw: radToDeg(Math.atan2(m[1][0], m[0][0])),
38
+ };
39
+ }
40
+ //# sourceMappingURL=math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../lib/math.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACvB,OAAe,EACf,QAAgB,EAChB,MAAc;IAEd,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO;QACH,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACf,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACvB,CAAa;IAEb,OAAO;QACH,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QAChD,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QACtC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;KAClD,CAAC;AACN,CAAC"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * ReachyMini — Browser SDK for controlling a Reachy Mini robot over WebRTC.
3
+ * See `../reachy-mini-sdk.ts` for the package's barrel and the README for
4
+ * a quick-start guide.
5
+ */
6
+ import type { ApplyAudioConfigOptions, AudioConfigEntry, AutoConnectOptions, AutoConnectResult, MotionAwaitOptions, MoveData, PlayMoveOptions, PlayMoveResult, PlayUploadedAudioOptions, ReachyMiniInstance, ReachyMiniOptions, RobotInfo, RobotState, SubscribeLogsOptions, UploadAudioOptions } from './types.js';
7
+ export declare class ReachyMini extends EventTarget implements ReachyMiniInstance {
8
+ private readonly _signalingUrl;
9
+ private readonly _clientId;
10
+ private readonly _appName;
11
+ private readonly _videoJitterBufferTargetMs;
12
+ private _autoStartFromUrl;
13
+ private _autoStartAttempted;
14
+ private _state;
15
+ private _robots;
16
+ private _robotState;
17
+ private readonly _preselectedRobotId;
18
+ private _token;
19
+ private _username;
20
+ private _tokenExpires;
21
+ private _sseAbortController;
22
+ _pc: RTCPeerConnection | null;
23
+ private _dc;
24
+ private _sessionId;
25
+ private _selectedRobotId;
26
+ private _pendingRemoteIce;
27
+ _micStream: MediaStream | null;
28
+ private _micMuted;
29
+ private _audioMuted;
30
+ private _micSupported;
31
+ private _latencyMonitorId;
32
+ private _stateRefreshInterval;
33
+ private _versionResolve;
34
+ private _hardwareIdResolve;
35
+ private _volumeResolve;
36
+ private _micVolumeResolve;
37
+ private _applyAudioConfigResolve;
38
+ private _readAudioParameterResolve;
39
+ private readonly _logSubscribers;
40
+ private _broadcastWaiters;
41
+ private _activeMoveUploadId;
42
+ private _activeAudioUploadId;
43
+ private _sessionResolve;
44
+ private _sessionReject;
45
+ private _iceConnected;
46
+ private _dcOpen;
47
+ private readonly _pendingMotionCompletions;
48
+ private _videoElement;
49
+ constructor(options?: ReachyMiniOptions);
50
+ get state(): 'disconnected' | 'connected' | 'streaming';
51
+ get robots(): RobotInfo[];
52
+ get robotState(): RobotState;
53
+ get username(): string | null;
54
+ get isAuthenticated(): boolean;
55
+ get micSupported(): boolean;
56
+ get micMuted(): boolean;
57
+ get audioMuted(): boolean;
58
+ get preselectedRobotId(): string | null;
59
+ get isEmbedded(): boolean;
60
+ /**
61
+ * Internal: try to honour the `autoStartFromUrl` constructor
62
+ * option. Called from the signaling-message handler after every
63
+ * `robotsChanged` emit, so a robot that comes online after the
64
+ * SDK is already `connected` still triggers the auto-start.
65
+ */
66
+ _maybeAutoStart(): void;
67
+ authenticate(): Promise<boolean>;
68
+ login(): Promise<void>;
69
+ logout(): void;
70
+ connect(token?: string): Promise<void>;
71
+ autoConnect(options?: AutoConnectOptions): Promise<AutoConnectResult>;
72
+ private _fetchOwnedRobots;
73
+ private _waitForRobotInList;
74
+ startSession(robotId: string): Promise<void>;
75
+ private _failSessionRejected;
76
+ stopSession(): Promise<void>;
77
+ disconnect(): void;
78
+ setTarget({ head, antennas, body_yaw }?: {
79
+ head?: number[];
80
+ antennas?: number[];
81
+ body_yaw?: number;
82
+ }): boolean;
83
+ gotoTarget({ head, antennas, body_yaw, duration }: {
84
+ head?: number[];
85
+ antennas?: number[];
86
+ body_yaw?: number;
87
+ duration: number;
88
+ }): boolean;
89
+ setHeadRpyDeg(rollDeg: number, pitchDeg: number, yawDeg: number): boolean;
90
+ setAntennasDeg(rightDeg: number, leftDeg: number): boolean;
91
+ setBodyYawDeg(yawDeg: number): boolean;
92
+ playSound(file: string): boolean;
93
+ setMotorMode(mode: 'enabled' | 'disabled' | 'gravity_compensation'): boolean;
94
+ setMotorTorque(on: boolean, ids?: string[] | null): boolean;
95
+ wakeUp({ timeoutMs }?: MotionAwaitOptions): Promise<void>;
96
+ gotoSleep({ timeoutMs }?: MotionAwaitOptions): Promise<void>;
97
+ private _sendCommandAwaitCompletion;
98
+ private _rejectPendingMotionCompletions;
99
+ isAwake(): boolean;
100
+ ensureAwake(timeoutMs?: number): Promise<boolean>;
101
+ getVersion(): Promise<string | null>;
102
+ getHardwareId(): Promise<string | null>;
103
+ getVolume(): Promise<number | null>;
104
+ setVolume(volume: number): Promise<number | null>;
105
+ getMicrophoneVolume(): Promise<number | null>;
106
+ setMicrophoneVolume(volume: number): Promise<number | null>;
107
+ applyAudioConfig(config: AudioConfigEntry[], { verify }?: ApplyAudioConfigOptions): Promise<boolean>;
108
+ readAudioParameter(name: string): Promise<number[] | null>;
109
+ /**
110
+ * Internal: send a command and await the matching daemon response in a
111
+ * named single-resolver slot. Used by the volume helpers and the
112
+ * XVF3800 audio-config helpers — every one of them has a strict
113
+ * request/response shape where a single in-flight call per slot is
114
+ * sufficient. If a previous request on the same slot is still
115
+ * pending when a new one comes in, the older promise is resolved to
116
+ * `null` so its caller doesn't hang forever.
117
+ *
118
+ * Slot access is passed in as getter/setter closures rather than a
119
+ * key into `this`: that keeps the helper fully generic-checked (T is
120
+ * inferred from the slot's resolver type at each call site) with no
121
+ * indexed-property casts.
122
+ */
123
+ private _slotRoundtrip;
124
+ sendRaw(data: unknown): boolean;
125
+ subscribeLogs({ onLine, onError }: SubscribeLogsOptions): () => void;
126
+ requestState(): boolean;
127
+ setAudioMuted(muted: boolean): void;
128
+ setMicMuted(muted: boolean): void;
129
+ attachVideo(videoElement: HTMLVideoElement): () => void;
130
+ playMove(motion: MoveData, { audioBlob, audioLeadMs, description, encoding, playFrequency, initialGotoDuration, startTimeoutMs, onProgress, onStarted, }?: PlayMoveOptions): Promise<PlayMoveResult>;
131
+ cancelMove(uploadId?: string | null): boolean;
132
+ uploadAudio(audioBlob: Blob, { description, onProgress }?: UploadAudioOptions): Promise<string>;
133
+ playUploadedAudio(uploadId: string, { timeoutMs }?: PlayUploadedAudioOptions): Promise<{
134
+ started: true;
135
+ }>;
136
+ cancelAudio(uploadId?: string | null): boolean;
137
+ private _emit;
138
+ private _waitForBroadcast;
139
+ private _awaitDataChannelDrain;
140
+ private _sendToServer;
141
+ private _sendCommand;
142
+ private _checkSessionReady;
143
+ private _handleSignalingMessage;
144
+ private _handleEndSession;
145
+ private _handlePeerMessage;
146
+ private _handleRobotMessage;
147
+ /** Snap video playback to live edge if buffered lag exceeds 0.5 s. */
148
+ private _startLatencyMonitor;
149
+ }
150
+ //# sourceMappingURL=reachy-mini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reachy-mini.d.ts","sourceRoot":"","sources":["../../lib/reachy-mini.ts"],"names":[],"mappings":"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"}