Skip to content

feat(realtime): warm shared connections and handle control frames - #427

Open
driftsorbit wants to merge 2 commits into
Refract-Protocol:mainfrom
driftsorbit:feat/realtime-control-warmup-mapping-clock
Open

driftsorbit wants to merge 2 commits into
Refract-Protocol:mainfrom
driftsorbit:feat/realtime-control-warmup-mapping-clock

Conversation

@driftsorbit

Copy link
Copy Markdown

Summary

The app shell now owns one shared realtime client and warms it after hydration when the realtime flag is enabled. Navigation intent warms /cover and /provide; reduced-data signals and the persisted opt-out preference suppress warm-up, and unused warm connections close after 15 seconds.

The realtime client now uses an injected clock for reconnect, idle, and heartbeat timers. It handles $control revocation, maintenance, drain, drain-complete, and ping/pong frames separately from domain events. Oracle, claim, and notification payloads map into frontend-owned domain types; claim amounts stay strings and claim timestamps normalize to Unix milliseconds for both REST and stream data.

The deterministic mock compares a 100 ms connection handshake: first-event delay after a warm subscribe is 0 ms; cold subscribe is 100 ms. Control-frame tests verify revocation removal/no-op behavior, maintenance deferral, and immediate drain-complete reconnect.

Validation

  • Focused realtime, oracle-hook, and notification tests: 15 passed.
  • Scoped ESLint for changed implementation files: passed.
  • Targeted TypeScript check for realtime/domain/API files: passed.
  • git diff --check: passed.

The repository-wide gates are blocked by upstream baseline issues: package-lock.json is empty, so npm ci cannot install; src/app/cover/page.tsx has existing JSX parse errors; and the full lint/test runs report existing lint violations, missing test dependencies, and unrelated test failures. These prevent confirming green full CI from this checkout.

Closes #263
Closes #262
Closes #261
Closes #260

@drips-wave

drips-wave Bot commented Oct 21, 2026

Copy link
Copy Markdown

@driftsorbit Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant