/** BullMQ 队列名 */ export const RPA_QUEUE_NAME = "quote-rpa"; /** Worker 并发:Playwright 会话串行锁,1 避免多 job 争用 orphan active */ export const RPA_WORKER_CONCURRENCY = 1; /** 报价入口 page.goto 超时(毫秒);慢网/Cloudflare 场景需更长 */ export const RPA_PAGE_GOTO_TIMEOUT_MS = 45_000; /** 单 job 超时(毫秒):Playwright 填表+抓价上限 */ export const RPA_JOB_TIMEOUT_MS = 360_000; /** 街道地址输入框 click/focus 超时(毫秒) */ export const RPA_STREET_INPUT_CLICK_MS = 8_000; /** job 最大尝试次数(含首次 = 1 次重试) */ export const RPA_JOB_ATTEMPTS = 2; /** 地址联想等待超时(毫秒) */ export const ADDRESS_SUGGESTION_TIMEOUT_MS = 5_000; /** 地址候选 API 联想等待(毫秒):Headless 下 Places 响应较慢 */ export const ADDRESS_CANDIDATE_SUGGESTION_TIMEOUT_MS = 12_000; /** 报价 widget hydration 等待(毫秒):en-US 首页渲染较慢,显式等待至元素就绪 */ export const RPA_WIDGET_HYDRATION_TIMEOUT_MS = 60_000; /** 复用 quote_session storageState 时的 widget 就绪等待(毫秒) */ export const RPA_SESSION_WIDGET_TIMEOUT_MS = 15_000; /** 地址候选 RPA 全流程上限(毫秒):与 Next route maxDuration=300 对齐 */ export const ADDRESS_CANDIDATES_TIMEOUT_MS = 300_000; /** CAPTCHA 触发的 Worker 暂停时长(分钟) */ export const CAPTCHA_PAUSE_MINUTES = 10; /** Worker 心跳 TTL(秒) */ export const WORKER_HEARTBEAT_TTL_SECONDS = 30; /** 报价完成信号等待上限(毫秒) */ export const RPA_QUOTE_CAPTURE_TIMEOUT_MS = 25_000; /** 提交后额外收集 XHR 的短暂窗口(毫秒) */ export const RPA_QUOTE_POST_SUBMIT_SETTLE_MS = 2_000; /** 偏差预警阈值(5%) */ export const PRICE_DEVIATION_THRESHOLD = 0.05;