Add expandable softphone panel to ChatBox
- Add PhoneInTalk icon button to ChatBox header for softphone toggle - Create comprehensive SoftphonePanel component with full UI - Implement dialpad with 0-9, ...
Remove connected check and add debug logging for STOMP activation
STOMP client was not activating because connected check was preventing it. Added debug logs to diagnose.
Activate STOMP client only after SockJS opens
Critical bug fix: STOMP client was being activated before SockJS opened, causing immediate disconnect. Now waits for SockJS onopen event before activating STOMP...
Enable SockJS fallback transports for WebSocket connection
Allow xhr-streaming and xhr-polling as fallback if WebSocket upgrade fails.
Enhance ChatBox with dynamic color system and increased height
- Increase message viewing area by 33% (DOCKED_HEIGHT: 360 -> 480) - Create ChatBoxStyles.tsx with dynamic CSS variable-based color system - Apply primary color...
전문적인 광택을 가진 ChatBox 디자인을 현대화하십시오
- 미묘한 회색 gradients를 가진 청결한 백색 배경을 실시하십시오 - 사용자 정의 scrollbar 스타일링을 기본 색상 계획과 통합 - gradient 배경과 비대칭 경계를 가진 메시지 거품을 강화하십시오 - 알약 모양 디자인과 초점 반지 효력을 가진 입력 분야를 현대화하십시오...
UseChatWebSocket에서 invalid 'active' 속성 체크 제거
@stomp/stompjs의 클라이언트 유형은 'active' 속성이 없습니다. client.activate() 이후 잘못된 체크를 제거하면 클라이언트 생성 후 즉시 호출됩니다.
STOMP 클라이언트 활성화하기 전에 SockJS를 엽니 다
- SockJS 연결 이전의 STOMP 클라이언트가 활성화 된 레이스 상태를 수정 - Client.activate()를 SockJS onopen 콜백으로 이동 - 실시간 메시지를 방지하는 즉시 연결 폐쇄 문제 수정
모든 WebRTC API 요청을 포트 8443
- media.{domain}:8443를 사용하는 모든 WebRTC API 경로 업데이트 - WebRTC 엔드포인트에 대한 Traefik을 사용하지 않고 - 미디어 API 및 WebSocket 구성 일치
8443 포트에 모든 MediaService 요청을 경로 (Tarter Traefik)
- 미디어를 사용하는 모든 미디어 API 경로 업데이트.{domain}:8443 - MediaService를 위한 Traefik 사용 없음 - API 및 WebSocket 모두 포트 8443에 직접 이동 - 내부.{domain}는 Traefik을 통해 계속됩니다
포트에 연결 8443 (외부) NodePort 30843
- 라우터는 외부 8443에서 k1m1 NodePort 30843를 전달합니다. - 브라우저 사용 media.kamocrm.com:8443 - 내부 NodePort는 30843 (Kubernetes 유효한 범위)
WebSocket에 대한 MediaService 포트 8443에 연결
- media.kamocrm.com을 사용하는 웹 소켓 연결 업데이트 : 8443 - WebSocket 전용 트래픽을 우회 - MediaService에 직접 HTTPS/HTTP1.1 연결 사용 - API 호출은 Traefik을 통해 표준 경로를 계속 사용
HTTP/2 호환성을 위한 WebSocket-only 수송 제한 제거
- 브라우저 WebSocket API는 HTTP/2 (RFC 8441 구현되지 않음) 지원하지 않습니다. - Native WebSocket은 HTTP/1.1을 요구합니다. HTTP/2에 실패한 업그레이드 - SockJS 자동 선택 운송 (xhr-streaming/xhr-polling w...
WebSocket 전용 운송 (XHR 오염 가능)
- SockJS는 [websocket, xhr-streaming, xhr-polling]에서 [websocket]에 수송합니다 - XHR polling에 fallback 제거 - 힘 순수한 WebSocket 연결 - WebSocket이 분해 대신 작동하지 않는 경우 실패
미디어에 WebSocket을 직접 연결하십시오.kamocrm.com
- 원래 접근으로 거꾸로: media.* subdomain에 직접 연결 - 불필요한 동일-origin 복잡성 제거 - 미들웨어에서 제거 /ws bypass (필요) - 내부 IngressRoute에서 제거 /ws 여정 - MediaService CORS는 이미 모든 원산지를 허용합니다....
Kamowsmedia-service에서 명시된 네임스페이스 참조 제거
- 두 서비스는 같은 네임스페이스(kamo)에 있습니다. - Explicit 네임스페이스 참조 필요 - 잠재적인 cross-namespace 문제점을 피하십시오
제거 /ws 다음에서 다시 쓰기. config (Trefik에 의해 처리)
- 다음 제거.js /ws 경로에 대한 재쓰기 - WebSocket routing은 Traefik IngressRoute 레벨에서 처리했습니다. - Traefik 경로 내부.kamocrm.com/ws -> 미디어서비스
Traefik을 통해 MediaService에 직접 경로 /ws 요청
- IngressRoute의 /ws 경로에 대한 전용 경로 추가 - 내부 노선.kamocrm.com/ws -> 미디어서비스 - 같은 ServersTransport를 WebSocket 지원용 미디어 루트로 사용합니다. - WebSocket 연결을 위한 Next.js를 우회합니다 (Next...
Auth 리디렉션없이 /ws WebSocket 엔드포인트 허용
- midware bypass에 /ws 경로 추가 - SockJS는 리디렉션 없이 /ws/info에 연결해야 합니다. - WebSocket 연결은 여전히 *** 쿠키가 있습니다. - WebSocket 연결 타임아웃 문제 수정
WebSocket 연결 변경
- media.kamocrm.com에서 동일한 기원으로 변경 (internal.kamocrm.com) - cross-origin WebSocket 연결 문제 방지 - Next.js가 MediaService에 proxy /ws에 규칙을 다시 씁니다. - 브라우저는 내부에 연결됩니다.kam...
WebRTC 엔드포인트에 대한 API 프록시 경로 추가
- MediaService에 /api/webrtc/config 프록시 추가 - Janus 인증에 대한 /api/webrtc/token 프록시 추가 - 추가 /api/webrtc/call/initiate, 대답, 엔드 프록시 - /api/media 프록시와 같은 패턴을 따릅니다. - ka...
GetDisplayMedia에서 잘못된 코드 속성 제거
- 간단한 영상 사용: 화면 공유를 위해 true - 빌드가 성공해야 함
빌드 오류 해결 - CallEnd로 PhoneOff 교체
- PhoneOff 아이콘은 @mui/icons-material에 존재하지 않습니다. - 올바른 MUI 아이콘 인 CallEnd 사용 - 사용하지 않는 중복 파일 제거 (ChatBoxWithWebRTC, VideoCallView, useJanusWebRTC) - 빌드가 성공해야 함
Signaling과 함께하는 피어 투 피어 웹RTC 완료
- Full Signaling 지원이 포함된 useWebRTC Hook 추가 - 통합 WebSocket 신호 (오프어, 답변, 얼음 후보자) - 답변/드코더 버튼으로 들어오는 콜 알림 추가 - call UI의 동적 높이로 ChatBox 업데이트 - UseChatWebSocket의 STO...
오디오 / 비디오 통화에 대한 Janus WebRTC 통합 추가
- WebRTC 통화 관리용 useJanusWebRTC Hook 추가 - In-chat 비디오 디스플레이에 대한 VideoCallPanel 구성품 추가 - ChatBox와 원활한 통화 경험 통합 - 오디오 통화, 비디오 통화 및 스크린 공유 지원 - Proper 종횡비 (16 : 9) ...
SockJS에서 WebSocket 운송 복원
- websocket 수송을 사용하여 재생 ( polling 아닙니다) - WebSockets는 표준이며 제대로 작동해야 합니다. - 실제 WebSocket 연결 문제 해결에 초점
SockJS에서 WebSocket 전송을 건너 HTTP/2 문제를 피하기 위해
- 웹소켓 대신 xhr-streaming 및 xhr-polling 수송을 사용합니다. - 이러한 전송은 WebSocket 향상을 필요로하지 않고 HTTP / 1.1 및 HTTP / 2와 함께 작동합니다. - HTTP / 2 확장 CONNECT 문제 및 업그레이드 헤더 전달 문제를 방지 ...
SockJS는 HTTP/2 WebSocket 향상 문제를 처리하기 위하여 수송을 형성합니다
- WebSocket을 선호하는 SockJS 수송 순서를, 그 후에 xhr-streaming/xhr-polling에 fallback 구성하십시오 - HTTP / 2 WebSocket 업그레이드가 실패할 수 있으므로 SockJS는 HTTP / 1.1 호환 전송으로 자동으로 삭제됩니다. -...
다음의 메시지 경로가 인식됩니다.js
- 경로를 확인하기 위해 로그인이 추가되었습니다. - Route 파일이 존재하고 구조는 Next.js 15에 대한 정확합니다
STOMP의 non-existent 'active' 속성 제거 고객 로그인
- 주식 클라이언트는 'active' 속성이 없습니다. - 올바른 상태 인 'connected' 속성 만 확인
STOMP 클라이언트에서 unsupported onWebSocketError 핸들러 제거
- onWebSocketError는 ClientOptions에서 유효한 속성이 아닙니다. - SockJS 오류 핸들러 (onerror, onclose) 이미 오류 처리 제공
종합 WebSocket 오류 처리 및 로깅 추가
- SockJS 오류 핸들러 추가 (오픈, onerror, onclose) 연결 실패 - 연결 시간 검출 추가 (10 초) 침묵 장애 식별 -에 추가WebSocketError handler 에 STOMP 클라이언트 - WebSocket 연결이 설치되지 않는 이유를 진단하는 향상된 로깅 ...
Incorrect 제거 HTTPS 에이전트 운동
- 인증서 유효성을 우회한 변경 - 인증서는 자동 인증 서비스(Let's Encrypt)에 의해 발급되며, 자기 서명되지 않습니다. - 인증서 유효성 검사가 실패한 이유를 조사해야합니다
Self-signed 인증서를 받아 에이전트와 HTTPS를 사용
- 항상 HTTPS를 사용한다 (HTTP) - rejectUnauthorized를 가진 추가된 HTTPS 대리인: 자기 위탁된 certs를 위해 거짓 - 이것은 서버 측 Next.js 경로가 https://media.kamocrm.com에 연결하도록 허용합니다. - 모든 미디어 API ...
MediaService의 쿠버네티스 서비스 이름을 사용하여 SSL cert 문제를 피하기 위해
- Server-side Next.js 경로는 이제 사용할 수 있습니다. *********** - https://media.kamocrm.com에 접속할 때 자체 서명된 인증서 오류를 피합니다. - 클라이언트 측 요청은 여전히 외부 https://media.{domain}를 사용합니다....
구문 /api/security/media/ 경로를 제거
- 오래된 경로는 더 이상 미디어 엔드포인트가없는 APIService로 전달되었습니다. - 모든 미디어 요청은 MediaService에 직접 /api/media/경로를 통해 이동해야 합니다. - 제거: *********** - 제거: *********** - 제거: ***********...
MediaService 세션 생성에 대한 자세한 오류 로깅 추가
- 로그인 MediaService URL 호출 - 로그 응답 헤더 - 전체 오류 정보와 향상된 오류 로그 - 디버깅에 대한 오류 응답에 URL 포함
다른 Next.js 프로젝트와 일치하기 위해 action/checkout@v4로 변환
- 걸출한 복잡한 수동 체크 아웃 논리 제거 - kamo-login 및 kamo-register와 같은 표준 동작/checkout@v4 사용 - Docker 빌드 컨텍스트를 단순화합니다. env var 대신 - k8s에 대한 작업 배치 체크 아웃 추가
걸려지는 것을 막기 위하여 timeout를 가진 얕은 clone를 사용하십시오
- 사용 - 심도 1 빠른 복제 - 타임아웃 추가(120s for shallow, 300s for full) - 얕은가 실패한 경우에 가득 찬 clone에 Fallback - 얕은 클론 후 필요한 경우 Fetch 특정 커밋
Git clone의 유효 디렉토리를 변경하여 작업 디렉토리 오류를 피하십시오
- /tmp로 변경하거나 / 제거하기 전에 작업 공간 - 존재하지만, git repo는 없다. - 현재 작업 디렉토리의 오류를 읽을 수 없습니다
Hardcoded 저장소 URL 및 설정 GITHUB WORKSPACE env var
- DNS/hostname 해상도 문제를 피하기 위해 직접 저장소 URL을 사용하십시오. - 이후 단계에 대한 GITHUB WORKSPACE 환경 변수 설정 - Docker 빌드 컨텍스트에서 env var 사용
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...
Add direct MediaService routes via media.{domain} for WebSocket support
- Create new /api/media/* routes that forward directly to media.{domain} - These routes bypass APIService to allow secure WebSocket connections - MediaService r...
