* Standardize config param handling across Android & iOS
- Add shared SdkConstants (loopback host, debug port, didit host, tour path, default URLs)
- Add shared QueryParamsBuilder replacing duplicated platform-specific builders
- Android: deserialize config/request via kotlinx.serialization instead of org.json
- Android: add belt-and-suspenders debug guard (isDebugMode && isDebuggable)
- Android: remove redundant EXTRA_DEBUG_MODE and EXTRA_DEV_SERVER_URL intent extras
- iOS: replace local buildQueryParams/encodeParam with shared QueryParamsBuilder
- All default URLs now reference SdkConstants instead of hardcoded strings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Import KMP SdkConstants in Swift WebViewProviderImpl
- Replace hardcoded constants with SdkConstants.shared.* from KMP framework
- Replace "/tunnel/tour/1" with SdkConstants.shared.BUNDLED_TOUR_PATH
- Add SelfSdk as local package dependency in self-sdk-swift Package.swift
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Internalize CryptoProvider — remove from public SDK interface
CryptoProvider is never called at runtime (WebView uses Web Crypto API
directly). Make the interface, its Android implementation, and the
registry field internal so consumers no longer need to provide or
register a crypto implementation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix ci
* fix: temporarily use constants from self-sdk-swift
* lint
* fix: improve license header handling in check-license-headers script
* lint
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add iOS native shell package (NSL-02)
Plain Swift implementation of the WebView host with bridge handlers
for secure storage (Keychain), crypto (EC P-256), and lifecycle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add Android native shell package (NSL-01)
Plain Kotlin implementation of the WebView host with bridge handlers
for secure storage (EncryptedSharedPreferences), crypto (Android Keystore
EC P-256), and lifecycle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: integrate Sumsub Web SDK into ProviderLaunchScreen (WV-05)
Rewrites ProviderLaunchScreen to launch Sumsub Web SDK, adds KYC
provider types, result normalization, and a ProviderResultScreen
for displaying verification outcomes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: update spec status for NSL-01, NSL-02, WV-05 to in-progress
All three items are code-complete but need integration testing
before marking done.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: add build-pipeline workstream specs, update NSL-03 and BP-01 status
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add WebView bundle build pipeline (BP-01)
Build script copies webview-app dist into both native shell asset
directories. Gradle preBuild validation fails fast when bundle is
missing. Root package.json gets build:sdk-* scripts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add SDK test apps for Android and iOS (NSL-03)
Minimal test apps to exercise native shells end-to-end:
- Android: Jetpack Compose app using SelfSdk.launch() via composite build
- iOS: SwiftUI app using SelfSdk.createViewController() via local SPM dep
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* update lockfile
* fix: address CodeRabbit PR review findings for native shells
- Fix iOS double callback: add hasEmittedResult flag to LifecycleHandler
so dismiss() won't fire onCancelled after onResult already emitted
- Fix Android error result codes: use RESULT_FIRST_USER for failed
verifications instead of always RESULT_OK; add dedicated handler in
SelfSdk.handleResult
- Fix iOS production query params: append params to file URL via
URLComponents so WebView receives teeUrl/verificationId/userId
- Fix build:sdk-ios false-green: chain swift build after bundle script
- Add expectedRequestCode param to handleResult for flexibility
- Upgrade security-crypto 1.1.0-alpha06 → 1.1.0 stable
- Improve callback type safety: onSuccess takes raw JSON string,
onFailure takes SelfSdkException instead of generic Exception
- Add requireBiometric intent comments to both SecureStorageHandlers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address remaining CodeRabbit PR review findings (round 2)
- iOS BridgeResponse: add requestId/success fields, rename result→data to match JS bridge contract
- iOS test app: fix callback deallocation with Coordinator pattern
- ProviderLaunchScreen: fail closed on missing verificationId, fix retry via retryCount state
- ProviderResultScreen: guard unknown status with fallback to error config
- build-webview-bundle.sh: validate index.html before deleting targets
- Package.swift: fix SPM resource path with target path/sources
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* save chunk 1e work
* chunk 2f
* pr feedback
* fix pr feedback
* cr feedback
* remove dupe var
* feedback from cr
* add kmp:start dx helper
* save web consolidtion work for later
* add specs
* update
* pr fixes
* update reorg plan
* add coverage gaps spec
* pr feedback
* save current wip iteration
* finalize spec work
* save chunk 1e work
* chunk 2f
* pr feedback
* fix pr feedback
* cr feedback
* remove dupe var
* feedback from cr
* add kmp:start dx helper
* save web consolidtion work for later
* add specs
* update
* pr fixes
* update reorg plan
* add kotlin debug app
* add specs
* first kmp sdk version
* add deploy script
* save working nfc implementation
* save demo app flow wip
* agent feedback
* show viewfinder on mrz
* save working scan
* add kotlin formatting
* remove mrz overlay
* fix expiry date
* add feedback to mrz san
* save improved nfc scanning
* save wip
* save gitignore and md state
* add logging and error handling. get iOS demo app working
* format
* add swift formatting
* enable iOS camera
* save ios mrz implementation
* nfc scanning works
* final optimizations
* add tests
* fixes
* better linting
* agent feedback
* bug fixes
* formatting
* agent feedback
* fix app breaking on run
* consolidate kotlin and swift clean up commands
* fix pipeline by installing swiftlint
* fix blurry scanning
* fix ci
---------
Co-authored-by: turnoffthiscomputer <colin.remi07@gmail.com>
* Update dependency versions
* Fix gesture handler Android dependency (#1611)
* Patch screens codegen type (#1609)
* Downgrade Sentry React Native (#1612)
* fix patches and packages
* downgrade versions for gesture handler and screens
* agent feedback
* fix ios building
* allow ios tets to pass
* formatting
* make cache more resilient
* Address CodeRabbitAI review comments
This commit addresses all 7 unresolved CodeRabbitAI comments on PR #1606:
Patch-package error handling (comments #1, #2, #3):
- stderr capture already implemented in both root and workspace patch runs
- Add CI warning when patches fail silently instead of exiting with 0
- Log completion status in CI mode for visibility
Critical Mixpanel dependency fix (comment #5):
- Add explicit Mixpanel-swift pod declaration to fix E2E build failures
- Ensures Mixpanel is available even when NFCPassportReader is skipped during E2E testing
React-native-web validation (comment #4):
- Verified no usage of deprecated findNodeHandle, pointerEvents: 'box-none', or createPortal
- Safe to upgrade from 0.19 to 0.21.2
CI workflow improvements (comments #6, #7):
- Create cache-sdk-build composite action for consistent SDK build artifact caching
- Replace all direct actions/cache@v4 usage with cache-yarn composite action
- Replace all direct actions/cache/restore@v4 and save@v4 with cache-sdk-build
- Add nested require() validation step before tests to fail fast on problematic patterns
All changes follow repository coding guidelines for CI caching and test memory optimization.
* Extend cache composite actions to all SDK workflows
This commit extends the caching standardization from PR #1606 to include
mobile-sdk-ci.yml and core-sdk-ci.yml workflows.
New composite actions created:
- cache-mobile-sdk-build: For mobile SDK build artifacts
- cache-core-sdk-build: For core SDK build artifacts
Workflow updates:
- mobile-sdk-ci.yml: Replaced 5 instances of direct actions/cache with cache-mobile-sdk-build
- core-sdk-ci.yml: Replaced 4 instances of direct actions/cache with cache-core-sdk-build
All SDK CI workflows now use consistent caching patterns via composite actions,
following the AGENTS.md guideline: "Use shared composite actions from .github/actions
for CI caching instead of calling actions/cache directly."
Benefits:
- Consistent caching across all SDK workflows (qrcode, mobile, core)
- Centralized cache configuration - easier to maintain
- Follows established patterns from qrcode-sdk-ci.yml
* downgrade react-native-svg
* update pod lock file
* sort
* 2.9 release
* 2.9 release
* Remove debug console logs from generateTEEInputsRegister function in registerInputs.ts
* parse only the passport data during the dsc step
* Add ReferralScreen and integrate referral functionality
- Introduced ReferralScreen for sharing referral links via messages, WhatsApp, and clipboard.
- Updated navigation to include ReferralScreen in the home stack.
- Added new icons for sharing and messaging.
- Enhanced points utility functions to check user identity document registration and points disclosure status.
- Minor adjustments to existing components for better integration with the new referral feature.
* fix types
* fix font
* fix vertical spacing
* save current abstraction
* clean up linking
* clean up spurious ai slop comments
* add dinot bold font
* minify animations
* update fonts and add placeholder animation
* fix pipelines
* fix order
* Update dependencies and enhance Points component functionality
- Added `@react-native-masked-view/masked-view` and `react-native-linear-gradient` to dependencies for improved UI components.
- Refactored `PointHistoryList` to accept `ListHeaderComponent` and `onRefreshRef` props for better integration with parent components.
- Enhanced `Points` component to manage notification and backup point events, including user feedback through modals.
- Updated navigation to use `PointsNavBar` for a more cohesive user experience.
- Introduced new utility functions for managing incoming points and point event records.
* update lock
* update lock and project settings
* fix line height for android
* save wip referral message fix and deeplink setup
* Fix whatsapp link (#1352)
* add 2 new lines
* use path based param instead of query string
* use staging url for now
* SELF-1089: Fix black screen on Points (#1351)
* Fix black screen on Points
* Fix: black screen on Referral Page
* fix: prevent BlurView from displaying when IdDetailsScreen loses focus
* Fix Android message share (#1355)
* Referral flow (#1354)
* SELF-1139: update getUserAddress() (#1353)
* update getUserAddress()
* rename getUserAddress to getPointsAddress
* [SELF-1098, SELF-1099] polish gratification screen post referrer update history (#1356)
* fix: mark document as registered after restoring secret (#1350)
* update lock
* create useRegisterReferral hook and test
* add referral message test
* save wip register referral flow request
* use register referral from the home screen
* fix typing and sort screens
* fix linting issues
* register poitns and update tests
* use package
* fix tests
* simplify HomeScreen with hooks
* fix tests
* address tests
* abstract points logic, fix types and linting
* add test referral flow hook
* coderabbit feedback: fix refereral logic issues, remove sensitive logs
* move test referral flow button to dev settings screen
* close modal after referring and viewing gratification screen
* fix tests, remove alert, format
---------
Co-authored-by: Seshanth.S <35675963+seshanthS@users.noreply.github.com>
* add gratification bg; use safe bottom padding hook on home screen
* prep 2.7.4 as 2.9.0
* manually bump version for custom deploy
* match version code
* fix types
* formatting
* fix tests
* SELF-1144 - use real points on home screen and improve points screen (#1361)
* fix whitespace
* move effects for fetching points and incoming points to hooks, add items to deps array so that they refresh when we expect points to change.
* cleanup
* Add events for new Points Flow (#1362)
* remove deeplinkCallback from pointsSelfApp. (#1365)
* fix pipelines
* SELF-978: wire cloudbackup with points (#1360)
* wire cloudbackup with points
* wire cloudbackup with points
* Remove redundant setSelfPoints()
* add signature and simplify POST api requests (#1367)
* add signature and simplify POST api requests
* better gitleaks ignore
* update toml
* have gitguardian ignore gitleaks
* add buffer lib
* update api with 202 success code
* update scope and contract-address (#1366)
* fix navigation test
* SELF-915: Setup and add turnkey utils (#1314)
* Setup and add turnkey utils
* update CloudBackupScreen
* fix: turnkey
* add yarn.lock
* lint
* add podfile.lock
* fix deeplink
* fix tests: mock turnkey
* yarn nice
* update .gitleaksignore
* patch react-native-svg
* fix patch-package
* fix lineHeight
* points.tsx: fix lineHeight
* fix: recover with turnkey disabled state
* fix turnkey flow
* fix: address generation
* minify animations (#1368)
* fix pipelines
* fix false positives
* fix gitguardian
---------
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
* enable turnkey only on success
* use prod url
* fix tests and update mocks
* update version and fastlane readme
* pointsSelfApp: update scope
* bump android version to 117
* incremenet timestamp
* abstract points css, hide explore button for now, add points guardrail
* better logic
* simplify point event list data acquisition (#1375)
* simplify point event list data acquisition
* explain
* Remove BlurView in Points.tsx
* Move Points and IncomingPoints to the Point Events Store (#1363)
* add polling for event processing.
atomically update store state
* handle failed states and use real backend api
* improve concurrency reliability of pointevents
* move points to the store
* refresh all points on pull
* add points tracking events
* fix imports
* fix headers
* fix import
* fix misspelling
* enable apps link
* remove __DEV__ logging
* remove additional referall dev mode features
* Add turnkey env
* don't allow users to refer themselves
* prettier
* trim both addresses
* fix close webview button
* fix tests and format
* lint and format
* Update point rewards in NavBar component: change earned points from 20 to 44 and from 100 to 32.
* Refactor point rewards in NavBar component: replace hardcoded values with constants for backup and notification points, and update subscription state variable names for clarity.
* Update POINT_VALUES in types.ts: adjust point rewards for disclosure, notification, and backup events to 8, 44, and 32 respectively.
* App/fix backup points (#1381)
* Enhance backup completion tracking in Points component: Introduce a ref to manage backup check flag, ensuring points are recorded only when explicitly set, preventing false triggers from other navigation flows.
* Update API endpoint in getTotalPoints function: change URL from /distribution to /points for accurate points retrieval.
* formatting
* update points url
* Clear referrer on modal dismiss in useEarnPointsFlow hook to prevent retry loop
* use points private key to sign api requests
* formatting
* save working version of referral confirmation
* fix circular dependency
* don't fetch private key if unable to fetch points key
* add url
* add debug info
* Refactor optimistic points calculation in usePointEventStore: update return value to only include incomingPoints.amount, marking the optimistic approach for future improvement.
* save clean up
* clean useReferralConfirmation logic
* fix tests
* tests pass
* standardize android compile sdk version
* fix package version
* don't log errors
* Update app/src/hooks/useReferralConfirmation.ts
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* better test
* add turnkey entitlements
* fix linting
* remove entitlements
* prettier and fix lint
* update gradle version
* update lock file
* fix tests
* fix build failure
* bump android version to 118
* update date
* bump version for next build
* address failing pipelines due to cache issues
* Hide turnkey button (#1387)
* prep for 2.9.0 release
* patch turnkey to prevent keychain deletes
* add yarn.lock
* update yarn.lock
* enable buttons
* remove console logging from patch
* fix test
* skip tests
* fix test
* allow users to advance if they backup via turnkey
* Recognize Turnkey backups in onboarding (#1394)
* rename var
* update var name
* remove transform
* simplify tests to avoid oom issues
* fix check
* fix tests
---------
Co-authored-by: turnoffthiscomputer <colin.remi07@gmail.com>
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
Co-authored-by: Leszek Stachowski <leszek.stachowski@self.xyz>
Co-authored-by: Aaron DeRuvo <aaron.deruvo@clabs.co>
Co-authored-by: turnoffthiscomputer <98749896+remicolin@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* setup analytics adapter for self mobile sdk client and use in app
* wrap for context
* fix build
* yarn types is an alias for build when build just compiles ts
* ok unlock
* deeper
* ok this looks to work
* fix license check
* make sure it starts with this line
* someone didnt commit
* fix double analytics bug and builds
* lint