mirror of
https://github.com/selfxyz/self.git
synced 2026-01-08 22:28:11 -05:00
* docs: align migration rules with updated checklist * docs: restore demo sample sections
292 lines
10 KiB
Plaintext
292 lines
10 KiB
Plaintext
---
|
|
description: Comprehensive migration strategy and testing-first approach for porting identity verification logic from app to mobile-sdk-alpha package
|
|
version: 1.0.0
|
|
status: active
|
|
owners:
|
|
- team: mobile-identity
|
|
- team: sdk-platform
|
|
lastUpdated: 2025-01-12
|
|
specId: mobile-sdk-migration
|
|
importanceScore: 90
|
|
importanceJustification: Critical framework for systematically migrating core identity verification functionality to a partner-consumable SDK while maintaining quality and testing coverage.
|
|
contextUsageNote: If this file is used to add in-context notes, include a single italicized line stating what specific information was used from this file in sentence case.
|
|
---
|
|
|
|
# Mobile SDK Migration Context
|
|
|
|
## Migration Strategy Overview
|
|
|
|
### Testing-First Approach
|
|
- **Create tests BEFORE migrating logic** to verify functionality works correctly
|
|
- **Dual testing environment**: Jest (app) + Vitest (mobile-sdk-alpha)
|
|
- **Validation commands**: `yarn test:build` in both app and mobile-sdk-alpha directories
|
|
- **Incremental migration**: One checklist item at a time with thorough validation
|
|
|
|
### Test Environment Differences
|
|
|
|
#### App (Jest)
|
|
- **Location**: `app/` directory
|
|
- **Config**: `jest.config.cjs` with React Native preset
|
|
- **Setup**: `jest.setup.js` with comprehensive mocks
|
|
- **Module mapping**: `@/` → `src/`, `@tests/` → `tests/src/`
|
|
- **Test command**: `yarn test:build` (builds deps + types + bundle analysis + tests)
|
|
|
|
#### Mobile SDK Alpha (Vitest)
|
|
- **Location**: `packages/mobile-sdk-alpha/` directory
|
|
- **Config**: `vitest.config.ts` with Node environment
|
|
- **Setup**: `tests/setup.ts` with console noise suppression
|
|
- **Test command**: `yarn test:build` (build + test + types + lint)
|
|
|
|
### Migration Validation Workflow
|
|
|
|
1. **Pre-migration**: Create comprehensive tests in mobile-sdk-alpha for target functionality
|
|
2. **Migration**: Port logic from app to mobile-sdk-alpha
|
|
3. **Validation**: Run `yarn test:build` in both directories
|
|
4. **Integration**: Update app to consume mobile-sdk-alpha
|
|
5. **Final validation**: Ensure app tests pass with new SDK consumption
|
|
|
|
## Migration Checklist Items
|
|
|
|
### 1. Processing Helpers (MRZ)
|
|
**Current Location**: `app/src/utils/` (MRZ utilities)
|
|
**Target Location**: `packages/mobile-sdk-alpha/src/processing/`
|
|
**Testing Strategy**:
|
|
- Create MRZ parsing tests with sample passport data
|
|
- Test cross-platform compatibility (React Native vs Web)
|
|
|
|
### 2. Validation Module
|
|
**Current Location**: `app/src/utils/` (document validation logic)
|
|
**Target Location**: `packages/mobile-sdk-alpha/src/validation/`
|
|
**Testing Strategy**:
|
|
- Unit tests for each validation rule
|
|
- Test with valid/invalid document data
|
|
- Test edge cases and error conditions
|
|
|
|
### 3. Proof Input Generation
|
|
**Current Location**: `app/src/utils/proving/`
|
|
**Target Location**: `packages/mobile-sdk-alpha/src/proving/`
|
|
**Testing Strategy**:
|
|
- Test register input generation with mock data
|
|
- Test disclose input generation with various scenarios
|
|
- Validate TEE input format compliance
|
|
|
|
### 4. Crypto Adapters
|
|
**Current Location**: `app/src/utils/` (crypto utilities)
|
|
**Target Location**: `packages/mobile-sdk-alpha/src/crypto/`
|
|
**Testing Strategy**:
|
|
- Test WebCrypto vs @noble/* fallback detection
|
|
- Test CSPRNG generation across platforms
|
|
- Test timing-safe comparison functions
|
|
- Parity tests between implementations
|
|
|
|
### 5. TEE Session Management
|
|
**Current Location**: `app/src/utils/` (WebSocket handling)
|
|
**Target Location**: `packages/mobile-sdk-alpha/src/tee/`
|
|
**Testing Strategy**:
|
|
- Test WebSocket wrapper with mock server
|
|
- Test abort, timeout, and progress events
|
|
- Test connection lifecycle management
|
|
|
|
### 6. Attestation Verification
|
|
**Current Location**: `app/src/utils/` (certificate validation)
|
|
**Target Location**: `packages/mobile-sdk-alpha/src/attestation/`
|
|
**Testing Strategy**:
|
|
- Test PCR0 validation with sample data
|
|
- Test public key extraction
|
|
- Test certificate chain validation
|
|
|
|
### 7. Protocol Synchronization
|
|
**Current Location**: `app/src/utils/` (protocol tree handling)
|
|
**Target Location**: `packages/mobile-sdk-alpha/src/protocol/`
|
|
**Testing Strategy**:
|
|
- Test protocol tree fetching with pagination
|
|
- Test TTL cache behavior
|
|
- Test rate limiting and exponential backoff
|
|
- Test memory bounds enforcement
|
|
|
|
### 8. Artifact Management
|
|
**Current Location**: `app/src/utils/` (manifest handling)
|
|
**Target Location**: `packages/mobile-sdk-alpha/src/artifacts/`
|
|
**Testing Strategy**:
|
|
- Test manifest schema validation
|
|
- Test CDN download with caching
|
|
- Test signature verification
|
|
- Test storage adapter integration
|
|
|
|
### 9. Sample Applications
|
|
**Target Location**: `packages/mobile-sdk-alpha/samples/`
|
|
**Testing Strategy**:
|
|
- Create React Native demo with MRZ → proof flow
|
|
- Create web demo with browser-based MRZ input
|
|
- Test iOS `OpenPassport` URL scheme
|
|
|
|
### 10. SDK Integration into App
|
|
**Migration Strategy**:
|
|
- Replace existing modules with SDK imports
|
|
- Update import paths throughout app
|
|
- Validate all existing functionality works
|
|
- Ensure no regression in app behavior
|
|
|
|
### 11. In-SDK Lightweight Demo
|
|
**Target Location**: `packages/mobile-sdk-alpha/demo/`
|
|
**Testing Strategy**:
|
|
- Embedded React Native demo using MRZ → proof flow
|
|
- Test theming hooks integration
|
|
- Validate build and run instructions
|
|
|
|
## Testing Best Practices
|
|
|
|
### Test Data Management
|
|
- **Mock data**: Create comprehensive test fixtures for each module
|
|
- **Sensitive data**: Never log PII, credentials, or private keys
|
|
- **Redaction**: Use consistent patterns for sensitive field masking
|
|
- **Environment flags**: Use `DEBUG_SECRETS_TOKEN` for debug-level secrets
|
|
|
|
### Cross-Platform Testing
|
|
- **React Native**: Test on both iOS and Android simulators
|
|
- **Web**: Test with browser adapters
|
|
- **Platform detection**: Test platform-specific code paths
|
|
- **Native modules**: Mock native dependencies appropriately
|
|
|
|
### Performance Testing
|
|
- **Bundle size**: Monitor SDK bundle size impact
|
|
- **Memory usage**: Test memory bounds for large operations
|
|
- **Network efficiency**: Test rate limiting and caching
|
|
- **Startup time**: Measure SDK initialization impact
|
|
|
|
### Integration Testing
|
|
- **End-to-end flows**: Test complete user journeys
|
|
- **Error handling**: Test graceful degradation
|
|
- **Recovery mechanisms**: Test error recovery and retry logic
|
|
- **Backward compatibility**: Ensure existing app functionality works
|
|
|
|
## Migration Validation Checklist
|
|
|
|
### Pre-Migration
|
|
- [ ] Create comprehensive test suite in mobile-sdk-alpha
|
|
- [ ] Define test fixtures and mock data
|
|
- [ ] Set up cross-platform testing environment
|
|
- [ ] Document current functionality and edge cases
|
|
|
|
### During Migration
|
|
- [ ] Port logic incrementally (one checklist item at a time)
|
|
- [ ] Run `yarn test:build` in mobile-sdk-alpha after each item
|
|
- [ ] Validate functionality matches original implementation
|
|
- [ ] Update documentation and type definitions
|
|
- [ ] Re-export new modules via `packages/mobile-sdk-alpha/src/index.ts` and document them in `packages/mobile-sdk-alpha/README.md`
|
|
|
|
### Post-Migration
|
|
- [ ] Update app to consume mobile-sdk-alpha
|
|
- [ ] Run `yarn test:build` in app directory
|
|
- [ ] Validate all existing app tests pass
|
|
- [ ] Test integration with existing app functionality
|
|
- [ ] Performance validation and bundle size analysis
|
|
|
|
### Final Validation
|
|
- [ ] End-to-end testing of complete flows
|
|
- [ ] Cross-platform compatibility verification
|
|
- [ ] Partner SDK consumption testing
|
|
- [ ] Documentation and example updates
|
|
- [ ] Release preparation and versioning
|
|
|
|
## Common Migration Patterns
|
|
|
|
### Module Structure
|
|
```typescript
|
|
// Before (app/src/utils/module.ts)
|
|
export function processData(data: InputType): OutputType {
|
|
// Implementation
|
|
}
|
|
|
|
// After (packages/mobile-sdk-alpha/src/module/index.ts)
|
|
export function processData(data: InputType): OutputType {
|
|
// Same implementation with enhanced error handling
|
|
}
|
|
|
|
// Test (packages/mobile-sdk-alpha/tests/module.test.ts)
|
|
describe('processData', () => {
|
|
it('should process valid data correctly', () => {
|
|
// Test implementation
|
|
});
|
|
});
|
|
```
|
|
|
|
### Adapter Pattern
|
|
```typescript
|
|
// Cross-platform adapter interface
|
|
export interface ScannerAdapter {
|
|
scan(): Promise<ScanResult>;
|
|
isSupported(): boolean;
|
|
}
|
|
|
|
// Platform-specific implementations
|
|
export class ReactNativeScannerAdapter implements ScannerAdapter {
|
|
// React Native implementation
|
|
}
|
|
|
|
export class WebScannerAdapter implements ScannerAdapter {
|
|
// Web implementation
|
|
}
|
|
```
|
|
|
|
### Error Handling
|
|
```typescript
|
|
// Consistent error types across SDK
|
|
export class SDKError extends Error {
|
|
constructor(
|
|
message: string,
|
|
public code: string,
|
|
public details?: Record<string, unknown>
|
|
) {
|
|
super(message);
|
|
this.name = 'SDKError';
|
|
}
|
|
}
|
|
```
|
|
|
|
## Security & Privacy Considerations
|
|
|
|
### Data Protection
|
|
- **Sensitive data**: Never log PII, credentials, or private keys in production
|
|
- **Secure storage**: Use appropriate storage mechanisms for sensitive data
|
|
- **Cleanup**: Properly clean up sensitive data after use
|
|
- **Validation**: Validate all inputs and outputs for security
|
|
|
|
### Privacy Features
|
|
- **Zero-knowledge proofs**: Ensure privacy-preserving verification
|
|
- **Selective disclosure**: Support minimal necessary attribute revelation
|
|
- **Identity commitments**: Maintain privacy of identity data
|
|
- **Audit trails**: Log access to sensitive operations without exposing data
|
|
|
|
## Performance Optimization
|
|
|
|
### Bundle Size
|
|
- **Tree shaking**: Ensure all exports support tree shaking
|
|
- **Code splitting**: Split large modules into smaller chunks
|
|
- **Dependency analysis**: Monitor and optimize dependencies
|
|
- **Bundle analysis**: Regular bundle size monitoring
|
|
|
|
### Runtime Performance
|
|
- **Lazy loading**: Load modules only when needed
|
|
- **Caching**: Implement appropriate caching strategies
|
|
- **Memory management**: Prevent memory leaks in long-running operations
|
|
- **Async operations**: Use proper async patterns for non-blocking operations
|
|
|
|
## Partner SDK Requirements
|
|
|
|
### API Design
|
|
- **Consistent interfaces**: Maintain consistent API patterns
|
|
- **Type safety**: Provide comprehensive TypeScript definitions
|
|
- **Error handling**: Clear error messages and error codes
|
|
- **Documentation**: Comprehensive API documentation
|
|
|
|
### Integration Support
|
|
- **Branding**: Support for partner branding and theming
|
|
- **Callbacks**: Async operation callbacks for integration
|
|
- **Configuration**: Flexible configuration options
|
|
- **Examples**: Comprehensive integration examples
|
|
|
|
This context provides a comprehensive framework for executing the migration checklist with a testing-first approach, ensuring quality and reliability throughout the migration process.
|
|
|
|
$END$
|