@retroachievements/api 0.0.0-development
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +103 -0
- package/dist/__playground.d.ts +7 -0
- package/dist/achievement/getAchievementUnlocks.d.ts +45 -0
- package/dist/achievement/index.d.ts +2 -0
- package/dist/achievement/models/achievement-unlock-entity.model.d.ts +6 -0
- package/dist/achievement/models/get-achievement-unlocks-response.model.d.ts +8 -0
- package/dist/achievement/models/index.d.ts +2 -0
- package/dist/api.cjs.development.js +2363 -0
- package/dist/api.cjs.development.js.map +1 -0
- package/dist/api.cjs.production.min.js +2 -0
- package/dist/api.cjs.production.min.js.map +1 -0
- package/dist/api.esm.js +2333 -0
- package/dist/api.esm.js.map +1 -0
- package/dist/console/getConsoleIds.d.ts +22 -0
- package/dist/console/getGameList.d.ts +52 -0
- package/dist/console/index.d.ts +3 -0
- package/dist/console/models/console-id.model.d.ts +4 -0
- package/dist/console/models/game-list.model.d.ts +15 -0
- package/dist/console/models/get-console-ids-response.model.d.ts +4 -0
- package/dist/console/models/get-game-list-response.model.d.ts +15 -0
- package/dist/console/models/index.d.ts +4 -0
- package/dist/feed/getAchievementOfTheWeek.d.ts +48 -0
- package/dist/feed/getActiveClaims.d.ts +38 -0
- package/dist/feed/getTicketData.d.ts +158 -0
- package/dist/feed/getTopTenUsers.d.ts +24 -0
- package/dist/feed/index.d.ts +5 -0
- package/dist/feed/models/achievement-of-the-week.model.d.ts +32 -0
- package/dist/feed/models/achievement-ticket-stats-response.model.d.ts +7 -0
- package/dist/feed/models/achievement-ticket-stats.model.d.ts +7 -0
- package/dist/feed/models/active-claim.model.d.ts +49 -0
- package/dist/feed/models/game-ticket-stats.model.d.ts +9 -0
- package/dist/feed/models/game-tickets-response.model.d.ts +7 -0
- package/dist/feed/models/get-achievement-of-the-week-response.model.d.ts +32 -0
- package/dist/feed/models/get-active-claims-response.model.d.ts +19 -0
- package/dist/feed/models/get-top-ten-users-response.model.d.ts +10 -0
- package/dist/feed/models/index.d.ts +19 -0
- package/dist/feed/models/most-ticketed-games-response.model.d.ts +12 -0
- package/dist/feed/models/most-ticketed-games.model.d.ts +12 -0
- package/dist/feed/models/recent-tickets-response.model.d.ts +6 -0
- package/dist/feed/models/recent-tickets.model.d.ts +6 -0
- package/dist/feed/models/response-ticket-entity.model.d.ts +24 -0
- package/dist/feed/models/ticket-entity.model.d.ts +24 -0
- package/dist/feed/models/tickets-by-user-response.model.d.ts +8 -0
- package/dist/feed/models/top-ten-users-entity.model.d.ts +5 -0
- package/dist/feed/models/top-ten-users.model.d.ts +2 -0
- package/dist/feed/models/user-ticket-stats.model.d.ts +8 -0
- package/dist/game/getAchievementCount.d.ts +31 -0
- package/dist/game/getAchievementDistribution.d.ts +57 -0
- package/dist/game/getGame.d.ts +48 -0
- package/dist/game/getGameExtended.d.ts +68 -0
- package/dist/game/getGameRankAndScore.d.ts +38 -0
- package/dist/game/getGameRating.d.ts +38 -0
- package/dist/game/index.d.ts +7 -0
- package/dist/game/models/achievement-count.model.d.ts +4 -0
- package/dist/game/models/achievement-distribution-flags.model.d.ts +4 -0
- package/dist/game/models/game-extended-achievement-entity.model.d.ts +15 -0
- package/dist/game/models/game-extended-claim-entity.model.d.ts +7 -0
- package/dist/game/models/game-extended.model.d.ts +25 -0
- package/dist/game/models/game-rank-and-score-entity.model.d.ts +6 -0
- package/dist/game/models/game-rating.model.d.ts +9 -0
- package/dist/game/models/game.model.d.ts +19 -0
- package/dist/game/models/get-achievement-count-response.model.d.ts +4 -0
- package/dist/game/models/get-achievement-distribution-response.model.d.ts +1 -0
- package/dist/game/models/get-game-extended-response.model.d.ts +50 -0
- package/dist/game/models/get-game-rank-and-score-response.model.d.ts +8 -0
- package/dist/game/models/get-game-rating-response.model.d.ts +9 -0
- package/dist/game/models/get-game-response.model.d.ts +19 -0
- package/dist/game/models/index.d.ts +14 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +8 -0
- package/dist/user/getAchievementsEarnedBetween.d.ts +59 -0
- package/dist/user/getAchievementsEarnedOnDay.d.ts +57 -0
- package/dist/user/getGameInfoAndUserProgress.d.ts +80 -0
- package/dist/user/getUserGameRankAndScore.d.ts +44 -0
- package/dist/user/getUserPoints.d.ts +30 -0
- package/dist/user/getUserProgress.d.ts +49 -0
- package/dist/user/getUserRecentlyPlayedGames.d.ts +50 -0
- package/dist/user/getUserSummary.d.ts +32 -0
- package/dist/user/index.d.ts +9 -0
- package/dist/user/models/dated-user-achievement.model.d.ts +17 -0
- package/dist/user/models/dated-user-achievements-response.model.d.ts +19 -0
- package/dist/user/models/game-info-and-user-progress.model.d.ts +12 -0
- package/dist/user/models/get-game-info-and-user-progress-response.model.d.ts +14 -0
- package/dist/user/models/get-user-game-rank-and-score-response.model.d.ts +8 -0
- package/dist/user/models/get-user-points-response.model.d.ts +4 -0
- package/dist/user/models/get-user-progress-response.model.d.ts +10 -0
- package/dist/user/models/get-user-recently-played-games-response.model.d.ts +16 -0
- package/dist/user/models/get-user-summary-response.model.d.ts +82 -0
- package/dist/user/models/index.d.ts +14 -0
- package/dist/user/models/user-game-rank-and-score.model.d.ts +8 -0
- package/dist/user/models/user-points.model.d.ts +4 -0
- package/dist/user/models/user-progress.model.d.ts +10 -0
- package/dist/user/models/user-recently-played-games.model.d.ts +16 -0
- package/dist/user/models/user-summary.model.d.ts +83 -0
- package/dist/utils/internal/apiBaseUrl.d.ts +1 -0
- package/dist/utils/internal/buildRequestUrl.d.ts +2 -0
- package/dist/utils/internal/call.d.ts +20 -0
- package/dist/utils/internal/index.d.ts +4 -0
- package/dist/utils/internal/serializeProperties.d.ts +4 -0
- package/dist/utils/public/buildAuthorization.d.ts +22 -0
- package/dist/utils/public/index.d.ts +3 -0
- package/dist/utils/public/models/auth-object.model.d.ts +19 -0
- package/dist/utils/public/models/index.d.ts +1 -0
- package/package.json +117 -0
- package/src/__playground.ts +27 -0
- package/src/achievement/getAchievementUnlocks.test.ts +71 -0
- package/src/achievement/getAchievementUnlocks.ts +80 -0
- package/src/achievement/index.ts +2 -0
- package/src/achievement/models/achievement-unlock-entity.model.ts +6 -0
- package/src/achievement/models/get-achievement-unlocks-response.model.ts +8 -0
- package/src/achievement/models/index.ts +2 -0
- package/src/console/getConsoleIds.test.ts +53 -0
- package/src/console/getConsoleIds.ts +43 -0
- package/src/console/getGameList.test.ts +82 -0
- package/src/console/getGameList.ts +94 -0
- package/src/console/index.ts +3 -0
- package/src/console/models/console-id.model.ts +4 -0
- package/src/console/models/game-list.model.ts +16 -0
- package/src/console/models/get-console-ids-response.model.ts +1 -0
- package/src/console/models/get-game-list-response.model.ts +16 -0
- package/src/console/models/index.ts +4 -0
- package/src/feed/getAchievementOfTheWeek.test.ts +167 -0
- package/src/feed/getAchievementOfTheWeek.ts +80 -0
- package/src/feed/getActiveClaims.test.ts +81 -0
- package/src/feed/getActiveClaims.ts +68 -0
- package/src/feed/getTicketData.test.ts +349 -0
- package/src/feed/getTicketData.ts +286 -0
- package/src/feed/getTopTenUsers.test.ts +101 -0
- package/src/feed/getTopTenUsers.ts +51 -0
- package/src/feed/index.ts +5 -0
- package/src/feed/models/achievement-of-the-week.model.ts +27 -0
- package/src/feed/models/achievement-ticket-stats-response.model.ts +7 -0
- package/src/feed/models/achievement-ticket-stats.model.ts +7 -0
- package/src/feed/models/active-claim.model.ts +66 -0
- package/src/feed/models/game-ticket-stats.model.ts +11 -0
- package/src/feed/models/game-tickets-response.model.ts +7 -0
- package/src/feed/models/get-achievement-of-the-week-response.model.ts +27 -0
- package/src/feed/models/get-active-claims-response.model.ts +19 -0
- package/src/feed/models/get-top-ten-users-response.model.ts +12 -0
- package/src/feed/models/index.ts +19 -0
- package/src/feed/models/most-ticketed-games-response.model.ts +12 -0
- package/src/feed/models/most-ticketed-games.model.ts +12 -0
- package/src/feed/models/recent-tickets-response.model.ts +7 -0
- package/src/feed/models/recent-tickets.model.ts +7 -0
- package/src/feed/models/response-ticket-entity.model.ts +25 -0
- package/src/feed/models/ticket-entity.model.ts +24 -0
- package/src/feed/models/tickets-by-user-response.model.ts +8 -0
- package/src/feed/models/top-ten-users-entity.model.ts +5 -0
- package/src/feed/models/top-ten-users.model.ts +3 -0
- package/src/feed/models/user-ticket-stats.model.ts +8 -0
- package/src/game/getAchievementCount.test.ts +49 -0
- package/src/game/getAchievementCount.ts +52 -0
- package/src/game/getAchievementDistribution.test.ts +187 -0
- package/src/game/getAchievementDistribution.ts +88 -0
- package/src/game/getGame.test.ts +81 -0
- package/src/game/getGame.ts +74 -0
- package/src/game/getGameExtended.test.ts +121 -0
- package/src/game/getGameExtended.ts +103 -0
- package/src/game/getGameRankAndScore.test.ts +62 -0
- package/src/game/getGameRankAndScore.ts +66 -0
- package/src/game/getGameRating.test.ts +59 -0
- package/src/game/getGameRating.ts +59 -0
- package/src/game/index.ts +7 -0
- package/src/game/models/achievement-count.model.ts +4 -0
- package/src/game/models/achievement-distribution-flags.model.ts +4 -0
- package/src/game/models/game-extended-achievement-entity.model.ts +15 -0
- package/src/game/models/game-extended-claim-entity.model.ts +7 -0
- package/src/game/models/game-extended.model.ts +26 -0
- package/src/game/models/game-rank-and-score-entity.model.ts +6 -0
- package/src/game/models/game-rating.model.ts +9 -0
- package/src/game/models/game.model.ts +19 -0
- package/src/game/models/get-achievement-count-response.model.ts +4 -0
- package/src/game/models/get-achievement-distribution-response.model.ts +1 -0
- package/src/game/models/get-game-extended-response.model.ts +56 -0
- package/src/game/models/get-game-rank-and-score-response.model.ts +8 -0
- package/src/game/models/get-game-rating-response.model.ts +9 -0
- package/src/game/models/get-game-response.model.ts +19 -0
- package/src/game/models/index.ts +14 -0
- package/src/index.ts +8 -0
- package/src/user/getAchievementsEarnedBetween.test.ts +84 -0
- package/src/user/getAchievementsEarnedBetween.ts +88 -0
- package/src/user/getAchievementsEarnedOnDay.test.ts +83 -0
- package/src/user/getAchievementsEarnedOnDay.ts +87 -0
- package/src/user/getGameInfoAndUserProgress.test.ts +135 -0
- package/src/user/getGameInfoAndUserProgress.ts +118 -0
- package/src/user/getUserGameRankAndScore.test.ts +60 -0
- package/src/user/getUserGameRankAndScore.ts +69 -0
- package/src/user/getUserPoints.test.ts +49 -0
- package/src/user/getUserPoints.ts +51 -0
- package/src/user/getUserProgress.test.ts +80 -0
- package/src/user/getUserProgress.ts +78 -0
- package/src/user/getUserRecentlyPlayedGames.test.ts +76 -0
- package/src/user/getUserRecentlyPlayedGames.ts +93 -0
- package/src/user/getUserSummary.test.ts +251 -0
- package/src/user/getUserSummary.ts +96 -0
- package/src/user/index.ts +9 -0
- package/src/user/models/dated-user-achievement.model.ts +17 -0
- package/src/user/models/dated-user-achievements-response.model.ts +20 -0
- package/src/user/models/game-info-and-user-progress.model.ts +19 -0
- package/src/user/models/get-game-info-and-user-progress-response.model.ts +28 -0
- package/src/user/models/get-user-game-rank-and-score-response.model.ts +9 -0
- package/src/user/models/get-user-points-response.model.ts +4 -0
- package/src/user/models/get-user-progress-response.model.ts +13 -0
- package/src/user/models/get-user-recently-played-games-response.model.ts +17 -0
- package/src/user/models/get-user-summary-response.model.ts +92 -0
- package/src/user/models/index.ts +14 -0
- package/src/user/models/user-game-rank-and-score.model.ts +8 -0
- package/src/user/models/user-points.model.ts +4 -0
- package/src/user/models/user-progress.model.ts +10 -0
- package/src/user/models/user-recently-played-games.model.ts +16 -0
- package/src/user/models/user-summary.model.ts +92 -0
- package/src/utils/internal/apiBaseUrl.ts +1 -0
- package/src/utils/internal/buildRequestUrl.test.ts +51 -0
- package/src/utils/internal/buildRequestUrl.ts +32 -0
- package/src/utils/internal/call.test.ts +39 -0
- package/src/utils/internal/call.ts +29 -0
- package/src/utils/internal/index.ts +4 -0
- package/src/utils/internal/serializeProperties.test.ts +141 -0
- package/src/utils/internal/serializeProperties.ts +75 -0
- package/src/utils/public/buildAuthorization.test.ts +36 -0
- package/src/utils/public/buildAuthorization.ts +40 -0
- package/src/utils/public/index.ts +3 -0
- package/src/utils/public/models/auth-object.model.ts +20 -0
- package/src/utils/public/models/index.ts +1 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* eslint-disable sonarjs/cognitive-complexity */
|
|
2
|
+
/* eslint-disable sonarjs/prefer-immediate-return */
|
|
3
|
+
|
|
4
|
+
export const serializeProperties = (
|
|
5
|
+
originalData: any,
|
|
6
|
+
options: Partial<{
|
|
7
|
+
shouldCastToNumbers: string[];
|
|
8
|
+
shouldMapToBooleans: string[];
|
|
9
|
+
}> = {}
|
|
10
|
+
) => {
|
|
11
|
+
const { shouldCastToNumbers, shouldMapToBooleans } = options;
|
|
12
|
+
|
|
13
|
+
let returnValue = originalData;
|
|
14
|
+
|
|
15
|
+
if (Array.isArray(originalData)) {
|
|
16
|
+
const cleanedArray: any[] = [];
|
|
17
|
+
|
|
18
|
+
for (const entity of originalData) {
|
|
19
|
+
cleanedArray.push(serializeProperties(entity, options));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
returnValue = cleanedArray;
|
|
23
|
+
} else if (!Array.isArray(originalData) && originalData instanceof Object) {
|
|
24
|
+
let cleanedObject: Record<string, any> = {};
|
|
25
|
+
|
|
26
|
+
for (const [originalKey, originalValue] of Object.entries(originalData)) {
|
|
27
|
+
let sanitizedValue = originalValue;
|
|
28
|
+
if (shouldCastToNumbers?.includes(originalKey)) {
|
|
29
|
+
sanitizedValue = Number(originalValue);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (shouldMapToBooleans?.includes(originalKey)) {
|
|
33
|
+
if (originalValue === null) {
|
|
34
|
+
sanitizedValue = null;
|
|
35
|
+
} else {
|
|
36
|
+
sanitizedValue = originalValue === "1" ? true : false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
cleanedObject = {
|
|
41
|
+
...cleanedObject,
|
|
42
|
+
[naiveCamelCase(originalKey)]: serializeProperties(
|
|
43
|
+
sanitizedValue,
|
|
44
|
+
options
|
|
45
|
+
)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
returnValue = cleanedObject;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return returnValue;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const naiveCamelCase = (originalValue: string) => {
|
|
56
|
+
// "ID" --> "id", "URL" --> "url"
|
|
57
|
+
if (originalValue.toUpperCase() === originalValue) {
|
|
58
|
+
return originalValue.toLowerCase();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// "GameID" -> "gameID"
|
|
62
|
+
let camelCased =
|
|
63
|
+
originalValue.charAt(0).toLowerCase() + originalValue.slice(1);
|
|
64
|
+
|
|
65
|
+
// "gameID" -> "gameId"
|
|
66
|
+
camelCased = camelCased.replace(/ID/g, "Id");
|
|
67
|
+
|
|
68
|
+
// "badgeURL" --> "badgeUrl"
|
|
69
|
+
camelCased = camelCased.replace(/URL/g, "Url");
|
|
70
|
+
|
|
71
|
+
// "rAPoints" -> "raPoints"
|
|
72
|
+
camelCased = camelCased.replace(/rA/g, "ra");
|
|
73
|
+
|
|
74
|
+
return camelCased;
|
|
75
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { buildAuthorization } from "./buildAuthorization";
|
|
2
|
+
|
|
3
|
+
describe("Util: buildAuthorization", () => {
|
|
4
|
+
it("is defined #sanity", () => {
|
|
5
|
+
// ASSERT
|
|
6
|
+
expect(buildAuthorization).toBeDefined();
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it("returns the same object it is given", () => {
|
|
10
|
+
// ARRANGE
|
|
11
|
+
const myAuth = {
|
|
12
|
+
userName: "myUserName",
|
|
13
|
+
webApiKey: "myWebApiKey"
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// ACT
|
|
17
|
+
const authorization = buildAuthorization(myAuth);
|
|
18
|
+
|
|
19
|
+
// ASSERT
|
|
20
|
+
expect(authorization).toEqual(myAuth);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("throws an error if missing a userName", () => {
|
|
24
|
+
// ASSERT
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
26
|
+
// @ts-ignore - We're assuming the user is not using a TypeScript project.
|
|
27
|
+
expect(() => buildAuthorization({ webApiKey: "mockWebApiKey" })).toThrow();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("throws an error if missing a webApiKey", () => {
|
|
31
|
+
// ASSERT
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
33
|
+
// @ts-ignore - We're assuming the user is not using a TypeScript project.
|
|
34
|
+
expect(() => buildAuthorization({ userName: "mockUserName" })).toThrow();
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { AuthObject } from "./models";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Accepts your RetroAchievements.org userName and web API key. After
|
|
5
|
+
* receiving these inputs, the function returns you a value that can be
|
|
6
|
+
* used for the authentication parameter by any of the async calls in this
|
|
7
|
+
* library.
|
|
8
|
+
*
|
|
9
|
+
* Your account's personal Web API Key can be found on the Settings page
|
|
10
|
+
* of RetroAchievements.org. Do not use a Web API Key that is not associated
|
|
11
|
+
* with your account.
|
|
12
|
+
*
|
|
13
|
+
* @returns An `AuthObject` that you can pass to any of the API call functions.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```
|
|
17
|
+
* const authorization = buildAuthorization({
|
|
18
|
+
* userName: "Scott",
|
|
19
|
+
* webApiKey: "LtjCwW16nJI7cqOyPIQtXk8v1cfF0tmO"
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const buildAuthorization = (options: AuthObject): AuthObject => {
|
|
24
|
+
if (!options.userName || !options.webApiKey) {
|
|
25
|
+
throw new Error(`
|
|
26
|
+
buildAuthorization() requires an object containing a
|
|
27
|
+
userName and webApiKey. eg:
|
|
28
|
+
|
|
29
|
+
const authorization = buildAuthorization({
|
|
30
|
+
userName: "myUserName",
|
|
31
|
+
webApiKey: "myWebApiKey"
|
|
32
|
+
})
|
|
33
|
+
`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return options;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// This function simply returns what it's given, however the return
|
|
40
|
+
// value has the added benefit of type safety.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Each RetroAchievements API call is uniquely authenticated
|
|
3
|
+
* using a userName + API key combination. Your account's personal
|
|
4
|
+
* Web API Key can be found on the Settings page.
|
|
5
|
+
*/
|
|
6
|
+
export interface AuthObject {
|
|
7
|
+
/**
|
|
8
|
+
* You or your app's exact username on the RetroAchievements.org website.
|
|
9
|
+
* For example, https://retroachievements.org/user/Scott would have a value
|
|
10
|
+
* of "Scott".
|
|
11
|
+
*/
|
|
12
|
+
userName: string;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* This can be found in the "Keys" section of your Settings page on the
|
|
16
|
+
* RetroAchievements.org website. This is a 32-digit alphanumeric key
|
|
17
|
+
* that is case-sensitive.
|
|
18
|
+
*/
|
|
19
|
+
webApiKey: string;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./auth-object.model";
|