# Changelog

## 3.1.1 — 25/09/2026

- Sửa custom link Lazada bị lỗi 502 do Cloudflare Worker không kết nối được tới Lazada Open API.
- Trình duyệt ký request và gọi thẳng endpoint Lazada có hỗ trợ CORS; không còn cần deploy `_worker.js` hoặc gửi App Key/User Token qua LocLink.
- Đã kiểm tra thực tế với link Lazada rút gọn, Sub ID và bộ API hợp lệ.

## 3.1.0 — 25/09/2026

- Thêm custom link Lazada qua Open API, tự nhận diện link Shopee/Lazada trong cùng nội dung và giữ nguyên link lỗi.
- Thêm mục cài đặt nhỏ cho LiteApp Key, LiteApp Secret và User Token; cấu hình được lưu local trên trình duyệt.
- Ký HMAC-SHA256 bằng LiteApp Secret ngay tại trình duyệt; secret không được gửi tới LocLink.
- Thêm Cloudflare Pages Worker giới hạn cố định tới Lazada `/marketing/getlink`, kiểm tra domain, timestamp, kích thước và tham số request; tương thích cả deploy kéo-thả nhờ `_worker.js` Advanced Mode.
- Thêm thông báo nhỏ trong tool để giới thiệu chức năng Lazada và liên kết nhanh tới phần cài đặt.

## 3.0.16 — 29/08/2026

- Đọc Sub ID từ trường `utm_content` thực tế của Báo cáo chuyển đổi Shopee.
- Tách chuỗi `sub1-sub2-sub3--` thành tổ hợp Sub ID và vẫn hiển thị trên cùng một dòng.
- Giữ nguyên chuỗi UTM gốc khi gửi bộ lọc lại cho API lượt click.

## 3.0.15 — 29/08/2026

- Báo cáo nhận diện Sub ID ở cả cấu trúc lồng nhau và các biến thể tên trường của Shopee.
- Bộ lọc Sub ID vẫn hiện ở màn hình chi tiết Báo cáo trên mobile, thay vì bị ẩn cùng phần tổng quan.
- Mobile harness mặc định nạp dữ liệu báo cáo mẫu để kiểm tra bộ lọc Sub ID ngay khi mở.

## 3.0.14 — 25/08/2026

- Ô tìm kiếm Sub ID trong Báo cáo chỉ lọc danh sách có sẵn, không còn tạo bộ lọc nhập tay.
- Custom Link vẫn cho phép nhập Sub ID mới; hai luồng được tách rõ.

## 3.0.13 — 25/08/2026

- “Lấy link gốc” không còn chuyển sang màn hình kết quả hoặc che ô link đang dán.
- Kết quả được thu thành đúng hai hàng nhỏ ngay dưới link cũ: Link gốc và Sub ID/Affiliate ID.
- Tự ẩn kết quả cũ khi người dùng sửa link để tránh hiển thị dữ liệu không còn khớp.

## 3.0.12 — 25/08/2026

- Bỏ hàng “Custom link · số thành công/giữ nguyên · Làm lại”; trạng thái được giữ trong thông báo gọn ở cuối trang.
- Thu gọn bộ chọn Sub ID nhưng vẫn giữ thao tác chọn một chạm.
- Custom Link luôn mở rộng `s.shopee.vn`, `vn.shp.ee`, `shope.ee` trước khi gửi sang Shopee Affiliate.
- Worker hỗ trợ thêm domain rút gọn trung gian công khai, redirect HTML và JavaScript; chặn địa chỉ nội bộ, thông tin đăng nhập trong URL và cổng không an toàn.

## 3.0.11 — 25/08/2026

- Khôi phục luồng Custom Link hai ô trên mobile: nội dung gốc luôn ở trên và kết quả đã chuyển đổi ở dưới.
- Ẩn trạng thái “Sẵn sàng chuyển link” khi phiên Affiliate đã dùng được; thông báo chuyển đổi được thu gọn thành một dòng và đặt dưới kết quả.
- Thay ô nhập Sub ID bị ẩn bằng bộ chọn mobile: chọn lại Sub ID đã dùng, bỏ Sub ID hoặc nhập một Sub ID mới ngay trong danh sách.
- Đồng bộ lịch sử Sub ID sang bộ lọc báo cáo, kể cả khi phản hồi báo cáo hiện tại không kèm trường Sub ID.

## 3.0.10 — 25/08/2026

- Thông báo trong tool có nút đóng rõ ràng; thông báo thành công tự ẩn sau 3,2 giây để không che nội dung trên mobile.
- Nhận diện thêm link rút gọn `vn.shp.ee` và giữ chuỗi chuyển hướng trung gian để đọc đúng link sản phẩm cùng Affiliate ID.
- Trả đúng dạng link gốc `/opaanlp/{shopId}/{itemId}` khi Shopee dùng đường dẫn này, đồng thời chuẩn hóa `mmp_pid=an_{id}` thành Affiliate ID dạng số.
- Worker mở rộng link giữ tương thích trường `finalUrl`, bổ sung `redirectChain` và loại bỏ token nhạy cảm trước khi trả về trình duyệt.

## 3.0.9 — 25/08/2026

- Tab Chuyển link có hai chế độ rõ ràng: Tạo Affiliate và Lấy link gốc, dùng chung một ô nhập để không tăng chiều dài giao diện.
- Tự gợi ý nhẹ chế độ Lấy link gốc khi nội dung có dấu hiệu là link Affiliate nhưng không tự chuyển chế độ.
- Thay select SUB ID bằng nút lọc compact và bottom sheet tìm kiếm, chọn một chạm trên mobile.
- Tổ hợp `sub1 · sub2 · sub3` luôn hiển thị chung một dòng, có số lượng và nhóm lựa chọn gần đây.
- Bottom sheet nằm gọn trong khung công cụ, hỗ trợ bàn phím, Escape và vùng bấm tối thiểu 44px.

## 3.0.8 — 25/08/2026

- Chuyển toàn bộ giao diện mobile sang bố cục compact không cuộn khung chính, kể cả khi xoay ngang.
- Tách trạng thái nhập liệu và kết quả: Chuyển link, Phân tích link và Voucher dùng trọn màn hình rồi quay lại bằng một nút rõ ràng.
- Báo cáo chia thành Tổng quan và Chi tiết; danh sách đơn dài chỉ cuộn bên trong danh sách.
- Thu gọn header, tab và action bar theo chiều cao khả dụng nhưng vẫn giữ vùng bấm 44–48px.
- Thêm fixture kiểm thử dữ liệu dài cho mobile dọc 390×844 và ngang 844×390.

## 3.0.7 — 25/08/2026

- Tối ưu mobile-first: toàn bộ ô nhập và danh sách chọn dùng cỡ chữ 16px để tránh iOS tự zoom, đồng thời thích nghi với `visualViewport` khi bàn phím ảo mở.
- Đưa nút hành động chính của Chuyển link, Voucher và Báo cáo xuống thanh cố định, giữ vùng bấm 44–48px.
- Đổi bộ lọc báo cáo từ nhập tay sang danh sách tổ hợp Sub ID; `sub1 · sub2 · sub3` hiển thị trên cùng một dòng và lọc khớp chính xác.
- Thêm công cụ lấy link sản phẩm gốc, Affiliate ID và Sub ID từ link đầy đủ hoặc chuỗi chuyển hướng rút gọn.
- Không lưu cookie đăng nhập vào localStorage; tiếp tục dùng phiên đăng nhập do trình duyệt quản lý trên đúng domain.

## 3.0.6 — 09/08/2026

### Chuyển domain trong chính tab hiện tại

- Khôi phục nút **Tạo Custom Link**; không đổi tên hành động thành **Mở Affiliate để tiếp tục** khi đang ở sai domain.
- Thêm ô sao chép nhanh `affiliate.shopee.vn` tại tab Chuyển link và `shopee.vn` tại tab Voucher.
- Bỏ toàn bộ hành vi tự mở tab mới khi chuyển giữa Shopee và Shopee Affiliate.
- Nội dung đang nhập được giữ tạm tối đa 10 phút trong chính tab hiện tại và khôi phục sau khi người dùng dán domain vào thanh địa chỉ rồi bấm lại LocLink.
- Nút chính trên sai domain cũng chỉ sao chép địa chỉ và hướng dẫn chuyển trang trong cùng tab.

## 3.0.5 — 09/08/2026

### Trải nghiệm thao tác và lọc báo cáo

- Ghim khu vực **Chuyển đổi link** và **Sao chép kết quả** bên dưới nội dung để luôn nhìn thấy, không cần kéo xuống cuối kết quả.
- Bổ sung ô **Lọc theo Sub ID** trong báo cáo; GMV, hoa hồng, đơn hợp lệ và đơn hủy/hoàn được tính lại theo các chuyển đổi khớp `sub_id`.
- Lượt click sử dụng cùng tham số `sub_id` của API báo cáo click. Khi sửa bộ lọc trên dữ liệu đã tải, tool nói rõ cần bấm **Tải báo cáo** để cập nhật click.
- Căn modal giữa hai cạnh trên/dưới trên cả máy tính và điện thoại.
- Thêm nền mờ nhẹ phía sau cùng đường viền ấm, mảnh để khung công cụ nổi bật hơn.

## 3.0.4 — 09/08/2026

### Không tự mở ứng dụng Shopee khi lưu voucher

- Trên điện thoại, nút chuyển sang Shopee không còn mở trực tiếp liên kết có thể kích hoạt ứng dụng Shopee.
- Tool giữ hoặc sao chép nội dung, sau đó hướng dẫn mở tab trình duyệt mới và nhập `shopee.vn` để tiếp tục.
- Đổi nhãn nút thành **Chuẩn bị sang Shopee Web** trên điện thoại và **Mở Shopee Web để tiếp tục** trên máy tính.
- Trên máy tính, tab đích được tạo ngay lúc bấm nút để giảm nguy cơ trình duyệt chặn cửa sổ mới.

## 3.0.3 — 09/08/2026

### Cài đặt đơn giản hơn

- Chuyển hướng dẫn chính sang cài LocLink bằng Dấu trang.
- Loại bỏ Tampermonkey, Violentmonkey và quy trình cài tiện ích khỏi trang chủ.
- Thêm các bước riêng cho máy tính, Chrome Android và Safari trên iPhone/iPad.
- Đổi thuật ngữ “script/bookmarklet” thành “mã LocLink” và “Nút LocLink trong Dấu trang”.
- Giữ tệp UserScript phía sau để không làm gián đoạn người dùng cũ.

## 3.0.2 — 09/08/2026

### Hướng dẫn cài đặt

- Tách hướng dẫn thành hai khu vực riêng cho máy tính và điện thoại.
- Bổ sung quy trình máy tính với Tampermonkey.
- Bổ sung quy trình Android với Firefox và Violentmonkey.
- Bổ sung quy trình iPhone/iPad với Safari và Tampermonkey.
- Cảnh báo rõ Chrome mobile và ứng dụng Shopee không chạy UserScript.

## 3.0.1 — 09/08/2026

### Sửa lỗi báo cáo

- GMV được tính từ tổng `actual_amount` của từng sản phẩm trong từng đơn hàng V3.
- Loại bỏ `checkout_cap` khỏi toàn bộ nguồn dữ liệu GMV; đây không phải doanh số.
- Không trừ tiền hoàn lần thứ hai khi `actual_amount` đã có trong response.
- Kiểm tra trạng thái hủy theo từng đơn thay vì áp một trạng thái chung cho cả checkout.
- Không còn nhận nhầm trạng thái “Hoàn thành” là đơn hoàn/hủy.

### Hướng dẫn

- Đưa nút sao chép script lên phần đầu trang chủ.
- Thêm hướng dẫn ba bước bằng ngôn ngữ đơn giản cho người dùng không rành kỹ thuật.
- Đổi tên các lựa chọn cài đặt theo mục đích sử dụng thay vì thuật ngữ kỹ thuật.

## 3.0.0 — 09/08/2026

### Mới

- Giao diện premium mới chạy trong Shadow DOM.
- Panel desktop dock cố định và bottom sheet mobile dùng dynamic viewport.
- Domain-aware action và handoff an toàn qua UserScript storage.
- Progress cho convert link và voucher.
- Empty/loading/success/partial/error states thống nhất.
- Accessibility: keyboard tabs, focus visible, ARIA live region, reduced motion và touch target 44px+.
- Build UserScript self-contained.
- Landing page, tài liệu cài đặt và privacy note mới.

### Sửa lỗi

- Bổ sung parse JSON trước khi đọc kết quả lưu voucher.
- Tách đơn hủy/hoàn khỏi KPI hợp lệ.
- Sửa semantics khoảng 7/30 ngày hoàn chỉnh.
- Không hiển thị số 0 trước khi báo cáo được tải.
- Không render dữ liệu đơn hàng động bằng HTML chưa escape.
- Dừng queue voucher khi hết phiên hoặc bị rate limit.
- Kiểm tra response schema trước khi tính báo cáo.

### Bảo mật và độ tin cậy

- UserScript không còn tải remote script rồi `eval()` mỗi lần chạy.
- Thu hẹp `@match` và quyền UserScript.
- Không dùng iframe hoặc proxy lưu session.
- Bookmarklet được chuyển thành phương thức Legacy và pin version tải.
