# 源视频溯源插件接口

插件不保存、不读取上游密钥。源视频溯源统一请求妙妙乌后端，由后端保存密钥、调用上游并完成积分或免费额度记账。

## 后台消息

```js
chrome.runtime.sendMessage({
  type: "SOURCE_TRACE",
  url: "https://www.douyin.com/..."
});
```

## 后端接口

```http
POST /api/plugin/source-trace
Authorization: Bearer <pluginAuth.token>
Content-Type: application/json

{"url":"https://www.douyin.com/..."}
```

成功返回 `title`、`normal`、`source`、`cost_points`、`request_id`、`points_balance_after`、`free_quota_remaining` 和 `source_trace_free_remaining`。

计费规则：
- 只有 `source.download_url` 存在时才记账。
- 账号仍有免费溯源额度时，本次 `cost_points` 为 `0`，并消耗 1 次免费额度。
- 免费额度还有剩余时，后端返回 `free_quota_message`，插件可提示剩余次数。
- 免费额度用完后，后续成功溯源按后端配置扣点，不再提示免费次数。

## 抖音页快捷入口

普通视频下载只走移包版 AIX 链路，避免自研候选匹配造成串视频或无音频。

`mmw-douyin-source-bridge.js` 只在 AIX 下载面板里插入“下载源视频”入口：提取当前卡片或详情页的抖音链接，发送 `SOURCE_TRACE` 到后台，成功后用后端返回的 `source.download_url` 触发下载。

搜索页卡片优先读取 AIX 按钮上下文中的视频 ID，生成当前搜索页的 `modal_id=<视频ID>` 地址，避免等待分享链接或错误提交裸搜索页。

详情页如果 AIX 没有挂出按钮，桥接脚本会提供轻量兜底面板：
- 下载当前视频：仅提交当前详情页最大可见 `<video>` 的播放地址到 `DOWNLOAD_SELECTED`，不做卡片匹配和资源池扫描。
- 下载源视频：继续走 `SOURCE_TRACE` 后端溯源。

插件只向妙妙乌后端提交抖音页面链接，不保存也不下发上游密钥。
