Raise client read timeout to 120s for long messages
LibreTranslate runs CPU-only argos models — a paragraph-length chat message takes 20-30s to translate, and longer ones can push past 60s. The 8-second read time...
Redis에서 세션 GUID에 의해 공개 지원 채팅 추적
마케팅 방문자 사용 /ws/public-chat-native 없이 memberId; 티켓 여전히 org placeholder 회원을 requestor로 참조하십시오. 사업소개 PUBLIC public STOMP connect/disconnect, 방송 sessionGuid on /top...
JPA 저장소 스캔을 확장하여 상거래 패키지를 포함
새로운 kamo-shared-library에서 가져옵니다 *********** 제품 설명 *************** (com.kamo.z.shared.commerce에서). MediaService는 donotmodify.dao.repos 만 스캔했습니다. 그리고 응용 프로그램은 시작 ...
ChatWebSocketController에서 HashMap 가져오기 복원
이전 refactor는 HashMap 가져 오기를 제거하지만 HandleTyping 여전히 태핑 이벤트 페이로드에 대한 HashMap을 구성, 원인 Forgejo는 '암호를 찾을 수 없습니다. class HashMap'.
세션 생성에 NATS 소비자를 활성화하여 메시지 손실을 방지합니다
NATS JetStream 푸시 소비자는 STOMP 클라이언트가 만들 때만 생성되었습니다. /app/chat/subscribe를 보냈습니다. DeliverPolicy로. 새로운, 어떤 메시지가 전에 출판 소비자는 영구적으로 손실되어 있습니다. 방문자 메시지 및 이름 변경 에이전트가 먼저...
Core NATS의 릴레이 테마 제공
Match SecurityService 핵심 출판 : Dispatcher와 구독 security.theme.provision.* 대신 JetStream (스트림은 채팅을 포함).
이용 PublicChatVisitor display방문객 티켓에 requestorName
방문자 개시 티켓 hardcode requestor to the org system member, 그래서 DTO는 Requestor Column의 org 소유자의 이름을 서핑했다. (주) publicChatVisitor.displayName로 돌아가기 때문에 목록이 표시됩니다. 실제 방...
GeoLookupService에서 오류를 작성하고 에이전트 메시지에 대한 NATS 게시를 추가
- 옵션 수정 대 목록 유형 잡기 *********** - NatsMessageService를 MediaController에 주입 - 채팅에 게시.session.{guid} 에이전트가 메시지를 작성한 후 대리인과 방문자는 페이지를 새로 고침 없이 STOMP를 통해 즉시 그것을 보십시오
Real-time chat delivery, message sides, notifications, and name sync
- Keep NATS subscription alive on client unsubscribe to avoid breaking agent real-time delivery - Tag visitor messages with messageType=VISITOR_MESSAGE in getMe...
태그 방문자 메시지로 VISITOR MESSAGE 유형, add senderName to GET 메시지
- PublicChatService: messageType=VISITOR MESSAGE를 설정하여 프론트엔드를 구분할 수 있습니다. STOMP 주제에 대한 에이전트 응답에서 방문자 에코 - MediaController.getMessages: sender 포함 이름 필드 그래서 에이전트는...
Three support/chat issues — NATS relay, auto-popup, topic fallback
1. Switch SupportNotificationService and SupportStompRelayController from JetStream to core NATS — the CHAT_MESSAGES stream only covers chat.> so JetStrea...
Write contact form description as chat message on public ticket creation
The description was only stored on the ticket entity and never appeared in the chat window. Added writeTextMessage() helper and call it after the system event s...
Add debug logging and robust rights parsing for webinar controller
Adds info/warn logging for session data and rights on POST /types to diagnose 403 errors. Also adds fallback parsing for rights stored as JSON strings in Redis ...
Resolve org theme backgrounds not appearing in meet virtual backgrounds
- Add domain-based theme URL resolution for internal K8s service-to-service calls - getPublicBackgrounds now accepts optional domain param to derive correct the...
Upload meet backgrounds to public MinIO bucket with hash-based naming
Was uploading to private 'imaging-meet-recordings' bucket via **************** which caused: - MinIO region mismatch errors on the primary node - Connection tim...
Return serialization-safe Maps instead of raw JPA entities in MeetConfigController
All config/background endpoints were returning raw JPA entities with @ManyToOne(fetch=LAZY) Organization references. Jackson failed to serialize the Hibernate p...
Remove duplicate endpoints from MeetController, add org-themes to MeetConfigController
MeetConfigController already handled config/background endpoints. The duplicate endpoints in MeetController caused ambiguous mapping. Added org-theme background...
Update health probes to HTTP port 80 to match new server config
Startup, readiness, and liveness probes were still pointing to port 8443 with HTTPS scheme, causing pod restart loops.
Switch MediaService to HTTP port 80 — TLS termination at Traefik
Internal cluster traffic doesn't need HTTPS. Traefik handles TLS for external clients. This aligns MediaService with all other services.
Send chat invites to correct WebSocket topic /topic/chat/incoming/{memberId}
Was publishing to /topic/chat/member/{id} but kamo-internal subscribes to /topic/chat/incoming/{id}. Also fixed Member entity field access **************** inst...
VoipStompRelayController의 IllegalStateException을 처리하는 NATS 스트림 주제에 voip.> 추가
NATS 스트림은 채팅을 덮었다.> 그래서 voip에 대항.> 뚱 베어 IllegalStateException ([SUB-90007] 일치하는 스트림 없음. 추가된 voip.> 스트림 주제에 따라서 두 주제는 덮여, 확장 IllegalStateException을 사용하여 시작 실패 방지...
Cross-subdomain WebSocket auth를 위한 질의 param에서 ***
읽기 *** ID 에서 ? *** = 쿼리 매개 변수 먼저, 다시 떨어지기 제품정보 이것은 internal.kamocrm.com에 프론트엔드를 허용한다. 웹소켓은 크로스 도메인 쿠키없이 media.kamocrm.com에 연결됩니다. Interceptor는 Redis에 직접 세션을 검증합...
독특한 소비자 retry와 결합된 stale NATS 소비자
- createNatsMessageHandler() 메소드로 메시지 핸들러 추출 - "Consumer already bound"일 때 고유한 소비자 이름과 재량 논리 추가 서버 재시작 후 오류 발생 - 동서 debug 로깅 청소
포트 443에 Traefik을 통해 웹소켓
- service.yaml: 포트 80→8443을 수정하여 pod의 실제 청취 포트와 일치 - ingressroute.yaml : 사용 계획 https + 포트 8443 백엔드 - servertransport.yaml : 백엔드 TLS cert에 insecureSkipVerify 추가 ...
NATS 연결을 위한 클러스터 내부 DNS 사용
WireGuard IPs에서 기본 NATS URL 변경 (100.64.x.x) nats.kamo.svc.cluster.local 서버. 원격 노드 (k0m1, k2m1)는 WireGuard IP에 남아 있습니다.
MediaService 배포에서 TLS 인증서 선택
- 선택 추가 : wildcard-kamocrm-com 비밀 볼륨에 true - cert-converter init 컨테이너를 업데이트하여 누락된 인증서를 안전하게 처리하십시오
JANUS API SECRET, JANUS TOKEN SECRET, JANUS SECRET, JANUS ADMIN SECRET 추가 env vars - configmap 이외에 환경 변수를 통해 비밀을 보장합니다
WebSocket의 봄 보안을 완전히 구성 - CSRF를 완전히 비활성화하고 WebSocket Handhake에 대한 세션 생성 IF REQUIRED를 활성화
/ws/** 엔드포인트에 대한 CSRF를 비활성화하고 SockJS /ws/info 405 오류를 수정하기 위해 보안 구성을 단순화
컴파일 오류가 발생하는 잘못된 메소드 호출 제거 (MediaSession, getStatusCode on ServerHttpResponse)
WebSocket 미들웨어 및 ServersTransport 추가
- WebSocket 업그레이드 헤더에 대한 Media-websocket-upgrade 미들웨어 추가 - HTTP/2 (WebSocket은 HTTP/1.1을 요구합니다)를 비활성화하는 매체 websocket-transport 추가 - Traefik ingress를 통한 적절한 WebSo...
WebSocket live message delivery - disable ChatMessageHandler subscription, enhance logging
- Disabled ChatMessageHandler subscription to chat.session.> that was consuming messages without forwarding to WebSocket - Enhanced WebSocketConfig logging to t...
WebSocket persistent connection with aggressive keepalive
Idle timeout set to 0, heartbeat 20s, disconnect delay 30s, match frontend timing
Hardcode SSL settings in ConfigMap for production
- Removed environment variable placeholders - Hardcoded port 8443, SSL enabled, keystore path - Fixes Spring Boot not resolving env vars correctly
Correct Spring Boot SSL environment variable names
- Changed SSL_ENABLED to SERVER_SSL_ENABLED - Changed SSL_KEY_STORE to SERVER_SSL_KEY_STORE - Changed SSL_KEY_STORE_PASSWORD to SERVER_SSL_KEY_STORE_PASSWORD - ...
Use SSLHostConfig API for Tomcat SSL configuration
- Use SSLHostConfig and SSLHostConfigCertificate (correct Tomcat API) - Configure certificate via **************** - Fixes compilation errors with setAttribute/...
Use setAttribute for Tomcat SSL configuration
- Changed from setKeystoreFile/Pass/Type/Alias to setAttribute - Tomcat 10+ uses setAttribute for SSL properties - Fixes compilation errors
Run MediaService on BOTH ports 80 (HTTP API) and 8443 (HTTPS WebSocket)
- Reverted service.yaml and ingressroute.yaml to use port 80 - Removed forced SERVER_PORT and SSL_ENABLED env vars - Added DualPortConfig to programmatically ad...