# Changelog

## Unreleased

### Enhancements

- 双连接热切：可选 `connectionMaxAgeMs`，在网关 300s 最大存活时间到期前用备用 socket 刷新 WebSocket。`createRealtimeClient` / `app.realtime()` 默认 270s 加抖动；单独 `new RealtimeClient` 默认关闭。见 `migrations/connection-hot-cut.md`。
- 接入 CloudBase Auth 事件：`createRealtimeClient` / `app.realtime()` 监听 `onAuthStateChange`。`TOKEN_REFRESHED` / `SIGNED_IN` / `INITIAL_SESSION` 立刻 `setAuth(token)`，`SIGNED_OUT` 调用 `setAuth()` 清 token；相同 token 不重复推送。未初始化 auth 时不抢先调用 `app.auth()`，等首次 `app.auth()` 再绑定。未注册 auth 时行为不变，仍走 `accessToken` 回调与心跳刷新。
- CloudBase 握手走 URL `apikey`，`phx_join` payload 和 in-band `access_token` 事件不再携带 token。`setAuth` 仍缓存 token，供 HTTP `Authorization` 与下次建连的 `apikey` 使用。
- `createRealtimeClient` / `app.realtime()` 把 host `adapter.reqClass`（小程序 `WxRequest`）wrap 成标准 `fetch`，供 `httpSend()` 使用，不再依赖全局 `fetch` / `URL`。
- `httpSend()`（以及 `send()` 的 REST 回退）发送前调用 `setAuth()` 拉取最新 access token。CloudBase 路径会把 token 同步到 `apikey`，不再用 envId 占位。`broadcastEndpointURL` 改为按当前 socket `endPointURL()` 实时计算，query `apikey` 与 header 一致。

## 1.0.0-alpha.0 (2026-09-09)

`@cloudbase/realtime-js` 的首个独立版本。包从 `@supabase/realtime-js` 迁入 CloudBase JS SDK，作为可单独构建、测试和发布的 workspace 包，不再依赖 supabase-js 大仓的 Nx / pnpm catalog / 共享 tsconfig。

### 包信息

- 包名：`@cloudbase/realtime-js`
- 版本：`1.0.0-alpha.0`
- 构建：包内 `tsc` 产出 CommonJS（`dist/main`）与 ES Module（`dist/module`）
- 测试：包内 Vitest，使用 mock WebSocket，无需外部 Realtime 服务

### 能力

- **Broadcast**：低延迟客户端消息
- **Presence**：跨客户端共享状态同步
- **Postgres CDC**：订阅 PostgreSQL 变更（含 filter builder、`select` 列裁剪）
- HTTP `httpSend()` / 二进制 broadcast（需 Realtime server >= v2.97.0）
- Broadcast Replay、心跳延迟回调、Web Worker 保活

### 运行时依赖

- `@supabase/phoenix@0.4.5`
- `tslib@2.8.1`
