connectbase-client 5.11.0 → 5.12.1
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 +68 -0
- package/dist/connect-base.umd.js +5 -5
- package/dist/index.d.mts +13 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +65 -15
- package/dist/index.mjs +65 -15
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,74 @@
|
|
|
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
|
+
## [5.12.1] - 2026-08-08
|
|
7
|
+
|
|
8
|
+
### Fixed — OAuth 콜백 직후 `bootstrapRefreshCookie()` 가 방금 발급된 정상 토큰을 삭제하던 문제
|
|
9
|
+
|
|
10
|
+
`exchangeCodeFromCallback()` 등이 로그인 성공 직후 `setTokens()` 로 심어둔 토큰을,
|
|
11
|
+
곧바로 이어지는 `bootstrapRefreshCookie()` 의 best-effort `/v1/auth/re-issue` 호출이
|
|
12
|
+
401/403 을 받으면 `clearTokens()` 로 지워버렸습니다. 호출부는 `exchangeCodeFromCallback()`
|
|
13
|
+
의 성공 반환값만 보고 로그인됐다고 믿지만, 그 시점엔 이미 토큰이 지워진 뒤라
|
|
14
|
+
`getMe()`/`functions.call()` 등 이후 인증 호출이 전부 미인증 취급됐습니다.
|
|
15
|
+
|
|
16
|
+
이제 `bootstrapRefreshCookie()` 내부 refresh 호출은 실패해도 `clearTokens()`/
|
|
17
|
+
`onTokenExpired`/`onAuthError` 등 로그아웃성 부작용을 일으키지 않습니다 — 방금 로그인
|
|
18
|
+
응답이 이미 유효성을 보증한 토큰이므로, best-effort cookie 부트스트랩 실패가 그 토큰을
|
|
19
|
+
무효화할 근거가 되지 않습니다. 일반 401 재시도 경로(만료된 토큰의 정상 refresh)는 기존과
|
|
20
|
+
동일하게 permanent 실패 시 로그아웃 처리됩니다.
|
|
21
|
+
|
|
22
|
+
플랫폼 이슈 `019fe0e9` 제보.
|
|
23
|
+
|
|
24
|
+
### Fixed — WS 차단 시 SSE 폴백 전환이 완전히 무음이던 문제
|
|
25
|
+
|
|
26
|
+
네트워크가 WebSocket upgrade 를 막는 환경에서 `realtime.connect()` 는 (의도대로) reject
|
|
27
|
+
하지 않고 SSE degraded 모드로 조용히 전환합니다. 문제는 이 전환 자체를 알 방법이
|
|
28
|
+
`cb.realtime.transport === 'sse'` 를 직접 폴링하는 것뿐이었다는 점입니다 — 표준
|
|
29
|
+
`cb.realtime.onError(...)` 패턴을 이미 연결해 둔 앱도 pubsub(subscribe/send/setPresence)
|
|
30
|
+
이 통째로 죽은 걸 눈치채지 못했습니다.
|
|
31
|
+
|
|
32
|
+
이제 SSE 폴백으로 전환되는 순간 `onError` 핸들러로 다운그레이드 사실과 원인을
|
|
33
|
+
전달합니다(`connect()` 자체는 여전히 reject 하지 않습니다 — 기존 호출부 코드는 그대로
|
|
34
|
+
동작). `subscribe()`/`send()`/`setPresence()` 등이 SSE 모드에서 명확한 에러를 던지는
|
|
35
|
+
동작(`assertBidirectional`)은 기존 그대로 유지됩니다.
|
|
36
|
+
|
|
37
|
+
플랫폼 이슈 `019fe128` 제보.
|
|
38
|
+
|
|
39
|
+
## [5.12.0] - 2026-08-05
|
|
40
|
+
|
|
41
|
+
### Performance — `cb.endpoint.call()` 도 저지연 직결로 (5.11.0 의 누락 보완)
|
|
42
|
+
|
|
43
|
+
5.11.0 은 `/v1/public/*` 데이터 평면만 옮겼습니다. **정작 지연에 가장 민감한
|
|
44
|
+
`cb.endpoint.call()`(`/v1/proxy/*`)이 빠져 있었습니다** — 사용자 PC 의 모델 서버로
|
|
45
|
+
오디오·이미지를 올리는 그 경로가, 왕복 지연 위에서 TCP slow-start 를 타 가장 크게
|
|
46
|
+
손해를 보고 있었는데도 그대로 Cloudflare LAX 를 타고 있었습니다.
|
|
47
|
+
|
|
48
|
+
실측 (서울, 187KB 업로드):
|
|
49
|
+
|
|
50
|
+
| | 5.11.0 이하 | 5.12.0 |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| `cb.endpoint.call()` 187KB POST 왕복 | 1.24~1.74s | **0.13s** |
|
|
53
|
+
|
|
54
|
+
음성 인식처럼 오디오를 올려 결과를 받는 흐름이 회당 1초 이상 줄어듭니다.
|
|
55
|
+
5.11.0 과 마찬가지로 **설정할 것도, 코드를 고칠 것도 없습니다.**
|
|
56
|
+
|
|
57
|
+
- `cb.endpoint.call()` 은 dumb pipe 라 SDK 인증 헤더를 주입하지 않습니다 — 호출자가
|
|
58
|
+
자기 모델 서버용으로 설정한 `Authorization` 이 그대로 유지됩니다(기존과 동일).
|
|
59
|
+
- `cb.endpoint.url()` 은 **바뀌지 않습니다.** Service Worker·백엔드 워커·로깅으로
|
|
60
|
+
넘어가는 값이라 세션 중에 바뀌면 안 되고, 받는 쪽이 실패해도 폴백할 방법이 없습니다.
|
|
61
|
+
- WebSocket(`cb.endpoint.connectWS()`)도 바뀌지 않습니다 — 티켓 발급 호스트와 연결
|
|
62
|
+
호스트를 갈라놓지 않기 위해서입니다.
|
|
63
|
+
|
|
64
|
+
### Fixed — 프록시 요청에 쿠키가 실릴 수 있던 경로 차단
|
|
65
|
+
|
|
66
|
+
`/v1/proxy/*` 의 `credentials` 모드를 `'omit'` 으로 명시했습니다. 이 경로의 요청 헤더는
|
|
67
|
+
**사용자 PC 의 모델 서버로 그대로 전달**되므로, 부모 도메인(`.connectbase.world`)의 콘솔
|
|
68
|
+
세션 쿠키가 실리면 남의 서버로 새어 나갑니다. 실제 유출은 없었지만(브라우저 기본
|
|
69
|
+
`same-origin` 이 cross-origin 요청에서 쿠키를 막고 있었습니다) 규칙에 의존하지 않고
|
|
70
|
+
명시적으로 잠갔습니다.
|
|
71
|
+
|
|
72
|
+
플랫폼 이슈 `019fcc2d` 후속.
|
|
73
|
+
|
|
6
74
|
## [5.11.0] - 2026-08-05
|
|
7
75
|
|
|
8
76
|
### Performance — 한국에서 SDK 호출이 585ms → 45ms
|