Skip to content

@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 现恒返回 nullsubmitRecord 只剩结构性 guard(record 必须是 JSON 对象),作仍 live 的旧端点(api/forms/:id/submissionsapps/publish host 路径、api/projects/:id)迁移期间的薄 stub。新数据校验改走 AML 路(apps/publish /a/:appId/_data@agentaily/db AML 数据引擎)。当前真相源见 ../REFACTOR.md


现在装着什么

模块是什么
store.tsstorage seam:ProjectStore / SubmissionStore / UserStore / TokenStore 接口 + 共享类型 + inMemoryStores(测试替身)
submissions.ts薄·去垂直化的数据收集 stub:submitRecord(仅结构性 guard + stamp schemaVersionlistSubmissions · recordSchemaFor(retired,恒 null)。垂直闸 / collectsData 已移除
auth/自建鉴权(verify-first):password(PBKDF2)· jwt(session)· users(用户服务)· tokens(一次性 token,只存 SHA-256)
runtime.tsassemblePublicRuntime —— 把 renderer + 注入文档 + window.agentaily(submit/query)桥组装成公开运行页(/f/:id)
publish.tsresolvePublishTarget —— host → 已发布制品解析(<slug>.apex 或用户自带域名;配合 apps/publish)

装哪 / 怎么用

jsonc
// consumer package.json
"dependencies": { "@agentaily/backend": "workspace:*" }

消费为 TypeScript 源码(无构建步)。D1 实现 + Pages Functions 接线见 ../db/README.mdapps/web/functions/**

测试

pnpm --filter @agentaily/backend test(根 pnpm test 一并跑)—— 纯逻辑单测,跑在 inMemoryStores 替身上(不碰 D1),node 环境。