connectbase-client 3.25.1 → 3.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,56 @@
3
3
  본 SDK 의 모든 주요 변경사항을 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/) 형식으로 기록합니다.
4
4
  버전은 [Semantic Versioning](https://semver.org/lang/ko/) 을 따릅니다.
5
5
 
6
+ ## [3.27.0] - 2026-05-28
7
+
8
+ ### Fixed — `signInAsGuestMember` 의 silent session overwrite 차단 + 게스트 식별 필드 노출 (platform-issue 019e6c5d)
9
+
10
+ 같은 origin + 같은 publicKey 에서 OAuth 로그인이 활성인 채 다른 페이지/탭/콘솔에서
11
+ `cb.auth.signInAsGuestMember()` 가 호출되면, 게스트 토큰이 메인 토큰 슬롯
12
+ (`cb_auth_tokens_<hash>`) 을 silent 로 덮어써 사용자가 자동 생성된 게스트로 둔갑되던
13
+ 회귀(sisun 운영 보고, 2026-05-28). 클라이언트는 둔갑 사실을 결정적으로 식별할
14
+ 신호가 없어 닉네임 휴리스틱이나 SDK 내부 storage key 컨벤션에 결합된 비공식 우회에
15
+ 의존해야 했다.
16
+
17
+ - **`api/auth.ts` — `signInAsGuestMember(opts?)`** — 활성 비-게스트 세션이 감지되면
18
+ 새 `GuestSessionConflictError` 를 던지고 진행을 거부한다. 명시적으로 교체하려면
19
+ `{ allowOverrideExistingSession: true }` 옵션을 전달해야 한다. 활성 게스트 토큰을
20
+ 그대로 재사용하는 정상 경로는 그대로 통과한다.
21
+ - **`types/error.ts` — `GuestSessionConflictError`** 신규 export. `code = 'GUEST_SESSION_CONFLICT'`.
22
+ index 에서도 re-export.
23
+ - **`types/auth.ts` — `MemberInfoResponse`** 에 `is_guest?: boolean` + `auth_provider?: string`
24
+ 추가. `auth_provider` 값은 `'guest' | 'email' | 'username' | 'oauth_<provider>'` 컨벤션.
25
+ - **백엔드 동반 변경** — `core-server` 의 `GET /v1/public/app-members/me` 응답에 동일
26
+ 필드가 같은 의미로 추가된다 (`appmember.Edges.Identities` 우선순위 OAuth > email >
27
+ username > guest).
28
+ - **회귀 가드 테스트** — `test/signin-as-guest-session-guard.test.ts` (5 케이스).
29
+
30
+ #### Behavior change 영향
31
+
32
+ - 가드는 default-on. 활성 OAuth/email 세션 위에서 옵션 없이 `signInAsGuestMember()`
33
+ 를 호출하던 코드는 이제 throw 된다. RLS 우회용 cron 처럼 의도적으로 게스트를
34
+ 강제 갱신해야 하는 경우 `{ allowOverrideExistingSession: true }` 를 명시할 것.
35
+ - 응답 필드 추가만 있는 변경이므로 `getMe()` 호출자는 영향 없음. `is_guest` 를
36
+ 활용하면 SDK 내부 storage key 컨벤션에 결합된 비공식 휴리스틱을 제거할 수 있다.
37
+
38
+ ## [3.26.0] - 2026-05-28
39
+
40
+ ### Security — LLM provider API key 클라이언트 하드코딩 금지 명시화
41
+
42
+ 2026-05-28 vLLM API key 강화 작업 중 다수 정적 자산에 raw provider URL + API key 가
43
+ 하드코딩된 안티 패턴이 발견되어, SDK 표면에서 보안 정책을 명시한다. 동작 변경은 없다.
44
+
45
+ - **`api/ai.ts`** — `AIAPI` 클래스 / `chat()` 메서드 JSDoc 에 보안 경고 + 안티 패턴/
46
+ 베스트프랙티스 예시 추가. 클라이언트는 user public/secret key 만 사용하고, LLM
47
+ provider API key 는 콘솔 `AppAIConfig` 에 암호화 저장(서버 측만 복호화). `cb.ai.chat`
48
+ / `cb.ai.chatStream` 만 호출하면 서버 프록시가 tunnel `proxy_token` 자동 주입.
49
+ raw provider URL(`api.openai.com`, `tunnel.connectbase.world/<id>` 등) 직접 fetch 금지.
50
+ - **`docs/18-sdk-ai.md`** — "🔒 보안 정책 (필수)" 섹션 신설(안티 패턴 / 베스트프랙티스 /
51
+ 마이그레이션 절차). 영향 받은 앱은 cross_app_issue 로 개별 마이그레이션 알림 예정.
52
+
53
+ 본 버전은 런타임 동작 변경이 없는 문서/주석 강화이지만, 안티 패턴 차단을 SDK 표면에서
54
+ 명시화하는 정책 변경이므로 minor 로 올린다.
55
+
6
56
  ## [3.25.1] - 2026-05-27
7
57
 
8
58
  ### Fixed — 3.25.0 회귀 복구 + heartbeat 헬퍼 정리