Pular para o conteúdo principal

Módulo de procesamiento de recompensas

El Módulo de procesamiento de recompensas proporciona funcionalidad para gestionar las recompensas de los jugadores, incluida la reclamación de recompensas, la activación de potenciadores y la recuperación de información sobre los potenciadores y recompensas activos en el SDK del cliente web de Gamanza Engage.

Acceso al módulo

El RewardsProcessorModule se inicializa internamente por el SDK y no debe instanciarse directamente. Se puede acceder a través de la instancia principal del SDK.

// Ejemplo de acceso al RewardsProcessorModule a través del SDK
const { RewardsProcessor } = GamanzaEngageWebClientSDK.getInstance();

Métodos

playerClaimRewardsByGroupId

Envía una solicitud para reclamar las recompensas de los jugadores por el ID del grupo de recompensas.

Firma:

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

Parámetros:

NombreTipoDescripción
groupIdstringEl identificador único del grupo de recompensas a reclamar

Devuelve:

TipoDescripción
Promise<SimpleResponse<ClaimableRewardsType[]>>Una promesa que se resuelve en una respuesta simple que contiene un array de recompensas reclamadas o un error

Ejemplo:

// Reclamar recompensas por ID de grupo
const groupId = "group-123";
const response = await sdk.RewardsProcessor.playerClaimRewardsByGroupId(groupId);

if (response.ok) {
console.log('Recompensas reclamadas correctamente:', response.data);
} else {
console.error('Error al reclamar recompensas:', response.error);
}

playerClaimMissionRewards

Envía una solicitud para reclamar las recompensas de misión del jugador autenticado actual.

Reclama una recompensa originada por una misión completada.

⚠️ Este método es parte del módulo RewardsProcessor, no del módulo Missions.

Los parámetros requeridos (bundleStateId y missionStateId) deben extraerse de los metadatos de las recompensas donde el origen === "misiones" devuelto por getPlayerRewards().

Firma:

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

Parámetros:

NombreTipoDescripción
playerBundleStateIdstringEl identificador único del estado del paquete del jugador
missionStateIdstringEl identificador único del estado de la misión

Devuelve:

TipoDescripción
Promise<SimpleResponse<ClaimableRewardsType[]>>Una promesa que se resuelve en una respuesta simple que contiene un arreglo de recompensas reclamadas o un error

Ejemplo:

// Reclamar recompensas de misión
const playerBundleStateId = "bundle-state-123";
const missionStateId = "mission-state-456";

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

if (response.ok) {
console.log('Se reclamaron exitosamente las recompensas de la misión:', response.data);
} else {
console.error('No se pudieron reclamar las recompensas de la misión:', response.error);
}

playerActivateBooster

Activa un potenciador otorgado al jugador autenticado actual.

Firma:

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

Parámetros:

NombreTipoDescripción
rewardIdstringEl identificador único de la recompensa que se va a activar
payloadActivateBoosterRequestInformación adicional requerida para activar el potenciador según el tipo

Devuelve:

TipoDescripción
Promise<SimpleResponse<PlayerRewardActive>>Una promesa que se resuelve en una respuesta simple que contiene la recompensa activada o un error

Ejemplo:

// Activar un potenciador de nivel
const rewardId = "reward-123";
const payload = {
boosterType: "level",
levelId: "level-456"
};

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

if (response.ok) {
console.log('Se activó exitosamente el potenciador:', response.data);
} else {
console.error('No se pudo activar el potenciador:', response.error);
}

// Activar un potenciador de misión
const missionBoosterPayload = {
boosterType: "mission",
missionId: "mission-789"
};

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

getPlayerActiveLevelBooster

Devuelve la lista de potenciadores de nivel activos para el jugador autenticado actual.

Firma:

getPlayerActiveLevelBooster(): Promise<PlayerLevelBooster[]>

Devuelve:

TipoDescripción
Promise<PlayerLevelBooster[]>Una promesa que se resuelve en un arreglo de potenciadores de nivel activos

Ejemplo:

// Obtener potenciadores de nivel activos
const levelBoosters = await sdk.RewardsProcessor.getPlayerActiveLevelBooster();

console.log(`Se encontraron ${levelBoosters.length} potenciadores de nivel activos`);
levelBoosters.forEach(booster => {
console.log(`ID del potenciador: ${booster.id}`);
console.log(`Tasa del potenciador: ${booster.boosterRate}`);
console.log(`Activo desde ${booster.timeStart} hasta ${booster.timeEnd}`);
});

getPlayerActiveMissionBoosters

Devuelve la lista de potenciadores de misión activos para el jugador autenticado actual.

Firma:

getPlayerActiveMissionBoosters(): Promise<PlayerMissionsBooster[]>

Devuelve:

TipoDescripción
Promise<PlayerMissionsBooster[]>Una promesa que se resuelve en una matriz de potenciadores de misión activos

Ejemplo:

// Obtener potenciadores de misión activos
const missionBoosters = await sdk.RewardsProcessor.getPlayerActiveMissionBoosters();

console.log(`Se encontraron ${missionBoosters.length} potenciadores de misión activos`);
missionBoosters.forEach(booster => {
console.log(`ID del potenciador: ${booster._id}`);
console.log(`Tasa del potenciador: ${booster.boosterRate}`);
console.log(`Activo desde ${booster.timeStart} hasta ${booster.timeEnd}`);
});

getPlayerActiveTokenBoosters

Devuelve la lista de potenciadores de token activos para el jugador autenticado actual.

Firma:

getPlayerActiveTokenBoosters(): Promise<PlayerTokensBooster[]>

Devuelve:

TipoDescripción
Promise<PlayerTokensBooster[]>Una promesa que se resuelve en una matriz de potenciadores de token activos

Ejemplo:

// Obtener potenciadores de token activos
const tokenBoosters = await sdk.RewardsProcessor.getPlayerActiveTokenBoosters();

console.log(`Se encontraron ${tokenBoosters.length} potenciadores de token activos`);
tokenBoosters.forEach(booster => {
console.log(`ID del potenciador: ${booster._id}`);
console.log(`Tasa del potenciador: ${booster.boosterRate}`);
console.log(`Activo desde ${booster.timeStart} hasta ${booster.timeEnd}`);
});

getPlayerAllActiveBoostersByType

Devuelve la lista de todos los potenciadores activos por tipo para el jugador autenticado actual.

Firma:

getPlayerAllActiveBoostersByType(): Promise<ActiveRewardsByType>

Devuelve:

TipoDescripción
Promise<ActiveRewardsByType>Una promesa que se resuelve en un objeto que contiene matrices de diferentes tipos de potenciadores activos

Ejemplo:

// Obtener todos los potenciadores activos por tipo
const allBoosters = await sdk.RewardsProcessor.getPlayerAllActiveBoostersByType();

console.log(`Potenciadores de nivel: ${allBoosters.levelBoosters.length}`);
console.log(`Potenciadores de misión: ${allBoosters.missionBoosters.length}`);
console.log(`Potenciadores de token: ${allBoosters.tokenBoosters.length}`);

// Acceder a tipos de potenciadores específicos
if (allBoosters.levelBoosters.length > 0) {
const firstLevelBooster = allBoosters.levelBoosters[0];
console.log(`Tasa del primer potenciador de nivel: ${firstLevelBooster.boosterRate}`);
}

getPlayerRewards

Devuelve la lista de recompensas para el jugador autenticado actual. La respuesta se puede modificar en función de los filtros de argumentos de la solicitud.

Firma:

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

Parámetros:

NombreTipoDescripción
requestListRewardsRequestObjeto que contiene parámetros de filtro para la lista de recompensas

Devuelve:

TipoDescripción
Promise<PaginationResponse<PlayerRewardActive[]>>Una promesa que se resuelve en una respuesta paginada que contiene una matriz de recompensas de jugador

Ejemplo:

// Obtener recompensas de jugador con filtros
const request = {
limit: 10,
page: 1,
status: ["active", "granted"],
rewardType: ["tokens", "level_booster"]
};

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

console.log(`Total de recompensas: ${response.totalDocs}`);
console.log(`Página ${response.page} de ${response.totalPages}`);

response.docs.forEach(reward => {
console.log(`ID de recompensa: ${reward.id}`);
console.log(`Estado: ${reward.status}`);
console.log(`Activación: ${reward.activation}`);
});

// Obtener la siguiente página
if (response.hasNextPage) {
const nextPageRequest = {
...request,
page: response.nextPage
};
const nextPageResponse = await sdk.RewardsProcessor.getPlayerRewards(nextPageRequest);
}

playerRequestDeclineReward

Permite al jugador autenticado rechazar una recompensa específica por su ID de recompensa.

Importante:

  • Esta opción solo surte efecto si su instancia está configurada para permitir que el jugador active las recompensas. Si esta configuración está desactivada, las recompensas se asignan automáticamente y esta opción no se aplica. Para habilitar las recompensas rechazadas por el jugador, comuníquese con su Gerente de Éxito del Cliente.

Efectos secundarios:

  • En caso de éxito, el SDK borra las memorias caché de recompensas para que las lecturas posteriores reflejen el estado actualizado.

Firma:

playerRequestDeclineReward(rewardId: string): Promise<SimpleResponse<ClaimableRewardsType>>

Parámetros:

NombreTipoDescripción
rewardIdstringEl identificador único de la recompensa a rechazar

Devuelve:

TipoDescripción
Promise<SimpleResponse<ClaimableRewardsType>>Se resuelve { ok: true, data: ClaimableRewardsType } en caso de éxito; de lo contrario { ok: false, data: null, error }

Ejemplo:

// Rechazar una recompensa específica por su ID
const rewards = await sdk.RewardsProcessor.getPlayerRewards({
status: 'unclaimed',
page: 1,
limit: 10,
});

if (!rewards.docs.length) throw new Error('No hay recompensas disponibles para rechazar');

const rewardToDecline = rewards.docs[0];
const declineResponse = await sdk.RewardsProcessor.playerRequestDeclineReward(rewardToDecline.id);

if (declineResponse.ok) {
console.log('Recompensa rechazada:', declineResponse.data);
} else {
console.error('No se pudo rechazar la recompensa:', declineResponse.error);
}

playerRequestDeclineMissionRewards

Permite al jugador autenticado rechazar las recompensas otorgadas por un Paquete de Misiones.

Importante:

  • Esta opción solo surte efecto si su instancia está configurada para permitir que el jugador active las recompensas. Si esta configuración está desactivada, las recompensas se asignan automáticamente y esta opción no se aplica. Para habilitar las recompensas rechazadas por el jugador, comuníquese con su Gerente de Éxito del Cliente.

Efectos secundarios:

  • En caso de éxito, el SDK borra las memorias caché de recompensas para que las lecturas posteriores reflejen el estado actualizado.

Los parámetros requeridos (bundleStateId y missionStateId) deben extraerse de los metadatos de las recompensas donde la fuente === "missions" devueltos por getPlayerRewards().

Firma:

playerRequestDeclineMissionRewards(bundleStateId: string, missionStateId: string): Promise<SimpleResponse<null>>

Parámetros:

NombreTipoDescripción
bundleStateIdcadenaEl identificador del estado del paquete de jugadores asociado con el paquete de misiones
missionStateIdcadenaEl identificador del estado de la misión cuyos premios deben ser rechazados

Devuelve:

TipoDescripción
Promise<SimpleResponse<null>>Una promesa que se resuelve en una respuesta simple que indica éxito con data establecida en null, o un error cuando no es exitosa

Ejemplo:

// Rechazar premios originados de un paquete de misiones
const rewards = await sdk.RewardsProcessor.getPlayerRewards({
status: 'unclaimed',
page: 1,
limit: 10,
});

// Encuentra una recompensa que se originó de misiones
const missionReward = rewards.docs.find(r => r.source === 'missions');
if (!missionReward || !missionReward.metadata) throw new Error('No se encontró ninguna recompensa de la misión');

const response = await sdk.RewardsProcessor.playerRequestDeclineMissionRewards(
missionReward.metadata.bundleStateId,
missionReward.metadata.missionStateId,
);

if (response.ok) {
console.log('Recompensas de misión rechazadas con éxito');
} else {
console.error('No se pudo rechazar las recompensas de la misión:', response.error);
}

playerRequestDeclineRewardByGroupId

Permite al jugador autenticado rechazar múltiples recompensas otorgadas especificando el ID del grupo de recompensas.

Importante:

  • Esta opción solo surte efecto si su instancia está configurada para permitir que el jugador active las recompensas. Si esta configuración está desactivada, las recompensas se asignan automáticamente y esta opción no se aplica. Para habilitar las recompensas rechazadas por el jugador, comuníquese con su Gerente de Éxito del Cliente.

Efectos secundarios:

  • En caso de éxito, el SDK borra las cachés de recompensas para que las lecturas posteriores reflejen el estado actualizado.

Notas:

  • El groupId se puede obtener de un elemento de recompensa a través de reward.group.groupId al enumerar las recompensas con getPlayerRewards().

Firma:

playerRequestDeclineRewardByGroupId(groupId: string): Promise<SimpleResponse<null>>

Parámetros:

NombreTipoDescripción
groupIdcadenaEl identificador único del grupo de recompensas cuyos premios deben ser rechazados

Devuelve:

TipoDescripción
Promise<SimpleResponse<null>>Una promesa que se resuelve en una respuesta simple que indica éxito con data establecida en null, o un error cuando no es exitosa

Ejemplo:

// Rechazar todas las recompensas por un ID de grupo específico
const rewards = await sdk.RewardsProcessor.getPlayerRewards({
status: 'unclaimed',
page: 1,
limit: 10,
});

if (!rewards.docs.length) throw new Error('No hay recompensas disponibles para rechazar');

// Ubicar una recompensa con un identificador de grupo
const rewardWithGroup = rewards.docs.find(r => r.group && r.group.groupId);
if (!rewardWithGroup) throw new Error('No se encontró una recompensa agrupada');

const declineByGroupResponse = await sdk.RewardsProcessor.playerRequestDeclineRewardByGroupId(
rewardWithGroup.group.groupId
);

if (declineByGroupResponse.ok) {
console.log('Las recompensas del grupo se rechazaron con éxito');
} else {
console.error('No se pudieron rechazar las recompensas por ID de grupo:', declineByGroupResponse.error);
}

Interfaces relacionadas

ActivateBoosterRequest

Interfaz para activar un potenciador.

interface ActivateBoosterRequest {
boosterType: BoosterType;
levelId?: string;
missionId?: string;
}
PropiedadTipoRequeridoDescripción
boosterTypeBoosterTypeEl tipo de potenciador a activar (nivel, misión o tokens)
levelIdstringNoEl ID de nivel (requerido cuando boosterType es "level")
missionIdstringNoEl ID de la misión (requerido cuando boosterType es "mission")

BoosterType

Enum para tipos de potenciadores.

enum BoosterType {
LEVEL = 'level',
MISSION = 'mission',
TOKENS = 'tokens',
}
ValorDescripción
LEVELTipo de potenciador de nivel
MISSIONTipo de potenciador de misión
TOKENSTipo de potenciador de tokens

PlayerRewardActive

Interfaz para recompensas activas del jugador.

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;
}
PropiedadTipoRequeridoDescripción
idstringIdentificador único de la recompensa
statusRewardStatusEnum | ExternalRewardStatusEstado actual de la recompensa
playerIdstringIdentificador del jugador que posee la recompensa
activationActivationTypeCómo se activa la recompensa (automática o por el jugador)
playerCategoryIdstringIdentificador de categoría del jugador
earnedRewardRecord<string, any>Detalles de la recompensa ganada
metadataRecord<string, any>NoMetadatos adicionales para la recompensa
triggerstringNoQué activó la recompensa
expirationDateDateNoCuándo vence la recompensa
countdownActiveCountdownBoosterTypeNoCuenta atrás hasta el vencimiento
groupRewardGroupNoInformación de grupo para la recompensa
sourcestringNoEl origen de la recompensa, por ejemplo CRM, Misiones, etc

PlayerLevelBooster

Interfaz para los potenciadores de nivel de jugador.

interfaz PlayerLevelBooster {
id: string;
playerId: string;
rewardId: string;
boosterRate: number;
timeStart: Date;
timeEnd: Date;
status: RewardStatusEnum.ACTIVE | RewardStatusEnum.INACTIVE;
metadata?: Record<string, any>;
}
PropiedadTipoRequeridoDescripción
idstringIdentificador único para el potenciador de nivel
playerIdstringIdentificador del jugador que es dueño del potenciador
rewardIdstringIdentificador de la recompensa asociada
boosterRatenumberTasa a la que se aplica el potenciador
timeStartDateCuándo comienza el potenciador
timeEndFechaCuándo termina el potenciador
estadoRewardStatusEnum.ACTIVE | RewardStatusEnum.INACTIVEEstado actual del potenciador
metadatosRecord<string, any>NoMetadatos adicionales para el potenciador

Potenciador de misiones del jugador

Interfaz para potenciadores de misiones de jugador.

interfaz PlayerMissionsBooster extiende Omit<PlayerLevelBooster, 'id'> {
_id: string;
}
PropiedadTipoRequeridoDescripción
_idcadenaIdentificador único para el impulsor de la misión
playerIdcadenaIdentificador del jugador que posee el impulsor
rewardIdcadenaIdentificador de la recompensa asociada
boosterRatenúmeroTasa a la que se aplica el impulsor
timeStartFechaCuándo comienza el impulsor
timeEndFechaCuándo termina el impulsor
estadoRewardStatusEnum.ACTIVE | RewardStatusEnum.INACTIVEEstado actual del impulsor
metadatosRecord<string, any>NoMetadatos adicionales para el impulsor

PlayerTokensBooster

Interfaz para los impulsores de fichas de jugador.

interface PlayerTokensBooster extends Omit<PlayerLevelBooster, 'id'> {
_id: string;
}
PropiedadTipoRequeridoDescripción
_idcadenaIdentificador único para el impulsor de fichas
playerIdcadenaIdentificador del jugador que posee el impulsor
rewardIdcadenaIdentificador de la recompensa asociada
tasa de refuerzonúmeroTasa a la que se aplica el refuerzo
fecha de inicioFechaCuándo comienza el refuerzo
fecha de finalizaciónFechaCuándo termina el refuerzo
estadoRewardStatusEnum.ACTIVE | RewardStatusEnum.INACTIVEEstado actual del refuerzo
metadatosRecord<string, any>NoMetadatos adicionales para el refuerzo

Recompensas activas por tipo

Interfaz para recompensas activas agrupadas por tipo.

interfaz ActiveRewardsByType {
levelBoosters: PlayerLevelBooster[];
missionBoosters: PlayerMissionsBooster[];
tokenBoosters: PlayerTokensBooster[];
}
PropiedadTipoRequeridoDescripción
levelBoostersPlayerLevelBooster[]Matriz de refuerzos de nivel activos
missionBoostersPlayerMissionsBooster[]Matriz de refuerzos de misión activos
tokenBoostersPlayerTokensBooster[]Matriz de refuerzos de token activos

Solicitud de lista de recompensas

Interfaz para filtrar las recompensas del jugador.

interfaz ListRewardsRequest extiende Omit<PaginationRequest, 'order'> {
playerId?: string;
status?: RewardStatusEnum[] | RewardStatusEnum;
activation?: ActivationType;
source?: string;
rewardType?: RewardTypeEnum[] | RewardTypeEnum;
startDate?: Date;
endDate?: Date;
}
PropiedadTipoRequeridoDescripción
playerIdcadenaNoFiltrar por ID de jugador
estadoRewardStatusEnum[]RewardStatusEnum`NoFiltrar por estado de recompensa (acepta un solo valor o una matriz)
activaciónActivationTypeNoFiltrar por tipo de activación
fuentecadenaNoFiltrar por fuente
tipoRecompensaRewardTypeEnum[]RewardTypeEnum`NoFiltrar por tipo de recompensa (acepta un solo valor o una matriz)
fechaInicioFechaNoFiltrar por fecha de inicio
fechaFinDateNoFiltrar por fecha de finalización
limitnumberNoNúmero de elementos por página (de PaginationRequest)
pagenumberNoNúmero de página (de PaginationRequest)

ClaimableRewardsType

Interfaz para recompensas reclamables.

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;
};
PropiedadTipoRequeridoDescripción
idstringIdentificador único de la recompensa
playerIdstringIdentificador del jugador que posee la recompensa
statusClaimableRewardStatusEnumEstado actual de la recompensa
activation'automatic' | 'by_player'Cómo se activa la recompensa
playerCategoryIdstringIdentificador de categoría para el jugador
earnedRewardunknownDetalles de la recompensa ganada
metadataRecord<string, unknown>Metadatos adicionales para la recompensa
triggerstringNoQué activó la recompensa
expirationDatestringCuándo expira la recompensa (formato ISO 8601)
countdownstringTiempo restante hasta el vencimiento (p. ej., "9d 17h 27m")

RewardStatusEnum

Enum para los estados de recompensa.

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',
BOUNCED = 'bounced',
DECLINED = 'declined',
}
ValueDescription
ACTIVELa recompensa está activa
INACTIVOLa recompensa está inactiva
OTORGADOLa recompensa ha sido otorgada
PENDIENTELa recompensa está pendiente
EN_PROGRESOLa recompensa está en progreso
COMPLETADOLa recompensa está completada
FALLADOLa recompensa ha fallado
RECLAMADOLa recompensa ha sido reclamada
SIN_RECLAMARLa recompensa no ha sido reclamada
ELIMINADOLa recompensa ha sido eliminada
VENCIDOLa recompensa ha vencido
REBOTADOLa entrega de la recompensa rebotó (no se pudo entregar)
RECHAZADOLa recompensa fue rechazada por el jugador o el sistema

RewardTypeEnum

export enum RewardTypeEnum {
TOKENS = 'tokens',
XP = 'xp',
BONUS_OFFER = 'bonus_offer',
LEVEL_BOOSTER = 'level_booster',
MISSION_BOOSTER = 'mission_booster',
TOKEN_BOOSTER = 'token_booster',
EXTERNAL = 'external',
CASH = 'cash',
MINI_GAME = 'mini_game',
}

Recompensa (unión discriminada)

interface RewardTranslation {
language: string;
description: string;
}

interface BaseReward {
type: RewardTypeEnum;
rewardType: RewardTypeEnum;
translations?: RewardTranslation[];
level: number;
activation: string; // @TODO: define this
boosterRate: number;
expirationValidityTime?: {
timeType: string; // @TODO: define this
};
timeFrame: ISO8601Duration;
termsAndConditions?: Pick<TranslationType, 'language' | 'description'>[];
}

interface TokensReward extends Pick<BaseReward, 'type' | 'termsAndConditions' | 'translations'> {
type: RewardTypeEnum.TOKENS;
amount: number;
}

interface BonusOfferReward extends Pick<BaseReward, 'type'> {
type: RewardTypeEnum.BONUS_OFFER;
bonusId: string;
bonusByCurrency: {
[key: string]: {
name: string;
bonusOfferId: string;
};
};
}

interface LevelBoosterReward extends BaseReward {
type: RewardTypeEnum.LEVEL_BOOSTER;
}

interface MissionBoosterReward extends BaseReward {
type: RewardTypeEnum.MISSION_BOOSTER;
}

interface TokenBoosterReward extends BaseReward {
type: RewardTypeEnum.TOKEN_BOOSTER;
}

interface ExternalReward extends Pick<BaseReward, 'type'> {
type: RewardTypeEnum.EXTERNAL;
imageUrl: string;
description: string;
}

export type Reward = BaseReward & (
| TokensReward
| BonusOfferReward
| LevelBoosterReward
| MissionBoosterReward
| TokenBoosterReward
| ExternalReward
);

ClaimableRewardStatusEnum

export enum ClaimableRewardStatusEnum {
CLAIMED = 'reclamado',
UNCLAIMED = 'sin reclamar',
GRANTED = 'otorgado',
PENDING = 'pendiente',
IN_PROGRESS = 'en progreso',
COMPLETED = 'completado',
FAILED = 'fallado',
DELETED = 'eliminado',
EXPIRED = 'vencido',
DECLINED = 'rechazado',
}

PaginationResponse

Interfaz genérica para respuestas paginadas.

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;
}
PropiedadTipoRequeridoDescripción
docsTArreglo de elementos para la página actual
totalDocsnumberNúmero total de elementos en todas las páginas
limitnumberNúmero de elementos por página
totalPagesnumberNúmero total de páginas
pagenumberNúmero de página actual
pagingCounternumberEl índice de inicio de la página actual
hasPrevPagebooleanSi hay una página anterior
hasNextPagebooleanSi hay una página siguiente
prevPagenumber | nullNúmero de página anterior o nulo si no hay
nextPagenumber | nullNúmero de página siguiente o nulo si no hay

SimpleResponse

Interfaz genérica para respuestas simples.

interface SimpleResponse<T> {
ok: boolean;
data: T | null;
error?: {
code: string;
message: string;
};
}
PropiedadTipoRequeridoDescripción
okbooleanoSi la operación fue exitosa
dataT | nullDatos de respuesta o nulo si la operación falló
error{ code: string; message: string; }NoInformación de error si la operación falló