Skip to content

はじめに

auftakt とは

auftakt は rx-nostr 専用のリアクティブイベントストアです。Nostr クライアントのキャッシュボイラープレートを一掃し、NIP セマンティクス(Replaceable / Addressable / Deletion / Expiration)をストレージ層に内蔵します。

インストール

bash
pnpm add @ikuradon/auftakt

peer dependencies:

bash
pnpm add rx-nostr rxjs

クイックスタート

typescript
import { createEventStore } from '@ikuradon/auftakt';
import { memoryBackend } from '@ikuradon/auftakt/backends/memory';
import { connectStore, createSyncedQuery } from '@ikuradon/auftakt/sync';
import { createRxNostr } from 'rx-nostr';

// 1. ストア作成
const store = createEventStore({
  backend: memoryBackend(),
});

// 2. rx-nostr と接続
const rxNostr = createRxNostr({ verifier: async () => true });
rxNostr.setDefaultRelays(['wss://relay.damus.io']);
const disconnect = connectStore(rxNostr, store);

// 3. リアクティブクエリ
const { events$, status$ } = createSyncedQuery(rxNostr, store, {
  filter: { kinds: [1], limit: 50 },
  strategy: 'dual',
});

events$.subscribe((events) => {
  console.log(`${events.length} 件のイベント`);
});

status$.subscribe((status) => {
  console.log(`ステータス: ${status}`);
  // 'cached' → 'fetching' → 'live'
});

主な機能

機能説明
NIP 自動処理Replaceable, Addressable, Ephemeral, Kind 5 削除, NIP-40 有効期限
リアクティブクエリObservable<CachedEvent[]> — ストア変更時に自動再発行
プラガブルバックエンドMemory, Dexie (IndexedDB), cached(read-through ラッパー)
REQ ライフサイクル管理backward / forward / dual 戦略、キャッシュ対応 since
REQ 重複排除同一フィルタの backward REQ を共有(参照カウント方式)
イベント検証構造バリデーション + サイズ制限(署名検証は呼び出し側の責務)

次のステップ

MIT License