# API & Tích hợp

## Tổng quan

AutoShopee Kit tích hợp với nhiều API bên ngoài và hệ thống nội bộ. Tài liệu này mô tả các endpoint, mục đích và cách tổ chức code.

## API Nội bộ AutoShopee

### REST API

| Service | URL | Mục đích |
|---------|-----|----------|
| Main API | `https://autoshopee.com/api/v1` | Xác thực, quản lý user, gói dịch vụ |
| CMS | `https://content.autoshopee.com` | Nội dung (tutorials, FAQs, guides) |
| CouchDB Sync | `https://store-extension-api.autoshopee.com` | Đồng bộ PouchDB ↔ CouchDB |
| Worker API | `https://worker-shopee-api.autoshopee.com` | Shopee API proxy/worker |

### WebSocket

| Service | URL | Mục đích |
|---------|-----|----------|
| Socket.io | `wss://ws.autoshopee.com` | Real-time events, thông báo |
| Worker Socket | `wss://worker-shopee-ws.autoshopee.com` | Shopee WebSocket proxy |

### Tổ chức code API nội bộ

```
src/app/api/autoshopee/
├── auth.js          # Đăng nhập, đăng ký, refresh token
├── user.js          # Thông tin user, gói dịch vụ
├── subscription.js  # Quản lý subscription
└── ...
```

## API Shopee

### Endpoints

| Loại | URL | Mục đích |
|------|-----|----------|
| Client | `https://shopee.vn` | API mua hàng (sản phẩm, shop, giỏ hàng) |
| Seller | `https://banhang.shopee.vn` | API bán hàng (đơn hàng, sản phẩm, chat) |
| Affiliate | `https://open-api.affiliate.shopee.vn` | Affiliate program (GraphQL + REST) |

### Tổ chức code

```
src/app/api/shopee/
├── client/          # API phía người mua
│   ├── product.js   # Thông tin sản phẩm
│   └── shop.js      # Thông tin shop
├── seller/          # API phía người bán
│   ├── order.js     # Quản lý đơn hàng
│   ├── product.js   # Quản lý sản phẩm
│   ├── chat.js      # Chat/tin nhắn
│   ├── marketing.js # Flash sale, voucher
│   ├── ads.js       # Quảng cáo
│   └── print.js     # In đơn hàng
└── affiliate/       # Affiliate API
    └── index.js     # GraphQL queries
```

### Đặc điểm kỹ thuật
- Sử dụng **Axios** với fetch adapter (tương thích Service Worker MV3)
- Request interceptor tự động gắn auth token
- Response interceptor xử lý lỗi và retry
- Hỗ trợ nhiều domain regional Shopee (`.vn`, `.co.id`, `.ph`, etc.)

## API TikTok Shop

### Endpoints

| URL | Mục đích |
|-----|----------|
| `https://seller-vn.tiktok.com` | Seller dashboard API |
| `https://shop-vn.tiktok.com` | Shop management API |

### Tổ chức code

```
src/app/api/tiktok/
├── seller/
│   ├── order.js     # Quản lý đơn hàng
│   ├── product.js   # Quản lý sản phẩm
│   └── ...
```

## API Lazada

### Endpoints

| URL | Mục đích |
|-----|----------|
| `https://sellercenter.lazada.vn` | Seller Center API |

### Tổ chức code

```
src/app/api/lazada/
├── seller/
│   ├── order.js     # Quản lý đơn hàng
│   └── ...
```

## Database Sync (PouchDB ↔ CouchDB)

### Cơ chế hoạt động

```
┌──────────────┐     Live Replication     ┌──────────────┐
│   PouchDB    │◄────────────────────────►│   CouchDB    │
│  (IndexedDB) │     Two-way + Retry      │   (Remote)   │
└──────────────┘                          └──────────────┘
```

### Cấu hình sync

- **Mode:** Live replication (two-way)
- **Retry:** Tự động retry khi mất kết nối
- **Auth:** `pouchdb-authentication` (username/password)
- **Cleanup:** Tự động xóa documents cũ hơn 30-45 ngày
- **Encryption:** `pouch-box` cho dữ liệu nhạy cảm

### Model API Loader

Base class `ModelApiLoader` (`src/app/api/model.js`) cung cấp:
- CRUD operations trên PouchDB
- Query bằng Mango selectors (`pouchdb-find`)
- Upsert operations (`pouchdb-upsert`)
- Relational queries (`relational-pouch`)
- Index management

## Socket.io Integration

### Kết nối

```javascript
// Background service worker
import { io } from 'socket.io-client'

const socket = io('wss://ws.autoshopee.com', {
  // config options
})
```

### Events chính

| Event | Direction | Mô tả |
|-------|-----------|--------|
| `connect` | Client → Server | Kết nối thành công |
| `authenticate` | Client → Server | Xác thực user |
| `shop:update` | Server → Client | Shop có cập nhật |
| `order:new` | Server → Client | Đơn hàng mới |
| `notification` | Server → Client | Thông báo chung |

## HTTP Client Configuration

### Axios Instance

```javascript
// Cấu hình chung
const instance = axios.create({
  baseURL: import.meta.env.VITE_API_URL,
  timeout: 30000,
  adapter: fetchAdapter  // Dùng fetch adapter cho MV3
})

// Request interceptor
instance.interceptors.request.use(config => {
  config.headers.Authorization = `Bearer ${token}`
  return config
})

// Response interceptor
instance.interceptors.response.use(
  response => response,
  error => {
    // Auto refresh token nếu 401
    // Retry logic
  }
)
```

## Permissions (Manifest)

Extension yêu cầu các quyền sau:

### Permissions
| Quyền | Mục đích |
|-------|----------|
| `storage` | Lưu trữ dữ liệu local |
| `tabs` | Truy cập thông tin tab |
| `alarms` | Scheduled tasks |
| `webRequest` | Intercept network requests |
| `cookies` | Đọc cookies (auth tokens) |
| `notifications` | Hiển thị thông báo |

### Host Permissions
- `https://shopee.vn/*` và các domain regional
- `https://banhang.shopee.vn/*`
- `https://seller-vn.tiktok.com/*`
- `https://sellercenter.lazada.vn/*`
- `https://autoshopee.com/*`
- `https://store-extension-api.autoshopee.com/*`
- `https://ws.autoshopee.com/*`
