using System; using System.Threading; using System.Threading.Tasks; using RudderSdk.Core.Models.BattlePass; namespace RudderSdk.Core; /// /// Battle pass progress and rewards. The simple overloads target the project's /// default battle pass; the request-based overloads carry the scenario node /// context and are used by the scenario runtime. /// public sealed class BattlePassService { /// Free reward track, see . public const string TrackFree = "free"; /// Premium reward track, see . public const string TrackPremium = "premium"; private readonly RudderClient _client; internal BattlePassService(RudderClient client) => _client = client; /// Reads current progress: xp, level, premium ownership, claimed tiers. public Task GetProgressAsync(CancellationToken cancellationToken = default) => GetProgressAsync(new GetBattlePassProgressRequest(), cancellationToken); /// Credits xp and returns the new xp/level and level-up flags. public Task AddXpAsync(long amount, CancellationToken cancellationToken = default) => AddXpAsync(new AddBattlePassXpRequest { Amount = amount }, cancellationToken); /// /// Claims a tier reward at a reached level (idempotent server-side). /// is or . /// public Task ClaimRewardAsync(int level, string track, CancellationToken cancellationToken = default) => ClaimRewardAsync(new ClaimBattlePassRewardRequest { Level = level, Track = track }, cancellationToken); /// /// Purchases the premium track (charges the wallet). When /// is null, a random one is generated. /// public Task PurchasePremiumAsync(string? idempotencyKey = null, CancellationToken cancellationToken = default) => PurchasePremiumAsync(new PurchaseBattlePassPremiumRequest { IdempotencyKey = idempotencyKey ?? Guid.NewGuid().ToString() }, cancellationToken); internal Task GetProgressAsync(GetBattlePassProgressRequest request, CancellationToken cancellationToken = default) => _client.SendAsync( "POST", "/sdk/v1/battlepass/progress", request, cancellationToken); internal Task AddXpAsync(AddBattlePassXpRequest request, CancellationToken cancellationToken = default) => _client.SendAsync( "POST", "/sdk/v1/battlepass/xp", request, cancellationToken); internal Task ClaimRewardAsync(ClaimBattlePassRewardRequest request, CancellationToken cancellationToken = default) => _client.SendAsync( "POST", "/sdk/v1/battlepass/claim", request, cancellationToken); internal Task PurchasePremiumAsync(PurchaseBattlePassPremiumRequest request, CancellationToken cancellationToken = default) => _client.SendAsync( "POST", "/sdk/v1/battlepass/premium", request, cancellationToken); }