feat: Migrate from Socket.IO to Server-Sent Events (SSE)

- Replace Socket.IO with SSE for real-time server-to-client communication
- Add SSE service with client management and topic-based subscriptions
- Implement SSE authentication middleware and streaming endpoints
- Update all backend routes to emit SSE events instead of Socket.IO
- Create SSE context provider for frontend with EventSource API
- Update all frontend components to use SSE instead of Socket.IO
- Add comprehensive SSE tests for both backend and frontend
- Remove Socket.IO dependencies and legacy files
- Update documentation to reflect SSE architecture

Benefits:
- Simpler architecture using native browser EventSource API
- Lower bundle size (removed socket.io-client dependency)
- Better compatibility with reverse proxies and load balancers
- Reduced resource usage for Raspberry Pi deployment
- Standard HTTP-based real-time communication

🤖 Generated with [AI Assistant]

Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
This commit is contained in:
William Valentin
2025-12-05 22:49:22 -08:00
parent b5ee7571c9
commit bb9c8ec1c3
571 changed files with 156739 additions and 1350 deletions
+1 -3
View File
@@ -2,7 +2,6 @@ apiVersion: v1
kind: Service
metadata:
name: adopt-a-street-backend
namespace: adopt-a-street
labels:
app: backend
spec:
@@ -19,7 +18,6 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: adopt-a-street-backend
namespace: adopt-a-street
spec:
replicas: 1
selector:
@@ -46,7 +44,7 @@ spec:
containers:
- name: backend
# Update with your registry and tag
image: gitea-gitea-http.taildb3494.ts.net/will/adopt-a-street/backend:latest
image: gitea-http.taildb3494.ts.net/will/adopt-a-street/backend:latest
imagePullPolicy: Always
ports:
- containerPort: 5000
-1
View File
@@ -2,7 +2,6 @@ apiVersion: v1
kind: ConfigMap
metadata:
name: adopt-a-street-config
namespace: adopt-a-street
data:
# CouchDB Connection
COUCHDB_URL: "http://adopt-a-street-couchdb:5984"
+1 -3
View File
@@ -2,7 +2,6 @@ apiVersion: v1
kind: Service
metadata:
name: adopt-a-street-frontend
namespace: adopt-a-street
labels:
app: frontend
spec:
@@ -19,7 +18,6 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: adopt-a-street-frontend
namespace: adopt-a-street
spec:
replicas: 1
selector:
@@ -36,7 +34,7 @@ spec:
containers:
- name: frontend
# Update with your registry and tag
image: gitea-gitea-http.taildb3494.ts.net/will/adopt-a-street/frontend:latest
image: gitea-http.taildb3494.ts.net/will/adopt-a-street/frontend:latest
imagePullPolicy: Always
ports:
- containerPort: 80
-1
View File
@@ -2,7 +2,6 @@ apiVersion: v1
kind: Secret
metadata:
name: regcred
namespace: adopt-a-street
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: eyJhdXRocyI6eyJnaXRlYS1odHRwLnRhaWxkYjM0OTQudHMubmV0Ijp7InVzZXJuYW1lIjoid2lsbCIsInBhc3N3b3JkIjoiW1lPVVJfR0lURUFfUEFTU1dPUkRdIiwiYXV0aCI6IltBVVRIX1RPS0VOXSJ9fX0=
+2 -2
View File
@@ -2,7 +2,6 @@ apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: adopt-a-street-ingress
namespace: adopt-a-street
annotations:
# Uncomment the appropriate ingress class for your cluster
kubernetes.io/ingress.class: "haproxy" # For HAProxy Ingress
@@ -15,8 +14,9 @@ metadata:
# traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
# traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd
spec:
ingressClassName: haproxy
rules:
- host: adopt-a-street.local # CHANGE THIS to your actual domain
- host: app.adopt-a-street.192.168.153.241.nip.io # CHANGE THIS to your actual domain
http:
paths:
# API endpoints
+8
View File
@@ -0,0 +1,8 @@
apiVersion: v1
data:
.dockerconfigjson: eyJhdXRocyI6eyJnaXRlYS1odHRwLnRhaWxkYjM0OTQudHMubmV0Ijp7InVzZXJuYW1lIjoid2lsbCIsInBhc3N3b3JkIjoiWU9VUl9BQ1RVQUxfR0lURUFfUEFTU1dPUkQiLCJlbWFpbCI6IndpbGxAdGFpbGRiMzQ5NC50cy5uZXQiLCJhdXRoIjoiZDJsc2JEcFpUMVZTWDBGRFZGVkJURjlIU1ZSRlFWOVFRVk5UVjA5U1JBPT0ifX19
kind: Secret
metadata:
name: regcred
namespace: adopt-a-street-prod
type: kubernetes.io/dockerconfigjson
-1
View File
@@ -2,7 +2,6 @@ apiVersion: v1
kind: Secret
metadata:
name: adopt-a-street-secrets
namespace: adopt-a-street
type: Opaque
stringData:
# JWT Secret - CHANGE THIS IN PRODUCTION!