connectbase-client 5.12.0 → 5.12.2
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 +52 -0
- package/dist/connect-base.umd.js +5 -5
- package/dist/index.d.mts +0 -33
- package/dist/index.d.ts +0 -33
- package/dist/index.js +34 -12
- package/dist/index.mjs +34 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,58 @@
|
|
|
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.2] - 2026-08-08
|
|
7
|
+
|
|
8
|
+
### Fixed — UUID 형식 `userId` + `publicKey` 조합의 realtime 연결이 원인 불명으로 SSE 폴백되던 문제
|
|
9
|
+
|
|
10
|
+
`connect({ userId })` 를 `accessToken` 없이(즉 `publicKey` 인증으로) 호출하면서 실제 앱
|
|
11
|
+
멤버의 UUID 를 `userId` 로 넘기면, socket-server 의 presence 사칭 방지 가드가 WebSocket
|
|
12
|
+
업그레이드 전에 항상 `403` 으로 거부합니다(UUID 형식 신원은 인증된 멤버, 즉
|
|
13
|
+
`access_token` 연결에서만 허용됨). 이 조합은 재시도해도, SSE 폴백으로 전환해도 절대
|
|
14
|
+
성공하지 않는 영구적인 설정 오류인데, 기존에는 `publicKey` 가 존재한다는 이유만으로
|
|
15
|
+
`hasAuth=true` 로 판단해 SSE degraded 모드로 조용히 "성공" 처리했습니다 — `onError` 에는
|
|
16
|
+
일반적인 네트워크 에러 문구만 전달되어 실제 원인을 알 방법이 없었고, 이후
|
|
17
|
+
`subscribe()`/`send()` 가 뒤늦게 이유 없이 실패하는 것처럼 보였습니다.
|
|
18
|
+
|
|
19
|
+
이제 `connect()` 호출 시점에 `userId` 가 UUID 형식이면서 `accessToken` 이 없으면 WS
|
|
20
|
+
왕복 없이 즉시 명확한 에러로 실패합니다 — 인증된 멤버의 accessToken 을 넘기거나,
|
|
21
|
+
익명/게스트 연결에는 비-UUID 식별자를 쓰라고 안내합니다.
|
|
22
|
+
|
|
23
|
+
플랫폼 이슈 `019fe14f` 제보.
|
|
24
|
+
|
|
25
|
+
## [5.12.1] - 2026-08-08
|
|
26
|
+
|
|
27
|
+
### Fixed — OAuth 콜백 직후 `bootstrapRefreshCookie()` 가 방금 발급된 정상 토큰을 삭제하던 문제
|
|
28
|
+
|
|
29
|
+
`exchangeCodeFromCallback()` 등이 로그인 성공 직후 `setTokens()` 로 심어둔 토큰을,
|
|
30
|
+
곧바로 이어지는 `bootstrapRefreshCookie()` 의 best-effort `/v1/auth/re-issue` 호출이
|
|
31
|
+
401/403 을 받으면 `clearTokens()` 로 지워버렸습니다. 호출부는 `exchangeCodeFromCallback()`
|
|
32
|
+
의 성공 반환값만 보고 로그인됐다고 믿지만, 그 시점엔 이미 토큰이 지워진 뒤라
|
|
33
|
+
`getMe()`/`functions.call()` 등 이후 인증 호출이 전부 미인증 취급됐습니다.
|
|
34
|
+
|
|
35
|
+
이제 `bootstrapRefreshCookie()` 내부 refresh 호출은 실패해도 `clearTokens()`/
|
|
36
|
+
`onTokenExpired`/`onAuthError` 등 로그아웃성 부작용을 일으키지 않습니다 — 방금 로그인
|
|
37
|
+
응답이 이미 유효성을 보증한 토큰이므로, best-effort cookie 부트스트랩 실패가 그 토큰을
|
|
38
|
+
무효화할 근거가 되지 않습니다. 일반 401 재시도 경로(만료된 토큰의 정상 refresh)는 기존과
|
|
39
|
+
동일하게 permanent 실패 시 로그아웃 처리됩니다.
|
|
40
|
+
|
|
41
|
+
플랫폼 이슈 `019fe0e9` 제보.
|
|
42
|
+
|
|
43
|
+
### Fixed — WS 차단 시 SSE 폴백 전환이 완전히 무음이던 문제
|
|
44
|
+
|
|
45
|
+
네트워크가 WebSocket upgrade 를 막는 환경에서 `realtime.connect()` 는 (의도대로) reject
|
|
46
|
+
하지 않고 SSE degraded 모드로 조용히 전환합니다. 문제는 이 전환 자체를 알 방법이
|
|
47
|
+
`cb.realtime.transport === 'sse'` 를 직접 폴링하는 것뿐이었다는 점입니다 — 표준
|
|
48
|
+
`cb.realtime.onError(...)` 패턴을 이미 연결해 둔 앱도 pubsub(subscribe/send/setPresence)
|
|
49
|
+
이 통째로 죽은 걸 눈치채지 못했습니다.
|
|
50
|
+
|
|
51
|
+
이제 SSE 폴백으로 전환되는 순간 `onError` 핸들러로 다운그레이드 사실과 원인을
|
|
52
|
+
전달합니다(`connect()` 자체는 여전히 reject 하지 않습니다 — 기존 호출부 코드는 그대로
|
|
53
|
+
동작). `subscribe()`/`send()`/`setPresence()` 등이 SSE 모드에서 명확한 에러를 던지는
|
|
54
|
+
동작(`assertBidirectional`)은 기존 그대로 유지됩니다.
|
|
55
|
+
|
|
56
|
+
플랫폼 이슈 `019fe128` 제보.
|
|
57
|
+
|
|
6
58
|
## [5.12.0] - 2026-08-05
|
|
7
59
|
|
|
8
60
|
### Performance — `cb.endpoint.call()` 도 저지연 직결로 (5.11.0 의 누락 보완)
|