* fix(app): gate passport OCR camera in TS to stop Android permission loop (SELF-2645)
Denying the camera system prompt on the Android passport OCR scan screen
previously re-fired the prompt repeatedly (the UI "blinked") because the
native CameraFragment re-requested permission from onResume each time the
permission dialog dismissed. On iOS the scanner view silently stayed black
after denial. Both were caused by permission handling living in the native
layer with no TypeScript gate.
Move the gate to TypeScript:
- Pre-navigation check in DocumentOnboardingScreen routes denials to a
KYC fallback via useKycLauncher instead of navigating into the camera.
- DocumentCameraScreen tracks permission in a cameraReady state and skips
the <PassportCamera> render until confirmed granted; AppState foreground
transitions re-check and dismount on revocation. This eliminates the
iOS black scanner view entirely.
The broken native Android permission code (CameraFragment onResume +
inverted hasCameraPermission()) is now unreachable dead code. Cleaning it
up is tracked as a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(ios): link Camera permission handler in Podfile (SELF-2645)
Without `setup_permissions(["Camera"])` in the Podfile, the iOS app has
the react-native-permissions JS wrapper but no native handler linked, so
`check(PERMISSIONS.IOS.CAMERA)` throws and the passport OCR gate falls
through to the "Camera not available" alert on real iPhones with working
cameras.
Run `cd app/ios && pod install` after pulling this commit. The matching
Podfile.lock update will land in a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* update lock file
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
* chore: swap @sumsub/react-native-mobilesdk-module for @didit-protocol/sdk-react-native
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: rename SUMSUB_TEE_URL to DIDIT_TEE_URL
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: rename PendingKycVerification.userId to sessionId
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add Didit integration module, remove Sumsub integration
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add useDiditWebSocket hook, remove useSumsubWebSocket
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add useDiditLauncher hook, remove useSumsubLauncher
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: rename userId to sessionId in pendingKycStore, bump persist version
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: rename sumsub error injection triggers to didit
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: rename KycSuccess route param userId to sessionId
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: update KycSuccessScreen to use useDiditWebSocket and sessionId
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: update all consumer files from Sumsub to Didit
Updates usePendingKycRecovery, selfClientProvider, 5 fallback screens,
LogoConfirmationScreen, HomeScreen, KYCVerifiedScreen, and KycIdCard.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test: update jest mocks and config for Didit SDK
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* build: swap Sumsub native deps for Didit in Podfile and build.gradle
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: remove hardcoded sumsub namespace from nullifier generation
Read namespace from id_type field instead of hardcoding 'sumsub'.
The didit-tee encodes id_type as [namespace_len][namespace][doc_type],
so the namespace is already in the signed data.
Also fix deserializeApplicantInfo to parse the namespaced encoding
and extract just the document type for display.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: lint and formatting issues from Didit migration
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add register_kyc support to build_r1cs_wasm.sh and build_cpp.sh
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: use circuits/node_modules paths in build_r1cs_wasm.sh
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: emit ack_success after receiving KYC data to trigger session deletion
The didit-tee now expects the client to ack receipt of signed data,
which triggers DELETE of the session from Didit's API for data cleanup.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: use raw bytes for KYC commitment/nullifier instead of deserialize+reserialize
The deserialize→reserialize path strips the namespace prefix from
id_type, producing different bytes than the TEE signed. Work on the
raw base64-decoded bytes directly to match the circuit inputs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: lint
* Revert "fix: lint"
This reverts commit d3dde1460b.
* fix: lint
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* setup IS_EUCLID build variable for conditionally using euclid desgins
create a headless header that only handles the status bar, for the new screens since they manage their own
make sure new screens get proper insets
add recoveryphrase 3.0
fix country picker
* this lint runs twice. once in repo wide lint and once here. so lets just run once to save resources
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* add useSafeBottomPadding
* add bottom padding to dev screen
* use safe bottom padding
* skip uploading if building android bundle locally
* fix tests
* cache fix script
* clean up country picker, fix font color
* sort package jsons, add watcher for mobile sdk
* formatting
* only bump versions for successfull builds
* move all css
* cleaner script
* kill watchers before starting new one
* refactor confirm screen
* refactor
* setup animations and confirm-identification screen
* linty
* fix jest tests
* reverse attempts to fix web build. skip web build for now since its not used anyway
* dont code split in a library
* cleanup config for build based on what is actually used in sdk
* move components to sdk and refactor a way from tamagui
* linting
* reverting since this is just a local issue for me
* lint
* simple
* yarn
* yolo
* run yarn nice
* fix pipelines
* fix tests
* fix mock
* add fonts to mobile sdk
* more feedback
---------
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
* create nice structure for the mobile sdk
* spv
* actually dont touch what we dont understand
* fix metro
* fix pretty
* fix types on app and imrpove names
* sneek in actually checking the types in the mobile app.
* not yet
* fix jest imports and name test better
* remove lazy loading
* fix tests
* formatting
* fix imports and web ci
* fix tests
* fix building
* fix
* debug ci
* fix web ci issue
* fix
* fix
* fix ci
* remove web render test
* coderabbit feedback
* fix ci
* use import
* fix lint
* fix compiling
* update lock
* update lock
* fix: update yarn.lock hash for @selfxyz/mobile-sdk-alpha
Resolves CI error where yarn install --immutable failed due to
outdated package hash. The hash changed from b2afc4 to f9ebb9.
* fix: update yarn.lock hash after mobile-sdk-alpha changes
- Hash changed from c0e6b9 to 0d0f72 due to package modifications
- Cleaned caches and regenerated lockfile to ensure consistency
- This resolves CI cache mismatch where old artifacts had stale hash
* fix: update yarn.lock hash after building mobile-sdk-alpha
- Final hash: 89f5a6 (includes built dist artifacts)
- Built mobile-sdk-alpha to ensure package is in stable state
- This should resolve CI immutable install errors
* fix yarn lock and build
* Revert "SEL-487: Prompt user to backup recovery phrase before registering (#715)"
This reverts commit fe14ac655e.
* revert update
* fix safe area context pkg
* Revert "SEL-487: Prompt user to backup recovery phrase before registering (#715)"
This reverts commit fe14ac655e.
* fix old flow
* more silent tests
* update lock files
* hard code return
* fix build issues
* generate disclosure proof with euids
* generate disclosure proof with euids
* Eu id updates 2 (#648)
* update vc_and_disclose_id test (dev branch) (#641)
* fix: vc_and_disclose_id test
* chore: yarn prettier
* Show modal on NFC scan error (#642)
* Add help button and error modal actions
* fix the screen management
* yarn nice
* Bump build v2.5.4: ios 132; android 71 (#631)
* bump version and build numbers
* remove tamagui/toast
* fix marketing version
* fix: update TD1 and TD3 checks (#643)
* bum yarn.lock
* add version and user defined data
---------
Co-authored-by: Vishalkulkarni45 <109329073+Vishalkulkarni45@users.noreply.github.com>
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
Co-authored-by: Seshanth.S🐺 <35675963+seshanthS@users.noreply.github.com>
* remove the mock user define data
* get the useridentifier as a hash from the user defined data
* chore: add version and userDefinedData
* feat: use the version in register / dsc proofs as well
* update calculateUserIdentifierHash
* yarn nice
* refactor: consolidate user context data handling and update payload structure
* fix typing issues on sha1
* remove console.log(sha1)
* fix sha1 import
* refactor: streamline userDefinedData handling and adjust payload type for circuit
* refactor: update sha1 usage and enhance logging in calculateUserIdentifierHash
* yarn nice
* yarn lint common
* use ts-ignore for sha1 import
* fix app ci tests
* fix typing issue
* remove unused ts-ignore
* cast uuid before calling generateinputs
* bump qrcode version
* add tsup on the qrcode sdk
* fix: exports on selfxyz/qrcode
* update how we define config.version
* fix yarn imports
* yarn format
---------
Co-authored-by: Vishalkulkarni45 <109329073+Vishalkulkarni45@users.noreply.github.com>
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
Co-authored-by: Seshanth.S🐺 <35675963+seshanthS@users.noreply.github.com>
Co-authored-by: Ayman <aymanshaik1015@gmail.com>