# `TryOnReport`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Interface · `import type { TryOnReport } from '@holostep-configurators/runtime-client/contract';` · labs, `@experimental` · since 2.0.0 · section 16. Capture, export, AR

What `tryOn` resolves with once try-on closed or could not open. Frozen.

## Members

| Member | Kind | Summary |
| --- | --- | --- |
| <a id="launched"></a>[`launched`](TryOnReport.launched.md) | property | True when the camera picture with the product showed: try-on ran. |
| <a id="mode"></a>[`mode`](TryOnReport.mode.md) | property | Where it ran, or would have. |
| <a id="reason"></a>[`reason?`](TryOnReport.reason.md) | property | Present when `launched` is false: 'unavailable' ([`canTryOn()`](Session.canTryOn.md) says no), 'unsupported' (this device, one without a camera, or a mode or UI not offered), 'camera-denied' (the camera was refused and try-on closed on… |
| <a id="durationms"></a>[`durationMs`](TryOnReport.durationMs.md) | property | From the call to the close, ms. |
| <a id="handoffurl"></a>[`handoffUrl?`](TryOnReport.handoffUrl.md) | property | The link the hand-off's QR code carried, for 'handoff'. |
| <a id="problems"></a>[`problems`](TryOnReport.problems.md) | property | What went wrong during this try-on, also when it launched; codes this contract doesn't name arrive as 'other'. |

## Declaration

```ts
export interface TryOnReport {
  readonly launched: boolean;
  readonly mode: TryOnMode;
  readonly reason?: 'unavailable' | 'unsupported' | 'camera-denied' | 'needs-tap' | 'error' | 'other';
  readonly durationMs: number;
  readonly handoffUrl?: string;
  readonly problems: readonly Problem[];
}
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `TryOnReport` names no product |
| 2. A precedent | not recorded: no ledger row (coverage.json) names this member or its owner |
| 3. Two apps, or labs | labs (`@experimental` at a stable path, reached through `has()` or `supports()`): it graduates when a second app uses it |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
