Use ServersTransport to disable HTTP/2 for WebSocket connections
- Create ServersTransport resource with disableHTTP2: true - Reference ServersTransport in IngressRoute service configuration - Remove invalid disableHTTP2 fiel...
Disable HTTP/2 for MediaService backend connection
- Add disableHTTP2: true to force HTTP/1.1 for backend connections - HTTP/2 Extended CONNECT is not properly converting Upgrade header - WebSocket upgrades requ...
Configure IngressRoute service scheme for WebSocket support
- Set scheme: http to ensure proper HTTP/1.1 handling for WebSocket upgrades - HTTP/2 Extended CONNECT needs proper conversion to HTTP/1.1 Upgrade header - This...
Remove invalid handshake handler and fix SockJS configuration
- Remove invalid DefaultHandshakeHandler override (method doesn't exist) - Remove invalid setSupressCors call (method doesn't exist) - Keep HttpSessionHandshake...
Add WebSocket handshake logging and SockJS configuration
- Add handshake handler and interceptor logging to diagnose WebSocket connection issues - Configure SockJS to suppress CORS (handled by Spring Security) and dis...
Configure SockJS transports to handle HTTP/2 WebSocket upgrade issues
- Explicitly configure SockJS transport order to prefer WebSocket, then fallback to xhr-streaming/xhr-polling - HTTP/2 WebSocket upgrades may fail, so SockJS wi...
Remove media-cors middleware from IngressRoute to allow WebSocket connections
- media-cors middleware was clearing CORS headers which interfered with WebSocket upgrades - WebSocket connections require direct pass-through without header mo...
Remove invalid Spring Security pattern /ws/**/info
- PatternParseException: No more pattern data allowed after {*...} or ** - /ws/** already covers all paths under /ws including /ws/info - This was causing 500 e...
Apply media-cors middleware to MediaService IngressRoute
- Apply media-cors middleware to allow CORS headers for WebSocket connections - Matches the pattern used for theme domains
Explicitly permit OPTIONS requests for CORS preflight
- Add explicit permit for OPTIONS method on all paths - Add explicit permit for /ws/info endpoint (SockJS handshake) - This ensures CORS preflight requests reac...
Make CORS configuration more permissive for WebSocket connections
- Explicitly handle '*' wildcard for origins, methods, and headers - Add WebSocket-related headers to exposed headers - Add logging to verify CORS configuration...
Add logging and configure SockJS heartbeat/disconnect settings
- Add logging to verify WebSocket endpoint registration - Configure SockJS heartbeat and disconnect delay - This should help diagnose why SockJS handshake isn't...
Revert IngressRoute changes - Traefik handles WebSocket automatically
Ensure messages route is recognized by Next.js
- Added logging to verify route is being hit - Route file exists and structure is correct for Next.js 15
Remove non-existent 'active' property from STOMP Client logging
- STOMP Client doesn't have an 'active' property - Only check 'connected' property which is the correct state indicator
Remove unsupported onWebSocketError handler from STOMP client
- onWebSocketError is not a valid property in ClientOptions - SockJS error handlers (onerror, onclose) already provide error handling
Add comprehensive WebSocket error handling and logging
- Added SockJS error handlers (onopen, onerror, onclose) to catch connection failures - Added connection timeout detection (10 seconds) to identify silent failu...
Remove duplicate WebSocket endpoint registration and improve logging
- Removed duplicate /ws endpoint registration (SockJS already handles native WebSocket) - Added null check for payload in subscribeToSession - This may fix WebS...
Remove invalid Spring Security path pattern /ws/**/websocket
- Spring Security does not allow path segments after /** pattern - /ws/** already matches all paths under /ws including websocket endpoints - This fixes Pattern...
Remove incorrect HTTPS agent workaround
- Reverted changes that bypassed certificate validation - Certificates are issued by auto-cert service (Let's Encrypt), not self-signed - Need to investigate wh...
Use HTTPS with agent that accepts self-signed certificates
- Reverted to always use HTTPS (not HTTP) - Added HTTPS agent with rejectUnauthorized: false for self-signed certs - This allows server-side Next.js routes to c...
Use Kubernetes service name for MediaService to avoid SSL cert issues
- Server-side Next.js routes now use **************** - This avoids self-signed certificate errors when connecting to https://media.kamocrm.com - Client-side re...
Remove old /api/security/media/ routes that were intercepting requests
- Old routes were forwarding to APIService which no longer has media endpoints - All media requests should go through /api/media/ routes directly to MediaServic...
Revert to actions/checkout@v4 to match other Next.js projects
- Remove complex manual checkout logic that was causing hangs - Use standard actions/checkout@v4 like kamo-login and kamo-register - Simplify Docker build conte...
Use shallow clone with timeout to prevent hanging
- Use --depth 1 for faster cloning - Add timeout (120s for shallow, 300s for full) - Fallback to full clone if shallow fails - Fetch specific commit if needed a...
Change to valid directory before git clone to avoid working directory error
- Change to /tmp or / before removing/cloning workspace - Only remove directory if it exists but is not a git repo - Prevents 'Unable to read current working di...
Use hardcoded repository URL and set GITHUB_WORKSPACE env var
- Use direct repository URL to avoid DNS/hostname resolution issues - Set GITHUB_WORKSPACE environment variable for subsequent steps - Use env var in Docker bui...
Use git clone directly instead of relying on empty workspace
- Clone repository using git directly with repository URL - Handle both fresh clone and existing repository cases - Use working-directory for Docker build actio...
Simplify all checkout steps - remove git operations that hang
- Remove git fetch/reset/clean from deploy jobs - Forgejo runner already has code checked out - Just verify GITHUB_WORKSPACE is valid
Simplify checkout step - remove git clone that was hanging
- Remove git clone logic that was causing 20+ minute hangs - Forgejo runner already has code checked out, just verify directory - Remove unnecessary git fetch/r...
Improve checkout and Docker build context handling
- Add proper repository cloning if not already checked out - Verify Dockerfile exists before building - Use absolute paths for Docker build context - Fix workin...
Replace actions/checkout with manual git checkout to avoid DNS issues
- Replace actions/checkout@v4 with manual git checkout commands - Forgejo runner already has code checked out, just need to ensure clean state - Fixes DNS looku...
Explicitly permit WebSocket endpoints in Spring Security
- Added explicit permitAll for /ws/** endpoints - WebSocket upgrade requests need explicit permission even in development mode - Fixes issue where WebSocket con...
Search for existing chat sessions by participant membership, not just session owner
- Changed findOrCreateChatSession to search MediaSessionMember records instead of MediaSession.member - Now searches sessions where creator is a participant (me...
Add detailed logging for message member ID retrieval
- Added logging to trace member ID for each message being returned - Logs member class name to detect proxy/stub issues - Logs distinct member IDs in response t...
Add JOIN FETCH to eagerly load member in message queries
- Added JOIN FETCH m.member to both findBySessionAndIsRemovedFalse queries - Ensures member entity is eagerly loaded to avoid lazy loading issues - Fixes issue ...
Automatically create NATS JetStream stream if it doesn't exist
- Added createStreamIfNotExists method to check and create the CHAT_MESSAGES stream - Stream is created with subjects from configuration (chat.>) - Fixes 'No ma...
Extract large IDs from raw JSON to prevent JavaScript precision loss
- Extract memberID, userID, orgID, and securityOrgId from raw JSON string before parsing - Prevents precision loss for IDs > Number.MAX_SAFE_INTEGER (9007199254...
Make NatsMessageService work with Optional JetStream injection
- Changed JetStream injection to Optional with @Autowired(required=false) to handle bean ordering issues - Removed @ConditionalOnBean to allow service creation ...
Reorder annotations in NatsMessageService to check property first, then bean
Correct import for ConditionalOnProperty in NatsMessageService
Add ConditionalOnProperty to NatsMessageService to ensure it only loads when NATS is enabled
Serialize memberID and other IDs as strings in user-info API to prevent JavaScript precision loss
Explicitly import NatsConfig to ensure NATS JetStream is enabled
Add detailed logging for WebSocket subscription and NATS message forwarding
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.