Skip to main content

Rewards Processor Module

The Rewards Processor Module provides functionality for managing player rewards, including claiming rewards, activating boosters, and retrieving information about active boosters and rewards in the Gamanza Engage Web Client SDK.

Accessing the Module

The RewardsProcessorModule is initialized internally by the SDK and should not be instantiated directly. It's accessible through the main SDK instance.

// Example of accessing the RewardsProcessorModule through the SDK
const { RewardsProcessor } = GamanzaEngageWebClientSDK.getInstance();

Methods

playerClaimRewardsByGroupId

Sends a request to claim player rewards by the reward group ID.

Signature:

playerClaimRewardsByGroupId(groupId: string): Promise<SimpleResponse<ClaimableRewardsType[]>>

Parameters:

NameTypeDescription
groupIdstringThe unique identifier of the reward group to claim

Returns:

TypeDescription
Promise<SimpleResponse<ClaimableRewardsType[]>>A promise that resolves to a simple response containing an array of claimed rewards or an error

Example:

// Claim rewards by group ID
const groupId = "group-123";
const response = await sdk.RewardsProcessor.playerClaimRewardsByGroupId(groupId);

if (response.ok) {
console.log('Successfully claimed rewards:', response.data);
} else {
console.error('Failed to claim rewards:', response.error);
}

playerClaimMissionRewards

Sends a request to claim mission rewards for the current authenticated player.

Claims a reward originated from a completed mission.

⚠️ This method is part of the RewardsProcessor module, not the Missions module.

The parameters required (bundleStateId and missionStateId) must be extracted from the metadata of rewards where the source === "missions" returned by getPlayerRewards().

Signature:

playerClaimMissionRewards(playerBundleStateId: string, missionStateId: string): Promise<SimpleResponse<ClaimableRewardsType[]>>

Parameters:

NameTypeDescription
playerBundleStateIdstringThe unique identifier of the player bundle state
missionStateIdstringThe unique identifier of the mission state

Returns:

TypeDescription
Promise<SimpleResponse<ClaimableRewardsType[]>>A promise that resolves to a simple response containing an array of claimed rewards or an error

Example:

// Claim mission rewards
const playerBundleStateId = "bundle-state-123";
const missionStateId = "mission-state-456";

const response = await sdk.RewardsProcessor.playerClaimMissionRewards(
playerBundleStateId,
missionStateId
);

if (response.ok) {
console.log('Successfully claimed mission rewards:', response.data);
} else {
console.error('Failed to claim mission rewards:', response.error);
}

playerActivateBooster

Activates a booster granted to the current authenticated player.

Signature:

playerActivateBooster(rewardId: string, payload: ActivateBoosterRequest): Promise<SimpleResponse<PlayerRewardActive>>

Parameters:

NameTypeDescription
rewardIdstringThe unique identifier of the reward to be activated
payloadActivateBoosterRequestAdditional information required to activate the booster based on the type

Returns:

TypeDescription
Promise<SimpleResponse<PlayerRewardActive>>A promise that resolves to a simple response containing the activated reward or an error

Example:

// Activate a level booster
const rewardId = "reward-123";
const payload = {
boosterType: "level",
levelId: "level-456"
};

const response = await sdk.RewardsProcessor.playerActivateBooster(rewardId, payload);

if (response.ok) {
console.log('Successfully activated booster:', response.data);
} else {
console.error('Failed to activate booster:', response.error);
}

// Activate a mission booster
const missionBoosterPayload = {
boosterType: "mission",
missionId: "mission-789"
};

const missionResponse = await sdk.RewardsProcessor.playerActivateBooster(
"reward-456",
missionBoosterPayload
);

getPlayerActiveLevelBooster

Returns the list of active level boosters for the current authenticated player.

Signature:

getPlayerActiveLevelBooster(): Promise<PlayerLevelBooster[]>

Returns:

TypeDescription
Promise<PlayerLevelBooster[]>A promise that resolves to an array of active level boosters

Example:

// Get active level boosters
const levelBoosters = await sdk.RewardsProcessor.getPlayerActiveLevelBooster();

console.log(`Found ${levelBoosters.length} active level boosters`);
levelBoosters.forEach(booster => {
console.log(`Booster ID: ${booster.id}`);
console.log(`Booster Rate: ${booster.boosterRate}`);
console.log(`Active from ${booster.timeStart} to ${booster.timeEnd}`);
});

getPlayerActiveMissionBoosters

Returns the list of active mission boosters for the current authenticated player.

Signature:

getPlayerActiveMissionBoosters(): Promise<PlayerMissionsBooster[]>

Returns:

TypeDescription
Promise<PlayerMissionsBooster[]>A promise that resolves to an array of active mission boosters

Example:

// Get active mission boosters
const missionBoosters = await sdk.RewardsProcessor.getPlayerActiveMissionBoosters();

console.log(`Found ${missionBoosters.length} active mission boosters`);
missionBoosters.forEach(booster => {
console.log(`Booster ID: ${booster._id}`);
console.log(`Booster Rate: ${booster.boosterRate}`);
console.log(`Active from ${booster.timeStart} to ${booster.timeEnd}`);
});

getPlayerActiveTokenBoosters

Returns the list of active token boosters for the current authenticated player.

Signature:

getPlayerActiveTokenBoosters(): Promise<PlayerTokensBooster[]>

Returns:

TypeDescription
Promise<PlayerTokensBooster[]>A promise that resolves to an array of active token boosters

Example:

// Get active token boosters
const tokenBoosters = await sdk.RewardsProcessor.getPlayerActiveTokenBoosters();

console.log(`Found ${tokenBoosters.length} active token boosters`);
tokenBoosters.forEach(booster => {
console.log(`Booster ID: ${booster._id}`);
console.log(`Booster Rate: ${booster.boosterRate}`);
console.log(`Active from ${booster.timeStart} to ${booster.timeEnd}`);
});

getPlayerAllActiveBoostersByType

Returns the list of all active boosters by type for the current authenticated player.

Signature:

getPlayerAllActiveBoostersByType(): Promise<ActiveRewardsByType>

Returns:

TypeDescription
Promise<ActiveRewardsByType>A promise that resolves to an object containing arrays of different types of active boosters

Example:

// Get all active boosters by type
const allBoosters = await sdk.RewardsProcessor.getPlayerAllActiveBoostersByType();

console.log(`Level Boosters: ${allBoosters.levelBoosters.length}`);
console.log(`Mission Boosters: ${allBoosters.missionBoosters.length}`);
console.log(`Token Boosters: ${allBoosters.tokenBoosters.length}`);

// Access specific booster types
if (allBoosters.levelBoosters.length > 0) {
const firstLevelBooster = allBoosters.levelBoosters[0];
console.log(`First Level Booster Rate: ${firstLevelBooster.boosterRate}`);
}

getPlayerRewards

Returns the list of rewards for the current authenticated player. The response can be modified based on the request argument filters.

Signature:

getPlayerRewards(request: ListRewardsRequest): Promise<PaginationResponse<PlayerRewardActive[]>>

Parameters:

NameTypeDescription
requestListRewardsRequestObject containing filter parameters for the rewards list

Returns:

TypeDescription
Promise<PaginationResponse<PlayerRewardActive[]>>A promise that resolves to a paginated response containing an array of player rewards

Example:

// Get player rewards with filters
const request = {
limit: 10,
page: 1,
status: ["active", "granted"],
rewardType: ["tokens", "level_booster"]
};

const response = await sdk.RewardsProcessor.getPlayerRewards(request);

console.log(`Total rewards: ${response.totalDocs}`);
console.log(`Page ${response.page} of ${response.totalPages}`);

response.docs.forEach(reward => {
console.log(`Reward ID: ${reward.id}`);
console.log(`Status: ${reward.status}`);
console.log(`Activation: ${reward.activation}`);
});

// Get next page
if (response.hasNextPage) {
const nextPageRequest = {
...request,
page: response.nextPage
};
const nextPageResponse = await sdk.RewardsProcessor.getPlayerRewards(nextPageRequest);
}

ActivateBoosterRequest

Interface for activating a booster.

interface ActivateBoosterRequest {
boosterType: BoosterType;
levelId?: string;
missionId?: string;
}
PropertyTypeRequiredDescription
boosterTypeBoosterTypeYesThe type of booster to activate (level, mission, or tokens)
levelIdstringNoThe level ID (required when boosterType is "level")
missionIdstringNoThe mission ID (required when boosterType is "mission")

BoosterType

Enum for booster types.

enum BoosterType {
LEVEL = 'level',
MISSION = 'mission',
TOKENS = 'tokens',
}
ValueDescription
LEVELLevel booster type
MISSIONMission booster type
TOKENSTokens booster type

PlayerRewardActive

Interface for active player rewards.

interface PlayerRewardActive {
id: string;
status: RewardStatusEnum | ExternalRewardStatus;
playerId: string;
activation: ActivationType;
playerCategoryId: string;
earnedReward: Record<string, any>;
metadata?: Record<string, any>;
trigger?: string;
expirationDate?: Date;
countdown?: ActiveCountdownBoosterType;
group?: RewardGroup;
source?: string;
}
PropertyTypeRequiredDescription
idstringYesUnique identifier for the reward
statusRewardStatusEnum | ExternalRewardStatusYesCurrent status of the reward
playerIdstringYesIdentifier of the player who owns the reward
activationActivationTypeYesHow the reward is activated (automatic or by player)
playerCategoryIdstringYesCategory identifier for the player
earnedRewardRecord<string, any>YesDetails of the earned reward
metadataRecord<string, any>NoAdditional metadata for the reward
triggerstringNoWhat triggered the reward
expirationDateDateNoWhen the reward expires
countdownActiveCountdownBoosterTypeNoCountdown until expiration
groupRewardGroupNoGroup information for the reward
sourcestringNoThe source of the reward for example CRM, Missions, etc

PlayerLevelBooster

Interface for player level boosters.

interface PlayerLevelBooster {
id: string;
playerId: string;
rewardId: string;
boosterRate: number;
timeStart: Date;
timeEnd: Date;
status: RewardStatusEnum.ACTIVE | RewardStatusEnum.INACTIVE;
metadata?: Record<string, any>;
}
PropertyTypeRequiredDescription
idstringYesUnique identifier for the level booster
playerIdstringYesIdentifier of the player who owns the booster
rewardIdstringYesIdentifier of the associated reward
boosterRatenumberYesRate at which the booster applies
timeStartDateYesWhen the booster starts
timeEndDateYesWhen the booster ends
statusRewardStatusEnum.ACTIVE | RewardStatusEnum.INACTIVEYesCurrent status of the booster
metadataRecord<string, any>NoAdditional metadata for the booster

PlayerMissionsBooster

Interface for player mission boosters.

interface PlayerMissionsBooster extends Omit<PlayerLevelBooster, 'id'> {
_id: string;
}
PropertyTypeRequiredDescription
_idstringYesUnique identifier for the mission booster
playerIdstringYesIdentifier of the player who owns the booster
rewardIdstringYesIdentifier of the associated reward
boosterRatenumberYesRate at which the booster applies
timeStartDateYesWhen the booster starts
timeEndDateYesWhen the booster ends
statusRewardStatusEnum.ACTIVE | RewardStatusEnum.INACTIVEYesCurrent status of the booster
metadataRecord<string, any>NoAdditional metadata for the booster

PlayerTokensBooster

Interface for player token boosters.

interface PlayerTokensBooster extends Omit<PlayerLevelBooster, 'id'> {
_id: string;
}
PropertyTypeRequiredDescription
_idstringYesUnique identifier for the token booster
playerIdstringYesIdentifier of the player who owns the booster
rewardIdstringYesIdentifier of the associated reward
boosterRatenumberYesRate at which the booster applies
timeStartDateYesWhen the booster starts
timeEndDateYesWhen the booster ends
statusRewardStatusEnum.ACTIVE | RewardStatusEnum.INACTIVEYesCurrent status of the booster
metadataRecord<string, any>NoAdditional metadata for the booster

ActiveRewardsByType

Interface for active rewards grouped by type.

interface ActiveRewardsByType {
levelBoosters: PlayerLevelBooster[];
missionBoosters: PlayerMissionsBooster[];
tokenBoosters: PlayerTokensBooster[];
}
PropertyTypeRequiredDescription
levelBoostersPlayerLevelBooster[]YesArray of active level boosters
missionBoostersPlayerMissionsBooster[]YesArray of active mission boosters
tokenBoostersPlayerTokensBooster[]YesArray of active token boosters

ListRewardsRequest

Interface for filtering player rewards.

interface ListRewardsRequest extends Omit<PaginationRequest, 'order'> {
playerId?: string;
status?: RewardStatusEnum;
activation?: ActivationType;
source?: string;
rewardType?: RewardTypeEnum;
startDate?: Date;
endDate?: Date;
}
PropertyTypeRequiredDescription
playerIdstringNoFilter by player ID
statusRewardStatusEnum[]NoFilter by reward status
activationActivationTypeNoFilter by activation type
sourcestringNoFilter by source
rewardTypeRewardTypeEnum[]NoFilter by reward type
startDateDateNoFilter by start date
endDateDateNoFilter by end date
limitnumberNoNumber of items per page (from PaginationRequest)
pagenumberNoPage number (from PaginationRequest)

ClaimableRewardsType

Interface for claimable rewards.

type ClaimableRewardsType = {
id: string;
playerId: string;
status: ClaimableRewardStatusEnum;
activation: 'automatic' | 'by_player';
playerCategoryId: string;
earnedReward: unknown;
metadata: Record<string, unknown>;
trigger?: string;
expirationDate: string;
countdown: string;
};
PropertyTypeRequiredDescription
idstringYesUnique identifier for the reward
playerIdstringYesIdentifier of the player who owns the reward
statusClaimableRewardStatusEnumYesCurrent status of the reward
activation'automatic' | 'by_player'YesHow the reward is activated
playerCategoryIdstringYesCategory identifier for the player
earnedRewardunknownYesDetails of the earned reward
metadataRecord<string, unknown>YesAdditional metadata for the reward
triggerstringNoWhat triggered the reward
expirationDatestringYesWhen the reward expires (ISO 8601 format)
countdownstringYesRemaining time until expiration (e.g., "9d 17h 27m")

RewardStatusEnum

Enum for reward statuses.

enum RewardStatusEnum {
ACTIVE = 'active',
INACTIVE = 'inactive',
GRANTED = 'granted',
PENDING = 'pending',
IN_PROGRESS = 'in_progress',
COMPLETED = 'completed',
FAILED = 'failed',
CLAIMED = 'claimed',
UNCLAIMED = 'unclaimed',
DELETED = 'deleted',
EXPIRED = 'expired',
}
ValueDescription
ACTIVEReward is active
INACTIVEReward is inactive
GRANTEDReward has been granted
PENDINGReward is pending
IN_PROGRESSReward is in progress
COMPLETEDReward is completed
FAILEDReward has failed
CLAIMEDReward has been claimed
UNCLAIMEDReward is unclaimed
DELETEDReward has been deleted
EXPIREDReward has expired

ClaimableRewardStatusEnum

export enum ClaimableRewardStatusEnum {
CLAIMED = 'claimed',
UNCLAIMED = 'unclaimed',
GRANTED = 'granted',
PENDING = 'pending',
IN_PROGRESS = 'in_progress',
COMPLETED = 'completed',
FAILED = 'failed',
DELETED = 'deleted',
EXPIRED = 'expired',
DECLINED = 'declined',
}

PaginationResponse

Generic interface for paginated responses.

interface PaginationResponse<T> {
docs: T;
totalDocs: number;
limit: number;
totalPages: number;
page: number;
pagingCounter: number;
hasPrevPage: boolean;
hasNextPage: boolean;
prevPage: number | null;
nextPage: number | null;
}
PropertyTypeRequiredDescription
docsTYesArray of items for the current page
totalDocsnumberYesTotal number of items across all pages
limitnumberYesNumber of items per page
totalPagesnumberYesTotal number of pages
pagenumberYesCurrent page number
pagingCounternumberYesThe starting index of the current page
hasPrevPagebooleanYesWhether there is a previous page
hasNextPagebooleanYesWhether there is a next page
prevPagenumber | nullYesPrevious page number or null if none
nextPagenumber | nullYesNext page number or null if none

SimpleResponse

Generic interface for simple responses.

interface SimpleResponse<T> {
ok: boolean;
data: T | null;
error?: {
code: string;
message: string;
};
}
PropertyTypeRequiredDescription
okbooleanYesWhether the operation was successful
dataT | nullYesResponse data or null if the operation failed
error{ code: string; message: string; }NoError information if the operation failed