@burnt-labs/expo-satya-attest 3.3.0 → 3.4.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.
Files changed (112) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/PUBLISHING.md +8 -5
  3. package/README.md +54 -27
  4. package/android/build.gradle +2 -2
  5. package/android/src/main/jniLibs/arm64-v8a/libsatya_ffi.so +0 -0
  6. package/android/src/main/jniLibs/armeabi-v7a/libsatya_ffi.so +0 -0
  7. package/android/src/main/jniLibs/x86_64/libsatya_ffi.so +0 -0
  8. package/build/components/providerAttest/ProviderAttestModal.d.ts.map +1 -1
  9. package/build/components/providerAttest/ProviderAttestModal.js +3 -1
  10. package/build/components/providerAttest/ProviderAttestModal.js.map +1 -1
  11. package/build/components/providerAttest/SessionIdRow.d.ts +14 -0
  12. package/build/components/providerAttest/SessionIdRow.d.ts.map +1 -0
  13. package/build/components/providerAttest/SessionIdRow.js +47 -0
  14. package/build/components/providerAttest/SessionIdRow.js.map +1 -0
  15. package/build/components/providerAttest/clipboardSupport.d.ts +18 -0
  16. package/build/components/providerAttest/clipboardSupport.d.ts.map +1 -0
  17. package/build/components/providerAttest/clipboardSupport.js +44 -0
  18. package/build/components/providerAttest/clipboardSupport.js.map +1 -0
  19. package/build/components/providerAttest/styles.d.ts +30 -0
  20. package/build/components/providerAttest/styles.d.ts.map +1 -1
  21. package/build/components/providerAttest/styles.js +25 -1
  22. package/build/components/providerAttest/styles.js.map +1 -1
  23. package/build/components/providerAttest/teels/useTeelsProviderFlow.d.ts.map +1 -1
  24. package/build/components/providerAttest/teels/useTeelsProviderFlow.js +75 -5
  25. package/build/components/providerAttest/teels/useTeelsProviderFlow.js.map +1 -1
  26. package/build/components/providerAttest/types.d.ts +31 -0
  27. package/build/components/providerAttest/types.d.ts.map +1 -1
  28. package/build/components/providerAttest/types.js.map +1 -1
  29. package/build/components/providerAttest/useCompositeCaptureController.d.ts +6 -1
  30. package/build/components/providerAttest/useCompositeCaptureController.d.ts.map +1 -1
  31. package/build/components/providerAttest/useCompositeCaptureController.js +13 -1
  32. package/build/components/providerAttest/useCompositeCaptureController.js.map +1 -1
  33. package/build/components/providerAttest/useFunnelEmitter.d.ts +29 -0
  34. package/build/components/providerAttest/useFunnelEmitter.d.ts.map +1 -0
  35. package/build/components/providerAttest/useFunnelEmitter.js +75 -0
  36. package/build/components/providerAttest/useFunnelEmitter.js.map +1 -0
  37. package/build/components/providerAttest/useNativeReplayRunner.d.ts +8 -1
  38. package/build/components/providerAttest/useNativeReplayRunner.d.ts.map +1 -1
  39. package/build/components/providerAttest/useNativeReplayRunner.js +82 -2
  40. package/build/components/providerAttest/useNativeReplayRunner.js.map +1 -1
  41. package/build/components/providerAttest/useProviderAttestFlow.d.ts +4 -1
  42. package/build/components/providerAttest/useProviderAttestFlow.d.ts.map +1 -1
  43. package/build/components/providerAttest/useProviderAttestFlow.js +86 -8
  44. package/build/components/providerAttest/useProviderAttestFlow.js.map +1 -1
  45. package/build/components/providerAttest/useProviderFlowLifecycle.d.ts +5 -1
  46. package/build/components/providerAttest/useProviderFlowLifecycle.d.ts.map +1 -1
  47. package/build/components/providerAttest/useProviderFlowLifecycle.js +7 -1
  48. package/build/components/providerAttest/useProviderFlowLifecycle.js.map +1 -1
  49. package/build/components/providerAttest/useProviderMessageHandler.d.ts +3 -3
  50. package/build/components/providerAttest/useProviderMessageHandler.d.ts.map +1 -1
  51. package/build/components/providerAttest/useProviderMessageHandler.js +13 -3
  52. package/build/components/providerAttest/useProviderMessageHandler.js.map +1 -1
  53. package/build/constants.d.ts +20 -0
  54. package/build/constants.d.ts.map +1 -0
  55. package/build/constants.js +20 -0
  56. package/build/constants.js.map +1 -0
  57. package/build/debugLog.d.ts +6 -0
  58. package/build/debugLog.d.ts.map +1 -1
  59. package/build/debugLog.js +8 -0
  60. package/build/debugLog.js.map +1 -1
  61. package/build/index.d.ts +3 -0
  62. package/build/index.d.ts.map +1 -1
  63. package/build/index.js +2 -0
  64. package/build/index.js.map +1 -1
  65. package/build/providerMonitor.d.ts +4 -2
  66. package/build/providerMonitor.d.ts.map +1 -1
  67. package/build/providerMonitor.js +4 -2
  68. package/build/providerMonitor.js.map +1 -1
  69. package/build/satyaConfig.d.ts +16 -3
  70. package/build/satyaConfig.d.ts.map +1 -1
  71. package/build/satyaConfig.js +40 -3
  72. package/build/satyaConfig.js.map +1 -1
  73. package/build/sdkEventLog.d.ts +114 -0
  74. package/build/sdkEventLog.d.ts.map +1 -0
  75. package/build/sdkEventLog.js +663 -0
  76. package/build/sdkEventLog.js.map +1 -0
  77. package/build/sdkMetadata.generated.d.ts +1 -1
  78. package/build/sdkMetadata.generated.js +1 -1
  79. package/build/sdkMetadata.generated.js.map +1 -1
  80. package/build/sessionId.d.ts +21 -0
  81. package/build/sessionId.d.ts.map +1 -0
  82. package/build/sessionId.js +55 -0
  83. package/build/sessionId.js.map +1 -0
  84. package/build/types/artifact.types.d.ts +6 -0
  85. package/build/types/artifact.types.d.ts.map +1 -1
  86. package/build/types/artifact.types.js.map +1 -1
  87. package/ios/Frameworks/libsatya_ffi-rs.xcframework/Info.plist +5 -5
  88. package/ios/Frameworks/libsatya_ffi-rs.xcframework/ios-arm64/libsatya_ffi.a +0 -0
  89. package/ios/Frameworks/libsatya_ffi-rs.xcframework/ios-arm64_x86_64-simulator/libsatya_ffi.a +0 -0
  90. package/ios/SatyaAttest.podspec +1 -1
  91. package/package.json +2 -2
  92. package/src/components/providerAttest/ProviderAttestModal.tsx +11 -0
  93. package/src/components/providerAttest/SessionIdRow.tsx +74 -0
  94. package/src/components/providerAttest/clipboardSupport.ts +48 -0
  95. package/src/components/providerAttest/styles.ts +26 -1
  96. package/src/components/providerAttest/teels/useTeelsProviderFlow.ts +96 -5
  97. package/src/components/providerAttest/types.ts +32 -0
  98. package/src/components/providerAttest/useCompositeCaptureController.ts +18 -0
  99. package/src/components/providerAttest/useFunnelEmitter.ts +135 -0
  100. package/src/components/providerAttest/useNativeReplayRunner.ts +105 -2
  101. package/src/components/providerAttest/useProviderAttestFlow.ts +146 -39
  102. package/src/components/providerAttest/useProviderFlowLifecycle.ts +14 -0
  103. package/src/components/providerAttest/useProviderMessageHandler.ts +17 -6
  104. package/src/constants.ts +22 -0
  105. package/src/debugLog.ts +9 -0
  106. package/src/index.ts +19 -0
  107. package/src/providerMonitor.ts +4 -2
  108. package/src/satyaConfig.ts +62 -3
  109. package/src/sdkEventLog.ts +774 -0
  110. package/src/sdkMetadata.generated.ts +1 -1
  111. package/src/sessionId.ts +66 -0
  112. package/src/types/artifact.types.ts +6 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,73 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.4.0 - 2026-08-17
4
+
5
+ ### Added
6
+
7
+ - **Funnel event logging (on by default).** The SDK emits a fixed set of seven
8
+ lifecycle events — `PROVIDER_INIT`, `LOGIN_COMPLETED`, `ENDPOINT_MATCHED`,
9
+ `NATIVE_REPLAY_SUCCESS`, `ATTESTATION_GENERATED`, `ATTESTATION_VERIFIED`, and
10
+ `FAILED` — to the Burnt SDK-logs ingest, so operators can debug providers,
11
+ user sessions, and SDK errors from the log entries alone. PII-free and
12
+ fire-and-forget; opt out per app with `initSatyaAttest({ eventLogging: false })`.
13
+ New optional knobs: `eventLogLevel?`, `eventLogBridgeDebug?`. The ingest
14
+ endpoint is fixed in the package (`src/constants.ts`) — no option, prop, or
15
+ env override — and delivery is best-effort: an unreachable ingest never
16
+ affects attestation flows.
17
+ - **Per-task `sessionId`.** Each user task mints one UUID-shaped id, **held
18
+ constant across retries** (with a per-attempt `attemptIndex`) and threaded into
19
+ every event, so all attempts for one task correlate and retry counts are
20
+ recoverable. Surfaced on `SatyaProviderAttestationResult` and flow progress.
21
+ - **`sessionId` embedded in the attestation** as an optional, *unsigned*
22
+ `sdkSessionId` envelope field (never in the signed statement), so the verifier
23
+ and downstream consumers can tie an attestation to its session and retries.
24
+ `attestationId` and all signatures are byte-identical; existing attestations
25
+ remain valid and the SDK-v3 verifier accepts both. Native Satya artifacts only
26
+ — TeeLS attestations are never modified. **Deployment order:** roll out the
27
+ `sdkSessionId`-aware verifier before (or together with) apps on 3.4.0 —
28
+ older verifiers reject *composite* artifacts that carry the new envelope
29
+ field (single-endpoint artifacts are parsed leniently and unaffected).
30
+ - **Failure screen shows the `sessionId` with a Copy control** so end users can
31
+ share it with support for debugging (host `onCopySessionId?` callback or the
32
+ Share sheet; no dependency).
33
+ - **`LOGIN_COMPLETED` fires from every login-done signal** — the provider
34
+ injection's `__satyaReady` flag (which also triggers the post-login cover
35
+ overlay) and an accepted `auth.submitSignal` response — deduped to one event
36
+ per attempt. Its `logData` records how login was detected with derived,
37
+ PII-free fields only: `loginSignalSource` (`satyaReady` | `submitSignal`),
38
+ the registry-declared `loginSignalId`, `submitStatusClass` (e.g. `2xx`),
39
+ `loginBodyMatched`, `loginLatencyMs` (attempt start → login done), and
40
+ `captureMode` (`composite` | `single`).
41
+ - **TeeLS flows emit their applicable events** — `PROVIDER_INIT`,
42
+ `ATTESTATION_GENERATED`, `ATTESTATION_VERIFIED` (`verifiedBy: 'teels'`), and a
43
+ terminal `FAILED` (`USER_CANCELLED` / `SUPERSEDED` included) — with the claim's
44
+ attestation id on the envelope (`attestationId`) and mirrored in
45
+ `logData.teelsAttestationId`.
46
+ - **`FAILED` carries the failure reason**: a secret-scrubbed, length-capped
47
+ `errorMessage` plus the verifier's own taxonomy (`verifierErrorCode` /
48
+ `verifierErrorClass` / `verifierErrorStage`) when the backend verifier
49
+ rejected the artifact.
50
+ - New public exports: the funnel emitter, the event-type enum, the session-id
51
+ helper, and the `SdkEventLogConfig` / `SdkEventLogData` types.
52
+
53
+ ### Fixed
54
+
55
+ - **PII: the disclosed username is no longer logged.** The native replay debug
56
+ line logged `disclosedUsername` verbatim; it now logs `hasDisclosedUsername`
57
+ (a boolean) only.
58
+
59
+ ### Notes
60
+
61
+ - Emission is **fire-and-forget and telemetry-only**: it never blocks, delays,
62
+ or fails an attestation, never carries claims/artifact contents, and is sent
63
+ with `credentials: 'omit'`. `logData` is built from an allowlist and hard-capped
64
+ at 2 KB. Transient `429`s back off and retry without dropping events.
65
+ - Funnel logging and `sdkSessionId` are **not** part of the hashed provider
66
+ policy or the signed statement, so every provider keeps an unchanged policy
67
+ hash and `attestationId`. The verifier validates the unsigned `sdkSessionId`
68
+ to a UUID shape before echoing/logging it. The change is strictly additive: no
69
+ public export or config field was removed or renamed.
70
+
3
71
  ## 3.3.0 - 2026-08-14
4
72
 
5
73
  ### Fixed
package/PUBLISHING.md CHANGED
@@ -24,9 +24,11 @@ Check before release:
24
24
  npm view @burnt-labs/expo-satya-attest version
25
25
  ```
26
26
 
27
- If npm returns `E404`, the package has not been published yet. The `NPM_TOKEN` used by
28
- GitHub Actions must belong to an npm account or automation token with publish rights for
29
- the `@burnt-labs` scope. Scoped public publishes must use `npm publish --access public`.
27
+ If npm returns `E404`, the package has not been published yet. Publishing runs through
28
+ npm OIDC Trusted Publishing from `publish-expo-satya-attest.yml` (the package's single
29
+ trusted publisher on npmjs.com), so CI carries no long-lived `NPM_TOKEN`; the workflow
30
+ just needs `id-token: write` and npm >= 11.5.1. Scoped public publishes must use
31
+ `npm publish --access public`.
30
32
 
31
33
  ## Native Artifacts That Must Ship
32
34
 
@@ -201,8 +203,9 @@ unique prerelease version:
201
203
  1.0.1-snapshot.<run>.<attempt>.sha-<commit>
202
204
  ```
203
205
 
204
- The snapshot workflow increments the package's patch base in CI before publishing. For
205
- example, if `package.json` is `1.0.0`, the snapshot version is based on `1.0.1`:
206
+ The snapshot job (in `publish-expo-satya-attest.yml`) increments the package's patch base
207
+ in CI before publishing. For example, if `package.json` is `1.0.0`, the snapshot version
208
+ is based on `1.0.1`:
206
209
  `1.0.1-snapshot.<run>.<attempt>.sha-<commit>`.
207
210
 
208
211
  Snapshots use the `snapshot` dist-tag so test apps do not need to know the generated
package/README.md CHANGED
@@ -133,33 +133,28 @@ verification claim, and do not log or persist the result by default.
133
133
 
134
134
  The SATYA SDK performs no verification of the TeeLS result — it neither
135
135
  verifies the quote nor checks that the claim data matches it. Before trusting
136
- the result, the consuming application or its backend must verify it:
137
-
138
- 1. **DCAP quote.** `attestation.quote` is a hex-encoded Intel TDX quote. Post
139
- it to the independent TeeLS verifier service and require `success: true`,
140
- `quote.verified: true`, and a `tcb_status` your policy accepts:
141
-
142
- ```bash
143
- curl -X POST https://attest.burnt.com/verify \
144
- -H 'content-type: application/json' \
145
- -d '{"hex":"<quote hex>"}'
146
- ```
147
-
148
- 2. **Measurements.** Compare the verified quote's `mrtd` and `rtmr0`–`rtmr3`
149
- against the expected-measurements registry published independently by the
150
- verifier (`GET https://attest.burnt.com/measurements`); require a match
151
- against one of its `valid[]` sets.
152
- 3. **Data binding.** Use `reportdata` from the **verified quote response**
153
- (never the advisory `attestation.reportDataHex` field — it is
154
- server-supplied). Its first 32 bytes must equal
155
- `SHA-256(JSON.stringify(data))` over the exact result-data object the page
156
- delivered (in this flow, `claimData.data`; remaining bytes are
157
- zero-padded). When the provider binds a policy hash, the envelope is
158
- `{ data, policyHash }` instead of bare `data`. Any mismatch means the claim
159
- data was substituted after attestation.
160
-
161
- The result carries no nonce, so enforce your own freshness and replay policy
162
- wherever the attestation crosses a trust boundary.
136
+ the result, the consuming application or its backend must verify it. Post the
137
+ quote **and** the exact claim (`attestation.claim`) to the independent TeeLS
138
+ verifier's quote+claim endpoint and require `success: true`:
139
+
140
+ ```bash
141
+ curl -X POST https://attest.burnt.com/verify-quote \
142
+ -H 'content-type: application/json' \
143
+ -d '{"hex":"<quote hex>","claim":{ ...attestation.claim... }}'
144
+ ```
145
+
146
+ The response carries the DCAP quote verdict (`quote.verified`, `tcb_status`,
147
+ `quote.body` measurements) plus a `claim` verdict with per-check results
148
+ (`binding` — the quote's `reportdata` matches the claim, `providerKnown`,
149
+ `schemaMatch`, `policyMatch`, `timeValid`) and a `reason` on failure. The claim
150
+ is required: the quote-only `POST /verify` route refuses claim-carrying
151
+ requests so claim verification can't be skipped accidentally. If you pin
152
+ measurements yourself, compare `quote.body.mrtd` / `rtmr0`–`rtmr3` against the
153
+ registry at `GET https://attest.burnt.com/measurements`.
154
+
155
+ The result carries no nonce beyond the claim's `issuedAt`/`expiresAt` window,
156
+ so enforce your own freshness and replay policy wherever the attestation
157
+ crosses a trust boundary.
163
158
 
164
159
  ## Native Trust Tiers
165
160
 
@@ -937,6 +932,38 @@ is only `provider`, `outcome`, and `latencyMs` — no user data, claims, session
937
932
  identifiers, or artifact contents. The endpoint enforces a registry allow-list;
938
933
  unknown provider ids are acknowledged but not recorded.
939
934
 
935
+ ## Funnel Event Logging
936
+
937
+ The SDK emits seven lifecycle events — `PROVIDER_INIT`, `LOGIN_COMPLETED`,
938
+ `ENDPOINT_MATCHED`, `NATIVE_REPLAY_SUCCESS`, `ATTESTATION_GENERATED`,
939
+ `ATTESTATION_VERIFIED`, and `FAILED` — to the SDK-logs ingest
940
+ (`POST https://satya-sdk-logs.burnt.com/v1/sdk-events`), viewable on the
941
+ provider-registry Monitoring dashboard. **On by default**; opt out with
942
+ `initSatyaAttest({ eventLogging: false })`.
943
+
944
+ - **Correlation:** each user task mints one UUID `sessionId`, held constant
945
+ across retries (each attempt is numbered with `attemptIndex`) and embedded in
946
+ native artifacts as the unsigned `sdkSessionId` envelope field. From
947
+ `ATTESTATION_GENERATED` on, events also carry the `attestationId` join key
948
+ (for TeeLS flows, the claim's attestation id). The failure screen shows the
949
+ `sessionId` with a Copy control for support hand-off. **Deploy the
950
+ `sdkSessionId`-aware verifier before rolling out 3.4.0 clients** — older
951
+ verifiers reject *composite* artifacts carrying the new envelope field.
952
+ - **PII stance:** `logData` is built from a fail-closed allowlist of derived
953
+ fields (status buckets, error codes, timings, versions) and hard-capped at
954
+ 2 KB — never cookies, tokens, bodies, usernames, or full URLs. Sent with
955
+ `credentials: 'omit'`; `deviceId` is never sent. Events are analytics-only —
956
+ nothing downstream should treat them as evidence.
957
+ - **Delivery:** fire-and-forget off the attestation path; `429` responses back
958
+ off and retry without dropping; a bounded in-memory queue sheds the oldest
959
+ non-`FAILED` events only under overflow.
960
+ - Optional knobs: `eventLogLevel`, and `eventLogBridgeDebug` (attach a scrubbed
961
+ debug-log tail to `FAILED`; first-party debug builds only). The ingest
962
+ endpoint is fixed in the package (`src/constants.ts`) and cannot be
963
+ overridden by options, props, or env — app-controlled input never chooses
964
+ where session-correlated telemetry goes. Delivery is best-effort: an
965
+ unreachable or erroring ingest never affects attestation flows.
966
+
940
967
  ## Checks
941
968
 
942
969
  ```bash
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'expo.modules.satyaattest'
7
- version = '3.3.0'
7
+ version = '3.4.0'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.satyaattest"
11
11
  defaultConfig {
12
12
  versionCode 1
13
- versionName "3.3.0"
13
+ versionName "3.4.0"
14
14
  // StrongBox key attestation needs API 28+; basic Keystore attestation API 24+.
15
15
  minSdkVersion 24
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderAttestModal.d.ts","sourceRoot":"","sources":["../../../src/components/providerAttest/ProviderAttestModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAuC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,UAAU,wBAAwB;IAChC,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,wBAAwB,qBAMrE"}
1
+ {"version":3,"file":"ProviderAttestModal.d.ts","sourceRoot":"","sources":["../../../src/components/providerAttest/ProviderAttestModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAwC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,UAAU,wBAAwB;IAChC,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,wBAAwB,qBAMrE"}
@@ -1,6 +1,7 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { AccessibilityInfo, ActivityIndicator, Animated, Easing, Keyboard, LayoutAnimation, Modal, Platform, Pressable, StatusBar, StyleSheet, Text, useWindowDimensions, View, } from 'react-native';
3
3
  import { initialWindowMetrics, SafeAreaInsetsContext, SafeAreaProvider, } from 'react-native-safe-area-context';
4
+ import { SessionIdRow } from './SessionIdRow';
4
5
  import { WEBVIEW_BOOTSTRAP_URL } from './constants';
5
6
  import { coverCopy, friendlyError, friendlyTeelsError, isRetryableError, preparingCopy, processingCopy, } from './copy';
6
7
  import { managedPopupKey, managedPopupSource, safeWebViewUri } from './popupRelay';
@@ -144,7 +145,7 @@ function AndroidSheetHost({ flow }) {
144
145
  </Modal>);
145
146
  }
146
147
  function ProviderSheetContent({ flow, insets }) {
147
- const { closeFlow, closeManagedPopup, contentReady, effectiveUserAgent, error, errorCode, errorRetryable, handleHardwareBack, handleMessage, handleNavigationStateChange, handleOpenWindow, handlePopupNavigationStateChange, handlePopupOpenWindow, handlePopupShouldStartLoadWithRequest, handleShouldStartLoadWithRequest, handleReload, handleContentProcessDidTerminate, handleRenderProcessGone, handleWebViewError, handleWebViewHttpError, isTeelsFlow, isVerificationCovered, mainDocumentScriptReady, mainInjectedScript, managedPopup, markContentReady, markLoadEnd, markLoadStart, markPopupContentReady, maybeTriggerHtmlCapture, openFlow, phase, popupContentReady, popupDocumentScriptReady, popupHostRef, popupInjectedScript, popupRef, preparing, presentation, resolved, ResolvedWebView, secureConnection, secureHost, setBrowserChrome, setPopupChrome, theme, title, useNativePopups, webHostRef, webRef, webViewLoading, webViewProps, webViewUrl, returnToProvider, verificationPresentationPending, verificationPresentationStalled, } = flow;
148
+ const { closeFlow, closeManagedPopup, contentReady, effectiveUserAgent, error, errorCode, errorRetryable, sessionId, onCopySessionId, handleHardwareBack, handleMessage, handleNavigationStateChange, handleOpenWindow, handlePopupNavigationStateChange, handlePopupOpenWindow, handlePopupShouldStartLoadWithRequest, handleShouldStartLoadWithRequest, handleReload, handleContentProcessDidTerminate, handleRenderProcessGone, handleWebViewError, handleWebViewHttpError, isTeelsFlow, isVerificationCovered, mainDocumentScriptReady, mainInjectedScript, managedPopup, markContentReady, markLoadEnd, markLoadStart, markPopupContentReady, maybeTriggerHtmlCapture, openFlow, phase, popupContentReady, popupDocumentScriptReady, popupHostRef, popupInjectedScript, popupRef, preparing, presentation, resolved, ResolvedWebView, secureConnection, secureHost, setBrowserChrome, setPopupChrome, theme, title, useNativePopups, webHostRef, webRef, webViewLoading, webViewProps, webViewUrl, returnToProvider, verificationPresentationPending, verificationPresentationStalled, } = flow;
148
149
  const useSheet = presentation === 'sheet';
149
150
  const [coverOpacity] = useState(() => new Animated.Value(1));
150
151
  const [popupCoverOpacity] = useState(() => new Animated.Value(1));
@@ -401,6 +402,7 @@ function ProviderSheetContent({ flow, insets }) {
401
402
  <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>
402
403
  {isTeelsFlow ? friendlyTeelsError(error, errorCode) : friendlyError(error, errorCode)}
403
404
  </Text>
405
+ {sessionId ? (<SessionIdRow sessionId={sessionId} onCopySessionId={onCopySessionId} mutedColor={theme.mutedColor ?? '#66758a'} accentColor={theme.accentColor ?? '#2752d9'}/>) : null}
404
406
  {isRetryableError(errorCode, errorRetryable) ? (<Pressable style={[styles.primaryAction, { backgroundColor: theme.accentColor }]} onPress={openFlow}>
405
407
  <Text style={styles.primaryActionText}>Try again</Text>
406
408
  </Pressable>) : null}
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderAttestModal.js","sourceRoot":"","sources":["../../../src/components/providerAttest/ProviderAttestModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n AccessibilityInfo,\n ActivityIndicator,\n Animated,\n Easing,\n Keyboard,\n type KeyboardEvent,\n LayoutAnimation,\n Modal,\n Platform,\n Pressable,\n StatusBar,\n StyleSheet,\n Text,\n useWindowDimensions,\n View,\n} from 'react-native';\nimport {\n initialWindowMetrics,\n SafeAreaInsetsContext,\n SafeAreaProvider,\n type EdgeInsets,\n} from 'react-native-safe-area-context';\n\nimport { WEBVIEW_BOOTSTRAP_URL } from './constants';\nimport {\n coverCopy,\n friendlyError,\n friendlyTeelsError,\n isRetryableError,\n preparingCopy,\n processingCopy,\n} from './copy';\nimport { managedPopupKey, managedPopupSource, safeWebViewUri } from './popupRelay';\nimport { defaultMobileBrowserUserAgent, providerLoginUrl } from './providerResolution';\nimport { styles } from './styles';\nimport { insetPadding } from './theme';\nimport { isLoadableDocumentUrl } from './urlUtils';\nimport type { ProviderAttestFlow } from './useProviderAttestFlow';\nimport { invokeWebViewCallback, readBrowserChromeState } from './webviewRuntime';\n\ninterface ProviderAttestModalProps {\n flow: ProviderAttestFlow;\n}\n\nexport function ProviderAttestModal({ flow }: ProviderAttestModalProps) {\n // Android has no native sheet, so drive an in-app animated one; iOS uses pageSheet.\n if (Platform.OS === 'android' && flow.presentation === 'sheet') {\n return <AndroidSheetHost flow={flow} />;\n }\n return <SharedModalHost flow={flow} />;\n}\n\nfunction SharedModalHost({ flow }: ProviderAttestModalProps) {\n const { handleHardwareBack, handleModalRequestClose, modalVisible, presentation, theme } = flow;\n const useSheet = presentation === 'sheet';\n return (\n <Modal\n visible={modalVisible}\n animationType=\"slide\"\n presentationStyle={Platform.OS === 'ios' && useSheet ? 'pageSheet' : 'fullScreen'}\n statusBarTranslucent={!useSheet}\n navigationBarTranslucent\n onRequestClose={Platform.OS === 'ios' ? handleModalRequestClose : handleHardwareBack}>\n <StatusBar barStyle={theme.statusBarStyle} backgroundColor=\"transparent\" translucent />\n <ModalKeyboardInset>\n <SafeAreaProvider initialMetrics={initialWindowMetrics}>\n <SafeAreaInsetsContext.Consumer>\n {(insets) => <ProviderSheetContent flow={flow} insets={insets} />}\n </SafeAreaInsetsContext.Consumer>\n </SafeAreaProvider>\n </ModalKeyboardInset>\n </Modal>\n );\n}\n\n// iOS never resizes the WKWebView layout viewport for the keyboard (Android adjustResize\n// does), and RN's KeyboardAvoidingView measures parent-relative, which under-pads inside\n// the offset pageSheet presentation — so pad by the exact overlap in window coordinates.\nfunction ModalKeyboardInset({ children }: { children: React.ReactNode }) {\n const hostRef = useRef<View | null>(null);\n const appliedInsetRef = useRef(0);\n const [bottomInset, setBottomInset] = useState(0);\n useEffect(() => {\n if (Platform.OS !== 'ios') return undefined;\n const applyKeyboardFrame = (event: KeyboardEvent) => {\n hostRef.current?.measureInWindow((_x, y, _width, height) => {\n const hostBottom = y + height;\n const keyboardTop = event.endCoordinates.screenY;\n const keyboardBottom = keyboardTop + event.endCoordinates.height;\n // The iPad floating/undocked keyboard reports a frame that ends above the modal\n // bottom; only inset when the keyboard actually covers the bottom edge.\n const overlap =\n keyboardBottom >= hostBottom ? Math.max(0, Math.round(hostBottom - keyboardTop)) : 0;\n if (appliedInsetRef.current === overlap) return;\n appliedInsetRef.current = overlap;\n LayoutAnimation.configureNext({\n duration: event.duration > 0 ? event.duration : 250,\n update: { type: LayoutAnimation.Types.keyboard },\n });\n setBottomInset(overlap);\n });\n };\n const subscription = Keyboard.addListener('keyboardWillChangeFrame', applyKeyboardFrame);\n return () => subscription.remove();\n }, []);\n return (\n <View\n collapsable={false}\n ref={hostRef}\n style={[\n styles.modalKeyboardAvoiding,\n bottomInset > 0 ? { paddingBottom: bottomInset } : null,\n ]}>\n {children}\n </View>\n );\n}\n\nfunction AndroidSheetHost({ flow }: ProviderAttestModalProps) {\n const { closeFlow, handleHardwareBack, modalVisible, theme } = flow;\n const { height } = useWindowDimensions();\n const [translateY] = useState(() => new Animated.Value(height));\n const [backdropOpacity] = useState(() => new Animated.Value(0));\n // Keeps the Modal rendered through the slide-out animation.\n const [mounted, setMounted] = useState(false);\n // Height via ref so a resize while open doesn't re-run the entrance animation.\n const heightRef = useRef(height);\n useEffect(() => {\n heightRef.current = height;\n }, [height]);\n\n useEffect(() => {\n if (modalVisible) {\n // Mount for the whole open→close lifecycle so an early dismiss still slides out.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setMounted(true);\n translateY.setValue(heightRef.current);\n Animated.parallel([\n Animated.spring(translateY, {\n toValue: 0,\n useNativeDriver: true,\n damping: 24,\n stiffness: 260,\n mass: 0.9,\n }),\n Animated.timing(backdropOpacity, {\n toValue: 1,\n duration: 180,\n useNativeDriver: true,\n }),\n ]).start();\n return;\n }\n Animated.parallel([\n Animated.timing(translateY, {\n toValue: heightRef.current,\n duration: 200,\n useNativeDriver: true,\n }),\n Animated.timing(backdropOpacity, { toValue: 0, duration: 160, useNativeDriver: true }),\n ]).start(({ finished }) => {\n if (finished) setMounted(false);\n });\n }, [modalVisible, translateY, backdropOpacity]);\n\n if (!modalVisible && !mounted) return null;\n\n return (\n <Modal\n visible\n transparent\n animationType=\"none\"\n statusBarTranslucent\n navigationBarTranslucent\n onRequestClose={handleHardwareBack}>\n <StatusBar barStyle={theme.statusBarStyle} backgroundColor=\"transparent\" translucent />\n <View style={styles.androidRoot}>\n <Animated.View\n style={[\n styles.backdrop,\n { opacity: backdropOpacity, backgroundColor: theme.backdropColor },\n ]}>\n <Pressable\n style={StyleSheet.absoluteFill}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Dismiss\"\n onPress={() => closeFlow(true)}\n />\n </Animated.View>\n <Animated.View\n style={[\n styles.androidSheet,\n {\n transform: [{ translateY }],\n backgroundColor: theme.surfaceColor,\n borderTopLeftRadius: theme.sheetCornerRadius,\n borderTopRightRadius: theme.sheetCornerRadius,\n },\n ]}>\n <SafeAreaProvider initialMetrics={initialWindowMetrics}>\n <SafeAreaInsetsContext.Consumer>\n {(insets) => <ProviderSheetContent flow={flow} insets={insets} />}\n </SafeAreaInsetsContext.Consumer>\n </SafeAreaProvider>\n </Animated.View>\n </View>\n </Modal>\n );\n}\n\ninterface ProviderSheetContentProps {\n flow: ProviderAttestFlow;\n insets: EdgeInsets | null;\n}\n\nfunction ProviderSheetContent({ flow, insets }: ProviderSheetContentProps) {\n const {\n closeFlow,\n closeManagedPopup,\n contentReady,\n effectiveUserAgent,\n error,\n errorCode,\n errorRetryable,\n handleHardwareBack,\n handleMessage,\n handleNavigationStateChange,\n handleOpenWindow,\n handlePopupNavigationStateChange,\n handlePopupOpenWindow,\n handlePopupShouldStartLoadWithRequest,\n handleShouldStartLoadWithRequest,\n handleReload,\n handleContentProcessDidTerminate,\n handleRenderProcessGone,\n handleWebViewError,\n handleWebViewHttpError,\n isTeelsFlow,\n isVerificationCovered,\n mainDocumentScriptReady,\n mainInjectedScript,\n managedPopup,\n markContentReady,\n markLoadEnd,\n markLoadStart,\n markPopupContentReady,\n maybeTriggerHtmlCapture,\n openFlow,\n phase,\n popupContentReady,\n popupDocumentScriptReady,\n popupHostRef,\n popupInjectedScript,\n popupRef,\n preparing,\n presentation,\n resolved,\n ResolvedWebView,\n secureConnection,\n secureHost,\n setBrowserChrome,\n setPopupChrome,\n theme,\n title,\n useNativePopups,\n webHostRef,\n webRef,\n webViewLoading,\n webViewProps,\n webViewUrl,\n returnToProvider,\n verificationPresentationPending,\n verificationPresentationStalled,\n } = flow;\n\n const useSheet = presentation === 'sheet';\n const [coverOpacity] = useState(() => new Animated.Value(1));\n const [popupCoverOpacity] = useState(() => new Animated.Value(1));\n // Browser-style loading line: trickle while loading, snap to 100% and fade on done.\n const [barProgress] = useState(() => new Animated.Value(0));\n const [barOpacity] = useState(() => new Animated.Value(0));\n\n useEffect(() => {\n Animated.timing(coverOpacity, {\n toValue: contentReady ? 0 : 1,\n duration: contentReady ? 220 : 0,\n useNativeDriver: true,\n }).start();\n }, [contentReady, coverOpacity]);\n\n useEffect(() => {\n Animated.timing(popupCoverOpacity, {\n toValue: popupContentReady ? 0 : 1,\n duration: popupContentReady ? 220 : 0,\n useNativeDriver: true,\n }).start();\n }, [popupContentReady, popupCoverOpacity]);\n\n useEffect(() => {\n if (Platform.OS !== 'ios' || !isVerificationCovered || flow.isProcessing) return;\n const { title } = coverCopy({\n pending: verificationPresentationPending,\n stalled: verificationPresentationStalled,\n });\n AccessibilityInfo.announceForAccessibility(`${title.replace(/\\.\\.\\.$/, '')}.`);\n }, [\n flow.isProcessing,\n isVerificationCovered,\n verificationPresentationPending,\n verificationPresentationStalled,\n ]);\n\n useEffect(() => {\n if (webViewLoading) {\n barProgress.setValue(0.03);\n Animated.parallel([\n Animated.timing(barOpacity, { toValue: 1, duration: 120, useNativeDriver: false }),\n Animated.timing(barProgress, {\n toValue: 0.9,\n duration: 9000,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: false,\n }),\n ]).start();\n return;\n }\n Animated.sequence([\n Animated.timing(barProgress, {\n toValue: 1,\n duration: 160,\n easing: Easing.out(Easing.quad),\n useNativeDriver: false,\n }),\n Animated.timing(barOpacity, { toValue: 0, duration: 220, useNativeDriver: false }),\n ]).start(({ finished }) => {\n if (finished) barProgress.setValue(0);\n });\n }, [webViewLoading, barProgress, barOpacity]);\n\n const preparingName = title === 'Provider Attestation' ? undefined : title;\n const coverStatusCopy = coverCopy({\n pending: verificationPresentationPending,\n stalled: verificationPresentationStalled,\n });\n const providerContentConcealed = isVerificationCovered || !!error || preparing;\n const showRefresh = !!resolved && !providerContentConcealed;\n\n return (\n <View\n style={[\n styles.modalRoot,\n { backgroundColor: theme.surfaceColor },\n useSheet && {\n borderTopLeftRadius: theme.sheetCornerRadius,\n borderTopRightRadius: theme.sheetCornerRadius,\n overflow: 'hidden',\n },\n insetPadding(insets, presentation),\n ]}>\n {useSheet && theme.showGrabber ? (\n <View style={styles.grabberWrap}>\n <View style={styles.grabber} />\n </View>\n ) : null}\n <View style={[styles.header, { backgroundColor: theme.surfaceColor }]}>\n {showRefresh ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Reload page\"\n hitSlop={12}\n style={styles.headerSide}\n onPress={handleReload}>\n <Text style={[styles.headerRefreshGlyph, { color: theme.onSurfaceColor }]}>⟲</Text>\n </Pressable>\n ) : (\n <View style={styles.headerSide} />\n )}\n <View style={styles.headerCenter}>\n <Text style={[styles.headerTitle, { color: theme.onSurfaceColor }]} numberOfLines={1}>\n {title}\n </Text>\n {secureHost ? (\n <View style={styles.domainPill}>\n <Text style={[styles.domainLockGlyph, { color: theme.mutedColor }]}>\n {secureConnection ? '🔒' : '⚠'}\n </Text>\n <Text style={[styles.domainText, { color: theme.mutedColor }]} numberOfLines={1}>\n {secureHost}\n </Text>\n </View>\n ) : null}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close browser\"\n hitSlop={12}\n style={styles.headerSide}\n onPress={handleHardwareBack}>\n <View style={styles.headerCloseButton}>\n <Text style={[styles.headerCloseGlyph, { color: theme.onSurfaceColor }]}>✕</Text>\n </View>\n </Pressable>\n </View>\n <View style={styles.progressTrack}>\n <Animated.View\n style={[\n styles.progressFill,\n {\n backgroundColor: theme.accentColor,\n opacity: barOpacity,\n width: barProgress.interpolate({\n inputRange: [0, 1],\n outputRange: ['0%', '100%'],\n }),\n },\n ]}\n />\n </View>\n <View ref={webHostRef} style={[styles.webViewHost, { backgroundColor: theme.surfaceColor }]}>\n {ResolvedWebView && resolved ? (\n <ResolvedWebView\n {...(webViewProps ?? {})}\n {...(isTeelsFlow\n ? {\n onContentProcessDidTerminate: handleContentProcessDidTerminate,\n onRenderProcessGone: handleRenderProcessGone,\n onError: handleWebViewError,\n onHttpError: handleWebViewHttpError,\n }\n : {})}\n geolocationEnabled={resolved.template.requiresLocation === true}\n ref={webRef}\n source={{\n uri: safeWebViewUri(\n mainDocumentScriptReady\n ? (webViewUrl ?? providerLoginUrl(resolved.template))\n : WEBVIEW_BOOTSTRAP_URL,\n providerLoginUrl(resolved.template),\n Platform.OS === 'android'\n ),\n }}\n style={[styles.webView, webViewProps?.style]}\n accessibilityElementsHidden={providerContentConcealed}\n importantForAccessibility={providerContentConcealed ? 'no-hide-descendants' : 'auto'}\n javaScriptEnabled\n javaScriptCanOpenWindowsAutomatically\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n userAgent={effectiveUserAgent ?? defaultMobileBrowserUserAgent()}\n incognito={false}\n cacheEnabled\n setSupportMultipleWindows={useNativePopups}\n injectedJavaScriptBeforeContentLoaded={mainInjectedScript}\n injectedJavaScript={mainInjectedScript}\n injectedJavaScriptBeforeContentLoadedForMainFrameOnly={false}\n injectedJavaScriptForMainFrameOnly={false}\n onMessage={handleMessage}\n onOpenWindow={handleOpenWindow}\n onShouldStartLoadWithRequest={handleShouldStartLoadWithRequest}\n onNavigationStateChange={handleNavigationStateChange}\n onLoadStart={(event: unknown) => {\n const nextChrome = readBrowserChromeState(event);\n invokeMainWebViewCallback(webViewProps?.onLoadStart, event, isTeelsFlow, 'before');\n if (!mainDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) return;\n markLoadStart(nextChrome.url);\n setBrowserChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: true,\n }));\n invokeMainWebViewCallback(webViewProps?.onLoadStart, event, isTeelsFlow, 'after');\n }}\n onLoadEnd={(event: unknown) => {\n const nextChrome = readBrowserChromeState(event);\n invokeMainWebViewCallback(webViewProps?.onLoadEnd, event, isTeelsFlow, 'before');\n if (!mainDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) return;\n markContentReady();\n markLoadEnd(nextChrome.url);\n setBrowserChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: false,\n }));\n webRef.current?.injectJavaScript?.(mainInjectedScript);\n if (!isTeelsFlow) maybeTriggerHtmlCapture(nextChrome.url);\n invokeMainWebViewCallback(webViewProps?.onLoadEnd, event, isTeelsFlow, 'after');\n }}\n originWhitelist={['http://*', 'https://*', 'about:*']}\n />\n ) : (\n <View style={styles.webViewFallback}>\n <Text style={styles.errorText}>react-native-webview is not available.</Text>\n </View>\n )}\n {ResolvedWebView && resolved ? (\n <Animated.View\n pointerEvents={contentReady ? 'none' : 'auto'}\n style={[\n styles.fadeCover,\n { backgroundColor: theme.surfaceColor, opacity: coverOpacity },\n ]}>\n {!contentReady ? <ActivityIndicator color={theme.accentColor} size=\"large\" /> : null}\n </Animated.View>\n ) : null}\n {ResolvedWebView && resolved && managedPopup && isLoadableDocumentUrl(managedPopup.url) ? (\n <View\n ref={popupHostRef}\n accessibilityElementsHidden={providerContentConcealed}\n importantForAccessibility={providerContentConcealed ? 'no-hide-descendants' : 'auto'}\n style={[styles.popupOverlay, { backgroundColor: theme.surfaceColor }]}>\n <View style={[styles.popupHeader, { backgroundColor: theme.surfaceColor }]}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Back\"\n hitSlop={12}\n style={styles.headerSide}\n onPress={() => closeManagedPopup()}>\n <Text style={[styles.headerBackGlyph, { color: theme.onSurfaceColor }]}>{'<'}</Text>\n </Pressable>\n <Text style={[styles.headerTitle, { color: theme.onSurfaceColor }]} numberOfLines={1}>\n Sign in\n </Text>\n <View style={styles.headerSide} />\n </View>\n <View style={styles.webViewHost}>\n <ResolvedWebView\n {...(webViewProps ?? {})}\n geolocationEnabled={resolved.template.requiresLocation === true}\n ref={popupRef}\n key={managedPopupKey(managedPopup)}\n source={\n popupDocumentScriptReady\n ? managedPopupSource(managedPopup)\n : { uri: WEBVIEW_BOOTSTRAP_URL }\n }\n style={[styles.webView, webViewProps?.style]}\n javaScriptEnabled\n javaScriptCanOpenWindowsAutomatically\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n userAgent={effectiveUserAgent ?? defaultMobileBrowserUserAgent()}\n incognito={false}\n cacheEnabled\n setSupportMultipleWindows={false}\n injectedJavaScriptBeforeContentLoaded={popupInjectedScript}\n injectedJavaScript={popupInjectedScript}\n injectedJavaScriptBeforeContentLoadedForMainFrameOnly={false}\n injectedJavaScriptForMainFrameOnly={false}\n onMessage={handleMessage}\n onOpenWindow={handlePopupOpenWindow}\n onShouldStartLoadWithRequest={handlePopupShouldStartLoadWithRequest}\n onNavigationStateChange={handlePopupNavigationStateChange}\n onLoadStart={(event: unknown) => {\n const nextChrome = readBrowserChromeState(event);\n invokeWebViewCallback(webViewProps?.onLoadStart, event);\n if (!popupDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) {\n return;\n }\n setPopupChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: true,\n }));\n }}\n onLoadEnd={(event: unknown) => {\n const nextChrome = readBrowserChromeState(event);\n invokeWebViewCallback(webViewProps?.onLoadEnd, event);\n if (!popupDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) {\n return;\n }\n markPopupContentReady();\n setPopupChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: false,\n }));\n popupRef.current?.injectJavaScript?.(popupInjectedScript);\n }}\n originWhitelist={['http://*', 'https://*', 'about:*']}\n />\n <Animated.View\n pointerEvents={popupContentReady ? 'none' : 'auto'}\n style={[\n styles.fadeCover,\n { backgroundColor: theme.surfaceColor, opacity: popupCoverOpacity },\n ]}>\n {!popupContentReady ? (\n <ActivityIndicator color={theme.accentColor} size=\"large\" />\n ) : null}\n </Animated.View>\n </View>\n </View>\n ) : null}\n {providerContentConcealed ? (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={[\n styles.privacyCoverBase,\n {\n backgroundColor: theme.statusBarStyle === 'light-content' ? '#000000' : '#ffffff',\n },\n ]}\n />\n ) : null}\n {isVerificationCovered && !flow.isProcessing ? (\n <View\n accessible={!verificationPresentationStalled}\n accessibilityLabel={`${coverStatusCopy.title.replace(/\\.\\.\\.$/, '')}.`}\n accessibilityLiveRegion=\"polite\"\n accessibilityViewIsModal\n style={[styles.overlay, { backgroundColor: theme.surfaceColor }]}>\n {verificationPresentationStalled ? null : (\n <ActivityIndicator color={theme.accentColor} size=\"large\" />\n )}\n <Text style={[styles.overlayTitle, { color: theme.onSurfaceColor }]}>\n {coverStatusCopy.title}\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n {coverStatusCopy.subtitle}\n </Text>\n {verificationPresentationStalled ? (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Return to provider\"\n style={[styles.primaryAction, { backgroundColor: theme.accentColor }]}\n onPress={returnToProvider}>\n <Text style={styles.primaryActionText}>Return to provider</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Cancel verification\"\n style={styles.secondaryAction}\n onPress={() => closeFlow(true)}>\n <Text style={[styles.secondaryActionText, { color: theme.mutedColor }]}>\n Cancel\n </Text>\n </Pressable>\n </>\n ) : null}\n </View>\n ) : null}\n {flow.isProcessing ? (\n <View style={[styles.overlay, { backgroundColor: theme.surfaceColor }]}>\n <ActivityIndicator color={theme.accentColor} size=\"large\" />\n <Text style={[styles.overlayTitle, { color: theme.onSurfaceColor }]}>\n {processingCopy(phase)}\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n Keep this screen open - it only takes a moment.\n </Text>\n </View>\n ) : null}\n {error ? (\n <View style={[styles.overlay, { backgroundColor: theme.surfaceColor }]}>\n <View style={styles.errorIconWrap}>\n <Text style={styles.errorIconGlyph}>!</Text>\n </View>\n <Text style={[styles.overlayTitle, { color: theme.onSurfaceColor }]}>\n {isTeelsFlow ? 'Could not complete attestation' : 'Could not verify your account'}\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n {isTeelsFlow ? friendlyTeelsError(error, errorCode) : friendlyError(error, errorCode)}\n </Text>\n {isRetryableError(errorCode, errorRetryable) ? (\n <Pressable\n style={[styles.primaryAction, { backgroundColor: theme.accentColor }]}\n onPress={openFlow}>\n <Text style={styles.primaryActionText}>Try again</Text>\n </Pressable>\n ) : null}\n <Pressable style={styles.secondaryAction} onPress={() => closeFlow(true)}>\n <Text style={[styles.secondaryActionText, { color: theme.mutedColor }]}>Close</Text>\n </Pressable>\n </View>\n ) : null}\n {preparing ? (\n <View style={[styles.overlay, { backgroundColor: theme.surfaceColor }]}>\n <ActivityIndicator color={theme.accentColor} size=\"large\" />\n <Text style={[styles.overlayTitle, { color: theme.onSurfaceColor }]}>\n {preparingCopy(preparingName)}\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n Setting up a secure connection.\n </Text>\n </View>\n ) : null}\n {Platform.OS === 'ios' ? (\n <View\n style={styles.edgeSwipeZone}\n accessibilityElementsHidden\n {...flow.edgeSwipeHandlers}\n />\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction invokeMainWebViewCallback(\n callback: unknown,\n event: unknown,\n isTeelsFlow: boolean | undefined,\n timing: 'before' | 'after'\n): void {\n if ((!isTeelsFlow && timing !== 'before') || (isTeelsFlow && timing !== 'after')) return;\n if (!isTeelsFlow) {\n invokeWebViewCallback(callback, event);\n return;\n }\n try {\n invokeWebViewCallback(callback, event);\n } catch {\n // Observational host callbacks cannot interrupt or settle the TeeLS flow.\n }\n}\n"]}
1
+ {"version":3,"file":"ProviderAttestModal.js","sourceRoot":"","sources":["../../../src/components/providerAttest/ProviderAttestModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n AccessibilityInfo,\n ActivityIndicator,\n Animated,\n Easing,\n Keyboard,\n type KeyboardEvent,\n LayoutAnimation,\n Modal,\n Platform,\n Pressable,\n StatusBar,\n StyleSheet,\n Text,\n useWindowDimensions,\n View,\n} from 'react-native';\nimport {\n initialWindowMetrics,\n SafeAreaInsetsContext,\n SafeAreaProvider,\n type EdgeInsets,\n} from 'react-native-safe-area-context';\n\nimport { SessionIdRow } from './SessionIdRow';\nimport { WEBVIEW_BOOTSTRAP_URL } from './constants';\nimport {\n coverCopy,\n friendlyError,\n friendlyTeelsError,\n isRetryableError,\n preparingCopy,\n processingCopy,\n} from './copy';\nimport { managedPopupKey, managedPopupSource, safeWebViewUri } from './popupRelay';\nimport { defaultMobileBrowserUserAgent, providerLoginUrl } from './providerResolution';\nimport { styles } from './styles';\nimport { insetPadding } from './theme';\nimport { isLoadableDocumentUrl } from './urlUtils';\nimport type { ProviderAttestFlow } from './useProviderAttestFlow';\nimport { invokeWebViewCallback, readBrowserChromeState } from './webviewRuntime';\n\ninterface ProviderAttestModalProps {\n flow: ProviderAttestFlow;\n}\n\nexport function ProviderAttestModal({ flow }: ProviderAttestModalProps) {\n // Android has no native sheet, so drive an in-app animated one; iOS uses pageSheet.\n if (Platform.OS === 'android' && flow.presentation === 'sheet') {\n return <AndroidSheetHost flow={flow} />;\n }\n return <SharedModalHost flow={flow} />;\n}\n\nfunction SharedModalHost({ flow }: ProviderAttestModalProps) {\n const { handleHardwareBack, handleModalRequestClose, modalVisible, presentation, theme } = flow;\n const useSheet = presentation === 'sheet';\n return (\n <Modal\n visible={modalVisible}\n animationType=\"slide\"\n presentationStyle={Platform.OS === 'ios' && useSheet ? 'pageSheet' : 'fullScreen'}\n statusBarTranslucent={!useSheet}\n navigationBarTranslucent\n onRequestClose={Platform.OS === 'ios' ? handleModalRequestClose : handleHardwareBack}>\n <StatusBar barStyle={theme.statusBarStyle} backgroundColor=\"transparent\" translucent />\n <ModalKeyboardInset>\n <SafeAreaProvider initialMetrics={initialWindowMetrics}>\n <SafeAreaInsetsContext.Consumer>\n {(insets) => <ProviderSheetContent flow={flow} insets={insets} />}\n </SafeAreaInsetsContext.Consumer>\n </SafeAreaProvider>\n </ModalKeyboardInset>\n </Modal>\n );\n}\n\n// iOS never resizes the WKWebView layout viewport for the keyboard (Android adjustResize\n// does), and RN's KeyboardAvoidingView measures parent-relative, which under-pads inside\n// the offset pageSheet presentation — so pad by the exact overlap in window coordinates.\nfunction ModalKeyboardInset({ children }: { children: React.ReactNode }) {\n const hostRef = useRef<View | null>(null);\n const appliedInsetRef = useRef(0);\n const [bottomInset, setBottomInset] = useState(0);\n useEffect(() => {\n if (Platform.OS !== 'ios') return undefined;\n const applyKeyboardFrame = (event: KeyboardEvent) => {\n hostRef.current?.measureInWindow((_x, y, _width, height) => {\n const hostBottom = y + height;\n const keyboardTop = event.endCoordinates.screenY;\n const keyboardBottom = keyboardTop + event.endCoordinates.height;\n // The iPad floating/undocked keyboard reports a frame that ends above the modal\n // bottom; only inset when the keyboard actually covers the bottom edge.\n const overlap =\n keyboardBottom >= hostBottom ? Math.max(0, Math.round(hostBottom - keyboardTop)) : 0;\n if (appliedInsetRef.current === overlap) return;\n appliedInsetRef.current = overlap;\n LayoutAnimation.configureNext({\n duration: event.duration > 0 ? event.duration : 250,\n update: { type: LayoutAnimation.Types.keyboard },\n });\n setBottomInset(overlap);\n });\n };\n const subscription = Keyboard.addListener('keyboardWillChangeFrame', applyKeyboardFrame);\n return () => subscription.remove();\n }, []);\n return (\n <View\n collapsable={false}\n ref={hostRef}\n style={[\n styles.modalKeyboardAvoiding,\n bottomInset > 0 ? { paddingBottom: bottomInset } : null,\n ]}>\n {children}\n </View>\n );\n}\n\nfunction AndroidSheetHost({ flow }: ProviderAttestModalProps) {\n const { closeFlow, handleHardwareBack, modalVisible, theme } = flow;\n const { height } = useWindowDimensions();\n const [translateY] = useState(() => new Animated.Value(height));\n const [backdropOpacity] = useState(() => new Animated.Value(0));\n // Keeps the Modal rendered through the slide-out animation.\n const [mounted, setMounted] = useState(false);\n // Height via ref so a resize while open doesn't re-run the entrance animation.\n const heightRef = useRef(height);\n useEffect(() => {\n heightRef.current = height;\n }, [height]);\n\n useEffect(() => {\n if (modalVisible) {\n // Mount for the whole open→close lifecycle so an early dismiss still slides out.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setMounted(true);\n translateY.setValue(heightRef.current);\n Animated.parallel([\n Animated.spring(translateY, {\n toValue: 0,\n useNativeDriver: true,\n damping: 24,\n stiffness: 260,\n mass: 0.9,\n }),\n Animated.timing(backdropOpacity, {\n toValue: 1,\n duration: 180,\n useNativeDriver: true,\n }),\n ]).start();\n return;\n }\n Animated.parallel([\n Animated.timing(translateY, {\n toValue: heightRef.current,\n duration: 200,\n useNativeDriver: true,\n }),\n Animated.timing(backdropOpacity, { toValue: 0, duration: 160, useNativeDriver: true }),\n ]).start(({ finished }) => {\n if (finished) setMounted(false);\n });\n }, [modalVisible, translateY, backdropOpacity]);\n\n if (!modalVisible && !mounted) return null;\n\n return (\n <Modal\n visible\n transparent\n animationType=\"none\"\n statusBarTranslucent\n navigationBarTranslucent\n onRequestClose={handleHardwareBack}>\n <StatusBar barStyle={theme.statusBarStyle} backgroundColor=\"transparent\" translucent />\n <View style={styles.androidRoot}>\n <Animated.View\n style={[\n styles.backdrop,\n { opacity: backdropOpacity, backgroundColor: theme.backdropColor },\n ]}>\n <Pressable\n style={StyleSheet.absoluteFill}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Dismiss\"\n onPress={() => closeFlow(true)}\n />\n </Animated.View>\n <Animated.View\n style={[\n styles.androidSheet,\n {\n transform: [{ translateY }],\n backgroundColor: theme.surfaceColor,\n borderTopLeftRadius: theme.sheetCornerRadius,\n borderTopRightRadius: theme.sheetCornerRadius,\n },\n ]}>\n <SafeAreaProvider initialMetrics={initialWindowMetrics}>\n <SafeAreaInsetsContext.Consumer>\n {(insets) => <ProviderSheetContent flow={flow} insets={insets} />}\n </SafeAreaInsetsContext.Consumer>\n </SafeAreaProvider>\n </Animated.View>\n </View>\n </Modal>\n );\n}\n\ninterface ProviderSheetContentProps {\n flow: ProviderAttestFlow;\n insets: EdgeInsets | null;\n}\n\nfunction ProviderSheetContent({ flow, insets }: ProviderSheetContentProps) {\n const {\n closeFlow,\n closeManagedPopup,\n contentReady,\n effectiveUserAgent,\n error,\n errorCode,\n errorRetryable,\n sessionId,\n onCopySessionId,\n handleHardwareBack,\n handleMessage,\n handleNavigationStateChange,\n handleOpenWindow,\n handlePopupNavigationStateChange,\n handlePopupOpenWindow,\n handlePopupShouldStartLoadWithRequest,\n handleShouldStartLoadWithRequest,\n handleReload,\n handleContentProcessDidTerminate,\n handleRenderProcessGone,\n handleWebViewError,\n handleWebViewHttpError,\n isTeelsFlow,\n isVerificationCovered,\n mainDocumentScriptReady,\n mainInjectedScript,\n managedPopup,\n markContentReady,\n markLoadEnd,\n markLoadStart,\n markPopupContentReady,\n maybeTriggerHtmlCapture,\n openFlow,\n phase,\n popupContentReady,\n popupDocumentScriptReady,\n popupHostRef,\n popupInjectedScript,\n popupRef,\n preparing,\n presentation,\n resolved,\n ResolvedWebView,\n secureConnection,\n secureHost,\n setBrowserChrome,\n setPopupChrome,\n theme,\n title,\n useNativePopups,\n webHostRef,\n webRef,\n webViewLoading,\n webViewProps,\n webViewUrl,\n returnToProvider,\n verificationPresentationPending,\n verificationPresentationStalled,\n } = flow;\n\n const useSheet = presentation === 'sheet';\n const [coverOpacity] = useState(() => new Animated.Value(1));\n const [popupCoverOpacity] = useState(() => new Animated.Value(1));\n // Browser-style loading line: trickle while loading, snap to 100% and fade on done.\n const [barProgress] = useState(() => new Animated.Value(0));\n const [barOpacity] = useState(() => new Animated.Value(0));\n\n useEffect(() => {\n Animated.timing(coverOpacity, {\n toValue: contentReady ? 0 : 1,\n duration: contentReady ? 220 : 0,\n useNativeDriver: true,\n }).start();\n }, [contentReady, coverOpacity]);\n\n useEffect(() => {\n Animated.timing(popupCoverOpacity, {\n toValue: popupContentReady ? 0 : 1,\n duration: popupContentReady ? 220 : 0,\n useNativeDriver: true,\n }).start();\n }, [popupContentReady, popupCoverOpacity]);\n\n useEffect(() => {\n if (Platform.OS !== 'ios' || !isVerificationCovered || flow.isProcessing) return;\n const { title } = coverCopy({\n pending: verificationPresentationPending,\n stalled: verificationPresentationStalled,\n });\n AccessibilityInfo.announceForAccessibility(`${title.replace(/\\.\\.\\.$/, '')}.`);\n }, [\n flow.isProcessing,\n isVerificationCovered,\n verificationPresentationPending,\n verificationPresentationStalled,\n ]);\n\n useEffect(() => {\n if (webViewLoading) {\n barProgress.setValue(0.03);\n Animated.parallel([\n Animated.timing(barOpacity, { toValue: 1, duration: 120, useNativeDriver: false }),\n Animated.timing(barProgress, {\n toValue: 0.9,\n duration: 9000,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: false,\n }),\n ]).start();\n return;\n }\n Animated.sequence([\n Animated.timing(barProgress, {\n toValue: 1,\n duration: 160,\n easing: Easing.out(Easing.quad),\n useNativeDriver: false,\n }),\n Animated.timing(barOpacity, { toValue: 0, duration: 220, useNativeDriver: false }),\n ]).start(({ finished }) => {\n if (finished) barProgress.setValue(0);\n });\n }, [webViewLoading, barProgress, barOpacity]);\n\n const preparingName = title === 'Provider Attestation' ? undefined : title;\n const coverStatusCopy = coverCopy({\n pending: verificationPresentationPending,\n stalled: verificationPresentationStalled,\n });\n const providerContentConcealed = isVerificationCovered || !!error || preparing;\n const showRefresh = !!resolved && !providerContentConcealed;\n\n return (\n <View\n style={[\n styles.modalRoot,\n { backgroundColor: theme.surfaceColor },\n useSheet && {\n borderTopLeftRadius: theme.sheetCornerRadius,\n borderTopRightRadius: theme.sheetCornerRadius,\n overflow: 'hidden',\n },\n insetPadding(insets, presentation),\n ]}>\n {useSheet && theme.showGrabber ? (\n <View style={styles.grabberWrap}>\n <View style={styles.grabber} />\n </View>\n ) : null}\n <View style={[styles.header, { backgroundColor: theme.surfaceColor }]}>\n {showRefresh ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Reload page\"\n hitSlop={12}\n style={styles.headerSide}\n onPress={handleReload}>\n <Text style={[styles.headerRefreshGlyph, { color: theme.onSurfaceColor }]}>⟲</Text>\n </Pressable>\n ) : (\n <View style={styles.headerSide} />\n )}\n <View style={styles.headerCenter}>\n <Text style={[styles.headerTitle, { color: theme.onSurfaceColor }]} numberOfLines={1}>\n {title}\n </Text>\n {secureHost ? (\n <View style={styles.domainPill}>\n <Text style={[styles.domainLockGlyph, { color: theme.mutedColor }]}>\n {secureConnection ? '🔒' : '⚠'}\n </Text>\n <Text style={[styles.domainText, { color: theme.mutedColor }]} numberOfLines={1}>\n {secureHost}\n </Text>\n </View>\n ) : null}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close browser\"\n hitSlop={12}\n style={styles.headerSide}\n onPress={handleHardwareBack}>\n <View style={styles.headerCloseButton}>\n <Text style={[styles.headerCloseGlyph, { color: theme.onSurfaceColor }]}>✕</Text>\n </View>\n </Pressable>\n </View>\n <View style={styles.progressTrack}>\n <Animated.View\n style={[\n styles.progressFill,\n {\n backgroundColor: theme.accentColor,\n opacity: barOpacity,\n width: barProgress.interpolate({\n inputRange: [0, 1],\n outputRange: ['0%', '100%'],\n }),\n },\n ]}\n />\n </View>\n <View ref={webHostRef} style={[styles.webViewHost, { backgroundColor: theme.surfaceColor }]}>\n {ResolvedWebView && resolved ? (\n <ResolvedWebView\n {...(webViewProps ?? {})}\n {...(isTeelsFlow\n ? {\n onContentProcessDidTerminate: handleContentProcessDidTerminate,\n onRenderProcessGone: handleRenderProcessGone,\n onError: handleWebViewError,\n onHttpError: handleWebViewHttpError,\n }\n : {})}\n geolocationEnabled={resolved.template.requiresLocation === true}\n ref={webRef}\n source={{\n uri: safeWebViewUri(\n mainDocumentScriptReady\n ? (webViewUrl ?? providerLoginUrl(resolved.template))\n : WEBVIEW_BOOTSTRAP_URL,\n providerLoginUrl(resolved.template),\n Platform.OS === 'android'\n ),\n }}\n style={[styles.webView, webViewProps?.style]}\n accessibilityElementsHidden={providerContentConcealed}\n importantForAccessibility={providerContentConcealed ? 'no-hide-descendants' : 'auto'}\n javaScriptEnabled\n javaScriptCanOpenWindowsAutomatically\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n userAgent={effectiveUserAgent ?? defaultMobileBrowserUserAgent()}\n incognito={false}\n cacheEnabled\n setSupportMultipleWindows={useNativePopups}\n injectedJavaScriptBeforeContentLoaded={mainInjectedScript}\n injectedJavaScript={mainInjectedScript}\n injectedJavaScriptBeforeContentLoadedForMainFrameOnly={false}\n injectedJavaScriptForMainFrameOnly={false}\n onMessage={handleMessage}\n onOpenWindow={handleOpenWindow}\n onShouldStartLoadWithRequest={handleShouldStartLoadWithRequest}\n onNavigationStateChange={handleNavigationStateChange}\n onLoadStart={(event: unknown) => {\n const nextChrome = readBrowserChromeState(event);\n invokeMainWebViewCallback(webViewProps?.onLoadStart, event, isTeelsFlow, 'before');\n if (!mainDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) return;\n markLoadStart(nextChrome.url);\n setBrowserChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: true,\n }));\n invokeMainWebViewCallback(webViewProps?.onLoadStart, event, isTeelsFlow, 'after');\n }}\n onLoadEnd={(event: unknown) => {\n const nextChrome = readBrowserChromeState(event);\n invokeMainWebViewCallback(webViewProps?.onLoadEnd, event, isTeelsFlow, 'before');\n if (!mainDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) return;\n markContentReady();\n markLoadEnd(nextChrome.url);\n setBrowserChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: false,\n }));\n webRef.current?.injectJavaScript?.(mainInjectedScript);\n if (!isTeelsFlow) maybeTriggerHtmlCapture(nextChrome.url);\n invokeMainWebViewCallback(webViewProps?.onLoadEnd, event, isTeelsFlow, 'after');\n }}\n originWhitelist={['http://*', 'https://*', 'about:*']}\n />\n ) : (\n <View style={styles.webViewFallback}>\n <Text style={styles.errorText}>react-native-webview is not available.</Text>\n </View>\n )}\n {ResolvedWebView && resolved ? (\n <Animated.View\n pointerEvents={contentReady ? 'none' : 'auto'}\n style={[\n styles.fadeCover,\n { backgroundColor: theme.surfaceColor, opacity: coverOpacity },\n ]}>\n {!contentReady ? <ActivityIndicator color={theme.accentColor} size=\"large\" /> : null}\n </Animated.View>\n ) : null}\n {ResolvedWebView && resolved && managedPopup && isLoadableDocumentUrl(managedPopup.url) ? (\n <View\n ref={popupHostRef}\n accessibilityElementsHidden={providerContentConcealed}\n importantForAccessibility={providerContentConcealed ? 'no-hide-descendants' : 'auto'}\n style={[styles.popupOverlay, { backgroundColor: theme.surfaceColor }]}>\n <View style={[styles.popupHeader, { backgroundColor: theme.surfaceColor }]}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Back\"\n hitSlop={12}\n style={styles.headerSide}\n onPress={() => closeManagedPopup()}>\n <Text style={[styles.headerBackGlyph, { color: theme.onSurfaceColor }]}>{'<'}</Text>\n </Pressable>\n <Text style={[styles.headerTitle, { color: theme.onSurfaceColor }]} numberOfLines={1}>\n Sign in\n </Text>\n <View style={styles.headerSide} />\n </View>\n <View style={styles.webViewHost}>\n <ResolvedWebView\n {...(webViewProps ?? {})}\n geolocationEnabled={resolved.template.requiresLocation === true}\n ref={popupRef}\n key={managedPopupKey(managedPopup)}\n source={\n popupDocumentScriptReady\n ? managedPopupSource(managedPopup)\n : { uri: WEBVIEW_BOOTSTRAP_URL }\n }\n style={[styles.webView, webViewProps?.style]}\n javaScriptEnabled\n javaScriptCanOpenWindowsAutomatically\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n userAgent={effectiveUserAgent ?? defaultMobileBrowserUserAgent()}\n incognito={false}\n cacheEnabled\n setSupportMultipleWindows={false}\n injectedJavaScriptBeforeContentLoaded={popupInjectedScript}\n injectedJavaScript={popupInjectedScript}\n injectedJavaScriptBeforeContentLoadedForMainFrameOnly={false}\n injectedJavaScriptForMainFrameOnly={false}\n onMessage={handleMessage}\n onOpenWindow={handlePopupOpenWindow}\n onShouldStartLoadWithRequest={handlePopupShouldStartLoadWithRequest}\n onNavigationStateChange={handlePopupNavigationStateChange}\n onLoadStart={(event: unknown) => {\n const nextChrome = readBrowserChromeState(event);\n invokeWebViewCallback(webViewProps?.onLoadStart, event);\n if (!popupDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) {\n return;\n }\n setPopupChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: true,\n }));\n }}\n onLoadEnd={(event: unknown) => {\n const nextChrome = readBrowserChromeState(event);\n invokeWebViewCallback(webViewProps?.onLoadEnd, event);\n if (!popupDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) {\n return;\n }\n markPopupContentReady();\n setPopupChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: false,\n }));\n popupRef.current?.injectJavaScript?.(popupInjectedScript);\n }}\n originWhitelist={['http://*', 'https://*', 'about:*']}\n />\n <Animated.View\n pointerEvents={popupContentReady ? 'none' : 'auto'}\n style={[\n styles.fadeCover,\n { backgroundColor: theme.surfaceColor, opacity: popupCoverOpacity },\n ]}>\n {!popupContentReady ? (\n <ActivityIndicator color={theme.accentColor} size=\"large\" />\n ) : null}\n </Animated.View>\n </View>\n </View>\n ) : null}\n {providerContentConcealed ? (\n <View\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n style={[\n styles.privacyCoverBase,\n {\n backgroundColor: theme.statusBarStyle === 'light-content' ? '#000000' : '#ffffff',\n },\n ]}\n />\n ) : null}\n {isVerificationCovered && !flow.isProcessing ? (\n <View\n accessible={!verificationPresentationStalled}\n accessibilityLabel={`${coverStatusCopy.title.replace(/\\.\\.\\.$/, '')}.`}\n accessibilityLiveRegion=\"polite\"\n accessibilityViewIsModal\n style={[styles.overlay, { backgroundColor: theme.surfaceColor }]}>\n {verificationPresentationStalled ? null : (\n <ActivityIndicator color={theme.accentColor} size=\"large\" />\n )}\n <Text style={[styles.overlayTitle, { color: theme.onSurfaceColor }]}>\n {coverStatusCopy.title}\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n {coverStatusCopy.subtitle}\n </Text>\n {verificationPresentationStalled ? (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Return to provider\"\n style={[styles.primaryAction, { backgroundColor: theme.accentColor }]}\n onPress={returnToProvider}>\n <Text style={styles.primaryActionText}>Return to provider</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Cancel verification\"\n style={styles.secondaryAction}\n onPress={() => closeFlow(true)}>\n <Text style={[styles.secondaryActionText, { color: theme.mutedColor }]}>\n Cancel\n </Text>\n </Pressable>\n </>\n ) : null}\n </View>\n ) : null}\n {flow.isProcessing ? (\n <View style={[styles.overlay, { backgroundColor: theme.surfaceColor }]}>\n <ActivityIndicator color={theme.accentColor} size=\"large\" />\n <Text style={[styles.overlayTitle, { color: theme.onSurfaceColor }]}>\n {processingCopy(phase)}\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n Keep this screen open - it only takes a moment.\n </Text>\n </View>\n ) : null}\n {error ? (\n <View style={[styles.overlay, { backgroundColor: theme.surfaceColor }]}>\n <View style={styles.errorIconWrap}>\n <Text style={styles.errorIconGlyph}>!</Text>\n </View>\n <Text style={[styles.overlayTitle, { color: theme.onSurfaceColor }]}>\n {isTeelsFlow ? 'Could not complete attestation' : 'Could not verify your account'}\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n {isTeelsFlow ? friendlyTeelsError(error, errorCode) : friendlyError(error, errorCode)}\n </Text>\n {sessionId ? (\n <SessionIdRow\n sessionId={sessionId}\n onCopySessionId={onCopySessionId}\n mutedColor={theme.mutedColor ?? '#66758a'}\n accentColor={theme.accentColor ?? '#2752d9'}\n />\n ) : null}\n {isRetryableError(errorCode, errorRetryable) ? (\n <Pressable\n style={[styles.primaryAction, { backgroundColor: theme.accentColor }]}\n onPress={openFlow}>\n <Text style={styles.primaryActionText}>Try again</Text>\n </Pressable>\n ) : null}\n <Pressable style={styles.secondaryAction} onPress={() => closeFlow(true)}>\n <Text style={[styles.secondaryActionText, { color: theme.mutedColor }]}>Close</Text>\n </Pressable>\n </View>\n ) : null}\n {preparing ? (\n <View style={[styles.overlay, { backgroundColor: theme.surfaceColor }]}>\n <ActivityIndicator color={theme.accentColor} size=\"large\" />\n <Text style={[styles.overlayTitle, { color: theme.onSurfaceColor }]}>\n {preparingCopy(preparingName)}\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n Setting up a secure connection.\n </Text>\n </View>\n ) : null}\n {Platform.OS === 'ios' ? (\n <View\n style={styles.edgeSwipeZone}\n accessibilityElementsHidden\n {...flow.edgeSwipeHandlers}\n />\n ) : null}\n </View>\n </View>\n );\n}\n\nfunction invokeMainWebViewCallback(\n callback: unknown,\n event: unknown,\n isTeelsFlow: boolean | undefined,\n timing: 'before' | 'after'\n): void {\n if ((!isTeelsFlow && timing !== 'before') || (isTeelsFlow && timing !== 'after')) return;\n if (!isTeelsFlow) {\n invokeWebViewCallback(callback, event);\n return;\n }\n try {\n invokeWebViewCallback(callback, event);\n } catch {\n // Observational host callbacks cannot interrupt or settle the TeeLS flow.\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ interface SessionIdRowProps {
2
+ sessionId: string;
3
+ onCopySessionId?: (id: string) => void;
4
+ mutedColor: string;
5
+ accentColor: string;
6
+ }
7
+ /**
8
+ * Shows the funnel sessionId on the error screen with a Copy control so an end
9
+ * user can hand it to support. The full id is selectable and announced for
10
+ * accessibility; only the display is truncated (the copy carries the full id).
11
+ */
12
+ export declare function SessionIdRow({ sessionId, onCopySessionId, mutedColor, accentColor, }: SessionIdRowProps): import("react").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=SessionIdRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionIdRow.d.ts","sourceRoot":"","sources":["../../../src/components/providerAttest/SessionIdRow.tsx"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,eAAe,EACf,UAAU,EACV,WAAW,GACZ,EAAE,iBAAiB,+BA8CnB"}
@@ -0,0 +1,47 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { AccessibilityInfo, Pressable, Text, View } from 'react-native';
3
+ import { copyText } from './clipboardSupport';
4
+ import { styles } from './styles';
5
+ function truncateId(id) {
6
+ return id.length > 14 ? `${id.slice(0, 8)}…${id.slice(-4)}` : id;
7
+ }
8
+ /**
9
+ * Shows the funnel sessionId on the error screen with a Copy control so an end
10
+ * user can hand it to support. The full id is selectable and announced for
11
+ * accessibility; only the display is truncated (the copy carries the full id).
12
+ */
13
+ export function SessionIdRow({ sessionId, onCopySessionId, mutedColor, accentColor, }) {
14
+ const [copied, setCopied] = useState(false);
15
+ const resetTimerRef = useRef(null);
16
+ useEffect(() => () => {
17
+ if (resetTimerRef.current)
18
+ clearTimeout(resetTimerRef.current);
19
+ }, []);
20
+ const handleCopy = useCallback(() => {
21
+ copyText(sessionId, onCopySessionId)
22
+ .then((result) => {
23
+ if (result === 'unavailable')
24
+ return;
25
+ setCopied(true);
26
+ AccessibilityInfo.announceForAccessibility('Session ID copied');
27
+ if (resetTimerRef.current)
28
+ clearTimeout(resetTimerRef.current);
29
+ resetTimerRef.current = setTimeout(() => setCopied(false), 2000);
30
+ })
31
+ .catch(() => {
32
+ /* copyText never rejects; guard for safety */
33
+ });
34
+ }, [onCopySessionId, sessionId]);
35
+ return (<View style={styles.sessionRow}>
36
+ <Text style={styles.sessionLabel}>Session</Text>
37
+ <Text selectable style={[styles.sessionValue, { color: mutedColor }]} accessibilityLabel={`Session ID ${sessionId}`} accessibilityHint="Share this with support to debug this attempt">
38
+ {truncateId(sessionId)}
39
+ </Text>
40
+ <Pressable onPress={handleCopy} accessibilityRole="button" accessibilityLabel={copied ? 'Session ID copied' : 'Copy session ID'} style={styles.sessionCopy}>
41
+ <Text style={[styles.sessionCopyText, { color: accentColor }]}>
42
+ {copied ? 'Copied ✓' : 'Copy'}
43
+ </Text>
44
+ </Pressable>
45
+ </View>);
46
+ }
47
+ //# sourceMappingURL=SessionIdRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionIdRow.js","sourceRoot":"","sources":["../../../src/components/providerAttest/SessionIdRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { AccessibilityInfo, Pressable, Text, View } from 'react-native';\n\nimport { copyText } from './clipboardSupport';\nimport { styles } from './styles';\n\ninterface SessionIdRowProps {\n sessionId: string;\n onCopySessionId?: (id: string) => void;\n mutedColor: string;\n accentColor: string;\n}\n\nfunction truncateId(id: string): string {\n return id.length > 14 ? `${id.slice(0, 8)}…${id.slice(-4)}` : id;\n}\n\n/**\n * Shows the funnel sessionId on the error screen with a Copy control so an end\n * user can hand it to support. The full id is selectable and announced for\n * accessibility; only the display is truncated (the copy carries the full id).\n */\nexport function SessionIdRow({\n sessionId,\n onCopySessionId,\n mutedColor,\n accentColor,\n}: SessionIdRowProps) {\n const [copied, setCopied] = useState(false);\n const resetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (resetTimerRef.current) clearTimeout(resetTimerRef.current);\n },\n []\n );\n\n const handleCopy = useCallback(() => {\n copyText(sessionId, onCopySessionId)\n .then((result) => {\n if (result === 'unavailable') return;\n setCopied(true);\n AccessibilityInfo.announceForAccessibility('Session ID copied');\n if (resetTimerRef.current) clearTimeout(resetTimerRef.current);\n resetTimerRef.current = setTimeout(() => setCopied(false), 2000);\n })\n .catch(() => {\n /* copyText never rejects; guard for safety */\n });\n }, [onCopySessionId, sessionId]);\n\n return (\n <View style={styles.sessionRow}>\n <Text style={styles.sessionLabel}>Session</Text>\n <Text\n selectable\n style={[styles.sessionValue, { color: mutedColor }]}\n accessibilityLabel={`Session ID ${sessionId}`}\n accessibilityHint=\"Share this with support to debug this attempt\">\n {truncateId(sessionId)}\n </Text>\n <Pressable\n onPress={handleCopy}\n accessibilityRole=\"button\"\n accessibilityLabel={copied ? 'Session ID copied' : 'Copy session ID'}\n style={styles.sessionCopy}>\n <Text style={[styles.sessionCopyText, { color: accentColor }]}>\n {copied ? 'Copied ✓' : 'Copy'}\n </Text>\n </Pressable>\n </View>\n );\n}\n"]}
@@ -0,0 +1,18 @@
1
+ export type CopyResult = 'handled' | 'shared' | 'unavailable';
2
+ /**
3
+ * Copy `value` to the clipboard with graceful degradation and NO optional
4
+ * native dependency.
5
+ *
6
+ * The SDK deliberately does not `require('expo-clipboard')`: Metro bundles every
7
+ * statically-required module, so an optional `require` either fails to transform
8
+ * (a computed specifier) or breaks bundling for any host that hasn't installed
9
+ * the module. Instead:
10
+ * 1. `onHostCopy` — the host app's own clipboard handler (e.g. one that calls
11
+ * `expo-clipboard`/`@react-native-clipboard`). This is the path to a SILENT
12
+ * copy, opted into by the host.
13
+ * 2. React Native's core `Share` sheet — always present, no dependency.
14
+ * If neither applies, returns `'unavailable'` and the caller keeps the value
15
+ * rendered as selectable text so the user can copy it manually. Never throws.
16
+ */
17
+ export declare function copyText(value: string, onHostCopy?: (value: string) => void | Promise<void>): Promise<CopyResult>;
18
+ //# sourceMappingURL=clipboardSupport.d.ts.map