Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 04e3565412 |
@@ -1,5 +1,15 @@
|
||||
# Changelog
|
||||
|
||||
## 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
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@rudder/js-sdk",
|
||||
"version": "0.5.1",
|
||||
"version": "0.6.0",
|
||||
"publishConfig": {
|
||||
"registry": "https://hub.rudder.build/api/packages/rudder/npm/"
|
||||
},
|
||||
|
||||
@@ -35,6 +35,8 @@ export interface StoreOfferEffect {
|
||||
|
||||
export interface LeaderboardEffect {
|
||||
end(): Promise<void>;
|
||||
claim(): Promise<void>;
|
||||
/** @deprecated Use {@link LeaderboardEffect.claim}. Removed in the next SDK version. */
|
||||
rewardClaimed(): Promise<void>;
|
||||
}
|
||||
|
||||
@@ -191,7 +193,8 @@ export class EffectsCenter implements Effects {
|
||||
emitLeaderboard(session: LeaderboardSession): void {
|
||||
this.emit(this.leaderboardHandlers, {
|
||||
end: () => session.end(),
|
||||
rewardClaimed: () => session.rewardClaimed(),
|
||||
claim: () => session.claim(),
|
||||
rewardClaimed: () => session.claim(),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,10 @@ function isTransientHttpError(err: unknown): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
function isRankNotEligible(err: unknown): boolean {
|
||||
return err instanceof RudderHttpError && err.code === 'rank_not_eligible';
|
||||
}
|
||||
|
||||
|
||||
export class ScenarioService<TConfig extends RemoteConfigShape = RemoteConfigShape> {
|
||||
private readonly runs = new Map<string, RuntimeRun>();
|
||||
@@ -434,6 +438,10 @@ export class ScenarioService<TConfig extends RemoteConfigShape = RemoteConfigSha
|
||||
await this.persist();
|
||||
} catch (err) {
|
||||
run.pendingTransitions--;
|
||||
if (isRankNotEligible(err)) {
|
||||
await this.persist();
|
||||
throw err;
|
||||
}
|
||||
this.failRun(
|
||||
run,
|
||||
nodeId,
|
||||
|
||||
@@ -180,14 +180,19 @@ export class LeaderboardSession {
|
||||
|
||||
async end(): Promise<void> {
|
||||
if (this.resolved) return;
|
||||
this.resolved = true;
|
||||
await this.context.complete('onEnd');
|
||||
this.resolved = true;
|
||||
}
|
||||
|
||||
async rewardClaimed(): Promise<void> {
|
||||
async claim(): Promise<void> {
|
||||
if (this.resolved) return;
|
||||
await this.context.complete('onClaim');
|
||||
this.resolved = true;
|
||||
await this.context.complete('onRewardClaimed');
|
||||
}
|
||||
|
||||
/** @deprecated Use {@link LeaderboardSession.claim}. Removed in the next SDK version. */
|
||||
async rewardClaimed(): Promise<void> {
|
||||
return this.claim();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user