@atproto/sync

中文文档
0.4.23发布于 2026/11/06MITTypeScriptES Module构建来源已验证近 30 天下载 2.9万

atproto 同步库

中文使用文档

@ atproto/ sync: atproto 同步工具

用于同步来自该数据库的数据的 TypeScript 库 原子弹 腾讯网. 目前只支持火花( 中继) 订阅

NPM Github CI Status

使用量

烟花课会打开一个网口连接 com.atproto.sync.subscribeRepos 在给定的repo主机上(默认由 Bluesky 运行的中继器).

每个事件都将被解析,认证,然后传递给所提供的 handleEvt 它可以处理索引.

打开 Commit 事件,火花会验证签名和回波证明,以确保事件真实. 此选项可随 unauthenticatedCommits 旗帜。 同样的 Identity 事件,火花将获取最新的 DDE 文档用于重播,并对相关控件进行双向验证。 此选项可随 unauthenticatedHandles 旗帜.

某类事件可使用 excludeIdentity编号 :excludeAccount编号 :excludeCommit 旗帜。 可使用 Repo 写入过滤到特定收藏 filterCollections。默认情况下,所有事件都会被解析并传递给处理器。 请注意,目前这种被过滤过的客户端正在发生,尽管我们很可能会在未来引入服务器端的方法来完成这项工作.

遇到的非致命错误将转给所需的 onError 处理者。 在大多数情况下,这些可以只是登录.

在使用火花类时,事件会按序处理. 每个事件都必须在下一个事件解析和认证之前完成处理.

import { Firehose } from '@atproto/sync'
import { IdResolver } from '@atproto/identity'

const idResolver = new IdResolver()
const firehose = new Firehose({
  idResolver,
  service: 'wss://bsky.network',
  handleEvt: async (evt) => {
    if (evt.event === 'identity') {
      // ...
    } else if (evt.event === 'account') {
      // ...
    } else if (evt.event === 'create') {
      // ...
    } else if (evt.event === 'update') {
      // ...
    } else if (evt.event === 'delete') {
      // ...
    }
  },
  onError: (err) => {
    console.error(err)
  },
  filterCollections: ['com.myexample.app'],
})
firehose.start()

// on service shutdown
await firehose.destroy()

对于更坚固的索引管道,建议使用所供应的 MemoryRunner 课。 这提供了一个内膜分出队列 。 由于来自给定回波的事件必须按顺序处理,这使得事件可以同时处理,同时仍然可以连续处理来自任何给定回波的事件.

这个 MemoryRunner 还根据上次完成的连续工作跟踪内部光标。 这保证了不放弃任何事件,虽然这确实意味着有些事件可能偶然被重放(如果websocket下降并重新连接),因此建议任何索引逻辑都是一能的. 可选 setCursor 参数可以提供给 MemoryRunner 用于持续存储最近处理的光标.

import { Firehose, MemoryRunner } from '@atproto/sync'
import { IdResolver } from '@atproto/identity'

const idResolver = new IdResolver()
const runner = new MemoryRunner({
  setCursor: (cursor) => {
    // persist cursor
  },
})
const firehose = new Firehose({
  idResolver,
  runner,
  service: 'wss://bsky.network',
  handleEvt: async (evt) => {
    // ...
  },
  onError: (err) => {
    console.error(err)
  },
})
firehose.start()

// on service shutdown
await firehose.destroy()
await runner.destroy()

许可证

根据麻省理工学院和Apache 2.0条款,这个项目具有双重许可证:

下游项目和终端用户可自行选择单独或共同发放许可证。 这种双重许可的动机是Apache 2.0提供的额外软件专利保证.

版本与发布记录

@atproto/sync 共发布 96 个版本,首次发布于 2024/09/05;过去 12 个月发布了 59 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.23latest2026/11/061 天前
0.0.0-spaces-alpha-20261105160032alpha2026/11/062 天前
0.0.0-spaces-alpha-202610291719132026/10/309 天前
0.4.202026/10/2810 天前
0.4.192026/10/2711 天前
0.4.182026/10/2414 天前

其他发布通道:next → 0.3.0-next.0,alpha → 0.0.0-spaces-alpha-20261105160032。

关于 @atproto/sync 的常见问题

@atproto/sync 是什么?

atproto 同步库

如何安装 @atproto/sync?

在项目目录运行 npm install @atproto/sync,或使用 pnpm add / yarn add / bun add。

@atproto/sync 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@atproto/sync 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@atproto/sync 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@atproto/sync 可以商用吗?

@atproto/sync 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@atproto/sync 的下载量有多少?

根据 npm 官方下载统计,@atproto/sync 在 2026/10/07 – 2026/11/05 这 30 天内被下载 29,337 次,日均约 978 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@atproto/sync 还在维护吗?

最新版本 0.4.23 发布于 2026/11/06(1 天前);至今共发布 96 个版本,其中过去 12 个月发布了 59 个;首次发布于 2024/09/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。