2026-07-31
clientId를 필수 옵션으로 전환 — AppKit 생성 시 dApp이 프로젝트 콘솔에서 발급받은 clientId를 반드시 전달하도록 변경했습니다. 모든 인스턴스가 프로젝트 식별값을 가지므로 콘솔이 연결·서명을 해당 프로젝트에 귀속할 수 있고, loadConfig()가 언제나 프로젝트 설정을 조회합니다. 텔레메트리는 같은 릴리스에서 사용자가 명시적으로 켜는 방식으로 바뀌었습니다. clientId가 필수여도 telemetry를 넘기지 않으면 아무것도 전송하지 않습니다.
주요 변경
AppKitOptions.clientId를 필수(clientId: string)로 변경했습니다.clientId가 없거나 공백이면 AppKit 생성자가INVALID_CONFIGAppError를 던짐 (userHash를 먼저 검사한 뒤clientId검사)@scope-connect/appkit-react의ScopeAppKitConfig.clientId도 필수로 변경했습니다.AppKit.clientIdgetter 타입이string | null→string으로 좁혀짐- 텔레메트리가 opt-in으로 변경됨 — 이전에는
clientId가 있으면 자동 활성화됐다. 이제telemetry: true또는 옵션 객체를 명시해야 켜지고, 생략·false·{ enabled: false }는 모두 비활성이다.clientId는 프로젝트 인증에 필요하지만 텔레메트리 수집 동의를 뜻하지 않으므로 기본값을 분리했다
변경
loadConfig()가clientId부재로 아무 작업도 하지 않던 경로 제거 — 항상 백엔드를 조회하고, 실패하거나 응답이 비어 있으면 전체 내장 목록을 사용pair()의 설정 요구사항이relayUrl+clientId+connectBaseUrl→relayUrl만으로 축소됨 (나머지는 항상 존재)getBalance()는clientId부재로INVALID_CONFIG를 던지지 않음 — 독립 리더(createBalanceReader())의baseUrl/appKey누락만 해당genericWalletSession이clientId부재로 자동 비활성화되던 조건 제거@scope-connect/appkit-react는clientId를 AppKit에 항상 전달하도록 변경했습니다. Phantom 모바일 백엔드 암호화 세션과 일반 지갑 세션은 여전히 **명시적connectBaseUrl**이 있을 때만 활성화됩니다.
적용 방법
- 기존에
clientId를 이미 넘기던 dApp:clientId는 변경 없음. 다만 텔레메트리가 자동 활성화되던 동작이 사라졌으므로, 콘솔 모니터링을 계속 쓰려면telemetry: true를 추가해야 한다 - 생략하던 dApp: 콘솔에서 프로젝트 Client ID를 발급받아
new AppKit({ clientId, userHash, ... })로 전달합니다. 텔레메트리는 기본 비활성이므로 추가 조치가 필요 없습니다. - 데모 dApp(connect/payment)은
APPKIT_CLIENT_IDenv를 항상 전달하도록 변경됨 — 이 값이 없으면 생성자가 즉시 실패
참고
clientId는 공개값(X-App-Key)이다. Client Secret은 서버 전용이며 브라우저 번들·URL·클라이언트 환경변수에 넣지 않는다 — 값의 노출 범위 참고