@myria/leaderboard-ts-sdk
Version:
Myria Leaderboard typescripts SDK which will manage leaderboard for game developers
229 lines • 16.2 kB
JavaScript
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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