Package Exports
- @sandip1046/rubizz-shared-libs
- @sandip1046/rubizz-shared-libs/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@sandip1046/rubizz-shared-libs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Rubizz Shared Libraries
Overview
The Rubizz Shared Libraries (@rubizz/shared-libs) is a common NPM package that provides shared utilities, types, configurations, and services across all Rubizz Hotel Inn microservices. It ensures consistency, reduces code duplication, and provides a centralized location for common functionality.
Package Structure
src/
├── types/ # TypeScript types and interfaces
├── utils/ # Utility functions
├── auth/ # Authentication utilities
├── database/ # Database connection utilities
├── logger/ # Logging utilities
├── email/ # Email service utilities
├── validation/ # Validation schemas
├── constants/ # Constants and enums
├── prisma/ # Prisma ORM utilities
├── events/ # Event handling utilities
└── index.ts # Main export fileCore Features
1. Authentication & Authorization
- JWT token generation and verification
- Password hashing and comparison
- Role-based access control utilities
- Password reset token management
2. Database Management
- Prisma client initialization and management
- Database connection pooling
- Health check utilities
- Transaction management
3. Redis Integration
- Redis connection management
- Session storage utilities
- Caching helpers
- Message queue operations
4. Logging System
- Winston-based centralized logging
- Request/response logging middleware
- Error logging utilities
- Service-specific loggers
5. Email Services
- Nodemailer integration
- Email template management
- Verification and notification emails
- Brevo API integration
6. Validation Schemas
- Joi validation schemas
- Common validation rules
- Request validation utilities
- Error handling
7. Utility Functions
- UUID generation
- Date formatting
- String manipulation
- Pagination helpers
- Retry mechanisms
Installation
npm install @rubizz/shared-libsUsage
Basic Setup
import {
Logger,
AuthUtils,
DatabaseManager,
RedisManager,
Utils,
ValidationSchemas,
BrevoEmailService
} from '@rubizz/shared-libs';
// Initialize logger
const logger = Logger.getInstance('service-name', 'production');
// Initialize authentication
AuthUtils.initialize({
secret: process.env.JWT_SECRET,
expiresIn: process.env.JWT_EXPIRES_IN,
refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN
});
// Initialize database
DatabaseManager.initialize({
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
database: process.env.DB_NAME,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
ssl: process.env.DB_SSL === 'true',
poolSize: parseInt(process.env.DB_POOL_SIZE)
});
// Initialize Redis
RedisManager.initialize({
host: process.env.REDIS_HOST,
port: parseInt(process.env.REDIS_PORT),
password: process.env.REDIS_PASSWORD,
db: parseInt(process.env.REDIS_DB),
retryDelayOnFailover: 100,
maxRetriesPerRequest: 3
});
// Initialize email service
BrevoEmailService.initialize(
process.env.BREVO_API_KEY,
process.env.FROM_EMAIL
);Authentication Usage
// Generate JWT token
const accessToken = AuthUtils.generateAccessToken({
userId: user.id,
email: user.email,
role: user.role
});
// Verify JWT token
const payload = AuthUtils.verifyToken(token);
// Hash password
const hashedPassword = await AuthUtils.hashPassword(password);
// Compare password
const isValid = await AuthUtils.comparePassword(password, hash);Database Usage
// Get database connection
const db = DatabaseManager.getConnection();
// Use Prisma client
const user = await db.user.create({
data: {
email: 'user@example.com',
firstName: 'John',
lastName: 'Doe'
}
});
// Health check
const isHealthy = await DatabaseManager.healthCheck();Redis Usage
// Set value
await RedisManager.set('key', 'value', 3600); // 1 hour TTL
// Get value
const value = await RedisManager.get('key');
// Hash operations
await RedisManager.hset('user:123', 'name', 'John');
const name = await RedisManager.hget('user:123', 'name');Logging Usage
// Basic logging
logger.info('User created', { userId: user.id });
logger.error('Database error', error, { query: 'SELECT * FROM users' });
// Request logging middleware
app.use(Logger.createRequestLogger('service-name'));
// Error logging middleware
app.use(Logger.createErrorLogger('service-name'));Email Usage
// Send verification email
await BrevoEmailService.sendVerificationEmail(
'user@example.com',
'verification-token'
);
// Send password reset email
await BrevoEmailService.sendPasswordResetEmail(
'user@example.com',
'reset-token'
);
// Send custom email
await BrevoEmailService.sendEmail({
to: 'user@example.com',
subject: 'Custom Email',
template: 'custom-template',
params: { name: 'John' }
});Validation Usage
// Validate request body
const { error, value } = ValidationSchemas.userRegistration.validate(req.body);
if (error) {
return res.status(400).json({ error: error.details[0].message });
}
// Validate query parameters
const { error, value } = ValidationSchemas.pagination.validate(req.query);Development
Prerequisites
- Node.js 18+
- TypeScript 5.3+
- NPM 9+
Setup
# Install dependencies
npm install
# Set up environment variables
cp env.example .env
# Edit .env with your database credentials
# Generate Prisma client
npx prisma generate
# Run database migrations
npx prisma migrate dev --name init
# Build the package
npm run build
# Run tests
npm test
# Lint code
npm run lint
# Fix linting issues
npm run lint:fixDatabase Setup
# Generate Prisma client (after schema changes)
npx prisma generate
# Create and apply migrations
npx prisma migrate dev --name migration_name
# Reset database (development only)
npx prisma migrate reset
# Deploy migrations to production
npx prisma migrate deploy
# View database in Prisma Studio
npx prisma studioBuilding
npm run buildThis will compile TypeScript to JavaScript and generate type definitions in the dist/ directory.
Dependencies
Production Dependencies
jsonwebtoken- JWT token handlingbcryptjs- Password hashingjoi- Validation schemasuuid- UUID generationmoment- Date manipulationlodash- Utility functionsaxios- HTTP clientredis- Redis clientwinston- Logging@prisma/client- Database ORMnodemailer- Email service
Development Dependencies
@types/*- TypeScript type definitionstypescript- TypeScript compilerjest- Testing frameworkeslint- Code linting
Version Management
The package follows semantic versioning (semver):
- Major (1.0.0 → 2.0.0): Breaking changes
- Minor (1.0.0 → 1.1.0): New features, backward compatible
- Patch (1.0.0 → 1.0.1): Bug fixes, backward compatible
Contributing
- Follow the existing code style
- Add tests for new features
- Update documentation
- Ensure all tests pass
- Submit a pull request
License
MIT License - see LICENSE file for details.
Support
For issues and questions, please contact the development team or create an issue in the repository.