npm package: @prasaddys/common
Description: Common middleware, logger, and types for Prasad DYS microservices
Author: Prasaddys
Latest version: 2.0.1

# @prasaddys/common

## Overview

`@prasaddys/common` is a collection of common middleware, logging utilities, and TypeScript types for Prasad DYS microservices. It provides essential tools to help streamline the development of microservices by offering reusable components, such as logging and middleware, out of the box.

This package is designed to be used in any Node.js-based microservices architecture and can be easily extended or customized.

## Features

- **Middleware:** A set of common middleware for request handling.
- **Logging:** Uses [Winston](https://github.com/winstonjs/winston) for logging with customizable log levels.
- **Types:** Provides TypeScript types to ensure type safety across your microservices.
- **JWT Authentication:** Utility functions to work with JSON Web Tokens (JWT).
- **GeoIP Lookup:** Integrates with [geoip-lite](https://github.com/bluesmoon/node-geoip) for IP geolocation.

## Installation

To install the package, use npm:

```
bash
npm install @prasaddys/common
```

Example Usage
Importing and Using Middleware

```
import { loggerMiddleware } from '@prasaddys/common';

import express from 'express';
const app = express();

const publicRoutes = [
  "/health"
];
app.use(unifiedMiddleware({ publicRoutes }));

app.get('/', (req, res) => {
  res.send('Hello World');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});
```

Example: Logging
You can use the logger provided by the package in any part of your application:

```
import { logger } from '@prasaddys/common';

logger.info('This is an info log');
logger.error('This is an error log');
```

Example: JWT Authentication
Use the utility to verify a JWT token:

```
import { verifyToken } from '@prasaddys/common';

const token = 'your_jwt_token_here';

verifyToken(token)
  .then(decoded => {
    console.log('Token is valid', decoded);
  })
  .catch(error => {
    console.error('Token validation failed', error);
  });
```

Example: GeoIP Lookup
You can also use the geoip-lite utility to get location information based on an IP address:

```
import { getGeoIPInfo } from '@prasaddys/common';

const ip = '8.8.8.8';

const geoInfo = getGeoIPInfo(ip);
console.log(geoInfo);
```

API Documentation
loggerMiddleware

Description: A middleware that logs incoming HTTP requests.

Usage: Simply add this middleware to your Express app to log request details.

logger

Description: A logger based on Winston
.

```
Methods:

logger.info(message: string)

logger.error(message: string)

logger.warn(message: string)

verifyToken(token: string)
```

Description: Verifies a JWT token and returns the decoded information if valid.

Parameters:

token: string – The JWT token to verify.

Returns: A promise that resolves with the decoded token if valid, or rejects with an error if invalid.

getGeoIPInfo(ip: string)

Description: Fetches geolocation information for an IP address using the geoip-lite library.

Parameters:

ip: string – The IP address to lookup.

Returns: A geolocation object containing details like country, city, and region.

Development
Building the Package

To build the package locally, run the following command:

```
npm run build

```