- Fix all TypeScript compilation errors (40+ fixes) - Add missing type definitions (TransactionRequest, SafeInfo) - Fix TransactionRequestStatus vs TransactionStatus confusion - Fix import paths and provider type issues - Fix test file errors and mock providers - Implement comprehensive security features - AES-GCM encryption with PBKDF2 key derivation - Input validation and sanitization - Rate limiting and nonce management - Replay attack prevention - Access control and authorization - Add comprehensive test suite - Integration tests for transaction flow - Security validation tests - Wallet management tests - Encryption and rate limiter tests - E2E tests with Playwright - Add extensive documentation - 12 numbered guides (setup, development, API, security, etc.) - Security documentation and audit reports - Code review and testing reports - Project organization documentation - Update dependencies - Update axios to latest version (security fix) - Update React types to v18 - Fix peer dependency warnings - Add development tooling - CI/CD workflows (GitHub Actions) - Pre-commit hooks (Husky) - Linting and formatting (Prettier, ESLint) - Security audit workflow - Performance benchmarking - Reorganize project structure - Move reports to docs/reports/ - Clean up root directory - Organize documentation - Add new features - Smart wallet management (Gnosis Safe, ERC4337) - Transaction execution and approval workflows - Balance management and token support - Error boundary and monitoring (Sentry) - Fix WalletConnect configuration - Handle missing projectId gracefully - Add environment variable template
6.2 KiB
6.2 KiB
Code Quality Guide
Standards and practices for maintaining high code quality in the Impersonator project.
Code Standards
TypeScript
- Strict Mode: Enabled
- Type Safety: All functions typed
- No
any: Avoidanytype - Interfaces: Use interfaces for object shapes
- Type Guards: Use type guards when needed
Code Style
- Formatting: Prettier
- Indentation: 2 spaces
- Semicolons: Required
- Quotes: Single quotes
- Trailing Commas: Yes
Naming Conventions
- Components: PascalCase (
WalletManager) - Functions: camelCase (
validateAddress) - Constants: UPPER_SNAKE_CASE (
MAX_GAS_LIMIT) - Types/Interfaces: PascalCase (
SmartWalletConfig) - Files: Match export name
Linting
ESLint Configuration
The project uses ESLint with Next.js configuration.
Run Linter:
pnpm lint
Fix Issues:
pnpm lint --fix
Common Rules
- No unused variables
- No console.log in production
- Consistent return statements
- Proper error handling
- No magic numbers
Formatting
Prettier Configuration
Automatic formatting on save (VS Code).
Manual Format:
npx prettier --write .
Formatting Rules
- 2 space indentation
- Single quotes
- Semicolons required
- Trailing commas
- 80 character line length (soft)
Code Review Checklist
Functionality
- Code works as intended
- Edge cases handled
- Error handling present
- No breaking changes
Code Quality
- Follows naming conventions
- Properly typed
- No magic numbers
- Comments where needed
- No code duplication
Security
- Input validation
- Secure storage used
- Authorization checks
- No sensitive data exposed
Testing
- Tests written
- Tests passing
- Coverage maintained
- Edge cases tested
Documentation
- JSDoc comments
- README updated if needed
- Changelog updated
- Breaking changes documented
Best Practices
1. Function Design
// ✅ Good: Single responsibility, typed, documented
/**
* Validates Ethereum address
* @param address - Address to validate
* @returns Validation result with checksummed address
*/
function validateAddress(address: string): ValidationResult {
// Implementation
}
// ❌ Bad: Multiple responsibilities, no types
function process(address) {
// Does too much
}
2. Error Handling
// ✅ Good: Proper error handling
try {
const result = await operation();
return result;
} catch (error: any) {
monitoring.error("Operation failed", error);
throw new Error("Operation failed");
}
// ❌ Bad: Swallowed errors
try {
await operation();
} catch (error) {
// Silent failure
}
3. Constants
// ✅ Good: Constants extracted
import { SECURITY } from "@/utils/constants";
const maxGas = SECURITY.MAX_GAS_LIMIT;
// ❌ Bad: Magic numbers
const maxGas = 10000000;
4. Type Safety
// ✅ Good: Proper typing
interface Config {
address: string;
networkId: number;
}
function createWallet(config: Config): Promise<Wallet> {
// Implementation
}
// ❌ Bad: No types
function createWallet(config) {
// Implementation
}
5. Component Structure
// ✅ Good: Clean component
export default function WalletManager() {
const { activeWallet } = useSmartWallet();
const [loading, setLoading] = useState(false);
const handleAction = useCallback(async () => {
// Implementation
}, [dependencies]);
return (
<Box>
{/* JSX */}
</Box>
);
}
// ❌ Bad: Messy component
export default function WalletManager() {
// Too much logic
// Unclear structure
// No memoization
}
Code Metrics
Complexity
- Cyclomatic Complexity: < 10 per function
- Function Length: < 50 lines
- File Length: < 500 lines
- Component Props: < 10 props
Maintainability
- Code Duplication: < 5%
- Test Coverage: > 80%
- Documentation: All public APIs
- Comments: Explain "why" not "what"
Refactoring Guidelines
When to Refactor
- Code duplication detected
- Function too long/complex
- Poor naming
- Hard to test
- Performance issues
Refactoring Steps
- Write tests first
- Make small changes
- Run tests frequently
- Keep functionality same
- Improve incrementally
Documentation Standards
JSDoc Comments
/**
* Validates Ethereum address with checksum verification
* @param address - The Ethereum address to validate
* @returns Validation result with checksummed address if valid
* @example
* const result = validateAddress("0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb");
* if (result.valid) {
* const checksummed = result.checksummed!;
* }
*/
export function validateAddress(address: string): ValidationResult {
// Implementation
}
README Updates
Update README when:
- Adding new features
- Changing setup process
- Updating dependencies
- Breaking changes
Performance Considerations
Optimization
- Use
useMemofor expensive calculations - Use
useCallbackfor callbacks - Lazy load heavy components
- Code split by route
- Optimize images
Monitoring
- Track performance metrics
- Monitor bundle size
- Check render times
- Profile slow operations
Dependency Management
Adding Dependencies
- Check if already exists
- Verify security
- Check bundle size
- Review documentation
- Test thoroughly
Updating Dependencies
# Check for updates
pnpm outdated
# Update dependencies
pnpm update
# Security audit
pnpm audit
CI/CD Quality Gates
Automated Checks
- Linting passes
- Tests pass
- Coverage maintained
- Build succeeds
- Security audit clean
Manual Review
- Code review required
- Architecture review for large changes
- Security review for sensitive changes
Tools
VS Code Extensions
- ESLint
- Prettier
- TypeScript
- Jest
- GitLens
Pre-commit Hooks
Consider adding:
- Linting
- Formatting
- Tests
- Type checking