58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
import { generateSuite, getSuite, planSuite } from '../src/api/client';
|
||
|
||
// Background Service Worker —— 唯一出网口(生成 / 规划 / 轮询任务,绕 CORS)
|
||
export default defineBackground(() => {
|
||
console.log('[电商套图工作台] background started');
|
||
|
||
// 点击扩展图标 → 开关当前商品页的悬浮面板(页面无 content script 时忽略)
|
||
chrome.action.onClicked.addListener(async (tab) => {
|
||
if (tab.id == null) return;
|
||
try {
|
||
await chrome.tabs.sendMessage(tab.id, { action: 'toggle-suite-panel' });
|
||
} catch {
|
||
// 非四站点页面,未注入面板
|
||
}
|
||
});
|
||
|
||
chrome.runtime.onMessage.addListener((msg, _sender, sendResponse) => {
|
||
if (msg?.action === 'generateSuite') {
|
||
generateSuite(msg.baseUrl, msg.token, msg.payload)
|
||
.then((data) => sendResponse({ ok: true, data }))
|
||
.catch((err) => sendResponse({ ok: false, error: err instanceof Error ? err.message : String(err) }));
|
||
return true;
|
||
}
|
||
|
||
if (msg?.action === 'planSuite') {
|
||
planSuite(msg.baseUrl, msg.token, msg.payload)
|
||
.then((data) => sendResponse({ ok: true, data }))
|
||
.catch((err) => sendResponse({ ok: false, error: err instanceof Error ? err.message : String(err) }));
|
||
return true;
|
||
}
|
||
|
||
if (msg?.action === 'getSuite') {
|
||
getSuite(msg.baseUrl, msg.token, msg.suiteId)
|
||
.then((data) => sendResponse({ ok: true, data }))
|
||
.catch((err) => sendResponse({ ok: false, error: err instanceof Error ? err.message : String(err) }));
|
||
return true;
|
||
}
|
||
|
||
// 通用文本代理:采集引擎拉跨域资源(1688 详情 CDN / mtop API)
|
||
if (msg?.action === 'fetchText') {
|
||
const headers: Record<string, string> = {};
|
||
if (msg.referer) headers['Referer'] = msg.referer;
|
||
fetch(msg.url, {
|
||
headers,
|
||
credentials: msg.credentials ? 'include' : 'omit',
|
||
})
|
||
.then(async (res) => {
|
||
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
||
sendResponse({ ok: true, text: await res.text() });
|
||
})
|
||
.catch((err) => sendResponse({ ok: false, error: err instanceof Error ? err.message : String(err) }));
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
});
|
||
});
|