@displayxr/inline3d 1.49.0 → 1.49.1

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,27 @@ 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.49.1 — 2026-11-03
9
+
10
+ ### Fixed — app share on browsers without the app-share device patch (`./call`, `./camera`)
11
+
12
+ Preview tier. A DisplayXR Browser that predates the app-share device patch (1.9.x) lists a running
13
+ app through its 3D-camera device, as `3D Camera (DisplayXR) - <app>` with no `source` in
14
+ `displayxrStereo` — and once the runtime offers more than one source it suffixes the REAL camera the
15
+ same way, so the label cannot tell an app from a camera. On such a browser `camera: 'auto'` could
16
+ open the app and send it as your face, and `listShareableApps()` found nothing.
17
+
18
+ - **Detection by the opened track**: an app source advertises `baselineMm: 0` and
19
+ `horizontalFovDeg: 0` (runtime ADR-061 decision 2); a real camera never has baseline 0.
20
+ `isAppShareDevice()` now accepts that hint as well as `source: 'app'`. The legacy label alone is
21
+ never enough.
22
+ - **Camera probe**: every probe path checks the opened track; an app is closed again and reported
23
+ in `skipped` with `reason: 'app-share'`, and probing goes on. Suffixed real cameras open as before.
24
+ - **Discovery**: with no `DisplayXR: <app> (3D)` device listed, `listShareableApps()` returns the
25
+ `3D Camera (DisplayXR) - <name>` entries as candidates (`ShareableApp.legacy: true`, `appName`
26
+ from the label). `openAppShare()` verifies the opened track and rejects a real camera with
27
+ `code: 'not-app-share'` (stopped again); the descriptor's `appName` falls back to the label's name.
28
+
8
29
  ## 1.49.0 — 2026-11-03
9
30
 
10
31
  ### Added — the content tile: share a running 3D app into a call (`./call`, `./camera`)
package/call.d.ts CHANGED
@@ -374,9 +374,15 @@ export interface CallContent {
374
374
  /** A running DisplayXR app the browser offers to share (`listShareableApps`). */
375
375
  export interface ShareableApp {
376
376
  readonly deviceId: string;
377
- /** `DisplayXR: <app> (3D)`. */
377
+ /** `DisplayXR: <app> (3D)` (or `3D Camera (DisplayXR) - <app>` for a `legacy` candidate). */
378
378
  readonly label: string;
379
379
  readonly appName: string | null;
380
+ /**
381
+ * A browser without the app-share device patch: a CANDIDATE listed by its label shape only — a
382
+ * real camera can carry the same shape. `openAppShare()` verifies it (a camera rejects with
383
+ * `not-app-share`).
384
+ */
385
+ readonly legacy?: true;
380
386
  }
381
387
 
382
388
  /** An opened app share (`openAppShare`): pass `stream` (+ `descriptor`) to `shareContent`. The track is yours to stop. */
@@ -392,8 +398,9 @@ export type AppShareErrorCode = 'share-denied' | 'share-failed' | 'not-app-share
392
398
  /**
393
399
  * Is this a running DisplayXR app offered for 3D screen share (runtime ADR-061) rather than a
394
400
  * camera? A `MediaDeviceInfo`, a label, a track, or its settings: true on the label
395
- * `DisplayXR: <app> (3D)`, a `dxr-app:` device id, or `displayxrStereo.source === 'app'`. No camera
396
- * probe (`camera: 'auto'`, `openCamera`) ever opens one.
401
+ * `DisplayXR: <app> (3D)`, a `dxr-app:` device id, `displayxrStereo.source === 'app'`, or (browsers
402
+ * without the app-share device patch) a hint with `baselineMm` and `horizontalFovDeg` both 0. No
403
+ * camera probe (`camera: 'auto'`, `openCamera`) ever uses one.
397
404
  */
398
405
  export function isAppShareDevice(device: MediaDeviceInfo | MediaStreamTrack | MediaTrackSettings | { label?: string; deviceId?: string } | string | null | undefined): boolean;
399
406