Files
makemd/extension/src/background/index.ts
wurenzhi 037e412aad feat: 新增多模块功能与服务实现
新增广告计划、用户资产、B2B交易、合规规则等核心模型
实现爬虫工作器、贸易服务、现金流预测等业务服务
添加RBAC权限测试、压力测试等测试用例
完善扩展程序的消息处理与内容脚本功能
重构应用入口与文档生成器
更新项目规则与业务闭环分析文档
2026-03-18 09:38:09 +08:00

72 lines
2.2 KiB
TypeScript

import { OrderCollector } from './OrderCollector';
import { ReturnSync } from './ReturnSync';
import { RefundQuery } from './RefundQuery';
import { MessageHandler } from './MessageHandler';
import { Logger } from '../utils/Logger';
const logger = new Logger('Background');
const orderCollector = new OrderCollector();
const returnSync = new ReturnSync();
const refundQuery = new RefundQuery();
const messageHandler = new MessageHandler(orderCollector, returnSync, refundQuery);
chrome.runtime.onInstalled.addListener((details) => {
logger.info('Extension installed', { reason: details.reason });
if (details.reason === 'install') {
chrome.storage.local.set({
initialized: true,
config: {
apiEndpoint: 'http://localhost:3003',
syncInterval: 300000,
maxRetries: 3,
},
});
}
});
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
logger.info('Message received', { type: message.type, sender: sender.tab?.id });
messageHandler.handle(message, sender)
.then((result) => sendResponse({ success: true, data: result }))
.catch((error) => {
logger.error('Message handler error', { error: error.message });
sendResponse({ success: false, error: error.message });
});
return true;
});
chrome.alarms.onAlarm.addListener(async (alarm) => {
logger.info('Alarm triggered', { name: alarm.name });
switch (alarm.name) {
case 'orderSync':
await orderCollector.syncAllShops();
break;
case 'returnSync':
await returnSync.syncAllReturns();
break;
case 'refundQuery':
await refundQuery.queryAllRefunds();
break;
}
});
async function setupAlarms() {
const config = await chrome.storage.local.get('config');
const syncInterval = config.config?.syncInterval || 300000;
chrome.alarms.create('orderSync', { periodInMinutes: syncInterval / 60000 });
chrome.alarms.create('returnSync', { periodInMinutes: (syncInterval * 2) / 60000 });
chrome.alarms.create('refundQuery', { periodInMinutes: (syncInterval * 3) / 60000 });
logger.info('Alarms setup complete', { syncInterval });
}
setupAlarms();
export { orderCollector, returnSync, refundQuery };