mirror of
https://github.com/selfxyz/self.git
synced 2026-04-27 03:01:15 -04:00
* add ios swift handlers
* Add lifecycle completion and optional relay listener
* agent feedback
* save wip
* fix compiling
* finalize feedback
* agent feedback
* fix ci
* udpate specs
* feat: implement React Native adapters for authentication, documents, and networking
- Added new adapters for authentication, document management, and network communication tailored for React Native.
- Introduced `createAuthAdapter`, `createDocumentsAdapter`, and `createNetworkAdapter` to streamline integration with React Native's capabilities.
- Updated `SelfClientProvider` to utilize the new adapter factory for improved modularity and maintainability.
- Enhanced package dependencies to include necessary libraries for secure storage and hashing.
This update enhances the SDK's functionality and prepares it for better cross-platform compatibility.
* refactor: update specs to streamline documentation and remove obsolete entries
- Removed the "Keep / Modify / Delete" section from the specs to simplify the document structure.
- Updated the remaining specifications to reflect the current architecture and integration paths, including the introduction of the new `SPEC-RN-SDK.md` for the `<SelfVerification />` RN WebView wrapper component.
- This change enhances clarity and aligns the documentation with recent architectural decisions.
* prettier
* update gitignore to include swift build paths
* update gems
* address pr feedback and pipeline errors
* agent feedback. also include follow up work items
* add spec guide rules
* add markdown files to prettier formatting and update
* add status line update spec guide
* add new specs
* formatting
* format all markdown files
* more formatting
* consolidate into overview
* update spec and template guidelines
* refactor specs
* save wip
* move status up
* feat: add biometrics and camera bridge adapters
Create biometrics adapter (authenticate, isAvailable, getBiometryType) and camera adapter (scanMRZ, isAvailable) matching the native KMP handler response shapes. Wire both into webview-app SelfClientProvider. Includes 6 new tests (50 total, all passing).
* feat: add web fallback adapters and wire in SelfClientProvider
- Create IndexedDB documents adapter and console/fetch
analytics adapter in webview-bridge (documents-web.ts,
analytics-web.ts) per Person 1 spec Section 4
- Create equivalent browser adapters in mobile-sdk-alpha
per Person 4 Chunk 4F (documents, crypto, analytics,
haptic)
- Wire web fallbacks into SelfClientProvider — documents
and analytics no longer cross the bridge
- 32 new tests across both packages, all passing
- fake-indexeddb added as devDep to both packages
* feat: remove 4 Android web-fallback handlers
- Delete DocumentsBridgeHandler (146 LOC)
- Delete CryptoBridgeHandler (177 LOC)
- Delete AnalyticsBridgeHandler (94 LOC)
- Delete HapticBridgeHandler (94 LOC)
- Remove registrations from SelfVerificationActivity
- Android now registers 5 handlers: NFC, Camera,
Biometrics, SecureStorage, Lifecycle
- Documents, crypto, analytics, and haptic are now
handled by web fallback adapters in the WebView
* style: align DocumentsBridgeHandler param extraction
Standardize iOS DocumentsBridgeHandler to use
?.jsonPrimitive?.content for parameter extraction,
matching the convention used by all other iOS handlers.
* feat: add MiniPay sample app
Create Compose Multiplatform sample app showing how
third-party integrators embed Self identity verification
via SelfSdk.launch(). Two native screens (Home, Result);
all verification logic runs in the SDK's WebView.
Shared Kotlin (commonMain):
- App.kt: NavHost with home/result navigation
- MainViewModel.kt: SDK launch + callback routing
- HomeScreen.kt: status card + "Verify Identity" button
- ResultScreen.kt: success/failure with error mapping
- Theme.kt: MiniPay-style Material 3 colors
Android:
- MainApplication.kt: SelfSdk.configure() in onCreate
- MainActivity.kt: passes SDK instance to Compose
- AndroidManifest.xml: NFC, Camera, Biometric, Internet
permissions + NFC TECH_DISCOVERED intent filter
- res/xml/nfc_tech_filter.xml: IsoDep for passport NFC
iOS Kotlin:
- MainViewController.kt: ComposeUIViewController entry
iOS Swift (iosApp/):
- iOSApp.swift: provider registration with
SdkProviderRegistry (same pattern as kmp-test-app)
- ContentView.swift: UIViewControllerRepresentable
- Xcode project with NFC/Camera entitlements
Spec deviation — single-module vs two-module:
The spec directory diagram (lines 88-120) shows a
separate androidApp/ module, but the spec's own build
config (lines 384-447) has composeApp using the
androidApplication plugin — meaning composeApp IS the
Android app. These contradict: you cannot have two
androidApplication modules. The existing kmp-test-app
uses the same single composeApp pattern. We follow the
build config + test app precedent.
Build verified on all targets:
- compileDebugKotlinAndroid: BUILD SUCCESSFUL
- compileKotlinIosArm64: BUILD SUCCESSFUL
- compileKotlinIosSimulatorArm64: BUILD SUCCESSFUL
* style: Rename webAnalyticsAdapter to consoleAnalyticsAdapter
Align web analytics adapter naming with updated spec
(specs/person1-webview/SPEC.md section 4c).
- Rename webAnalyticsAdapter → consoleAnalyticsAdapter
- Rename WebAnalyticsOptions → ConsoleAnalyticsOptions
- Update barrel export in adapters/index.ts
- Update import in SelfClientProvider.tsx
- Update all references in analytics-web.test.ts
The new name better describes the adapter's purpose: a
console-logging (+ optional HTTP endpoint) fallback for
environments without a native bridge.
Verified: webview-bridge build clean, 63/63 tests pass,
webview-app type-check clean.
* refactor: Align Person 4 adapters with updated spec
Rename haptic + fix crypto algo normalization per updated
specs/person4-sdk-core/SPEC.md (Chunk 4F).
Haptic:
- createNoOpHapticFeedback → createNoOpHapticAdapter
- Updated barrel export, re-export, and test references
Crypto:
- Replace static ALGO_MAP lookup with regex normalization:
algo.toUpperCase().replace(/^SHA(\d)/, 'SHA-$1')
- Handles all variants: sha256, SHA256, sha-256, SHA-256
- Add tests for already-hyphenated and uppercase inputs
Verified: 20/20 browser adapter tests pass, tsc clean.
* fix: resolve 7 Android device testing bugs in SDK + MiniPay
Fix issues found during physical device testing (Pixel 8
Pro) of the MiniPay sample app end-to-end flow.
SDK fixes (kmp-sdk):
- Use activityResultRegistry.register() instead of
activity.registerForActivityResult() to avoid
IllegalStateException when registering after onStart
- Replace FragmentActivity with ComponentActivity
(AndroidX 1.9.x changed the class hierarchy)
- Change SelfVerificationActivity theme to
Theme.AppCompat.NoActionBar (AppCompatActivity
requires an AppCompat theme)
- Rewrite AndroidWebViewHost to use WebViewAssetLoader
with custom PathHandler, serving bundled Vite assets
under https://appassets.androidplatform.net/ to fix
CORS, history.replaceState, and asset path resolution
- Add runtime permission requests for Camera + NFC in
SelfVerificationActivity.onCreate()
MiniPay fixes (kmp-minipay-sample):
- Create expect/actual platformLaunch to thread Android
Activity to SDK without leaking platform types into
commonMain
- Set debug = false to load bundled assets instead of
emulator dev server URL
Tested on Pixel 8 Pro: app launches, verification
WebView opens, camera scans for MRZ. Full passport
scan untested (no document available).
* feat: implement @selfxyz/rn-sdk React Native SDK
Thin <SelfVerification /> component wrapping react-native-webview
that embeds Self's identity verification flow. Bridges NFC, camera,
biometrics, keychain, and lifecycle to native via MessageRouter.
- MessageRouter: routes WebView bridge messages to domain handlers
- 5 handlers: lifecycle, biometrics, secureStorage, nfc, camera
- Platform.select asset loading (Android file://, iOS RNFS bundle)
- 59 unit tests, build + typecheck clean
- ReactNativeWebView transport detection added to webview-bridge
* fix: Remove dead code and persist verification state
Claude identified some gaps in the spec. Fixed to match:
- Delete unused onVerificationSuccess/Failure/Cancelled methods
from MainViewModel (sdkCallback handles all cases)
- Add expect/actual AppStorage (SharedPreferences / NSUserDefaults)
to persist HomeState across app restarts
- Update homeState eagerly in sdkCallback.onSuccess() so Android
system back button shows correct state on HomeScreen
* refactor: migrate webview-app from Tamagui to @selfxyz/euclid-web
Replace Tamagui + react-native-web UI framework with Self's
official euclid-web component library across all 10 screens.
Simplify Vite config, remove RN aliases, and fix country flag
emoji rendering with proper ISO 3166-1 alpha-3 to alpha-2
conversion.
- Remove tamagui, @tamagui/config, react-native-web deps
- Add @selfxyz/euclid-web and @selfxyz/euclid-core
- Rewrite 6 screens as euclid direct replacements
- Compose 4 screens from euclid primitives
- Fix fonts.css for euclid font family names
- Add shared countryFlags utility (alpha-3 → alpha-2 lookup)
- Clean up tsconfig.json and stale .tamagui cache
* fix pipeline
* formatting
* fix tests
* fix type error
* address feedback
* fix formatting
* update specs and create handoff doc for new pull request
---------
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
Co-authored-by: Tranquil-Flow <tranquil_flow@protonmail.com>
99 lines
3.0 KiB
YAML
99 lines
3.0 KiB
YAML
# GitGuardian configuration for ggshield
|
|
# This file configures which files and secrets to ignore during scanning
|
|
|
|
# Ignore specific file patterns
|
|
paths_ignore:
|
|
# Gitleaks configuration file (contains example secrets/patterns for detection)
|
|
- ".gitleaks.toml"
|
|
|
|
# Mock certificates for testing (these are intentionally committed test data)
|
|
- "**/mock_certificates/**/*.key"
|
|
- "**/mock_certificates/**/*.crt"
|
|
- "**/mock_certificates/**/*.pem"
|
|
- "**/constants/mockCertificates.ts"
|
|
- "common/src/mock_certificates/**"
|
|
- "common/src/mock_certificates/aadhaar/mockAadhaarCert.ts"
|
|
- "common/src/utils/passports/genMockIdDoc.ts"
|
|
|
|
# Test files with mock credentials
|
|
- "**/rn-sdk/src/__tests__/**"
|
|
|
|
# Test data files
|
|
- "**/test/**/*.key"
|
|
- "**/test/**/*.crt"
|
|
- "**/test/**/*.pem"
|
|
- "**/tests/**/*.key"
|
|
- "**/tests/**/*.crt"
|
|
- "**/tests/**/*.pem"
|
|
|
|
# Mock data files
|
|
- "**/mock/**/*.key"
|
|
- "**/mock/**/*.crt"
|
|
- "**/mock/**/*.pem"
|
|
|
|
# Demo app test data
|
|
- "**/demo-app/**/mock/**"
|
|
- "**/demo-app/**/test-data/**"
|
|
- "**/test-data/**"
|
|
- "**/mock-data/**"
|
|
|
|
# Generated test files
|
|
- "**/generated/**/*.key"
|
|
- "**/generated/**/*.crt"
|
|
- "**/generated/**/*.pem"
|
|
|
|
# iOS frameworks and build artifacts
|
|
- "**/*.xcframework"
|
|
- "**/*.xcframework/**"
|
|
- "**/*.swiftinterface"
|
|
- "**/NFCPassportReader.xcframework/**"
|
|
- "**/OpenSSL.xcframework/**"
|
|
- "**/SelfSDK.xcframework/**"
|
|
- "**/packages/mobile-sdk-alpha/ios/Frameworks/**"
|
|
- "**/packages/mobile-sdk-alpha/ios/SelfSDK/**"
|
|
# Ignore specific secret types for mock files
|
|
secrets_ignore:
|
|
- "Generic Private Key" # For mock certificate keys
|
|
- "Generic Certificate" # For mock certificates
|
|
- "RSA Private Key" # For mock RSA keys
|
|
- "EC Private Key" # For mock EC keys
|
|
|
|
secret:
|
|
ignored_matches:
|
|
- match: 2036b4e50ad3042969b290e354d9864465107a14de6f5a36d49f81ea8290def8
|
|
name: prebuilt-ios-arm64-apple-ios.private.swiftinterface
|
|
ignored_paths:
|
|
- ".gitleaks.toml"
|
|
- "**/*.swiftinterface"
|
|
- "**/*.xcframework/**"
|
|
- "**/packages/mobile-sdk-alpha/ios/Frameworks/**"
|
|
- "**/OpenSSL.xcframework/**"
|
|
- "**/demo-app/**/mock/**"
|
|
- common/src/mock_certificates/aadhaar/mockAadhaarCert.ts
|
|
- "**/NFCPassportReader.xcframework/**"
|
|
- common/src/utils/passports/genMockIdDoc.ts
|
|
- "**/tests/**/*.crt"
|
|
- "**/mock_certificates/**/*.crt"
|
|
- "**/mock_certificates/**/*.key"
|
|
- "**/demo-app/**/test-data/**"
|
|
- "**/generated/**/*.key"
|
|
- "**/SelfSDK.xcframework/**"
|
|
- "**/mock/**/*.crt"
|
|
- "**/generated/**/*.crt"
|
|
- "**/test/**/*.key"
|
|
- "**/mock/**/*.key"
|
|
- "**/test/**/*.crt"
|
|
- "**/test/**/*.pem"
|
|
- "**/constants/mockCertificates.ts"
|
|
- "**/mock/**/*.pem"
|
|
- "**/mock_certificates/**/*.pem"
|
|
- "**/mock-data/**"
|
|
- "**/packages/mobile-sdk-alpha/ios/SelfSDK/**"
|
|
- "**/tests/**/*.key"
|
|
- "**/generated/**/*.pem"
|
|
- "**/tests/**/*.pem"
|
|
- "**/test-data/**"
|
|
- common/src/mock_certificates/**
|
|
- "**/*.xcframework"
|
|
version: 2
|