# 💬 Realtime Chat SDK (Node.js / React)

This SDK allows you to easily integrate **end-to-end encrypted 1-to-1 realtime chat** into your app using our hosted microservice.

---

## 🚀 Features

- 🔒 End-to-end AES encrypted messages
- ⚡️ Socket-based realtime messaging
- 🧩 Multi-tenant DB support via `apiKey`
- 👥 Role-based user handling (client, handler, admin)
- 📥 Chat history via REST API
- 🔄 Dynamic handler takeover logic
- ✅ Works with Node.js, React.js, Next.js (App Router compatible)

---

## 📦 Installation

```bash
npm install e2ee-chat
```

---

## 🧪 Quick Start (React or Next.js)

```jsx
"use client";

import React, { useState } from "react";
import useChat from "e2ee-chat/useChat";

export default function ChatBox() {
  const [input, setInput] = useState("");
  const { messages, sendMessage, joined } = useChat({
    serverUrl: "http://localhost:4000",
    roomId: "session_abc123",
    userId: "user1",
    userType: "client",
    secretKey: "shared-secret-123",
    apiKey: "your-api-key-here",
  });

  return (
    <div>
      <h2>Chat</h2>
      <ul>
        {messages.map((m, i) => (
          <li key={i}>
            <b>{m.senderId}</b>: {m.decryptedText}
          </li>
        ))}
      </ul>
      <input value={input} onChange={(e) => setInput(e.target.value)} />
      <button onClick={() => sendMessage(input, "user2")}>Send</button>
    </div>
  );
}
```

---

## 🧩 useChat Options

| Option      | Type   | Required | Description                        |
| ----------- | ------ | -------- | ---------------------------------- |
| `serverUrl` | string | ✅       | Your hosted chat server URL        |
| `roomId`    | string | ✅       | Session ID for the chat            |
| `userId`    | string | ✅       | Your current user's ID             |
| `userType`  | string | ✅       | `client`, `handler`, or `admin`    |
| `secretKey` | string | ✅       | AES secret used to encrypt/decrypt |
| `apiKey`    | string | ✅       | API key to identify your org DB    |

---

## 📥 Accessing Chat History

Chat history is fetched **automatically** when the user joins. All messages are decrypted with your `secretKey`.

---

## 🔁 Admin Takeover Logic

You can trigger handler takeover:

```js
const { takeover } = useChat(...);
takeover(); // Makes current user the new handler
```

---

## 🏗 Works in:

- ✅ React.js
- ✅ Next.js App Router
- ✅ Node.js test scripts

---

## 📁 Server Setup (Hosted Microservice)

To host your own server, clone [chat-server](https://github.com/your-org/chat-server) and set up `.env`:

```env
PORT=4000
MONGO_URI=your-default-db-uri
```

---

## 🧠 Multi-Tenant Support

Register your `apiKey` and `mongoUri` in the `Tenant` collection to isolate DB access per organization.

---

## 📮 Support

For issues, contact: [support@yourchatservice.com](mailto:support@yourchatservice.com)

---

## ⚖️ License

MIT
