mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-22 04:15:14 +08:00
5.4 KiB
5.4 KiB
官方资源后端说明
本文档说明 BlueArchiveToolkit 中“官方资源后端”的职责、数据流和工作原理,供审核使用。
1. 范围
这个后端只处理 日服官方资源,只接受官方 .jp/.com 域名下的资源链路。
明确排除:
bluearchive.cafe- 任何镜像层、转写层、二次代理层
- 人工拼接出来的样例 URL
当前默认平台集合是:
WindowsAndroid
iOS 和 macOS 已从默认支持中移除。
2. 后端负责什么
| 层 | 任务 | 结果 |
|---|---|---|
| 发现层 | 读取官方 server-info,选择 connection group 和版本覆盖 |
得到官方资源根和种子端点 |
| 清单层 | 解析 BundlePackingInfo.bytes、TableCatalog.bytes、MediaCatalog.bytes |
得到完整文件清单 |
| 计划层 | 合并 discovery + inventory,去重并保序 | 得到全量 pull plan |
| 下载层 | 校验官方 URL,调用下载器,落盘并记录字节数 | 得到本地资源副本 |
| 导入层 | 将 bundle 写入 CAS 和 ResourceRepository | 得到可查询的资源索引 |
| 同步层 | 比较当前快照和历史快照 | 决定下载、校验、发布 |
3. 工作原理
3.1 发现官方资源根
入口是 YostarJpServerInfo。
流程是:
- 读取官方
server-infoJSON。 - 按
connection_group + app_version规则选择版本覆盖。 - 从
AddressablesCatalogUrlRoot提取root token。 - 校验该 root 只能落在官方
prod-clientpatch.bluearchiveyostar.com之下。 - 基于 root token 生成 discovery 端点。
对应实现主要在:
adapters/src/official/yostar_jp.rs
3.2 枚举完整资源清单
资源清单不是“猜几个文件”,而是从官方 catalog 字节里提取完整文件名列表。
当前做法:
- 读取
BundlePackingInfo.bytes。 - 提取所有
FullPatch_*.zip包名。 - 读取
TableCatalog.bytes。 - 提取所有表资源名,例如
ExcelDB.db。 - 读取
MediaCatalog.bytes。 - 提取所有媒体资源名,例如
JP_Airi.zip。
然后对 verified platforms 生成完整 URL 集:
- Windows patch pack
- Android patch pack
- TableBundles
- MediaResources-Windows
- MediaResources
对应实现主要在:
adapters/src/official/inventory.rsadapters/src/official/yostar_jp.rs
3.3 组装全量 pull plan
OfficialResourcePullPlan 是这个后端的关键对象。
它做三件事:
- 保存 discovery 端点。
- 保存完整 inventory。
- 用默认平台集或指定平台集生成最终 URL 列表。
all_urls() 是执行层的权威输入:
- 先放 discovery URLs
- 再放 content URLs
- 统一去重
- 保持顺序
这意味着后端拉取的是 完整资源包集合,不是抽样下载。
对应实现主要在:
infrastructure/src/official_pull.rs
3.4 执行下载
OfficialResourcePullService 负责真正下载。
工作方式:
- 检查 URL 是否属于官方 host。
- 把 URL 映射到本地输出路径。
- 通过系统
curl下载。 - 记录文件大小和最终路径。
- 非官方 URL 直接拒绝。
路径映射时会做分段清理,避免把不安全路径写进输出目录。
对应实现主要在:
infrastructure/src/official_download.rs
3.5 导入到 CAS 和资源仓储
资源下载后,导入层会:
- 把 bundle 原始字节写入 CAS。
- 解析 UnityFS 基础摘要。
- 把资源条目写入
ResourceRepository。 - 记录资源路径、hash、大小和解析摘要。
这层的意义是把“下载到磁盘的文件”变成“可查询、可复用、可去重”的资源对象。
对应实现主要在:
infrastructure/src/import.rsinfrastructure/src/resources.rs
3.6 同步决策
同步层只做判断,不做重业务。
它比较当前快照和历史快照,关注:
- root token 是否变化
- addressables root 是否变化
- endpoint 是否变化
- bundle version 是否变化
判断结果分三类:
UpToDateDownloadAndVerifyDownloadVerifyAndPublish
对应实现主要在:
infrastructure/src/official_sync.rs
4. 官方 bootstrap 与用户流程
当前已经提供的官方用户流程是:
official_launcher_bootstrap获取官方 launcher 信息。official_game_main_config从官方 ZIP 解出并解密GameMainConfig。official_pull_plan依据官方server-info、catalog 和 verified platforms 生成全量拉取计划。
这些入口都只接受官方域名,不走 bluearchive.cafe 镜像链。
5. 已验证行为
当前代码已经验证:
- 默认平台是
Windows + Android iOS和macOS不再进入默认官方流程- verified inventory 会产出完整内容 URL 集
- pull plan 会同时包含 discovery URLs 和 content URLs
- 全量样本下是
2个 discovery URL +5个内容 URL =7个 URL
相关验证主要来自:
cargo test -p bat-adapterscargo test -p bat-infrastructurecargo test -p bat-adapters --examplescargo test -p bat-infrastructure --examplescargo clippy -p bat-adapters -- -D warningscargo clippy -p bat-infrastructure -- -D warnings
6. 审核重点
请重点检查这几件事:
- 是否只接受官方 host。
- 是否默认只走 Windows + Android。
- 是否把完整 content URL 集都纳入
all_urls()。 - 是否拒绝镜像域名和手工拼接样例。
- 是否在下载前做了 URL 和路径安全校验。
- 是否能在官方客户端变动时只改适配层。