Shared utilities for University of Jaffna microservices
npm install @uoj-lk/utils-node

> Comprehensive shared utilities for University of Jaffna microservices
Provides standardized, production-ready implementations for message brokering, logging, caching, error handling, validation, and response formatting across all microservices.
- 🚀 Message Broker - RabbitMQ integration with automatic reconnection
- 📝 Logger - Winston-based logging with daily rotation and multiple transports
- ⚡ Cache - Redis operations with TTL support and automatic serialization
- ❌ Error Handling - Standardized error creation with Boom integration
- ✅ Validation - Joi-based schema validation with detailed error messages
- 📬 Response Handler - Consistent API response formatting
- 🔧 Helpers - Utility functions for common operations
- 📘 TypeScript Support - Full type definitions included
- 🔄 ES Modules & CommonJS - Supports both module systems
``bash`
npm install @uoj-lk/utils-node
`javascript
import {
logger,
cache,
messageBroker,
response,
validation,
} from "@uoj-lk/utils-node";
// Initialize services
await cache.initCache({ host: "localhost", port: 6379 });
await messageBroker.connectToMessageBroker("events-queue");
// Use logger
logger.info("Service initialized");
// Use cache
await cache.set("user:123", { name: "John" }, 3600);
const user = await cache.get("user:123");
// Send message
await messageBroker.sendToQueue("events-queue", {
event: "user.created",
data: user,
});
`
`javascript
// Import entire package
import utils from "@uoj-lk/utils-node";
// Import specific modules
import { logger, cache, messageBroker } from "@uoj-lk/utils-node";
// Import from submodules directly
import { initLogger } from "@uoj-lk/utils-node/logger";
import { connectToMessageBroker } from "@uoj-lk/utils-node/messageBroker";
`
`javascript
// Import entire package
const utils = require("@uoj-lk/utils-node");
// Import specific modules
const { logger, cache } = require("@uoj-lk/utils-node");
// Import from submodules
const { initLogger } = require("@uoj-lk/utils-node/logger");
`
`javascript
import { messageBroker } from "@uoj-lk/utils-node";
// Connect to a queue
await messageBroker.connectToMessageBroker("QUEUE_NAME");
// Send message to queue
await messageBroker.sendToQueue("QUEUE_NAME", { data: "value" });
// Consume messages
await messageBroker.consumeFromMessageBroker(async (message) => {
console.log("Received:", message);
}, "QUEUE_NAME");
`
`javascript
import { logger } from "@uoj-lk/utils-node";
logger.info("Message", { data: "value" });
logger.error("Error message", error);
logger.debug("Debug info");
`
`javascript
import { cache } from "@uoj-lk/utils-node";
await cache.initCache();
// Set with 1 hour TTL
await cache.set("key", { data: "value" }, 3600);
// Get value
const value = await cache.get("key");
// Delete key
await cache.del("key");
`
`javascript
import { error } from "@uoj-lk/utils-node";
const customError = error.createError("Not found", 404);
const boomError = error.ErrorHelper({
message: "Validation failed",
statusCode: 400,
data: { field: "email" },
});
`
`javascript
import { validation } from "@uoj-lk/utils-node";
import Joi from "joi";
const schema = Joi.object({
email: Joi.string().email().required(),
name: Joi.string().required(),
});
// Returns validated and sanitized data directly
const validatedData = await validation.validate(schema, data);
`
`javascript
import { response } from "@uoj-lk/utils-node";
const handler = response.createResponseHandler();
// Send success response
handler.resolve(res, { message: "Success" }, 200);
// Send error response
handler.reject(error, res);
`
`javascript
import { helpers } from "@uoj-lk/utils-node";
// Convert string to camelCase
helpers.toCamel("hello_world"); // 'helloWorld'
// Pad number with zeros
helpers.padWithZero(5, 3); // '005'
// CSV to JSON
const json = helpers.csvToJson("name,age\nJohn,30");
// Async forEach
await helpers.asyncForEach(array, async (item) => {
console.log(item);
});
`
The package uses these environment variables:
- RABBIT_MQ_HOST - RabbitMQ host (default: localhost)RABBIT_MQ_PORT
- - RabbitMQ port (default: 5672)RABBIT_MQ_USER
- - RabbitMQ username (default: guest)RABBIT_MQ_PASS
- - RabbitMQ password (default: guest)RABBIT_MQ_VHOST
- - RabbitMQ virtual host (default: /)
- LOG_LEVEL - Log level (default: info)LOG_DIR
- - Log directory (default: ./logs)NODE_ENV
- - Environment (default: development)
- REDIS_HOST - Redis host (default: localhost)REDIS_PORT
- - Redis port (default: 6379)REDIS_DB
- - Redis database (default: 0)REDIS_PASS
- - Redis password
See individual module documentation in src/` directory.
Please follow the existing code style and add tests for new features.
MIT