크라우니메신저 v3 — 로컬 실동작 검증·완성
개요
게이트웨이를 우회하고 localhost 직통으로 크라우니메신저 v3의 핵심 실동작 (사람 초대 / 음성·영상 통화 / 4통화 송금 / 실시간 브리지)을 적대적 E2E로 검증. 서버 코드 분석 → raw WebSocket 클라이언트로 실테스트 → 발견한 갭 ADDITIVE 수정.위치: /Users/ef/CrownyOS/apps/메신저/v3/
서버: 서버/ws-server-v3.js (실행본), 서버/signaling.js (시그널링 SSOT)
한선씨 동반: 서버/ws-server-v3.한선, 서버/signaling.한선, 지갑연동.한선
3포트 LISTEN
- :9767 WS — 실 WebSocket 핸들러 (LISTEN ✅)
- :9766 HTTP API —
/status200,/api/broadcast200 (✅) - :9752 SPA —
GET /HTTP 200, 216KB (✅) - 의존: bank :9400 (crownyc/한선씨 VM, UP) —
/health200,/api/wallet/by-uid응답 정상
실테스트 결과 (raw WS 클라이언트, /tmp/msg-e2e-test.js 등)
1. 통화 시그널링 (signaling.js setupSignaling 배선)
- CALL_OFFER alice→bob 중계 + iceServers 전달 — PASS
- CALL_STATE ringing (발신자 통지) — PASS
- CALL_ANSWER bob→alice 중계 — PASS
- CALL_ICE candidate 중계 — PASS
- CALL_END 종료 + duration — PASS
- CALL_BUSY (수신자 실통화중) — PASS (전용 3자 테스트 msg-busy-test.js)
- CALL_GROUP 생성 + CALL_GROUP_JOIN 참여·알림(count=2) — PASS (msg-group-call.js)
2. 4통화 송금 (handleWalletSend, LIMITS/ASSET_NORM)
3. 실시간 브리지 (익명 SUBSCRIBE + /api/broadcast → ROOM_MSG)
- 익명 SUBSCRIBE 허용 (AUTH 없이 conv room 구독) — PASS
- /api/broadcast POST 200 + delivered=1 — PASS
- ROOM_MSG E2E 수신 (페이로드 그대로) — PASS
4. 사람 초대
- INVITE_CREATE → INVITE_CREATED + invite code 발급 — PASS
수정 (ADDITIVE)
갭:handleWalletRequest(WALLET_REQUEST)가 자산 정규화를 하지 않아
클라가 표시코드(FONE/CRD 대문자)로 송금 요청 시 잘못된 asset 코드로 저장됨.
(handleWalletSend 은 ASSET_NORM 적용, handleWalletRequest 만 누락 — 불일치)서버/ws-server-v3.js handleWalletRequest 에 ASSET_NORM 추가 (FONE→fnc 정규화)지갑연동.한선 에 자산정규화(asset) 함수 추가 + 송금요청생성에서 적용 (JS와 1:1 동기화)자산정규화, 송금요청생성_정규화자산3레이어 트리플체크
- signaling.한선 — 컴파일 PASS (함수 17, 11862 큐브)
- ws-server-v3.한선 — 컴파일 PASS (함수 40, 26510 큐브)
- 지갑연동.한선 — 컴파일 PASS (함수 47, 28979 큐브)
원격노드/사용자 사용법
- 로컬뷰: lbv 로 talk.crowny.org → 127.0.0.1:9752 SPA
- WS 클라이언트:
ws://127.0.0.1:9767에 AUTH({user_id, crowny_id}) → AUTH_OK 후
- AI 브리지: 익명 SUBSCRIBE({room}) →
POST /api/broadcast {room,payload}→ ROOM_MSG 수신 - 기동:
bash /Users/ef/CrownyOS/apps/메신저/v3/start-v3.sh {start|status|restart}
남은 갭 (코드 외 / 프로비저닝)
- 뱅크 실 잔액 이동(bank_linked=true) 경로는 WALLET_LINK 로 bank_token + 등록 지갑이
- STUN/TURN: 기본 stun:stun.crowny.org:3478, 자체 미배포 구간은 STUN_FALLBACK=1 시 Google.
- AUTH: crowny_id 단독 전달 시 strict isCrownyId(
CRN-XXXXXXXX) 미매칭이면 user_id 없으면
관련 파일
- /Users/ef/CrownyOS/apps/메신저/v3/서버/ws-server-v3.js (handleWalletRequest 수정)
- /Users/ef/CrownyOS/apps/메신저/v3/서버/signaling.js
- /Users/ef/CrownyOS/apps/메신저/v3/지갑연동.한선 (자산정규화 추가)
- /tmp/msg-e2e-test.js, /tmp/msg-busy-test.js, /tmp/msg-group-call.js, /tmp/req-test.js (테스트)