mcpField
S
spacetimedb-procedures

spacetimedb-procedures

github.com/danmossa开发2165 次安装19 周前更新
代码仓库

关于 spacetimedb-procedures

面向 SpacetimeDB 开发者的技能,介绍如何编写非 reducer 事务入口的 procedure。内容涵盖语言用法、事务处理,以及执行外部 HTTP 请求时的注意事项。

主要功能

  1. 01多种语言的 procedure 模式
  2. 02返回值与数据库访问指引
  3. 03事务安全的数据库写入
  4. 04外部 HTTP 与密钥处理指引

适用场景

  1. 01选择 reducer 或 procedure
  2. 02实现 SpacetimeDB procedure
  3. 03获取外部数据后写入数据库

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/danmossa/spacetimedb-skills --skill spacetimedb-procedures

安装后在 Claude Code 中输入/spacetimedb-procedures确认已加载。

附带文件references/functions-procedures.md

详细介绍

将此技能用于 reducer 事务入口点以外的过程和服务端工作。

核心过程模式

过程是可以返回值并执行 reducer 不应执行的工作的服务端函数,包括外部 HTTP 调用。对于由客户端调用的事务性状态变更,请使用 reducer;当调用方需要返回值或函数必须执行外部工作时,请使用过程。

TypeScript 过程形式:

export const add_two_numbers = spacetimedb.procedure(
  { lhs: t.u32(), rhs: t.u32() },
  t.u64(),
  (_ctx, { lhs, rhs }) => BigInt(lhs) + BigInt(rhs),
);

语言说明:

  • TypeScript 过程返回声明的 t.* 类型,并接收 (ctx, args)。
  • C# 过程尚不稳定;请添加 #pragma warning disable STDB_UNSTABLE 并使用 [SpacetimeDB.Procedure]。
  • Rust 过程尚不稳定;请启用 unstable 特性,并使用 #[spacetimedb::procedure] 和 &mut ProcedureContext。
  • C++ 过程尚不稳定;请在包含头文件前定义 SPACETIMEDB_UNSTABLE_FEATURES。

事务和 HTTP

  • 过程不会自动在事务中运行。
  • 请使用相应语言的事务辅助函数来包装数据库写入,例如 TypeScript 的 ctx.withTx(...)。
  • 发出 HTTP 请求时,不要让事务保持开启状态。先获取数据,然后开启一个短事务来写入结果或调用 reducer 逻辑。
  • 请明确处理外部 API 密钥和故障;不要记录可能包含私有数据的令牌或响应正文。
  • 如果过程调用 reducer 逻辑,请确保共享的状态变更逻辑可在事务中安全运行,并且可从 reducer 上下文复用。

参考索引

需求打开
过程定义、数据库访问、HTTP、reducer 调用和返回值references/functions-procedures.md

指南

  • 对于由客户端调用的事务性状态变更,请使用 reducer;当参考资料表明适合返回值或执行外部工作时,请使用过程。
  • 明确处理 HTTP 请求和外部 API,包括密钥、故障和运行时预期。
  • 根据需要,将表变更的详细信息交由 spacetimedb-reducers 或 spacetimedb-tables 处理。

评论

支持 Markdown