@retroachievements/api 2.4.0 → 2.5.0
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/README.md +4 -0
- package/dist/api.cjs +1 -1
- package/dist/api.cjs.map +1 -1
- package/dist/api.modern.js +1 -1
- package/dist/api.modern.js.map +1 -1
- package/dist/api.module.js +1 -1
- package/dist/api.module.js.map +1 -1
- package/dist/api.umd.js +1 -1
- package/dist/api.umd.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/leaderboard/getLeaderboardEntries.d.ts +46 -0
- package/dist/leaderboard/getLeaderboardEntries.test.d.ts +1 -0
- package/dist/leaderboard/index.d.ts +2 -0
- package/dist/leaderboard/models/get-leaderboard-entries-response.model.d.ts +12 -0
- package/dist/leaderboard/models/index.d.ts +2 -0
- package/dist/leaderboard/models/leaderboard-entries.model.d.ts +12 -0
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/leaderboard/getLeaderboardEntries.test.ts +73 -0
- package/src/leaderboard/getLeaderboardEntries.ts +75 -0
- package/src/leaderboard/index.ts +2 -0
- package/src/leaderboard/models/get-leaderboard-entries-response.model.ts +12 -0
- package/src/leaderboard/models/index.ts +2 -0
- package/src/leaderboard/models/leaderboard-entries.model.ts +12 -0
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* eslint-disable sonarjs/no-duplicate-string */
|
|
2
|
+
|
|
3
|
+
import { http, HttpResponse } from "msw";
|
|
4
|
+
import { setupServer } from "msw/node";
|
|
5
|
+
|
|
6
|
+
import { apiBaseUrl } from "../utils/internal";
|
|
7
|
+
import { buildAuthorization } from "../utils/public";
|
|
8
|
+
import { getLeaderboardEntries } from "./getLeaderboardEntries";
|
|
9
|
+
import type { GetLeaderboardEntriesResponse } from "./models";
|
|
10
|
+
|
|
11
|
+
const server = setupServer();
|
|
12
|
+
|
|
13
|
+
describe("Function: getLeaderboardEntries", () => {
|
|
14
|
+
// MSW Setup
|
|
15
|
+
beforeAll(() => server.listen());
|
|
16
|
+
afterEach(() => server.resetHandlers());
|
|
17
|
+
afterAll(() => server.close());
|
|
18
|
+
|
|
19
|
+
it("is defined #sanity", () => {
|
|
20
|
+
// ASSERT
|
|
21
|
+
expect(getLeaderboardEntries).toBeDefined();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("given a leaderboard ID, retrieves the entries in that leaderboard", async () => {
|
|
25
|
+
// ARRANGE
|
|
26
|
+
const authorization = buildAuthorization({
|
|
27
|
+
username: "mockUserName",
|
|
28
|
+
webApiKey: "mockWebApiKey",
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const mockResponse: GetLeaderboardEntriesResponse = {
|
|
32
|
+
Count: 100,
|
|
33
|
+
Total: 1287,
|
|
34
|
+
Results: [
|
|
35
|
+
{
|
|
36
|
+
Rank: 1,
|
|
37
|
+
User: "vani11a",
|
|
38
|
+
ULID: "00003EMFWR7XB8SDPEHB3K56ZQ",
|
|
39
|
+
Score: 390_490,
|
|
40
|
+
FormattedScore: "390,490",
|
|
41
|
+
DateSubmitted: "2024-07-25T15:51:00+00:00",
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
server.use(
|
|
47
|
+
http.get(`${apiBaseUrl}/API_GetLeaderboardEntries.php`, () =>
|
|
48
|
+
HttpResponse.json(mockResponse)
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
// ACT
|
|
53
|
+
const response = await getLeaderboardEntries(authorization, {
|
|
54
|
+
leaderboardId: 104_370,
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// ASSERT
|
|
58
|
+
expect(response).toEqual({
|
|
59
|
+
count: 100,
|
|
60
|
+
total: 1287,
|
|
61
|
+
results: [
|
|
62
|
+
{
|
|
63
|
+
rank: 1,
|
|
64
|
+
user: "vani11a",
|
|
65
|
+
ulid: "00003EMFWR7XB8SDPEHB3K56ZQ",
|
|
66
|
+
score: 390_490,
|
|
67
|
+
formattedScore: "390,490",
|
|
68
|
+
dateSubmitted: "2024-07-25T15:51:00+00:00",
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { ID } from "../utils/internal";
|
|
2
|
+
import {
|
|
3
|
+
apiBaseUrl,
|
|
4
|
+
buildRequestUrl,
|
|
5
|
+
call,
|
|
6
|
+
serializeProperties,
|
|
7
|
+
} from "../utils/internal";
|
|
8
|
+
import type { AuthObject } from "../utils/public";
|
|
9
|
+
import type {
|
|
10
|
+
GetLeaderboardEntriesResponse,
|
|
11
|
+
LeaderboardEntries,
|
|
12
|
+
} from "./models";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* A call to this endpoint will retrieve a given leaderboard's entries, targeted by its ID.
|
|
16
|
+
*
|
|
17
|
+
* @param authorization An object containing your username and webApiKey.
|
|
18
|
+
* This can be constructed with `buildAuthorization()`.
|
|
19
|
+
*
|
|
20
|
+
* @param payload.leaderboardId The target leaderboard ID.
|
|
21
|
+
*
|
|
22
|
+
* @param payload.offset Defaults to 0. The number of entries to skip.
|
|
23
|
+
*
|
|
24
|
+
* @param payload.count Defaults to 100, has a max of 500.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```
|
|
28
|
+
* const leaderboardEntries = await getLeaderboardEntries(
|
|
29
|
+
* authorization,
|
|
30
|
+
* { leaderboardId: 14402 }
|
|
31
|
+
* );
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @returns An object containing a leaderboard's entries.
|
|
35
|
+
* ```json
|
|
36
|
+
* {
|
|
37
|
+
* "count": 100,
|
|
38
|
+
* "total": 1287,
|
|
39
|
+
* "results": [
|
|
40
|
+
* {
|
|
41
|
+
* "rank": 1,
|
|
42
|
+
* "user": "vani11a",
|
|
43
|
+
* "ulid": "00003EMFWR7XB8SDPEHB3K56ZQ",
|
|
44
|
+
* "score": 390490,
|
|
45
|
+
* "formattedScore": "390,490",
|
|
46
|
+
* "dateSubmitted": "2024-07-25T15:51:00+00:00"
|
|
47
|
+
* }
|
|
48
|
+
* ]
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export const getLeaderboardEntries = async (
|
|
53
|
+
authorization: AuthObject,
|
|
54
|
+
payload: { leaderboardId: ID; offset?: number; count?: number }
|
|
55
|
+
): Promise<LeaderboardEntries> => {
|
|
56
|
+
const queryParams: Record<string, any> = {};
|
|
57
|
+
queryParams.i = payload.leaderboardId;
|
|
58
|
+
if (payload?.offset) {
|
|
59
|
+
queryParams.o = payload.offset;
|
|
60
|
+
}
|
|
61
|
+
if (payload?.count) {
|
|
62
|
+
queryParams.c = payload.count;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const url = buildRequestUrl(
|
|
66
|
+
apiBaseUrl,
|
|
67
|
+
"/API_GetLeaderboardEntries.php",
|
|
68
|
+
authorization,
|
|
69
|
+
queryParams
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
const rawResponse = await call<GetLeaderboardEntriesResponse>({ url });
|
|
73
|
+
|
|
74
|
+
return serializeProperties(rawResponse);
|
|
75
|
+
};
|