diff --git a/app/App.tsx b/app/App.tsx
index 4a81fe22a..28cdad635 100644
--- a/app/App.tsx
+++ b/app/App.tsx
@@ -5,7 +5,7 @@
// CI/CD Pipeline Test - July 31, 2025 - With Permissions Fix
import React from 'react';
import { Platform } from 'react-native';
-import { YStack } from 'tamagui';
+import { Theme, YStack } from 'tamagui';
import type {
TurnkeyCallbacks,
TurnkeyProviderConfig,
@@ -90,30 +90,32 @@ export const TURNKEY_CONFIG: TurnkeyProviderConfig = {
function App(): React.JSX.Element {
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle
index 1d2c3bbbf..2980d127a 100644
--- a/app/android/app/build.gradle
+++ b/app/android/app/build.gradle
@@ -138,7 +138,7 @@ android {
applicationId "com.proofofpassportapp"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 142
+ versionCode 146
versionName "2.9.17"
manifestPlaceholders = [appAuthRedirectScheme: 'com.proofofpassportapp']
externalNativeBuild {
diff --git a/app/ios/OpenPassport/Info.plist b/app/ios/OpenPassport/Info.plist
index 4f767e946..1621fccc2 100644
--- a/app/ios/OpenPassport/Info.plist
+++ b/app/ios/OpenPassport/Info.plist
@@ -31,10 +31,8 @@
proofofpassport
com.warroom.proofofpassport
-
-
-
- com.googleusercontent.apps.YOUR_CLIENT_ID
+
+
diff --git a/app/ios/Self.xcodeproj/project.pbxproj b/app/ios/Self.xcodeproj/project.pbxproj
index 6dd78bdf0..fde2bd2b7 100644
--- a/app/ios/Self.xcodeproj/project.pbxproj
+++ b/app/ios/Self.xcodeproj/project.pbxproj
@@ -477,7 +477,7 @@
CODE_SIGN_ENTITLEMENTS = OpenPassport/OpenPassportDebug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 189;
+ CURRENT_PROJECT_VERSION = 216;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_APP_SANDBOX = NO;
ENABLE_BITCODE = NO;
@@ -620,7 +620,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = OpenPassport/OpenPassport.entitlements;
- CURRENT_PROJECT_VERSION = 189;
+ CURRENT_PROJECT_VERSION = 216;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_APP_SANDBOX = NO;
ENABLE_RESOURCE_ACCESS_CAMERA = YES;
diff --git a/packages/webview-app/src/screens/tunnel/TunnelProofReceiptScreen.tsx b/packages/webview-app/src/screens/tunnel/TunnelProofReceiptScreen.tsx
index cf7a55567..e5398a1fc 100644
--- a/packages/webview-app/src/screens/tunnel/TunnelProofReceiptScreen.tsx
+++ b/packages/webview-app/src/screens/tunnel/TunnelProofReceiptScreen.tsx
@@ -21,14 +21,6 @@ export const TunnelProofReceiptScreen: React.FC = () => {
const { backPath = '/tunnel/proof/result', backState } =
(location.state as { backPath?: string; backState?: Record } | null) ?? {};
- const showConfirm = backPath !== '/tunnel/proof/result' || backState?.success === true;
-
- const onConfirm = useCallback(() => {
- haptic.trigger('selection');
- analytics.trackEvent('tunnel_proof_receipt_confirmed');
- navigate('/tunnel/proof/disclose');
- }, [navigate, haptic, analytics]);
-
const proofItems = useMemo(() => {
if (displayLabels && displayLabels.length > 0) {
return displayLabels.map(label => ({ label }));
@@ -49,7 +41,6 @@ export const TunnelProofReceiptScreen: React.FC = () => {
{...WEB_SAFE_AREA}
variant="default"
onClose={onClose}
- onConfirm={showConfirm ? onConfirm : undefined}
appIcon={}
appName={appName}
appEndpoint={appEndpoint}
diff --git a/packages/webview-app/src/screens/tunnel/TunnelResultScreen.tsx b/packages/webview-app/src/screens/tunnel/TunnelResultScreen.tsx
index b563a6f00..3db6a4e73 100644
--- a/packages/webview-app/src/screens/tunnel/TunnelResultScreen.tsx
+++ b/packages/webview-app/src/screens/tunnel/TunnelResultScreen.tsx
@@ -31,18 +31,6 @@ const getTunnelBackPath = (source: TunnelResultState['source']): string => {
}
};
-const getTunnelClosePath = (source: TunnelResultState['source']): string => {
- switch (source) {
- case 'disclose':
- return '/tunnel/proof/disclose';
- case 'kyc':
- return '/tunnel/kyc';
- case 'proving':
- default:
- return '/tunnel/tour/4';
- }
-};
-
export const TunnelResultScreen: React.FC = () => {
const navigate = useNavigate();
const location = useLocation();
@@ -84,9 +72,27 @@ export const TunnelResultScreen: React.FC = () => {
});
}, [location.pathname, location.state, navigate]);
- const onCancel = useCallback(() => {
- navigate(getTunnelClosePath(source), { replace: true });
- }, [navigate, source]);
+ const onCancel = useCallback(async () => {
+ try {
+ const result: VerificationResult = {
+ success: false,
+ userId: request.userId,
+ verificationId,
+ error: {
+ code: 'VERIFICATION_FAILED',
+ message: error ?? 'Verification failed',
+ },
+ };
+ await lifecycle.setResult(result);
+ analytics.trackEvent('tunnel_result_cancelled', { source });
+ lifecycle.dismiss();
+ } catch (err) {
+ analytics.trackEvent('tunnel_result_cancel_failed', {
+ error: err instanceof Error ? err.message : 'Failed to send cancel result',
+ });
+ lifecycle.dismiss();
+ }
+ }, [request.userId, verificationId, error, lifecycle, analytics, source]);
if (success) {
return (