Phase 2: Jetstream subscription. firehose/events.rs parses JSON messages into IndexableGrant/IndexableKeyring. firehose/subscribe.rs handles WebSocket connect to wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.opake.cloud.grant&wantedCollections=app.opake.cloud.keyring with reconnect + exponential backoff. indexer.rs main loop: connect → process events → write DB → save cursor. Cursor is time_us (unix microseconds). Resume from saved cursor on reconnect. main.rs spawns indexer task alongside API server.
Phase 2: Jetstream subscription. firehose/events.rs parses JSON messages into IndexableGrant/IndexableKeyring. firehose/subscribe.rs handles WebSocket connect to wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.opake.cloud.grant&wantedCollections=app.opake.cloud.keyring with reconnect + exponential backoff. indexer.rs main loop: connect → process events → write DB → save cursor. Cursor is time_us (unix microseconds). Resume from saved cursor on reconnect. main.rs spawns indexer task alongside API server.