@kindlo/kyndlo-lib
v1.0.3
Published
Optimized Kindlo MongoDB Library with hybrid approach using native driver and lightweight validation
Downloads
8
Maintainers
Readme
Kyndlo MongoDB Library
A high-performance TypeScript library for MongoDB with native driver optimization and lightweight validation using Zod. Designed specifically for the Kindlo application with ~90% of native driver performance while maintaining type safety.
🚀 Features
- Native MongoDB Driver: Direct usage for maximum performance (~90% of native driver speed)
- Zod Validation: Lightweight schema validation instead of heavy ORMs
- TypeScript Support: Full type safety with comprehensive interfaces
- Repository Pattern: Clean, maintainable data access layer
- Service Layer: Comprehensive business logic for all entities
- Geospatial Queries: Built-in location-based user matching with 2dsphere indexing
- Activity Management: Complete system for social events, registrations, and payments
- Payment Processing: Stripe integration with secure transaction handling
- Assessment System: MBTI personality tests with type-safe enum validation
- Admin & Role Management: Comprehensive admin system with permission-based access control
- Notification System: Multi-channel messaging (SMS, email, push, in-app)
- Analytics & Reviews: User behavior tracking and review management
- Daily Messages: Personalized messaging system with advanced targeting
- Animal Spirit System: Dynamic evolution and compatibility matching
- Question System: Multilingual survey and questionnaire management
- Compatibility System: Advanced user matching based on MBTI, zodiac, and animal spirits
- Security Enhanced: Cryptographically secure ID generation and type-safe schemas
- Performance Optimized: Bulk operations, aggregation pipelines, and comprehensive indexing
📦 Installation
npm install kyndlo-lib🔧 Dependencies
npm install mongodb zod🏁 Quick Start
import KyndloLib from 'kyndlo-lib';
async function main() {
// Initialize the library
const lib = KyndloLib.getInstance();
await lib.initialize('mongodb://localhost:27017', 'kindlo');
// Get services
const userService = lib.getUserService();
const activityService = lib.getActivityService();
const animalService = lib.getAnimalService();
const messageService = lib.getDailyMessageService();
const paymentService = lib.getPaymentService();
const assessmentService = lib.getAssessmentService();
// Create a new user
const user = await userService.createUser({
phone: { number: '+1234567890', verified: false },
birthdate: new Date('1990-06-15'),
email: '[email protected]',
mbti: 'ENFP',
});
console.log('User created:', user);
// Get spirit recommendation
const spirit = await animalService.getSpiritRecommendation('Leo', 'ENFP');
console.log('Recommended spirit:', spirit);
// Create a paid activity
const activity = await activityService.createActivity({
title: 'Coffee Meetup',
description: 'Casual networking over coffee',
type: 'social',
date: new Date(Date.now() + 24 * 60 * 60 * 1000),
duration: 120,
location: {
name: 'Central Café',
address: '123 Main St',
city: 'New York',
country: 'USA'
},
pricing: { amount: 15, currency: 'USD', isFree: false },
organizerId: user._id!.toString(),
organizerName: 'John Doe'
});
console.log('Activity created:', activity);
// Process payment for activity
const paymentResult = await paymentService.createPaymentIntent(
user._id!.toString(),
15,
'activity_payment',
'Activity payment for Coffee Meetup',
{ activityId: activity._id!.toString() }
);
console.log('Payment created:', paymentResult);
// Start personality assessment
const assessment = await assessmentService.startAssessment({
userId: user._id!.toString(),
type: 'personality'
});
console.log('Assessment started:', assessment);
// Get personalized daily message
const message = await messageService.getPersonalizedMessage({
zodiac: 'Leo',
mbti: 'ENFP',
animalSpirit: spirit?.name
});
console.log('Daily message:', message);
}
main().catch(console.error);📚 Core Components
DatabaseConnection
Singleton connection manager for MongoDB:
import { DatabaseConnection } from 'kyndlo-lib';
const db = DatabaseConnection.getInstance();
await db.connect('mongodb://localhost:27017', 'kindlo');
// Get a collection
const collection = db.getCollection('users');Repositories
UserRepository
High-performance user data management:
import { UserRepository } from 'kyndlo-lib';
const userRepo = new UserRepository();
// Create user
const user = await userRepo.create({
phone: { number: '+1234567890', verified: false },
email: '[email protected]',
});
// Find by phone
const foundUser = await userRepo.findByPhone('+1234567890');
// Verify phone
const verified = await userRepo.verifyPhone('+1234567890');
// Find compatible users
const compatible = await userRepo.findCompatibleUsers('spiritId', 'userId', 10);AnimalRepository
Manage animal spirit definitions:
import { AnimalRepository } from 'kyndlo-lib';
const animalRepo = new AnimalRepository();
// Find optimal spirit
const spirit = await animalRepo.findOptimalSpirit('ENFP', 'Leo', {
element: 'Fire',
rarity: 'Epic'
});
// Get random spirits
const randomSpirits = await animalRepo.getRandomSpirits(5);Services
UserService
Business logic for user operations:
import { UserService } from 'kyndlo-lib';
const userService = new UserService();
// Register with phone verification
const { user, verificationCode } = await userService.registerWithPhone(
'+1234567890',
{ email: '[email protected]' }
);
// Verify phone code
const verifiedUser = await userService.verifyPhoneCode('+1234567890', '123456');
// Get recommendations
const recommendations = await userService.getRecommendations('userId', 10);
// Add XP
const updatedUser = await userService.addXP('userId', 50, 'daily_login');ActivityService
Complete activity and event management:
import { ActivityService } from 'kyndlo-lib';
const activityService = new ActivityService();
// Create an activity
const activity = await activityService.createActivity({
title: 'Coffee Networking',
description: 'Professional networking event',
type: 'social',
date: new Date(),
duration: 120,
location: { name: 'Central Café', city: 'New York' },
pricing: { amount: 15, currency: 'USD', isFree: false },
organizerId: 'userId123',
organizerName: 'John Doe'
});
// Join an activity
const result = await activityService.joinActivity('activityId', 'userId');
// Search activities
const activities = await activityService.searchActivities('networking');
// Get upcoming activities
const upcoming = await activityService.getUpcomingActivities(10);AnimalService
Animal spirit management and evolution:
import { AnimalService } from 'kyndlo-lib';
const animalService = new AnimalService();
// Get spirit recommendation
const spirit = await animalService.getSpiritRecommendation('Leo', 'ENFP');
// Create custom animal spirit
const customSpirit = await animalService.createAnimal({
name: 'Dragon',
description: 'Powerful fire spirit',
element: 'Fire',
rarity: 'Legendary',
traits: ['Wisdom', 'Power', 'Leadership'],
mbtiTypes: ['ENTJ', 'ENFJ'],
associatedZodiacs: ['Leo', 'Aries'],
stages: [
{ name: 'Hatchling', level: 1, xpRequired: 0, abilities: ['Fire Breath'] }
]
});
// Get evolution stage
const evolution = await animalService.getEvolutionStage('spiritId', 1500);
// Find compatible animals
const compatible = await animalService.findCompatibleAnimals({
zodiac: 'Leo',
mbti: 'ENFP',
element: 'Fire'
});DailyMessageService
Personalized daily messaging system:
import { DailyMessageService } from 'kyndlo-lib';
const messageService = new DailyMessageService();
// Get personalized message
const message = await messageService.getPersonalizedMessage({
zodiac: 'Leo',
mbti: 'ENFP',
animalSpirit: 'wolf',
interests: ['personal-growth', 'career']
});
// Create daily message
const newMessage = await messageService.createDailyMessage({
title: 'Daily Motivation',
content: 'Today is full of possibilities!',
type: 'motivational',
mood: 'positive',
tags: ['inspiration', 'growth']
});
// Get messages by type
const motivational = await messageService.getMessagesByType('motivational');
// Search messages
const searchResults = await messageService.searchMessages('confidence');🏭 Service Factory
The library provides a singleton service factory for consistent service instances:
import { ServiceFactory } from 'kyndlo-lib';
// Get service instances (singletons)
const userService = ServiceFactory.getUserService();
const activityService = ServiceFactory.getActivityService();
const animalService = ServiceFactory.getAnimalService();
const messageService = ServiceFactory.getDailyMessageService();
const questionService = ServiceFactory.getQuestionService();
// All subsequent calls return the same instances
const sameUserService = ServiceFactory.getUserService(); // Same instance🎯 Advanced Features
Geospatial Queries
Find nearby users based on location:
const nearbyUsers = await userService.findNearbyUsers(
'userId',
50, // 50km radius
20 // max 20 results
);Compatibility Matching
Advanced user matching based on multiple factors:
// Create a match
const match = await userService.createMatch('user1Id', 'user2Id');
// Get compatibility score (automatically calculated)
console.log('Compatibility:', match.compatibilityScore);Bulk Operations
High-performance bulk operations:
// Bulk insert users
const userIds = await userRepo.bulkInsert([user1, user2, user3]);
// Bulk update last active time
await userRepo.bulkUpdateLastActive(['id1', 'id2', 'id3']);Aggregation Pipelines
Complex queries using MongoDB aggregation:
const stats = await userRepo.getUserStatistics();
console.log('Total users:', stats.totalUsers);
console.log('Active users:', stats.activeUsers);📋 New Features in Latest Version
💳 Payment & Transaction System
- Complete Stripe integration with secure payment processing
- Payment method storage and management
- Transaction tracking with computed properties (netAmount calculated dynamically)
- Subscription management for premium features
- Activity registration payments with automated processing
- Cryptographically secure payment intent ID generation
🧠 Assessment & Psychology System
- Comprehensive MBTI personality assessment sessions
- Type-safe MBTI enum validation (all 16 types)
- Secure session management with cryptographically secure session IDs
- Personality profile analysis and compatibility scoring
- Dynamic question generation and response tracking
🛡️ Admin & Security System
- Role-based access control with granular permissions
- Admin user management with audit logging
- System settings and configuration management
- Enhanced security with crypto.randomUUID() for all ID generation
- Type-safe schemas with z.unknown() instead of z.any()
📱 Multi-Channel Notification System
- SMS messaging with provider integration (Twilio, AWS SNS)
- Push notifications for iOS, Android, and web
- Email messaging with template support
- In-app notifications with rich content
- Device registration and token management
📊 Analytics & Review System
- Comprehensive user behavior tracking
- Platform-wide analytics and metrics
- Review and rating system with moderation
- Review interaction tracking (likes, reports)
- Advanced analytics for business insights
🏃♂️ Enhanced Activity Management
- Activity registration system with payment integration
- Secure check-in codes using cryptographically secure generation
- Participant management with waitlists
- Activity analytics and reporting
- Location-based discovery with geospatial indexing
🔒 Security Enhancements
- All ID generation now uses cryptographically secure methods
- Payment IDs, session IDs, and check-in codes use crypto.randomUUID()
- Type safety improvements with z.unknown() for better validation
- Computed properties prevent data inconsistencies
- Enhanced permission system for admin operations
## 🔍 Type Safety
Full TypeScript support with Zod validation:
```typescript
import { IUser, UserSchema, IAnimalSpiritDefinition } from 'kyndlo-lib';
// Type-safe user creation
const userData: Partial<IUser> = {
phone: { number: '+1234567890', verified: false },
email: '[email protected]',
mbti: 'ENFP',
};
// Validation with Zod
const validatedUser = UserSchema.parse(userData);📊 Performance Benefits
- ~90% of native driver speed (vs 50% with Mongoose)
- Smaller bundle size - only MongoDB driver + Zod
- Direct access to MongoDB features - aggregation, transactions, etc.
- Optimized for serverless - minimal cold start overhead
- Efficient indexing - automatic index creation for optimal performance
🏗️ Architecture
kyndlo-lib/
├── database/
│ └── connection.ts # MongoDB connection management
├── repositories/
│ ├── BaseRepository.ts # Common repository functionality
│ ├── ActivityRegistrationRepository.ts # Activity registration operations
│ ├── ActivityRepository.ts # Activity/event operations
│ ├── AnimalRepository.ts # Animal spirit operations
│ ├── AssessmentSessionRepository.ts # Assessment session management
│ ├── DailyMessageRepository.ts # Daily message operations
│ ├── MatchRepository.ts # Match/connection operations
│ ├── PaymentMethodRepository.ts # Payment method storage
│ ├── QuestionRepository.ts # Question/survey operations
│ ├── TransactionRepository.ts # Transaction and payment operations
│ └── UserRepository.ts # User data operations
├── services/
│ ├── UserService.ts # User business logic
│ ├── AnimalService.ts # Animal spirit management
│ ├── ActivityService.ts # Activity/event management
│ ├── DailyMessageService.ts # Daily message management
│ ├── QuestionService.ts # Question/survey management
│ ├── PaymentService.ts # Payment processing and Stripe integration
│ ├── AssessmentService.ts # Personality assessment management
│ ├── AdminService.ts # Admin operations and role management
│ └── __tests__/ # Service unit tests
│ ├── ActivityService.test.ts # Activity service tests
│ ├── AnimalService.test.ts # Animal service tests
│ └── DailyMessageService.test.ts # Daily message tests
├── factories/
│ └── ServiceFactory.ts # Singleton service factory
├── types/
│ ├── User.ts # User types and schemas
│ ├── Activity.ts # Activity types and schemas
│ ├── ActivityRegistration.ts # Activity registration types
│ ├── DailyMessage.ts # Daily message types and schemas
│ ├── Question.ts # Question types and schemas
│ ├── Animal.ts # Animal spirit types and schemas
│ ├── Payment.ts # Payment and transaction types
│ ├── Assessment.ts # Assessment and psychology types
│ ├── Admin.ts # Admin and role management types
│ ├── Notification.ts # Notification system types
│ └── Analytics.ts # Analytics and review types
├── utils/
│ ├── zodiac.ts # Zodiac utility functions
│ └── __tests__/
│ └── zodiac.test.ts # Zodiac utility tests
├── __tests__/
│ └── index.test.ts # Main library tests
└── index.ts # Main entry point🧪 Testing
The library includes comprehensive unit tests for all services and core functionality.
Run the test suite:
npm testRun tests with coverage:
npm run test:coverageRun tests in watch mode:
npm run test:watchTest Coverage
The library maintains high test coverage across all services:
- AnimalService: 92.59% statement coverage with 20 test cases
- DailyMessageService: 59.77% statement coverage with 15 test cases
- ActivityService: 52.23% statement coverage with 26 test cases
- Core utilities: 91.89% statement coverage
- Type definitions: 72% coverage
Test Structure
src/
├── services/
│ └── __tests__/
│ ├── AnimalService.test.ts # Animal spirit tests
│ ├── ActivityService.test.ts # Activity management tests
│ └── DailyMessageService.test.ts # Daily message tests
├── utils/
│ └── __tests__/
│ └── zodiac.test.ts # Utility function tests
└── __tests__/
└── index.test.ts # Main library testsAll tests use proper mocking of repository dependencies and include both success and error scenarios.
📖 API Reference
Core Classes
- KyndloLib: Main library class for initialization
- DatabaseConnection: MongoDB connection manager
- BaseRepository: Generic repository base class
- ActivityRegistrationRepository: Activity registration operations
- ActivityRepository: Activity and event operations
- AnimalRepository: Animal spirit management
- AssessmentSessionRepository: Assessment session management
- DailyMessageRepository: Daily message operations
- MatchRepository: Match and connection management
- PaymentMethodRepository: Payment method storage
- QuestionRepository: Question and survey operations
- TransactionRepository: Transaction and payment operations
- UserRepository: User-specific data operations
Services
- UserService: User business logic and operations
- AnimalService: Animal spirit management and evolution
- ActivityService: Activity creation and participation management
- DailyMessageService: Personalized messaging system
- QuestionService: Survey and questionnaire management
Factory
- ServiceFactory: Singleton factory for service instances
Types
📊 Complete Schema Reference
The library provides comprehensive TypeScript types and Zod schemas for all entities:
👤 User System
Core User Types
- IUser: Complete user profile with authentication, preferences, and social features
- IPhone: Phone number validation and verification system
- IUserPreferences: User settings and preferences
- ILocation: Geospatial location data with 2dsphere indexing
- IAchievement: User achievements and rewards system
- IAnimalSpirit: User's animal spirit assignment and evolution
- IMatch: User matching and compatibility system
User Schemas
import { UserSchema, PhoneSchema, LocationSchema } from 'kyndlo-lib';
// Full user validation
const user = UserSchema.parse({
phone: { number: '+1234567890', verified: true },
email: '[email protected]',
mbti: 'ENFP',
zodiacSign: 'Leo',
location: { coordinates: [-74.0059, 40.7128], type: 'Point' }
});🏃♂️ Activity & Event System
Activity Types
- IActivity: Complete activity/event definition with location, pricing, and participants
- IPricing: Flexible pricing models (free, paid, donation-based)
- IActivityRegistration: User registration and payment processing
- ParticipationResult: Activity join/leave operation results
Activity Schemas
import { ActivitySchema, PricingSchema } from 'kyndlo-lib';
const activity = ActivitySchema.parse({
title: 'Coffee Networking',
type: 'social',
date: new Date(),
duration: 120,
location: { name: 'Central Café', city: 'New York' },
pricing: { amount: 15, currency: 'USD', isFree: false }
});💳 Payment & Transaction System
Payment Types
- IPaymentMethod: Stored payment methods with Stripe integration
- ITransaction: Payment transactions with computed properties
- ITransactionWithComputed: Extended transaction with calculated fields
- ISubscription: Subscription management for premium features
- TransactionHelpers: Utility class for payment calculations
Payment Schemas
import { TransactionSchema, TransactionHelpers } from 'kyndlo-lib';
// Transaction with computed netAmount
const transaction = TransactionHelpers.withComputedProperties({
amount: 100,
fee: 5,
type: 'activity_payment',
status: 'succeeded'
});
console.log(transaction.netAmount); // 95 (computed automatically)🧠 Assessment & Psychology System
Assessment Types
- IAssessmentSession: Personality test sessions with secure session IDs
- IPersonalityProfile: MBTI and personality analysis results
- ICompatibilityAssessment: User compatibility scoring
- IQuizResponse: Individual quiz responses and scoring
- MBTIType: Type-safe MBTI enum with all 16 types
Assessment Schemas
import { AssessmentSessionSchema, MBTI_TYPES } from 'kyndlo-lib';
// Type-safe MBTI validation
const mbti: MBTIType = 'ENFP'; // Autocomplete with all 16 types
const session = AssessmentSessionSchema.parse({
userId: new ObjectId(),
type: 'personality',
status: 'in_progress'
});🐾 Animal Spirit System
Animal Types
- IAnimalSpiritDefinition: Complete animal spirit definitions with evolution stages
- IAnimalSpirit: User's assigned animal spirit with level and XP
- IEvolutionStage: Animal evolution stages and abilities
Animal Schemas
import { AnimalSpiritDefinitionSchema } from 'kyndlo-lib';
const dragonSpirit = AnimalSpiritDefinitionSchema.parse({
name: 'Dragon',
element: 'Fire',
rarity: 'Legendary',
mbtiTypes: ['ENTJ', 'ENFJ'],
stages: [
{ name: 'Hatchling', level: 1, xpRequired: 0 },
{ name: 'Young Dragon', level: 25, xpRequired: 1000 }
]
});📝 Question & Survey System
Question Types
- IQuestion: Survey questions with localization support
- IAnswerOption: Multiple choice answers with scoring
- ILocalizedText: Multi-language text support
Question Schemas
import { QuestionSchema, LocalizedTextSchema } from 'kyndlo-lib';
const question = QuestionSchema.parse({
text: { en: 'How do you prefer to socialize?', es: '¿Cómo prefieres socializar?' },
type: 'multiple_choice',
category: 'personality',
difficulty: 'medium'
});📱 Notification System
Notification Types
- ISMS: SMS messaging with provider integration
- IPushNotification: Mobile push notifications
- IEmail: Email messaging with template support
- INotification: In-app notifications
- IDevice: User device registration for push notifications
Notification Schemas
import { PushNotificationSchema, EmailSchema } from 'kyndlo-lib';
// Type-safe notification data
const pushNotification = PushNotificationSchema.parse({
title: 'New Match!',
body: 'You have a new compatible user nearby',
deviceTokens: ['device_token_123'],
actionData: { userId: 'user123', type: 'match' } // z.unknown() for safety
});📊 Analytics & Admin System
Analytics Types
- IAnalyticsEvent: User behavior tracking
- IUserBehavior: User engagement analytics
- IPlatformAnalytics: Platform-wide statistics
- IReview: User reviews and ratings
- IReviewInteraction: Review likes, reports, etc.
Admin Types
- IAdminUser: Admin user management with role-based access
- IRole: Permission-based role system
- IPermission: Granular permission definitions
- IActivityLog: System activity auditing
- ISystemSetting: Configuration management
Admin Schemas
import { AdminUserSchema, RoleSchema } from 'kyndlo-lib';
const adminRole = RoleSchema.parse({
name: 'content_moderator',
permissions: ['content:read', 'content:moderate', 'users:view'],
description: 'Can moderate content and view users'
});💬 Daily Message System
Message Types
- IDailyMessage: Personalized daily messages with targeting
- MessageTargeting: Advanced targeting by MBTI, zodiac, and animal spirit
Message Schemas
import { DailyMessageSchema } from 'kyndlo-lib';
const message = DailyMessageSchema.parse({
content: { en: 'Your creative energy is strong today!', es: '¡Tu energía creativa está fuerte hoy!' },
type: 'motivational',
targeting: { mbtiTypes: ['ENFP', 'ENFJ'], zodiacSigns: ['Leo'] }
});🔒 Security Features
All schemas include security enhancements:
- Cryptographically secure ID generation using
crypto.randomUUID()andcrypto.randomBytes() - Type-safe data validation with
z.unknown()instead ofz.any() - Computed properties to prevent data inconsistencies
- Role-based access control for admin operations
- Secure session management for assessments and payments
Schemas
All types include corresponding Zod schemas for validation:
- UserSchema, PhoneSchema, AnimalSpiritSchema, ActivitySchema, DailyMessageSchema, QuestionSchema, PaymentMethodSchema, TransactionSchema, AssessmentSessionSchema, NotificationSchema, AdminUserSchema, AnalyticsEventSchema, and more.
🔧 Configuration
Database Indexes
The library automatically creates optimized indexes for all collections:
- Users: Phone number (unique), email (unique, sparse), MBTI type, zodiac signs, geospatial location (2dsphere), animal spirit references, achievements, XP levels
- Activities: Date, type, status, location (2dsphere), tags, organizer, participants, pricing
- Activity Registrations: Activity ID + User ID (unique), payment status, check-in codes, registration date
- Daily Messages: Date, type, zodiac, MBTI, animal spirit, tags, targeting criteria, view counts
- Animals: Element, rarity, category, MBTI types, zodiac associations, evolution stages
- Questions: Type, category, difficulty, tags, localization, answer options
- Matches: User references, compatibility scores, creation date, status
- Payments: User ID + status + date, Stripe IDs (unique), transaction types, amounts
- Transactions: Payment intent IDs (unique), user transactions, activity payments, subscription billing
- Assessment Sessions: User sessions, session IDs (unique), assessment types, completion status
- Notifications: User targeting, device tokens, delivery status, notification types
- Admin Users: Username (unique), role assignments, permission levels, activity logs
- Analytics: Event types, user behavior, platform metrics, review interactions
- Reviews: Entity references, ratings, user interactions, moderation status
Performance Tuning
// Connection options for performance
await db.connect('mongodb://localhost:27017', 'kindlo', {
maxPoolSize: 10,
serverSelectionTimeoutMS: 5000,
socketTimeoutMS: 45000,
});🚀 Migration from Mongoose
Easy migration path:
- Replace Mongoose models with repositories
- Update schema definitions to use Zod
- Replace Mongoose queries with repository methods
- Use aggregation pipelines for complex queries
📝 License
MIT License - see LICENSE file for details.
🤝 Contributing
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
📞 Support
For issues and questions:
- GitHub Issues: Create an issue
- Email: [email protected]
Built with ❤️ by the Kindlo team for high-performance MongoDB applications.
