BugCollect 符号化服务 - 支持 RN/Android/iOS/Flutter 堆栈符号化
转到文件
2026-07-27 13:03:04 +08:00
docs docs: record production symbolicator validation 2026-07-27 13:03:04 +08:00
src refactor: modernize symbolicator runtime and security 2026-07-27 12:44:10 +08:00
test refactor: modernize symbolicator runtime and security 2026-07-27 12:44:10 +08:00
.dockerignore refactor: modernize symbolicator runtime and security 2026-07-27 12:44:10 +08:00
.gitignore refactor: modernize symbolicator runtime and security 2026-07-27 12:44:10 +08:00
Dockerfile refactor: modernize symbolicator runtime and security 2026-07-27 12:44:10 +08:00
Jenkinsfile ci: quote Windows SSH key paths 2026-07-27 12:55:18 +08:00
package-lock.json refactor: modernize symbolicator runtime and security 2026-07-27 12:44:10 +08:00
package.json refactor: modernize symbolicator runtime and security 2026-07-27 12:44:10 +08:00
README.md refactor: modernize symbolicator runtime and security 2026-07-27 12:44:10 +08:00
tsconfig.json feat: 初始化符号化服务 2026-06-19 02:49:26 +08:00
VERSION.symbolicator ci: bump symbolicator to 1.0.5 [skip ci] 2026-07-27 12:56:34 +08:00

Xuqm Symbolicator

BugCollect 的独立符号化服务,提供 React Native、Electron、Vue、Android、iOS 和 Flutter 堆栈处理入口。服务只负责符号化,不保存上传内容。

运行基线

  • 生产容器Node.js 24 LTS
  • 本地开发Node.js 22.22 及以上受支持版本
  • 安装:npm ci
  • 构建:npm run build
  • 测试:npm test
  • 完整检查:npm run check

HTTP 契约

  • GET /health:返回服务状态。
  • POST /api/symbolicate:保持现有 JSON 请求与 JSON 响应结构。
  • 配置 SYMBOLICATOR_API_KEY 后,请求必须通过 x-api-key 请求头认证;未配置时保持 既有开发模式行为。
  • 请求体最大 105 MiB。业务字段仍分别限制堆栈 100 KB、Sourcemap 50 MB 和 ProGuard/R8 mapping 100 MB,超限请求不会进入解析器。

服务不提供 multipart 文件上传接口。multer 仅保留为现有依赖契约并升级至安全版本, 不得在未定义文件数量、单文件大小、总大小和临时文件清理规则前直接启用。

容器

docker build -t xuqm-symbolicator:local .
docker run --rm -p 3000:3000 xuqm-symbolicator:local

镜像使用锁文件安装、多阶段构建和非 root 用户运行。健康检查访问容器内 http://127.0.0.1:3000/health

当前 Linux 容器不内置 macOS atos 或 Flutter SDK。因此 iOS/Flutter 请求接口仍保留, 但对应外部工具必须由实际部署环境提供;不能用 TypeScript 构建结果替代这两类运行验证。

安全边界

  • 日志不得输出 API Key、请求体、Sourcemap、mapping、堆栈内容或宿主文件路径。
  • 不得把来自请求的路径或命令参数拼接进 shell;现有外部工具调用统一使用参数数组。
  • 依赖变更必须同步提交 package-lock.json 并使用 npm ci 验证。