# 云函数源码(随项目版本化) 平台把云函数存在 Parse 库的 **`Function`** 表(`objectId` 即前端调用的函数 id)。 本目录保存源码副本,便于 code review 与回滚;发布方式见下。 ## 已发布 | 文件 | Function.objectId | name | path | version | |---|---|---|---|---| | `fmodeagent-chatthreads.js` | `oR5O67i1Cm` | fmodeagent-chatthreads | /fmodeagent/chatthreads | 0.1.3(已热更 2026-11-01 05:06 UTC) | > **v0.1.3 已热更到线上并经端到端验证(9/9 通过)**。 > 改动:upsert 查重键从 `(user, roomId, threadRoot)` 改为 `(user, threadRoot)`, > 并折叠同一线程根的历史重复记录。 > 回滚用 `cloud/backup/oR5O67i1Cm-fmodeagent-chatthreads-v0.1.0.js` 覆盖 `code` 字段即可。 > 详见 `docs/03-interface/会话存储与生命周期-20261101.md` §六。 ## 发布 / 热更 ```bash # 新建(objectId 自动生成) curl -X POST https://server.fmode.cn/parse/classes/Function \ -H "X-Parse-Application-Id: ncloudmaster" -H "X-Parse-Master-Key: " \ -H "Content-Type: application/json" -d '{"name":"...","code":"...","enabled":true,...}' # 热更(免重启) curl -X PUT https://server.fmode.cn/parse/classes/Function/ \ -H "X-Parse-Application-Id: ncloudmaster" -H "X-Parse-Master-Key: " \ -H "Content-Type: application/json" -d '{"code":"..."}' ``` ## 函数体约定(从现有函数反推,实测) - 入口:`async function handler(request, response)`;入参在**全局 `params`**。 - 身份:`request.user` 由平台按 `X-Parse-Session-Token` 解析后注入。 - 🔴 输出必须 `response.status(200).json(...)` **显式写出**;直接 `return 对象` 平台不回包(请求挂起)。 - token 只能放 `X-Parse-Session-Token` 请求头;放 body 的 `token` 字段会被平台鉴权层直接 401。