npm package: @nexsell-lib/shared
Description: 🚀 **ספריית קוד משותפת עבור מיקרו-שירותים ב-Nexsell.**   💡 **כוללת Enums, Middleware, ניהול שגיאות, אירועים (RabbitMQ), ואבטחה.**
Author: Nexsell Team
Latest version: 1.0.100

# **Nexsell Shared Library**

🚀 **ספריית קוד משותפת עבור מיקרו-שירותים ב-Nexsell.**  
💡 **כוללת Enums, Middleware, ניהול שגיאות, אירועים (RabbitMQ), ואבטחה.**

## **📦 התקנה (Installation)**
```sh
npm install @nexsell-lib/shared
```

📌 **שימוש:**
```ts
import { Topics, BaseProducer } from "@nexsell-lib/shared";
```

---

## **📌 1️⃣ Enums - שימוש בתפקידים**
```ts
import { Roles } from "@nexsell-lib/shared";

if (user.role === Roles.Admin) {
  console.log("User is an admin");
}
```
🔹 **תפקידים נתמכים:** `Admin`, `SalesRep`, `Company`

---

## **📌 2️⃣ ניהול שגיאות מותאם אישית**
📌 **מחלקות לניהול שגיאות סטנדרטיות עם HTTP Codes.**
```ts
import { NotFoundError, BadRequestError } from "@nexsell-lib/shared";

throw new NotFoundError();
throw new BadRequestError("Invalid request");
```
🔹 **שגיאות זמינות:** `NotFoundError`, `BadRequestError`, `CustomError`, `NotAuthorizedError`, `DatabaseConnectionError`

---

## **📌 3️⃣ אירועים ב-RabbitMQ (Producers & Consumers)**
📌 **שימוש ב-`BaseProducer` לשליחת הודעות**
```ts
import { BaseProducer, Topics } from "@nexsell-lib/shared";

class UserCreatedProducer extends BaseProducer<{ topic: Topics.UserCreated; data: { id: string; email: string } }> {
  topic = Topics.UserCreated;
}
```
📌 **שימוש ב-`BaseConsumer` לקליטת אירועים**
```ts
import { BaseConsumer, Topics } from "@nexsell-lib/shared";

class UserCreatedConsumer extends BaseConsumer<{ topic: Topics.UserCreated; data: { id: string; email: string } }> {
  topic = Topics.UserCreated;
  async onMessage(data) {
    console.log("User Created:", data);
  }
}
```
🔹 **הודעות נתמכות:**  
✔️ `UserCreated`, `UserDeleted`, `LeadCreated`, `LeadAssigned`, `LeadDeleted`, `CallStarted`, `CallEnded`, `PaymentCompleted`, `PaymentFailed`

---

## **📌 4️⃣ Middleware לניהול בקשות**
📌 **הוספת CORS ואבטחה**
```ts
import express from "express";
import { corsOptions, securityHeaders, rateLimiter, errorHandler } from "@nexsell-lib/shared";

const app = express();

app.use(corsOptions);
app.use(securityHeaders);
app.use(rateLimiter);
app.use(errorHandler);
```
📌 **אימות משתמשים (`JWT`)**
```ts
import { requireAuth, currentUser } from "@nexsell-lib/shared";

app.use(currentUser);
app.get("/protected", requireAuth, (req, res) => {
  res.send({ message: "Success", user: req.currentUser });
});
```
📌 **סינון בקשות לא תקינות**
```ts
import { validateRequest } from "@nexsell-lib/shared";
import { body } from "express-validator";

app.post("/api/user", [
  body("email").isEmail(),
  validateRequest,
], (req, res) => {
  res.send({ message: "User created" });
});
```

---

## **📌 5️⃣ אבטחה (Security)**
📌 **Rate Limiting למניעת מתקפות**
```ts
import { rateLimiter } from "@nexsell-lib/shared";
app.use(rateLimiter);
```
📌 **מניעת התקפות XSS ו-Clickjacking**
```ts
import { securityHeaders } from "@nexsell-lib/shared";
app.use(securityHeaders);
```
📌 **שגיאות מותאמות אישית**
```ts
import { errorHandler } from "@nexsell-lib/shared";
app.use(errorHandler);
```

---

## **🚀 מסקנה**
✅ **קוד נקי ומודולרי לכל המיקרו-שירותים.**  
✅ **מוכן לפרודקשן עם `Security`, `Error Handling`, `Events`, `Middleware`.**  
✅ **ניתן להרחבה עם תוספות חדשות בעתיד.**  

💡 **יש לך שאלות? פנה לצוות הפיתוח של Nexsell!** 🚀