官方包 · 框架

用 Nest 的方式为 NestJS 加上实时事件

一个全局模块:发布事件、用带装饰器的 provider 方法授权私有和 presence 频道,并接收已签名的 Webhook。pusher-js、Laravel Echo 和移动端 Pusher SDK 无需修改即可连接。

  • HibiraService 发布事件、查询频道和在线成员,也能发送给已登录的用户。
  • @HibiraChannel() 像 Laravel 的 routes/channels.php 一样授权频道,@Broadcast() 发布路由返回的结果,@OnHibiraWebhook() 在任意 provider 中接收 Webhook。
  • stream() 把 LLM 输出发送到频道,requestApproval() 在代码执行操作前先请人审批,HibiraPushService 发送推送通知。支持 Nest 10 到 12,Express 或 Fastify 均可。

登录后,示例代码会自动填入您的集群主机。 登录

  1. 安装

    npm install @hibira-io/nestjs
    
    # .env
    HIBIRA_APP_ID=YOUR_APP_ID
    HIBIRA_KEY=YOUR_APP_KEY
    HIBIRA_SECRET=YOUR_APP_SECRET
    HIBIRA_HOST=ws.hibira.io
  2. 配置

    // app.module.ts
    import { Module } from '@nestjs/common';
    import { HibiraModule } from '@hibira-io/nestjs';
    import { JwtAuthGuard } from './auth/jwt-auth.guard';
    
    @Module({
      imports: [
        HibiraModule.forRoot({
          auth: { guards: [JwtAuthGuard] }, // POST /hibira/auth
          webhooks: true, // POST /hibira/webhook
        }),
      ],
    })
    export class AppModule {}
  3. 使用

    @Injectable()
    export class OrdersService {
      constructor(private readonly hibira: HibiraService) {}
    
      async ship(order: Order) {
        await this.hibira.trigger(`private-orders.${order.id}`, 'order.shipped', { id: order.id });
      }
    
      @HibiraChannel('private-orders.{orderId}')
      async canSeeOrder(user: User, { orderId }: { orderId: string }) {
        return (await this.find(orderId))?.customerId === user.id;
      }
    }

开始之前

  • 应用密钥只会在创建应用或轮换密钥时显示一次。请只放在服务器上,不要放进浏览器或游戏的构建包。
  • 要接收 Webhook,请在 main.ts 中以 rawBody: true 创建应用,这样签名会用收到的原始字节来校验。

请使用控制台中应用的 Key;Secret 只放在你的服务器上。频道、事件与授权端点的用法与 Pusher 完全相同。 免费创建账号 →