170 Commits

Author SHA1 Message Date
Justin Hernandez
cd96baaf69 simplify dev mode menu and surface test-registration armed state (#2022)
* improvements

* save wip
2026-04-24 12:27:14 -07:00
Justin Hernandez
3326f58468 SELF-2694: add dev-only bypass for on-chain registration check (#2020)
* save wip

* format

* update flow, add tests
2026-04-24 10:36:46 -07:00
Justin Hernandez
73e52d0328 disable support ID sharing by default and rename from "diagnostic" (#2018)
* wip

* fix test
2026-04-23 19:22:35 -07:00
Leszek Stachowski
4fbe2238ce feat: more KYC fallbacks (#2014)
* feat: MRZ data confirmation for NFC scanning

* - euclid DataConfirmationScreen, InputField -> app
- change date picker library

* lint

* fix build

* fix tests

* remove diff sending + add data confirmation button to trouble screen

* fix: date handling

* fix: greptile PR comments + lint/fmt

* simplify date handling

* update Podfile.lock

* feat: more KYC fallbacks

* pr feedback

* move tests

* format

* remove dupe tests

* pr feedback

---------

Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
2026-04-22 18:51:13 -07:00
Leszek Stachowski
94e2b4dd8f feat: MRZ data confirmation for NFC scanning (#1767)
* feat: MRZ data confirmation for NFC scanning

* - euclid DataConfirmationScreen, InputField -> app
- change date picker library

* lint

* fix build

* fix tests

* remove diff sending + add data confirmation button to trouble screen

* fix: date handling

* fix: greptile PR comments + lint/fmt

* simplify date handling

* update Podfile.lock

* migrate tests to test folder

---------

Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
2026-04-22 15:52:21 -07:00
Nesopie
537b0dd418 fix: gracefully gate passport OCR camera permission (#2008)
* 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>
2026-04-22 07:55:52 -07:00
Justin Hernandez
a38df55f53 refactor: extract points API routes and self app constants (#2011)
* pr feedback

* abstract more constants
2026-04-22 07:24:40 -07:00
Justin Hernandez
0e8f171861 fix: add fallback escape hatch for stuck proving screen (#2004)
* address stale proof issue

* asve wip

* fixes

* pr feedback
2026-04-21 12:54:21 -07:00
Seshanth.S
003ba0380a Add Troubleshooting screen with points disclosure fix (#2005)
* Add Troubleshooting Screen and points fix endpoint

* Update app/src/screens/dev/TroubleshootingScreen.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* lint and greptile comments

* fix test

* fix: show troubleshooting when dev mode is already enabled

* improve copy

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
2026-04-21 10:34:25 -07:00
Justin Hernandez
0f9d734dc9 Make support diagnostic ID optional (#2001)
* make support uuid optional

* pr feedback
2026-04-20 16:35:58 -07:00
Justin Hernandez
d6e18ca853 fix: address PR 1991 review comments on points/gratification flow (#1994)
* fixes

* pr feedback
2026-04-19 18:54:43 -07:00
Justin Hernandez
65d2c073a4 refactor settings menu and add support UUID diagnostics (#1990)
* Add support UUID diagnostics across mobile app

* save wip

* pr feedback

* pr feedback

* refactor

* clean up

* use hook to fetch support uuid

* formatting

* enable toggle
2026-04-19 14:57:10 -07:00
Justin Hernandez
8f1429e907 SELF-2545: Add support_uuid for debugging support requests (#1988)
* Add support UUID diagnostics across mobile app

* save wip

* pr feedback

* pr feedback
2026-04-17 23:04:32 -07:00
Justin Hernandez
b51ea3019d fix mobile app stability: KYC/MRZ/proving wait-forever paths (#1987)
* save wip

* fix linting

* remove verification timeout. tkaes longer than 30

* address possible stability issues

* address pr feedback

* improve tests

* pr feedback
2026-04-17 15:38:01 -07:00
Seshanth.S
3e5523abdd SELF-2643: use expo-camera for qrcode scanning (#1981)
* use expo-camera for qrcode scanning

* remove unused react import

* greptile review comments

* coderabbit comments

* lint

* update podfile.lock

---------

Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
2026-04-16 23:40:19 -07:00
Justin Hernandez
e0070e16f3 Restore points screens, navigation, and earn-points flow (#1975)
* Restore points screens

* Restore support form flow

* Restore proof status safeguards

* Remove self apps links from points

* formatting

* pr bug fix feedback

* fix
2026-04-14 13:13:44 -07:00
Justin Hernandez
4bae15d164 SELF-2540: Fix account recovery flow after phone restore (#1942)
* bug fix

* fix pipelines

* fix race condition

* fixes

* try again

* fix maestro

* update copy and abstract

* fixes...i hope

* fix ios pipeline?

* pipeline fix

* fix pipeline

* fix e2e test

* fix pipelines?

* formatting
2026-04-09 12:32:03 -07:00
Justin Hernandez
b13ec9a052 Remove Points and Self Apps screens, update navigation and copy (#1945)
* commit

* remove stale

* create hook to open support form in webview; pr feedback

* tests

* ignore mcp

* test

* fix pipelines
2026-04-09 02:48:32 -07:00
Justin Hernandez
3e714facf5 Rename KYC references to be platform agnostic (#1947)
* first pass

* clean up

* format

* pr feedback and format
2026-04-08 16:56:32 -07:00
Justin Hernandez
ba2e598fbe Add proof overlays, history, and post-proof support screens (#1875)
* Add proof overlays, history, and post-proof screens (SELF-2421)

Add 10 proof-related screen wrappers: ProofRequestReceiptScreen, ProofHistoryScreen, SimpleDialogueScreen, DialogueWithCtaScreen, ProofGenerationDialogueScreen, ProofGenerationSuccessScreen, ProofSuccessBackupScreen, NovaSplashScreen, KycPendingScreen, and KycVerificationSuccessScreen. Include Lottie animation JSON files and dialogue background image in public/ for proper rendering. Add Vite middleware plugin to serve static JSON/HTML files without SPA fallback rewriting.

* save wip dev menu

* save dialogue screen updates

* finalize screens

* add test

* improvments

* update

---------

Co-authored-by: Tranquil-Flow <tranquil_flow@protonmail.com>
2026-03-28 16:39:13 -07:00
Nesopie
07352a5ac6 feat: migrate from Sumsub to Didit KYC provider (#1860)
* 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>
2026-03-25 15:49:49 +05:30
Justin Hernandez
f1ca565b9e fix (#1851) 2026-03-12 16:24:34 -07:00
Justin Hernandez
9493e84b24 revert pr 1786 lottie json conversion (#1848)
* Revert "chore: convert json to lottie files (#1786)"

This reverts commit 9406bacda8.

* remove dotlottie

* fix regressions

* pr feedback

* formatting

* fixes

* lint
2026-03-12 10:04:30 -07:00
Justin Hernandez
1041babc7b Stabilize iOS simulator startup and crash mitigation flow (#1836)
* save sepc

* save wip

* save pr 2wip

* save wip rd 3

* finalize ios crash fix

* pr feedback and format
2026-03-10 20:09:03 -07:00
Justin Hernandez
52113786c0 update integration tests (#1826) 2026-03-06 18:26:22 -08:00
Justin Hernandez
88e28733b1 Phase 1 Native Consolidation: Extract MRZ OCR/Mapping Helpers and Thin Scanner Views (#1823)
* mrz consolidation

* consolidate mrz swift code

* update specs

* save changes

* fixes

* format

* update spec

* pr feedback

* add tests

* save prep work

* consolidate MRZ handling logic

* fixes

* format

* format

* remove giga

* pr feedback

* update spec

* update

* revert change

* pr feedback

* updates
2026-03-06 17:54:46 -08:00
Justin Hernandez
3ee9822752 Phase 0 Native Consolidation: Baseline Contracts, Bridge Tests (#1822)
* mrz consolidation

* consolidate mrz swift code

* update specs

* save changes

* fixes

* format

* update spec

* pr feedback

* add tests

* remove

* fix pipeline
2026-03-06 14:51:51 -08:00
Justin Hernandez
d1962734db Add Social Login Demo (Google + Apple) with navigation and test mocks (#1806)
* chore: bump firebase to v21 and clean up Podfile

* feat: add social login demo screen

* pr feedback

* pr feedback

* fixes

* add android values to ci

* feedback
2026-03-03 18:53:11 -08:00
Justin Hernandez
9406bacda8 chore: convert json to lottie files (#1786)
* convert json to lottie files

* add comment for future web dotlottie usage

* fix pipelines; agent feedback

* enable ios e2e

* update lottie

* one more try

* kotlin fix

* attempt fix

* save wip fixes

* fix patch

* final pass

* fix pipelines

* attempt fix

* fix test

* feedback

* fix types
2026-02-28 18:47:25 -08:00
Justin Hernandez
ac844ee00e SELF-2034: fix and implement android e2e (#1792)
* Add tmate session to debug e2e workflow

* Don't run ios e2e

* Debug wip

* Debug wip

* Debug wip

* Enhance mobile E2E workflow by adding pre-installation step for emulator dependencies. This ensures the necessary Android SDK components are available for testing, improving the reliability of the build verification process.

* Add KVM group permissions setup to mobile E2E workflow

This update introduces a step to enable KVM group permissions in the mobile E2E workflow. This change ensures that the necessary permissions are configured for KVM, enhancing the environment setup for emulator testing and improving overall build verification reliability.

* Run e2e in self-hosted runners

* Fix JVM install

* Fix JVM install

* KVM check

* Refactor KVM access check in mobile E2E workflow

This update modifies the KVM access check step to provide a warning if /dev/kvm is not found, allowing the emulator to run in software mode instead of failing the workflow. Additionally, it dynamically adjusts the emulator options based on KVM availability, improving performance and flexibility in the testing environment.

* Adding tmate for debugging

* Adding retry logc to sdkmanger install

* Changing android channel to stable

* Add installation of emulator runtime dependencies in mobile E2E workflow

This update introduces a step to install necessary runtime dependencies for the Android emulator, ensuring a smoother testing environment and improving the reliability of the mobile end-to-end testing process.

* Fix APK install command

* Update Android api

* Update android emulator version

* Add E2E test script to mobile workflow

This commit introduces a new script for running end-to-end tests on the Android emulator. The script handles app installation and execution of Maestro tests, improving the organization and readability of the workflow. The previous inline commands have been replaced with a dedicated script, enhancing maintainability and clarity in the testing process.

* fix e2e test

* improve maestro  test

* try workflow again

* attempt fix

* fix

* another try

* clean up wording to reflect it's fixed

---------

Co-authored-by: Javier Cortejoso <javier.cortejoso@gmail.com>
2026-02-26 15:14:57 -08:00
Justin Hernandez
03635abaaf chore: add kmp license headers; update license year range (#1752)
* add kmp license headers and update year

* formatting
2026-02-15 16:56:06 -08:00
Justin Hernandez
eee830b7ea agent feedback (#1744) 2026-02-12 17:35:54 -08:00
Justin Hernandez
575566f7f2 chore: less flaky nfc test (#1738)
* attempt to make test less flaky

* fix flaky test again

* lint
2026-02-12 14:24:07 -08:00
Leszek Stachowski
abf01c82c0 Show badge for inactive documents (#1487)
* Show badge for inactive documents

* fix

* refactor to use the new flag

* add inactive check to ProveScreen

* lint

* fix for proving button not working

* use new qrHashlogic

* increase bundle size threshold to 46MB

* remove commented out line

* add kyc related changes

---------

Co-authored-by: seshanthS <seshanth@protonmail.com>
2026-02-12 11:05:47 -08:00
Justin Hernandez
3ba1d33fbe chore: agent points hook feedback (#1727)
* agent points feedback

* agent feeddback
2026-02-11 15:35:14 -08:00
Seshanth.S
886e02f53d SELF-1938 sumsub integration (#1661)
* Sumsub: Update keychain and types

* sumsub: ProvingMachine changes - WIP

* fix: remove duplicate identifier

* update proving machine

* Refactor && Continue onchain registration if user left the app

* fix register flow

* Add hooks to KycSuccessScreen

* Integrate KycVerifiedScreen (#1686)

* Integrate KycVerifiedScreen & Fix race conditions

* yarn lint

* lint

* lint

* add mock kyc

* fix disclose flow

* yarn lint

* Feat/add kyc home screen card design (#1708)

* feat: add new designs to the kycIdCard

* refactor: Update KycIdCard design to match IdCard styling

* feat: update document cards + dev document

* feat: update empty id card for new design

* feat: update pending document card design

* feat: update expired doc + unregistered doc cards from new design

* fix: unregisted id card button links to continue registration screen

* fix: logo design on document cards

* feat: add 6 different backgrounds for ids

deterministically shows 1 of 6 backgrounds for each document | fix: fixed document designs not displaying correctly.

* chore: trigger CI rebuild

* feat: Integrate PendingIdCard to Homescreen

* fix KycIdCard.tsx

---------

Co-authored-by: seshanthS <seshanth@protonmail.com>

* lint

* fix tests

* fix: cleanup only on unmount

* coderabbit comments

* fix: cleanup unused code

* fix: edge case for German Passports with D<< nationality code

* fix tests

* review comments

* review comments

* lint

* Hide duplicated cards in Homescreen

* remove console.log

* fix patch

* remove unused vars

* agent updates

* agent feedback

* abstract colors and formatting

* agent feedback

* Regenerate Sumsub patch-package patch

* fix: handle malformed kyc payload in card background selector

* re-add for clean up

---------

Co-authored-by: Evi Nova <66773372+Tranquil-Flow@users.noreply.github.com>
Co-authored-by: Evi Nova <tranquil_flow@protonmail.com>
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
2026-02-11 13:51:10 -08:00
Evi Nova
73ca37f3b9 Feat/add logo confirmation screen (#1666)
* feat: initial logoConfirmation screen

* fix: center text in buttons

* fix: ensure biometric logo is not cropped

* fix: add spacing to logo confirm screen, consistent padding for buttons

* feat: add popup to logo confirmation screen

* fix: handle Sumsub cancellation correctly in Other ID flow

* feat: add pathway from logo confirmation -> sumsub -> success

* feat: add document type pre-selection for Sumsub SDK

* feat: add KycFailureScreen for when user clicks on failure notification

* feat: add KycConnectionErrorScreen for sumsub_initiation error

* refactor: edit RegistrationFallbackScreen for new design

Now only to be used for MRZ/NFC scan errors, instead of kyc connection/registration issues. Also updated to newest design for screen from Figma

* refactor: update AadhaarUploadErrorScreen for new design

* fix: removed unused countryCode variable and useRoute import

* fix: Sorted imports (moved kyc after documents/selection imports)

fix CI

* chore: lint/prettier

* fix: CI error

* refactor: Split RegistrationFallbackScreen into MRZ/NFC error versions

* feat: add link from RegistrationFallbackNFCScreen -> DocumentNFCTrouble

Clicking on the question mark now takes user to this screen that can help them diagnose issue

* fix: on clicking question mark, dismiss screen returns to correct screen

* chore: yarn prettier

* test: fix failing test for CI
2026-02-06 22:27:50 +10:00
Justin Hernandez
63fd92da95 chore: clean up navigation index (#1703)
* abstract nav types

* fix points flow callbacks
2026-02-05 09:07:09 -08:00
Leszek Stachowski
2ebf7918c7 chore: self UUID namespace as a const (#1685) 2026-02-03 17:14:34 +05:30
Justin Hernandez
8b87ba36ab [SELF-1952] UI: Create KYC verified screen; prompt to enter proving flow (#1681)
* first pass at kyc verified screen

* finalize kyc verified design

* add queue buffer
2026-02-02 16:34:08 -08:00
Leszek Stachowski
a6c84d80f7 feat(kyc): register fcm token for sumsub verification (#1673)
* feat(kyc): register fcm token for sumsub verification

* fix tests

* remove unused import

* fix lint
2026-01-30 09:35:32 -08:00
Justin Hernandez
ec7ad1e66d SELF-1932: sumsub success screen (#1667)
* fix typos

* typo

* match screen design. fix tests
2026-01-28 21:27:22 -08:00
Justin Hernandez
c7c9985d91 SELF-1889: Initiate Sumsub during onboarding error flows (#1662)
* integrate sumsub into error flows

* formatting

* fix test

* format

* clean up

* udpate flows

* agent feedback

* updates

* save wip updates

* clean up design

* updates

* lint

* agent feedback

* formatting

* fix
2026-01-28 20:10:50 -08:00
Justin Hernandez
ba856226d8 SELF-1812: integrate sumsub into mobile app (#1650)
* sumsub initial pass

* add sumsub tee url

* agent feedback and fixes

* update lock

* agent feedback

* fix types

* agnet feedback

* fix mock

* agent feedback

* lazy load sumsub screen

* white button color

* fix lint

* add debug url link

* allow us to see recordings

* debug maestro run

* disable e2e screen recording for now. don't load sumsub logic when running e2e test

* remove lazy loading

* skip installing sumsub plugin

* retest ios e2e

* get e2e tests passing

* clean up
2026-01-26 14:06:36 -08:00
Evi Nova
27d067c180 fix: implemented fix for skipped nfcScanner tests on ios and android (#1628)
* fix: implemented fix for skipped nfcScanner tests on ios and android

* chore: yarn prettier
2026-01-26 16:04:53 +10:00
Justin Hernandez
04f67ed2df Always skip document selector for single valid document; remove toggle and info text (#1622)
* Remove skip info text

* prettier

* fix test
2026-01-20 13:11:36 -08:00
Justin Hernandez
5b5110925a [SELF-810] Edge-to-edge: add iOS-only SystemBars wrapper and update Android handling (#1610)
* Update edge-to-edge handling

* update lock file

* formatting

* agent feedback
2026-01-15 10:32:55 -08:00
Seshanth.S
bcbb8affd4 SELF-1768: fix deeplink navigation (#1598)
* fix deeplink navigation

* fix tests

* fix typing

---------

Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
2026-01-13 13:41:48 -08:00
Justin Hernandez
665545cd65 Centralize keychain error helpers and add unit tests (#1571)
* Add keychain error tests

* format
2026-01-10 00:43:36 -08:00
Justin Hernandez
9d4c62225f Rename staleness hook file to useProofDisclosureStalenessCheck and add unit tests (#1572)
* Add staleness hook test

* format
2026-01-10 00:42:15 -08:00