본문으로 건너뛰기

2026-07-31

clientId를 필수 옵션으로 전환 — AppKit 생성 시 dApp이 프로젝트 콘솔에서 발급받은 clientId를 반드시 전달하도록 변경했습니다. 모든 인스턴스가 프로젝트 식별값을 가지므로 콘솔이 연결·서명을 해당 프로젝트에 귀속할 수 있고, loadConfig()가 언제나 프로젝트 설정을 조회합니다. 텔레메트리는 같은 릴리스에서 사용자가 명시적으로 켜는 방식으로 바뀌었습니다. clientId가 필수여도 telemetry를 넘기지 않으면 아무것도 전송하지 않습니다.


주요 변경

  • AppKitOptions.clientId필수(clientId: string)로 변경했습니다.
  • clientId가 없거나 공백이면 AppKit 생성자가 INVALID_CONFIG AppError를 던짐 (userHash를 먼저 검사한 뒤 clientId 검사)
  • @scope-connect/appkit-reactScopeAppKitConfig.clientId필수로 변경했습니다.
  • AppKit.clientId getter 타입이 string | nullstring으로 좁혀짐
  • 텔레메트리가 opt-in으로 변경됨 — 이전에는 clientId가 있으면 자동 활성화됐다. 이제 telemetry: true 또는 옵션 객체를 명시해야 켜지고, 생략·false·{ enabled: false }는 모두 비활성이다. clientId는 프로젝트 인증에 필요하지만 텔레메트리 수집 동의를 뜻하지 않으므로 기본값을 분리했다

변경

  • loadConfig()clientId 부재로 아무 작업도 하지 않던 경로 제거 — 항상 백엔드를 조회하고, 실패하거나 응답이 비어 있으면 전체 내장 목록을 사용
  • pair()의 설정 요구사항이 relayUrl + clientId + connectBaseUrlrelayUrl으로 축소됨 (나머지는 항상 존재)
  • getBalance()clientId 부재로 INVALID_CONFIG를 던지지 않음 — 독립 리더(createBalanceReader())의 baseUrl/appKey 누락만 해당
  • genericWalletSessionclientId 부재로 자동 비활성화되던 조건 제거
  • @scope-connect/appkit-reactclientId를 AppKit에 항상 전달하도록 변경했습니다. Phantom 모바일 백엔드 암호화 세션과 일반 지갑 세션은 여전히 **명시적 connectBaseUrl**이 있을 때만 활성화됩니다.

적용 방법

  • 기존에 clientId를 이미 넘기던 dApp: clientId는 변경 없음. 다만 텔레메트리가 자동 활성화되던 동작이 사라졌으므로, 콘솔 모니터링을 계속 쓰려면 telemetry: true추가해야 한다
  • 생략하던 dApp: 콘솔에서 프로젝트 Client ID를 발급받아 new AppKit({ clientId, userHash, ... })로 전달합니다. 텔레메트리는 기본 비활성이므로 추가 조치가 필요 없습니다.
  • 데모 dApp(connect/payment)은 APPKIT_CLIENT_ID env를 항상 전달하도록 변경됨 — 이 값이 없으면 생성자가 즉시 실패

참고

  • clientId는 공개값(X-App-Key)이다. Client Secret은 서버 전용이며 브라우저 번들·URL·클라이언트 환경변수에 넣지 않는다 — 값의 노출 범위 참고