|
|
# 查价中台环境变量模板(本地开发)
|
|
|
# 生产部署请使用:cp deploy/.env.production.example .env && bash deploy/install.sh
|
|
|
# 详见 deploy/README.md
|
|
|
|
|
|
MYSQL_HOST_PORT=3307
|
|
|
MYSQL_ROOT_PASSWORD=changeme
|
|
|
JWT_SECRET=your-256-bit-secret-change-in-production
|
|
|
|
|
|
# 宿主 Service Token 映射(JSON):token → { customerId, permissions[] }
|
|
|
HOST_SERVICE_TOKENS={"demo-host-token":{"customerId":"CUST_001","permissions":["pricing:markup:write"]}}
|
|
|
# 本地 development 默认跳过宿主 Token 鉴权(npm run dev);生产环境无效
|
|
|
# 若要在本地也校验 Token,设为 false
|
|
|
# HOST_SERVICE_AUTH_DISABLED=false
|
|
|
|
|
|
# 管理端可见客户列表(逗号分隔,与 HOST_SERVICE_TOKENS 合并)
|
|
|
CUSTOMER_REGISTRY=CUST_001,CUST_002,CUST_003
|
|
|
|
|
|
# 宿主两步公开接口(美美与共等):true=免 Token;后期改 false 并走 Service Token
|
|
|
HOST_PUBLIC_API_ENABLED=false
|
|
|
HOST_PUBLIC_DEFAULT_CUSTOMER_ID=CUST_001
|
|
|
|
|
|
# ── RPA(PRD v0.6 GD-15,headed 录制后填入)────────────────────────
|
|
|
# 逗号分隔、按序探测;禁止 dashboard.mothership.com / www.mothership.com/quote
|
|
|
# 英文 locale 避免中文精简 widget(无 cargo editor);首页 + en-US 为推荐组合
|
|
|
MOTHERSHIP_QUOTE_URLS=https://www.mothership.com/
|
|
|
# 留空则 Playwright 默认;en-US headless 仅显示 zip 精简条,与地址 RPA 不兼容
|
|
|
# RPA_BROWSER_LOCALE=en-US
|
|
|
RPA_STORAGE_STATE_PATH=.rpa/mothership-storage.json
|
|
|
# 登录后查价录制专用 storage(与匿名隔离;npm run record:mothership -- --logged-in)
|
|
|
# RPA_LOGGED_IN_STORAGE_STATE_PATH=.rpa/mothership-logged-in-storage.json
|
|
|
# 缺会话文件时 headless 自动访问 MOTHERSHIP_QUOTE_URLS 获取 cookies(默认 true;设 false 则须手动 record:mothership)
|
|
|
# RPA_AUTO_BOOTSTRAP_STORAGE=true
|
|
|
RPA_MOCK_MODE=false
|
|
|
# Flock Freight(PRD §14 / 技术设计 §7.6;默认关闭,Mock 或显式 true 可联调)
|
|
|
# Flock Freight(本地开发默认开启;生产请显式 FLOCK_RPA_ENABLED=true)
|
|
|
FLOCK_RPA_ENABLED=true
|
|
|
FLOCK_QUOTE_URL=https://app.flockfreight.com/get-a-quote
|
|
|
# direct | dom | direct_then_dom(默认 Direct 优先,失败回退 DOM 填表)
|
|
|
FLOCK_QUOTE_MODE=direct_then_dom
|
|
|
FLOCK_STORAGE_STATE_PATH=.rpa/flock-storage.json
|
|
|
# 登录后查价录制产物(与匿名 flock-storage.json 隔离;npm run record:flock -- --logged-in)
|
|
|
# FLOCK_LOGGED_IN_STORAGE_STATE_PATH=.rpa/flock-logged-in-storage.json
|
|
|
# DOM/RPA 保障路径:账号密码登录(配置后禁用 random_qq / 无痕注册;勿提交真实密码)
|
|
|
# FLOCK_LOGIN_EMAIL=
|
|
|
# FLOCK_LOGIN_PASSWORD=
|
|
|
# FLOCK_LOGIN_URL=https://app.flockfreight.com/login
|
|
|
# FLOCK_SELECTOR_LOGIN_EMAIL=input[type="email"], input[name="email"]
|
|
|
# FLOCK_SELECTOR_LOGIN_PASSWORD=input[type="password"], input[name="password"]
|
|
|
# FLOCK_SELECTOR_LOGIN_SUBMIT=button[type="submit"]
|
|
|
# 默认加载 .rpa/flock-storage.json(登录成功后回写;可跳过重复登录)
|
|
|
# FLOCK_LOAD_STORAGE_STATE=false
|
|
|
# 登录模式默认写回 storage;显式 false 可关闭
|
|
|
# FLOCK_SAVE_STORAGE_AFTER_QUOTE=false
|
|
|
# 卡顿 ≥20s 自动截图目录 .rpa/flock-stalls/(识别是否报价上限)
|
|
|
# FLOCK_STALL_MS=20000
|
|
|
# Flock selector(npm run record:flock 产出;未配时使用录制内置回退)
|
|
|
# FLOCK_SELECTOR_PICKUP_ZIP=role=textbox[name="Pickup ZIP Code"]
|
|
|
# FLOCK_SELECTOR_DELIVERY_ZIP=role=textbox[name="Delivery ZIP Code"]
|
|
|
# FLOCK_SELECTOR_PALLET_COUNT=role=textbox[name="Number of pallets"]
|
|
|
# FLOCK_SELECTOR_TOTAL_WEIGHT=role=textbox[name="Total shipment weight (lbs)"]
|
|
|
# FLOCK_SELECTOR_NEXT=[data-testid="anonymous_marketing_lead_quote_request_page__quote_request__submit_button"]
|
|
|
# FLOCK_TEST_EMAIL=3457189488@qq.com
|
|
|
# FLOCK_TEST_PHONE=7536407420
|
|
|
# 无登录凭据时的探针:无痕 + random_qq(有 FLOCK_LOGIN_* 时自动关闭)
|
|
|
# FLOCK_FRESH_SESSION_PER_QUOTE=true
|
|
|
# FLOCK_RANDOM_ACCOUNT_PER_QUOTE=true
|
|
|
# FLOCK_EMAIL_MODE=random_qq
|
|
|
# FLOCK_QUOTES_PER_EMAIL=3
|
|
|
FLOCK_WORKER_REUSE_SESSION=false
|
|
|
FLOCK_MIN_QUOTES=1
|
|
|
FLOCK_QUOTE_WAIT_MS=20000
|
|
|
FLOCK_FORM_WAIT_MS=20000
|
|
|
FLOCK_FIELD_PAUSE_MS=1000
|
|
|
FLOCK_SESSION_MAX_ROTATIONS=3
|
|
|
FLOCK_POLL_TIMEOUT_MS=210000
|
|
|
NEXT_PUBLIC_FLOCK_POLL_TIMEOUT_MS=210000
|
|
|
# qq.qqdna.com 号码库:FLOCK_EMAIL_MODE=qqdna
|
|
|
# Gmail/Outlook 别名基址(可选):
|
|
|
# FLOCK_EMAIL_ALIAS_BASE=yourname@gmail.com
|
|
|
# FLOCK_EMAIL_POOL=aa@gmail.com,bb@outlook.com
|
|
|
# FLOCK_PHONE_POOL=7536407420,18692104118
|
|
|
# 地址 commit 隔离:real=真实 MotherShip;mock=仅替代 commit(prove-rpa-chain 下游验证用)
|
|
|
RPA_ADDRESS_MODE=real
|
|
|
# 报价模式:direct=直连 axel API(默认,embed-demo 推荐)| widget=Playwright 页面交互
|
|
|
RPA_QUOTE_MODE=direct
|
|
|
# 方案 A:widget 双地址 vault 注入(widget 模式默认 true;显式 false 可关闭)
|
|
|
# RPA_DUAL_ADDRESS_PATCH=true
|
|
|
# place commit 修复模式:event=Google事件触发(默认) | state=React注入 | legacy=原逻辑
|
|
|
RPA_PLACE_FIX_MODE=event
|
|
|
# true 时注入 P0 实例拓扑/监听器指纹 + P2 fetch 劫持,fix-place 各阶段落盘 .rpa/place-diagnostic/
|
|
|
RPA_PLACE_DIAG=false
|
|
|
# 有头调试:RPA_HEADED=true 强制弹窗(MotherShip / Flock 共用);或 RPA_HEADLESS=false
|
|
|
RPA_HEADLESS=true
|
|
|
# RPA_HEADED=true
|
|
|
# RPA_SLOW_MO_MS=200
|
|
|
# 货物 drawer 填写完成后 page.pause()(仅人工验收时开启)
|
|
|
# RPA_CARGO_DRAWER_PAUSE=true
|
|
|
RPA_BROWSER_LOCALE=en-US
|
|
|
RPA_USE_PATCHRIGHT=false
|
|
|
# 反爬:playwright-extra stealth(与 patchright 二选一;部分页面会破坏 widget,默认 false)
|
|
|
RPA_USE_STEALTH=false
|
|
|
# 使用本机 Chrome/Edge,降低 HeadlessChrome 指纹(Flock 推荐 chrome)
|
|
|
RPA_BROWSER_CHANNEL=chrome
|
|
|
# 真人入口流:先打开首页再点 Get Quote(携带 Referer/Cookie)
|
|
|
# RPA_HUMAN_ENTRY_FLOW=true
|
|
|
# RPA_QUOTE_WARMUP_URL=https://www.mothership.com/
|
|
|
# headed 调试:慢动作毫秒;RPA_NETWORK_DEBUG=true 输出全部请求
|
|
|
# RPA_SLOW_MO_MS=100
|
|
|
# RPA_NETWORK_DEBUG=false
|
|
|
RPA_WORKER_ID=
|
|
|
RPA_QUEUE_ENABLED=true
|
|
|
# 驻留页单次会话加速(实验性,默认关;true 时需 worker + confirm 全链路)
|
|
|
RPA_PARKED_SESSION=false
|
|
|
|
|
|
# Selector(Playwright codegen / record-mothership 产出,填表 + submit)
|
|
|
# 录制 115541 / 115059 — 中英双语,逗号分隔按序尝试
|
|
|
RPA_SELECTOR_PICKUP_SECTION=#react-quoter-landing-plugin >> text=Pick up from,#react-quoter-landing-plugin >> text=Where to pick up,#react-quoter-landing-plugin >> text=从何处取货
|
|
|
RPA_SELECTOR_DELIVERY_SECTION=#react-quoter-landing-plugin >> text=Deliver to,#react-quoter-landing-plugin >> text=Delivery to,#react-quoter-landing-plugin >> text=送货至
|
|
|
RPA_SELECTOR_QUOTE_WIDGET=#react-quoter-landing-plugin
|
|
|
RPA_SELECTOR_PICKUP_STREET=#react-quoter-landing-plugin >> placeholder=Search by address,#react-quoter-landing-plugin >> role=textbox[name="Search by address"],#react-quoter-landing-plugin >> role=textbox[name="Search address"],#react-quoter-landing-plugin >> role=textbox[name="搜索地址"]
|
|
|
RPA_SELECTOR_DELIVERY_STREET=#react-quoter-landing-plugin >> placeholder=Search by address,#react-quoter-landing-plugin >> role=textbox[name="Search by address"],#react-quoter-landing-plugin >> role=textbox[name="Search address"],#react-quoter-landing-plugin >> role=textbox[name="搜索地址"]
|
|
|
RPA_SELECTOR_ADDRESS_SUGGESTION=#react-quoter-landing-plugin >> [role="listbox"] [role="option"],#react-quoter-landing-plugin >> li,.pac-item,[role="option"]
|
|
|
RPA_SELECTOR_CARGO_SECTION=#react-quoter-landing-plugin >> filter:text=Shipment details>>nth=4,#react-quoter-landing-plugin >> filter:text=Freight details>>nth=4,#react-quoter-landing-plugin >> filter:text=货运详情>>nth=4
|
|
|
RPA_SELECTOR_SUBMIT=role=button[name="GET QUOTE"],role=button[name="Get freight quote"],role=button[name="Get a freight quote"],role=button[name="获取货运报价"]
|
|
|
# 报价 tab/price selector 已废弃(Network-First);可留空
|
|
|
# RPA_SELECTOR_STANDARD_TAB=
|
|
|
# RPA_SELECTOR_GUARANTEED_TAB=
|
|
|
# RPA_SELECTOR_LOWEST_OPTION=
|
|
|
# RPA_SELECTOR_FASTEST_OPTION=
|
|
|
# RPA_SELECTOR_PRICE=
|
|
|
|
|
|
# 报价 API endpoint(HAR 校准辅助,仅 telemetry;不参与 runtime 匹配)
|
|
|
# 阶段0 录证白名单:services.mothership.com/axel/quote
|
|
|
MOTHERSHIP_QUOTE_API_URL_PATTERNS=services.mothership.com/axel/quote
|
|
|
# 设为 true 时输出全部 REQ/RESP(定位 json=0)
|
|
|
RPA_QUOTE_NETWORK_VISIBILITY=false
|
|
|
# 设为 true 时契约失败日志输出 raw JSON body
|
|
|
RPA_QUOTE_DEBUG_RAW=false
|
|
|
# 设为 true 时日志输出 JSON 候选 URL(校准 HAR pinned 用)
|
|
|
RPA_QUOTE_NETWORK_SNIFF=false
|
|
|
|
|
|
# Priority1 worker 填表提速(生产建议)
|
|
|
# RPA_DWELL_MS=0
|
|
|
# RPA_SLOW_MO_MS=0
|
|
|
# RPA_QUOTE_POLL_MS=600
|
|
|
# RPA_QUOTE_WAIT_MS=90000
|
|
|
# RPA_PRIORITY1_WORKER_FAST=true
|
|
|
RPA_SELECTOR_TRANSIT=text=business days
|
|
|
# 货物字段已改为 fillCargoInDrawer 动态 placeholder 定位,下列 env 仅兼容旧脚本,runtime 不再读取
|
|
|
# RPA_SELECTOR_PALLET_QTY=...
|
|
|
# RPA_SELECTOR_WEIGHT=...
|
|
|
# RPA_SELECTOR_LENGTH=...
|
|
|
# RPA_SELECTOR_WIDTH=...
|
|
|
# RPA_SELECTOR_HEIGHT=...
|
|
|
|
|
|
# 可选:仅当入口跳转 login / 客户账密登录后查价时使用
|
|
|
MOTHERSHIP_EMAIL=
|
|
|
MOTHERSHIP_PASSWORD=
|
|
|
# session-manager loginIfNeeded 使用(2026-07-15 登录页实探)
|
|
|
# RPA_SELECTOR_LOGIN_EMAIL=role=textbox[name="Email address"]
|
|
|
# RPA_SELECTOR_LOGIN_PASSWORD=role=textbox[name="Password"]
|
|
|
# RPA_SELECTOR_LOGIN_SUBMIT=role=button[name="Sign in"]
|
|
|
# ── MotherShip 登录后查价(Step 12.61;npm run record:mothership -- --logged-in 产出后回填)──
|
|
|
# 详见 docs/rpa-mothership-logged-in-sop.md;勿手猜 selector
|
|
|
# RPA_SELECTOR_MS_LOGGED_IN_ENTRY=
|
|
|
# RPA_SELECTOR_MS_LOGGED_IN_FORM_MARKER=
|
|
|
# RPA_SELECTOR_MS_LOGGED_IN_PICKUP=
|
|
|
# RPA_SELECTOR_MS_LOGGED_IN_DELIVERY=
|
|
|
# RPA_SELECTOR_MS_LOGGED_IN_CARGO=
|
|
|
# RPA_SELECTOR_MS_LOGGED_IN_SUBMIT=
|
|
|
|
|
|
# 已废弃:请改用 MOTHERSHIP_QUOTE_URLS
|
|
|
# MOTHERSHIP_QUOTE_URL=
|
|
|
|
|
|
# 开发基础设施模式: auto | docker | native
|
|
|
DEV_INFRA_MODE=native
|
|
|
|
|
|
# 本地 prisma migrate/seed 使用宿主机端口;容器内仍用 mysql:3306
|
|
|
DATABASE_URL=mysql://root:changeme@localhost:3307/chajia
|
|
|
REDIS_URL=redis://localhost:6379
|