@displayxr/inline3d 1.31.0 → 1.33.0

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/CHANGELOG.md CHANGED
@@ -5,6 +5,78 @@ entry points (`.`, `./three`) are frozen for 1.x, while the **scene subpaths** (
5
5
  `./splat`, `./model`) are a preview tier whose options may change in any release. Entries below say
6
6
  which tier they touch, because that is what tells you whether an upgrade can move your pixels.
7
7
 
8
+ ## 1.33.0 — 2026-10-06
9
+
10
+ Touches the **preview tier** (`./call`) only: one default value. No export is added, removed or
11
+ renamed, and no type changes.
12
+
13
+ ### `./call` — the hosted signalling server is now `wss://signal.displayxr.org`
14
+
15
+ - **`DXR_SIGNAL_DEFAULT` is `wss://signal.displayxr.org`** (was
16
+ `wss://dxr-signal.displayxr.workers.dev`), and the internal failover list `DXR_SIGNAL_ALIASES` is
17
+ now `[signal.displayxr.org, dxr-signal.displayxr.workers.dev]`. A `dxrSignaling()` / `<dxr-call>`
18
+ with no `signaling` connects to the vanity domain first and falls back to workers.dev if it
19
+ cannot be reached, on the first join and on every reconnect (RFC 0003 §5g step 3; the custom
20
+ domain went live on 2026-10-06 on the same Worker deployment, so rooms are shared and a caller
21
+ on either host meets one on the other).
22
+ - **Nothing to do for existing pages.** A page that names either host explicitly
23
+ (`signaling="wss://dxr-signal.displayxr.workers.dev"` or `"wss://signal.displayxr.org"`) still
24
+ gets failover to the other. A self-hosted URL is untouched: it is tried as given, with only the
25
+ `aliases` the page passes. SDKs up to 1.32.0 keep defaulting to workers.dev, which stays live as
26
+ an alias for at least two minor releases and until its traffic is negligible; its retirement
27
+ will get a CHANGELOG notice first (`docs/signaling-domain.md`).
28
+ - A page that compares a URL against `DXR_SIGNAL_DEFAULT` to detect "the hosted server" should
29
+ compare hosts against both names during the transition.
30
+
31
+ ## 1.32.0 — 2026-10-06
32
+
33
+ Touches the **core** additively (one new handle method, two new exports) and the **preview tier**
34
+ (`./splat`, PlayCanvas backend).
35
+
36
+
37
+ ### Hosted signalling server (`signaling/`, not part of the npm package)
38
+
39
+ - **`welcome` is now always the first message a joined peer receives.** With a real TURN key the
40
+ server awaits a credential mint between reserving a peer's slot and welcoming it; another peer
41
+ joining or signalling in that window used to reach the first peer *before* its own welcome, and
42
+ that welcome's `peers` then omitted the newcomer. Messages addressed to a not-yet-welcomed peer
43
+ are now held and flushed behind its welcome, and the roster is read when the welcome is sent. The
44
+ SDK was already tolerant of the old order (its transport replays early `peer-joined`s); raw
45
+ `dxr-signal/1` clients were not. No protocol field changed.
46
+
47
+ ### Core — `handle.displayMetrics()`
48
+
49
+ - **`handle.displayMetrics()`** → `{ canvasSizeM, metersPerCssPx, displaySizeM, nominalViewerM,
50
+ eyeSeparationM, source }`: the tile in physical units, derived from `getDisplayInfo()` (panel
51
+ pitch × `devicePixelRatio` × the canvas's CSS box). Never rejects. Anything the display can't
52
+ report comes from `DISPLAY_METRICS_DEFAULTS` and is flagged in `source`. **Eye separation is
53
+ always the 63 mm default**, because no browser or runtime surface reports one. Also exported as
54
+ the pure `displayMetricsFrom(info, rect, dpr)`.
55
+
56
+ ### `./splat` (PlayCanvas backend)
57
+
58
+ - **`handle.setStereo({ ipdFactor, parallaxFactor })`**: live stereo strength. It re-declares the
59
+ rig in force on the next frame with no cut (pose, focus and framing kept). Keys merge, a `null`
60
+ key returns to the asset's own value, and `setStereo(null)` clears both. Sticky across
61
+ `setSource` / `setRig`. `handle.rig.stereoDefault` holds the asset's own values.
62
+ docs/playcanvas-adapter.md §setStereo.
63
+ - **`handle.setDepthEnvelope({ maxFrontM, edgeM, bandM, stage, rects, viewerM, canvasSizeM })`**:
64
+ the frame envelope. Content may come out of the glass only well inside the frame and away from 2D
65
+ elements. Gaussians past the cap slide back along their own rays from the declared camera rig,
66
+ so the picture, the sort order and the stereo rule all hold. It is tile-wide and keyed on the
67
+ live declared rig (convergence, lens, `ipdFactor × metersToVirtual`), so every asset is covered
68
+ from its first frame, through crossfades and through `setStereo`, with no per-asset install.
69
+ Camera rigs only. docs/splat-effects.md §Depth envelope.
70
+ - `setStereo({ ipdScale, parallaxScale })`: the same scalars RELATIVE to each asset's own
71
+ (`rig.stereoDefault`), re-applied to every asset `setSource` brings in. Per scalar, the absolute
72
+ and relative keys are exclusive; the last one given wins.
73
+ - **`splatHandle.displayMetrics()`**: the core tile's `displayMetrics()`, on the splat handle.
74
+ - The deferred PlayCanvas handle (what `addSplat` returns before the engine module loads) now has
75
+ `setStereo`, `setDepthEnvelope` and `displayMetrics`. A call right after `addSplat` was
76
+ `not a function`. A test now pins this.
77
+ - `STAGE_ORDER` gains `'envelope'` (between `custom` and `cull`), so a page's custom effect runs
78
+ before the cap.
79
+
8
80
  ## 1.31.0 — 2026-10-05
9
81
 
10
82
  The 1.29 `./call` option spellings stay accepted (with their warning) for one more release; they go in 1.32.
package/call.d.ts CHANGED
@@ -70,7 +70,12 @@ export interface SignalingSession {
70
70
  leave(): void;
71
71
  }
72
72
 
73
- /** The hosted DisplayXR signalling server (`dxrSignaling()` with no URL). */
73
+ /**
74
+ * The hosted DisplayXR signalling server (`dxrSignaling()` with no URL): `wss://signal.displayxr.org`
75
+ * since the release after 1.32.0 (it was `wss://dxr-signal.displayxr.workers.dev`). The same server
76
+ * answers on both hosts, and `dxrSignaling()` given either one fails over to the other; a
77
+ * self-hosted URL is tried as given.
78
+ */
74
79
  export const DXR_SIGNAL_DEFAULT: string;
75
80
  /**
76
81
  * The server's TURN decision for one session (`welcome.turn`, `dxr-signal/1`). `status` is the