@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 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
 
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'expo.modules.satyaattest'
7
- version = '2.1.0'
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.0"
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;AA2B3D,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;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
- <SafeAreaProvider initialMetrics={initialWindowMetrics}>
24
- <SafeAreaInsetsContext.Consumer>
25
- {(insets) => <ProviderSheetContent flow={flow} insets={insets}/>}
26
- </SafeAreaInsetsContext.Consumer>
27
- </SafeAreaProvider>
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":"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","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"]}
@@ -144,6 +144,9 @@ export declare const styles: {
144
144
  backgroundColor: string;
145
145
  borderRadius: number;
146
146
  };
147
+ modalKeyboardAvoiding: {
148
+ flex: number;
149
+ };
147
150
  webViewHost: {
148
151
  flex: number;
149
152
  backgroundColor: string;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/components/providerAttest/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqLjB,CAAC"}
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,3 +1,3 @@
1
1
  export declare const EXPO_SATYA_ATTEST_SDK_NAME: "@burnt-labs/expo-satya-attest";
2
- export declare const EXPO_SATYA_ATTEST_SDK_VERSION: "2.1.0";
2
+ export declare const EXPO_SATYA_ATTEST_SDK_VERSION: "2.1.1";
3
3
  //# sourceMappingURL=sdkMetadata.generated.d.ts.map
@@ -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.0';
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.0' as const;\n"]}
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-arm64</string>
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-arm64_x86_64-simulator</string>
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>
@@ -1,6 +1,6 @@
1
1
  Pod::Spec.new do |s|
2
2
  s.name = 'SatyaAttest'
3
- s.version = '2.1.0'
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.0",
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
- <SafeAreaProvider initialMetrics={initialWindowMetrics}>
56
- <SafeAreaInsetsContext.Consumer>
57
- {(insets) => <ProviderSheetContent flow={flow} insets={insets} />}
58
- </SafeAreaInsetsContext.Consumer>
59
- </SafeAreaProvider>
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.0' as const;
3
+ export const EXPO_SATYA_ATTEST_SDK_VERSION = '2.1.1' as const;