connectbase-client 6.13.0 → 6.14.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 +27 -0
- package/dist/cli.js +1 -1
- package/dist/connect-base.umd.js +5 -5
- package/dist/index.d.mts +50 -2
- package/dist/index.d.ts +50 -2
- package/dist/index.js +325 -49
- package/dist/index.mjs +324 -49
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,33 @@
|
|
|
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
|
+
## [6.14.0] - 2026-11-11
|
|
7
|
+
|
|
8
|
+
### Security — WebSocket 연결 URL 에 자격증명을 싣지 않는다 (1회용 티켓)
|
|
9
|
+
|
|
10
|
+
- 브라우저 WebSocket 은 헤더를 붙일 수 없어 SDK 가 멤버 토큰과 공개 키를 URL 쿼리(`?access_token=`, `?token=`,
|
|
11
|
+
`?public_key=`)에 실었다. URL 은 브라우저 기록, 중간 프록시와 터널, 서버 로그에 남는다. 이제 연결(재연결)마다 헤더로
|
|
12
|
+
30초짜리 1회용 티켓을 받아 `?ticket=` 만 싣는다. 서버는 티켓에서 자격증명을 되살려 예전과 같은 인증을 하므로 연결의
|
|
13
|
+
권한, 토큰 만료 집행, 연결 위 토큰 갱신(`token_refresh`)은 그대로다.
|
|
14
|
+
- `cb.realtime.connect()` → `POST {socketUrl}/v1/realtime/ws-ticket`
|
|
15
|
+
- `cb.database.connectRealtime()` → `POST {dataServerUrl}/v1/database/realtime/ws-ticket` (cross-app OAuth 토큰 포함)
|
|
16
|
+
- `cb.game` 룸 클라이언트, WebSocket 전송 → `POST {gameServerUrl}/v1/game/{appId}/ws-ticket`
|
|
17
|
+
- `cb.webrtc.connect()` 시그널링 → `POST {webrtcUrl}/v1/apps/{appId}/signaling/ws-ticket`
|
|
18
|
+
- 서버가 티켓 발급을 모르면(404/405/501, 이 기능 전 서버) 그 서버에는 다시 묻지 않고 예전처럼 URL 자격증명으로 붙는다.
|
|
19
|
+
티켓 저장소 일시 장애(503 `ws_ticket_unavailable`), 네트워크 또는 CORS 실패, 5초 시간 초과도 예전 방식으로 붙는다.
|
|
20
|
+
- 발급이 자격증명을 거부하면(401, 403, 402, 429 등) 소켓을 열지 않고 이유를 알린다. 브라우저 WebSocket 은 핸드셰이크
|
|
21
|
+
거부의 이유를 읽을 수 없어 예전에는 같은 거부가 이유 없는 연결 실패로 보였다.
|
|
22
|
+
- `cb.realtime.connect()`: `RealtimeConnectionError`(`code` 는 서버 코드, `closeCode` 는 4000+HTTP 상태). `rate_limited`
|
|
23
|
+
는 예전처럼 연결 제한 시간 안에서 다시 시도한다.
|
|
24
|
+
- `cb.database.connectRealtime()`: `RealtimeConnectionError` 로 reject 하고 `onRealtimeError` 로도 알린다.
|
|
25
|
+
- `cb.game`: `GameError`(`code` 는 서버 코드). `cb.webrtc.connect()`: `WsTicketError`(`status`, `code`).
|
|
26
|
+
- 새 실시간 거부 코드 `invalid_ws_ticket`(티켓 만료 또는 이미 쓰임), `ws_ticket_unavailable`(서버 티켓 저장소 일시 장애)은
|
|
27
|
+
`connect()` 가 새 티켓으로 스스로 다시 시도한다. `query_credential_rejected` 는 서버가 URL 쿼리 자격증명을 받지 않도록
|
|
28
|
+
설정됐다는 뜻이다(`WS_QUERY_CREDENTIAL_POLICY`, 기본 허용).
|
|
29
|
+
- `WsTicketError` 를 내보낸다.
|
|
30
|
+
- 연결이 소켓을 열기 전에 발급 요청 한 번을 기다린다. 테스트에서 `WebSocket` 생성이 `connect()` 와 같은 틱에 일어난다고
|
|
31
|
+
가정했다면 소켓이 만들어질 때까지 기다리도록 바꿔야 한다.
|
|
32
|
+
|
|
6
33
|
## [6.13.0] - 2026-11-11
|
|
7
34
|
|
|
8
35
|
### Security — WebRTC 역할과 룸 인가를 서버가 정한 대로 따른다
|
package/dist/cli.js
CHANGED
|
@@ -170,7 +170,7 @@ function handleTunnelError(msg, appId, localPort) {
|
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
// src/cli.ts
|
|
173
|
-
var VERSION = "6.
|
|
173
|
+
var VERSION = "6.14.0" ? "6.14.0" : getPackageVersion();
|
|
174
174
|
var DEFAULT_BASE_URL = "https://api.connectbase.world";
|
|
175
175
|
var colors = {
|
|
176
176
|
reset: "\x1B[0m",
|