Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

e2ee-chat

dietfoodms2kMIT1.6.0

A simple realtime chat SDK for web and mobile apps using socket.io with support for end-to-end encryption and multi-tenant backend integration.

chat, realtime, socket.io, e2ee, sdk, messaging, javascript, frontend, multi-tenant

readme

💬 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

npm install e2ee-chat

🧪 Quick Start (React or Next.js)

"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:

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 and set up .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


⚖️ License

MIT