# Star Chart Search Enhancer Chrome MV3 extension for the Xingtu creator market page. ## Development ```bash npm install npm test npm run build ``` ## Load The Extension 1. Run `npm run build` 2. Open `chrome://extensions` 3. Enable developer mode 4. Choose `Load unpacked` 5. Select the `dist/` directory ## Current Scope - Adds two after-search-rate columns to the Xingtu market list - Adds a popup-based Logto auth entry - Hydrates the current page immediately - Provides plugin-owned filter, sort, and CSV export controls - Gates the market tools until auth is available - Triggers full-scan flow only when filter, sort, or export is used ## Auth Configuration The Logto integration is wired with placeholder values in `src/shared/auth-config.ts`. Replace these before real sign-in testing: - `logtoEndpoint` - `appId` - `apiResource` - Any extra scopes beyond `openid`, `profile`, and `offline_access` The popup dev panel is controlled by `enableDevAuthPanel`. ## Popup Behavior 1. Load the unpacked extension from `dist/` 2. Click the extension icon 3. Confirm the popup shows `登录 Logto` when unauthenticated 4. After real Logto config is added, use the popup to sign in and sign out ## Protected API Mock Test 1. Set `enableDevAuthPanel` to `true` in `src/shared/auth-config.ts` 2. Run `npm run mock:protected-api` 3. Run `npm run build` 4. Reload the unpacked extension from `dist/` 5. Open the popup and log in 6. Click `测试受保护接口` 7. Confirm the popup shows JSON containing `"source": "mock-protected-api"` and `"message": "authorized"` ## Batch Submit Mock Test 1. Run `npm run mock:protected-api` 2. Run `npm run build` 3. Reload the unpacked extension from `dist/` 4. Open `https://xingtu.cn/ad/creator/market` 5. Choose an export range in the plugin toolbar 6. Click `提交批次` 7. Enter a batch name in the browser prompt 8. Confirm the toolbar shows `批次提交成功` 9. Confirm the mock batch response accepts the payload and reports the submitted `batchId` ## Market Auth Gate When the market page is opened without a valid auth state, the content script renders `请先登录插件` and does not boot the filter, sort, or export toolbar. ## Manual Verification 1. Load the unpacked extension from `dist/` 2. Open `https://xingtu.cn/ad/creator/market` 3. Confirm the page shows the auth gate until login is available 4. After authentication is wired, confirm the two new columns appear 5. Confirm current-page rows move through loading and then render values or failure states 6. Apply a threshold filter and confirm the list hides unmatched rows 7. Apply a sort and confirm row order changes 8. Export CSV and confirm the file includes plugin status and after-search-rate fields 提交的数据格式 ```json { "logtoUserId": "p7pdhhtde8kj", "creatorName": "王少卿", "resource": "https://talent-search.intelligrow.cn", "batchName": "自动验证批次", "batchId": "p7pdhhtde8kj-<提交当时的 ISO 时间戳>", "createdAt": "<提交当时的 ISO 时间戳>", "authors": [ { "authorId": "7041184989643276324", "authorName": "旖旖小虎🐯" }, { "authorId": "7021245050621263906", "authorName": "瑶一瑶小肉包" }, { "authorId": "6629722292110753806", "authorName": "陈翔六点半" }, { "authorId": "7065613279053217829", "authorName": "小花花的每一天" }, { "authorId": "7254389871895117885", "authorName": "疯铲姐妹" }, { "authorId": "7294473194298146854", "authorName": "奇奇de海洋" }, { "authorId": "6834119701379940360", "authorName": "任志达" }, { "authorId": "6870159718216630285", "authorName": "大师兄的表哥" }, { "authorId": "6833914516833566727", "authorName": "旺仔是三七分" }, { "authorId": "7401565089431552037", "authorName": "笑典动物园" }, { "authorId": "7120107426002501639", "authorName": "嘻哈不拆" }, { "authorId": "7015813716650393630", "authorName": "周星伦" }, { "authorId": "6870170568893661197", "authorName": "周周的周" }, { "authorId": "6839989503663276045", "authorName": "潇潇学姐" }, { "authorId": "7023032374749298718", "authorName": "大自然奇观" }, { "authorId": "6870164079617523719", "authorName": "王小怪" }, { "authorId": "6969058840033624100", "authorName": "周三拾" }, { "authorId": "6825383642127138829", "authorName": "罗臣臣" }, { "authorId": "6684403430837977100", "authorName": "段炼丶Exercise" }, { "authorId": "7319160797236559882", "authorName": "郑皓文" } ] } ```