UNPKG

@myria/leaderboard-ts-sdk

Version:

Myria Leaderboard typescripts SDK which will manage leaderboard for game developers

229 lines 16.2 kB
import { AxiosWrapper } from '../axios'; import { createAxios } from '../../clients/BaseAPI'; export class LeaderboardAPI { constructor(env) { this.axiosInstance = createAxios(env); this.axiosWrapper = new AxiosWrapper(this.axiosInstance); } async createLeaderboard(leaderboardParams, developerApiKey) { const result = (await this.axiosWrapper.makeRequest({ url: `/leaderboards`, method: 'POST', headers: { 'x-api-developer-key': developerApiKey, }, data: leaderboardParams, })); return result; } async getLeaderboards(queryParams, developerApiKey) { const result = (await this.axiosWrapper.makeRequest({ url: `/leaderboards`, method: 'GET', headers: { 'x-api-developer-key': developerApiKey, }, params: queryParams, })); return result; } async deleteLeaderboardById(leaderboardId, developerApiKey) { try { const response = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${leaderboardId}`, method: 'DELETE', headers: { 'x-api-developer-key': developerApiKey, }, }); console.log('Response from API:', response); return true; } catch (error) { console.error('Failed to delete leaderboard:', error); return false; } } async getScoresByLeaderboardId(queryScoreParams, developerApiKey) { const filterParam = {}; if (queryScoreParams.filters) { Object.keys(queryScoreParams.filters).map((key) => { var _a, _b; filterParam[`filters[${key}]`] = (_b = (_a = queryScoreParams.filters) === null || _a === void 0 ? void 0 : _a[key]) !== null && _b !== void 0 ? _b : 1; }); } const result = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${queryScoreParams.leaderboardId}/scores`, method: 'GET', headers: { 'x-api-developer-key': developerApiKey, }, params: { limit: queryScoreParams.limit, sortingField: queryScoreParams.sortingField, orderBy: queryScoreParams.orderBy, page: queryScoreParams.page, period: queryScoreParams.period, ...filterParam, }, }); return result; } async getScoresByLeaderboardIdAndUserId(queryScoreByUserIdParams, developerApiKey) { const result = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${queryScoreByUserIdParams.leaderboardId}/scores/by-user-id/${queryScoreByUserIdParams.userId}`, method: 'GET', headers: { 'x-api-developer-key': developerApiKey, }, params: { period: queryScoreByUserIdParams.period, }, }); return result; } async postNewScore(postScoreParam, developerApiKey) { const result = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${postScoreParam.leaderboardId}/scores`, method: 'POST', headers: { 'x-api-developer-key': developerApiKey, }, data: { items: postScoreParam.items, }, }); return result; } async updateRewardDistributionConfig(updateRewardsConfig, developerApiKey) { const result = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${updateRewardsConfig.leaderboardId}/rewards`, method: 'PUT', headers: { 'x-api-developer-key': developerApiKey, }, data: updateRewardsConfig.rewardConfig, }); return result; } async getLeaderboardDetailsInfo(getLeaderboardDetailsParams, developerApiKey) { const result = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${getLeaderboardDetailsParams.leaderboardIdOrName}`, method: 'GET', headers: { 'x-api-developer-key': developerApiKey, }, }); return result; } async updateGameMetadata(params, developerApiKey) { const result = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${params.leaderboardId}/metadata`, method: 'PUT', headers: { 'x-api-developer-key': developerApiKey, }, data: { gameMetadata: params.gameMetadata, }, }); return result; } async updateConfigMetadata(params, developerApiKey) { const result = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${params.leaderboardId}/metadata`, method: 'PUT', headers: { 'x-api-developer-key': developerApiKey, }, data: { configMetadata: params.configMetadata, }, }); return result; } async updateGlobalMetadata(params, developerApiKey) { const result = await this.axiosWrapper.makeRequest({ url: `/leaderboards/${params.leaderboardId}/metadata`, method: 'PUT', headers: { 'x-api-developer-key': developerApiKey, }, data: { configMetadata: params.configMetadata, gameMetadata: params.gameMetadata, }, }); return result; } async getRewardData(params) { const result = await this.axiosWrapper.makeRequest({ url: `/rewards/by-user/${params.userId}`, method: 'GET', params: { leaderboardId: params.leaderboardId, status: params.rewardStatus, limit: params.limit || 100, page: params.page || 1, }, }); return result; } async preClaim(params) { const result = await this.axiosWrapper.makeRequest({ url: `/rewards/pre-claim/by-user/${params.userId}`, method: 'PATCH', data: { leaderboardId: params.leaderboardId, rewardIds: params.rewardIds, }, headers: { 'stark-key': params.xStarkKey, 'x-timestamp': params.xTimestamp, 'x-signature': params.xSignature, }, }); return result; } async postClaimReward(params) { const result = await this.axiosWrapper.makeRequest({ url: `/rewards/post-claim/by-user/${params.userId}`, method: 'PATCH', data: params.errorMessage ? { leaderboardId: params.leaderboardId, rewardIds: params.rewardIds, transactionHash: params.transactionHash, errorMessage: params.errorMessage, } : { leaderboardId: params.leaderboardId, rewardIds: params.rewardIds, transactionHash: params.transactionHash, }, headers: { 'Stark-key': params.xStarkKey, 'x-timestamp': params.xTimestamp, 'x-signature': params.xSignature, }, }); return result; } async updateUserInfo(params, apiKey) { const result = await this.axiosWrapper.makeRequest({ url: `/users/${params.userId}`, method: 'PATCH', headers: { 'x-api-developer-key': apiKey, }, data: { username: params.username, displayName: params.displayName, avatarUrl: params.avatarUrl, }, }); return result; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyYm9hcmRBUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9hcGlzL0xlYWRlcmJvYXJkQVBJLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBK0JwRCxNQUFNLE9BQU8sY0FBYztJQUl6QixZQUFZLEdBQWE7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FDNUIsaUJBQTBDLEVBQzFDLGVBQXVCO1FBRXZCLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUNsRCxHQUFHLEVBQUUsZUFBZTtZQUNwQixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxxQkFBcUIsRUFBRSxlQUFlO2FBQ3ZDO1lBQ0QsSUFBSSxFQUFFLGlCQUFpQjtTQUN4QixDQUFDLENBQXFDLENBQUM7UUFFeEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQzFCLFdBQXFDLEVBQ3JDLGVBQXVCO1FBRXZCLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUNsRCxHQUFHLEVBQUUsZUFBZTtZQUNwQixNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUCxxQkFBcUIsRUFBRSxlQUFlO2FBQ3ZDO1lBQ0QsTUFBTSxFQUFFLFdBQVc7U0FDcEIsQ0FBQyxDQUFnRSxDQUFDO1FBRW5FLE9B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