170 lines
7.9 KiB
Markdown
170 lines
7.9 KiB
Markdown
# Changelog
|
|
|
|
## Unreleased
|
|
|
|
- `client.modules.call` resolves to `CallModuleFunctionClientResponse`, which
|
|
carries only `result`. Console output, the kernel call log and `error` are
|
|
no longer part of the player response; they stay on the platform dry run.
|
|
- Module business errors reject with `RudderHttpError` (`status` 422, body
|
|
`{ error, code, requestId }`). `code` is defined by the module and is an
|
|
open string.
|
|
- `RudderErrorCodes` and the `RudderErrorCode` type are no longer exported
|
|
from the package. The generated platform codes are now only `forbidden` and
|
|
`row_referenced`; the scenario and quest codes (`early_completion`,
|
|
`level_not_reached`, `node_not_active`, `objectives_incomplete`,
|
|
`run_expired`, `run_not_active`, `scenario_not_active`, `unknown_run`) are
|
|
removed with those domains. Compare `error.code` with string literals.
|
|
- Login and token refresh send `platform: 'web'` and, when the new optional
|
|
`appVersion` client option is set, `appVersion`. The backend stores them on
|
|
the player for segment rules (`player.platform`, `player.appVersion`).
|
|
|
|
## 2.0.0
|
|
|
|
Breaking change — kernel surface. Module-specific client methods are removed.
|
|
The SDK now exposes the kernel only: auth, player (including wallets), catalog
|
|
currencies, storage, project storage, revision sync,
|
|
`client.modules.call(module, fn, args)`, and `client.resources(slug)`.
|
|
|
|
### Removed
|
|
|
|
- `client.battlePass` / `BattlePassService`
|
|
- `client.quests` / `QuestsService` / `QuestMetrics`
|
|
- `client.leaderboards` / `LeaderboardsService` / `LeaderboardHandle`
|
|
- `client.stores` / `StoresDomain` / `ShopHandle` / `OfferHandle`
|
|
- `client.inventory` / `InventoryDomain`
|
|
- `client.remoteConfig` / `ConfigDomain` / `RemoteConfigState`
|
|
- Scenario runtime (`ScenarioService`, login-event trigger, pending poll)
|
|
- Module-specific effects: `onStoreOffer`, `onLeaderboard`, `onQuest`,
|
|
`onBattlePass`, `onBattlePassLevel`, `onConfigChanged`
|
|
- Generated wire types for battle pass, quests, stores, inventory,
|
|
leaderboards, remote config, and scenarios
|
|
|
|
Call module functions with `client.modules.call(module, fn, args)` and read or
|
|
write resource rows with `client.resources(slug)` (`list` / `get` / `create` /
|
|
`update` / `delete`).
|
|
|
|
Also required by the backend environments release: every project now has
|
|
exactly two environments, `staging` and `prod`, and the SDK key passed as
|
|
`projectKey` decides which one the player belongs to. The environment never
|
|
appears in the client API: it is resolved at login and carried inside the
|
|
access and refresh tokens. Tokens issued before this release have no
|
|
environment claim and are rejected with 401, so the first call after the
|
|
backend upgrade refreshes, fails, clears the token store and emits
|
|
`'signed-out'` to every `onAuthStateChange` listener. Log the player in again
|
|
with `client.auth.loginWithDevice()` / `loginWithCustom()`.
|
|
|
|
## 1.0.0
|
|
|
|
- Scenario execution moved server-side. The SDK no longer walks a local DAG
|
|
or persists plan state to IndexedDB.
|
|
- Removed `RudderClientOptions.runtime.planStateStore` and the
|
|
`PlanStateStore` type.
|
|
- `GET /sdk/v1/scenarios/pending` is polled on login, on a ~30s heartbeat,
|
|
and at each effect `waitDeadline`. Completions POST
|
|
`/sdk/v1/scenarios/callback`; the response may carry the next
|
|
`PendingEffect`.
|
|
- Scenario `remote_config_override` nodes no longer emit `onConfigChanged`
|
|
(the server applies the override). The `ConfigChangedEffect` type and
|
|
`onConfigChanged` subscription remain.
|
|
|
|
## 0.6.0
|
|
|
|
- `LeaderboardSession.claim()` / effect `claim()` completes the leaderboard
|
|
node with handle `onClaim`. The server matches live rank to an authored
|
|
place and continues from that place (Grant Reward and/or In-App Message).
|
|
- `rewardClaimed()` is a deprecated alias for `claim()` and will be removed
|
|
in the next SDK version.
|
|
- `rank_not_eligible` on Claim leaves the session open (retry Claim or End);
|
|
it no longer fails the run.
|
|
|
|
## 0.5.1
|
|
|
|
- `QuestMetrics` / `reportProgress`: custom free-text metrics no longer
|
|
progress quests. Report a released catalog counter slug instead.
|
|
`purchaseOffer` / `purchaseItem` helpers are unchanged (server-side shop
|
|
fan-out).
|
|
|
|
## 0.5.0
|
|
|
|
- `client.auth.loginWithCustom({ customData, region?, language?, nickname? })`
|
|
— custom webhook auth, same token + runtime start as `loginWithDevice`.
|
|
- `QuestMetrics.purchaseOffer` / `purchaseItem` helpers for the shop purchase
|
|
metric format.
|
|
- Typecheck against regenerated models: `listQuests` no longer takes a body,
|
|
battle-pass `track` is `'free' | 'premium'`, scenario run status has no
|
|
`unknown_run`.
|
|
|
|
## 0.4.0
|
|
|
|
- Fixed `BattlePassLevelSession.level` reading node data key `level` — the
|
|
admin editor writes `levelNumber`, so tiers always reported `0`. The session
|
|
now reads `levelNumber`, matching the editor and server validation.
|
|
- UGC support removed from the generated wire types (`src/generated/ugc.ts`
|
|
deleted by apigen); no UGC surface was ever exposed by this SDK.
|
|
- Generated API types regenerated from the gateway openapi spec, adding the
|
|
new platform operations.
|
|
|
|
## 0.3.0
|
|
|
|
Breaking changes — the package was aligned with the Rudder SDK glossary and
|
|
the regenerated wire types (`src/generated`, apigen). No compatibility shims
|
|
are provided.
|
|
|
|
### Auth
|
|
|
|
- `client.auth.loginViaDevice(region, language, nickname?)` replaced by
|
|
`client.auth.loginWithDevice(options?: { region?, language?, nickname? })`.
|
|
Default region is now `'global'` (was `'en'`); default language stays `'en'`.
|
|
- New `client.auth.onAuthStateChange(cb)` — fires immediately with the current
|
|
state, then on every `'signed-in' | 'signed-out'` transition (login, logout,
|
|
and unrecoverable session expiry in the transport).
|
|
- New `client.auth.isAuthenticated`.
|
|
|
|
### Client configuration
|
|
|
|
- `tokenStore` in `RudderClientOptions` is now optional. Default:
|
|
localStorage-backed store with a silent in-memory fallback where
|
|
localStorage is unavailable (SSR, private mode). New `createDefaultTokenStore()` export.
|
|
- Invalid client options (`baseUrl` / `projectKey` missing) now throw
|
|
`RudderError` with `code: 'sdk/invalid-options'` instead of a plain `Error`.
|
|
- New `onEffectError` option — called when an effect handler throws
|
|
(default: `console.error`); previously such errors were swallowed silently.
|
|
|
|
### Renames
|
|
|
|
- `client.config` → `client.remoteConfig` (canonical glossary name).
|
|
- `client.battlepass` → `client.battlePass`; `BattlepassService` → `BattlePassService`.
|
|
- Effects: `onBattlepass` / `BattlepassEffect` → `onBattlePass` / `BattlePassEffect`;
|
|
`onBattlepassLevel` / `BattlepassLevelEffect` → `onBattlePassLevel` / `BattlePassLevelEffect`.
|
|
- Generated types: `SdkQuest` → `Quest`; `*Battlepass*` request/response types → `*BattlePass*`.
|
|
- Internal transport `sendAsync` → `request` (not part of the public surface).
|
|
|
|
### Leaderboards
|
|
|
|
- Removed `LeaderboardsService.getRanking(slug, limit)` and
|
|
`LeaderboardsService.submitScore(slug, score)`. Single path:
|
|
`client.leaderboards.findBySlug(slug)` → `handle.list(limit?)` / `handle.submit(score)`.
|
|
|
|
### Errors
|
|
|
|
- `RudderNetworkError.inner` → standard `Error.cause`.
|
|
- `RudderHttpError.code` is typed as `RudderErrorCode | (string & {})`
|
|
(generated union of server error codes, plus room for unknown strings).
|
|
- New exports: `RudderErrorCode` (type), `RudderErrorCodes` (constants),
|
|
`SDK_ERROR_INVALID_OPTIONS`, `RudderErrorCodeLike` (type).
|
|
|
|
### Public surface
|
|
|
|
- The barrel no longer exports `getOrCreateDeviceId`, domain classes
|
|
(`PlayerDomain`, …) or service constructors (`AuthService`, …) as values —
|
|
they remain available as types. Instances live on the client.
|
|
- `SubmittedBy` is no longer re-exported (UGC is unsupported on web).
|
|
|
|
### Bundle
|
|
|
|
- The scenario engine and the IndexedDB plan store are loaded lazily (dynamic
|
|
import) on first login / first runtime access — a thin client never pulls
|
|
the scenario machinery into the initial chunk.
|
|
- The package now ships both ESM (`dist/index.js`) and CJS (`dist/index.cjs`)
|
|
builds with matching `exports` entries.
|