Dosu LogoDosu Logo
Ask
Join our Discord
Organization avatar
HashHivePublic
EvilBit Labs LLC
DocumentsHashHive
Real-Time_Events_&_WebSocket_Infrastructure
Real-Time_Events_&_WebSocket_Infrastructure
Type
External
Status
Published
Created
Jul 18, 2026
Updated
Jul 18, 2026
Source
spec/tickets/Real-Time_Events_&_WebSocket_Infrastructure.md

Real-Time Events & WebSocket Infrastructure#

Overview#

Implement in-memory WebSocket broadcasting for real-time dashboard updates with automatic polling fallback, documenting the Redis pub/sub extension path for future multi-instance deployments.

Scope#

In Scope:

  • Implement in-memory WebSocket broadcasting via EventService
  • Add WebSocket authentication (cookie primary; optional token query param fallback for non-browser clients)
  • Implement project-scoped event filtering
  • Add connection indicator to frontend (subtle, always visible)
  • Implement automatic polling fallback on WebSocket disconnect (30-second intervals)
  • Document Redis pub/sub extension path for multi-instance in code comments and architecture docs
  • Update file:packages/backend/src/services/events.ts

Out of Scope:

  • Redis pub/sub implementation (future multi-instance)
  • Event replay/history
  • Event persistence

Acceptance Criteria#

  1. WebSocket Server

    • WebSocket endpoint at /events/stream using hono/websocket
    • Authenticates connections via session cookie when present; supports ?token=<session-jwt> fallback for non-browser clients
    • Maintains in-memory map of connections by project ID
    • Broadcasts events only to connections in the same project
  2. Event Types

    • agent_status: Agent online/offline/error state changes
    • campaign_status: Campaign started/paused/stopped/completed
    • task_update: Task progress, completion, failure
    • crack_result: New hash cracked
  3. Event Emission

    • Services emit events after state changes (e.g., eventService.emit('campaign_status', { campaignId, status }))
    • EventService broadcasts to all connected clients in the same project
    • Events include timestamp and project ID
  4. Frontend Integration

    • Connection indicator shows WebSocket status (connected/disconnected)
    • On disconnect, frontend switches to polling mode (30-second intervals)
    • On reconnect, polling stops and WebSocket resumes
    • TanStack Query cache invalidated on event receipt
  5. Redis Pub/Sub Extension Path

    • Code comments document how to extend to Redis pub/sub
    • Architecture decision documented in Tech Plan
    • EventService designed to support both in-memory and Redis pub/sub (interface abstraction)

Technical Notes#

Current Implementation:

  • file:packages/backend/src/services/events.ts has in-memory WebSocket broadcasting
  • Need to ensure project-scoped filtering and session-based auth

Event Flow:

Polling Fallback:

  • Frontend detects WebSocket close event
  • Switches to polling same REST endpoints (e.g., /api/v1/dashboard/stats)
  • Polls every 30 seconds until WebSocket reconnects

Redis Pub/Sub Extension (Future):

// Future multi-instance support
// EventService publishes to Redis channel
await redis.publish('hashhive:events', JSON.stringify(event));

// All backend instances subscribe
redis.subscribe('hashhive:events', (message) => {
  const event = JSON.parse(message);
  websocketManager.broadcast(event);
});

Dependencies#

None (foundation layer)

Spec References#

  • spec:f4542d0d-b9bd-4e50-b90b-9141e8063a18/9332598a-b507-42ee-8e71-6a8e43712c16 (Tech Plan → Real-Time Event Architecture)
  • spec:f4542d0d-b9bd-4e50-b90b-9141e8063a18/98662419-66d0-40ee-a788-e5aa8c4c4de5 (Core Flows → Navigation & Layout)
Documents
.impeccable
0001-agent-enrollment-two-token-exchange
0002-docker-supervision-over-pm2
0003-bind-agent-to-enrollment-token
0004-agent-api-revisable-until-1.0
0005-version-public-api-after-1.0
0006-seaweedfs-over-minio
0007-three-api-surfaces
0008-betterauth-over-handrolled-jwt
0009-postgres-task-store-bullmq-orchestration
0010-schema-first-drizzle-zod
0011-pull-advisory-notify-task-distribution
0012-in-memory-websocket-v1-redis-deferred
0013-route-as-spec-hono-zod-openapi
0014-turborepo-bun-over-nx
0015-append-only-telemetry-timescaledb-rrd
0016-server-fanout-bus
0017-adaptive-task-sizing-lease
0018-real-db-integration-test-lane
0019-campaign-archiving-immutable-lifecycle
155-ac-traceability-matrix
155-task-distribution-assignment-spec
156-ac-traceability-matrix
156-object-storage-file-management-spec
160-login-project-selection-ui
2026-05-25-websocket-realtime-infrastructure-requirements
2026-05-29-dashboard-stats-and-read-endpoint-contract-requirements
2026-05-31-openapi-auto-generation-migration-requirements
2026-06-08-results-analysis-export-ui-requirements
2026-06-19-task-distribution-architecture
2026-06-20-campaign-archiving-requirements
2026-06-30-hash-export-import-search-requirements
227-spa-deep-link-refresh-redirect-spec
94-p0-cracker-binary-management-agent-auto-update
96-keyspace-task-distribution-spec
97-task-preemption-spec
99-attack-complexity-state-machine-spec
AGENTS
AGENTS
AI_POLICY
AI_POLICY
ARCHITECTURE
ARCHITECTURE
Agent_Authentication_&_Authorization
Agent_Heartbeat_&_Error_Handling
Agent_List_&_Detail_UI
Base Model Schema System
BullMQ_Queue_Architecture_&_Redis_Integration
CLAUDE
CONTRIBUTING
CONTRIBUTING
Campaign_Creation_Wizard_UI
Campaign_List_&_Detail_UI
Campaign_Orchestration_API
Code Quality Automation with Husky and Kiro Hooks
Core_Flows__HashHive_User_Journeys
Dashboard_&_Real-Time_Monitoring_UI
Dashboard_Stats_API_Endpoint_(GET__api_v1_dashboard_stats)
Development Workflow and Tooling Integration
ESLint and Formatting Configuration
Epic_Brief__HashHive_-_Modern_Distributed_Password_Cracking_Platform
GOTCHAS
GOTCHAS
Health Check Endpoint Enhancements
Login_&_Project_Selection_UI
MERN_proposal
Mixed Hash Type Detection & Automatic Campaign Splitting (#202)
MongoDB Connection Management
Object_Storage_&_File_Management
Project_Selection_&_User_Authentication_API
README
README
README
README
README
README
Real-Time_Events_&_WebSocket_Infrastructure
Resource_Management_API
Resource_Management_UI
Results_API_&_CSV_Export_(Dashboard_Backend)
Results_Analysis_&_Export_UI
SECURITY
SECURITY
STRATEGY
Task_Distribution_&_Assignment
Tech_Plan__HashHive_Architecture
Testing Strategy for Database and Models
advanced_task_scheduler
agent
agent-resource-protocol
agent-server-collaboration-vision
agent-token-rotation
agent_notes
agent_sync_extensions
agent_v1_contract_violations
allow_hybrid_hash_lists
attack
attack_notes
authentication_cleanup
back-compat-credential-format-migration
barrel-plus-subdir-service-split
brute_force_attack_editor
bullmq-jobid-dedup-requires-eviction
bun-test-mock-module-import-order
campaign_list_view
campaign_notes
campaigns
ci_check.prompt
code_review.prompt
contract-test-mocks-mirror-service-not-schema
copilot-instructions
core_algorithm_implementation_guide
crackable_uploads_plan
dashboard-read-endpoint-contract
dashboard-ux
default_config_suggestions
development
development
feat-agent-list-detail-ui
feat-betterauth-project-selection-rbac
feat-campaign-list-detail-ui
feat-masklist-keyspace
form-submit-payload-null-checks-2026-05-19
full_testing_architecture
getbytext-collision-waitfor-timeout
hard_password_attack_strategies
hash_hive_gap_analysis
health_status_screen
implementation_plan
learned_rules_parser_plan
llmstxt.prompt
markov_autogen_plan
new_dictionary_attack_editor
new_mask_attack_editor
openldap-testcontainer-bootstrap-race
performance_tuning.prompt
phase-1-core-infrastructure
phase-2-api-implementation
phase-2-api-implementation-part-1
phase-2-api-implementation-part-2
phase-2-api-implementation-part-3
phase-2b-resource-management
phase-2c-refactor-cleanup
phase-3-e2e-test-coverage-plan
phase-3-step-1
phase-3-step-2
phase-3-step-3
phase-3-step-4
phase-3-step-5
phase-3-web-ui-foundation
phase-4-containerization-deployment
phase-5-task-distribution
phase-6-monitoring-testing-documentation
playwright-shared-seed-user-last-project-id-flake
playwright-visual-baselines
pre-prod-wire-rename-and-schema-version-bump
previous_password_dictionary_attack_editor
projection-narrows-zrecord-wire-shape
psycopg_migration
radix-roving-focus-preventdefault-breaks-keyboard-nav
reactflow-position-by-array-index-2026-05-19
rule_explanation
salvage_templates
security_hardening.prompt
shadcn-radix-non-destructive-add-on-tailwind-v4
shared-zod-openapi-wire-contract-mirror-2026-05-25
spa_to_ssr
summary
template
test-coverage-plan
testcontainers_minio_support
testing
testing
user_flows_notes
v2-upgrade-overview
v2_agent_api_removal
work_next_task.prompt