UNPKG

@myria/leaderboard-ts-sdk

Version:

Myria Leaderboard typescripts SDK which will manage leaderboard for game developers

233 lines 16.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LeaderboardAPI = void 0; const axios_1 = require("../axios"); const BaseAPI_1 = require("../../clients/BaseAPI"); class LeaderboardAPI { constructor(env) { this.axiosInstance = (0, BaseAPI_1.createAxios)(env); this.axiosWrapper = new axios_1.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; } } exports.LeaderboardAPI = LeaderboardAPI; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVhZGVyYm9hcmRBUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9hcGlzL0xlYWRlcmJvYXJkQVBJLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG9DQUF3QztBQUV4QyxtREFBb0Q7QUErQnBELE1BQWEsY0FBYztJQUl6QixZQUFZLEdBQWE7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFBLHFCQUFXLEVBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLG9CQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQzVCLGlCQUEwQyxFQUMxQyxlQUF1QjtRQUV2QixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFDbEQsR0FBRyxFQUFFLGVBQWU7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUU7Z0JBQ1AscUJBQXFCLEVBQUUsZUFBZTthQUN2QztZQUNELElBQUksRUFBRSxpQkFBaUI7U0FDeEIsQ0FBQyxDQUFxQyxDQUFDO1FBRXhDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUMxQixXQUFxQyxFQUNyQyxlQUF1QjtRQUV2QixNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFDbEQsR0FBRyxFQUFFLGVBQWU7WUFDcEIsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUU7Z0JBQ1AscUJBQXFCLEVBQUUsZUFBZTthQUN2QztZQUNELE1BQU0sRUFBRSxXQUFXO1NBQ3BCLENBQUMsQ0FBZ0UsQ0FBQztRQUVuRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLHFCQUFxQixDQUNoQyxh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