mirror of
https://github.com/maxswa/osrs-json-hiscores.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
31 Commits
json-endpo
...
v2.17.0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
3b502cb7cf | ||
![]() |
b3f81e66eb | ||
![]() |
01150b6234 | ||
![]() |
ca4d75f2c7 | ||
![]() |
03b2ef42d2 | ||
![]() |
7e2603b235 | ||
![]() |
92452e240c | ||
![]() |
d01b36422e | ||
![]() |
3bc1352838 | ||
![]() |
91066b5366 | ||
![]() |
4872d04301 | ||
![]() |
55312ba0fd | ||
![]() |
331a448503 | ||
![]() |
84c704a846 | ||
![]() |
561495632c | ||
![]() |
bdfdf1eb14 | ||
![]() |
e349776060 | ||
![]() |
546bc5acf7 | ||
![]() |
66528cd9d9 | ||
![]() |
99ea3fb722 | ||
![]() |
7f16d26e3c | ||
![]() |
ed9fcf47b3 | ||
![]() |
bb935bb6c9 | ||
![]() |
d046fffa9e | ||
![]() |
5483e54d78 | ||
![]() |
97532b0c03 | ||
![]() |
f9a56e2b3a | ||
![]() |
9f43f0c39f | ||
![]() |
d67ffa3e20 | ||
![]() |
7bdde9f5d1 | ||
![]() |
b4a50e69c8 |
56
README.md
56
README.md
@@ -5,22 +5,24 @@
|
|||||||
[](https://github.com/maxswa/osrs-json-hiscores/blob/master/src/types.ts)
|
[](https://github.com/maxswa/osrs-json-hiscores/blob/master/src/types.ts)
|
||||||
[](https://github.com/maxswa/osrs-json-hiscores/actions/workflows/main.yml?query=branch%3Amain)
|
[](https://github.com/maxswa/osrs-json-hiscores/actions/workflows/main.yml?query=branch%3Amain)
|
||||||
|
|
||||||
**The Old School Runescape API wrapper that does more!**
|
**The Old School RuneScape API wrapper that does more!**
|
||||||
|
|
||||||
## What it does
|
## What it does
|
||||||
|
|
||||||
The official hiscores API for Old School Runescape (OSRS) returns CSV.
|
The official hiscores API for Old School RuneScape (OSRS) can return CSV or a simple JSON array.
|
||||||
This wrapper converts it to json and provides extra information about the given player. By comparing player info it infers the player's game mode, as well as any previous modes (de-ultimated, de-ironed and/or died as a hardcore ironman).
|
This wrapper converts the hiscores data into a more usable JSON object and provides extra information about the given player. By comparing player info it infers the player's game mode, as well as any previous modes (de-ultimated, de-ironed and/or died as a hardcore ironman).
|
||||||
|
|
||||||
Additional functions are provided that screen-scrape the OSRS leaderboards and return a list of players as json.
|
Additional functions are provided that screen-scrape the OSRS leaderboards and return a list of players as json. Also simple utility functions are provided to fetch the raw responses from Jagex's APIs, if desired.
|
||||||
|
|
||||||
`osrs-json-hiscores` has TypeScript support, with full definitions for all functions and custom data types.
|
`osrs-json-hiscores` has TypeScript support, with full definitions for all functions and custom data types.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Disclaimer
|
### ⚠ Disclaimer ⚠
|
||||||
|
|
||||||
Jagex does not provide `Access-Control-Allow-Origin` headers in their responses. This means that [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) will block all browser requests to their hiscores API. In order to get around this, osrs-json-hiscores should be installed on the server side and exposed to the front end via a simple API. Here is an example of this in use: [codesandbox.io/s/osrs-json-hiscores-demo](https://codesandbox.io/s/osrs-json-hiscores-demo-qz656)
|
Jagex does not provide `Access-Control-Allow-Origin` headers in their responses. This means that [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) will block all browser requests to their hiscores API. In order to get around this, osrs-json-hiscores needs to be installed on the server side and exposed to the front end via a simple API. Here is an example of this in use: [codesandbox.io/s/osrs-json-hiscores-demo](https://codesandbox.io/s/osrs-json-hiscores-demo-qz656)
|
||||||
|
|
||||||
|
TLDR: You cannot use this library directly in your client side app e.g. React or Vue, you must set up a server which uses this lib internally and have your client fetch data from your server.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -42,27 +44,14 @@ $ yarn add osrs-json-hiscores
|
|||||||
|
|
||||||
Install the package and then import it into your project:
|
Install the package and then import it into your project:
|
||||||
|
|
||||||
```javascript
|
```typescript
|
||||||
const hiscores = require('osrs-json-hiscores');
|
import { getStatsByGamemode, getSkillPage } from 'osrs-json-hiscores';
|
||||||
```
|
```
|
||||||
|
|
||||||
Once you import it you can call the functions asynchronously:
|
Once you import it you can call the functions asynchronously:
|
||||||
|
|
||||||
```javascript
|
```typescript
|
||||||
hiscores
|
const stats = await getStatsByGamemode('Lynx Titan');
|
||||||
.getStats('Lynx Titan')
|
|
||||||
.then((res) => console.log(res))
|
|
||||||
.catch((err) => console.error(err));
|
|
||||||
```
|
|
||||||
|
|
||||||
If you are using TypeScript or transpiling your JS you can use ES6 syntax:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
import hiscores, { getSkillPage } from 'osrs-json-hiscores';
|
|
||||||
|
|
||||||
// ...
|
|
||||||
|
|
||||||
const stats = await hiscores.getStats('Lynx Titan');
|
|
||||||
const topPage = await getSkillPage('overall');
|
const topPage = await getSkillPage('overall');
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -81,9 +70,8 @@ const topPage = await getSkillPage('overall');
|
|||||||
|
|
||||||
`getSkillPage` and `getActivityPage` require a skill / activity and optionally a gamemode and page:
|
`getSkillPage` and `getActivityPage` require a skill / activity and optionally a gamemode and page:
|
||||||
|
|
||||||
```javascript
|
```typescript
|
||||||
hiscores
|
getSkillPage('attack', 'main', 1)
|
||||||
.getSkillPage('attack', 'main', 1)
|
|
||||||
.then((res) => console.log(res))
|
.then((res) => console.log(res))
|
||||||
.catch((err) => console.error(err));
|
.catch((err) => console.error(err));
|
||||||
```
|
```
|
||||||
@@ -115,11 +103,12 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
|||||||
| Soul Wars Zeal | `soulWarsZeal` |
|
| Soul Wars Zeal | `soulWarsZeal` |
|
||||||
| Rifts closed | `riftsClosed` |
|
| Rifts closed | `riftsClosed` |
|
||||||
|
|
||||||
### Leagues
|
### Points
|
||||||
|
|
||||||
| Activity | Param |
|
| Activity | Param |
|
||||||
| ------------- | :------------: |
|
| -------------- | :-------------: |
|
||||||
| League Points | `leaguePoints` |
|
| League Points | `leaguePoints` |
|
||||||
|
| Deadman Points | `deadmanPoints` |
|
||||||
|
|
||||||
### Bosses
|
### Bosses
|
||||||
|
|
||||||
@@ -162,6 +151,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
|||||||
| Phantom Muspah | `phantomMuspah` |
|
| Phantom Muspah | `phantomMuspah` |
|
||||||
| Sarachnis | `sarachnis` |
|
| Sarachnis | `sarachnis` |
|
||||||
| Scorpia | `scorpia` |
|
| Scorpia | `scorpia` |
|
||||||
|
| Scurrius | `scurrius` |
|
||||||
| Skotizo | `skotizo` |
|
| Skotizo | `skotizo` |
|
||||||
| Spindel | `spindel` |
|
| Spindel | `spindel` |
|
||||||
| Tempoross | `tempoross` |
|
| Tempoross | `tempoross` |
|
||||||
@@ -188,7 +178,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
|||||||
|
|
||||||
`getStats` returns a player object that looks like this:
|
`getStats` returns a player object that looks like this:
|
||||||
|
|
||||||
```javascript
|
```typescript
|
||||||
{
|
{
|
||||||
name: 'Lynx Titan',
|
name: 'Lynx Titan',
|
||||||
mode: 'main',
|
mode: 'main',
|
||||||
@@ -216,7 +206,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
|||||||
|
|
||||||
`getSkillPage` returns and array of 25 players (This represents a page on the hiscores):
|
`getSkillPage` returns and array of 25 players (This represents a page on the hiscores):
|
||||||
|
|
||||||
```javascript
|
```typescript
|
||||||
[
|
[
|
||||||
{ rank: 1, name: 'Lynx Titan', level: 2277, xp: 4600000000, dead: false },
|
{ rank: 1, name: 'Lynx Titan', level: 2277, xp: 4600000000, dead: false },
|
||||||
{},
|
{},
|
||||||
@@ -229,7 +219,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
|||||||
|
|
||||||
Get the properly formatted name of any skill, boss, clue or other activity:
|
Get the properly formatted name of any skill, boss, clue or other activity:
|
||||||
|
|
||||||
```javascript
|
```typescript
|
||||||
// kril === "K'ril Tsutsaroth"
|
// kril === "K'ril Tsutsaroth"
|
||||||
const kril = FORMATTED_BOSS_NAMES['krilTsutsaroth'];
|
const kril = FORMATTED_BOSS_NAMES['krilTsutsaroth'];
|
||||||
```
|
```
|
||||||
|
2517
__tests__/attackTopPage.html
vendored
2517
__tests__/attackTopPage.html
vendored
File diff suppressed because it is too large
Load Diff
2580
__tests__/b0atyNamePage.html
vendored
2580
__tests__/b0atyNamePage.html
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,98 +1,100 @@
|
|||||||
3923,2277,792976020
|
3745,2277,840426611
|
||||||
23024,99,29963318
|
24080,99,30276246
|
||||||
12244,99,28197154
|
9559,99,31228199
|
||||||
2261,99,134139762
|
2212,99,143599407
|
||||||
4074,99,112054504
|
3550,99,123248914
|
||||||
7166,99,101083246
|
6564,99,109953707
|
||||||
3747,99,15110682
|
4244,99,15144846
|
||||||
4516,99,50824811
|
4107,99,57072224
|
||||||
126288,99,13353110
|
135556,99,13353511
|
||||||
24800,99,16366466
|
25855,99,16903268
|
||||||
49293,99,13453226
|
53472,99,13456850
|
||||||
20784,99,16654289
|
22453,99,16654917
|
||||||
16376,99,19114676
|
17690,99,19118307
|
||||||
42069,99,14055874
|
45816,99,14059776
|
||||||
9305,99,16527135
|
10409,99,16530015
|
||||||
25135,99,14657869
|
27702,99,14765145
|
||||||
35831,99,13233130
|
39430,99,13235063
|
||||||
6197,99,15739327
|
6722,99,15754877
|
||||||
48215,99,13963265
|
51813,99,14023027
|
||||||
4786,99,33830972
|
5324,99,33835543
|
||||||
3402,99,62531484
|
3154,99,69527777
|
||||||
4314,99,22733194
|
4719,99,22733384
|
||||||
14826,99,17399368
|
15135,99,17952893
|
||||||
1009,99,17989158
|
1089,99,17998715
|
||||||
-1,-1
|
-1,-1
|
||||||
22270,10
|
|
||||||
10481,3
|
|
||||||
149217,8
|
|
||||||
103672,7
|
|
||||||
253,9508
|
|
||||||
713,825
|
|
||||||
71,6000
|
|
||||||
1943,1600
|
|
||||||
42364,287
|
|
||||||
467,436
|
|
||||||
1634,360
|
|
||||||
12937,2521
|
|
||||||
-1,-1
|
-1,-1
|
||||||
5222,14780
|
26164,10
|
||||||
3007,1060
|
12886,3
|
||||||
2578,2192
|
148658,8
|
||||||
84703,594
|
103161,7
|
||||||
19500,143
|
377,9556
|
||||||
3335,1830
|
862,825
|
||||||
191697,5
|
148,6000
|
||||||
27457,293
|
2153,1606
|
||||||
43607,58
|
42107,298
|
||||||
17384,1905
|
504,459
|
||||||
171607,33
|
1816,368
|
||||||
2074,501
|
14701,2521
|
||||||
78908,50
|
-1,-1
|
||||||
135830,26
|
6776,14780
|
||||||
48781,287
|
4773,1060
|
||||||
2112,2000
|
2741,2192
|
||||||
138748,41
|
90203,594
|
||||||
31297,707
|
29573,143
|
||||||
40908,698
|
3668,1830
|
||||||
31273,714
|
206778,5
|
||||||
76034,25
|
32897,293
|
||||||
2391,688
|
64112,58
|
||||||
17409,1228
|
18492,1905
|
||||||
60841,474
|
178941,34
|
||||||
1895,2140
|
2379,501
|
||||||
19948,159
|
82902,50
|
||||||
1855,2046
|
147358,26
|
||||||
46423,579
|
51973,287
|
||||||
107879,1908
|
2377,2000
|
||||||
9791,920
|
147406,41
|
||||||
2050,1444
|
32225,707
|
||||||
848,33
|
42229,698
|
||||||
24797,620
|
32212,714
|
||||||
|
79605,25
|
||||||
|
9517,688
|
||||||
|
19125,1228
|
||||||
|
65849,474
|
||||||
|
2080,2140
|
||||||
|
16433,182
|
||||||
|
2006,2046
|
||||||
|
48575,580
|
||||||
|
115056,1908
|
||||||
|
10406,920
|
||||||
|
2196,1444
|
||||||
|
1005,33
|
||||||
|
28413,620
|
||||||
4157,744
|
4157,744
|
||||||
4154,500
|
4261,500
|
||||||
880,217
|
993,217
|
||||||
15860,251
|
21848,251
|
||||||
60424,119
|
66260,119
|
||||||
100429,26
|
108898,26
|
||||||
358191,9
|
23958,90
|
||||||
1131,1569
|
373975,9
|
||||||
33908,273
|
2005,1569
|
||||||
165651,7
|
40001,273
|
||||||
64278,201
|
192608,7
|
||||||
1533,583
|
78367,201
|
||||||
748,700
|
5679,583
|
||||||
21700,250
|
478,1760
|
||||||
13200,7
|
22932,250
|
||||||
6622,3066
|
15059,7
|
||||||
87093,35
|
7161,3066
|
||||||
2449,502
|
101555,35
|
||||||
14541,2
|
610,933
|
||||||
|
15733,2
|
||||||
-1,-1
|
-1,-1
|
||||||
1048,1432
|
2051,2078
|
||||||
138,7096
|
194,7096
|
||||||
58203,51
|
69260,51
|
||||||
13949,2780
|
14039,2780
|
||||||
827440,62
|
876367,62
|
||||||
153191,25
|
165341,25
|
||||||
216690,274
|
226318,275
|
Can't render this file because it has a wrong number of fields in line 25.
|
@@ -3,192 +3,200 @@
|
|||||||
{
|
{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"name": "Overall",
|
"name": "Overall",
|
||||||
"rank": 3923,
|
"rank": 3745,
|
||||||
"level": 2277,
|
"level": 2277,
|
||||||
"xp": 792976020
|
"xp": 840426611
|
||||||
},
|
},
|
||||||
{ "id": 1, "name": "Attack", "rank": 23024, "level": 99, "xp": 29963318 },
|
{ "id": 1, "name": "Attack", "rank": 24080, "level": 99, "xp": 30276246 },
|
||||||
{ "id": 2, "name": "Defence", "rank": 12244, "level": 99, "xp": 28197154 },
|
{ "id": 2, "name": "Defence", "rank": 9559, "level": 99, "xp": 31228199 },
|
||||||
{ "id": 3, "name": "Strength", "rank": 2261, "level": 99, "xp": 134139762 },
|
{ "id": 3, "name": "Strength", "rank": 2212, "level": 99, "xp": 143599407 },
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"name": "Hitpoints",
|
"name": "Hitpoints",
|
||||||
"rank": 4074,
|
"rank": 3550,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 112054504
|
"xp": 123248914
|
||||||
},
|
},
|
||||||
{ "id": 5, "name": "Ranged", "rank": 7166, "level": 99, "xp": 101083246 },
|
{ "id": 5, "name": "Ranged", "rank": 6564, "level": 99, "xp": 109953707 },
|
||||||
{ "id": 6, "name": "Prayer", "rank": 3747, "level": 99, "xp": 15110682 },
|
{ "id": 6, "name": "Prayer", "rank": 4244, "level": 99, "xp": 15144846 },
|
||||||
{ "id": 7, "name": "Magic", "rank": 4516, "level": 99, "xp": 50824811 },
|
{ "id": 7, "name": "Magic", "rank": 4107, "level": 99, "xp": 57072224 },
|
||||||
{ "id": 8, "name": "Cooking", "rank": 126288, "level": 99, "xp": 13353110 },
|
{ "id": 8, "name": "Cooking", "rank": 135556, "level": 99, "xp": 13353511 },
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"name": "Woodcutting",
|
"name": "Woodcutting",
|
||||||
"rank": 24800,
|
"rank": 25855,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 16366466
|
"xp": 16903268
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 10,
|
"id": 10,
|
||||||
"name": "Fletching",
|
"name": "Fletching",
|
||||||
"rank": 49293,
|
"rank": 53472,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 13453226
|
"xp": 13456850
|
||||||
},
|
},
|
||||||
{ "id": 11, "name": "Fishing", "rank": 20784, "level": 99, "xp": 16654289 },
|
{ "id": 11, "name": "Fishing", "rank": 22453, "level": 99, "xp": 16654917 },
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"name": "Firemaking",
|
"name": "Firemaking",
|
||||||
"rank": 16376,
|
"rank": 17690,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 19114676
|
"xp": 19118307
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 13,
|
"id": 13,
|
||||||
"name": "Crafting",
|
"name": "Crafting",
|
||||||
"rank": 42069,
|
"rank": 45816,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 14055874
|
"xp": 14059776
|
||||||
},
|
},
|
||||||
{ "id": 14, "name": "Smithing", "rank": 9305, "level": 99, "xp": 16527135 },
|
{
|
||||||
{ "id": 15, "name": "Mining", "rank": 25135, "level": 99, "xp": 14657869 },
|
"id": 14,
|
||||||
|
"name": "Smithing",
|
||||||
|
"rank": 10409,
|
||||||
|
"level": 99,
|
||||||
|
"xp": 16530015
|
||||||
|
},
|
||||||
|
{ "id": 15, "name": "Mining", "rank": 27702, "level": 99, "xp": 14765145 },
|
||||||
{
|
{
|
||||||
"id": 16,
|
"id": 16,
|
||||||
"name": "Herblore",
|
"name": "Herblore",
|
||||||
"rank": 35831,
|
"rank": 39430,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 13233130
|
"xp": 13235063
|
||||||
},
|
},
|
||||||
{ "id": 17, "name": "Agility", "rank": 6197, "level": 99, "xp": 15739327 },
|
{ "id": 17, "name": "Agility", "rank": 6722, "level": 99, "xp": 15754877 },
|
||||||
{
|
{
|
||||||
"id": 18,
|
"id": 18,
|
||||||
"name": "Thieving",
|
"name": "Thieving",
|
||||||
"rank": 48215,
|
"rank": 51813,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 13963265
|
"xp": 14023027
|
||||||
},
|
},
|
||||||
{ "id": 19, "name": "Slayer", "rank": 4786, "level": 99, "xp": 33830972 },
|
{ "id": 19, "name": "Slayer", "rank": 5324, "level": 99, "xp": 33835543 },
|
||||||
{ "id": 20, "name": "Farming", "rank": 3402, "level": 99, "xp": 62531484 },
|
{ "id": 20, "name": "Farming", "rank": 3154, "level": 99, "xp": 69527777 },
|
||||||
{
|
{
|
||||||
"id": 21,
|
"id": 21,
|
||||||
"name": "Runecraft",
|
"name": "Runecraft",
|
||||||
"rank": 4314,
|
"rank": 4719,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 22733194
|
"xp": 22733384
|
||||||
},
|
},
|
||||||
{ "id": 22, "name": "Hunter", "rank": 14826, "level": 99, "xp": 17399368 },
|
{ "id": 22, "name": "Hunter", "rank": 15135, "level": 99, "xp": 17952893 },
|
||||||
{
|
{
|
||||||
"id": 23,
|
"id": 23,
|
||||||
"name": "Construction",
|
"name": "Construction",
|
||||||
"rank": 1009,
|
"rank": 1089,
|
||||||
"level": 99,
|
"level": 99,
|
||||||
"xp": 17989158
|
"xp": 17998715
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"activities": [
|
"activities": [
|
||||||
{ "id": 0, "name": "League Points", "rank": -1, "score": -1 },
|
{ "id": 0, "name": "League Points", "rank": -1, "score": -1 },
|
||||||
{ "id": 1, "name": "Bounty Hunter - Hunter", "rank": 22270, "score": 10 },
|
{ "id": 1, "name": "Deadman Points", "rank": -1, "score": -1 },
|
||||||
{ "id": 2, "name": "Bounty Hunter - Rogue", "rank": 10481, "score": 3 },
|
{ "id": 2, "name": "Bounty Hunter - Hunter", "rank": 26164, "score": 10 },
|
||||||
|
{ "id": 3, "name": "Bounty Hunter - Rogue", "rank": 12886, "score": 3 },
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 4,
|
||||||
"name": "Bounty Hunter (Legacy) - Hunter",
|
"name": "Bounty Hunter (Legacy) - Hunter",
|
||||||
"rank": 149217,
|
"rank": 148658,
|
||||||
"score": 8
|
"score": 8
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 5,
|
||||||
"name": "Bounty Hunter (Legacy) - Rogue",
|
"name": "Bounty Hunter (Legacy) - Rogue",
|
||||||
"rank": 103672,
|
"rank": 103161,
|
||||||
"score": 7
|
"score": 7
|
||||||
},
|
},
|
||||||
{ "id": 5, "name": "Clue Scrolls (all)", "rank": 253, "score": 9508 },
|
{ "id": 6, "name": "Clue Scrolls (all)", "rank": 377, "score": 9556 },
|
||||||
{ "id": 6, "name": "Clue Scrolls (beginner)", "rank": 713, "score": 825 },
|
{ "id": 7, "name": "Clue Scrolls (beginner)", "rank": 862, "score": 825 },
|
||||||
{ "id": 7, "name": "Clue Scrolls (easy)", "rank": 71, "score": 6000 },
|
{ "id": 8, "name": "Clue Scrolls (easy)", "rank": 148, "score": 6000 },
|
||||||
{ "id": 8, "name": "Clue Scrolls (medium)", "rank": 1943, "score": 1600 },
|
{ "id": 9, "name": "Clue Scrolls (medium)", "rank": 2153, "score": 1606 },
|
||||||
{ "id": 9, "name": "Clue Scrolls (hard)", "rank": 42364, "score": 287 },
|
{ "id": 10, "name": "Clue Scrolls (hard)", "rank": 42107, "score": 298 },
|
||||||
{ "id": 10, "name": "Clue Scrolls (elite)", "rank": 467, "score": 436 },
|
{ "id": 11, "name": "Clue Scrolls (elite)", "rank": 504, "score": 459 },
|
||||||
{ "id": 11, "name": "Clue Scrolls (master)", "rank": 1634, "score": 360 },
|
{ "id": 12, "name": "Clue Scrolls (master)", "rank": 1816, "score": 368 },
|
||||||
{ "id": 12, "name": "LMS - Rank", "rank": 12937, "score": 2521 },
|
{ "id": 13, "name": "LMS - Rank", "rank": 14701, "score": 2521 },
|
||||||
{ "id": 13, "name": "PvP Arena - Rank", "rank": -1, "score": -1 },
|
{ "id": 14, "name": "PvP Arena - Rank", "rank": -1, "score": -1 },
|
||||||
{ "id": 14, "name": "Soul Wars Zeal", "rank": 5222, "score": 14780 },
|
{ "id": 15, "name": "Soul Wars Zeal", "rank": 6776, "score": 14780 },
|
||||||
{ "id": 15, "name": "Rifts closed", "rank": 3007, "score": 1060 },
|
{ "id": 16, "name": "Rifts closed", "rank": 4773, "score": 1060 },
|
||||||
{ "id": 16, "name": "Abyssal Sire", "rank": 2578, "score": 2192 },
|
{ "id": 17, "name": "Abyssal Sire", "rank": 2741, "score": 2192 },
|
||||||
{ "id": 17, "name": "Alchemical Hydra", "rank": 84703, "score": 594 },
|
{ "id": 18, "name": "Alchemical Hydra", "rank": 90203, "score": 594 },
|
||||||
{ "id": 18, "name": "Artio", "rank": 19500, "score": 143 },
|
{ "id": 19, "name": "Artio", "rank": 29573, "score": 143 },
|
||||||
{ "id": 19, "name": "Barrows Chests", "rank": 3335, "score": 1830 },
|
{ "id": 20, "name": "Barrows Chests", "rank": 3668, "score": 1830 },
|
||||||
{ "id": 20, "name": "Bryophyta", "rank": 191697, "score": 5 },
|
{ "id": 21, "name": "Bryophyta", "rank": 206778, "score": 5 },
|
||||||
{ "id": 21, "name": "Callisto", "rank": 27457, "score": 293 },
|
{ "id": 22, "name": "Callisto", "rank": 32897, "score": 293 },
|
||||||
{ "id": 22, "name": "Calvar'ion", "rank": 43607, "score": 58 },
|
{ "id": 23, "name": "Calvar'ion", "rank": 64112, "score": 58 },
|
||||||
{ "id": 23, "name": "Cerberus", "rank": 17384, "score": 1905 },
|
{ "id": 24, "name": "Cerberus", "rank": 18492, "score": 1905 },
|
||||||
{ "id": 24, "name": "Chambers of Xeric", "rank": 171607, "score": 33 },
|
{ "id": 25, "name": "Chambers of Xeric", "rank": 178941, "score": 34 },
|
||||||
{
|
{
|
||||||
"id": 25,
|
"id": 26,
|
||||||
"name": "Chambers of Xeric: Challenge Mode",
|
"name": "Chambers of Xeric: Challenge Mode",
|
||||||
"rank": 2074,
|
"rank": 2379,
|
||||||
"score": 501
|
"score": 501
|
||||||
},
|
},
|
||||||
{ "id": 26, "name": "Chaos Elemental", "rank": 78908, "score": 50 },
|
{ "id": 27, "name": "Chaos Elemental", "rank": 82902, "score": 50 },
|
||||||
{ "id": 27, "name": "Chaos Fanatic", "rank": 135830, "score": 26 },
|
{ "id": 28, "name": "Chaos Fanatic", "rank": 147358, "score": 26 },
|
||||||
{ "id": 28, "name": "Commander Zilyana", "rank": 48781, "score": 287 },
|
{ "id": 29, "name": "Commander Zilyana", "rank": 51973, "score": 287 },
|
||||||
{ "id": 29, "name": "Corporeal Beast", "rank": 2112, "score": 2000 },
|
{ "id": 30, "name": "Corporeal Beast", "rank": 2377, "score": 2000 },
|
||||||
{ "id": 30, "name": "Crazy Archaeologist", "rank": 138748, "score": 41 },
|
{ "id": 31, "name": "Crazy Archaeologist", "rank": 147406, "score": 41 },
|
||||||
{ "id": 31, "name": "Dagannoth Prime", "rank": 31297, "score": 707 },
|
{ "id": 32, "name": "Dagannoth Prime", "rank": 32225, "score": 707 },
|
||||||
{ "id": 32, "name": "Dagannoth Rex", "rank": 40908, "score": 698 },
|
{ "id": 33, "name": "Dagannoth Rex", "rank": 42229, "score": 698 },
|
||||||
{ "id": 33, "name": "Dagannoth Supreme", "rank": 31273, "score": 714 },
|
{ "id": 34, "name": "Dagannoth Supreme", "rank": 32212, "score": 714 },
|
||||||
{ "id": 34, "name": "Deranged Archaeologist", "rank": 76034, "score": 25 },
|
{ "id": 35, "name": "Deranged Archaeologist", "rank": 79605, "score": 25 },
|
||||||
{ "id": 35, "name": "Duke Sucellus", "rank": 2391, "score": 688 },
|
{ "id": 36, "name": "Duke Sucellus", "rank": 9517, "score": 688 },
|
||||||
{ "id": 36, "name": "General Graardor", "rank": 17409, "score": 1228 },
|
{ "id": 37, "name": "General Graardor", "rank": 19125, "score": 1228 },
|
||||||
{ "id": 37, "name": "Giant Mole", "rank": 60841, "score": 474 },
|
{ "id": 38, "name": "Giant Mole", "rank": 65849, "score": 474 },
|
||||||
{ "id": 38, "name": "Grotesque Guardians", "rank": 1895, "score": 2140 },
|
{ "id": 39, "name": "Grotesque Guardians", "rank": 2080, "score": 2140 },
|
||||||
{ "id": 39, "name": "Hespori", "rank": 19948, "score": 159 },
|
{ "id": 40, "name": "Hespori", "rank": 16433, "score": 182 },
|
||||||
{ "id": 40, "name": "Kalphite Queen", "rank": 1855, "score": 2046 },
|
{ "id": 41, "name": "Kalphite Queen", "rank": 2006, "score": 2046 },
|
||||||
{ "id": 41, "name": "King Black Dragon", "rank": 46423, "score": 579 },
|
{ "id": 42, "name": "King Black Dragon", "rank": 48575, "score": 580 },
|
||||||
{ "id": 42, "name": "Kraken", "rank": 107879, "score": 1908 },
|
{ "id": 43, "name": "Kraken", "rank": 115056, "score": 1908 },
|
||||||
{ "id": 43, "name": "Kree'Arra", "rank": 9791, "score": 920 },
|
{ "id": 44, "name": "Kree'Arra", "rank": 10406, "score": 920 },
|
||||||
{ "id": 44, "name": "K'ril Tsutsaroth", "rank": 2050, "score": 1444 },
|
{ "id": 45, "name": "K'ril Tsutsaroth", "rank": 2196, "score": 1444 },
|
||||||
{ "id": 45, "name": "Mimic", "rank": 848, "score": 33 },
|
{ "id": 46, "name": "Mimic", "rank": 1005, "score": 33 },
|
||||||
{ "id": 46, "name": "Nex", "rank": 24797, "score": 620 },
|
{ "id": 47, "name": "Nex", "rank": 28413, "score": 620 },
|
||||||
{ "id": 47, "name": "Nightmare", "rank": 4157, "score": 744 },
|
{ "id": 48, "name": "Nightmare", "rank": 4157, "score": 744 },
|
||||||
{ "id": 48, "name": "Phosani's Nightmare", "rank": 4154, "score": 500 },
|
{ "id": 49, "name": "Phosani's Nightmare", "rank": 4261, "score": 500 },
|
||||||
{ "id": 49, "name": "Obor", "rank": 880, "score": 217 },
|
{ "id": 50, "name": "Obor", "rank": 993, "score": 217 },
|
||||||
{ "id": 50, "name": "Phantom Muspah", "rank": 15860, "score": 251 },
|
{ "id": 51, "name": "Phantom Muspah", "rank": 21848, "score": 251 },
|
||||||
{ "id": 51, "name": "Sarachnis", "rank": 60424, "score": 119 },
|
{ "id": 52, "name": "Sarachnis", "rank": 66260, "score": 119 },
|
||||||
{ "id": 52, "name": "Scorpia", "rank": 100429, "score": 26 },
|
{ "id": 53, "name": "Scorpia", "rank": 108898, "score": 26 },
|
||||||
{ "id": 53, "name": "Skotizo", "rank": 358191, "score": 9 },
|
{ "id": 54, "name": "Scurrius", "rank": 23958, "score": 90 },
|
||||||
{ "id": 54, "name": "Spindel", "rank": 1131, "score": 1569 },
|
{ "id": 55, "name": "Skotizo", "rank": 373975, "score": 9 },
|
||||||
{ "id": 55, "name": "Tempoross", "rank": 33908, "score": 273 },
|
{ "id": 56, "name": "Spindel", "rank": 2005, "score": 1569 },
|
||||||
{ "id": 56, "name": "The Gauntlet", "rank": 165651, "score": 7 },
|
{ "id": 57, "name": "Tempoross", "rank": 40001, "score": 273 },
|
||||||
{ "id": 57, "name": "The Corrupted Gauntlet", "rank": 64278, "score": 201 },
|
{ "id": 58, "name": "The Gauntlet", "rank": 192608, "score": 7 },
|
||||||
{ "id": 58, "name": "The Leviathan", "rank": 1533, "score": 583 },
|
{ "id": 59, "name": "The Corrupted Gauntlet", "rank": 78367, "score": 201 },
|
||||||
{ "id": 59, "name": "The Whisperer", "rank": 748, "score": 700 },
|
{ "id": 60, "name": "The Leviathan", "rank": 5679, "score": 583 },
|
||||||
{ "id": 60, "name": "Theatre of Blood", "rank": 21700, "score": 250 },
|
{ "id": 61, "name": "The Whisperer", "rank": 478, "score": 1760 },
|
||||||
|
{ "id": 62, "name": "Theatre of Blood", "rank": 22932, "score": 250 },
|
||||||
{
|
{
|
||||||
"id": 61,
|
"id": 63,
|
||||||
"name": "Theatre of Blood: Hard Mode",
|
"name": "Theatre of Blood: Hard Mode",
|
||||||
"rank": 13200,
|
"rank": 15059,
|
||||||
"score": 7
|
"score": 7
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 62,
|
"id": 64,
|
||||||
"name": "Thermonuclear Smoke Devil",
|
"name": "Thermonuclear Smoke Devil",
|
||||||
"rank": 6622,
|
"rank": 7161,
|
||||||
"score": 3066
|
"score": 3066
|
||||||
},
|
},
|
||||||
{ "id": 63, "name": "Tombs of Amascut", "rank": 87093, "score": 35 },
|
{ "id": 65, "name": "Tombs of Amascut", "rank": 101555, "score": 35 },
|
||||||
{
|
{
|
||||||
"id": 64,
|
"id": 66,
|
||||||
"name": "Tombs of Amascut: Expert Mode",
|
"name": "Tombs of Amascut: Expert Mode",
|
||||||
"rank": 2449,
|
"rank": 610,
|
||||||
"score": 502
|
"score": 933
|
||||||
},
|
},
|
||||||
{ "id": 65, "name": "TzKal-Zuk", "rank": 14541, "score": 2 },
|
{ "id": 67, "name": "TzKal-Zuk", "rank": 15733, "score": 2 },
|
||||||
{ "id": 66, "name": "TzTok-Jad", "rank": -1, "score": -1 },
|
{ "id": 68, "name": "TzTok-Jad", "rank": -1, "score": -1 },
|
||||||
{ "id": 67, "name": "Vardorvis", "rank": 1048, "score": 1432 },
|
{ "id": 69, "name": "Vardorvis", "rank": 2051, "score": 2078 },
|
||||||
{ "id": 68, "name": "Venenatis", "rank": 138, "score": 7096 },
|
{ "id": 70, "name": "Venenatis", "rank": 194, "score": 7096 },
|
||||||
{ "id": 69, "name": "Vet'ion", "rank": 58203, "score": 51 },
|
{ "id": 71, "name": "Vet'ion", "rank": 69260, "score": 51 },
|
||||||
{ "id": 70, "name": "Vorkath", "rank": 13949, "score": 2780 },
|
{ "id": 72, "name": "Vorkath", "rank": 14039, "score": 2780 },
|
||||||
{ "id": 71, "name": "Wintertodt", "rank": 827440, "score": 62 },
|
{ "id": 73, "name": "Wintertodt", "rank": 876367, "score": 62 },
|
||||||
{ "id": 72, "name": "Zalcano", "rank": 153191, "score": 25 },
|
{ "id": 74, "name": "Zalcano", "rank": 165341, "score": 25 },
|
||||||
{ "id": 73, "name": "Zulrah", "rank": 216690, "score": 274 }
|
{ "id": 75, "name": "Zulrah", "rank": 226318, "score": 275 }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,7 @@ import {
|
|||||||
getSkillPageURL,
|
getSkillPageURL,
|
||||||
getStatsURL,
|
getStatsURL,
|
||||||
BOSSES,
|
BOSSES,
|
||||||
INVALID_FORMAT_ERROR,
|
InvalidFormatError,
|
||||||
BH_MODES,
|
BH_MODES,
|
||||||
parseJsonStats,
|
parseJsonStats,
|
||||||
HiscoresResponse
|
HiscoresResponse
|
||||||
@@ -86,6 +86,7 @@ test('Parse CSV to json', () => {
|
|||||||
810,99,37688883
|
810,99,37688883
|
||||||
92,99,32005622
|
92,99,32005622
|
||||||
23423,478
|
23423,478
|
||||||
|
89554,301
|
||||||
89914,35
|
89914,35
|
||||||
99834,25
|
99834,25
|
||||||
99831,23
|
99831,23
|
||||||
@@ -138,6 +139,7 @@ test('Parse CSV to json', () => {
|
|||||||
44,6233
|
44,6233
|
||||||
201,1101
|
201,1101
|
||||||
82,3404
|
82,3404
|
||||||
|
555,7079
|
||||||
5085,61
|
5085,61
|
||||||
678,903
|
678,903
|
||||||
18823,23
|
18823,23
|
||||||
@@ -188,6 +190,7 @@ test('Parse CSV to json', () => {
|
|||||||
construction: { rank: 92, level: 99, xp: 32005622 }
|
construction: { rank: 92, level: 99, xp: 32005622 }
|
||||||
},
|
},
|
||||||
leaguePoints: { rank: 23423, score: 478 },
|
leaguePoints: { rank: 23423, score: 478 },
|
||||||
|
deadmanPoints: { rank: 89554, score: 301 },
|
||||||
bountyHunter: {
|
bountyHunter: {
|
||||||
hunterV2: { rank: 89914, score: 35 },
|
hunterV2: { rank: 89914, score: 35 },
|
||||||
rogueV2: { rank: 99834, score: 25 },
|
rogueV2: { rank: 99834, score: 25 },
|
||||||
@@ -245,6 +248,7 @@ test('Parse CSV to json', () => {
|
|||||||
phantomMuspah: { rank: 44, score: 6233 },
|
phantomMuspah: { rank: 44, score: 6233 },
|
||||||
sarachnis: { rank: 201, score: 1101 },
|
sarachnis: { rank: 201, score: 1101 },
|
||||||
scorpia: { rank: 82, score: 3404 },
|
scorpia: { rank: 82, score: 3404 },
|
||||||
|
scurrius: { rank: 555, score: 7079 },
|
||||||
skotizo: { rank: 5085, score: 61 },
|
skotizo: { rank: 5085, score: 61 },
|
||||||
spindel: { rank: 678, score: 903 },
|
spindel: { rank: 678, score: 903 },
|
||||||
tempoross: { rank: 18823, score: 23 },
|
tempoross: { rank: 18823, score: 23 },
|
||||||
@@ -276,12 +280,12 @@ test('Parse CSV with unknown activity', () => {
|
|||||||
const statsWithUnknownActivity = `${lynxTitanStats}
|
const statsWithUnknownActivity = `${lynxTitanStats}
|
||||||
-1,-1`;
|
-1,-1`;
|
||||||
expect(() => parseStats(statsWithUnknownActivity)).toThrow(
|
expect(() => parseStats(statsWithUnknownActivity)).toThrow(
|
||||||
INVALID_FORMAT_ERROR
|
InvalidFormatError
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Parse invalid CSV', () => {
|
test('Parse invalid CSV', () => {
|
||||||
expect(() => parseStats('invalid')).toThrow(INVALID_FORMAT_ERROR);
|
expect(() => parseStats('invalid')).toThrow(InvalidFormatError);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Get name format', () => {
|
describe('Get name format', () => {
|
||||||
@@ -580,6 +584,12 @@ describe('Get stats options', () => {
|
|||||||
)
|
)
|
||||||
).toBeFalsy();
|
).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
it('omits excluded gamemodes', async () => {
|
||||||
|
const response = await getStats(rsn, {
|
||||||
|
otherGamemodes: ['ironman', 'ultimate']
|
||||||
|
});
|
||||||
|
expect(response.hardcore).toBeUndefined();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('CSV and JSON parsing outputs identical object', async () => {
|
test('CSV and JSON parsing outputs identical object', async () => {
|
||||||
|
2573
__tests__/lynxTitanNamePage.html
vendored
2573
__tests__/lynxTitanNamePage.html
vendored
File diff suppressed because it is too large
Load Diff
@@ -7,8 +7,8 @@
|
|||||||
{ "id": 4, "name": "Hitpoints", "rank": 7, "level": 99, "xp": 200000000 },
|
{ "id": 4, "name": "Hitpoints", "rank": 7, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 5, "name": "Ranged", "rank": 8, "level": 99, "xp": 200000000 },
|
{ "id": 5, "name": "Ranged", "rank": 8, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 6, "name": "Prayer", "rank": 11, "level": 99, "xp": 200000000 },
|
{ "id": 6, "name": "Prayer", "rank": 11, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 7, "name": "Magic", "rank": 32, "level": 99, "xp": 200000000 },
|
{ "id": 7, "name": "Magic", "rank": 31, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 8, "name": "Cooking", "rank": 157, "level": 99, "xp": 200000000 },
|
{ "id": 8, "name": "Cooking", "rank": 155, "level": 99, "xp": 200000000 },
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"name": "Woodcutting",
|
"name": "Woodcutting",
|
||||||
@@ -27,13 +27,13 @@
|
|||||||
},
|
},
|
||||||
{ "id": 13, "name": "Crafting", "rank": 4, "level": 99, "xp": 200000000 },
|
{ "id": 13, "name": "Crafting", "rank": 4, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 14, "name": "Smithing", "rank": 3, "level": 99, "xp": 200000000 },
|
{ "id": 14, "name": "Smithing", "rank": 3, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 15, "name": "Mining", "rank": 25, "level": 99, "xp": 200000000 },
|
{ "id": 15, "name": "Mining", "rank": 24, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 16, "name": "Herblore", "rank": 5, "level": 99, "xp": 200000000 },
|
{ "id": 16, "name": "Herblore", "rank": 5, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 17, "name": "Agility", "rank": 24, "level": 99, "xp": 200000000 },
|
{ "id": 17, "name": "Agility", "rank": 24, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 18, "name": "Thieving", "rank": 12, "level": 99, "xp": 200000000 },
|
{ "id": 18, "name": "Thieving", "rank": 12, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 19, "name": "Slayer", "rank": 2, "level": 99, "xp": 200000000 },
|
{ "id": 19, "name": "Slayer", "rank": 2, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 20, "name": "Farming", "rank": 19, "level": 99, "xp": 200000000 },
|
{ "id": 20, "name": "Farming", "rank": 19, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 21, "name": "Runecraft", "rank": 7, "level": 99, "xp": 200000000 },
|
{ "id": 21, "name": "Runecraft", "rank": 6, "level": 99, "xp": 200000000 },
|
||||||
{ "id": 22, "name": "Hunter", "rank": 4, "level": 99, "xp": 200000000 },
|
{ "id": 22, "name": "Hunter", "rank": 4, "level": 99, "xp": 200000000 },
|
||||||
{
|
{
|
||||||
"id": 23,
|
"id": 23,
|
||||||
@@ -45,103 +45,104 @@
|
|||||||
],
|
],
|
||||||
"activities": [
|
"activities": [
|
||||||
{ "id": 0, "name": "League Points", "rank": -1, "score": -1 },
|
{ "id": 0, "name": "League Points", "rank": -1, "score": -1 },
|
||||||
{ "id": 1, "name": "Bounty Hunter - Hunter", "rank": -1, "score": -1 },
|
{ "id": 1, "name": "Deadman Points", "rank": -1, "score": -1 },
|
||||||
{ "id": 2, "name": "Bounty Hunter - Rogue", "rank": -1, "score": -1 },
|
{ "id": 2, "name": "Bounty Hunter - Hunter", "rank": -1, "score": -1 },
|
||||||
|
{ "id": 3, "name": "Bounty Hunter - Rogue", "rank": -1, "score": -1 },
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 4,
|
||||||
"name": "Bounty Hunter (Legacy) - Hunter",
|
"name": "Bounty Hunter (Legacy) - Hunter",
|
||||||
"rank": -1,
|
"rank": -1,
|
||||||
"score": -1
|
"score": -1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 5,
|
||||||
"name": "Bounty Hunter (Legacy) - Rogue",
|
"name": "Bounty Hunter (Legacy) - Rogue",
|
||||||
"rank": -1,
|
"rank": -1,
|
||||||
"score": -1
|
"score": -1
|
||||||
},
|
},
|
||||||
{ "id": 5, "name": "Clue Scrolls (all)", "rank": 769527, "score": 22 },
|
{ "id": 6, "name": "Clue Scrolls (all)", "rank": 805212, "score": 22 },
|
||||||
{ "id": 6, "name": "Clue Scrolls (beginner)", "rank": -1, "score": -1 },
|
{ "id": 7, "name": "Clue Scrolls (beginner)", "rank": -1, "score": -1 },
|
||||||
{ "id": 7, "name": "Clue Scrolls (easy)", "rank": -1, "score": -1 },
|
{ "id": 8, "name": "Clue Scrolls (easy)", "rank": -1, "score": -1 },
|
||||||
{ "id": 8, "name": "Clue Scrolls (medium)", "rank": -1, "score": -1 },
|
{ "id": 9, "name": "Clue Scrolls (medium)", "rank": -1, "score": -1 },
|
||||||
{ "id": 9, "name": "Clue Scrolls (hard)", "rank": 483333, "score": 22 },
|
{ "id": 10, "name": "Clue Scrolls (hard)", "rank": 502504, "score": 22 },
|
||||||
{ "id": 10, "name": "Clue Scrolls (elite)", "rank": -1, "score": -1 },
|
{ "id": 11, "name": "Clue Scrolls (elite)", "rank": -1, "score": -1 },
|
||||||
{ "id": 11, "name": "Clue Scrolls (master)", "rank": -1, "score": -1 },
|
{ "id": 12, "name": "Clue Scrolls (master)", "rank": -1, "score": -1 },
|
||||||
{ "id": 12, "name": "LMS - Rank", "rank": -1, "score": -1 },
|
{ "id": 13, "name": "LMS - Rank", "rank": -1, "score": -1 },
|
||||||
{ "id": 13, "name": "PvP Arena - Rank", "rank": -1, "score": -1 },
|
{ "id": 14, "name": "PvP Arena - Rank", "rank": -1, "score": -1 },
|
||||||
{ "id": 14, "name": "Soul Wars Zeal", "rank": -1, "score": -1 },
|
{ "id": 15, "name": "Soul Wars Zeal", "rank": -1, "score": -1 },
|
||||||
{ "id": 15, "name": "Rifts closed", "rank": -1, "score": -1 },
|
{ "id": 16, "name": "Rifts closed", "rank": -1, "score": -1 },
|
||||||
{ "id": 16, "name": "Abyssal Sire", "rank": -1, "score": -1 },
|
{ "id": 17, "name": "Abyssal Sire", "rank": -1, "score": -1 },
|
||||||
{ "id": 17, "name": "Alchemical Hydra", "rank": -1, "score": -1 },
|
{ "id": 18, "name": "Alchemical Hydra", "rank": -1, "score": -1 },
|
||||||
{ "id": 18, "name": "Artio", "rank": -1, "score": -1 },
|
{ "id": 19, "name": "Artio", "rank": -1, "score": -1 },
|
||||||
{ "id": 19, "name": "Barrows Chests", "rank": -1, "score": -1 },
|
{ "id": 20, "name": "Barrows Chests", "rank": -1, "score": -1 },
|
||||||
{ "id": 20, "name": "Bryophyta", "rank": -1, "score": -1 },
|
{ "id": 21, "name": "Bryophyta", "rank": -1, "score": -1 },
|
||||||
{ "id": 21, "name": "Callisto", "rank": -1, "score": -1 },
|
{ "id": 22, "name": "Callisto", "rank": -1, "score": -1 },
|
||||||
{ "id": 22, "name": "Calvar'ion", "rank": -1, "score": -1 },
|
{ "id": 23, "name": "Calvar'ion", "rank": -1, "score": -1 },
|
||||||
{ "id": 23, "name": "Cerberus", "rank": -1, "score": -1 },
|
{ "id": 24, "name": "Cerberus", "rank": -1, "score": -1 },
|
||||||
{ "id": 24, "name": "Chambers of Xeric", "rank": -1, "score": -1 },
|
{ "id": 25, "name": "Chambers of Xeric", "rank": -1, "score": -1 },
|
||||||
{
|
{
|
||||||
"id": 25,
|
"id": 26,
|
||||||
"name": "Chambers of Xeric: Challenge Mode",
|
"name": "Chambers of Xeric: Challenge Mode",
|
||||||
"rank": -1,
|
"rank": -1,
|
||||||
"score": -1
|
"score": -1
|
||||||
},
|
},
|
||||||
{ "id": 26, "name": "Chaos Elemental", "rank": -1, "score": -1 },
|
{ "id": 27, "name": "Chaos Elemental", "rank": -1, "score": -1 },
|
||||||
{ "id": 27, "name": "Chaos Fanatic", "rank": -1, "score": -1 },
|
{ "id": 28, "name": "Chaos Fanatic", "rank": -1, "score": -1 },
|
||||||
{ "id": 28, "name": "Commander Zilyana", "rank": -1, "score": -1 },
|
{ "id": 29, "name": "Commander Zilyana", "rank": -1, "score": -1 },
|
||||||
{ "id": 29, "name": "Corporeal Beast", "rank": -1, "score": -1 },
|
{ "id": 30, "name": "Corporeal Beast", "rank": -1, "score": -1 },
|
||||||
{ "id": 30, "name": "Crazy Archaeologist", "rank": -1, "score": -1 },
|
{ "id": 31, "name": "Crazy Archaeologist", "rank": -1, "score": -1 },
|
||||||
{ "id": 31, "name": "Dagannoth Prime", "rank": -1, "score": -1 },
|
{ "id": 32, "name": "Dagannoth Prime", "rank": -1, "score": -1 },
|
||||||
{ "id": 32, "name": "Dagannoth Rex", "rank": -1, "score": -1 },
|
{ "id": 33, "name": "Dagannoth Rex", "rank": -1, "score": -1 },
|
||||||
{ "id": 33, "name": "Dagannoth Supreme", "rank": -1, "score": -1 },
|
{ "id": 34, "name": "Dagannoth Supreme", "rank": -1, "score": -1 },
|
||||||
{ "id": 34, "name": "Deranged Archaeologist", "rank": -1, "score": -1 },
|
{ "id": 35, "name": "Deranged Archaeologist", "rank": -1, "score": -1 },
|
||||||
{ "id": 35, "name": "Duke Sucellus", "rank": -1, "score": -1 },
|
{ "id": 36, "name": "Duke Sucellus", "rank": -1, "score": -1 },
|
||||||
{ "id": 36, "name": "General Graardor", "rank": -1, "score": -1 },
|
{ "id": 37, "name": "General Graardor", "rank": -1, "score": -1 },
|
||||||
{ "id": 37, "name": "Giant Mole", "rank": -1, "score": -1 },
|
{ "id": 38, "name": "Giant Mole", "rank": -1, "score": -1 },
|
||||||
{ "id": 38, "name": "Grotesque Guardians", "rank": -1, "score": -1 },
|
{ "id": 39, "name": "Grotesque Guardians", "rank": -1, "score": -1 },
|
||||||
{ "id": 39, "name": "Hespori", "rank": -1, "score": -1 },
|
{ "id": 40, "name": "Hespori", "rank": -1, "score": -1 },
|
||||||
{ "id": 40, "name": "Kalphite Queen", "rank": -1, "score": -1 },
|
{ "id": 41, "name": "Kalphite Queen", "rank": -1, "score": -1 },
|
||||||
{ "id": 41, "name": "King Black Dragon", "rank": -1, "score": -1 },
|
{ "id": 42, "name": "King Black Dragon", "rank": -1, "score": -1 },
|
||||||
{ "id": 42, "name": "Kraken", "rank": -1, "score": -1 },
|
{ "id": 43, "name": "Kraken", "rank": -1, "score": -1 },
|
||||||
{ "id": 43, "name": "Kree'Arra", "rank": -1, "score": -1 },
|
{ "id": 44, "name": "Kree'Arra", "rank": -1, "score": -1 },
|
||||||
{ "id": 44, "name": "K'ril Tsutsaroth", "rank": -1, "score": -1 },
|
{ "id": 45, "name": "K'ril Tsutsaroth", "rank": -1, "score": -1 },
|
||||||
{ "id": 45, "name": "Mimic", "rank": -1, "score": -1 },
|
{ "id": 46, "name": "Mimic", "rank": -1, "score": -1 },
|
||||||
{ "id": 46, "name": "Nex", "rank": -1, "score": -1 },
|
{ "id": 47, "name": "Nex", "rank": -1, "score": -1 },
|
||||||
{ "id": 47, "name": "Nightmare", "rank": -1, "score": -1 },
|
{ "id": 48, "name": "Nightmare", "rank": -1, "score": -1 },
|
||||||
{ "id": 48, "name": "Phosani's Nightmare", "rank": -1, "score": -1 },
|
{ "id": 49, "name": "Phosani's Nightmare", "rank": -1, "score": -1 },
|
||||||
{ "id": 49, "name": "Obor", "rank": -1, "score": -1 },
|
{ "id": 50, "name": "Obor", "rank": -1, "score": -1 },
|
||||||
{ "id": 50, "name": "Phantom Muspah", "rank": -1, "score": -1 },
|
{ "id": 51, "name": "Phantom Muspah", "rank": -1, "score": -1 },
|
||||||
{ "id": 51, "name": "Sarachnis", "rank": -1, "score": -1 },
|
{ "id": 52, "name": "Sarachnis", "rank": -1, "score": -1 },
|
||||||
{ "id": 52, "name": "Scorpia", "rank": -1, "score": -1 },
|
{ "id": 53, "name": "Scorpia", "rank": -1, "score": -1 },
|
||||||
{ "id": 53, "name": "Skotizo", "rank": -1, "score": -1 },
|
{ "id": 54, "name": "Skotizo", "rank": -1, "score": -1 },
|
||||||
{ "id": 54, "name": "Spindel", "rank": -1, "score": -1 },
|
{ "id": 55, "name": "Spindel", "rank": -1, "score": -1 },
|
||||||
{ "id": 55, "name": "Tempoross", "rank": -1, "score": -1 },
|
{ "id": 56, "name": "Tempoross", "rank": -1, "score": -1 },
|
||||||
{ "id": 56, "name": "The Gauntlet", "rank": -1, "score": -1 },
|
{ "id": 57, "name": "The Gauntlet", "rank": -1, "score": -1 },
|
||||||
{ "id": 57, "name": "The Corrupted Gauntlet", "rank": -1, "score": -1 },
|
{ "id": 58, "name": "The Corrupted Gauntlet", "rank": -1, "score": -1 },
|
||||||
{ "id": 58, "name": "The Leviathan", "rank": -1, "score": -1 },
|
{ "id": 59, "name": "The Leviathan", "rank": -1, "score": -1 },
|
||||||
{ "id": 59, "name": "The Whisperer", "rank": -1, "score": -1 },
|
{ "id": 60, "name": "The Whisperer", "rank": -1, "score": -1 },
|
||||||
{ "id": 60, "name": "Theatre of Blood", "rank": -1, "score": -1 },
|
{ "id": 61, "name": "Theatre of Blood", "rank": -1, "score": -1 },
|
||||||
{
|
{
|
||||||
"id": 61,
|
"id": 62,
|
||||||
"name": "Theatre of Blood: Hard Mode",
|
"name": "Theatre of Blood: Hard Mode",
|
||||||
"rank": -1,
|
"rank": -1,
|
||||||
"score": -1
|
"score": -1
|
||||||
},
|
},
|
||||||
{ "id": 62, "name": "Thermonuclear Smoke Devil", "rank": -1, "score": -1 },
|
{ "id": 63, "name": "Thermonuclear Smoke Devil", "rank": -1, "score": -1 },
|
||||||
{ "id": 63, "name": "Tombs of Amascut", "rank": -1, "score": -1 },
|
{ "id": 64, "name": "Tombs of Amascut", "rank": -1, "score": -1 },
|
||||||
{
|
{
|
||||||
"id": 64,
|
"id": 65,
|
||||||
"name": "Tombs of Amascut: Expert Mode",
|
"name": "Tombs of Amascut: Expert Mode",
|
||||||
"rank": -1,
|
"rank": -1,
|
||||||
"score": -1
|
"score": -1
|
||||||
},
|
},
|
||||||
{ "id": 65, "name": "TzKal-Zuk", "rank": -1, "score": -1 },
|
{ "id": 66, "name": "TzKal-Zuk", "rank": -1, "score": -1 },
|
||||||
{ "id": 66, "name": "TzTok-Jad", "rank": 198, "score": 186 },
|
{ "id": 67, "name": "TzTok-Jad", "rank": 225, "score": 186 },
|
||||||
{ "id": 67, "name": "Vardorvis", "rank": -1, "score": -1 },
|
{ "id": 68, "name": "Vardorvis", "rank": -1, "score": -1 },
|
||||||
{ "id": 68, "name": "Venenatis", "rank": -1, "score": -1 },
|
{ "id": 69, "name": "Venenatis", "rank": -1, "score": -1 },
|
||||||
{ "id": 69, "name": "Vet'ion", "rank": -1, "score": -1 },
|
{ "id": 70, "name": "Vet'ion", "rank": -1, "score": -1 },
|
||||||
{ "id": 70, "name": "Vorkath", "rank": -1, "score": -1 },
|
{ "id": 71, "name": "Vorkath", "rank": -1, "score": -1 },
|
||||||
{ "id": 71, "name": "Wintertodt", "rank": -1, "score": -1 },
|
{ "id": 72, "name": "Wintertodt", "rank": -1, "score": -1 },
|
||||||
{ "id": 72, "name": "Zalcano", "rank": -1, "score": -1 },
|
{ "id": 73, "name": "Zalcano", "rank": -1, "score": -1 },
|
||||||
{ "id": 73, "name": "Zulrah", "rank": -1, "score": -1 }
|
{ "id": 74, "name": "Zulrah", "rank": -1, "score": -1 }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "osrs-json-hiscores",
|
"name": "osrs-json-hiscores",
|
||||||
"version": "2.15.0",
|
"version": "2.17.0",
|
||||||
"description": "The Old School Runescape API wrapper that does more!",
|
"description": "The Old School Runescape API wrapper that does more!",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "lib/index.d.ts",
|
"types": "lib/index.d.ts",
|
||||||
@@ -67,7 +67,10 @@
|
|||||||
],
|
],
|
||||||
"ignorePatterns": [
|
"ignorePatterns": [
|
||||||
"**/@types/*"
|
"**/@types/*"
|
||||||
]
|
],
|
||||||
|
"rules": {
|
||||||
|
"max-classes-per-file": "off"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"prettier": {
|
"prettier": {
|
||||||
"trailingComma": "none",
|
"trailingComma": "none",
|
||||||
@@ -92,7 +95,7 @@
|
|||||||
"testEnvironment": "node"
|
"testEnvironment": "node"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.21.1",
|
"axios": "^1.6.2",
|
||||||
"jsdom": "^22.1.0",
|
"jsdom": "^22.1.0",
|
||||||
"useragent-generator": "^1.1.0"
|
"useragent-generator": "^1.1.0"
|
||||||
},
|
},
|
||||||
|
165
src/hiscores.ts
165
src/hiscores.ts
@@ -1,4 +1,4 @@
|
|||||||
import { AxiosRequestConfig, AxiosResponse } from 'axios';
|
import axios, { AxiosRequestConfig } from 'axios';
|
||||||
import { BinaryData, JSDOM } from 'jsdom';
|
import { BinaryData, JSDOM } from 'jsdom';
|
||||||
import {
|
import {
|
||||||
Player,
|
Player,
|
||||||
@@ -31,9 +31,10 @@ import {
|
|||||||
getActivityPageURL,
|
getActivityPageURL,
|
||||||
httpGet,
|
httpGet,
|
||||||
BOSSES,
|
BOSSES,
|
||||||
INVALID_FORMAT_ERROR,
|
InvalidFormatError,
|
||||||
|
PlayerNotFoundError,
|
||||||
|
HiScoresError,
|
||||||
validateRSN,
|
validateRSN,
|
||||||
PLAYER_NOT_FOUND_ERROR,
|
|
||||||
FORMATTED_SKILL_NAMES,
|
FORMATTED_SKILL_NAMES,
|
||||||
FORMATTED_BH_NAMES,
|
FORMATTED_BH_NAMES,
|
||||||
FORMATTED_CLUE_NAMES,
|
FORMATTED_CLUE_NAMES,
|
||||||
@@ -42,7 +43,8 @@ import {
|
|||||||
FORMATTED_LMS,
|
FORMATTED_LMS,
|
||||||
FORMATTED_PVP_ARENA,
|
FORMATTED_PVP_ARENA,
|
||||||
FORMATTED_SOUL_WARS,
|
FORMATTED_SOUL_WARS,
|
||||||
FORMATTED_RIFTS_CLOSED
|
FORMATTED_RIFTS_CLOSED,
|
||||||
|
FORMATTED_DEADMAN_POINTS
|
||||||
} from './utils';
|
} from './utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -64,8 +66,12 @@ export async function getOfficialStats(
|
|||||||
try {
|
try {
|
||||||
const response = await httpGet<HiscoresResponse>(url, config);
|
const response = await httpGet<HiscoresResponse>(url, config);
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch {
|
} catch (err) {
|
||||||
throw Error(PLAYER_NOT_FOUND_ERROR);
|
if (!axios.isAxiosError(err)) throw err;
|
||||||
|
|
||||||
|
if (err.response?.status === 404) throw new PlayerNotFoundError();
|
||||||
|
|
||||||
|
throw new HiScoresError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,9 +101,9 @@ export async function getRSNFormat(
|
|||||||
if (anchor) {
|
if (anchor) {
|
||||||
return rsnFromElement(anchor);
|
return rsnFromElement(anchor);
|
||||||
}
|
}
|
||||||
throw Error(PLAYER_NOT_FOUND_ERROR);
|
throw new PlayerNotFoundError();
|
||||||
} catch {
|
} catch {
|
||||||
throw Error(PLAYER_NOT_FOUND_ERROR);
|
throw new HiScoresError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,6 +157,7 @@ export function parseJsonStats(json: HiscoresResponse): Stats {
|
|||||||
const bosses = reduceActivity(BOSSES, FORMATTED_BOSS_NAMES);
|
const bosses = reduceActivity(BOSSES, FORMATTED_BOSS_NAMES);
|
||||||
|
|
||||||
const leaguePoints = getActivity(FORMATTED_LEAGUE_POINTS);
|
const leaguePoints = getActivity(FORMATTED_LEAGUE_POINTS);
|
||||||
|
const deadmanPoints = getActivity(FORMATTED_DEADMAN_POINTS);
|
||||||
const lastManStanding = getActivity(FORMATTED_LMS);
|
const lastManStanding = getActivity(FORMATTED_LMS);
|
||||||
const pvpArena = getActivity(FORMATTED_PVP_ARENA);
|
const pvpArena = getActivity(FORMATTED_PVP_ARENA);
|
||||||
const soulWarsZeal = getActivity(FORMATTED_SOUL_WARS);
|
const soulWarsZeal = getActivity(FORMATTED_SOUL_WARS);
|
||||||
@@ -159,6 +166,7 @@ export function parseJsonStats(json: HiscoresResponse): Stats {
|
|||||||
const stats: Stats = {
|
const stats: Stats = {
|
||||||
skills,
|
skills,
|
||||||
leaguePoints,
|
leaguePoints,
|
||||||
|
deadmanPoints,
|
||||||
bountyHunter,
|
bountyHunter,
|
||||||
lastManStanding,
|
lastManStanding,
|
||||||
pvpArena,
|
pvpArena,
|
||||||
@@ -183,11 +191,8 @@ export function parseStats(csv: string): Stats {
|
|||||||
.filter((entry) => !!entry)
|
.filter((entry) => !!entry)
|
||||||
.map((stat) => stat.split(','));
|
.map((stat) => stat.split(','));
|
||||||
|
|
||||||
if (
|
if (splitCSV.length !== SKILLS.length + ACTIVITIES.length) {
|
||||||
splitCSV.length !==
|
throw new InvalidFormatError();
|
||||||
SKILLS.length + BH_MODES.length + CLUES.length + BOSSES.length + 5
|
|
||||||
) {
|
|
||||||
throw Error(INVALID_FORMAT_ERROR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const skillObjects: Skill[] = splitCSV
|
const skillObjects: Skill[] = splitCSV
|
||||||
@@ -213,7 +218,7 @@ export function parseStats(csv: string): Stats {
|
|||||||
return activity;
|
return activity;
|
||||||
});
|
});
|
||||||
|
|
||||||
const [leaguePoints] = activityObjects.splice(0, 1);
|
const [leaguePoints, deadmanPoints] = activityObjects.splice(0, 2);
|
||||||
const bhObjects = activityObjects.splice(0, BH_MODES.length);
|
const bhObjects = activityObjects.splice(0, BH_MODES.length);
|
||||||
const clueObjects = activityObjects.splice(0, CLUES.length);
|
const clueObjects = activityObjects.splice(0, CLUES.length);
|
||||||
const [lastManStanding, pvpArena, soulWarsZeal, riftsClosed] =
|
const [lastManStanding, pvpArena, soulWarsZeal, riftsClosed] =
|
||||||
@@ -247,6 +252,7 @@ export function parseStats(csv: string): Stats {
|
|||||||
const stats: Stats = {
|
const stats: Stats = {
|
||||||
skills,
|
skills,
|
||||||
leaguePoints,
|
leaguePoints,
|
||||||
|
deadmanPoints,
|
||||||
bountyHunter,
|
bountyHunter,
|
||||||
lastManStanding,
|
lastManStanding,
|
||||||
pvpArena,
|
pvpArena,
|
||||||
@@ -280,91 +286,70 @@ export async function getStats(
|
|||||||
];
|
];
|
||||||
const shouldGetFormattedRsn = options?.shouldGetFormattedRsn ?? true;
|
const shouldGetFormattedRsn = options?.shouldGetFormattedRsn ?? true;
|
||||||
|
|
||||||
const mainRes = await httpGet<HiscoresResponse>(
|
const main = await getOfficialStats(rsn, 'main', options?.axiosConfigs?.main);
|
||||||
getStatsURL('main', rsn, true),
|
|
||||||
options?.axiosConfigs?.main
|
const getModeStats = async (
|
||||||
);
|
mode: Extract<Gamemode, 'ironman' | 'hardcore' | 'ultimate'>
|
||||||
if (mainRes.status === 200) {
|
): Promise<HiscoresResponse | undefined> =>
|
||||||
const emptyResponse: AxiosResponse<HiscoresResponse> = {
|
otherGamemodes.includes(mode)
|
||||||
status: 404,
|
? getOfficialStats(rsn, mode, options?.axiosConfigs?.[mode]).catch(
|
||||||
data: { skills: [], activities: [] },
|
|
||||||
statusText: '',
|
|
||||||
headers: {},
|
|
||||||
config: {}
|
|
||||||
};
|
|
||||||
const getModeStats = async (
|
|
||||||
mode: Extract<Gamemode, 'ironman' | 'hardcore' | 'ultimate'>
|
|
||||||
): Promise<AxiosResponse<HiscoresResponse>> =>
|
|
||||||
otherGamemodes.includes(mode)
|
|
||||||
? httpGet<HiscoresResponse>(
|
|
||||||
getStatsURL(mode, rsn, true),
|
|
||||||
options?.axiosConfigs?.[mode]
|
|
||||||
).catch((err) => err)
|
|
||||||
: emptyResponse;
|
|
||||||
const formattedName = shouldGetFormattedRsn
|
|
||||||
? await getRSNFormat(rsn, options?.axiosConfigs?.rsn).catch(
|
|
||||||
() => undefined
|
() => undefined
|
||||||
)
|
)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
const formattedName = shouldGetFormattedRsn
|
||||||
|
? await getRSNFormat(rsn, options?.axiosConfigs?.rsn).catch(() => undefined)
|
||||||
|
: undefined;
|
||||||
|
|
||||||
const player: Player = {
|
const player: Player = {
|
||||||
name: formattedName ?? rsn,
|
name: formattedName ?? rsn,
|
||||||
mode: 'main',
|
mode: 'main',
|
||||||
dead: false,
|
dead: false,
|
||||||
deulted: false,
|
deulted: false,
|
||||||
deironed: false
|
deironed: false
|
||||||
};
|
};
|
||||||
player.main = parseJsonStats(mainRes.data);
|
player.main = parseJsonStats(main);
|
||||||
|
|
||||||
const ironRes = await getModeStats('ironman');
|
const iron = await getModeStats('ironman');
|
||||||
if (ironRes.status === 200) {
|
if (iron) {
|
||||||
player.ironman = parseJsonStats(ironRes.data);
|
player.ironman = parseJsonStats(iron);
|
||||||
const hcRes = await getModeStats('hardcore');
|
const hc = await getModeStats('hardcore');
|
||||||
const ultRes = await getModeStats('ultimate');
|
const ult = await getModeStats('ultimate');
|
||||||
if (hcRes.status === 200) {
|
if (hc) {
|
||||||
player.mode = 'hardcore';
|
player.mode = 'hardcore';
|
||||||
player.hardcore = parseJsonStats(hcRes.data);
|
player.hardcore = parseJsonStats(hc);
|
||||||
if (
|
if (
|
||||||
player.ironman.skills.overall.xp !== player.hardcore.skills.overall.xp
|
player.ironman.skills.overall.xp !== player.hardcore.skills.overall.xp
|
||||||
) {
|
) {
|
||||||
player.dead = true;
|
player.dead = true;
|
||||||
player.mode = 'ironman';
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
player.main.skills.overall.xp !== player.ironman.skills.overall.xp
|
|
||||||
) {
|
|
||||||
player.deironed = true;
|
|
||||||
player.mode = 'main';
|
|
||||||
}
|
|
||||||
} else if (ultRes.status === 200) {
|
|
||||||
player.mode = 'ultimate';
|
|
||||||
player.ultimate = parseJsonStats(ultRes.data);
|
|
||||||
if (
|
|
||||||
player.ironman.skills.overall.xp !== player.ultimate.skills.overall.xp
|
|
||||||
) {
|
|
||||||
player.deulted = true;
|
|
||||||
player.mode = 'ironman';
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
player.main.skills.overall.xp !== player.ironman.skills.overall.xp
|
|
||||||
) {
|
|
||||||
player.deironed = true;
|
|
||||||
player.mode = 'main';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.mode = 'ironman';
|
player.mode = 'ironman';
|
||||||
if (
|
}
|
||||||
player.main.skills.overall.xp !== player.ironman.skills.overall.xp
|
if (player.main.skills.overall.xp !== player.ironman.skills.overall.xp) {
|
||||||
) {
|
player.deironed = true;
|
||||||
player.deironed = true;
|
player.mode = 'main';
|
||||||
player.mode = 'main';
|
}
|
||||||
}
|
} else if (ult) {
|
||||||
|
player.mode = 'ultimate';
|
||||||
|
player.ultimate = parseJsonStats(ult);
|
||||||
|
if (
|
||||||
|
player.ironman.skills.overall.xp !== player.ultimate.skills.overall.xp
|
||||||
|
) {
|
||||||
|
player.deulted = true;
|
||||||
|
player.mode = 'ironman';
|
||||||
|
}
|
||||||
|
if (player.main.skills.overall.xp !== player.ironman.skills.overall.xp) {
|
||||||
|
player.deironed = true;
|
||||||
|
player.mode = 'main';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
player.mode = 'ironman';
|
||||||
|
if (player.main.skills.overall.xp !== player.ironman.skills.overall.xp) {
|
||||||
|
player.deironed = true;
|
||||||
|
player.mode = 'main';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return player;
|
|
||||||
}
|
}
|
||||||
throw Error(PLAYER_NOT_FOUND_ERROR);
|
|
||||||
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -104,6 +104,7 @@ export type Boss =
|
|||||||
| 'phantomMuspah'
|
| 'phantomMuspah'
|
||||||
| 'sarachnis'
|
| 'sarachnis'
|
||||||
| 'scorpia'
|
| 'scorpia'
|
||||||
|
| 'scurrius'
|
||||||
| 'skotizo'
|
| 'skotizo'
|
||||||
| 'spindel'
|
| 'spindel'
|
||||||
| 'tempoross'
|
| 'tempoross'
|
||||||
@@ -130,6 +131,7 @@ export type Bosses = { [Type in Boss]: Activity };
|
|||||||
|
|
||||||
export type ActivityName =
|
export type ActivityName =
|
||||||
| 'leaguePoints'
|
| 'leaguePoints'
|
||||||
|
| 'deadmanPoints'
|
||||||
| 'hunterBHV2'
|
| 'hunterBHV2'
|
||||||
| 'rogueBHV2'
|
| 'rogueBHV2'
|
||||||
| 'hunterBH'
|
| 'hunterBH'
|
||||||
@@ -150,7 +152,14 @@ export type ActivityName =
|
|||||||
export interface Stats {
|
export interface Stats {
|
||||||
skills: Skills;
|
skills: Skills;
|
||||||
clues: Clues;
|
clues: Clues;
|
||||||
|
/**
|
||||||
|
* Will only contain rank and score data for the `seasonal` gamemode.
|
||||||
|
*/
|
||||||
leaguePoints: Activity;
|
leaguePoints: Activity;
|
||||||
|
/**
|
||||||
|
* Will only contain rank and score data for the `tournament` gamemode.
|
||||||
|
*/
|
||||||
|
deadmanPoints: Activity;
|
||||||
bountyHunter: BH;
|
bountyHunter: BH;
|
||||||
lastManStanding: Activity;
|
lastManStanding: Activity;
|
||||||
pvpArena: Activity;
|
pvpArena: Activity;
|
||||||
|
@@ -111,6 +111,7 @@ export const BOSSES: Boss[] = [
|
|||||||
'phantomMuspah',
|
'phantomMuspah',
|
||||||
'sarachnis',
|
'sarachnis',
|
||||||
'scorpia',
|
'scorpia',
|
||||||
|
'scurrius',
|
||||||
'skotizo',
|
'skotizo',
|
||||||
'spindel',
|
'spindel',
|
||||||
'tempoross',
|
'tempoross',
|
||||||
@@ -135,6 +136,7 @@ export const BOSSES: Boss[] = [
|
|||||||
];
|
];
|
||||||
export const ACTIVITIES: ActivityName[] = [
|
export const ACTIVITIES: ActivityName[] = [
|
||||||
'leaguePoints',
|
'leaguePoints',
|
||||||
|
'deadmanPoints',
|
||||||
'hunterBHV2',
|
'hunterBHV2',
|
||||||
'rogueBHV2',
|
'rogueBHV2',
|
||||||
'hunterBH',
|
'hunterBH',
|
||||||
@@ -195,6 +197,7 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
|
|||||||
phantomMuspah: 'Phantom Muspah',
|
phantomMuspah: 'Phantom Muspah',
|
||||||
sarachnis: 'Sarachnis',
|
sarachnis: 'Sarachnis',
|
||||||
scorpia: 'Scorpia',
|
scorpia: 'Scorpia',
|
||||||
|
scurrius: 'Scurrius',
|
||||||
skotizo: 'Skotizo',
|
skotizo: 'Skotizo',
|
||||||
spindel: 'Spindel',
|
spindel: 'Spindel',
|
||||||
tempoross: 'Tempoross',
|
tempoross: 'Tempoross',
|
||||||
@@ -278,7 +281,45 @@ export const FORMATTED_LMS = 'LMS - Rank';
|
|||||||
export const FORMATTED_PVP_ARENA = 'PvP Arena - Rank';
|
export const FORMATTED_PVP_ARENA = 'PvP Arena - Rank';
|
||||||
export const FORMATTED_SOUL_WARS = 'Soul Wars Zeal';
|
export const FORMATTED_SOUL_WARS = 'Soul Wars Zeal';
|
||||||
export const FORMATTED_LEAGUE_POINTS = 'League Points';
|
export const FORMATTED_LEAGUE_POINTS = 'League Points';
|
||||||
|
export const FORMATTED_DEADMAN_POINTS = 'Deadman Points';
|
||||||
export const FORMATTED_RIFTS_CLOSED = 'Rifts closed';
|
export const FORMATTED_RIFTS_CLOSED = 'Rifts closed';
|
||||||
|
|
||||||
export const INVALID_FORMAT_ERROR = 'Invalid hiscores format';
|
export const INVALID_FORMAT_ERROR = 'Invalid hiscores format';
|
||||||
export const PLAYER_NOT_FOUND_ERROR = 'Player not found';
|
export const PLAYER_NOT_FOUND_ERROR = 'Player not found';
|
||||||
|
export const HISCORES_ERROR = 'HiScores not responding';
|
||||||
|
|
||||||
|
export class InvalidFormatError extends Error {
|
||||||
|
__proto__ = Error;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super(INVALID_FORMAT_ERROR);
|
||||||
|
Object.setPrototypeOf(this, InvalidFormatError.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class InvalidRSNError extends Error {
|
||||||
|
__proto__ = Error;
|
||||||
|
|
||||||
|
constructor(message: string) {
|
||||||
|
super(message);
|
||||||
|
Object.setPrototypeOf(this, InvalidRSNError.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class PlayerNotFoundError extends Error {
|
||||||
|
__proto__ = Error;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super(PLAYER_NOT_FOUND_ERROR);
|
||||||
|
Object.setPrototypeOf(this, PlayerNotFoundError.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class HiScoresError extends Error {
|
||||||
|
__proto__ = Error;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super(HISCORES_ERROR);
|
||||||
|
Object.setPrototypeOf(this, HiScoresError.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -7,7 +7,8 @@ import {
|
|||||||
SCORES_URL,
|
SCORES_URL,
|
||||||
SKILLS,
|
SKILLS,
|
||||||
ACTIVITIES,
|
ACTIVITIES,
|
||||||
JSON_STATS_URL
|
JSON_STATS_URL,
|
||||||
|
InvalidRSNError
|
||||||
} from './constants';
|
} from './constants';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -119,10 +120,10 @@ export const httpGet = <Response>(
|
|||||||
*/
|
*/
|
||||||
export const validateRSN = (rsn: string) => {
|
export const validateRSN = (rsn: string) => {
|
||||||
if (typeof rsn !== 'string') {
|
if (typeof rsn !== 'string') {
|
||||||
throw Error('RSN must be a string');
|
throw new InvalidRSNError('RSN must be a string');
|
||||||
} else if (!/^[a-zA-Z0-9 _-]+$/.test(rsn)) {
|
} else if (!/^[a-zA-Z0-9 _-]+$/.test(rsn)) {
|
||||||
throw Error('RSN contains invalid character');
|
throw new InvalidRSNError('RSN contains invalid character');
|
||||||
} else if (rsn.length > 12 || rsn.length < 1) {
|
} else if (rsn.length > 12 || rsn.length < 1) {
|
||||||
throw Error('RSN must be between 1 and 12 characters');
|
throw new InvalidRSNError('RSN must be between 1 and 12 characters');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
117
yarn.lock
117
yarn.lock
@@ -29,6 +29,14 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/highlight" "^7.22.5"
|
"@babel/highlight" "^7.22.5"
|
||||||
|
|
||||||
|
"@babel/code-frame@^7.22.13":
|
||||||
|
version "7.22.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
|
||||||
|
integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
|
||||||
|
dependencies:
|
||||||
|
"@babel/highlight" "^7.22.13"
|
||||||
|
chalk "^2.4.2"
|
||||||
|
|
||||||
"@babel/compat-data@^7.22.9":
|
"@babel/compat-data@^7.22.9":
|
||||||
version "7.22.9"
|
version "7.22.9"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730"
|
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730"
|
||||||
@@ -55,7 +63,7 @@
|
|||||||
json5 "^2.2.2"
|
json5 "^2.2.2"
|
||||||
semver "^6.3.1"
|
semver "^6.3.1"
|
||||||
|
|
||||||
"@babel/generator@^7.22.7", "@babel/generator@^7.22.9", "@babel/generator@^7.7.2":
|
"@babel/generator@^7.22.9", "@babel/generator@^7.7.2":
|
||||||
version "7.22.9"
|
version "7.22.9"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d"
|
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d"
|
||||||
integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==
|
integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==
|
||||||
@@ -65,6 +73,16 @@
|
|||||||
"@jridgewell/trace-mapping" "^0.3.17"
|
"@jridgewell/trace-mapping" "^0.3.17"
|
||||||
jsesc "^2.5.1"
|
jsesc "^2.5.1"
|
||||||
|
|
||||||
|
"@babel/generator@^7.23.0":
|
||||||
|
version "7.23.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
|
||||||
|
integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.23.0"
|
||||||
|
"@jridgewell/gen-mapping" "^0.3.2"
|
||||||
|
"@jridgewell/trace-mapping" "^0.3.17"
|
||||||
|
jsesc "^2.5.1"
|
||||||
|
|
||||||
"@babel/helper-compilation-targets@^7.22.9":
|
"@babel/helper-compilation-targets@^7.22.9":
|
||||||
version "7.22.9"
|
version "7.22.9"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892"
|
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892"
|
||||||
@@ -76,18 +94,23 @@
|
|||||||
lru-cache "^5.1.1"
|
lru-cache "^5.1.1"
|
||||||
semver "^6.3.1"
|
semver "^6.3.1"
|
||||||
|
|
||||||
|
"@babel/helper-environment-visitor@^7.22.20":
|
||||||
|
version "7.22.20"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
|
||||||
|
integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
|
||||||
|
|
||||||
"@babel/helper-environment-visitor@^7.22.5":
|
"@babel/helper-environment-visitor@^7.22.5":
|
||||||
version "7.22.5"
|
version "7.22.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98"
|
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98"
|
||||||
integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==
|
integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==
|
||||||
|
|
||||||
"@babel/helper-function-name@^7.22.5":
|
"@babel/helper-function-name@^7.23.0":
|
||||||
version "7.22.5"
|
version "7.23.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be"
|
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
|
||||||
integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==
|
integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/template" "^7.22.5"
|
"@babel/template" "^7.22.15"
|
||||||
"@babel/types" "^7.22.5"
|
"@babel/types" "^7.23.0"
|
||||||
|
|
||||||
"@babel/helper-hoist-variables@^7.22.5":
|
"@babel/helper-hoist-variables@^7.22.5":
|
||||||
version "7.22.5"
|
version "7.22.5"
|
||||||
@@ -148,6 +171,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
|
||||||
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
|
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
|
||||||
|
|
||||||
|
"@babel/helper-validator-identifier@^7.22.20":
|
||||||
|
version "7.22.20"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
|
||||||
|
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
|
||||||
|
|
||||||
"@babel/helper-validator-identifier@^7.22.5":
|
"@babel/helper-validator-identifier@^7.22.5":
|
||||||
version "7.22.5"
|
version "7.22.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
|
||||||
@@ -176,6 +204,15 @@
|
|||||||
chalk "^2.0.0"
|
chalk "^2.0.0"
|
||||||
js-tokens "^4.0.0"
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
|
"@babel/highlight@^7.22.13":
|
||||||
|
version "7.22.20"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
|
||||||
|
integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.22.20"
|
||||||
|
chalk "^2.4.2"
|
||||||
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
"@babel/highlight@^7.22.5":
|
"@babel/highlight@^7.22.5":
|
||||||
version "7.22.5"
|
version "7.22.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
|
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
|
||||||
@@ -195,6 +232,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae"
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae"
|
||||||
integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==
|
integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==
|
||||||
|
|
||||||
|
"@babel/parser@^7.22.15", "@babel/parser@^7.23.0":
|
||||||
|
version "7.23.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
|
||||||
|
integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
|
||||||
|
|
||||||
"@babel/plugin-syntax-async-generators@^7.8.4":
|
"@babel/plugin-syntax-async-generators@^7.8.4":
|
||||||
version "7.8.4"
|
version "7.8.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
|
||||||
@@ -293,6 +335,15 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.22.5"
|
"@babel/helper-plugin-utils" "^7.22.5"
|
||||||
|
|
||||||
|
"@babel/template@^7.22.15":
|
||||||
|
version "7.22.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
|
||||||
|
integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.22.13"
|
||||||
|
"@babel/parser" "^7.22.15"
|
||||||
|
"@babel/types" "^7.22.15"
|
||||||
|
|
||||||
"@babel/template@^7.22.5":
|
"@babel/template@^7.22.5":
|
||||||
version "7.22.5"
|
version "7.22.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
|
||||||
@@ -312,18 +363,18 @@
|
|||||||
"@babel/types" "^7.12.7"
|
"@babel/types" "^7.12.7"
|
||||||
|
|
||||||
"@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8":
|
"@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8":
|
||||||
version "7.22.8"
|
version "7.23.2"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e"
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
|
||||||
integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==
|
integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "^7.22.5"
|
"@babel/code-frame" "^7.22.13"
|
||||||
"@babel/generator" "^7.22.7"
|
"@babel/generator" "^7.23.0"
|
||||||
"@babel/helper-environment-visitor" "^7.22.5"
|
"@babel/helper-environment-visitor" "^7.22.20"
|
||||||
"@babel/helper-function-name" "^7.22.5"
|
"@babel/helper-function-name" "^7.23.0"
|
||||||
"@babel/helper-hoist-variables" "^7.22.5"
|
"@babel/helper-hoist-variables" "^7.22.5"
|
||||||
"@babel/helper-split-export-declaration" "^7.22.6"
|
"@babel/helper-split-export-declaration" "^7.22.6"
|
||||||
"@babel/parser" "^7.22.7"
|
"@babel/parser" "^7.23.0"
|
||||||
"@babel/types" "^7.22.5"
|
"@babel/types" "^7.23.0"
|
||||||
debug "^4.1.0"
|
debug "^4.1.0"
|
||||||
globals "^11.1.0"
|
globals "^11.1.0"
|
||||||
|
|
||||||
@@ -345,6 +396,15 @@
|
|||||||
"@babel/helper-validator-identifier" "^7.22.5"
|
"@babel/helper-validator-identifier" "^7.22.5"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
|
"@babel/types@^7.22.15", "@babel/types@^7.23.0":
|
||||||
|
version "7.23.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
|
||||||
|
integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-string-parser" "^7.22.5"
|
||||||
|
"@babel/helper-validator-identifier" "^7.22.20"
|
||||||
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
"@bcoe/v8-coverage@^0.2.3":
|
"@bcoe/v8-coverage@^0.2.3":
|
||||||
version "0.2.3"
|
version "0.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
|
||||||
@@ -1227,12 +1287,14 @@ available-typed-arrays@^1.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
|
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
|
||||||
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
|
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
|
||||||
|
|
||||||
axios@^0.21.1:
|
axios@^1.6.2:
|
||||||
version "0.21.2"
|
version "1.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017"
|
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2"
|
||||||
integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==
|
integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects "^1.14.0"
|
follow-redirects "^1.15.0"
|
||||||
|
form-data "^4.0.0"
|
||||||
|
proxy-from-env "^1.1.0"
|
||||||
|
|
||||||
babel-jest@^29.6.1:
|
babel-jest@^29.6.1:
|
||||||
version "29.6.1"
|
version "29.6.1"
|
||||||
@@ -2366,10 +2428,10 @@ flatted@^3.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
|
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
|
||||||
integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
|
integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
|
||||||
|
|
||||||
follow-redirects@^1.14.0:
|
follow-redirects@^1.15.0:
|
||||||
version "1.14.8"
|
version "1.15.4"
|
||||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf"
|
||||||
integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
|
integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==
|
||||||
|
|
||||||
for-each@^0.3.3:
|
for-each@^0.3.3:
|
||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
@@ -4671,6 +4733,11 @@ prompts@^2.0.1:
|
|||||||
kleur "^3.0.3"
|
kleur "^3.0.3"
|
||||||
sisteransi "^1.0.5"
|
sisteransi "^1.0.5"
|
||||||
|
|
||||||
|
proxy-from-env@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
|
||||||
|
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
|
||||||
|
|
||||||
psl@^1.1.33:
|
psl@^1.1.33:
|
||||||
version "1.8.0"
|
version "1.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
||||||
|
Reference in New Issue
Block a user