Add support ticket services, REST controllers, and STOMP relay
Implements the MediaService backend for the support ticket system: - SupportTopicService: CRUD for org-scoped support topics - SupportAssignmentService: round-r...
Add voip.> to NATS stream subjects and handle IllegalStateException in VoipStompRelayController
The NATS stream only covered chat.> so subscribing to voip.> threw IllegalStateException ([SUB-90007] No matching streams). Added voip.> to the stream subjects ...
Retain VoipStompRelayController subscription reference and add PreDestroy
Skip DB member lookup for messages auth check
Extract getMemberIdFromRequest() that reads memberID from the Redis session without hitting the DB. Use it in getMessages() instead of getCurrentMember() — the ...
Eliminate per-request logging overhead and async TTL refresh
- k8s configmap (the actual production config): lower security/hikari logging from INFO/DEBUG to WARN, add HikariCP pool config (max 20) - KSessionService: st...
Reduce log noise and tune connection pool
- Lower Spring Security from TRACE to WARN and HikariCP from DEBUG to WARN — eliminates dozens of synchronous log writes per request - Add explicit HikariCP p...
Remove per-message logging from chat message endpoint
Remove System.out.println calls inside the message stream map that were firing once per message (100 I/O operations per request), and the final log that streame...
Accept *** from query param for cross-subdomain WebSocket auth
Read *** ID from ?***= query parameter first, falling back to cookie. This allows the frontend on internal.kamocrm.com to authenticate WebSocket connections to ...
Handle stale NATS consumer binding with unique consumer retry
- Extract message handler into createNatsMessageHandler() method - Add retry logic with unique consumer name when "Consumer already bound" error occurs after ...
Add WebSocket authentication via *** cookie handshake interceptor
Add WebSocketAuthInterceptor that reads *** cookie on handshake, resolves session via KSessionService, and stores memberId/orgId in WebSocket session attributes...
Publish incoming message notifications to target member WebSocket topic
Route WebSocket through Traefik on port 443
- service.yaml: fix port 80→8443 to match pod's actual listen port - ingressroute.yaml: use scheme https + port 8443 for backend - serverstransport.yaml: add in...
Use cluster-internal DNS for NATS connection
Change default NATS URL from WireGuard IPs (100.64.x.x) to nats.kamo.svc.cluster.local for the local server. Remote nodes (k0m1, k2m1) remain on WireGuard IPs.
Trigger pipeline to apply updated deployment with optional TLS cert
Make TLS certificate optional in MediaService deployment
- Add optional: true to wildcard-kamocrm-com secret volume - Update cert-converter init container to handle missing certificate gracefully
Fix kubeconfig update to use WireGuard VPN IPs (10.8.x.x) instead of old Tailscale IPs
Refactor to parallel deployment for k1m1 and k2m1
- Split build and deployment into separate jobs - Deploy to k1m1 and k2m1 in parallel after build completes - Reduces total deployment time significantly
Revert to docker driver for faster builds - removes docker-container overhead
Switch to docker-container driver with cache for optimal build performance
Add Buildx setup with insecure registry config to resolve 401 auth errors
Fix NATS subscription error handling - gracefully handle 'Consumer already bound' errors, improve cleanup logging
Add simultaneous call detection and auto-connection - Track pending calls per session to detect simultaneous attempts - Auto-resolve when both users call at same time - Use first caller's callId and auto-accept the second - Clean up pending calls on answer/end - Remove duplicate otherMember lookup code
Use getUsernameAlias() instead of non-existent getName() method on Member
Add JanusService for WebRTC gateway integration - Add JanusService Java service for interacting with Janus WebRTC Gateway API - Configure Janus API URL, secrets, and STUN/TURN servers in application.yml - Support session creation, plugin attachment, and room management
Add WebSocketLoggingFilter to log ALL /ws/** requests to diagnose connection failures
Properly configure Spring Security for WebSocket - disable CSRF completely, enable session creation IF_REQUIRED for WebSocket handshake
เหมือนที่คุณเห็นการขนส่ง?
ทุก คน ที่ ได้ รับ การ ปรับ ปรุง เหล่า นี้ จะ ลง ไป ใน ที่ ทํา งาน ของ คุณ โดย อัตโนมัติ. เริ่มให้อิสระและดูมันเติบโตสัปดาห์แล้วสัปดาห์เล่า.