You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
9.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 查价中台环境变量模板(本地开发)
# 生产部署请使用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 映射JSONtoken → { 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
# ── RPAPRD v0.6 GD-15headed 录制后填入)────────────────────────
# 逗号分隔、按序探测;禁止 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 FreightPRD §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 selectornpm 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=真实 MotherShipmock=仅替代 commitprove-rpa-chain 下游验证用)
RPA_ADDRESS_MODE=real
# 报价模式direct=直连 axel API默认embed-demo 推荐)| widget=Playwright 页面交互
RPA_QUOTE_MODE=direct
# 方案 Awidget 双地址 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
# SelectorPlaywright 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 endpointHAR 校准辅助,仅 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.61npm 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