connectbase-client 5.6.4 → 5.8.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 +58 -6
- package/dist/connect-base.umd.js +4 -4
- package/dist/index.d.mts +120 -1
- package/dist/index.d.ts +120 -1
- package/dist/index.js +120 -4
- package/dist/index.mjs +120 -4
- package/package.json +75 -75
package/CHANGELOG.md
CHANGED
|
@@ -3,14 +3,66 @@
|
|
|
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.
|
|
6
|
+
## [5.8.0] - 2026-08-02
|
|
7
7
|
|
|
8
|
-
### Fixed —
|
|
8
|
+
### Fixed — `sync_lost` 재동기화: 설계만 있고 한 번도 돌지 않던 복구 경로
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
game-server 는 클라이언트 송신 버퍼가 넘쳐 delta 를 버리면 `sync_lost` 를 보내고,
|
|
11
|
+
규약상 클라이언트가 `get_state` 로 전체 상태를 다시 받아 기준점을 맞추게 돼 있다.
|
|
12
|
+
그런데 **이 메시지를 처리하는 분기가 SDK 에 없었다** — 타입에는 선언돼 있어서 더
|
|
13
|
+
그럴듯했지만, `GameRoom` 의 switch 에는 없어 `onMessage`(커스텀 메시지) 로 흘렀다.
|
|
14
|
+
|
|
15
|
+
delta 는 직전 상태에 누적 적용되므로 하나만 놓쳐도 이후 상태가 계속 어긋난다. 즉
|
|
16
|
+
문서화된 desync 복구가 실제로는 한 번도 동작한 적이 없었다.
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
// 별도 설정 없이 동작한다. 복구된 상태는 평소처럼 onStateUpdate 로 온다.
|
|
20
|
+
room.on("onSyncLost", ({ tick, hint }) => setResyncing(true)); // 선택 — 로딩 표시용
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- `sync_lost` 수신 시 자동으로 전체 상태를 재요청한다. 서버는 버퍼가 계속 막혀 있으면
|
|
24
|
+
tick 마다(60Hz) 재시도하므로, in-flight 가드 + 최소 1초 간격으로 억제했다 — 안 그러면
|
|
25
|
+
이미 혼잡한 연결에 전체 상태 전송이 겹쳐 혼잡을 키운다.
|
|
26
|
+
- `onSyncLost` 핸들러와 `SyncLostMessage` 타입 신설. **복구는 SDK 가 하므로 게임 쪽에서
|
|
27
|
+
할 일은 없다** — 이 콜백은 로딩 표시나 계측용이다.
|
|
28
|
+
- `room_stale` 도 `GameRoom` 에서 발화한다. `onRoomStale` 핸들러와 `RoomStaleMessage`
|
|
29
|
+
타입이 이미 있었는데 다른 transport 모듈에만 배선돼 있어 실제 클라이언트에서는 죽어
|
|
30
|
+
있었다. 두 타입 모두 패키지 루트에서 export 한다.
|
|
31
|
+
|
|
32
|
+
### Fixed — 연결 URL 이 조용히 깨지던 두 경로
|
|
33
|
+
|
|
34
|
+
- `appId` 누락 시 `/v1/game//ws`(빈 path 세그먼트)를 만들던 문제. `GameRoom` 에는 이미
|
|
35
|
+
가드가 있었는데 transport 모듈만 `|| ""` 로 넘기고 있었고, 프로덕션 로그에 실제로
|
|
36
|
+
`GET /v1/game//ws?client_id=undefined` 가 찍혔다. 이제 명확한 에러로 즉시 실패한다.
|
|
37
|
+
- `clientId` 누락 시 서버에 `client_id=undefined` 라는 그럴듯한 가짜 ID 가 가던 문제.
|
|
38
|
+
`URLSearchParams.set` 이 undefined 를 문자열 `"undefined"` 로 넣기 때문으로, 타입이
|
|
39
|
+
`string` 이라 컴파일은 통과하지만 JS 소비자에서는 실제로 비어서 들어온다.
|
|
40
|
+
|
|
41
|
+
기존 API 변경 없음(추가만).
|
|
42
|
+
|
|
43
|
+
## [5.7.0] - 2026-08-01
|
|
44
|
+
|
|
45
|
+
### Added — `getScriptLogs` / `getScriptMetrics`: 서버 Lua 를 디버깅할 수 있다
|
|
46
|
+
|
|
47
|
+
서버는 훅 에러에 진단 정보를 실어 보내고 있었지만(훅 이름 + setup/hook 실측 + Lua
|
|
48
|
+
traceback 의 파일:줄), **SDK 에는 그걸 읽는 메서드가 없었다.** 업로드/활성화는 되는데
|
|
49
|
+
실패 원인을 볼 수 없어, 서버 Lua 작성 루프가 SDK 쪽에서만 닫히지 않는 상태였다.
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
const { entries } = await cb.game.getScriptLogs(appId, "main", { limit: 50 });
|
|
53
|
+
// [onTick] onTick error: <string>:12: attempt to index a nil value (setup 3ms / hook 5ms)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- `getScriptLogs(appId, name, { since?, limit? })` — 훅 에러 + Lua `log()` 출력.
|
|
57
|
+
`since` 에 직전 응답의 최신 `ts` 를 넣으면 증분 폴링이 된다. 버퍼는 스크립트당 최근
|
|
58
|
+
~500 엔트리이며 서버 파드 로컬이라 재시작 시 소실된다.
|
|
59
|
+
- `getScriptMetrics(appId, name)` — 호출 수/에러율과 **setup vs hook 분리 레이턴시**.
|
|
60
|
+
`max_hook_latency_ms` 가 frame 훅 예산(기본 100ms)에 근접하면 무거운 작업을
|
|
61
|
+
`onInit`(5s 예산)으로 옮기라는 신호다. 반대로 `max_setup_latency_ms` 가 크면 룸
|
|
62
|
+
state 가 큰 것이라 사용자 코드를 고쳐도 낫지 않는다.
|
|
63
|
+
- 타입 `ScriptLogEntry` / `ScriptLogsResponse` / `ScriptMetricsResponse` 신설.
|
|
64
|
+
|
|
65
|
+
기존 API 변경 없음(추가만).
|
|
14
66
|
|
|
15
67
|
## [5.6.4] - 2026-08-01
|
|
16
68
|
|