Compare commits

...

45 Commits

Author SHA1 Message Date
maxswa
20a1709dc7 v2.23.0 2025-08-10 14:44:44 -04:00
Max Swartwout
880242330b Merge pull request #109 from maxswa/dependabot/npm_and_yarn/axios-1.8.2
Bump axios from 1.7.4 to 1.8.2
2025-08-10 14:42:43 -04:00
Max Swartwout
465b0a1eb5 Merge pull request #110 from maxswa/dependabot/npm_and_yarn/form-data-4.0.4
Bump form-data from 4.0.0 to 4.0.4
2025-08-10 14:42:20 -04:00
Max Swartwout
0311d1c35c Merge pull request #111 from davidvorona/add-dom
Add Doom of Mokhaiotl boss
2025-08-10 14:41:59 -04:00
David Vorona
25888bbe57 Add Doom of Mokhaiotl boss 2025-08-05 10:41:51 -07:00
dependabot[bot]
7afa9a1902 Bump form-data from 4.0.0 to 4.0.4
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.0 to 4.0.4.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.0...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 23:10:42 +00:00
dependabot[bot]
5070dc9da1 Bump axios from 1.7.4 to 1.8.2
Bumps [axios](https://github.com/axios/axios) from 1.7.4 to 1.8.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.4...v1.8.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.8.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-22 16:24:12 +00:00
maxswa
6d000df717 v2.22.0 2025-05-22 12:22:57 -04:00
Max Swartwout
5575a83039 Merge pull request #108 from davidvorona/add-yama
Add Yama, the Master of Pacts
2025-05-21 14:51:10 -04:00
David Vorona
86d9bcb2e7 Add Yama, the Master of Pacts 2025-05-21 10:21:23 -07:00
maxswa
79c067152c v2.21.1 2025-02-24 19:46:38 -05:00
Max Swartwout
e51e7bc32e Merge pull request #107 from maxswa/max/rsn-format-errors
Fix RSN format errors, add mode argument.
2025-02-24 19:45:26 -05:00
maxswa
7d7c7f9b08 Fix RSN format errors, add mode. 2025-02-24 19:41:27 -05:00
maxswa
fd24890f67 v2.21.0 2025-02-24 19:09:05 -05:00
Max Swartwout
3ba434978a Merge pull request #103 from maxswa/dependabot/npm_and_yarn/cross-spawn-7.0.6
Bump cross-spawn from 7.0.3 to 7.0.6
2025-02-24 19:07:17 -05:00
Max Swartwout
44ecdf5434 Merge pull request #106 from evanw555/add-collections-titans
Add Collections Logged, Royal Titans
2025-02-24 19:06:56 -05:00
maxswa
99fc97f05e Fix csv parsing, tests. 2025-02-24 19:03:56 -05:00
Evan Williams
b3fc5846f3 Add Collections Logged, Royal Titans 2025-02-07 00:50:49 -08:00
dependabot[bot]
1deed9f450 Bump cross-spawn from 7.0.3 to 7.0.6
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 22:43:06 +00:00
maxswa
0be3f0b636 v2.20.0 2024-09-25 12:11:27 -04:00
Max Swartwout
ec1ed53669 Merge pull request #102 from maxswa/varlamore-part-2
Add Amoxliatl, The Hueycoatl
2024-09-25 11:59:54 -04:00
maxswa
d0f5285470 Add Amoxliatl, The Hueycoatl 2024-09-25 11:56:09 -04:00
maxswa
9c56e44344 v2.19.0 2024-08-30 01:30:49 -04:00
Max Swartwout
e5b3075ebd Merge pull request #101 from maxswa/dependabot/npm_and_yarn/axios-1.7.4
Bump axios from 1.6.2 to 1.7.4
2024-08-30 01:07:29 -04:00
dependabot[bot]
8bb50b73b2 Bump axios from 1.6.2 to 1.7.4
Bumps [axios](https://github.com/axios/axios) from 1.6.2 to 1.7.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.6.2...v1.7.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-30 05:05:04 +00:00
Max Swartwout
cb482ad720 Merge pull request #98 from maxswa/dependabot/npm_and_yarn/ws-8.17.1
Bump ws from 8.13.0 to 8.17.1
2024-08-30 01:04:53 -04:00
Max Swartwout
0fbd85aa07 Merge pull request #100 from maxswa/dependabot/npm_and_yarn/micromatch-4.0.8
Bump micromatch from 4.0.2 to 4.0.8
2024-08-30 01:04:39 -04:00
Max Swartwout
e634b107b1 Merge pull request #99 from Not-Jayden/araxxor
Add Araxxor
2024-08-30 01:04:26 -04:00
dependabot[bot]
29db21493c Bump micromatch from 4.0.2 to 4.0.8
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.2 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.2...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-30 04:14:53 +00:00
Jayden Carey
b117cfcf41 add araxxor 2024-08-29 00:17:36 +08:00
dependabot[bot]
d895326d9f Bump ws from 8.13.0 to 8.17.1
Bumps [ws](https://github.com/websockets/ws) from 8.13.0 to 8.17.1.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.13.0...8.17.1)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-18 06:40:44 +00:00
maxswa
1f7a25d421 v2.18.0 2024-03-20 19:23:50 -04:00
Max Swartwout
057812681b Merge pull request #95 from maxswa/varlamore-part-one
Add Colosseum Glory, Lunar Chests, Sol Heredit
2024-03-20 19:21:55 -04:00
Max Swartwout
ee510ec69a Merge pull request #94 from maxswa/dependabot/npm_and_yarn/follow-redirects-1.15.6
Bump follow-redirects from 1.15.4 to 1.15.6
2024-03-20 19:19:55 -04:00
maxswa
6adcb02545 Add Colosseum Glory, Lunar Chests, Sol Heredit 2024-03-20 19:18:35 -04:00
dependabot[bot]
dacbd90189 Bump follow-redirects from 1.15.4 to 1.15.6
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-16 23:16:39 +00:00
maxswa
3b502cb7cf v2.17.0 2024-01-24 11:25:48 -05:00
Max Swartwout
b3f81e66eb Merge pull request #88 from maxswa/scurrius
Add Scurrius
2024-01-24 11:24:34 -05:00
Max Swartwout
01150b6234 Merge pull request #93 from maxswa/update-readme-json-api
Add reference to official JSON API in README
2024-01-19 18:43:47 -05:00
maxswa
ca4d75f2c7 Add reference to official JSON API in README. 2024-01-19 18:37:14 -05:00
Max Swartwout
03b2ef42d2 Merge pull request #91 from maxswa/dependabot/npm_and_yarn/follow-redirects-1.15.4
Bump follow-redirects from 1.15.3 to 1.15.4
2024-01-19 18:18:24 -05:00
dependabot[bot]
7e2603b235 Bump follow-redirects from 1.15.3 to 1.15.4
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.3 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-11 04:36:21 +00:00
maxswa
92452e240c Add Scurrius 2023-12-30 23:25:32 -05:00
maxswa
d01b36422e v2.16.3 2023-12-17 20:17:17 -05:00
Max Swartwout
3bc1352838 Merge pull request #90 from maxswa/deadman-points
Add Deadman Points
2023-12-17 20:16:28 -05:00
11 changed files with 1616 additions and 401 deletions

View File

@@ -5,22 +5,24 @@
[![types](https://img.shields.io/npm/types/osrs-json-hiscores.svg?style=flat-square)](https://github.com/maxswa/osrs-json-hiscores/blob/master/src/types.ts)
[![build](https://img.shields.io/github/actions/workflow/status/maxswa/osrs-json-hiscores/main.yml?style=flat-square&branch=main)](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
The official hiscores API for Old School Runescape (OSRS) returns CSV.
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).
The official hiscores API for Old School RuneScape (OSRS) can return CSV or a simple JSON array.
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.
---
### 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:
```javascript
const hiscores = require('osrs-json-hiscores');
```typescript
import { getStatsByGamemode, getSkillPage } from 'osrs-json-hiscores';
```
Once you import it you can call the functions asynchronously:
```javascript
hiscores
.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');
```typescript
const stats = await getStatsByGamemode('Lynx Titan');
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:
```javascript
hiscores
.getSkillPage('attack', 'main', 1)
```typescript
getSkillPage('attack', 'main', 1)
.then((res) => console.log(res))
.catch((err) => console.error(err));
```
@@ -104,16 +92,18 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
### Minigames
| Minigame | Param |
| ------------------------------- | :---------------: |
| Bounty Hunter (Legacy - Rogue) | `rogueBH` |
| Bounty Hunter (Legacy - Hunter) | `hunterBH` |
| Bounty Hunter (Rogue) | `rogueBHV2` |
| Bounty Hunter (Hunter) | `hunterBHV2` |
| LMS - Rank | `lastManStanding` |
| PvP Arena - Rank | `pvpArena` |
| Soul Wars Zeal | `soulWarsZeal` |
| Rifts closed | `riftsClosed` |
| Minigame | Param |
| ------------------------------- | :-----------------: |
| Bounty Hunter (Legacy - Rogue) | `rogueBH` |
| Bounty Hunter (Legacy - Hunter) | `hunterBH` |
| Bounty Hunter (Rogue) | `rogueBHV2` |
| Bounty Hunter (Hunter) | `hunterBHV2` |
| LMS - Rank | `lastManStanding` |
| PvP Arena - Rank | `pvpArena` |
| Soul Wars Zeal | `soulWarsZeal` |
| Rifts closed | `riftsClosed` |
| Colosseum Glory | `colosseumGlory` |
| Collections Logged | `collectionsLogged` |
### Points
@@ -128,6 +118,8 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
| --------------------------------- | :----------------------------: |
| Abyssal Sire | `abyssalSire` |
| Alchemical Hydra | `alchemicalHydra` |
| Amoxliatl | `amoxliatl` |
| Araxxor | `araxxor` |
| Artio | `artio` |
| Barrows Chests | `barrows` |
| Bryophyta | `bryophyta` |
@@ -145,6 +137,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
| Dagannoth Rex | `dagannothRex` |
| Dagannoth Supreme | `dagannothSupreme` |
| Deranged Archaeologist | `derangedArchaeologist` |
| Doom of Mokhaiotl | `doomOfMokhaiotl` |
| Duke Sucellus | `dukeSucellus` |
| General Graardor | `generalGraardor` |
| Giant Mole | `giantMole` |
@@ -155,6 +148,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
| Kraken | `kraken` |
| Kreearra | `kreeArra` |
| K'ril Tsutsaroth | `krilTsutsaroth` |
| Lunar Chests | `lunarChests` |
| Mimic | `mimic` |
| Nex | `nex` |
| Nightmare | `nightmare` |
@@ -163,12 +157,16 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
| Phantom Muspah | `phantomMuspah` |
| Sarachnis | `sarachnis` |
| Scorpia | `scorpia` |
| Scurrius | `scurrius` |
| Skotizo | `skotizo` |
| Sol Heredit | `solHeredit` |
| Spindel | `spindel` |
| Tempoross | `tempoross` |
| The Gauntlet | `gauntlet` |
| The Corrupted Gauntlet | `corruptedGauntlet` |
| The Hueycoatl | `hueycoatl` |
| The Leviathan | `leviathan` |
| The Royal Titans | `royalTitans` |
| The Whisperer | `whisperer` |
| Theatre Of Blood | `theatreOfBlood` |
| Theatre Of Blood: Hard Mode | `theatreOfBloodHardMode` |
@@ -182,6 +180,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
| Vetion | `vetion` |
| Vorkath | `vorkath` |
| Wintertodt | `wintertodt` |
| Yama | `yama` |
| Zalcano | `zalcano` |
| Zulrah | `zulrah` |
@@ -189,7 +188,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
`getStats` returns a player object that looks like this:
```javascript
```typescript
{
name: 'Lynx Titan',
mode: 'main',
@@ -210,6 +209,8 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
pvpArena: {},
soulWarsZeal: {},
riftsClosed: {},
colosseumGlory: {},
collectionsLogged: {},
bosses: {}
}
}
@@ -217,7 +218,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):
```javascript
```typescript
[
{ rank: 1, name: 'Lynx Titan', level: 2277, xp: 4600000000, dead: false },
{},
@@ -230,7 +231,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:
```javascript
```typescript
// kril === "K'ril Tsutsaroth"
const kril = FORMATTED_BOSS_NAMES['krilTsutsaroth'];
```

View File

@@ -1,99 +1,110 @@
3745,2277,840426611
24080,99,30276246
9559,99,31228199
2212,99,143599407
3550,99,123248914
6564,99,109953707
4244,99,15144846
4107,99,57072224
135556,99,13353511
25855,99,16903268
53472,99,13456850
22453,99,16654917
17690,99,19118307
45816,99,14059776
10409,99,16530015
27702,99,14765145
39430,99,13235063
6722,99,15754877
51813,99,14023027
5324,99,33835543
3154,99,69527777
4719,99,22733384
15135,99,17952893
1089,99,17998715
2210,2277,1150073045
23988,99,33320012
3114,99,51215128
1203,99,200000000
1372,99,196290925
3458,99,159426771
2746,99,17744970
2031,99,91566360
161852,99,13386665
25801,99,19461878
64826,99,13473417
26528,99,16672481
20829,99,19483653
58378,99,14103220
13188,99,16573909
36283,99,15061037
17137,99,14670565
8751,99,16169665
60803,99,14390315
1718,99,57850681
2117,99,110369178
5540,99,22739567
22326,99,18052465
1467,99,18050183
-1,-1
-1,-1
26164,10
12886,3
148658,8
103161,7
377,9556
862,825
148,6000
2153,1606
42107,298
504,459
1816,368
14701,2521
38135,10
19368,3
146220,8
100923,7
433,9802
1542,825
158,6000
2572,1606
47979,311
1081,460
880,600
4258,6785
-1,-1
6776,14780
4773,1060
2741,2192
90203,594
29573,143
3668,1830
206778,5
32897,293
64112,58
18492,1905
178941,34
2379,501
82902,50
147358,26
51973,287
2377,2000
147406,41
32225,707
42229,698
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
4261,500
993,217
21848,251
66260,119
108898,26
373975,9
2005,1569
40001,273
192608,7
78367,201
5679,583
478,1760
22932,250
15059,7
7161,3066
101555,35
610,933
15733,2
-1,-1
2051,2078
194,7096
69260,51
14039,2780
876367,62
165341,25
226318,275
7596,14780
8124,1060
10438,43487
1114,1155
3497,2192
3204,4796
1087,984
2230,2328
51533,143
4243,1830
256985,5
54424,293
114691,58
11700,2657
211708,34
1779,736
24958,215
46504,116
66096,287
3133,2000
26682,198
19337,1078
25021,1062
19290,1088
89474,25
1140,8
7535,1320
23251,1228
82016,477
876,3642
7073,310
2476,2046
55411,580
68801,2899
4608,1740
3079,1444
8344,324
540,53
38395,626
4176,749
5519,500
1394,217
26127,379
49730,249
57206,91
6106,1245
185920,29
3232,49
4276,1569
57314,273
256794,7
113862,201
1969,538
12346,671
5606,149
550,2450
25557,310
1391,538
9325,3066
131996,37
214,1720
8902,7
148385,8
6120,2113
287,7096
97368,51
15591,2780
1000405,67
19722,173
213696,25
240082,340
Can't render this file because it has a wrong number of fields in line 25.

View File

@@ -3,199 +3,688 @@
{
"id": 0,
"name": "Overall",
"rank": 3745,
"rank": 2210,
"level": 2277,
"xp": 840426611
"xp": 1150073045
},
{
"id": 1,
"name": "Attack",
"rank": 23988,
"level": 99,
"xp": 33320012
},
{
"id": 2,
"name": "Defence",
"rank": 3114,
"level": 99,
"xp": 51215128
},
{
"id": 3,
"name": "Strength",
"rank": 1203,
"level": 99,
"xp": 200000000
},
{ "id": 1, "name": "Attack", "rank": 24080, "level": 99, "xp": 30276246 },
{ "id": 2, "name": "Defence", "rank": 9559, "level": 99, "xp": 31228199 },
{ "id": 3, "name": "Strength", "rank": 2212, "level": 99, "xp": 143599407 },
{
"id": 4,
"name": "Hitpoints",
"rank": 3550,
"rank": 1372,
"level": 99,
"xp": 123248914
"xp": 196290925
},
{
"id": 5,
"name": "Ranged",
"rank": 3458,
"level": 99,
"xp": 159426771
},
{
"id": 6,
"name": "Prayer",
"rank": 2746,
"level": 99,
"xp": 17744970
},
{
"id": 7,
"name": "Magic",
"rank": 2031,
"level": 99,
"xp": 91566360
},
{
"id": 8,
"name": "Cooking",
"rank": 161852,
"level": 99,
"xp": 13386665
},
{ "id": 5, "name": "Ranged", "rank": 6564, "level": 99, "xp": 109953707 },
{ "id": 6, "name": "Prayer", "rank": 4244, "level": 99, "xp": 15144846 },
{ "id": 7, "name": "Magic", "rank": 4107, "level": 99, "xp": 57072224 },
{ "id": 8, "name": "Cooking", "rank": 135556, "level": 99, "xp": 13353511 },
{
"id": 9,
"name": "Woodcutting",
"rank": 25855,
"rank": 25801,
"level": 99,
"xp": 16903268
"xp": 19461878
},
{
"id": 10,
"name": "Fletching",
"rank": 53472,
"rank": 64826,
"level": 99,
"xp": 13456850
"xp": 13473417
},
{
"id": 11,
"name": "Fishing",
"rank": 26528,
"level": 99,
"xp": 16672481
},
{ "id": 11, "name": "Fishing", "rank": 22453, "level": 99, "xp": 16654917 },
{
"id": 12,
"name": "Firemaking",
"rank": 17690,
"rank": 20829,
"level": 99,
"xp": 19118307
"xp": 19483653
},
{
"id": 13,
"name": "Crafting",
"rank": 45816,
"rank": 58378,
"level": 99,
"xp": 14059776
"xp": 14103220
},
{
"id": 14,
"name": "Smithing",
"rank": 10409,
"rank": 13188,
"level": 99,
"xp": 16530015
"xp": 16573909
},
{
"id": 15,
"name": "Mining",
"rank": 36283,
"level": 99,
"xp": 15061037
},
{ "id": 15, "name": "Mining", "rank": 27702, "level": 99, "xp": 14765145 },
{
"id": 16,
"name": "Herblore",
"rank": 39430,
"rank": 17137,
"level": 99,
"xp": 13235063
"xp": 14670565
},
{
"id": 17,
"name": "Agility",
"rank": 8751,
"level": 99,
"xp": 16169665
},
{ "id": 17, "name": "Agility", "rank": 6722, "level": 99, "xp": 15754877 },
{
"id": 18,
"name": "Thieving",
"rank": 51813,
"rank": 60803,
"level": 99,
"xp": 14023027
"xp": 14390315
},
{
"id": 19,
"name": "Slayer",
"rank": 1718,
"level": 99,
"xp": 57850681
},
{
"id": 20,
"name": "Farming",
"rank": 2117,
"level": 99,
"xp": 110369178
},
{ "id": 19, "name": "Slayer", "rank": 5324, "level": 99, "xp": 33835543 },
{ "id": 20, "name": "Farming", "rank": 3154, "level": 99, "xp": 69527777 },
{
"id": 21,
"name": "Runecraft",
"rank": 4719,
"rank": 5540,
"level": 99,
"xp": 22733384
"xp": 22739567
},
{
"id": 22,
"name": "Hunter",
"rank": 22326,
"level": 99,
"xp": 18052465
},
{ "id": 22, "name": "Hunter", "rank": 15135, "level": 99, "xp": 17952893 },
{
"id": 23,
"name": "Construction",
"rank": 1089,
"rank": 1467,
"level": 99,
"xp": 17998715
"xp": 18050183
}
],
"activities": [
{ "id": 0, "name": "League Points", "rank": -1, "score": -1 },
{ "id": 1, "name": "Deadman Points", "rank": -1, "score": -1 },
{ "id": 2, "name": "Bounty Hunter - Hunter", "rank": 26164, "score": 10 },
{ "id": 3, "name": "Bounty Hunter - Rogue", "rank": 12886, "score": 3 },
{
"id": 0,
"name": "League Points",
"rank": -1,
"score": -1
},
{
"id": 1,
"name": "Deadman Points",
"rank": -1,
"score": -1
},
{
"id": 2,
"name": "Bounty Hunter - Hunter",
"rank": 38135,
"score": 10
},
{
"id": 3,
"name": "Bounty Hunter - Rogue",
"rank": 19368,
"score": 3
},
{
"id": 4,
"name": "Bounty Hunter (Legacy) - Hunter",
"rank": 148658,
"rank": 146220,
"score": 8
},
{
"id": 5,
"name": "Bounty Hunter (Legacy) - Rogue",
"rank": 103161,
"rank": 100923,
"score": 7
},
{ "id": 6, "name": "Clue Scrolls (all)", "rank": 377, "score": 9556 },
{ "id": 7, "name": "Clue Scrolls (beginner)", "rank": 862, "score": 825 },
{ "id": 8, "name": "Clue Scrolls (easy)", "rank": 148, "score": 6000 },
{ "id": 9, "name": "Clue Scrolls (medium)", "rank": 2153, "score": 1606 },
{ "id": 10, "name": "Clue Scrolls (hard)", "rank": 42107, "score": 298 },
{ "id": 11, "name": "Clue Scrolls (elite)", "rank": 504, "score": 459 },
{ "id": 12, "name": "Clue Scrolls (master)", "rank": 1816, "score": 368 },
{ "id": 13, "name": "LMS - Rank", "rank": 14701, "score": 2521 },
{ "id": 14, "name": "PvP Arena - Rank", "rank": -1, "score": -1 },
{ "id": 15, "name": "Soul Wars Zeal", "rank": 6776, "score": 14780 },
{ "id": 16, "name": "Rifts closed", "rank": 4773, "score": 1060 },
{ "id": 17, "name": "Abyssal Sire", "rank": 2741, "score": 2192 },
{ "id": 18, "name": "Alchemical Hydra", "rank": 90203, "score": 594 },
{ "id": 19, "name": "Artio", "rank": 29573, "score": 143 },
{ "id": 20, "name": "Barrows Chests", "rank": 3668, "score": 1830 },
{ "id": 21, "name": "Bryophyta", "rank": 206778, "score": 5 },
{ "id": 22, "name": "Callisto", "rank": 32897, "score": 293 },
{ "id": 23, "name": "Calvar'ion", "rank": 64112, "score": 58 },
{ "id": 24, "name": "Cerberus", "rank": 18492, "score": 1905 },
{ "id": 25, "name": "Chambers of Xeric", "rank": 178941, "score": 34 },
{
"id": 6,
"name": "Clue Scrolls (all)",
"rank": 433,
"score": 9802
},
{
"id": 7,
"name": "Clue Scrolls (beginner)",
"rank": 1542,
"score": 825
},
{
"id": 8,
"name": "Clue Scrolls (easy)",
"rank": 158,
"score": 6000
},
{
"id": 9,
"name": "Clue Scrolls (medium)",
"rank": 2572,
"score": 1606
},
{
"id": 10,
"name": "Clue Scrolls (hard)",
"rank": 47979,
"score": 311
},
{
"id": 11,
"name": "Clue Scrolls (elite)",
"rank": 1081,
"score": 460
},
{
"id": 12,
"name": "Clue Scrolls (master)",
"rank": 880,
"score": 600
},
{
"id": 13,
"name": "LMS - Rank",
"rank": 4258,
"score": 6785
},
{
"id": 14,
"name": "PvP Arena - Rank",
"rank": -1,
"score": -1
},
{
"id": 15,
"name": "Soul Wars Zeal",
"rank": 7596,
"score": 14780
},
{
"id": 16,
"name": "Rifts closed",
"rank": 8124,
"score": 1060
},
{
"id": 17,
"name": "Colosseum Glory",
"rank": 10438,
"score": 43487
},
{
"id": 18,
"name": "Collections Logged",
"rank": 1114,
"score": 1155
},
{
"id": 19,
"name": "Abyssal Sire",
"rank": 3497,
"score": 2192
},
{
"id": 20,
"name": "Alchemical Hydra",
"rank": 3204,
"score": 4796
},
{
"id": 21,
"name": "Amoxliatl",
"rank": 1087,
"score": 984
},
{
"id": 22,
"name": "Araxxor",
"rank": 2230,
"score": 2328
},
{
"id": 23,
"name": "Artio",
"rank": 51533,
"score": 143
},
{
"id": 24,
"name": "Barrows Chests",
"rank": 4243,
"score": 1830
},
{
"id": 25,
"name": "Bryophyta",
"rank": 256985,
"score": 5
},
{
"id": 26,
"name": "Chambers of Xeric: Challenge Mode",
"rank": 2379,
"score": 501
"name": "Callisto",
"rank": 54424,
"score": 293
},
{
"id": 27,
"name": "Calvar'ion",
"rank": 114691,
"score": 58
},
{
"id": 28,
"name": "Cerberus",
"rank": 11700,
"score": 2657
},
{
"id": 29,
"name": "Chambers of Xeric",
"rank": 211708,
"score": 34
},
{
"id": 30,
"name": "Chambers of Xeric: Challenge Mode",
"rank": 1779,
"score": 736
},
{
"id": 31,
"name": "Chaos Elemental",
"rank": 24958,
"score": 215
},
{
"id": 32,
"name": "Chaos Fanatic",
"rank": 46504,
"score": 116
},
{
"id": 33,
"name": "Commander Zilyana",
"rank": 66096,
"score": 287
},
{
"id": 34,
"name": "Corporeal Beast",
"rank": 3133,
"score": 2000
},
{
"id": 35,
"name": "Crazy Archaeologist",
"rank": 26682,
"score": 198
},
{
"id": 36,
"name": "Dagannoth Prime",
"rank": 19337,
"score": 1078
},
{
"id": 37,
"name": "Dagannoth Rex",
"rank": 25021,
"score": 1062
},
{
"id": 38,
"name": "Dagannoth Supreme",
"rank": 19290,
"score": 1088
},
{
"id": 39,
"name": "Deranged Archaeologist",
"rank": 89474,
"score": 25
},
{
"id": 40,
"name": "Doom of Mokhaiotl",
"rank": 1140,
"score": 8
},
{
"id": 41,
"name": "Duke Sucellus",
"rank": 7535,
"score": 1320
},
{
"id": 42,
"name": "General Graardor",
"rank": 23251,
"score": 1228
},
{
"id": 43,
"name": "Giant Mole",
"rank": 82016,
"score": 477
},
{
"id": 44,
"name": "Grotesque Guardians",
"rank": 876,
"score": 3642
},
{
"id": 45,
"name": "Hespori",
"rank": 7073,
"score": 310
},
{
"id": 46,
"name": "Kalphite Queen",
"rank": 2476,
"score": 2046
},
{
"id": 47,
"name": "King Black Dragon",
"rank": 55411,
"score": 580
},
{
"id": 48,
"name": "Kraken",
"rank": 68801,
"score": 2899
},
{
"id": 49,
"name": "Kree'Arra",
"rank": 4608,
"score": 1740
},
{
"id": 50,
"name": "K'ril Tsutsaroth",
"rank": 3079,
"score": 1444
},
{
"id": 51,
"name": "Lunar Chests",
"rank": 8344,
"score": 324
},
{
"id": 52,
"name": "Mimic",
"rank": 540,
"score": 53
},
{
"id": 53,
"name": "Nex",
"rank": 38395,
"score": 626
},
{
"id": 54,
"name": "Nightmare",
"rank": 4176,
"score": 749
},
{
"id": 55,
"name": "Phosani's Nightmare",
"rank": 5519,
"score": 500
},
{
"id": 56,
"name": "Obor",
"rank": 1394,
"score": 217
},
{
"id": 57,
"name": "Phantom Muspah",
"rank": 26127,
"score": 379
},
{
"id": 58,
"name": "Sarachnis",
"rank": 49730,
"score": 249
},
{
"id": 59,
"name": "Scorpia",
"rank": 57206,
"score": 91
},
{
"id": 60,
"name": "Scurrius",
"rank": 6106,
"score": 1245
},
{
"id": 61,
"name": "Skotizo",
"rank": 185920,
"score": 29
},
{ "id": 27, "name": "Chaos Elemental", "rank": 82902, "score": 50 },
{ "id": 28, "name": "Chaos Fanatic", "rank": 147358, "score": 26 },
{ "id": 29, "name": "Commander Zilyana", "rank": 51973, "score": 287 },
{ "id": 30, "name": "Corporeal Beast", "rank": 2377, "score": 2000 },
{ "id": 31, "name": "Crazy Archaeologist", "rank": 147406, "score": 41 },
{ "id": 32, "name": "Dagannoth Prime", "rank": 32225, "score": 707 },
{ "id": 33, "name": "Dagannoth Rex", "rank": 42229, "score": 698 },
{ "id": 34, "name": "Dagannoth Supreme", "rank": 32212, "score": 714 },
{ "id": 35, "name": "Deranged Archaeologist", "rank": 79605, "score": 25 },
{ "id": 36, "name": "Duke Sucellus", "rank": 9517, "score": 688 },
{ "id": 37, "name": "General Graardor", "rank": 19125, "score": 1228 },
{ "id": 38, "name": "Giant Mole", "rank": 65849, "score": 474 },
{ "id": 39, "name": "Grotesque Guardians", "rank": 2080, "score": 2140 },
{ "id": 40, "name": "Hespori", "rank": 16433, "score": 182 },
{ "id": 41, "name": "Kalphite Queen", "rank": 2006, "score": 2046 },
{ "id": 42, "name": "King Black Dragon", "rank": 48575, "score": 580 },
{ "id": 43, "name": "Kraken", "rank": 115056, "score": 1908 },
{ "id": 44, "name": "Kree'Arra", "rank": 10406, "score": 920 },
{ "id": 45, "name": "K'ril Tsutsaroth", "rank": 2196, "score": 1444 },
{ "id": 46, "name": "Mimic", "rank": 1005, "score": 33 },
{ "id": 47, "name": "Nex", "rank": 28413, "score": 620 },
{ "id": 48, "name": "Nightmare", "rank": 4157, "score": 744 },
{ "id": 49, "name": "Phosani's Nightmare", "rank": 4261, "score": 500 },
{ "id": 50, "name": "Obor", "rank": 993, "score": 217 },
{ "id": 51, "name": "Phantom Muspah", "rank": 21848, "score": 251 },
{ "id": 52, "name": "Sarachnis", "rank": 66260, "score": 119 },
{ "id": 53, "name": "Scorpia", "rank": 108898, "score": 26 },
{ "id": 54, "name": "Skotizo", "rank": 373975, "score": 9 },
{ "id": 55, "name": "Spindel", "rank": 2005, "score": 1569 },
{ "id": 56, "name": "Tempoross", "rank": 40001, "score": 273 },
{ "id": 57, "name": "The Gauntlet", "rank": 192608, "score": 7 },
{ "id": 58, "name": "The Corrupted Gauntlet", "rank": 78367, "score": 201 },
{ "id": 59, "name": "The Leviathan", "rank": 5679, "score": 583 },
{ "id": 60, "name": "The Whisperer", "rank": 478, "score": 1760 },
{ "id": 61, "name": "Theatre of Blood", "rank": 22932, "score": 250 },
{
"id": 62,
"name": "Theatre of Blood: Hard Mode",
"rank": 15059,
"score": 7
"name": "Sol Heredit",
"rank": 3232,
"score": 49
},
{
"id": 63,
"name": "Thermonuclear Smoke Devil",
"rank": 7161,
"score": 3066
"name": "Spindel",
"rank": 4276,
"score": 1569
},
{
"id": 64,
"name": "Tempoross",
"rank": 57314,
"score": 273
},
{ "id": 64, "name": "Tombs of Amascut", "rank": 101555, "score": 35 },
{
"id": 65,
"name": "Tombs of Amascut: Expert Mode",
"rank": 610,
"score": 933
"name": "The Gauntlet",
"rank": 256794,
"score": 7
},
{ "id": 66, "name": "TzKal-Zuk", "rank": 15733, "score": 2 },
{ "id": 67, "name": "TzTok-Jad", "rank": -1, "score": -1 },
{ "id": 68, "name": "Vardorvis", "rank": 2051, "score": 2078 },
{ "id": 69, "name": "Venenatis", "rank": 194, "score": 7096 },
{ "id": 70, "name": "Vet'ion", "rank": 69260, "score": 51 },
{ "id": 71, "name": "Vorkath", "rank": 14039, "score": 2780 },
{ "id": 72, "name": "Wintertodt", "rank": 876367, "score": 62 },
{ "id": 73, "name": "Zalcano", "rank": 165341, "score": 25 },
{ "id": 74, "name": "Zulrah", "rank": 226318, "score": 275 }
{
"id": 66,
"name": "The Corrupted Gauntlet",
"rank": 113862,
"score": 201
},
{
"id": 67,
"name": "The Hueycoatl",
"rank": 1969,
"score": 538
},
{
"id": 68,
"name": "The Leviathan",
"rank": 12346,
"score": 671
},
{
"id": 69,
"name": "The Royal Titans",
"rank": 5606,
"score": 149
},
{
"id": 70,
"name": "The Whisperer",
"rank": 550,
"score": 2450
},
{
"id": 71,
"name": "Theatre of Blood",
"rank": 25557,
"score": 310
},
{
"id": 72,
"name": "Theatre of Blood: Hard Mode",
"rank": 1391,
"score": 538
},
{
"id": 73,
"name": "Thermonuclear Smoke Devil",
"rank": 9325,
"score": 3066
},
{
"id": 74,
"name": "Tombs of Amascut",
"rank": 131996,
"score": 37
},
{
"id": 75,
"name": "Tombs of Amascut: Expert Mode",
"rank": 214,
"score": 1720
},
{
"id": 76,
"name": "TzKal-Zuk",
"rank": 8902,
"score": 7
},
{
"id": 77,
"name": "TzTok-Jad",
"rank": 148385,
"score": 8
},
{
"id": 78,
"name": "Vardorvis",
"rank": 6120,
"score": 2113
},
{
"id": 79,
"name": "Venenatis",
"rank": 287,
"score": 7096
},
{
"id": 80,
"name": "Vet'ion",
"rank": 97368,
"score": 51
},
{
"id": 81,
"name": "Vorkath",
"rank": 15591,
"score": 2780
},
{
"id": 82,
"name": "Wintertodt",
"rank": 1000405,
"score": 67
},
{
"id": 83,
"name": "Yama",
"rank": 19722,
"score": 173
},
{
"id": 84,
"name": "Zalcano",
"rank": 213696,
"score": 25
},
{
"id": 85,
"name": "Zulrah",
"rank": 240082,
"score": 340
}
]
}
}

View File

@@ -15,7 +15,10 @@ import {
InvalidFormatError,
BH_MODES,
parseJsonStats,
HiscoresResponse
HiscoresResponse,
InvalidRSNError,
PlayerNotFoundError,
HiScoresError
} from '../src/index';
const B0ATY_NAME = 'B0ATY';
@@ -24,6 +27,8 @@ const LYNX_TITAN_SPACE_NAME = 'lYnX tiTaN';
const LYNX_TITAN_UNDERSCORE_NAME = 'lYnX_tiTaN';
const LYNX_TITAN_HYPHEN_NAME = 'lYnX-tiTaN';
const LYNX_TITAN_FORMATTED_NAME = 'Lynx Titan';
const NON_EXISTENT_NAME = 'nonExistent';
const ERROR_NAME = 'errorName';
const attackTopPage = readFileSync(`${__dirname}/attackTopPage.html`, 'utf8');
const b0atyNamePage = readFileSync(`${__dirname}/b0atyNamePage.html`, 'utf8');
@@ -57,6 +62,12 @@ jest.spyOn(axios, 'get').mockImplementation((url) => {
if (getStatsURL('main', LYNX_TITAN_FORMATTED_NAME, true) === url) {
return Promise.resolve({ status: 200, data: lynxTitanStats });
}
if (getPlayerTableURL('main', NON_EXISTENT_NAME) === url) {
return Promise.resolve({ data: '<html></html>' });
}
if (getPlayerTableURL('main', ERROR_NAME)) {
return Promise.reject();
}
throw new Error(`No mock response for URL: ${url}`);
});
@@ -102,8 +113,12 @@ test('Parse CSV to json', () => {
13,4057
37,225
25,1110
7827,43249
1114,1155
382,2780
944,3000
561,398429
37,111
704,892
1981,1452
4981,23
@@ -121,6 +136,7 @@ test('Parse CSV to json', () => {
4342,1655
966,2951
10151,1
100,735
1289,2477
1288,2407
377,4669
@@ -131,6 +147,7 @@ test('Parse CSV to json', () => {
41643,1477
625,2391
120,2981
54,2958
1,109
99,39002
3,22666
@@ -139,12 +156,16 @@ test('Parse CSV to json', () => {
44,6233
201,1101
82,3404
555,7079
5085,61
8731,1423
678,903
18823,23
63,375
2870,6
891,9102
2871,7
5606,149
2872,8
6984,138
23,923141
@@ -158,6 +179,7 @@ test('Parse CSV to json', () => {
1940,272
8623,1340
605,1694
15233,245
-1,-1
3867,4583`;
@@ -200,6 +222,8 @@ test('Parse CSV to json', () => {
pvpArena: { rank: 13, score: 4057 },
soulWarsZeal: { rank: 37, score: 225 },
riftsClosed: { rank: 25, score: 1110 },
colosseumGlory: { rank: 7827, score: 43249 },
collectionsLogged: { rank: 1114, score: 1155 },
clues: {
all: { rank: 32, score: 12148 },
beginner: { rank: 3105, score: 76 },
@@ -212,6 +236,8 @@ test('Parse CSV to json', () => {
bosses: {
abyssalSire: { rank: 382, score: 2780 },
alchemicalHydra: { rank: 944, score: 3000 },
amoxliatl: { rank: 561, score: 398429 },
araxxor: { rank: 37, score: 111 },
artio: { rank: 704, score: 892 },
barrows: { rank: 1981, score: 1452 },
bryophyta: { rank: 4981, score: 23 },
@@ -229,6 +255,7 @@ test('Parse CSV to json', () => {
dagannothRex: { rank: 4342, score: 1655 },
dagannothSupreme: { rank: 966, score: 2951 },
derangedArchaeologist: { rank: 10151, score: 1 },
doomOfMokhaiotl: { rank: 100, score: 735 },
dukeSucellus: { rank: 1289, score: 2477 },
generalGraardor: { rank: 1288, score: 2407 },
giantMole: { rank: 377, score: 4669 },
@@ -239,6 +266,7 @@ test('Parse CSV to json', () => {
kraken: { rank: 41643, score: 1477 },
kreeArra: { rank: 625, score: 2391 },
krilTsutsaroth: { rank: 120, score: 2981 },
lunarChests: { rank: 54, score: 2958 },
mimic: { rank: 1, score: 109 },
nex: { rank: 99, score: 39002 },
nightmare: { rank: 3, score: 22666 },
@@ -247,12 +275,16 @@ test('Parse CSV to json', () => {
phantomMuspah: { rank: 44, score: 6233 },
sarachnis: { rank: 201, score: 1101 },
scorpia: { rank: 82, score: 3404 },
scurrius: { rank: 555, score: 7079 },
skotizo: { rank: 5085, score: 61 },
solHeredit: { rank: 8731, score: 1423 },
spindel: { rank: 678, score: 903 },
tempoross: { rank: 18823, score: 23 },
gauntlet: { rank: 63, score: 375 },
corruptedGauntlet: { rank: 2870, score: 6 },
hueycoatl: { rank: 891, score: 9102 },
leviathan: { rank: 2871, score: 7 },
royalTitans: { rank: 5606, score: 149 },
whisperer: { rank: 2872, score: 8 },
theatreOfBlood: { rank: 6984, score: 138 },
theatreOfBloodHardMode: { rank: 23, score: 923141 },
@@ -266,6 +298,7 @@ test('Parse CSV to json', () => {
vetion: { rank: 1940, score: 272 },
vorkath: { rank: 8623, score: 1340 },
wintertodt: { rank: 605, score: 1694 },
yama: { rank: 15233, score: 245 },
zalcano: { rank: -1, score: -1 },
zulrah: { rank: 3867, score: 4583 }
}
@@ -304,7 +337,15 @@ describe('Get name format', () => {
expect(data).toBe(B0ATY_FORMATTED_NAME);
});
it('throws an error for a name with invalid characters', async () => {
await expect(getRSNFormat('b&aty')).rejects.toBeTruthy();
await expect(getRSNFormat('b&aty')).rejects.toThrow(InvalidRSNError);
});
it('throws an error for a non-existent player', async () => {
await expect(getRSNFormat(NON_EXISTENT_NAME)).rejects.toThrow(
PlayerNotFoundError
);
});
it('throws an error for a hiscores issue', async () => {
await expect(getRSNFormat(ERROR_NAME)).rejects.toThrow(HiScoresError);
});
});
@@ -491,7 +532,7 @@ test('Get attack top page', async () => {
test('Get non-existent player', async () => {
getStats('fishy').catch((err) => {
if (err.response) {
if (err?.response) {
expect(err.response.status).toBe(404);
}
});

View File

@@ -1,14 +1,68 @@
{
"skills": [
{ "id": 0, "name": "Overall", "rank": 1, "level": 2277, "xp": 4600000000 },
{ "id": 1, "name": "Attack", "rank": 15, "level": 99, "xp": 200000000 },
{ "id": 2, "name": "Defence", "rank": 28, "level": 99, "xp": 200000000 },
{ "id": 3, "name": "Strength", "rank": 18, "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": 6, "name": "Prayer", "rank": 11, "level": 99, "xp": 200000000 },
{ "id": 7, "name": "Magic", "rank": 31, "level": 99, "xp": 200000000 },
{ "id": 8, "name": "Cooking", "rank": 155, "level": 99, "xp": 200000000 },
{
"id": 0,
"name": "Overall",
"rank": 1,
"level": 2277,
"xp": 4600000000
},
{
"id": 1,
"name": "Attack",
"rank": 15,
"level": 99,
"xp": 200000000
},
{
"id": 2,
"name": "Defence",
"rank": 28,
"level": 99,
"xp": 200000000
},
{
"id": 3,
"name": "Strength",
"rank": 18,
"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": 6,
"name": "Prayer",
"rank": 11,
"level": 99,
"xp": 200000000
},
{
"id": 7,
"name": "Magic",
"rank": 30,
"level": 99,
"xp": 200000000
},
{
"id": 8,
"name": "Cooking",
"rank": 149,
"level": 99,
"xp": 200000000
},
{
"id": 9,
"name": "Woodcutting",
@@ -16,8 +70,20 @@
"level": 99,
"xp": 200000000
},
{ "id": 10, "name": "Fletching", "rank": 12, "level": 99, "xp": 200000000 },
{ "id": 11, "name": "Fishing", "rank": 9, "level": 99, "xp": 200000000 },
{
"id": 10,
"name": "Fletching",
"rank": 12,
"level": 99,
"xp": 200000000
},
{
"id": 11,
"name": "Fishing",
"rank": 9,
"level": 99,
"xp": 200000000
},
{
"id": 12,
"name": "Firemaking",
@@ -25,16 +91,76 @@
"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": 15, "name": "Mining", "rank": 24, "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": 18, "name": "Thieving", "rank": 12, "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": 21, "name": "Runecraft", "rank": 6, "level": 99, "xp": 200000000 },
{ "id": 22, "name": "Hunter", "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": 15,
"name": "Mining",
"rank": 23,
"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": 18,
"name": "Thieving",
"rank": 12,
"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": 21,
"name": "Runecraft",
"rank": 6,
"level": 99,
"xp": 200000000
},
{
"id": 22,
"name": "Hunter",
"rank": 3,
"level": 99,
"xp": 200000000
},
{
"id": 23,
"name": "Construction",
@@ -44,10 +170,30 @@
}
],
"activities": [
{ "id": 0, "name": "League Points", "rank": -1, "score": -1 },
{ "id": 1, "name": "Deadman Points", "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": 0,
"name": "League Points",
"rank": -1,
"score": -1
},
{
"id": 1,
"name": "Deadman Points",
"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": 4,
"name": "Bounty Hunter (Legacy) - Hunter",
@@ -60,89 +206,473 @@
"rank": -1,
"score": -1
},
{ "id": 6, "name": "Clue Scrolls (all)", "rank": 805212, "score": 22 },
{ "id": 7, "name": "Clue Scrolls (beginner)", "rank": -1, "score": -1 },
{ "id": 8, "name": "Clue Scrolls (easy)", "rank": -1, "score": -1 },
{ "id": 9, "name": "Clue Scrolls (medium)", "rank": -1, "score": -1 },
{ "id": 10, "name": "Clue Scrolls (hard)", "rank": 502504, "score": 22 },
{ "id": 11, "name": "Clue Scrolls (elite)", "rank": -1, "score": -1 },
{ "id": 12, "name": "Clue Scrolls (master)", "rank": -1, "score": -1 },
{ "id": 13, "name": "LMS - Rank", "rank": -1, "score": -1 },
{ "id": 14, "name": "PvP Arena - Rank", "rank": -1, "score": -1 },
{ "id": 15, "name": "Soul Wars Zeal", "rank": -1, "score": -1 },
{ "id": 16, "name": "Rifts closed", "rank": -1, "score": -1 },
{ "id": 17, "name": "Abyssal Sire", "rank": -1, "score": -1 },
{ "id": 18, "name": "Alchemical Hydra", "rank": -1, "score": -1 },
{ "id": 19, "name": "Artio", "rank": -1, "score": -1 },
{ "id": 20, "name": "Barrows Chests", "rank": -1, "score": -1 },
{ "id": 21, "name": "Bryophyta", "rank": -1, "score": -1 },
{ "id": 22, "name": "Callisto", "rank": -1, "score": -1 },
{ "id": 23, "name": "Calvar'ion", "rank": -1, "score": -1 },
{ "id": 24, "name": "Cerberus", "rank": -1, "score": -1 },
{ "id": 25, "name": "Chambers of Xeric", "rank": -1, "score": -1 },
{
"id": 6,
"name": "Clue Scrolls (all)",
"rank": 937868,
"score": 22
},
{
"id": 7,
"name": "Clue Scrolls (beginner)",
"rank": -1,
"score": -1
},
{
"id": 8,
"name": "Clue Scrolls (easy)",
"rank": -1,
"score": -1
},
{
"id": 9,
"name": "Clue Scrolls (medium)",
"rank": -1,
"score": -1
},
{
"id": 10,
"name": "Clue Scrolls (hard)",
"rank": 578038,
"score": 22
},
{
"id": 11,
"name": "Clue Scrolls (elite)",
"rank": -1,
"score": -1
},
{
"id": 12,
"name": "Clue Scrolls (master)",
"rank": -1,
"score": -1
},
{
"id": 13,
"name": "LMS - Rank",
"rank": -1,
"score": -1
},
{
"id": 14,
"name": "PvP Arena - Rank",
"rank": -1,
"score": -1
},
{
"id": 15,
"name": "Soul Wars Zeal",
"rank": -1,
"score": -1
},
{
"id": 16,
"name": "Rifts closed",
"rank": -1,
"score": -1
},
{
"id": 17,
"name": "Colosseum Glory",
"rank": -1,
"score": -1
},
{
"id": 18,
"name": "Collections Logged",
"rank": -1,
"score": -1
},
{
"id": 19,
"name": "Abyssal Sire",
"rank": -1,
"score": -1
},
{
"id": 20,
"name": "Alchemical Hydra",
"rank": -1,
"score": -1
},
{
"id": 21,
"name": "Amoxliatl",
"rank": -1,
"score": -1
},
{
"id": 22,
"name": "Araxxor",
"rank": -1,
"score": -1
},
{
"id": 23,
"name": "Artio",
"rank": -1,
"score": -1
},
{
"id": 24,
"name": "Barrows Chests",
"rank": -1,
"score": -1
},
{
"id": 25,
"name": "Bryophyta",
"rank": -1,
"score": -1
},
{
"id": 26,
"name": "Callisto",
"rank": -1,
"score": -1
},
{
"id": 27,
"name": "Calvar'ion",
"rank": -1,
"score": -1
},
{
"id": 28,
"name": "Cerberus",
"rank": -1,
"score": -1
},
{
"id": 29,
"name": "Chambers of Xeric",
"rank": -1,
"score": -1
},
{
"id": 30,
"name": "Chambers of Xeric: Challenge Mode",
"rank": -1,
"score": -1
},
{ "id": 27, "name": "Chaos Elemental", "rank": -1, "score": -1 },
{ "id": 28, "name": "Chaos Fanatic", "rank": -1, "score": -1 },
{ "id": 29, "name": "Commander Zilyana", "rank": -1, "score": -1 },
{ "id": 30, "name": "Corporeal Beast", "rank": -1, "score": -1 },
{ "id": 31, "name": "Crazy Archaeologist", "rank": -1, "score": -1 },
{ "id": 32, "name": "Dagannoth Prime", "rank": -1, "score": -1 },
{ "id": 33, "name": "Dagannoth Rex", "rank": -1, "score": -1 },
{ "id": 34, "name": "Dagannoth Supreme", "rank": -1, "score": -1 },
{ "id": 35, "name": "Deranged Archaeologist", "rank": -1, "score": -1 },
{ "id": 36, "name": "Duke Sucellus", "rank": -1, "score": -1 },
{ "id": 37, "name": "General Graardor", "rank": -1, "score": -1 },
{ "id": 38, "name": "Giant Mole", "rank": -1, "score": -1 },
{ "id": 39, "name": "Grotesque Guardians", "rank": -1, "score": -1 },
{ "id": 40, "name": "Hespori", "rank": -1, "score": -1 },
{ "id": 41, "name": "Kalphite Queen", "rank": -1, "score": -1 },
{ "id": 42, "name": "King Black Dragon", "rank": -1, "score": -1 },
{ "id": 43, "name": "Kraken", "rank": -1, "score": -1 },
{ "id": 44, "name": "Kree'Arra", "rank": -1, "score": -1 },
{ "id": 45, "name": "K'ril Tsutsaroth", "rank": -1, "score": -1 },
{ "id": 46, "name": "Mimic", "rank": -1, "score": -1 },
{ "id": 47, "name": "Nex", "rank": -1, "score": -1 },
{ "id": 48, "name": "Nightmare", "rank": -1, "score": -1 },
{ "id": 49, "name": "Phosani's Nightmare", "rank": -1, "score": -1 },
{ "id": 50, "name": "Obor", "rank": -1, "score": -1 },
{ "id": 51, "name": "Phantom Muspah", "rank": -1, "score": -1 },
{ "id": 52, "name": "Sarachnis", "rank": -1, "score": -1 },
{ "id": 53, "name": "Scorpia", "rank": -1, "score": -1 },
{ "id": 54, "name": "Skotizo", "rank": -1, "score": -1 },
{ "id": 55, "name": "Spindel", "rank": -1, "score": -1 },
{ "id": 56, "name": "Tempoross", "rank": -1, "score": -1 },
{ "id": 57, "name": "The Gauntlet", "rank": -1, "score": -1 },
{ "id": 58, "name": "The Corrupted Gauntlet", "rank": -1, "score": -1 },
{ "id": 59, "name": "The Leviathan", "rank": -1, "score": -1 },
{ "id": 60, "name": "The Whisperer", "rank": -1, "score": -1 },
{ "id": 61, "name": "Theatre of Blood", "rank": -1, "score": -1 },
{
"id": 31,
"name": "Chaos Elemental",
"rank": -1,
"score": -1
},
{
"id": 32,
"name": "Chaos Fanatic",
"rank": -1,
"score": -1
},
{
"id": 33,
"name": "Commander Zilyana",
"rank": -1,
"score": -1
},
{
"id": 34,
"name": "Corporeal Beast",
"rank": -1,
"score": -1
},
{
"id": 35,
"name": "Crazy Archaeologist",
"rank": -1,
"score": -1
},
{
"id": 36,
"name": "Dagannoth Prime",
"rank": -1,
"score": -1
},
{
"id": 37,
"name": "Dagannoth Rex",
"rank": -1,
"score": -1
},
{
"id": 38,
"name": "Dagannoth Supreme",
"rank": -1,
"score": -1
},
{
"id": 39,
"name": "Deranged Archaeologist",
"rank": -1,
"score": -1
},
{
"id": 40,
"name": "Duke Sucellus",
"rank": -1,
"score": -1
},
{
"id": 41,
"name": "General Graardor",
"rank": -1,
"score": -1
},
{
"id": 42,
"name": "Giant Mole",
"rank": -1,
"score": -1
},
{
"id": 43,
"name": "Grotesque Guardians",
"rank": -1,
"score": -1
},
{
"id": 44,
"name": "Hespori",
"rank": -1,
"score": -1
},
{
"id": 45,
"name": "Kalphite Queen",
"rank": -1,
"score": -1
},
{
"id": 46,
"name": "King Black Dragon",
"rank": -1,
"score": -1
},
{
"id": 47,
"name": "Kraken",
"rank": -1,
"score": -1
},
{
"id": 48,
"name": "Kree'Arra",
"rank": -1,
"score": -1
},
{
"id": 49,
"name": "K'ril Tsutsaroth",
"rank": -1,
"score": -1
},
{
"id": 50,
"name": "Lunar Chests",
"rank": -1,
"score": -1
},
{
"id": 51,
"name": "Mimic",
"rank": -1,
"score": -1
},
{
"id": 52,
"name": "Nex",
"rank": -1,
"score": -1
},
{
"id": 53,
"name": "Nightmare",
"rank": -1,
"score": -1
},
{
"id": 54,
"name": "Phosani's Nightmare",
"rank": -1,
"score": -1
},
{
"id": 55,
"name": "Obor",
"rank": -1,
"score": -1
},
{
"id": 56,
"name": "Phantom Muspah",
"rank": -1,
"score": -1
},
{
"id": 57,
"name": "Sarachnis",
"rank": -1,
"score": -1
},
{
"id": 58,
"name": "Scorpia",
"rank": -1,
"score": -1
},
{
"id": 59,
"name": "Scurrius",
"rank": -1,
"score": -1
},
{
"id": 60,
"name": "Skotizo",
"rank": -1,
"score": -1
},
{
"id": 61,
"name": "Sol Heredit",
"rank": -1,
"score": -1
},
{
"id": 62,
"name": "Spindel",
"rank": -1,
"score": -1
},
{
"id": 63,
"name": "Tempoross",
"rank": -1,
"score": -1
},
{
"id": 64,
"name": "The Gauntlet",
"rank": -1,
"score": -1
},
{
"id": 65,
"name": "The Corrupted Gauntlet",
"rank": -1,
"score": -1
},
{
"id": 66,
"name": "The Hueycoatl",
"rank": -1,
"score": -1
},
{
"id": 67,
"name": "The Leviathan",
"rank": -1,
"score": -1
},
{
"id": 68,
"name": "The Royal Titans",
"rank": -1,
"score": -1
},
{
"id": 69,
"name": "The Whisperer",
"rank": -1,
"score": -1
},
{
"id": 70,
"name": "Theatre of Blood",
"rank": -1,
"score": -1
},
{
"id": 71,
"name": "Theatre of Blood: Hard Mode",
"rank": -1,
"score": -1
},
{ "id": 63, "name": "Thermonuclear Smoke Devil", "rank": -1, "score": -1 },
{ "id": 64, "name": "Tombs of Amascut", "rank": -1, "score": -1 },
{
"id": 65,
"id": 72,
"name": "Thermonuclear Smoke Devil",
"rank": -1,
"score": -1
},
{
"id": 73,
"name": "Tombs of Amascut",
"rank": -1,
"score": -1
},
{
"id": 74,
"name": "Tombs of Amascut: Expert Mode",
"rank": -1,
"score": -1
},
{ "id": 66, "name": "TzKal-Zuk", "rank": -1, "score": -1 },
{ "id": 67, "name": "TzTok-Jad", "rank": 225, "score": 186 },
{ "id": 68, "name": "Vardorvis", "rank": -1, "score": -1 },
{ "id": 69, "name": "Venenatis", "rank": -1, "score": -1 },
{ "id": 70, "name": "Vet'ion", "rank": -1, "score": -1 },
{ "id": 71, "name": "Vorkath", "rank": -1, "score": -1 },
{ "id": 72, "name": "Wintertodt", "rank": -1, "score": -1 },
{ "id": 73, "name": "Zalcano", "rank": -1, "score": -1 },
{ "id": 74, "name": "Zulrah", "rank": -1, "score": -1 }
{
"id": 75,
"name": "TzKal-Zuk",
"rank": -1,
"score": -1
},
{
"id": 76,
"name": "TzTok-Jad",
"rank": 317,
"score": 186
},
{
"id": 77,
"name": "Vardorvis",
"rank": -1,
"score": -1
},
{
"id": 78,
"name": "Venenatis",
"rank": -1,
"score": -1
},
{
"id": 79,
"name": "Vet'ion",
"rank": -1,
"score": -1
},
{
"id": 80,
"name": "Vorkath",
"rank": -1,
"score": -1
},
{
"id": 81,
"name": "Wintertodt",
"rank": -1,
"score": -1
},
{
"id": 82,
"name": "Zalcano",
"rank": -1,
"score": -1
},
{
"id": 83,
"name": "Zulrah",
"rank": -1,
"score": -1
}
]
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "osrs-json-hiscores",
"version": "2.16.2",
"version": "2.23.0",
"description": "The Old School Runescape API wrapper that does more!",
"main": "lib/index.js",
"types": "lib/index.d.ts",

View File

@@ -44,7 +44,9 @@ import {
FORMATTED_PVP_ARENA,
FORMATTED_SOUL_WARS,
FORMATTED_RIFTS_CLOSED,
FORMATTED_DEADMAN_POINTS
FORMATTED_DEADMAN_POINTS,
FORMATTED_COLOSSEUM_GLORY,
FORMATTED_COLLECTIONS_LOGGED
} from './utils';
/**
@@ -84,11 +86,12 @@ export async function getOfficialStats(
*/
export async function getRSNFormat(
rsn: string,
config?: AxiosRequestConfig
config?: AxiosRequestConfig,
mode: Gamemode = 'main'
): Promise<string> {
validateRSN(rsn);
const url = getPlayerTableURL('main', rsn);
const url = getPlayerTableURL(mode, rsn);
try {
const response = await httpGet<string | Buffer | BinaryData | undefined>(
url,
@@ -101,10 +104,10 @@ export async function getRSNFormat(
if (anchor) {
return rsnFromElement(anchor);
}
throw new PlayerNotFoundError();
} catch {
throw new HiScoresError();
}
throw new PlayerNotFoundError();
}
/**
@@ -162,6 +165,8 @@ export function parseJsonStats(json: HiscoresResponse): Stats {
const pvpArena = getActivity(FORMATTED_PVP_ARENA);
const soulWarsZeal = getActivity(FORMATTED_SOUL_WARS);
const riftsClosed = getActivity(FORMATTED_RIFTS_CLOSED);
const colosseumGlory = getActivity(FORMATTED_COLOSSEUM_GLORY);
const collectionsLogged = getActivity(FORMATTED_COLLECTIONS_LOGGED);
const stats: Stats = {
skills,
@@ -172,6 +177,8 @@ export function parseJsonStats(json: HiscoresResponse): Stats {
pvpArena,
soulWarsZeal,
riftsClosed,
colosseumGlory,
collectionsLogged,
clues,
bosses
};
@@ -221,8 +228,14 @@ export function parseStats(csv: string): Stats {
const [leaguePoints, deadmanPoints] = activityObjects.splice(0, 2);
const bhObjects = activityObjects.splice(0, BH_MODES.length);
const clueObjects = activityObjects.splice(0, CLUES.length);
const [lastManStanding, pvpArena, soulWarsZeal, riftsClosed] =
activityObjects.splice(0, 4);
const [
lastManStanding,
pvpArena,
soulWarsZeal,
riftsClosed,
colosseumGlory,
collectionsLogged
] = activityObjects.splice(0, 6);
const bossObjects = activityObjects.splice(0, BOSSES.length);
const skills: Skills = skillObjects.reduce<Skills>((prev, curr, index) => {
@@ -258,6 +271,8 @@ export function parseStats(csv: string): Stats {
pvpArena,
soulWarsZeal,
riftsClosed,
colosseumGlory,
collectionsLogged,
clues,
bosses
};

View File

@@ -69,6 +69,8 @@ export type BH = { [Type in BHType]: Activity };
export type Boss =
| 'abyssalSire'
| 'alchemicalHydra'
| 'amoxliatl'
| 'araxxor'
| 'artio'
| 'barrows'
| 'bryophyta'
@@ -86,6 +88,7 @@ export type Boss =
| 'dagannothRex'
| 'dagannothSupreme'
| 'derangedArchaeologist'
| 'doomOfMokhaiotl'
| 'dukeSucellus'
| 'generalGraardor'
| 'giantMole'
@@ -96,6 +99,7 @@ export type Boss =
| 'kraken'
| 'kreeArra'
| 'krilTsutsaroth'
| 'lunarChests'
| 'mimic'
| 'nex'
| 'nightmare'
@@ -104,12 +108,16 @@ export type Boss =
| 'phantomMuspah'
| 'sarachnis'
| 'scorpia'
| 'scurrius'
| 'skotizo'
| 'solHeredit'
| 'spindel'
| 'tempoross'
| 'gauntlet'
| 'corruptedGauntlet'
| 'hueycoatl'
| 'leviathan'
| 'royalTitans'
| 'whisperer'
| 'theatreOfBlood'
| 'theatreOfBloodHardMode'
@@ -123,6 +131,7 @@ export type Boss =
| 'vetion'
| 'vorkath'
| 'wintertodt'
| 'yama'
| 'zalcano'
| 'zulrah';
@@ -146,6 +155,8 @@ export type ActivityName =
| 'hardClues'
| 'eliteClues'
| 'masterClues'
| 'colosseumGlory'
| 'collectionsLogged'
| Boss;
export interface Stats {
@@ -164,6 +175,8 @@ export interface Stats {
pvpArena: Activity;
soulWarsZeal: Activity;
riftsClosed: Activity;
colosseumGlory: Activity;
collectionsLogged: Activity;
bosses: Bosses;
}
export type Modes = { [M in Gamemode]?: Stats };

View File

@@ -76,6 +76,8 @@ export const GAMEMODES: Gamemode[] = [
export const BOSSES: Boss[] = [
'abyssalSire',
'alchemicalHydra',
'amoxliatl',
'araxxor',
'artio',
'barrows',
'bryophyta',
@@ -93,6 +95,7 @@ export const BOSSES: Boss[] = [
'dagannothRex',
'dagannothSupreme',
'derangedArchaeologist',
'doomOfMokhaiotl',
'dukeSucellus',
'generalGraardor',
'giantMole',
@@ -103,6 +106,7 @@ export const BOSSES: Boss[] = [
'kraken',
'kreeArra',
'krilTsutsaroth',
'lunarChests',
'mimic',
'nex',
'nightmare',
@@ -111,12 +115,16 @@ export const BOSSES: Boss[] = [
'phantomMuspah',
'sarachnis',
'scorpia',
'scurrius',
'skotizo',
'solHeredit',
'spindel',
'tempoross',
'gauntlet',
'corruptedGauntlet',
'hueycoatl',
'leviathan',
'royalTitans',
'whisperer',
'theatreOfBlood',
'theatreOfBloodHardMode',
@@ -130,6 +138,7 @@ export const BOSSES: Boss[] = [
'vetion',
'vorkath',
'wintertodt',
'yama',
'zalcano',
'zulrah'
];
@@ -151,6 +160,8 @@ export const ACTIVITIES: ActivityName[] = [
'pvpArena',
'soulWarsZeal',
'riftsClosed',
'colosseumGlory',
'collectionsLogged',
...BOSSES
];
@@ -161,6 +172,8 @@ export type FormattedBossNames = {
export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
abyssalSire: 'Abyssal Sire',
alchemicalHydra: 'Alchemical Hydra',
amoxliatl: 'Amoxliatl',
araxxor: 'Araxxor',
artio: 'Artio',
barrows: 'Barrows Chests',
bryophyta: 'Bryophyta',
@@ -178,6 +191,7 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
dagannothRex: 'Dagannoth Rex',
dagannothSupreme: 'Dagannoth Supreme',
derangedArchaeologist: 'Deranged Archaeologist',
doomOfMokhaiotl: 'Doom of Mokhaiotl',
dukeSucellus: 'Duke Sucellus',
generalGraardor: 'General Graardor',
giantMole: 'Giant Mole',
@@ -188,6 +202,7 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
kraken: 'Kraken',
kreeArra: "Kree'Arra",
krilTsutsaroth: "K'ril Tsutsaroth",
lunarChests: 'Lunar Chests',
mimic: 'Mimic',
nex: 'Nex',
nightmare: 'Nightmare',
@@ -196,12 +211,16 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
phantomMuspah: 'Phantom Muspah',
sarachnis: 'Sarachnis',
scorpia: 'Scorpia',
scurrius: 'Scurrius',
skotizo: 'Skotizo',
solHeredit: 'Sol Heredit',
spindel: 'Spindel',
tempoross: 'Tempoross',
gauntlet: 'The Gauntlet',
corruptedGauntlet: 'The Corrupted Gauntlet',
hueycoatl: 'The Hueycoatl',
leviathan: 'The Leviathan',
royalTitans: 'The Royal Titans',
whisperer: 'The Whisperer',
theatreOfBlood: 'Theatre of Blood',
theatreOfBloodHardMode: 'Theatre of Blood: Hard Mode',
@@ -215,6 +234,7 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
vetion: "Vet'ion",
vorkath: 'Vorkath',
wintertodt: 'Wintertodt',
yama: 'Yama',
zalcano: 'Zalcano',
zulrah: 'Zulrah'
};
@@ -281,6 +301,8 @@ export const FORMATTED_SOUL_WARS = 'Soul Wars Zeal';
export const FORMATTED_LEAGUE_POINTS = 'League Points';
export const FORMATTED_DEADMAN_POINTS = 'Deadman Points';
export const FORMATTED_RIFTS_CLOSED = 'Rifts closed';
export const FORMATTED_COLOSSEUM_GLORY = 'Colosseum Glory';
export const FORMATTED_COLLECTIONS_LOGGED = 'Collections Logged';
export const INVALID_FORMAT_ERROR = 'Invalid hiscores format';
export const PLAYER_NOT_FOUND_ERROR = 'Player not found';

View File

@@ -6,10 +6,7 @@
"outDir": "./lib",
"strict": true,
"lib": ["ES2015", "DOM", "DOM.Iterable"],
"typeRoots": [
"./node_modules/@types",
"./src/@types"
]
"typeRoots": ["./node_modules/@types", "./src/@types"]
},
"include": ["src"],
"exclude": ["node_modules", "**/__tests__/*"]

176
yarn.lock
View File

@@ -1288,11 +1288,11 @@ available-typed-arrays@^1.0.5:
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
axios@^1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2"
integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==
version "1.8.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.2.tgz#fabe06e241dfe83071d4edfbcaa7b1c3a40f7979"
integrity sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==
dependencies:
follow-redirects "^1.15.0"
follow-redirects "^1.15.6"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
@@ -1383,12 +1383,12 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
braces@^3.0.1, braces@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
braces@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
fill-range "^7.0.1"
fill-range "^7.1.1"
browserslist@^4.21.9:
version "4.21.9"
@@ -1458,6 +1458,14 @@ cacheable-request@^7.0.1:
normalize-url "^4.1.0"
responselike "^2.0.0"
call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
dependencies:
es-errors "^1.3.0"
function-bind "^1.1.2"
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -1729,9 +1737,9 @@ cosmiconfig@^7.0.0:
yaml "^1.10.0"
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
version "7.0.6"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
@@ -1932,6 +1940,15 @@ dot-prop@^6.0.1:
dependencies:
is-obj "^2.0.0"
dunder-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
dependencies:
call-bind-apply-helpers "^1.0.1"
es-errors "^1.3.0"
gopd "^1.2.0"
duplexer3@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
@@ -2032,6 +2049,23 @@ es-abstract@^1.19.0, es-abstract@^1.20.4:
unbox-primitive "^1.0.2"
which-typed-array "^1.1.10"
es-define-property@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
es-errors@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
dependencies:
es-errors "^1.3.0"
es-set-tostringtag@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
@@ -2041,6 +2075,16 @@ es-set-tostringtag@^2.0.1:
has "^1.0.3"
has-tostringtag "^1.0.0"
es-set-tostringtag@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
dependencies:
es-errors "^1.3.0"
get-intrinsic "^1.2.6"
has-tostringtag "^1.0.2"
hasown "^2.0.2"
es-shim-unscopables@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
@@ -2392,10 +2436,10 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"
@@ -2428,10 +2472,10 @@ flatted@^3.1.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
follow-redirects@^1.15.0:
version "1.15.3"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
follow-redirects@^1.15.6:
version "1.15.6"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
for-each@^0.3.3:
version "0.3.3"
@@ -2441,12 +2485,14 @@ for-each@^0.3.3:
is-callable "^1.1.3"
form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
version "4.0.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4"
integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
es-set-tostringtag "^2.1.0"
hasown "^2.0.2"
mime-types "^2.1.12"
fs.realpath@^1.0.0:
@@ -2464,6 +2510,11 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
function-bind@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
function.prototype.name@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
@@ -2508,11 +2559,35 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1:
has-proto "^1.0.1"
has-symbols "^1.0.3"
get-intrinsic@^1.2.6:
version "1.3.0"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
dependencies:
call-bind-apply-helpers "^1.0.2"
es-define-property "^1.0.1"
es-errors "^1.3.0"
es-object-atoms "^1.1.1"
function-bind "^1.1.2"
get-proto "^1.0.1"
gopd "^1.2.0"
has-symbols "^1.1.0"
hasown "^2.0.2"
math-intrinsics "^1.1.0"
get-package-type@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
get-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
dependencies:
dunder-proto "^1.0.1"
es-object-atoms "^1.0.0"
get-stream@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
@@ -2635,6 +2710,11 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
gopd@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
got@^10.6.0:
version "10.7.0"
resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f"
@@ -2742,6 +2822,11 @@ has-symbols@^1.0.3:
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
has-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
has-tostringtag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
@@ -2749,6 +2834,13 @@ has-tostringtag@^1.0.0:
dependencies:
has-symbols "^1.0.2"
has-tostringtag@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
dependencies:
has-symbols "^1.0.3"
has-yarn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
@@ -2761,6 +2853,13 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
hasown@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
dependencies:
function-bind "^1.1.2"
hosted-git-info@^2.1.4:
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
@@ -4065,6 +4164,11 @@ map-obj@^4.0.0:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5"
integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
meow@^8.1.0:
version "8.1.2"
resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
@@ -4092,20 +4196,12 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
dependencies:
braces "^3.0.1"
picomatch "^2.0.5"
micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
dependencies:
braces "^3.0.2"
braces "^3.0.3"
picomatch "^2.3.1"
mime-db@1.45.0:
@@ -4667,7 +4763,7 @@ picocolors@^1.0.0:
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
picomatch@^2.0.4, picomatch@^2.2.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
@@ -5847,9 +5943,9 @@ write-file-atomic@^4.0.2:
signal-exit "^3.0.7"
ws@^8.13.0:
version "8.13.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
version "8.17.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
xdg-basedir@^4.0.0:
version "4.0.0"