公式パッケージ · フレームワーク
NestJS らしく書けるリアルタイムイベント
イベントの送信、デコレーターを付けたプロバイダーのメソッドによるプライベート/プレゼンスチャンネルの認可、署名付き Webhook の受信をまとめたグローバルモジュールです。pusher-js、Laravel Echo、モバイル向け Pusher SDK はそのまま接続できます。
@hibira-io/nestjsnpm ↗GitHub ↗
- HibiraService でイベントの送信、チャンネルやプレゼンスメンバーの取得、サインイン中のユーザーへの送信ができます。
- @HibiraChannel() は Laravel の routes/channels.php のようにチャンネルを認可し、@Broadcast() はルートの戻り値を送信し、@OnHibiraWebhook() は任意のプロバイダーで Webhook を受け取ります。
- stream() は LLM の出力をチャンネルへ送り、requestApproval() はコードが動く前に人の承認を求め、HibiraPushService はプッシュ通知を送ります。Nest 10〜12、Express と Fastify に対応。
サインインすると、コード例にご自身のクラスターホストが入ります。 サインイン
インストール
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設定する
// 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 {}使う
@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 を指定してアプリを作成してください。署名を受信したバイト列そのもので検証するためです。
ダッシュボードのアプリキーを使ってください。シークレットはサーバー側だけに置きます。チャンネル、イベント、認可エンドポイントは Pusher とまったく同じように動作します。 無料でアカウントを作成 →