Files
self/.gitguardian.yml
turnoffthiscomputer c00241d327 Feat/person1 2 3 implementation (#1770)
* 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>
2026-02-18 21:32:20 -08:00

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