2.0.0: slug-based quests, scenarios and offers; environment carried by the token; regenerated models
Claude-Session: https://claude.ai/code/session_01SMCvdwDmuxoaqGgvGBLk1V
This commit is contained in:
@@ -1,5 +1,36 @@
|
||||
# Changelog
|
||||
|
||||
## 2.0.0
|
||||
|
||||
Breaking change — major bump, required by the backend environments release.
|
||||
Every project now has exactly two environments, `staging` and `prod`, and the
|
||||
SDK key you configure 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 stored tokens and raises
|
||||
`AuthService.AuthStateChanged` with `RudderAuthState.SignedOut`. Log the player
|
||||
in again with `Auth.LoginWithDeviceAsync` / `LoginWithCustomAsync`.
|
||||
|
||||
Quests, scenarios and offers are addressed by their slug instead of their id,
|
||||
because ids differ between staging and prod while slugs are stable. Renamed
|
||||
accordingly: `Quest.Id` is now `Quest.Slug`, `QuestsService.ClaimAsync` takes a
|
||||
quest slug, `ReportProgressAsync` returns the slugs of the completed quests
|
||||
(`ReportQuestProgressResponse.CompletedQuestSlugs`), `StoresService.PurchaseAsync`
|
||||
takes an offer slug and `Offer` carries a `Slug`, `QuestMetrics.PurchaseOffer`
|
||||
builds its metric from the offer slug, and every scenario-scoped type exposes
|
||||
`ScenarioSlug` instead of `ScenarioId` — `PendingEffect`, the effect objects,
|
||||
`ScenarioCompletedEffect`, `ScenarioFailedEffect`, the battle pass requests and
|
||||
`BattlePassService.GetProgressAsync`. Leaderboards, items and stores already
|
||||
used slugs and are unchanged.
|
||||
|
||||
Also shipped here, previously committed but never published: the effects client
|
||||
reconciles against every `GET /sdk/v1/scenarios/pending` response, so a run that
|
||||
disappears server-side (finished elsewhere, expired after a promote) now emits
|
||||
`OnScenarioCompleted` instead of lingering; and `run_not_active` joins
|
||||
`unknown_run` and `run_expired` as a terminal rejection that drops the run and
|
||||
emits `OnScenarioFailed`.
|
||||
|
||||
## 1.0.0
|
||||
|
||||
Breaking change — major bump. The local scenario engine is replaced by a
|
||||
|
||||
Reference in New Issue
Block a user