Skip to content

Conversation

@Gaubee
Copy link
Contributor

@Gaubee Gaubee commented Dec 29, 2025

概述

对接一键传送(Teleport)小程序的 MetaBox payment 后端 API。

主要更改

API 服务层 (src/api/)

  • types.ts: 定义传送相关的所有类型(基于 @bnqkl/metabox-core@0.5.2)
  • client.ts: API 客户端,对接 https://api.eth-metaverse.com/payment/
  • hooks.ts: React Query hooks(useTransmitAssetTypeList, useTransmit 等)

App.tsx 重构

  • 集成 TanStack Query 管理数据状态
  • 从后端获取真实的 assetTypeList 配置
  • 实现完整的传送流程:
    1. 创建未签名交易
    2. Bio SDK 签名
    3. 发送到后端
    4. 轮询订单状态
  • 添加 processing/success/error 状态处理

i18n 更新

  • 新增翻译 key(processing, wallet, confirm 等)
  • 同步更新 zh/zh-CN/zh-TW/en 所有语言

测试套件

  • 单元测试 (31 个)
    • api/client.test.ts: 测试 API 客户端所有方法
    • api/hooks.test.tsx: 测试 React Query hooks
    • App.test.tsx: 测试组件交互
  • Storybook stories (7 个)
    • 测试各个步骤的 UI 交互
    • 包含错误状态测试
  • E2E 测试 (8 个)
    • 测试完整传送流程
    • Mock API 和 Bio SDK

待确认事项

与后端确认:

  • fromTrJson.signTransData 的格式要求(是否需要 0x 前缀)
  • toTrInfo 什么时候可以不传(空投场景?)
  • 是否需要额外的鉴权 header

依赖

新增:

  • @tanstack/react-query
  • @bnqkl/metabox-core@0.5.2
  • @bnqkl/wallet-typings@0.23.8

测试

cd miniapps/teleport
pnpm test:run      # 单元测试
pnpm storybook     # Storybook
pnpm e2e           # E2E 测试

- 添加 API 服务层 (src/api/)
  - types.ts: 定义传送相关的类型
  - client.ts: API 客户端,对接 MetaBox payment 后端
  - hooks.ts: React Query hooks 管理 API 状态
- 更新 App.tsx
  - 集成 TanStack Query 管理数据
  - 从后端获取真实的 assetTypeList 配置
  - 实现完整的传送流程(签名 -> 发送 -> 轮询状态)
  - 添加订单状态监控和错误处理
- 更新 i18n 翻译文件
  - 添加新的翻译 key(processing, wallet, confirm 等)
  - 同步更新 zh/zh-CN/zh-TW/en 所有语言
- 更新测试用例
  - 添加 QueryClientProvider wrapper
  - Mock API 调用
- 安装依赖
  - @tanstack/react-query
  - @bnqkl/metabox-core@0.5.2
  - @bnqkl/wallet-typings@0.23.8
- 添加 API 单元测试
  - client.test.ts: 测试 API 客户端所有方法
  - hooks.test.tsx: 测试 React Query hooks
- 添加 Storybook stories
  - App.stories.tsx: 测试各个步骤的 UI 交互
- 更新 E2E 测试
  - 添加 API Mock (route intercept)
  - 更新 i18n helpers 适配新翻译
  - 添加成功页面和错误页面测试
  - 测试完整传送流程

测试覆盖:
- 31 个单元测试
- 7 个 Storybook 交互测试
- 8 个 E2E 测试
@Gaubee Gaubee merged commit 8aafbaf into main Dec 29, 2025
5 checks passed
Gaubee added a commit that referenced this pull request Dec 30, 2025
P0 高风险修复:
- Teleport: signTransData 改用 signedTx.data(RLP encoded rawTx)而非 signature
- Forge: 添加 bio_getPublicKey API 框架(含回退机制)

P1 中风险修复:
- Forge E2E mock: 使用正确的 endpoint 路径 /cot/recharge/support 和 /cot/recharge/V2
- Forge API config: 改为 fail-fast 策略,未配置 VITE_COT_API_BASE_URL 时报错

P2 改进:
- Teleport types.ts: 添加 @bnqkl 包使用说明注释

详细变更:
- packages/bio-sdk: 添加 bio_getPublicKey 方法定义
- src/services/ecosystem: 添加 handleGetPublicKey handler(待完整实现)
- miniapps/forge: useForge 调用 bio_getPublicKey,失败时回退到 address
- miniapps/forge: 更新测试以包含新的 API 调用
- miniapps/teleport: 修正 signTransData 数据源并添加说明注释
Gaubee added a commit that referenced this pull request Dec 30, 2025
* fix(miniapps): 修复 PR #142/#143 review 发现的问题

P0 高风险修复:
- Teleport: signTransData 改用 signedTx.data(RLP encoded rawTx)而非 signature
- Forge: 添加 bio_getPublicKey API 框架(含回退机制)

P1 中风险修复:
- Forge E2E mock: 使用正确的 endpoint 路径 /cot/recharge/support 和 /cot/recharge/V2
- Forge API config: 改为 fail-fast 策略,未配置 VITE_COT_API_BASE_URL 时报错

P2 改进:
- Teleport types.ts: 添加 @bnqkl 包使用说明注释

详细变更:
- packages/bio-sdk: 添加 bio_getPublicKey 方法定义
- src/services/ecosystem: 添加 handleGetPublicKey handler(待完整实现)
- miniapps/forge: useForge 调用 bio_getPublicKey,失败时回退到 address
- miniapps/forge: 更新测试以包含新的 API 调用
- miniapps/teleport: 修正 signTransData 数据源并添加说明注释

* feat(bio-sdk): bio_signMessage 返回 { signature, publicKey }

- SignatureAuthService.handleMessageSign 返回 SignatureResult
- SigningConfirmJob 发送 signature + publicKey
- bio_signMessage/bio_signTypedData 返回新格式
- useForge 直接使用 signResult.publicKey(hex 格式)
- 移除 bio_getPublicKey 回退逻辑(不再需要)

publicKey 为 hex 编码的 32 字节公钥(BioForest Ed25519)

* fix(miniapps): E2E 测试修复 + i18n 初始化

- forge: 添加 i18n 导入到 main.tsx
- forge: 修复 E2E mock (fetch 拦截 + 选择器优化)
- forge: 添加 E2E 测试用 API base URL
- teleport: 修复 E2E mock (使用 addInitScript)
- teleport: 优化资产选择器和确认页面选择器

E2E 测试结果:
- Forge: 9/9 通过
- Teleport: 8/8 通过
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants