# Base44 访问申请 Node Facade 适配记录

## 更新记录

- 2026-07-16: 完成冻结交接契约中的 Node Facade 与 Base44 Backend Function 适配。

## 修改范围

- 新增 `base44_assertion`，使用 `jose@5.10.0` 和 PKCS#8 私钥签发 RS256 JWT。
- 默认读取 Base44 官方 `id/email/is_verified/disabled` 用户字段，Provider App ID 只来自服务端配置。
- 新增 `GetBase44AccessStatus`、`CreateBase44AccessRequest`、`ExchangeCurrentBase44User`。
- 三个固定路径只认证一次 Base44 用户，重建最终 Go Body，不转发 Go Bearer Token。
- 创建申请支持稳定幂等键；同一键重试仍签发新的 assertion/JTI。
- 上游错误只新增白名单字段 `RetryAllowedAt`，不透传 SQLSTATE、SQL 文本、堆栈或未知对象。
- 本次适配节点未修改 `node_lib_base44_core`、Go、Supabase migration/RPC 或 Base44 页面；后续公共复用整理已为 core 增加通用 `ResolveBase44User`，以最新复用记录为准。

## 安全结果

- assertion 算法固定为 RS256，Header 固定包含 `alg/kid/typ`。
- assertion 寿命由必填配置指定，当前建议 45 秒并限制在 `1..60` 秒；每次调用使用新 UUID JTI。
- 身份缺失、`is_verified !== true`、`disabled` 非 Boolean、配置缺失或私钥无效时失败关闭。
- 页面提交的 Subject、Email、Disabled、Provider App ID、内部摘要和限流字段不会进入可信请求。
- 兼容方法传入的旧 assertion 只在 exchange 路径被忽略，服务端仍重新签发。
- assertion、JTI、私钥和 Go Session Token 不进入响应或日志。

## 本地验证

```bat
install.bat
run-test.bat
node examples/basic_usage.js
npm pack --dry-run --json
npm audit --omit=dev
```

结果：该适配节点的依赖安装与审计通过（0 个安全漏洞），语法检查和全部测试通过，示例通过，发布包 dry-run 当时为 27 个文件。后续文档和复用整理后的当前发布清单以项目状态与复用记录为准。

## 尚未完成

- 尚未部署真实 Base44 Backend Function，因此未验证 Base44 托管 Runtime 的 Secret 和 SDK 装配。
- 尚未连接真实 Go/Supabase V3 环境验证申请、审批、exchange、disabled、JTI replay、冷却和限流。
- 该适配节点当时尚未修改版本号；后续已按用户确认调整为本地 `1.1.0`。提交、推送 Gitee、创建 tag、npm 发布和固定 ref 云端验证仍未执行。

## 相关文档

- [使用说明](../usage.md)
- [公共 API](../api/supabase.md)
- [组合流程](../fun/composition.md)
- [项目状态](../project-status.md)
- [冻结交接](../fun/base44-access-request-node-facade-handoff.md)
- [公共复用与 AI 整理](2026-07-16-reuse-ai-review.md)
