# Tham chiếu: cách EcomereFlow lấy thông tin sản phẩm Shopee

> Bản tóm tắt 1 trang. Chi tiết đầy đủ: [`ecomflow-product-capture.md`](./ecomflow-product-capture.md).
>
> Đọc từ dự án `J:\Development\EcomereFlow Project\ExtensionShopee` (WXT + Vue 3 + TS, Chrome MV3).
> Ghi lại như **reference** để đối chiếu với cơ chế lấy dữ liệu hiện tại của AutoShopee Kit
> ([`fetch-data-flow.md`](./fetch-data-flow.md)).

## Tóm tắt

Extension đó lấy dữ liệu sản phẩm theo hướng **passive listener** — không tự gọi API, chỉ
nghe request mà chính trang Shopee phát ra:

1. **MAIN-world hook** (`pdp-hook-main`) monkey-patch `window.fetch` + `XMLHttpRequest` của
   trang Shopee. Khi Shopee gọi `/api/v4/pdp/get_pc`, hook `clone()` response body và
   `window.postMessage` ra ngoài. Ngụy trang `fetch.toString()` để né phát hiện, không bao giờ
   throw vào code Shopee.
2. **ISOLATED bridge** (`pdp-hook`) nghe message, parse `shopId/itemId/modelId` từ URL, gửi
   `PRODUCT_DATA_CAPTURED` lên background.
3. **Background** cache theo key `shopId/itemId` (TTL 10 phút), phục vụ `EXTRACT_PRODUCT` cho
   UI. Chạy `shopeePdpGetPcAdapter` để trả shape chuẩn hóa `ProductPlatform` — UI không thấy
   raw payload.
4. **HTML-tag fallback** khi hook chưa kịp bắt: đọc **chỉ** `<title>`, `og:*`,
   `<meta description>`, `<link canonical>` (không parse JSON blob) → bản partial, chờ hook
   nâng cấp lên full qua broadcast `PRODUCT_UPDATED`.
5. **Permission phụ**: `webRequest` chỉ lấy tín hiệu thời điểm để invalidate cache; `cookies`
   đọc trạng thái đăng nhập; `declarativeNetRequest` rewrite header cho fetch chủ động (dự phòng).

Endpoint nghe duy nhất: **`/api/v4/pdp/get_pc`**. Parse URL qua `location.pathname` nên đồng
nhất cho cả 8 quốc gia (`shopee.vn`, `.sg`, `.com.my`, `.ph`, `.co.id`, `.tw`, `.co.th`,
`.com.br`). CDN ảnh `*.susercontent.com` (host `down-{cc}`), giá micro-unit chia 10⁵.

## Khác gì AutoShopee Kit

| | EcomereFlow (passive) | AutoShopee Kit (active replay) |
|--|-----------------------|--------------------------------|
| Cách lấy | Nghe request Shopee tự phát | Bắt headers thật → replay + main-world fetch |
| Anti-bot | Né hoàn toàn | Phải bắt & replay `af-ac-enc-*`, csrftoken |
| Phạm vi | Sản phẩm đang xem | Lấy hàng loạt (search/category/shop spy) |

Passive an toàn & đồng bộ tuyệt đối nhưng **chỉ** lấy được sản phẩm user đang mở; muốn lấy
hàng loạt vẫn cần cơ chế active của AutoShopee Kit.
