# پیام‌رسان کبالت

یک پیام‌رسان فارسی چنددستگاهه با رابط راست‌به‌چپ. صفحهٔ ورود و ثبت‌نام واقعی دارد و هر کاربری که روی هر دستگاهی ثبت‌نام و وارد شود، در فهرست مخاطبان بقیه دیده می‌شود و می‌تواند با آن‌ها پیام رد و بدل کند.

## امکانات

- ثبت‌نام و ورود واقعی با نام کاربری و رمز عبور (رمزها با `scrypt` هش می‌شوند)
- فهرست مخاطبان پویا: همهٔ حساب‌های ثبت‌نام‌شده روی سرور برای همه نمایش داده می‌شوند
- پیام‌رسانی بلادرنگ بین همهٔ دستگاه‌های واردشده از طریق WebSocket
- وضعیت آنلاین/آفلاین زنده، نشانگر «در حال نوشتن»، واکنش، پاسخ و شمارندهٔ پیام‌های خوانده‌نشده
- ماندگاری گفت‌وگوها روی سرور در `data/db.json` (پس از راه‌اندازی مجدد هم باقی می‌مانند)
- ورود هم‌زمان یک حساب روی چند دستگاه؛ تاریخچه روی همه همگام می‌شود
- پاک کردن گفت‌وگو برای هر دو طرف، جست‌وجوی مخاطب و متن پیام، حالت تاریک و رابط کاملاً واکنش‌گرا

## اجرا

```bash
npm install
npm start
```

سرور روی `http://127.0.0.1:5099` بالا می‌آید و آدرس‌های شبکهٔ محلی را هم در ترمینال چاپ می‌کند. برای تغییر پورت از متغیر محیطی `PORT` استفاده کنید.

## استفاده روی چند دستگاه

۱. سرور را روی یکی از سیستم‌ها اجرا کنید.
۲. روی هر دستگاه دیگری در همان شبکه، آدرس `http://<IP سرور>:5099` را باز کنید.
۳. روی هر دستگاه با دکمهٔ «ساخت حساب تازه» یک حساب بسازید (یا با حساب موجود وارد شوید).
۴. هر حساب تازه بلافاصله در فهرست مخاطبان بقیه ظاهر می‌شود؛ کافی است روی نامش بزنید و پیام بفرستید.

دکمهٔ «ورود سریع مهمان» یک حساب موقت با نام کاربری تصادفی می‌سازد؛ برای تست سریع مفید است.

## معماری

| بخش | فایل | توضیح |
| --- | --- | --- |
| سرور | `server.js` | فایل‌های ثابت، API ثبت‌نام/ورود/نشست و WebSocket پیام‌رسانی |
| داده | `data/db.json` | کاربران و پیام‌ها (خودکار ساخته می‌شود) |
| صفحهٔ ورود | `index.html` | فرم ورود/ثبت‌نام |
| صفحهٔ گفت‌وگو | `chat.html` | فهرست مخاطبان و فضای چت |
| منطق سمت مرورگر | `script.js` | احراز هویت، اتصال WebSocket و رابط کاربری |

نکته‌های امنیتی نسخهٔ فعلی: توکن‌های نشست در حافظهٔ سرور نگه‌داری می‌شوند، بنابراین با راه‌اندازی مجدد سرور باید دوباره وارد شوید. برای استفادهٔ واقعی روی اینترنت، سرویس را پشت HTTPS قرار دهید.

### API

- `POST /api/register` — `{ username, password, name }` → `{ token, user }`
- `POST /api/login` — `{ username, password }` → `{ token, user }`
- `GET /api/session` — با هدر `Authorization: Bearer <token>` → `{ user, users }`
- `GET /ws?token=<token>` — کانال بلادرنگ پیام، واکنش، تایپ و حضور

## تست

```bash
npm run check:api
```

تست‌های سرور: ثبت‌نام، نام کاربری تکراری، رمز اشتباه، فهرست کاربران، تحویل پیام، واکنش، تایپ و رد نشست نامعتبر.

```bash
npm run check
```

تست دود مرورگری با Chrome یا Edge: ثبت‌نام دو حساب در دو پروفایل جدا، دیده‌شدن یکدیگر در فهرست مخاطبان، ارسال و دریافت پیام دوطرفه، ورود دوباره روی دستگاه سوم و رد رمز اشتباه. اگر مرورگر در مسیر پیش‌فرض نیست، مسیر آن را در `CHROME_PATH` قرار دهید.

## بیلد تولیدی

```bash
npm run build
```

فایل‌های ثابت در `dist/` ساخته می‌شوند؛ برای اجرای واقعی همچنان به `npm start` (سرور Node) نیاز است.

## ساختار

```text
.
├── server.js
├── index.html
├── chat.html
├── style.css
├── script.js
├── assets/
├── fonts/
├── data/            # پایگاه دادهٔ JSON (خودکار)
└── tests/
    ├── server-test.mjs
    └── smoke-test.mjs
```
