@agentaily/backend
平台的轻后端纯逻辑层 —— 跑在一个抽象的 storage seam 之上。@agentaily/backend 本身不碰 D1:它定义 store 接口 + 业务逻辑 + 一个 in-memory 替身(测试用);真正的 D1 实现由 @agentaily/db 提供,apps/web 的 Cloudflare Pages Functions(apps/web/functions/**)把它们接起来并调用本包。
🔁 重构中(REFACTOR.md §3): 本包 rework —— 去掉 vertical 硬编码。M7 第一刀已落:
submissions.ts不再 import 任何 vertical(@agentaily/form-schema/slides-schema)或@agentaily/studio-protocol(package.json三条 dep 已删)。「内容文档 → 派生 recordSchema →checkRecord闸」整条路退役;recordSchemaFor现恒返回null、submitRecord只剩结构性 guard(record 必须是 JSON 对象),作仍 live 的旧端点(api/forms/:id/submissions、apps/publishhost 路径、api/projects/:id)迁移期间的薄 stub。新数据校验改走 AML 路(apps/publish/a/:appId/_data→@agentaily/dbAML 数据引擎)。当前真相源见../REFACTOR.md。
现在装着什么
| 模块 | 是什么 |
|---|---|
store.ts | storage seam:ProjectStore / SubmissionStore / UserStore / TokenStore 接口 + 共享类型 + inMemoryStores(测试替身) |
submissions.ts | 薄·去垂直化的数据收集 stub:submitRecord(仅结构性 guard + stamp schemaVersion)· listSubmissions · recordSchemaFor(retired,恒 null)。垂直闸 / collectsData 已移除 |
auth/ | 自建鉴权(verify-first):password(PBKDF2)· jwt(session)· users(用户服务)· tokens(一次性 token,只存 SHA-256) |
runtime.ts | assemblePublicRuntime —— 把 renderer + 注入文档 + window.agentaily(submit/query)桥组装成公开运行页(/f/:id) |
publish.ts | resolvePublishTarget —— host → 已发布制品解析(<slug>.apex 或用户自带域名;配合 apps/publish) |
装哪 / 怎么用
// consumer package.json
"dependencies": { "@agentaily/backend": "workspace:*" }消费为 TypeScript 源码(无构建步)。D1 实现 + Pages Functions 接线见 ../db/README.md 与 apps/web/functions/**。
测试
pnpm --filter @agentaily/backend test(根 pnpm test 一并跑)—— 纯逻辑单测,跑在 inMemoryStores 替身上(不碰 D1),node 环境。