@atcute/firehose

中文文档
1.2.0发布于 2026/09/100BSDES Module近 30 天下载 1.4万

aT 协议的轻量级和可爱的 XRPC 订阅客户端

中文使用文档
文档目录11 节
  1. 使用量
  2. 连接到接力火花
  3. 取消订阅
  4. 处理信件类型
  5. 跟踪光标以恢复
  6. 使用多个服务器
  7. 处理出错
  8. 连接周期召回
  9. 在运行时更新选项
  10. 禁用信件验证
  11. WebSocket 选项

@ atcute/ firehose (法语)

aT协议的轻量级XRPC订阅客户端.

npm install @atcute/firehose

此软件包为 XRPC 订阅提供通用客户端 - 基于 WebSocket 的流线 aT议定书使用的协议。 它处理框架解码、自动重接和可选计划 审定.

用于消费 Bluesky 网络起火,请考虑使用 @atcute/jetstream 相反, 它提供了更简单的基于JSON的界面.

使用量

连接到接力火花

import { FirehoseSubscription } from '@atcute/firehose';
import { ComAtprotoSyncSubscribeRepos } from '@atcute/atproto';

const subscription = new FirehoseSubscription({
    service: 'wss://bsky.network',
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
});

for await (const message of subscription) {
    console.log(message.$type, message.seq);
}

当您从循环中跳出时,连接会打开,然后关闭。 页:1 基础的 WebSocket 在断开时自动重接.

取消订阅

通过一个 AbortSignal 关闭连接并拒绝重复:

const subscription = new FirehoseSubscription({
    service: 'wss://bsky.network',
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
    signal: AbortSignal.timeout(10_000),
});

for await (const message of subscription) {
    console.log(message.$type);
}

处理信件类型

信件包括: $type 字段表示其类型 :

for await (const message of subscription) {
    switch (message.$type) {
        case 'com.atproto.sync.subscribeRepos#commit': {
            // repository commit (record creates, updates, deletes)
            console.log('commit:', message.repo, message.rev);
            break;
        }

        case 'com.atproto.sync.subscribeRepos#handle': {
            // handle change
            console.log('handle:', message.did, message.handle);
            break;
        }

        case 'com.atproto.sync.subscribeRepos#migrate': {
            // account migration
            console.log('migrate:', message.did, message.migrateTo);
            break;
        }

        case 'com.atproto.sync.subscribeRepos#tombstone': {
            // account deletion
            console.log('tombstone:', message.did);
            break;
        }

        case 'com.atproto.sync.subscribeRepos#identity': {
            // identity update
            console.log('identity:', message.did);
            break;
        }

        case 'com.atproto.sync.subscribeRepos#account': {
            // account status change
            console.log('account:', message.did, message.active);
            break;
        }
    }
}

跟踪光标以恢复

使用函数用于 params 为每次连接尝试提供当前光标:

let cursor: number | undefined;

// load saved cursor if resuming
const saved = localStorage.getItem('firehose-cursor');
if (saved) {
    cursor = Number(saved);
}

const subscription = new FirehoseSubscription({
    service: 'wss://bsky.network',
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
    // function is called on each connection/reconnection
    params: () => ({ cursor }),
});

for await (const message of subscription) {
    if ('seq' in message) {
        cursor = message.seq;

        // periodically save cursor for recovery
        if (cursor % 1000 === 0) {
            localStorage.setItem('firehose-cursor', String(cursor));
        }
    }
}

每次连接尝试时都会调用参数函数,所以当 WebSocket 在一个 断开,它自动使用最新的光标值.

使用多个服务器

通过一系列 URL 自动失效。 客户端在每次连接上随机选择一个:

const subscription = new FirehoseSubscription({
    service: ['wss://bsky.network', 'wss://bsky-relay.example.com'],
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
});

处理出错

XRPC订阅可以发送出出错帧. 处理他们与 onError 回调 :

const subscription = new FirehoseSubscription({
    service: 'wss://bsky.network',
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
    onError(err) {
        console.error('firehose error:', err);
        // common errors:
        // - "FutureCursor": cursor is ahead of the server
        // - "ConsumerTooSlow": client is not consuming messages fast enough
    },
});

连接周期召回

处理记录或 UI 更新的连接事件 :

const subscription = new FirehoseSubscription({
    service: 'wss://bsky.network',
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
    onConnectionOpen(event) {
        console.log('connected to firehose');
    },
    onConnectionClose(event) {
        console.log('disconnected:', event.code, event.reason);
    },
    onConnectionError(event) {
        console.error('connection error:', event.error);
    },
});

在运行时更新选项

使用 updateOptions()。这引发了重联:

const subscription = new FirehoseSubscription({
    service: 'wss://bsky.network',
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
});

// later, switch to a different service
subscription.updateOptions({
    service: 'wss://different-relay.example.com',
});

禁用信件验证

默认情况下,电文将对照计划进行验证。 如果您为更好的性能, 请禁用此选项 信任服务器 :

const subscription = new FirehoseSubscription({
    service: 'wss://bsky.network',
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
    validateEvents: false,
});

WebSocket 选项

将选项传递给基础 派对 网络安全套 自定义再连接行为 :

const subscription = new FirehoseSubscription({
    service: 'wss://bsky.network',
    nsid: ComAtprotoSyncSubscribeRepos.mainSchema,
    ws: {
        maxRetries: 10,
        minReconnectionDelay: 1000,
        maxReconnectionDelay: 30000,
    },
});

版本与发布记录

@atcute/firehose 共发布 7 个版本,首次发布于 2025/11/06;过去 12 个月发布了 6 个版本。

版本发布日期距今
1.2.0latest2026/09/101 个月前
1.1.02026/08/192 个月前
1.0.22026/07/163 个月前
1.0.12026/06/304 个月前
1.0.02026/05/095 个月前
0.1.12026/05/086 个月前

关于 @atcute/firehose 的常见问题

@atcute/firehose 是什么?

aT 协议的轻量级和可爱的 XRPC 订阅客户端

如何安装 @atcute/firehose?

在项目目录运行 npm install @atcute/firehose,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@atcute/lexicons(^2.1.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@atcute/firehose 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/atcute__firehose 是否存在。

@atcute/firehose 支持 ESM 还是 CommonJS?

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

@atcute/firehose 可以商用吗?

@atcute/firehose 使用 0BSD 许可。几乎没有限制:可自由使用、修改和分发,连保留版权声明也不要求。以上为概括,不构成法律意见,请以许可原文为准。

@atcute/firehose 的下载量有多少?

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

@atcute/firehose 还在维护吗?

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