@burnt-labs/expo-satya-attest 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +5 -1
- package/android/build.gradle +2 -2
- package/build/components/providerAttest/ProviderAttestModal.d.ts.map +1 -1
- package/build/components/providerAttest/ProviderAttestModal.js +46 -6
- package/build/components/providerAttest/ProviderAttestModal.js.map +1 -1
- package/build/components/providerAttest/styles.d.ts +3 -0
- package/build/components/providerAttest/styles.d.ts.map +1 -1
- package/build/components/providerAttest/styles.js +1 -0
- package/build/components/providerAttest/styles.js.map +1 -1
- package/build/sdkMetadata.generated.d.ts +1 -1
- package/build/sdkMetadata.generated.js +1 -1
- package/build/sdkMetadata.generated.js.map +1 -1
- package/ios/Frameworks/libsatya_ffi-rs.xcframework/Info.plist +5 -5
- package/ios/Frameworks/libsatya_ffi-rs.xcframework/ios-arm64/libsatya_ffi.a +0 -0
- package/ios/Frameworks/libsatya_ffi-rs.xcframework/ios-arm64_x86_64-simulator/libsatya_ffi.a +0 -0
- package/ios/SatyaAttest.podspec +1 -1
- package/package.json +1 -1
- package/src/components/providerAttest/ProviderAttestModal.tsx +53 -5
- package/src/components/providerAttest/styles.ts +1 -0
- package/src/sdkMetadata.generated.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.1.1 - 2026-07-21
|
|
4
|
+
|
|
5
|
+
- Fixed the iOS keyboard covering bottom-pinned page controls in the provider
|
|
6
|
+
WebView modal (for example a provider login's "send verification code" button).
|
|
7
|
+
WKWebView never resizes its layout viewport when the keyboard appears — unlike
|
|
8
|
+
Android's `adjustResize` — and the modal had no keyboard handling, so pages that
|
|
9
|
+
pin their primary CTA to the bottom of a non-scrollable full-height layout left
|
|
10
|
+
it unreachable behind the keyboard. The modal content now insets by the exact
|
|
11
|
+
keyboard overlap, measured in window coordinates on each keyboard frame change
|
|
12
|
+
(a plain `KeyboardAvoidingView` under-pads inside the offset `pageSheet`
|
|
13
|
+
presentation), animated with the keyboard's own duration and curve. Applies to
|
|
14
|
+
both `fullScreen` and `pageSheet` presentations; the iPad floating/undocked
|
|
15
|
+
keyboard never insets the content (its frame does not cover the modal bottom),
|
|
16
|
+
and Android behavior is unchanged. No public API changes.
|
|
17
|
+
|
|
3
18
|
## 2.1.0 - 2026-07-21
|
|
4
19
|
|
|
5
20
|
- Native replay now reports per-provider attestation health to the Burnt provider
|
package/README.md
CHANGED
|
@@ -306,7 +306,11 @@ mount for a faster first open). The sheet's look is tunable through `theme`:
|
|
|
306
306
|
```
|
|
307
307
|
|
|
308
308
|
Injection, request capture, native replay, and OAuth popup handling are identical in both
|
|
309
|
-
presentation modes; only the container around the WebView changes.
|
|
309
|
+
presentation modes; only the container around the WebView changes. Keyboard handling is
|
|
310
|
+
also identical: on iOS the modal content automatically insets by the exact keyboard
|
|
311
|
+
overlap when the keyboard appears (WKWebView does not resize its layout viewport on its
|
|
312
|
+
own), so provider pages that pin their primary button to the bottom of the screen stay
|
|
313
|
+
reachable while typing; Android relies on the standard `adjustResize` behavior.
|
|
310
314
|
|
|
311
315
|
### Error Diagnostics
|
|
312
316
|
|
package/android/build.gradle
CHANGED
|
@@ -4,13 +4,13 @@ plugins {
|
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
group = 'expo.modules.satyaattest'
|
|
7
|
-
version = '2.1.
|
|
7
|
+
version = '2.1.1'
|
|
8
8
|
|
|
9
9
|
android {
|
|
10
10
|
namespace "expo.modules.satyaattest"
|
|
11
11
|
defaultConfig {
|
|
12
12
|
versionCode 1
|
|
13
|
-
versionName "2.1.
|
|
13
|
+
versionName "2.1.1"
|
|
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;
|
|
1
|
+
{"version":3,"file":"ProviderAttestModal.d.ts","sourceRoot":"","sources":["../../../src/components/providerAttest/ProviderAttestModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AA8B3D,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,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from 'react';
|
|
2
|
-
import { ActivityIndicator, Animated, Easing, Modal, Platform, Pressable, StatusBar, StyleSheet, Text, useWindowDimensions, View, } from 'react-native';
|
|
2
|
+
import { 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
4
|
import { WEBVIEW_BOOTSTRAP_URL } from './constants';
|
|
5
5
|
import { friendlyError, preparingCopy, processingCopy } from './copy';
|
|
@@ -20,13 +20,53 @@ function SharedModalHost({ flow }) {
|
|
|
20
20
|
const useSheet = presentation === 'sheet';
|
|
21
21
|
return (<Modal visible={modalVisible} animationType="slide" presentationStyle={Platform.OS === 'ios' && useSheet ? 'pageSheet' : 'fullScreen'} statusBarTranslucent={!useSheet} navigationBarTranslucent onRequestClose={Platform.OS === 'ios' ? handleModalRequestClose : handleHardwareBack}>
|
|
22
22
|
<StatusBar barStyle={theme.statusBarStyle} backgroundColor="transparent" translucent/>
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
<ModalKeyboardInset>
|
|
24
|
+
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
|
|
25
|
+
<SafeAreaInsetsContext.Consumer>
|
|
26
|
+
{(insets) => <ProviderSheetContent flow={flow} insets={insets}/>}
|
|
27
|
+
</SafeAreaInsetsContext.Consumer>
|
|
28
|
+
</SafeAreaProvider>
|
|
29
|
+
</ModalKeyboardInset>
|
|
28
30
|
</Modal>);
|
|
29
31
|
}
|
|
32
|
+
// iOS never resizes the WKWebView layout viewport for the keyboard (Android adjustResize
|
|
33
|
+
// does), and RN's KeyboardAvoidingView measures parent-relative, which under-pads inside
|
|
34
|
+
// the offset pageSheet presentation — so pad by the exact overlap in window coordinates.
|
|
35
|
+
function ModalKeyboardInset({ children }) {
|
|
36
|
+
const hostRef = useRef(null);
|
|
37
|
+
const appliedInsetRef = useRef(0);
|
|
38
|
+
const [bottomInset, setBottomInset] = useState(0);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
if (Platform.OS !== 'ios')
|
|
41
|
+
return undefined;
|
|
42
|
+
const applyKeyboardFrame = (event) => {
|
|
43
|
+
hostRef.current?.measureInWindow((_x, y, _width, height) => {
|
|
44
|
+
const hostBottom = y + height;
|
|
45
|
+
const keyboardTop = event.endCoordinates.screenY;
|
|
46
|
+
const keyboardBottom = keyboardTop + event.endCoordinates.height;
|
|
47
|
+
// The iPad floating/undocked keyboard reports a frame that ends above the modal
|
|
48
|
+
// bottom; only inset when the keyboard actually covers the bottom edge.
|
|
49
|
+
const overlap = keyboardBottom >= hostBottom ? Math.max(0, Math.round(hostBottom - keyboardTop)) : 0;
|
|
50
|
+
if (appliedInsetRef.current === overlap)
|
|
51
|
+
return;
|
|
52
|
+
appliedInsetRef.current = overlap;
|
|
53
|
+
LayoutAnimation.configureNext({
|
|
54
|
+
duration: event.duration > 0 ? event.duration : 250,
|
|
55
|
+
update: { type: LayoutAnimation.Types.keyboard },
|
|
56
|
+
});
|
|
57
|
+
setBottomInset(overlap);
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
const subscription = Keyboard.addListener('keyboardWillChangeFrame', applyKeyboardFrame);
|
|
61
|
+
return () => subscription.remove();
|
|
62
|
+
}, []);
|
|
63
|
+
return (<View collapsable={false} ref={hostRef} style={[
|
|
64
|
+
styles.modalKeyboardAvoiding,
|
|
65
|
+
bottomInset > 0 ? { paddingBottom: bottomInset } : null,
|
|
66
|
+
]}>
|
|
67
|
+
{children}
|
|
68
|
+
</View>);
|
|
69
|
+
}
|
|
30
70
|
function AndroidSheetHost({ flow }) {
|
|
31
71
|
const { closeFlow, handleHardwareBack, modalVisible, theme } = flow;
|
|
32
72
|
const { height } = useWindowDimensions();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderAttestModal.js","sourceRoot":"","sources":["../../../src/components/providerAttest/ProviderAttestModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,IAAI,EACJ,mBAAmB,EACnB,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,GAEjB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAMjF,MAAM,UAAU,mBAAmB,CAAC,EAAE,IAAI,EAA4B;IACpE,oFAAoF;IACpF,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QAC/D,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAG,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAG,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,IAAI,EAA4B;IACzD,MAAM,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAChG,MAAM,QAAQ,GAAG,YAAY,KAAK,OAAO,CAAC;IAC1C,OAAO,CACL,CAAC,KAAK,CACJ,OAAO,CAAC,CAAC,YAAY,CAAC,CACtB,aAAa,CAAC,OAAO,CACrB,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAClF,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAChC,wBAAwB,CACxB,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CACrF;MAAA,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW,EACpF;MAAA,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,CACrD;QAAA,CAAC,qBAAqB,CAAC,QAAQ,CAC7B;UAAA,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAG,CACnE;QAAA,EAAE,qBAAqB,CAAC,QAAQ,CAClC;MAAA,EAAE,gBAAgB,CACpB;IAAA,EAAE,KAAK,CAAC,CACT,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,IAAI,EAA4B;IAC1D,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACpE,MAAM,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACzC,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,4DAA4D;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,+EAA+E;IAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAC7B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,EAAE,CAAC;YACjB,iFAAiF;YACjF,2DAA2D;YAC3D,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACvC,QAAQ,CAAC,QAAQ,CAAC;gBAChB,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE;oBAC1B,OAAO,EAAE,CAAC;oBACV,eAAe,EAAE,IAAI;oBACrB,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE,GAAG;oBACd,IAAI,EAAE,GAAG;iBACV,CAAC;gBACF,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE;oBAC/B,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,GAAG;oBACb,eAAe,EAAE,IAAI;iBACtB,CAAC;aACH,CAAC,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC;YAChB,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE;gBAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,QAAQ,EAAE,GAAG;gBACb,eAAe,EAAE,IAAI;aACtB,CAAC;YACF,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;SACvF,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxB,IAAI,QAAQ;gBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;IAEhD,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE3C,OAAO,CACL,CAAC,KAAK,CACJ,OAAO,CACP,WAAW,CACX,aAAa,CAAC,MAAM,CACpB,oBAAoB,CACpB,wBAAwB,CACxB,cAAc,CAAC,CAAC,kBAAkB,CAAC,CACnC;MAAA,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW,EACpF;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAC9B;QAAA,CAAC,QAAQ,CAAC,IAAI,CACZ,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,QAAQ;YACf,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,CAAC,aAAa,EAAE;SACnE,CAAC,CACF;UAAA,CAAC,SAAS,CACR,KAAK,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAC/B,iBAAiB,CAAC,QAAQ,CAC1B,kBAAkB,CAAC,SAAS,CAC5B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAEnC;QAAA,EAAE,QAAQ,CAAC,IAAI,CACf;QAAA,CAAC,QAAQ,CAAC,IAAI,CACZ,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,YAAY;YACnB;gBACE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;gBAC3B,eAAe,EAAE,KAAK,CAAC,YAAY;gBACnC,mBAAmB,EAAE,KAAK,CAAC,iBAAiB;gBAC5C,oBAAoB,EAAE,KAAK,CAAC,iBAAiB;aAC9C;SACF,CAAC,CACF;UAAA,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,CACrD;YAAA,CAAC,qBAAqB,CAAC,QAAQ,CAC7B;cAAA,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAG,CACnE;YAAA,EAAE,qBAAqB,CAAC,QAAQ,CAClC;UAAA,EAAE,gBAAgB,CACpB;QAAA,EAAE,QAAQ,CAAC,IAAI,CACjB;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,KAAK,CAAC,CACT,CAAC;AACJ,CAAC;AAOD,SAAS,oBAAoB,CAAC,EAAE,IAAI,EAAE,MAAM,EAA6B;IACvE,MAAM,EACJ,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,KAAK,EACL,kBAAkB,EAClB,aAAa,EACb,2BAA2B,EAC3B,gBAAgB,EAChB,gCAAgC,EAChC,qBAAqB,EACrB,qCAAqC,EACrC,gCAAgC,EAChC,YAAY,EACZ,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,QAAQ,EACR,KAAK,EACL,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,KAAK,EACL,KAAK,EACL,eAAe,EACf,UAAU,EACV,MAAM,EACN,cAAc,EACd,YAAY,EACZ,UAAU,GACX,GAAG,IAAI,CAAC;IAET,MAAM,QAAQ,GAAG,YAAY,KAAK,OAAO,CAAC;IAC1C,MAAM,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,oFAAoF;IACpF,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE;YAC5B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChC,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAEjC,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE;YACjC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,EAAE,CAAC;YACnB,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC;gBAChB,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;gBAClF,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE;oBAC3B,OAAO,EAAE,GAAG;oBACZ,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChC,eAAe,EAAE,KAAK;iBACvB,CAAC;aACH,CAAC,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC;YAChB,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE;gBAC3B,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,GAAG;gBACb,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC/B,eAAe,EAAE,KAAK;aACvB,CAAC;YACF,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;SACnF,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxB,IAAI,QAAQ;gBAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG,KAAK,KAAK,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3E,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC;IAEzC,OAAO,CACL,CAAC,IAAI,CACH,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,SAAS;YAChB,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE;YACvC,QAAQ,IAAI;gBACV,mBAAmB,EAAE,KAAK,CAAC,iBAAiB;gBAC5C,oBAAoB,EAAE,KAAK,CAAC,iBAAiB;gBAC7C,QAAQ,EAAE,QAAQ;aACnB;YACD,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC;SACnC,CAAC,CACF;MAAA,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAC/B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAC9B;UAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B;QAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CACpE;QAAA,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,CAAC,SAAS,CACR,iBAAiB,CAAC,QAAQ,CAC1B,kBAAkB,CAAC,aAAa,CAChC,OAAO,CAAC,CAAC,EAAE,CAAC,CACZ,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CACzB,OAAO,CAAC,CAAC,YAAY,CAAC,CACtB;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CACpF;UAAA,EAAE,SAAS,CAAC,CACb,CAAC,CAAC,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAG,CACnC,CACD;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAC/B;UAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACnF;YAAA,CAAC,KAAK,CACR;UAAA,EAAE,IAAI,CACN;UAAA,CAAC,UAAU,CAAC,CAAC,CAAC,CACZ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAC7B;cAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CACjE;gBAAA,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAChC;cAAA,EAAE,IAAI,CACN;cAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAC9E;gBAAA,CAAC,UAAU,CACb;cAAA,EAAE,IAAI,CACR;YAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;QAAA,EAAE,IAAI,CACN;QAAA,CAAC,SAAS,CACR,iBAAiB,CAAC,QAAQ,CAC1B,kBAAkB,CAAC,eAAe,CAClC,OAAO,CAAC,CAAC,EAAE,CAAC,CACZ,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CACzB,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAC5B;UAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CACpC;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAClF;UAAA,EAAE,IAAI,CACR;QAAA,EAAE,SAAS,CACb;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAChC;QAAA,CAAC,QAAQ,CAAC,IAAI,CACZ,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,YAAY;YACnB;gBACE,eAAe,EAAE,KAAK,CAAC,WAAW;gBAClC,OAAO,EAAE,UAAU;gBACnB,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC;oBAC7B,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;iBAC5B,CAAC;aACH;SACF,CAAC,EAEN;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAC1F;QAAA,CAAC,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC,CAC7B,CAAC,eAAe,CACd,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CACzB,kBAAkB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAChE,GAAG,CAAC,CAAC,MAAM,CAAC,CACZ,MAAM,CAAC,CAAC;gBACN,GAAG,EAAE,uBAAuB;oBAC1B,CAAC,CAAC,CAAC,UAAU,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACrD,CAAC,CAAC,qBAAqB;aAC1B,CAAC,CACF,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAC7C,iBAAiB,CACjB,qCAAqC,CACrC,iBAAiB,CACjB,oBAAoB,CACpB,wBAAwB,CACxB,SAAS,CAAC,CAAC,kBAAkB,IAAI,6BAA6B,EAAE,CAAC,CACjE,SAAS,CAAC,CAAC,KAAK,CAAC,CACjB,YAAY,CACZ,yBAAyB,CAAC,CAAC,eAAe,CAAC,CAC3C,qCAAqC,CAAC,CAAC,kBAAkB,CAAC,CAC1D,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CACvC,qDAAqD,CAAC,CAAC,KAAK,CAAC,CAC7D,kCAAkC,CAAC,CAAC,KAAK,CAAC,CAC1C,SAAS,CAAC,CAAC,aAAa,CAAC,CACzB,YAAY,CAAC,CAAC,gBAAgB,CAAC,CAC/B,4BAA4B,CAAC,CAAC,gCAAgC,CAAC,CAC/D,uBAAuB,CAAC,CAAC,2BAA2B,CAAC,CACrD,WAAW,CAAC,CAAC,CAAC,KAAc,EAAE,EAAE;gBAC9B,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBACjD,qBAAqB,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBACxD,IAAI,CAAC,uBAAuB,IAAI,UAAU,CAAC,GAAG,KAAK,qBAAqB;oBAAE,OAAO;gBACjF,aAAa,EAAE,CAAC;gBAChB,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC7B,GAAG,OAAO;oBACV,GAAG,UAAU;oBACb,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC,CAAC;YACN,CAAC,CAAC,CACF,SAAS,CAAC,CAAC,CAAC,KAAc,EAAE,EAAE;gBAC5B,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBACjD,qBAAqB,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,uBAAuB,IAAI,UAAU,CAAC,GAAG,KAAK,qBAAqB;oBAAE,OAAO;gBACjF,gBAAgB,EAAE,CAAC;gBACnB,WAAW,EAAE,CAAC;gBACd,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC7B,GAAG,OAAO;oBACV,GAAG,UAAU;oBACb,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC,CAAC;gBACJ,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,CAAC;gBACvD,uBAAuB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CACF,eAAe,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,EACtD,CACH,CAAC,CAAC,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAClC;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,sCAAsC,EAAE,IAAI,CAC7E;UAAA,EAAE,IAAI,CAAC,CACR,CACD;QAAA,CAAC,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC,CAC7B,CAAC,QAAQ,CAAC,IAAI,CACZ,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAC9C,KAAK,CAAC,CAAC;gBACL,MAAM,CAAC,SAAS;gBAChB,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;aAC/D,CAAC,CACF;YAAA,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC,CAAC,CAAC,IAAI,CACtF;UAAA,EAAE,QAAQ,CAAC,IAAI,CAAC,CACjB,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,eAAe,IAAI,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC,CAC7C,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,YAAY,CAAC,CAClB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CACtE;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CACzE;cAAA,CAAC,SAAS,CACR,iBAAiB,CAAC,QAAQ,CAC1B,kBAAkB,CAAC,MAAM,CACzB,OAAO,CAAC,CAAC,EAAE,CAAC,CACZ,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CACzB,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CACnC;gBAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CACrF;cAAA,EAAE,SAAS,CACX;cAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACnF;;cACF,EAAE,IAAI,CACN;cAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACjC;YAAA,EAAE,IAAI,CACN;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAC9B;cAAA,CAAC,eAAe,CACd,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CACzB,kBAAkB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAChE,GAAG,CAAC,CAAC,QAAQ,CAAC,CACd,GAAG,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CACnC,MAAM,CAAC,CACL,wBAAwB;gBACtB,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC;gBAClC,CAAC,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAClC,CAAC,CACD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAC7C,iBAAiB,CACjB,qCAAqC,CACrC,iBAAiB,CACjB,oBAAoB,CACpB,wBAAwB,CACxB,SAAS,CAAC,CAAC,kBAAkB,IAAI,6BAA6B,EAAE,CAAC,CACjE,SAAS,CAAC,CAAC,KAAK,CAAC,CACjB,YAAY,CACZ,yBAAyB,CAAC,CAAC,KAAK,CAAC,CACjC,qCAAqC,CAAC,CAAC,mBAAmB,CAAC,CAC3D,kBAAkB,CAAC,CAAC,mBAAmB,CAAC,CACxC,qDAAqD,CAAC,CAAC,KAAK,CAAC,CAC7D,kCAAkC,CAAC,CAAC,KAAK,CAAC,CAC1C,SAAS,CAAC,CAAC,aAAa,CAAC,CACzB,YAAY,CAAC,CAAC,qBAAqB,CAAC,CACpC,4BAA4B,CAAC,CAAC,qCAAqC,CAAC,CACpE,uBAAuB,CAAC,CAAC,gCAAgC,CAAC,CAC1D,WAAW,CAAC,CAAC,CAAC,KAAc,EAAE,EAAE;gBAC9B,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBACjD,qBAAqB,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBACxD,IAAI,CAAC,wBAAwB,IAAI,UAAU,CAAC,GAAG,KAAK,qBAAqB,EAAE,CAAC;oBAC1E,OAAO;gBACT,CAAC;gBACD,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC3B,GAAG,OAAO;oBACV,GAAG,UAAU;oBACb,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC,CAAC;YACN,CAAC,CAAC,CACF,SAAS,CAAC,CAAC,CAAC,KAAc,EAAE,EAAE;gBAC5B,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBACjD,qBAAqB,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,wBAAwB,IAAI,UAAU,CAAC,GAAG,KAAK,qBAAqB,EAAE,CAAC;oBAC1E,OAAO;gBACT,CAAC;gBACD,qBAAqB,EAAE,CAAC;gBACxB,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC3B,GAAG,OAAO;oBACV,GAAG,UAAU;oBACb,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC,CAAC;gBACJ,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,mBAAmB,CAAC,CAAC;YAC5D,CAAC,CAAC,CACF,eAAe,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,EAExD;cAAA,CAAC,QAAQ,CAAC,IAAI,CACZ,aAAa,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CACnD,KAAK,CAAC,CAAC;gBACL,MAAM,CAAC,SAAS;gBAChB,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE;aACpE,CAAC,CACF;gBAAA,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACpB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,EAAG,CAC7D,CAAC,CAAC,CAAC,IAAI,CACV;cAAA,EAAE,QAAQ,CAAC,IAAI,CACjB;YAAA,EAAE,IAAI,CACR;UAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CACnB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CACrE;YAAA,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,EACzD;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAClE;cAAA,CAAC,cAAc,CAAC,KAAK,CAAC,CACxB;YAAA,EAAE,IAAI,CACN;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CACjE;;YACF,EAAE,IAAI,CACR;UAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CACP,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CACrE;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAChC;cAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,CAC7C;YAAA,EAAE,IAAI,CACN;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAClE;;YACF,EAAE,IAAI,CACN;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CACjE;cAAA,CAAC,aAAa,CAAC,KAAK,CAAC,CACvB;YAAA,EAAE,IAAI,CACN;YAAA,CAAC,SAAS,CACR,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CACtE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAClB;cAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,IAAI,CACxD;YAAA,EAAE,SAAS,CACX;YAAA,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CACvE;cAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CACrF;YAAA,EAAE,SAAS,CACb;UAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CACrE;YAAA,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,EACzD;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAClE;cAAA,CAAC,aAAa,CAAC,aAAa,CAAC,CAC/B;YAAA,EAAE,IAAI,CACN;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CACjE;;YACF,EAAE,IAAI,CACR;UAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CACvB,CAAC,IAAI,CACH,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAC5B,2BAA2B,CAC3B,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAC3B,CACH,CAAC,CAAC,CAAC,IAAI,CACV;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n Animated,\n Easing,\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 { friendlyError, preparingCopy, processingCopy } from './copy';\nimport { managedPopupKey, managedPopupSource } from './popupRelay';\nimport { defaultMobileBrowserUserAgent, providerLoginUrl } from './providerResolution';\nimport { styles } from './styles';\nimport { insetPadding } from './theme';\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 <SafeAreaProvider initialMetrics={initialWindowMetrics}>\n <SafeAreaInsetsContext.Consumer>\n {(insets) => <ProviderSheetContent flow={flow} insets={insets} />}\n </SafeAreaInsetsContext.Consumer>\n </SafeAreaProvider>\n </Modal>\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 handleHardwareBack,\n handleMessage,\n handleNavigationStateChange,\n handleOpenWindow,\n handlePopupNavigationStateChange,\n handlePopupOpenWindow,\n handlePopupShouldStartLoadWithRequest,\n handleShouldStartLoadWithRequest,\n handleReload,\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 } = 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 (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 showRefresh = !!resolved && !error;\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 geolocationEnabled={resolved.template.requiresLocation === true}\n ref={webRef}\n source={{\n uri: mainDocumentScriptReady\n ? (webViewUrl ?? providerLoginUrl(resolved.template))\n : 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={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 invokeWebViewCallback(webViewProps?.onLoadStart, event);\n if (!mainDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) return;\n markLoadStart();\n setBrowserChrome((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 (!mainDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) return;\n markContentReady();\n markLoadEnd();\n setBrowserChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: false,\n }));\n webRef.current?.injectJavaScript?.(mainInjectedScript);\n maybeTriggerHtmlCapture(nextChrome.url);\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 ? (\n <View\n ref={popupHostRef}\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 {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 Could not verify your account\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n {friendlyError(error)}\n </Text>\n <Pressable\n style={[styles.primaryAction, { backgroundColor: theme.accentColor }]}\n onPress={openFlow}>\n <Text style={styles.primaryActionText}>Try again</Text>\n </Pressable>\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"]}
|
|
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 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 { friendlyError, preparingCopy, processingCopy } from './copy';\nimport { managedPopupKey, managedPopupSource } from './popupRelay';\nimport { defaultMobileBrowserUserAgent, providerLoginUrl } from './providerResolution';\nimport { styles } from './styles';\nimport { insetPadding } from './theme';\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 handleHardwareBack,\n handleMessage,\n handleNavigationStateChange,\n handleOpenWindow,\n handlePopupNavigationStateChange,\n handlePopupOpenWindow,\n handlePopupShouldStartLoadWithRequest,\n handleShouldStartLoadWithRequest,\n handleReload,\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 } = 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 (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 showRefresh = !!resolved && !error;\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 geolocationEnabled={resolved.template.requiresLocation === true}\n ref={webRef}\n source={{\n uri: mainDocumentScriptReady\n ? (webViewUrl ?? providerLoginUrl(resolved.template))\n : 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={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 invokeWebViewCallback(webViewProps?.onLoadStart, event);\n if (!mainDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) return;\n markLoadStart();\n setBrowserChrome((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 (!mainDocumentScriptReady && nextChrome.url === WEBVIEW_BOOTSTRAP_URL) return;\n markContentReady();\n markLoadEnd();\n setBrowserChrome((current) => ({\n ...current,\n ...nextChrome,\n loading: false,\n }));\n webRef.current?.injectJavaScript?.(mainInjectedScript);\n maybeTriggerHtmlCapture(nextChrome.url);\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 ? (\n <View\n ref={popupHostRef}\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 {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 Could not verify your account\n </Text>\n <Text style={[styles.overlaySubtitle, { color: theme.mutedColor }]}>\n {friendlyError(error)}\n </Text>\n <Pressable\n style={[styles.primaryAction, { backgroundColor: theme.accentColor }]}\n onPress={openFlow}>\n <Text style={styles.primaryActionText}>Try again</Text>\n </Pressable>\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/components/providerAttest/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/components/providerAttest/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsLjB,CAAC"}
|
|
@@ -80,6 +80,7 @@ export const styles = StyleSheet.create({
|
|
|
80
80
|
},
|
|
81
81
|
progressTrack: { height: 2.5, backgroundColor: '#eef1f7', overflow: 'hidden' },
|
|
82
82
|
progressFill: { height: '100%', backgroundColor: '#2752d9', borderRadius: 2 },
|
|
83
|
+
modalKeyboardAvoiding: { flex: 1 },
|
|
83
84
|
webViewHost: { flex: 1, backgroundColor: '#ffffff' },
|
|
84
85
|
webView: { flex: 1 },
|
|
85
86
|
edgeSwipeZone: { position: 'absolute', left: 0, top: 0, bottom: 0, width: 24 },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/providerAttest/styles.ts"],"names":[],"mappings":"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","sourcesContent":["import { StyleSheet } from 'react-native';\n\nexport const styles = StyleSheet.create({\n button: {\n minHeight: 48,\n borderRadius: 8,\n paddingHorizontal: 16,\n paddingVertical: 12,\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'row',\n backgroundColor: '#2752d9',\n },\n buttonDisabled: { opacity: 0.55 },\n buttonSpinner: { marginRight: 8 },\n buttonText: { color: '#ffffff', fontSize: 15, fontWeight: '700' },\n modalRoot: { flex: 1, backgroundColor: '#ffffff' },\n\n // In-app sheet presentation (Android animated host).\n androidRoot: { flex: 1, justifyContent: 'flex-end' },\n backdrop: { position: 'absolute', top: 0, right: 0, bottom: 0, left: 0 },\n androidSheet: {\n height: '80%',\n overflow: 'hidden',\n backgroundColor: '#ffffff',\n // Soft lift so the sheet reads as floating above the app.\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: -2 },\n shadowOpacity: 0.18,\n shadowRadius: 12,\n elevation: 24,\n },\n grabberWrap: { alignItems: 'center', paddingTop: 8, paddingBottom: 2 },\n grabber: { width: 40, height: 5, borderRadius: 3, backgroundColor: '#d3d9e4' },\n\n header: {\n minHeight: 52,\n paddingHorizontal: 8,\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: '#ffffff',\n },\n headerCenter: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 4,\n },\n headerSide: {\n width: 40,\n height: 40,\n alignItems: 'center',\n justifyContent: 'center',\n },\n headerCloseButton: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(23, 32, 51, 0.06)',\n },\n headerBackGlyph: { color: '#172033', fontSize: 30, fontWeight: '400', marginTop: -3 },\n headerCloseGlyph: { color: '#172033', fontSize: 20, fontWeight: '500', lineHeight: 22 },\n headerRefreshGlyph: { color: '#172033', fontSize: 20, fontWeight: '500', lineHeight: 22 },\n domainPill: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n maxWidth: '100%',\n marginTop: 1,\n },\n domainLockGlyph: { fontSize: 10, marginRight: 3 },\n domainText: { fontSize: 12, fontWeight: '500' },\n // Hidden 1x1 WebView used only to warm the engine when prefetch is enabled.\n warmWebView: { position: 'absolute', width: 1, height: 1, opacity: 0, top: -10, left: -10 },\n headerTitle: {\n flex: 1,\n textAlign: 'center',\n color: '#172033',\n fontSize: 15,\n fontWeight: '600',\n },\n\n progressTrack: { height: 2.5, backgroundColor: '#eef1f7', overflow: 'hidden' },\n progressFill: { height: '100%', backgroundColor: '#2752d9', borderRadius: 2 },\n\n webViewHost: { flex: 1, backgroundColor: '#ffffff' },\n webView: { flex: 1 },\n edgeSwipeZone: { position: 'absolute', left: 0, top: 0, bottom: 0, width: 24 },\n // Opaque cover faded out on first paint to hide the about:blank bootstrap flash.\n fadeCover: {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#ffffff',\n },\n\n overlay: {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 32,\n backgroundColor: 'rgba(255, 255, 255, 0.97)',\n },\n overlayTitle: {\n marginTop: 18,\n color: '#172033',\n fontSize: 18,\n fontWeight: '700',\n textAlign: 'center',\n },\n overlaySubtitle: {\n marginTop: 8,\n color: '#66758a',\n fontSize: 14,\n lineHeight: 20,\n textAlign: 'center',\n maxWidth: 320,\n },\n errorIconWrap: {\n width: 56,\n height: 56,\n borderRadius: 28,\n backgroundColor: '#fdecef',\n alignItems: 'center',\n justifyContent: 'center',\n },\n errorIconGlyph: { color: '#d6334e', fontSize: 30, fontWeight: '800' },\n primaryAction: {\n marginTop: 26,\n minWidth: 220,\n minHeight: 48,\n borderRadius: 8,\n backgroundColor: '#2752d9',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 24,\n },\n primaryActionText: { color: '#ffffff', fontSize: 15, fontWeight: '700' },\n secondaryAction: {\n marginTop: 6,\n minHeight: 44,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 24,\n },\n secondaryActionText: { color: '#66758a', fontSize: 14, fontWeight: '600' },\n\n popupOverlay: {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n backgroundColor: '#ffffff',\n },\n popupHeader: {\n height: 48,\n paddingHorizontal: 8,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: '#eef1f7',\n backgroundColor: '#ffffff',\n flexDirection: 'row',\n alignItems: 'center',\n },\n\n webViewFallback: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 24,\n backgroundColor: '#ffffff',\n },\n errorText: { color: '#d6334e', fontSize: 14, textAlign: 'center' },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/providerAttest/styles.ts"],"names":[],"mappings":"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","sourcesContent":["import { StyleSheet } from 'react-native';\n\nexport const styles = StyleSheet.create({\n button: {\n minHeight: 48,\n borderRadius: 8,\n paddingHorizontal: 16,\n paddingVertical: 12,\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'row',\n backgroundColor: '#2752d9',\n },\n buttonDisabled: { opacity: 0.55 },\n buttonSpinner: { marginRight: 8 },\n buttonText: { color: '#ffffff', fontSize: 15, fontWeight: '700' },\n modalRoot: { flex: 1, backgroundColor: '#ffffff' },\n\n // In-app sheet presentation (Android animated host).\n androidRoot: { flex: 1, justifyContent: 'flex-end' },\n backdrop: { position: 'absolute', top: 0, right: 0, bottom: 0, left: 0 },\n androidSheet: {\n height: '80%',\n overflow: 'hidden',\n backgroundColor: '#ffffff',\n // Soft lift so the sheet reads as floating above the app.\n shadowColor: '#000000',\n shadowOffset: { width: 0, height: -2 },\n shadowOpacity: 0.18,\n shadowRadius: 12,\n elevation: 24,\n },\n grabberWrap: { alignItems: 'center', paddingTop: 8, paddingBottom: 2 },\n grabber: { width: 40, height: 5, borderRadius: 3, backgroundColor: '#d3d9e4' },\n\n header: {\n minHeight: 52,\n paddingHorizontal: 8,\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: '#ffffff',\n },\n headerCenter: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 4,\n },\n headerSide: {\n width: 40,\n height: 40,\n alignItems: 'center',\n justifyContent: 'center',\n },\n headerCloseButton: {\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(23, 32, 51, 0.06)',\n },\n headerBackGlyph: { color: '#172033', fontSize: 30, fontWeight: '400', marginTop: -3 },\n headerCloseGlyph: { color: '#172033', fontSize: 20, fontWeight: '500', lineHeight: 22 },\n headerRefreshGlyph: { color: '#172033', fontSize: 20, fontWeight: '500', lineHeight: 22 },\n domainPill: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n maxWidth: '100%',\n marginTop: 1,\n },\n domainLockGlyph: { fontSize: 10, marginRight: 3 },\n domainText: { fontSize: 12, fontWeight: '500' },\n // Hidden 1x1 WebView used only to warm the engine when prefetch is enabled.\n warmWebView: { position: 'absolute', width: 1, height: 1, opacity: 0, top: -10, left: -10 },\n headerTitle: {\n flex: 1,\n textAlign: 'center',\n color: '#172033',\n fontSize: 15,\n fontWeight: '600',\n },\n\n progressTrack: { height: 2.5, backgroundColor: '#eef1f7', overflow: 'hidden' },\n progressFill: { height: '100%', backgroundColor: '#2752d9', borderRadius: 2 },\n\n modalKeyboardAvoiding: { flex: 1 },\n webViewHost: { flex: 1, backgroundColor: '#ffffff' },\n webView: { flex: 1 },\n edgeSwipeZone: { position: 'absolute', left: 0, top: 0, bottom: 0, width: 24 },\n // Opaque cover faded out on first paint to hide the about:blank bootstrap flash.\n fadeCover: {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#ffffff',\n },\n\n overlay: {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 32,\n backgroundColor: 'rgba(255, 255, 255, 0.97)',\n },\n overlayTitle: {\n marginTop: 18,\n color: '#172033',\n fontSize: 18,\n fontWeight: '700',\n textAlign: 'center',\n },\n overlaySubtitle: {\n marginTop: 8,\n color: '#66758a',\n fontSize: 14,\n lineHeight: 20,\n textAlign: 'center',\n maxWidth: 320,\n },\n errorIconWrap: {\n width: 56,\n height: 56,\n borderRadius: 28,\n backgroundColor: '#fdecef',\n alignItems: 'center',\n justifyContent: 'center',\n },\n errorIconGlyph: { color: '#d6334e', fontSize: 30, fontWeight: '800' },\n primaryAction: {\n marginTop: 26,\n minWidth: 220,\n minHeight: 48,\n borderRadius: 8,\n backgroundColor: '#2752d9',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 24,\n },\n primaryActionText: { color: '#ffffff', fontSize: 15, fontWeight: '700' },\n secondaryAction: {\n marginTop: 6,\n minHeight: 44,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 24,\n },\n secondaryActionText: { color: '#66758a', fontSize: 14, fontWeight: '600' },\n\n popupOverlay: {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n backgroundColor: '#ffffff',\n },\n popupHeader: {\n height: 48,\n paddingHorizontal: 8,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: '#eef1f7',\n backgroundColor: '#ffffff',\n flexDirection: 'row',\n alignItems: 'center',\n },\n\n webViewFallback: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 24,\n backgroundColor: '#ffffff',\n },\n errorText: { color: '#d6334e', fontSize: 14, textAlign: 'center' },\n});\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Generated by internal/module_scripts/sync-sdk-metadata.js.
|
|
2
2
|
export const EXPO_SATYA_ATTEST_SDK_NAME = '@burnt-labs/expo-satya-attest';
|
|
3
|
-
export const EXPO_SATYA_ATTEST_SDK_VERSION = '2.1.
|
|
3
|
+
export const EXPO_SATYA_ATTEST_SDK_VERSION = '2.1.1';
|
|
4
4
|
//# sourceMappingURL=sdkMetadata.generated.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkMetadata.generated.js","sourceRoot":"","sources":["../src/sdkMetadata.generated.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,+BAAwC,CAAC;AACnF,MAAM,CAAC,MAAM,6BAA6B,GAAG,OAAgB,CAAC","sourcesContent":["// Generated by internal/module_scripts/sync-sdk-metadata.js.\nexport const EXPO_SATYA_ATTEST_SDK_NAME = '@burnt-labs/expo-satya-attest' as const;\nexport const EXPO_SATYA_ATTEST_SDK_VERSION = '2.1.
|
|
1
|
+
{"version":3,"file":"sdkMetadata.generated.js","sourceRoot":"","sources":["../src/sdkMetadata.generated.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,+BAAwC,CAAC;AACnF,MAAM,CAAC,MAAM,6BAA6B,GAAG,OAAgB,CAAC","sourcesContent":["// Generated by internal/module_scripts/sync-sdk-metadata.js.\nexport const EXPO_SATYA_ATTEST_SDK_NAME = '@burnt-labs/expo-satya-attest' as const;\nexport const EXPO_SATYA_ATTEST_SDK_VERSION = '2.1.1' as const;\n"]}
|
|
@@ -10,15 +10,18 @@
|
|
|
10
10
|
<key>HeadersPath</key>
|
|
11
11
|
<string>Headers</string>
|
|
12
12
|
<key>LibraryIdentifier</key>
|
|
13
|
-
<string>ios-
|
|
13
|
+
<string>ios-arm64_x86_64-simulator</string>
|
|
14
14
|
<key>LibraryPath</key>
|
|
15
15
|
<string>libsatya_ffi.a</string>
|
|
16
16
|
<key>SupportedArchitectures</key>
|
|
17
17
|
<array>
|
|
18
18
|
<string>arm64</string>
|
|
19
|
+
<string>x86_64</string>
|
|
19
20
|
</array>
|
|
20
21
|
<key>SupportedPlatform</key>
|
|
21
22
|
<string>ios</string>
|
|
23
|
+
<key>SupportedPlatformVariant</key>
|
|
24
|
+
<string>simulator</string>
|
|
22
25
|
</dict>
|
|
23
26
|
<dict>
|
|
24
27
|
<key>BinaryPath</key>
|
|
@@ -26,18 +29,15 @@
|
|
|
26
29
|
<key>HeadersPath</key>
|
|
27
30
|
<string>Headers</string>
|
|
28
31
|
<key>LibraryIdentifier</key>
|
|
29
|
-
<string>ios-
|
|
32
|
+
<string>ios-arm64</string>
|
|
30
33
|
<key>LibraryPath</key>
|
|
31
34
|
<string>libsatya_ffi.a</string>
|
|
32
35
|
<key>SupportedArchitectures</key>
|
|
33
36
|
<array>
|
|
34
37
|
<string>arm64</string>
|
|
35
|
-
<string>x86_64</string>
|
|
36
38
|
</array>
|
|
37
39
|
<key>SupportedPlatform</key>
|
|
38
40
|
<string>ios</string>
|
|
39
|
-
<key>SupportedPlatformVariant</key>
|
|
40
|
-
<string>simulator</string>
|
|
41
41
|
</dict>
|
|
42
42
|
</array>
|
|
43
43
|
<key>CFBundlePackageType</key>
|
|
Binary file
|
package/ios/Frameworks/libsatya_ffi-rs.xcframework/ios-arm64_x86_64-simulator/libsatya_ffi.a
CHANGED
|
Binary file
|
package/ios/SatyaAttest.podspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Pod::Spec.new do |s|
|
|
2
2
|
s.name = 'SatyaAttest'
|
|
3
|
-
s.version = '2.1.
|
|
3
|
+
s.version = '2.1.1'
|
|
4
4
|
s.summary = 'SATYA-W mobile TLS app-attestation (App Attest + Secure Enclave) backed by the Rust satya-sdk core'
|
|
5
5
|
s.description = 'Expo native module wrapping the Rust satya-ffi XCFramework and layering iOS App Attest + Secure Enclave platform attestation.'
|
|
6
6
|
s.author = 'Justin'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burnt-labs/expo-satya-attest",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "SATYA-W mobile TLS app-attestation (App Attest + Secure Enclave / Play Integrity) backed by the Rust satya-sdk core",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -3,6 +3,9 @@ import {
|
|
|
3
3
|
ActivityIndicator,
|
|
4
4
|
Animated,
|
|
5
5
|
Easing,
|
|
6
|
+
Keyboard,
|
|
7
|
+
type KeyboardEvent,
|
|
8
|
+
LayoutAnimation,
|
|
6
9
|
Modal,
|
|
7
10
|
Platform,
|
|
8
11
|
Pressable,
|
|
@@ -52,15 +55,60 @@ function SharedModalHost({ flow }: ProviderAttestModalProps) {
|
|
|
52
55
|
navigationBarTranslucent
|
|
53
56
|
onRequestClose={Platform.OS === 'ios' ? handleModalRequestClose : handleHardwareBack}>
|
|
54
57
|
<StatusBar barStyle={theme.statusBarStyle} backgroundColor="transparent" translucent />
|
|
55
|
-
<
|
|
56
|
-
<
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
<ModalKeyboardInset>
|
|
59
|
+
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
|
|
60
|
+
<SafeAreaInsetsContext.Consumer>
|
|
61
|
+
{(insets) => <ProviderSheetContent flow={flow} insets={insets} />}
|
|
62
|
+
</SafeAreaInsetsContext.Consumer>
|
|
63
|
+
</SafeAreaProvider>
|
|
64
|
+
</ModalKeyboardInset>
|
|
60
65
|
</Modal>
|
|
61
66
|
);
|
|
62
67
|
}
|
|
63
68
|
|
|
69
|
+
// iOS never resizes the WKWebView layout viewport for the keyboard (Android adjustResize
|
|
70
|
+
// does), and RN's KeyboardAvoidingView measures parent-relative, which under-pads inside
|
|
71
|
+
// the offset pageSheet presentation — so pad by the exact overlap in window coordinates.
|
|
72
|
+
function ModalKeyboardInset({ children }: { children: React.ReactNode }) {
|
|
73
|
+
const hostRef = useRef<View | null>(null);
|
|
74
|
+
const appliedInsetRef = useRef(0);
|
|
75
|
+
const [bottomInset, setBottomInset] = useState(0);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (Platform.OS !== 'ios') return undefined;
|
|
78
|
+
const applyKeyboardFrame = (event: KeyboardEvent) => {
|
|
79
|
+
hostRef.current?.measureInWindow((_x, y, _width, height) => {
|
|
80
|
+
const hostBottom = y + height;
|
|
81
|
+
const keyboardTop = event.endCoordinates.screenY;
|
|
82
|
+
const keyboardBottom = keyboardTop + event.endCoordinates.height;
|
|
83
|
+
// The iPad floating/undocked keyboard reports a frame that ends above the modal
|
|
84
|
+
// bottom; only inset when the keyboard actually covers the bottom edge.
|
|
85
|
+
const overlap =
|
|
86
|
+
keyboardBottom >= hostBottom ? Math.max(0, Math.round(hostBottom - keyboardTop)) : 0;
|
|
87
|
+
if (appliedInsetRef.current === overlap) return;
|
|
88
|
+
appliedInsetRef.current = overlap;
|
|
89
|
+
LayoutAnimation.configureNext({
|
|
90
|
+
duration: event.duration > 0 ? event.duration : 250,
|
|
91
|
+
update: { type: LayoutAnimation.Types.keyboard },
|
|
92
|
+
});
|
|
93
|
+
setBottomInset(overlap);
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
const subscription = Keyboard.addListener('keyboardWillChangeFrame', applyKeyboardFrame);
|
|
97
|
+
return () => subscription.remove();
|
|
98
|
+
}, []);
|
|
99
|
+
return (
|
|
100
|
+
<View
|
|
101
|
+
collapsable={false}
|
|
102
|
+
ref={hostRef}
|
|
103
|
+
style={[
|
|
104
|
+
styles.modalKeyboardAvoiding,
|
|
105
|
+
bottomInset > 0 ? { paddingBottom: bottomInset } : null,
|
|
106
|
+
]}>
|
|
107
|
+
{children}
|
|
108
|
+
</View>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
64
112
|
function AndroidSheetHost({ flow }: ProviderAttestModalProps) {
|
|
65
113
|
const { closeFlow, handleHardwareBack, modalVisible, theme } = flow;
|
|
66
114
|
const { height } = useWindowDimensions();
|
|
@@ -85,6 +85,7 @@ export const styles = StyleSheet.create({
|
|
|
85
85
|
progressTrack: { height: 2.5, backgroundColor: '#eef1f7', overflow: 'hidden' },
|
|
86
86
|
progressFill: { height: '100%', backgroundColor: '#2752d9', borderRadius: 2 },
|
|
87
87
|
|
|
88
|
+
modalKeyboardAvoiding: { flex: 1 },
|
|
88
89
|
webViewHost: { flex: 1, backgroundColor: '#ffffff' },
|
|
89
90
|
webView: { flex: 1 },
|
|
90
91
|
edgeSwipeZone: { position: 'absolute', left: 0, top: 0, bottom: 0, width: 24 },
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Generated by internal/module_scripts/sync-sdk-metadata.js.
|
|
2
2
|
export const EXPO_SATYA_ATTEST_SDK_NAME = '@burnt-labs/expo-satya-attest' as const;
|
|
3
|
-
export const EXPO_SATYA_ATTEST_SDK_VERSION = '2.1.
|
|
3
|
+
export const EXPO_SATYA_ATTEST_SDK_VERSION = '2.1.1' as const;
|