# ZA-FARM-KH — Gmail OTP Reseller Platform

វេបសាយលក់ Gmail OTP សម្រាប់ Facebook Verification។ យើងជា reseller ដែលយក API ពី provider ធំមកដាក់ក្នុងវេបសាយរបស់យើង។

---

## 📋 របៀបដំណើរការ

```
ភ្ញៀវទិញ → វេបសាយយើង → Upstream API (Provider ធំ) → ទទួល Gmail → ផ្ញើទៅភ្ញៀវ
```

1. ភ្ញៀវចុះឈ្មោះ/ចូលគណនី
2. ភ្ញៀវបញ្ចូលប្រាក់ (Balance)
3. ភ្ញៀវចុច "ទិញ Gmail OTP"
4. Server យើងទៅទិញពី Upstream API ធំ
5. ទទួល Gmail + OTP ពី Provider
6. ផ្ញើលទ្ធផលទៅភ្ញៀវ
7. Admin ទទួល notification តាម Telegram

---

## 🚀 ការដំឡើង (Installation)

### 1. Clone & Install

```bash
git clone <your-repo>
cd za-farm-kh
npm install
```

### 2. បង្កើតឯកសារ .env

```bash
copy .env.example .env
```

បន្ទាប់មកកែ `.env`:

```env
PORT=3000
JWT_SECRET=your_secret_key_here

# Telegram Bot
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_ADMIN_CHAT_ID=your_chat_id

# Upstream API (សំខាន់បំផុត!)
UPSTREAM_API_URL=https://your-provider-api.com
UPSTREAM_API_KEY=your_provider_api_key

# Google OAuth (Optional)
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=http://localhost:3000/zapi/auth/google/callback
```

### 3. បង្កើត Data Files

```bash
mkdir server\data
```

បង្កើតឯកសារ `server/data/services.json`:
```json
[
  {
    "id": "gmail_otp",
    "title": "Gmail OTP",
    "sub": "Gmail OTP សម្រាប់ Facebook Verification",
    "stock": 500,
    "price": 0.053,
    "duration": "6min"
  }
]
```

បង្កើតឯកសារ `server/data/users.json`:
```json
[]
```

បង្កើតឯកសារ `server/data/orders.json`:
```json
[]
```

### 4. Run Server

```bash
npm start
```

បើក browser: `http://localhost:3000`

---

## 🔌 Upstream API (ការដាក់ API ធំ)

### តើ Upstream API ជាអ្វី?

Upstream API គឺជា API របស់ provider ធំដែលយើងទិញ Gmail OTP ពី។ ពេលភ្ញៀវទិញនៅលើវេបសាយយើង → server យើងទៅទិញពី provider ធំនោះ → ផ្ញើលទ្ធផលទៅភ្ញៀវ។

### របៀបដាក់ Upstream API

1. **ទទួល API Key ពី Provider** — ចុះឈ្មោះនៅ provider ធំ ហើយយក API key
2. **ដាក់ក្នុង .env**:
   ```env
   UPSTREAM_API_URL=https://provider-api.example.com
   UPSTREAM_API_KEY=sk_live_xxxxxxxxxxxx
   ```
3. **Restart server** — `npm start`

### Provider API ត្រូវមាន Endpoints ទាំងនេះ:

| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | /zapi/orders | ទិញ Gmail OTP |

**Request Format:**
```json
POST /zapi/orders
Headers: { "X-API-KEY": "your_key", "Content-Type": "application/json" }
Body: { "service": "gmail_otp", "quantity": 1 }
```

**Response Format:**
```json
{
  "items": [
    { "mail": "example@gmail.com", "password": "xxx", "recovery": "xxx" }
  ]
}
```

### បើមិនមាន Upstream API

បើមិនដាក់ `UPSTREAM_API_URL` ក្នុង `.env` → server នឹងប្រើ demo mode (generate fake data)។ ល្អសម្រាប់ test។

---

## 📱 Telegram Bot Setup

### 1. បង្កើត Bot

1. ទៅ [@BotFather](https://t.me/BotFather) នៅ Telegram
2. ផ្ញើ `/newbot`
3. ដាក់ឈ្មោះ bot (ឧ. ZA-FARM Notify)
4. Copy token ដាក់ក្នុង `.env` → `TELEGRAM_BOT_TOKEN`

### 2. យក Chat ID

1. ផ្ញើ message ទៅ bot របស់អ្នក
2. ទៅ [@userinfobot](https://t.me/userinfobot) ដើម្បីយក chat ID
3. ដាក់ក្នុង `.env` → `TELEGRAM_ADMIN_CHAT_ID`

### 3. Bot Commands

- `/start` — ចាប់ផ្តើម
- `/stock` — មើល stock
- `/orders` — មើល orders ថ្មីៗ
- `/balance` — មើល total revenue

### Notifications ដែល Bot ផ្ញើ:

- 👤 ពេលមានអ្នកចុះឈ្មោះថ្មី
- 🛒 ពេលមានការបញ្ជាទិញថ្មី
- 🔑 ពេលមានអ្នកស្នើ reset password

---

## 🔐 Google Sign-In Setup (Optional)

### 1. Google Cloud Console

1. ទៅ [Google Cloud Console](https://console.cloud.google.com)
2. បង្កើត Project ថ្មី
3. ទៅ APIs & Services → Credentials
4. ចុច "Create Credentials" → "OAuth 2.0 Client ID"
5. Application type: Web application
6. Authorized redirect URIs: `http://localhost:3000/zapi/auth/google/callback`
7. Copy Client ID និង Client Secret

### 2. ដាក់ក្នុង .env

```env
GOOGLE_CLIENT_ID=123456789.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxx
GOOGLE_REDIRECT_URI=http://localhost:3000/zapi/auth/google/callback
```

### 3. Production

ពេល deploy ត្រូវកែ redirect URI ទៅ domain ពិត:
```env
GOOGLE_REDIRECT_URI=https://yourdomain.com/zapi/auth/google/callback
```

---

## 🧪 សាកល្បង (Testing)

### Test 1: ចុះឈ្មោះ

1. បើក `http://localhost:3000/register.html`
2. បំពេញ Username, Email, Telegram, Password
3. ចុច "បង្កើតគណនី"
4. ✅ ត្រូវទទួល notification នៅ Telegram

### Test 2: ចូលគណនី

1. បើក `http://localhost:3000/login.html`
2. បញ្ចូល email + password ដែលចុះឈ្មោះ
3. ✅ ត្រូវចូលទៅ dashboard បាន

### Test 3: ទិញ Gmail OTP

1. បញ្ចូល balance (ទំព័រ Balance)
2. ចុច "ទិញឥឡូវ" នៅ dashboard
3. ជ្រើសចំនួន → ចុច "បញ្ជាក់ការទិញ"
4. ✅ ត្រូវទទួល Gmail + notification Telegram

### Test 4: API

```bash
# Get services
curl http://localhost:3000/zapi/services

# Login
curl -X POST http://localhost:3000/zapi/auth/login \
  -H "Content-Type: application/json" \
  -d "{\"email\":\"test@test.com\",\"password\":\"123456\"}"

# Buy (use token from login)
curl -X POST http://localhost:3000/zapi/orders \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d "{\"service\":\"gmail_otp\",\"quantity\":1}"
```

### Test 5: Upstream API

បើដាក់ `UPSTREAM_API_URL` រួចហើយ:
1. ទិញ Gmail OTP ពី dashboard
2. មើល server logs — ត្រូវឃើញ `[Upstream]` request
3. ✅ ត្រូវទទួល data ពិតពី provider

---

## 📁 Project Structure

```
za-farm-kh/
├── public/                 # Frontend files
│   ├── index.html          # Dashboard (sidebar layout)
│   ├── login.html          # Login page (split layout)
│   ├── register.html       # Register page
│   ├── forgot.html         # Forgot password
│   ├── balance.html        # Top up balance
│   ├── api.html            # API documentation
│   ├── styles.css          # Dashboard styles
│   ├── auth-styles.css     # Auth pages styles (light theme)
│   ├── app.js              # Dashboard logic
│   └── auth.js             # Auth logic
├── server/
│   ├── index.js            # Express server
│   ├── db.js               # JSON file database
│   ├── telegram.js         # Telegram bot
│   ├── routes/
│   │   ├── auth.js         # Auth routes (login, register, google)
│   │   ├── orders.js       # Order routes (buy from upstream)
│   │   └── services.js     # Service routes
│   └── data/               # JSON database files
├── .env.example
├── package.json
└── README.md
```

---

## 💡 Tips

- **Stock**: កែ stock ក្នុង `server/data/services.json` ឬតាម API
- **Price**: កែតម្លៃក្នុង `services.json` → `price: 0.053`
- **Multiple providers**: អាចកែ `orders.js` ដើម្បីប្រើ provider ច្រើន
- **Security**: កែ `JWT_SECRET` ក្នុង `.env` ឲ្យខ្លាំង

---

© ZA-FARM-KH | [Telegram](https://t.me/ZA_FARM_KH)
