rubriqflow-core
v1.4.1
Published
Core business logic and implementations for RubriqFlow applications
Maintainers
Readme
@rubriqflow/core
Business logic and utilities for RubriqFlow applications.
🎯 Purpose
This package provides shared business logic implementations that can be used across v2 and FileDrop applications. It contains database-agnostic utilities, validation logic, and common functionality.
✨ Key Features
- 🔐 Password Validation: Comprehensive password strength validation with FileDrop requirements
- 📧 Email Validation: Email format validation and darkware domain detection
- 🔑 Access Code Generation: 6-character alphanumeric codes for FileDrop portfolios
- 🆔 ID Generation: Unique ID generation for users, organizations, portfolios, and files
- 🧪 100% Test Coverage: Comprehensive test suite with TDD approach
- 📚 Full Documentation: TSDoc comments for all functions
📦 Installation
npm install @rubriqflow/core
# or
yarn add @rubriqflow/core
# or
pnpm add @rubriqflow/core🚀 Quick Start
import { PasswordValidator, EmailValidator } from '@rubriqflow/core';
// Password validation
const passwordValidator = new PasswordValidator();
const result = passwordValidator.validatePasswordStrength('Password123');
console.log(result.isValid); // true
console.log(result.score); // 100
// Email validation
const emailValidator = new EmailValidator();
const isValid = emailValidator.validateEmail('[email protected]');
console.log(isValid); // true
// Darkware email detection (for testing)
const isDarkware = emailValidator.isDarkwareEmail('[email protected]');
console.log(isDarkware); // true
// Access code generation
const accessCode = passwordValidator.generateAccessCode();
console.log(accessCode); // "ABC123"📋 Available Utilities
🔐 PasswordValidator
Comprehensive password validation and hashing utilities.
import { PasswordValidator } from '@rubriqflow/core';
const validator = new PasswordValidator();
// Validate password strength
const result = validator.validatePasswordStrength('Password123');
// Returns: { isValid: boolean, score: number, feedback: string[], requirements: {...} }
// Hash password
const hash = await validator.hashPassword('Password123');
// Verify password
const isValid = await validator.verifyPassword('Password123', hash);
// Generate access codes
const code = validator.generateAccessCode(); // "ABC123"
const isValidCode = validator.validateAccessCode('ABC123'); // true
// Generate unique IDs
const userId = validator.generateUserId(); // "user_1234567890_abc123"
const orgId = validator.generateOrganizationId(); // "org_1234567890_abc123"Password Requirements:
- Minimum 10 characters
- At least 1 number
- At least 1 uppercase letter
- At least 1 lowercase letter
📧 EmailValidator
Email validation and normalization utilities.
import { EmailValidator } from '@rubriqflow/core';
const validator = new EmailValidator();
// Validate email format
const isValid = validator.validateEmail('[email protected]');
// Check for darkware domain (testing)
const isDarkware = validator.isDarkwareEmail('[email protected]');
// Extract domain
const domain = validator.extractDomain('[email protected]'); // "example.com"
// Normalize email
const normalized = validator.normalizeEmail('[email protected]'); // "[email protected]"
// Comprehensive validation for registration
const result = validator.validateEmailForRegistration('[email protected]');
// Returns: { isValid: boolean, isDarkware: boolean, normalizedEmail: string, domain: string | null }
// Token generation and validation
const verifyToken = validator.generateEmailVerificationToken();
const resetToken = validator.generatePasswordResetToken();
const isExpired = validator.isTokenExpired(token);🧪 Testing
The core library includes comprehensive tests:
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverageTest Categories
- Password Validation Tests - Verify password strength requirements
- Email Validation Tests - Test email format and darkware detection
- Access Code Tests - Verify 6-character code generation
- ID Generation Tests - Ensure unique ID generation
- Edge Case Tests - Handle null/undefined inputs gracefully
📊 Current Coverage
- Statements: 60.54%
- Branches: 67.5%
- Functions: 52.17%
- Lines: 60.13%
🏗️ Architecture
The core library follows these principles:
1. Database Agnostic
All utilities work without database dependencies, making them reusable across different storage backends.
2. Pure Functions
Most functions are pure and stateless, making them easy to test and reason about.
3. Error Handling
Comprehensive error handling with meaningful error messages.
4. Type Safety
Full TypeScript support with strict type checking.
🔄 Versioning
This package follows Semantic Versioning:
- MAJOR (1.0.0 → 2.0.0): Breaking changes to public APIs
- MINOR (1.0.0 → 1.1.0): New features, backward compatible
- PATCH (1.0.0 → 1.0.1): Bug fixes, backward compatible
🏢 Usage in Applications
RubriqFlow v2
// v2/lib/implementations/services/AuthService.ts
import { PasswordValidator, EmailValidator } from '@rubriqflow/core';
export class AuthService implements IAuthService {
private passwordValidator = new PasswordValidator();
private emailValidator = new EmailValidator();
async validatePasswordStrength(password: string) {
return this.passwordValidator.validatePasswordStrength(password);
}
async hashPassword(password: string) {
return this.passwordValidator.hashPassword(password);
}
}FileDrop MVP
// filedrop/lib/implementations/services/FileDropService.ts
import { PasswordValidator, EmailValidator } from '@rubriqflow/core';
export class FileDropService implements IFileDropService {
private passwordValidator = new PasswordValidator();
private emailValidator = new EmailValidator();
generateAccessCode() {
return this.passwordValidator.generateAccessCode();
}
validateEmail(email: string) {
return this.emailValidator.validateEmail(email);
}
}🤝 Contributing
- Write Tests First: Follow TDD approach
- Document Everything: Add TSDoc comments
- Maintain Coverage: Keep test coverage above 60%
- Follow Patterns: Use existing code patterns
- Type Safety: Ensure full TypeScript compliance
📄 License
MIT License - see LICENSE file for details.
🔗 Related Packages
@rubriqflow/contracts- Interface contracts (dependency)@rubriqflow/database- Database schema and utilities@rubriqflow/ui-components- React component library
📊 Package Statistics
- Utilities: 2 main classes
- Test Coverage: 60%+ across all metrics
- Dependencies: @rubriqflow/contracts, bcryptjs
- Bundle Size: ~50KB (including bcryptjs)
- TypeScript: Full support with strict mode
Built with ❤️ by the RubriqFlow Team
