Merge pull request #1721 from selfxyz/release/staging-2026-02-09

Release Build v2.9.15 - 2026-02-09
This commit is contained in:
Justin Hernandez
2026-02-09 14:19:32 -08:00
committed by GitHub
6 changed files with 58 additions and 64 deletions

View File

@@ -256,11 +256,15 @@ class CameraMLKitFragment(cameraMLKitCallback: CameraMLKitCallback) : CameraFrag
if (!isAdded) {
return
}
OcrUtils.processOcr(
results = results,
timeRequired = timeRequired,
callback = mrzListener
)
try {
OcrUtils.processOcr(
results = results,
timeRequired = timeRequired,
callback = mrzListener
)
} catch (e: Exception) {
mrzListener.onFailure(e, timeRequired)
}
}
override fun onCanceled(timeRequired: Long) {

View File

@@ -3,7 +3,7 @@
// NOTE: Converts to Apache-2.0 on 2029-06-11 per LICENSE.
import React, { useCallback } from 'react';
import { StyleSheet, View } from 'react-native';
import { YStack } from 'tamagui';
import type { RouteProp } from '@react-navigation/native';
import { useNavigation, useRoute } from '@react-navigation/native';
import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
@@ -16,6 +16,7 @@ import {
} from '@selfxyz/mobile-sdk-alpha/components';
import {
black,
slate100,
slate400,
white,
} from '@selfxyz/mobile-sdk-alpha/constants/colors';
@@ -78,8 +79,8 @@ const LogoConfirmationScreen: React.FC = () => {
// User completed verification - navigate to KycSuccessScreen
navigation.navigate('KycSuccess', { userId: accessToken.userId });
} catch (error) {
console.error('Error launching Sumsub:', error);
} catch {
console.error('Error launching Sumsub verification');
showModal({
titleText: 'Error',
bodyText: 'Unable to start verification. Please try again.',
@@ -92,26 +93,49 @@ const LogoConfirmationScreen: React.FC = () => {
}, [documentType, countryCode, navigation, showModal]);
return (
<ExpandableBottomLayout.Layout backgroundColor={white}>
<ExpandableBottomLayout.Layout backgroundColor={slate100}>
<DocumentFlowNavBar title="GETTING STARTED" />
<ExpandableBottomLayout.TopSection backgroundColor={white}>
<View style={styles.contentContainer}>
<BodyText style={styles.titleText}>
<ExpandableBottomLayout.TopSection backgroundColor={slate100}>
<YStack alignItems="center" gap={24} maxWidth={340}>
<BodyText
style={{
fontSize: 20,
fontFamily: advercase,
textAlign: 'center',
color: black,
}}
>
Does your document have this symbol?
</BodyText>
<View style={styles.logoContainer}>
<YStack
backgroundColor={white}
borderRadius={16}
padding={24}
shadowColor={black}
shadowOffset={{ width: 0, height: 2 }}
shadowOpacity={0.1}
shadowRadius={8}
elevation={4}
>
<EPassportLogo width={160} height={98} />
</View>
</YStack>
<BodyText style={styles.descriptionText}>
<BodyText
style={{
fontSize: 16,
fontFamily: dinot,
textAlign: 'center',
color: slate400,
}}
>
This symbol indicates your document has a biometric chip, which is
required for registration.
</BodyText>
</View>
</YStack>
</ExpandableBottomLayout.TopSection>
<ExpandableBottomLayout.BottomSection backgroundColor={white}>
<ExpandableBottomLayout.BottomSection backgroundColor={slate100}>
<ButtonsContainer>
<PrimaryButton onPress={handleConfirm}>Yes</PrimaryButton>
{kycEnabled && (
@@ -124,33 +148,3 @@ const LogoConfirmationScreen: React.FC = () => {
};
export default LogoConfirmationScreen;
const styles = StyleSheet.create({
contentContainer: {
alignItems: 'center',
gap: 24,
maxWidth: 340,
},
titleText: {
fontSize: 20,
fontFamily: advercase,
textAlign: 'center',
color: black,
},
logoContainer: {
backgroundColor: white,
borderRadius: 16,
padding: 24,
shadowColor: black,
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.1,
shadowRadius: 8,
elevation: 4,
},
descriptionText: {
fontSize: 16,
fontFamily: dinot,
textAlign: 'center',
color: slate400,
},
});

View File

@@ -1,7 +1,7 @@
{
"ios": {
"build": 211,
"lastDeployed": "2026-02-04T22:15:04.337Z"
"build": 212,
"lastDeployed": "2026-02-06T23:20:10.343Z"
},
"android": {
"build": 140,

View File

@@ -346,7 +346,7 @@ library CustomVerifier {
userIdentifier: kycOutput.userIdentifier,
nullifier: kycOutput.nullifier,
forbiddenCountriesListPacked: kycOutput.forbiddenCountriesListPacked,
issuingState: "UNAVAILABLE",
issuingState: CircuitAttributeHandlerV2.getIssuingState(AttestationId.KYC, kycOutput.revealedDataPacked),
name: CircuitAttributeHandlerV2.getName(AttestationId.KYC, kycOutput.revealedDataPacked),
idNumber: CircuitAttributeHandlerV2.getDocumentNumber(AttestationId.KYC, kycOutput.revealedDataPacked),
nationality: CircuitAttributeHandlerV2.getNationality(AttestationId.KYC, kycOutput.revealedDataPacked),

View File

@@ -37,10 +37,10 @@ contract Verifier_gcp_jwt {
uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;
uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;
uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;
uint256 constant deltax1 = 1804222383802986733937376810902861143401033555807870231731929239915419049861;
uint256 constant deltax2 = 15902885537441599351050098769394227668772388058868388096316964244217496511682;
uint256 constant deltay1 = 4195707504005103778106485021796359604414786496137920116128130440872062477216;
uint256 constant deltay2 = 20513207510859042996645896574478474889840017920990203652675014165180462273668;
uint256 constant deltax1 = 1251881756337791411928133847605135151052521532650145608856023618834663237249;
uint256 constant deltax2 = 5281789764009987450775605587672163080892994094738055552649386387568551504938;
uint256 constant deltay1 = 10977469751764298292601658816468903002676551535082393684254221834632855537611;
uint256 constant deltay2 = 16316330863572428734364637140327331781488799597244767274686281923936865378112;
uint256 constant IC0x = 6972951741762339913362267428319005943611938060812676091174501911982947323821;
uint256 constant IC0y = 4968121098705797351946375443564156998686441710551907423285338106315203657372;

View File

@@ -25,16 +25,12 @@ export const formatRevealedDataPacked = (
);
let issuingState = '';
if (attestationId === 4) {
issuingState = 'UNAVAILABLE';
} else {
issuingState = revealedDataPackedString
.subarray(
revealedDataIndices[attestationId].issuingStateStart,
revealedDataIndices[attestationId].issuingStateEnd + 1
)
.toString('utf-8');
}
issuingState = revealedDataPackedString
.subarray(
revealedDataIndices[attestationId].issuingStateStart,
revealedDataIndices[attestationId].issuingStateEnd + 1
)
.toString('utf-8');
const name = revealedDataPackedString
.subarray(