@flighthq/device 0.3.1-next.975.01aea94 → 0.4.0-edge.1908.751021c

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/dist/device.d.ts CHANGED
@@ -1,16 +1,20 @@
1
- import type { DeviceBackend, DeviceCapabilities, DeviceDisplayMetrics, DeviceInfo, SafeAreaInsets } from '@flighthq/types/contract';
1
+ import type { BackendExplanation, DeviceBackend, DeviceCapabilities, DeviceDisplayMetrics, DeviceInfo, SafeAreaInsets } from '@flighthq/types/contract';
2
2
  export declare function createDeviceCapabilities(): DeviceCapabilities;
3
3
  export declare function createDeviceDisplayMetrics(): DeviceDisplayMetrics;
4
4
  export declare function createDeviceInfo(): DeviceInfo;
5
5
  export declare function createSafeAreaInsets(): SafeAreaInsets;
6
6
  export declare function createWebDeviceBackend(): DeviceBackend;
7
7
  export declare function enableWebSafeAreaInsets(): () => void;
8
+ export declare function explainDeviceBackend(): BackendExplanation;
8
9
  export declare function getDeviceBackend(): DeviceBackend;
9
10
  export declare function getDeviceCapabilities(out: DeviceCapabilities): DeviceCapabilities;
10
11
  export declare function getDeviceDisplayMetrics(out: DeviceDisplayMetrics): DeviceDisplayMetrics;
11
12
  export declare function getDeviceId(): string;
12
13
  export declare function getDeviceInfo(out: DeviceInfo): DeviceInfo;
13
14
  export declare function getSafeAreaInsets(out: SafeAreaInsets): SafeAreaInsets;
15
+ export declare function installDeviceHostBackend(backend: DeviceBackend): void;
16
+ export declare function observeDeviceHostResult(operation: string, succeeded: boolean): void;
14
17
  export declare function refreshDeviceInfo(): void;
18
+ export declare function resetDeviceBackendForTest(): void;
15
19
  export declare function setDeviceBackend(backend: DeviceBackend | null): void;
16
20
  //# sourceMappingURL=device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,cAAc,EACf,MAAM,0BAA0B,CAAC;AAWlC,wBAAgB,wBAAwB,IAAI,kBAAkB,CAM7D;AAID,wBAAgB,0BAA0B,IAAI,oBAAoB,CAUjE;AAID,wBAAgB,gBAAgB,IAAI,UAAU,CA4B7C;AAGD,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAID,wBAAgB,sBAAsB,IAAI,aAAa,CA4GtD;AAOD,wBAAgB,uBAAuB,IAAI,MAAM,IAAI,CA+BpD;AAGD,wBAAgB,gBAAgB,IAAI,aAAa,CAGhD;AAID,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,GAAG,kBAAkB,CAEjF;AAID,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,oBAAoB,GAAG,oBAAoB,CAEvF;AAMD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAEzD;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAErE;AAOD,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAEpE"}
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,cAAc,EACf,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,wBAAwB,IAAI,kBAAkB,CAM7D;AAED,wBAAgB,0BAA0B,IAAI,oBAAoB,CAUjE;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CA4B7C;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAID,wBAAgB,sBAAsB,IAAI,aAAa,CA4GtD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,IAAI,CA8BpD;AAED,wBAAgB,oBAAoB,IAAI,kBAAkB,CAazD;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,GAAG,kBAAkB,CAEjF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,oBAAoB,GAAG,oBAAoB,CAEvF;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAErE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAMrE;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAKnF;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAEpE"}
package/dist/device.js CHANGED
@@ -1,7 +1,5 @@
1
1
  import { DeviceFormFactorUnknown } from '@flighthq/types/contract';
2
2
  import { parseUserAgentArch, parseUserAgentFormFactor, parseUserAgentOsName, parseUserAgentOsVersion, } from '@flighthq/useragent/contract';
3
- // Allocates a zeroed DeviceCapabilities; use as the `out` for getDeviceCapabilities.
4
- // All boolean fields default to false (unknown).
5
3
  export function createDeviceCapabilities() {
6
4
  return {
7
5
  hasKeyboard: false,
@@ -9,8 +7,6 @@ export function createDeviceCapabilities() {
9
7
  hasStylus: false,
10
8
  };
11
9
  }
12
- // Allocates a zeroed DeviceDisplayMetrics; use as the `out` for getDeviceDisplayMetrics.
13
- // All numeric fields default to -1 when unknown.
14
10
  export function createDeviceDisplayMetrics() {
15
11
  return {
16
12
  colorDepth: -1,
@@ -22,8 +18,6 @@ export function createDeviceDisplayMetrics() {
22
18
  pixelRatio: -1,
23
19
  };
24
20
  }
25
- // Allocates a zeroed DeviceInfo; use as the `out` for getDeviceInfo or when building a backend.
26
- // Strings default to '', booleans to false, arrays to [], and unknown-numeric fields to -1.
27
21
  export function createDeviceInfo() {
28
22
  return {
29
23
  arch: '',
@@ -53,7 +47,6 @@ export function createDeviceInfo() {
53
47
  webViewVersion: '',
54
48
  };
55
49
  }
56
- // Allocates a zeroed SafeAreaInsets (all edges 0); use as the `out` for getSafeAreaInsets.
57
50
  export function createSafeAreaInsets() {
58
51
  return { bottom: 0, left: 0, right: 0, top: 0 };
59
52
  }
@@ -172,11 +165,6 @@ export function createWebDeviceBackend() {
172
165
  },
173
166
  };
174
167
  }
175
- // Mounts a CSS env(safe-area-inset-*) probe element in the DOM and keeps the active web backend's
176
- // safe-area values live. Call once after the page is ready; unmount by calling the returned dispose
177
- // function. Has no effect when called outside of a browser context (SSR, workers). The probe is
178
- // cheap: one hidden element, no polling — a ResizeObserver detects viewport changes.
179
- // Returns a dispose function that removes the probe element and stops the observer.
180
168
  export function enableWebSafeAreaInsets() {
181
169
  if (typeof document === 'undefined')
182
170
  return () => { };
@@ -196,7 +184,6 @@ export function enableWebSafeAreaInsets() {
196
184
  };
197
185
  }
198
186
  readInsets();
199
- // ResizeObserver may be absent in older browsers or test environments; fall back to a no-op.
200
187
  const observer = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(readInsets) : null;
201
188
  if (observer !== null)
202
189
  observer.observe(document.documentElement);
@@ -207,43 +194,52 @@ export function enableWebSafeAreaInsets() {
207
194
  _safeAreaInsets = null;
208
195
  };
209
196
  }
210
- // Returns the active device backend, or a lazily-created web default. There is always a backend.
197
+ export function explainDeviceBackend() {
198
+ if (_custom !== null) {
199
+ return { conflict: _hostConflict, layer: 'custom', operation: null, viability: 'unobserved' };
200
+ }
201
+ if (_host !== null) {
202
+ return {
203
+ conflict: _hostConflict,
204
+ layer: 'host',
205
+ operation: _hostObservation !== null ? _hostObservation.operation : null,
206
+ viability: _hostObservation !== null ? _hostObservation.viability : 'unobserved',
207
+ };
208
+ }
209
+ return { conflict: false, layer: 'host-not-enabled', operation: null, viability: 'unobserved' };
210
+ }
211
211
  export function getDeviceBackend() {
212
- if (_backend === null)
213
- _backend = createWebDeviceBackend();
214
- return _backend;
212
+ return _custom ?? _host ?? _sentinel;
215
213
  }
216
- // Fills `out` with the device's input/hardware capability flags and returns it.
217
- // Only surfaces capabilities with no dedicated package owner; see DeviceCapabilities for cross-refs.
218
214
  export function getDeviceCapabilities(out) {
219
215
  return getDeviceBackend().getCapabilities(out);
220
216
  }
221
- // Fills `out` with the device's built-in display metrics and returns it. Reads the active backend.
222
- // For live multi-display enumeration and work-area geometry, use @flighthq/screen.
223
217
  export function getDeviceDisplayMetrics(out) {
224
218
  return getDeviceBackend().getDisplayMetrics(out);
225
219
  }
226
- // Returns a stable install identifier for this device/app install. Backed by DeviceBackend.getId().
227
- // Web default: crypto.randomUUID() persisted to localStorage. Returns '' when no stable id can be
228
- // formed (SSR, blocked storage, privacy mode). This is an _install_ id — resettable by clearing
229
- // storage — not a hardware serial.
230
220
  export function getDeviceId() {
231
221
  return getDeviceBackend().getId();
232
222
  }
233
- // Fills `out` with the running device's identity and returns it. Reads the active backend.
234
223
  export function getDeviceInfo(out) {
235
224
  return getDeviceBackend().getInfo(out);
236
225
  }
237
- // Fills `out` with the device's safe-area insets, in CSS pixels, and returns it.
238
- // Web: returns zeros by default; call enableWebSafeAreaInsets() for real CSS env() values.
239
226
  export function getSafeAreaInsets(out) {
240
227
  return getDeviceBackend().getSafeAreaInsets(out);
241
228
  }
242
- // Invalidates any snapshot cached in the active backend and triggers a fresh read on the next call
243
- // to getDeviceInfo / getSafeAreaInsets / getDeviceDisplayMetrics. Useful for orientation-affected
244
- // safe-area insets and available-memory reads that may change at runtime.
245
- // The web default backend is stateless (no cache), so this is a no-op there; native backends that
246
- // cache a snapshot must listen for this signal and invalidate their cache.
229
+ export function installDeviceHostBackend(backend) {
230
+ if (_host !== null) {
231
+ if (_host !== backend)
232
+ _hostConflict = true;
233
+ return;
234
+ }
235
+ _host = backend;
236
+ }
237
+ export function observeDeviceHostResult(operation, succeeded) {
238
+ _hostObservation = {
239
+ operation,
240
+ viability: succeeded ? 'available' : 'runtime-api-unavailable',
241
+ };
242
+ }
247
243
  export function refreshDeviceInfo() {
248
244
  const backend = getDeviceBackend();
249
245
  const maybeRefreshable = backend;
@@ -251,15 +247,76 @@ export function refreshDeviceInfo() {
251
247
  maybeRefreshable.refresh();
252
248
  }
253
249
  }
254
- // Installs a native host device backend; pass null to fall back to the web default.
250
+ export function resetDeviceBackendForTest() {
251
+ _custom = null;
252
+ _host = null;
253
+ _hostConflict = false;
254
+ _hostObservation = null;
255
+ }
255
256
  export function setDeviceBackend(backend) {
256
- _backend = backend;
257
+ _custom = backend;
257
258
  }
258
- let _backend = null;
259
+ const _sentinel = {
260
+ getCapabilities(out) {
261
+ out.hasKeyboard = false;
262
+ out.hasMouse = false;
263
+ out.hasStylus = false;
264
+ return out;
265
+ },
266
+ getDisplayMetrics(out) {
267
+ out.colorDepth = -1;
268
+ out.densityDpi = -1;
269
+ out.logicalHeight = -1;
270
+ out.logicalWidth = -1;
271
+ out.physicalHeight = -1;
272
+ out.physicalWidth = -1;
273
+ out.pixelRatio = -1;
274
+ return out;
275
+ },
276
+ getId() {
277
+ return '';
278
+ },
279
+ getInfo(out) {
280
+ out.arch = '';
281
+ out.availableMemory = -1;
282
+ out.boardName = '';
283
+ out.colorGamut = '';
284
+ out.cpuCores = -1;
285
+ out.fontScale = -1;
286
+ out.formFactor = DeviceFormFactorUnknown;
287
+ out.gpuRenderer = '';
288
+ out.gpuVendor = '';
289
+ out.isHdr = false;
290
+ out.isJailbroken = false;
291
+ out.isLowEndDevice = false;
292
+ out.isRooted = false;
293
+ out.isVirtual = false;
294
+ out.manufacturer = '';
295
+ out.marketingName = '';
296
+ out.model = '';
297
+ out.osBuild = '';
298
+ out.osName = '';
299
+ out.osVersion = '';
300
+ out.platformString = '';
301
+ out.productName = '';
302
+ out.supportedAbis = [];
303
+ out.totalMemory = -1;
304
+ out.webViewVersion = '';
305
+ return out;
306
+ },
307
+ getSafeAreaInsets(out) {
308
+ out.bottom = 0;
309
+ out.left = 0;
310
+ out.right = 0;
311
+ out.top = 0;
312
+ return out;
313
+ },
314
+ };
315
+ let _custom = null;
316
+ let _host = null;
317
+ let _hostConflict = false;
318
+ let _hostObservation = null;
259
319
  let _safeAreaInsets = null;
260
- // ---------------------------------------------------------------------------
261
- // Web-backend detection helpers (private)
262
- // ---------------------------------------------------------------------------
263
320
  function detectDesktopUa(ua) {
264
321
  return /win(?:dows)?nt|macintosh|mac os x|linux(?!.*android)|cros|x11/i.test(ua);
265
322
  }
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,UAAU,EAAE,CAAC,CAAC;QACd,UAAU,EAAE,CAAC,CAAC;QACd,aAAa,EAAE,CAAC,CAAC;QACjB,YAAY,EAAE,CAAC,CAAC;QAChB,cAAc,EAAE,CAAC,CAAC;QAClB,aAAa,EAAE,CAAC,CAAC;QACjB,UAAU,EAAE,CAAC,CAAC;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,IAAI,EAAE,EAAE;QACR,eAAe,EAAE,CAAC,CAAC;QACnB,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,CAAC,CAAC;QACZ,SAAS,EAAE,CAAC,CAAC;QACb,UAAU,EAAE,uBAAuB;QACnC,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,KAAK;QACnB,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,WAAW,EAAE,CAAC,CAAC;QACf,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,2FAA2F;AAC3F,sFAAsF;AACtF,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,eAAe,CAAC,GAAuB;YACrC,MAAM,GAAG,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAChE,0FAA0F;YAC1F,wFAAwF;YACxF,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,IAAI,gBAAgB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,GAAG,CAAC,QAAQ,GAAG,QAAQ,KAAK,CAAC,CAAC;YAC9B,2FAA2F;YAC3F,kGAAkG;YAClG,MAAM,EAAE,GAAG,GAAG,EAAE,SAAS,IAAI,EAAE,CAAC;YAChC,GAAG,CAAC,WAAW,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;YACtC,sEAAsE;YACtE,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,iBAAiB,CAAC,GAAyB;YACzC,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1D,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1D,GAAG,CAAC,UAAU,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,oDAAoD;YACpD,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACpB,GAAG,CAAC,aAAa,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,GAAG,CAAC,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,UAAU,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;YAC5B,GAAG,CAAC,aAAa,GAAG,GAAG,KAAK,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7F,GAAG,CAAC,cAAc,GAAG,GAAG,KAAK,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/F,OAAO,GAAG,CAAC;QACb,CAAC;QACD,KAAK;YACH,6EAA6E;YAC7E,uFAAuF;YACvF,uFAAuF;YACvF,4FAA4F;YAC5F,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,sBAAsB,CAAC;gBACnC,MAAM,QAAQ,GAAG,OAAO,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxF,IAAI,QAAQ,KAAK,IAAI;oBAAE,OAAO,QAAQ,CAAC;gBACvC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;oBAAE,OAAO,EAAE,CAAC;gBACxF,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC/B,IAAI,OAAO,YAAY,KAAK,WAAW;oBAAE,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACvE,OAAO,EAAE,CAAC;YACZ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAe;YACrB,MAAM,GAAG,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAChE,MAAM,EAAE,GAAG,GAAG,EAAE,SAAS,IAAI,EAAE,CAAC;YAChC,MAAM,WAAW,GAAwB,GAAwD,EAAE,aAAa;gBAC9G,EAAE,QAAQ,CAAC;YACb,GAAG,CAAC,IAAI,GAAG,kBAAkB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAC/C,0DAA0D;YAC1D,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;YACzB,kFAAkF;YAClF,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;YACnB,0DAA0D;YAC1D,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,GAAG,KAAK,IAAI,IAAI,qBAAqB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClG,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;YACrB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACnB,GAAG,CAAC,UAAU,GAAG,wBAAwB,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,IAAI,gBAAgB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjH,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;YACnC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;YAC/B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;YAClB,8EAA8E;YAC9E,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;YACzB,MAAM,MAAM,GACV,GAAG,KAAK,IAAI,IAAI,cAAc,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,GAAiC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvG,GAAG,CAAC,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACvD,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;YACrB,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;YACtB,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC;YACtB,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC;YACvB,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;YACjB,GAAG,CAAC,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACtC,GAAG,CAAC,SAAS,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAC5C,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;YACxB,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;YACrB,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC;YACvB,mFAAmF;YACnF,GAAG,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,kEAAkE;YAClE,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,iBAAiB,CAAC,GAAmB;YACnC,0FAA0F;YAC1F,+FAA+F;YAC/F,wEAAwE;YACxE,MAAM,MAAM,GAAG,eAAe,CAAC;YAC/B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC3B,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBACvB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBACzB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;gBACf,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;gBACb,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBACd,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YACd,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAErD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,EAAE,CAAC,KAAK,CAAC,OAAO;QACd,uFAAuF;YACvF,4EAA4E;YAC5E,wCAAwC,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE9B,SAAS,UAAU;QACjB,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACnC,eAAe,GAAG;YAChB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YACrC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YACnC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,UAAU,EAAE,CAAC;IAEb,MAAM,QAAQ,GAAG,OAAO,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,IAAI,QAAQ,KAAK,IAAI;QAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAElE,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ,KAAK,IAAI;YAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC7C,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAC/B,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAChG,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO;YACL,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YACxE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;SACjF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO,IAAI,KAAK,IAAI,SAAS,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAuB;IAC3D,OAAO,gBAAgB,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAyB;IAC/D,OAAO,gBAAgB,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,gBAAgB,EAAE,CAAC,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAe;IAC3C,OAAO,gBAAgB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAmB;IACnD,OAAO,gBAAgB,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAsB;IAC7D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,KAAK,KAAK,OAAO;YAAE,aAAa,GAAG,IAAI,CAAC;QAC5C,OAAO;IACT,CAAC;IACD,KAAK,GAAG,OAAO,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAiB,EAAE,SAAkB;IAC3E,gBAAgB,GAAG;QACjB,SAAS;QACT,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,yBAAyB;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAG,OAA8C,CAAC;IACxE,IAAI,OAAO,gBAAgB,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACnD,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,GAAG,IAAI,CAAC;IACf,KAAK,GAAG,IAAI,CAAC;IACb,aAAa,GAAG,KAAK,CAAC;IACtB,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC5D,OAAO,GAAG,OAAO,CAAC;AACpB,CAAC;AAED,MAAM,SAAS,GAAkB;IAC/B,eAAe,CAAC,GAAuB;QACrC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;QACxB,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,iBAAiB,CAAC,GAAyB;QACzC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACpB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACpB,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QACvB,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACxB,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QACvB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,GAAe;QACrB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QACzB,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;QACpB,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,GAAG,CAAC,UAAU,GAAG,uBAAuB,CAAC;QACzC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;QACrB,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAClB,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;QACzB,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC;QAC3B,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;QACtB,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC;QACtB,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACf,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;QACjB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;QACxB,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;QACrB,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC;QACvB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACrB,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,iBAAiB,CAAC,GAAmB;QACnC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACf,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACb,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC;AAEF,IAAI,OAAO,GAAyB,IAAI,CAAC;AACzC,IAAI,KAAK,GAAyB,IAAI,CAAC;AACvC,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,gBAAgB,GAAqF,IAAI,CAAC;AAC9G,IAAI,eAAe,GAA0B,IAAI,CAAC;AAElD,SAAS,eAAe,CAAC,EAAU;IACjC,OAAO,gEAAgE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,kBAAkB,CAAC,eAAuB,EAAE,KAAa;IAChE,wFAAwF;IACxF,IAAI,eAAe,GAAG,CAAC,IAAI,eAAe,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc;IACrB,iGAAiG;IACjG,kGAAkG;IAClG,IAAI,CAAC;QACH,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,EAAE,GACL,MAAM,CAAC,UAAU,CAAC,OAAO,CAAkC;YAC3D,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAkC,CAAC;QAC5E,IAAI,EAAE,KAAK,IAAI;YAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC;QACzD,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACtD,MAAM,MAAM,GAAI,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAY,IAAI,EAAE,CAAC;QAC5E,MAAM,QAAQ,GAAI,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAY,IAAI,EAAE,CAAC;QAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { enableWebSafeAreaInsets, getDeviceCapabilities, getDeviceDisplayMetrics, getDeviceId, getDeviceInfo, getSafeAreaInsets, refreshDeviceInfo, } from './contract';
1
+ export { enableWebSafeAreaInsets, explainDeviceBackend, getDeviceCapabilities, getDeviceDisplayMetrics, getDeviceId, getDeviceInfo, getSafeAreaInsets, refreshDeviceInfo, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { enableWebSafeAreaInsets, getDeviceCapabilities, getDeviceDisplayMetrics, getDeviceId, getDeviceInfo, getSafeAreaInsets, refreshDeviceInfo, } from './contract';
1
+ export { enableWebSafeAreaInsets, explainDeviceBackend, getDeviceCapabilities, getDeviceDisplayMetrics, getDeviceId, getDeviceInfo, getSafeAreaInsets, refreshDeviceInfo, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/device",
3
- "version": "0.3.1-next.975.01aea94",
3
+ "version": "0.4.0-edge.1908.751021c",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,8 +38,8 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/types": "0.3.1-next.975.01aea94",
42
- "@flighthq/useragent": "0.3.1-next.975.01aea94"
41
+ "@flighthq/types": "0.4.0-edge.1908.751021c",
42
+ "@flighthq/useragent": "0.4.0-edge.1908.751021c"
43
43
  },
44
44
  "devDependencies": {
45
45
  "typescript": "^5.3.0"
@@ -22,6 +22,10 @@ import {
22
22
  getSafeAreaInsets,
23
23
  refreshDeviceInfo,
24
24
  setDeviceBackend,
25
+ explainDeviceBackend,
26
+ installDeviceHostBackend,
27
+ observeDeviceHostResult,
28
+ resetDeviceBackendForTest,
25
29
  } from './device';
26
30
 
27
31
  function fakeBackend(): DeviceBackend {
@@ -241,6 +245,34 @@ describe('enableWebSafeAreaInsets', () => {
241
245
  });
242
246
  });
243
247
 
248
+ describe('explainDeviceBackend', () => {
249
+ afterEach(() => resetDeviceBackendForTest());
250
+
251
+ it('reports host-not-enabled when no backend is installed', () => {
252
+ resetDeviceBackendForTest();
253
+ const explanation = explainDeviceBackend();
254
+ expect(explanation.layer).toBe('host-not-enabled');
255
+ expect(explanation.conflict).toBe(false);
256
+ expect(explanation.viability).toBe('unobserved');
257
+ });
258
+
259
+ it('reports custom layer when a custom backend is set', () => {
260
+ setDeviceBackend(fakeBackend());
261
+ expect(explainDeviceBackend().layer).toBe('custom');
262
+ });
263
+
264
+ it('reports host layer when a host backend is installed', () => {
265
+ installDeviceHostBackend(fakeBackend());
266
+ expect(explainDeviceBackend().layer).toBe('host');
267
+ });
268
+
269
+ it('reports conflict when two different host backends are installed', () => {
270
+ installDeviceHostBackend(fakeBackend());
271
+ installDeviceHostBackend(fakeBackend());
272
+ expect(explainDeviceBackend().conflict).toBe(true);
273
+ });
274
+ });
275
+
244
276
  describe('getDeviceBackend', () => {
245
277
  it('falls back to a web backend when none is set', () => {
246
278
  expect(getDeviceBackend()).not.toBeNull();
@@ -352,6 +384,43 @@ describe('getSafeAreaInsets', () => {
352
384
  });
353
385
  });
354
386
 
387
+ describe('installDeviceHostBackend', () => {
388
+ afterEach(() => resetDeviceBackendForTest());
389
+
390
+ it('installs a host backend that getDeviceBackend returns', () => {
391
+ const backend = fakeBackend();
392
+ installDeviceHostBackend(backend);
393
+ expect(getDeviceBackend()).toBe(backend);
394
+ });
395
+
396
+ it('is first-host-wins: a second different backend sets conflict', () => {
397
+ const first = fakeBackend();
398
+ const second = fakeBackend();
399
+ installDeviceHostBackend(first);
400
+ installDeviceHostBackend(second);
401
+ expect(getDeviceBackend()).toBe(first);
402
+ expect(explainDeviceBackend().conflict).toBe(true);
403
+ });
404
+ });
405
+
406
+ describe('observeDeviceHostResult', () => {
407
+ afterEach(() => resetDeviceBackendForTest());
408
+
409
+ it('records a successful observation', () => {
410
+ installDeviceHostBackend(fakeBackend());
411
+ observeDeviceHostResult('getCapabilities', true);
412
+ const explanation = explainDeviceBackend();
413
+ expect(explanation.operation).toBe('getCapabilities');
414
+ expect(explanation.viability).toBe('available');
415
+ });
416
+
417
+ it('records a failed observation', () => {
418
+ installDeviceHostBackend(fakeBackend());
419
+ observeDeviceHostResult('getCapabilities', false);
420
+ expect(explainDeviceBackend().viability).toBe('runtime-api-unavailable');
421
+ });
422
+ });
423
+
355
424
  describe('refreshDeviceInfo', () => {
356
425
  it('does not throw on the default web backend', () => {
357
426
  expect(() => refreshDeviceInfo()).not.toThrow();
@@ -371,6 +440,18 @@ describe('refreshDeviceInfo', () => {
371
440
  });
372
441
  });
373
442
 
443
+ describe('resetDeviceBackendForTest', () => {
444
+ it('clears all backend slots', () => {
445
+ setDeviceBackend(fakeBackend());
446
+ installDeviceHostBackend(fakeBackend());
447
+ observeDeviceHostResult('getCapabilities', true);
448
+ resetDeviceBackendForTest();
449
+ expect(explainDeviceBackend().layer).toBe('host-not-enabled');
450
+ expect(explainDeviceBackend().conflict).toBe(false);
451
+ expect(explainDeviceBackend().viability).toBe('unobserved');
452
+ });
453
+ });
454
+
374
455
  describe('setDeviceBackend', () => {
375
456
  it('clears back to the web fallback when passed null', () => {
376
457
  setDeviceBackend(fakeBackend());