← 목록
기타 2026-05-28 7KB 읽기 8분

3 서비스 완전 통합 — 메신저 + crowny.org + tiomta.com

개요

크라우니메신저 v3를 crowny.orgtiomta.com 안에 자연스럽게 임베드. 두 사이트 GUI에 완전히 녹아드는 폰트/사이즈/비율. 세 서비스 ID/지갑 단일 관리.

61/61 한선씨 컴파일, E2E 15/15 통과, 6개 라이브 진입점 HTTP 200.

사용자 4대 요구 매핑

요구결과
crowny.org GUI 완전 통일메신저 정통 토큰 = crowny.org/style.css 정본. 폰트 Noto Sans CJK KR, 모바일 14px base. 임베드 모드 부모 톤 상속
crowny.org 안에서 메신저/Users/ef/crowny-org/index.html 우하단 💬 플로팅 버튼 → 슬라이드 패널 → iframe(?embed=crowny)
tiomta.com 안에서 메신저/Users/ef/crowny-tiomta/public/index.html 동일 패턴 (?embed=tiomta)
세 서비스 ID/지갑 통합crowny-session-sdk.js + 통합지갑위젯.js + 통합세션.한선 정본. localStorage + 쿠키 + postMessage broadcast

신규 산출물

1. 메신저 임베드 모드 (임베드.한선 173줄 + index.html)

  • URL ?embed=crowny|tiomta|minimal 진입 감지
  • IS_EMBED 시 body class embed-mode, embed-{name} 추가
  • PWA 설치 배너/메신저 자체 헤더 숨김
  • postMessage 프로토콜:
  • 부모 → 자식: auth theme navigate
  • 자식 → 부모: ready auth_request unread resize tx_completed
  • origin 화이트리스트: crowny.org, tiomta.com, localhost:9779/9878/9752
  • 한선씨 정본: 허용오리진(), 오리진허용확인(), 메시지검증(), _자가검증() 5건+ 어설트
  • 2. 외부 위젯 (외부위젯.한선 205줄 + 두 사이트 통합)

    • crowny.org/index.html + 150줄: 플로팅 💬 버튼 (#talk-widget-btn) + 슬라이드 패널 (#talk-widget-panel) + iframe(embed=crowny)
    • tiomta.com/index.html + 320줄 (<body> 직전): 동일 패턴 (embed=tiomta)
    • 디자인 토큰: crowny var(--accent) var(--bg-card) var(--border) 만 사용 (하드코딩 0)
    • 모바일 (≤768px): 패널 풀스크린, 폰트 14px base
    • iframe lazy load (첫 클릭 시 src 설정)
    • 부모 → iframe postMessage로 토큰 자동 전달
    • 한선씨 정본 함수: 위젯CSS생성(), 위젯HTML생성(), 위젯JS생성(), _자가검증()

    3. 통합 세션 SDK (crowny-session-sdk.js 22KB + 통합지갑위젯.js 11KB + 통합세션.한선 248줄)

    SDK API (window.CrownySession):
    • getId() getToken() — localStorage crowny_session_v1 (만료 자동)
    • login(crowny_id, password) — CrownyAuth :9401 /api/login
    • loginViaMessenger() — 메신저 :9766 /sso/login 폴백
    • setToken(id, token) — tiomta 등 외부 토큰 주입
    • bridgeFirebase(firebaseUser) — Firebase UID → CRN-XXXXXXXX 매핑
    • logout() — 3 사이트 동시 (BroadcastChannel)
    • getBalance() — 메신저 → bank 폴백
    • send(to, asset, amount, memo) — 송금
    • on(event, fn)login logout balance_change
    • enableBroadcast() — BroadcastChannel + postMessage 동기화
    저장:
    • localStorage crowny_session_v1 = {crowny_id, token, expires}
    • 쿠키 crowny_token 도메인 .crowny.org (3 서브도메인 자동 공유)
    지갑 위젯 (window.CrownyWallet):
    • 우상단 배지: [👑 CRN-XXXX] [💰 1,250 FONE ▼]
    • 30초 자동 갱신
    • 미니 모달: FONE/CRN/CRM 잔액 + 송금 폼
    ws-server-v3.js 정적 라우트:
    • /crowny-session-sdk.js (application/javascript)
    • /crowny-wallet-widget.js (ASCII alias) + /통합지갑위젯.js (URL 디코딩)
    • Access-Control-Allow-Origin: *
    한선씨 정본 11 함수: 허용오리진목록, 세션저장JS생성, 세션조회JS생성, 세션삭제JS생성, 브로드캐스트JS생성, 통합지갑위젯HTML생성, 통합지갑위젯JS생성, Firebase브릿지JS생성, tiomta토큰주입JS생성, 임베드토큰수신JS생성, _자가검증

    3 사이트 인증 흐름

    ┌──── crowny.org (Firebase Auth) ────┐
    │  Firebase로그인 → bridgeFirebase()  │
    │  → CrownyAuth :9401 signup/login    │
    │  → 토큰 localStorage 저장           │
    └──── 동기화 ────────────────────────┘
            ↓ BroadcastChannel
    ┌──── tiomta.com (CrownyAuth) ──────┐
    │  /api/auth/login (이미 사용 중)    │
    │  → setToken(id, token)             │
    │  → 동일 토큰 공유                  │
    └──── 동기화 ────────────────────────┘
            ↓ BroadcastChannel
    ┌──── talk.crowny.org (메신저) ──────┐
    │  임베드 시 부모 → postMessage(auth) │
    │  비-임베드: CrownySession.login()   │
    │  → 메신저 :9766 /sso/login          │
    └────────────────────────────────────┘
    

    검증 결과

    항목결과
    한선씨 컴파일61/61 (100%)
    E2E15/15 통과 (디자인/통합 후에도)
    임베드 모드?embed=crowny ?embed=tiomta HTTP 200, embed-mode 마커 4건
    SDK 정적 서빙/crowny-session-sdk.js HTTP 200, 22KB
    위젯 정적 서빙/crowny-wallet-widget.js HTTP 200, 11KB
    tiomta 위젯talk-widget 35건, crowny-session-sdk 1건
    crowny-org 위젯talk-widget 36건, 정적 파일 (서버 미가동)
    6 라이브 진입점메신저(2)+tiomta+CrownyAuth+bank+ecosystem 전부 HTTP 200

    잔여 이슈

    1. crowny.org 라이브 서버 미가동node server-premium.js 또는 운영 게이트웨이 통해 띄우면 즉시 작동
    2. Firebase ↔ CrownyAuth UID 매핑bridgeFirebase()에서 CrownyAuth /api/auth/signup 미지원 시 SSO-LOCAL 폴백
    3. tiomta server.js — 로그인 응답에 crowny_id 필드 추가 권장 (현재 /api/me 폴백)
    4. 에이전트 B가 tiomta index-light.html에 위젯 추가했으나 실 라이브는 index.html — 직접 수정 후 라이브 반영

    학습DB 등록

    • 메신저임베드모드 (URL 파라미터 진입 + postMessage 프로토콜)
    • 외부서비스위젯iframe (플로팅 버튼 + 슬라이드 패널)
    • 통합세션SDK (3 사이트 단일 ID 동기화)
    • 도메인쿠키공유 (.crowny.org)

    연동

    • [[project-crowny-messenger]] — 메신저 v3 정본
    • [[reference-ecosystem-crowny]] — ecosystem 모듈 등록
    • [[project-tiomta-brand]] — tiomta 진입
    • [[feedback-agent-directive-style]] — 차분한 지시 + 셀코어 베이스
    • [[feedback-subagent-permissions]] — 프로젝트별 settings.json 권한 선행