Compare commits

..

105 Commits

Author SHA1 Message Date
maxswa
e4d2b10488 v2.13.1 2023-04-12 21:51:49 -04:00
Max Swartwout
0cfd0e2471 Merge pull request #73 from davidvorona/main
Fix spelling of Calvar'ion
2023-04-12 21:50:54 -04:00
David Vorona
9c284ad4b0 Fix spelling of Calvar'ion 2023-04-12 10:26:06 -07:00
Max Swartwout
ec60a72c08 Merge pull request #71 from maxswa/fix-gh-workflow
Update GH action versions.
2023-04-12 13:04:45 -04:00
maxswa
d45e2efcfd Update GH action versions. 2023-04-12 13:00:18 -04:00
maxswa
f80b417121 v2.13.0 2023-04-12 12:53:39 -04:00
maxswa
415fe2f02b Update np 2023-04-12 12:50:41 -04:00
Max Swartwout
968799176f Merge pull request #70 from maxswa/wilderness-boss-variants
Add wilderness boss variants.
2023-04-12 12:46:11 -04:00
maxswa
f45ae67813 Add wilderness boss variants. 2023-04-12 12:42:37 -04:00
maxswa
7724636b40 v2.12.1 2023-03-19 23:33:33 -04:00
maxswa
3954b04acc Add publishConfig to package.json 2023-03-19 23:33:03 -04:00
Max Swartwout
ee7389455c Merge pull request #68 from maxswa/add-options
Add `validateRSN`, `GetStatsOptions`
2023-03-19 23:28:34 -04:00
maxswa
54c11635e0 Add GetStatsOptions for getStats 2023-03-19 23:14:10 -04:00
maxswa
dc799cf363 Add validateRSN helper function. 2023-03-19 22:38:45 -04:00
maxswa
d4c7aaff2a v2.12.0 2023-02-19 18:31:43 -05:00
Max Swartwout
03c089ebff Merge pull request #66 from maxswa/account-builds
Add new `Gamemode`s
2023-02-19 18:31:00 -05:00
Max Swartwout
96641d875a Merge pull request #65 from maxswa/dependabot/npm_and_yarn/http-cache-semantics-4.1.1
Bump http-cache-semantics from 4.1.0 to 4.1.1
2023-02-19 18:28:33 -05:00
maxswa
b2bdd3d2ce Add new Gamemodes 2023-02-19 18:27:56 -05:00
dependabot[bot]
a4ddfaf199 Bump http-cache-semantics from 4.1.0 to 4.1.1
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-03 04:54:08 +00:00
maxswa
efbcdfc709 v2.11.0 2023-01-13 11:21:51 -05:00
Max Swartwout
fe913aba1f Merge pull request #64 from davidvorona/add-muspah
Add phantom muspah
2023-01-12 15:30:21 -05:00
Max Swartwout
1497653bab Merge pull request #63 from maxswa/dependabot/npm_and_yarn/json5-1.0.2
Bump json5 from 1.0.1 to 1.0.2
2023-01-12 15:29:38 -05:00
David Vorona
f76de38eb1 Add phantom muspah 2023-01-11 11:45:59 -08:00
dependabot[bot]
2f1d10b309 Bump json5 from 1.0.1 to 1.0.2
Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-06 22:36:14 +00:00
Max Swartwout
f08424cb81 Update build badge in README 2022-12-19 12:24:03 -05:00
maxswa
69088db3b6 v2.10.2 2022-12-15 23:24:59 +00:00
Max Swartwout
9cc89735cd Merge pull request #61 from maxswa/get-rsn-format-highlight-row
Fix `getRSNFormat`
2022-12-15 18:15:34 -05:00
Max Swartwout
a126ae4fc7 Merge pull request #58 from maxswa/dependabot/npm_and_yarn/minimatch-3.1.2
Bump minimatch from 3.0.4 to 3.1.2
2022-12-15 18:11:34 -05:00
Max Swartwout
52f3df1838 Merge pull request #59 from maxswa/dependabot/npm_and_yarn/qs-6.5.3
Bump qs from 6.5.2 to 6.5.3
2022-12-15 18:11:23 -05:00
maxswa
2891bbddc4 Fix getRSNFormat 2022-12-15 18:09:21 -05:00
dependabot[bot]
e2ea2fe33d Bump qs from 6.5.2 to 6.5.3
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-09 06:28:03 +00:00
maxswa
b7ae812f45 v2.10.1 2022-12-04 14:17:36 -05:00
dependabot[bot]
240628d9cc Bump minimatch from 3.0.4 to 3.1.2
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2.
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-04 19:14:24 +00:00
Max Swartwout
b754663f6d Merge pull request #56 from APKiwi/main
Added "-" as a valid character in "getStats"
2022-12-04 14:13:51 -05:00
Max Swartwout
0678f7c979 Merge pull request #57 from maxswa/dependabot/npm_and_yarn/decode-uri-component-0.2.2
Bump decode-uri-component from 0.2.0 to 0.2.2
2022-12-04 14:13:27 -05:00
dependabot[bot]
2a60283a93 Bump decode-uri-component from 0.2.0 to 0.2.2
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-03 13:49:33 +00:00
SirKhaoz
b912731cf9 Added "-" as a valid character in "getStats" 2022-11-04 21:56:39 +13:00
maxswa
cf44c57ec6 v2.10.0 2022-08-24 08:25:48 -04:00
Max Swartwout
3f34c9ab61 Merge pull request #55 from maxswa/toa
Add Tombs of Amascut.
2022-08-24 08:24:58 -04:00
maxswa
1ef73b6b0c Add Tombs of Amascut. 2022-08-24 07:48:05 -04:00
maxswa
08ecf68689 v2.9.0 2022-07-17 13:08:27 -04:00
Max Swartwout
ab3ee70237 Merge pull request #53 from maxswa/dependabot/npm_and_yarn/jsdom-16.5.0
Bump jsdom from 16.4.0 to 16.5.0
2022-07-17 13:06:51 -04:00
Max Swartwout
cad20d41cb Merge pull request #54 from davidvorona/pvp-arena
Add support for PvP Arena activity
2022-07-17 13:02:32 -04:00
David Vorona
2877b9c8a1 Add support for PvP Arena activity 2022-07-15 14:29:06 -07:00
dependabot[bot]
afbb22749a Bump jsdom from 16.4.0 to 16.5.0
Bumps [jsdom](https://github.com/jsdom/jsdom) from 16.4.0 to 16.5.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/master/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/16.4.0...16.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-23 04:56:25 +00:00
maxswa
eebf76a34c v2.8.0 2022-04-18 15:50:35 -04:00
Max Swartwout
e60442a7ce Merge pull request #50 from maxswa/dependabot/npm_and_yarn/minimist-1.2.6
Bump minimist from 1.2.5 to 1.2.6
2022-04-18 15:47:45 -04:00
Max Swartwout
1132a085e1 Merge pull request #52 from molo-pl/main
Add support for Rifts Closed
2022-04-18 15:47:35 -04:00
molo-pl
a2a34a46e3 Add support for Rifts Closed 2022-04-15 11:30:56 +02:00
dependabot[bot]
71a76a12fd Bump minimist from 1.2.5 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-28 13:26:44 +00:00
Max Swartwout
3a72315498 Merge pull request #49 from maxswa/dependabot/npm_and_yarn/follow-redirects-1.14.8
Bump follow-redirects from 1.14.7 to 1.14.8
2022-02-15 14:37:28 -05:00
dependabot[bot]
c1c9833ad0 Bump follow-redirects from 1.14.7 to 1.14.8
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-12 12:01:29 +00:00
Max Swartwout
9fe03746e1 Merge pull request #48 from maxswa/dependabot/npm_and_yarn/follow-redirects-1.14.7
Bump follow-redirects from 1.14.4 to 1.14.7
2022-01-18 10:42:22 -05:00
dependabot[bot]
66a4fb47a6 Bump follow-redirects from 1.14.4 to 1.14.7
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.7.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-13 14:22:21 +00:00
Max Swartwout
83c44148a7 Merge pull request #47 from maxswa/fix-tests-nex
Fix tests
2022-01-05 21:54:48 -05:00
maxswa
44dea6b35c Add line for nex in lynxTitanStats.csv 2022-01-05 21:50:28 -05:00
maxswa
0bf491638c v2.7.0 2022-01-05 10:04:11 -05:00
Max Swartwout
febca534b0 Merge pull request #45 from maxswa/add-nex
Add Nex.
2022-01-05 09:57:56 -05:00
Max Swartwout
8daee5c39b Merge pull request #46 from molo-pl/main
Throw error for unknown hiscores CSV format
2022-01-05 09:52:42 -05:00
molo-pl
f98cf8aaaa Throw error for unknown hiscores CSV format 2022-01-04 23:05:34 +01:00
maxswa
5d9f6a6bac Add Nex. 2021-12-19 21:40:09 -05:00
Max Swartwout
8737b50a82 Merge pull request #44 from maxswa/dependabot/npm_and_yarn/axios-0.21.2
Bump axios from 0.21.1 to 0.21.2
2021-09-27 16:38:12 -04:00
dependabot[bot]
1255e7e3d2 Bump axios from 0.21.1 to 0.21.2
Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-27 20:36:33 +00:00
Max Swartwout
f4135d0b0f Merge pull request #42 from maxswa/dependabot/npm_and_yarn/path-parse-1.0.7
Bump path-parse from 1.0.6 to 1.0.7
2021-09-27 16:36:09 -04:00
Max Swartwout
6135ff459c Merge pull request #43 from maxswa/dependabot/npm_and_yarn/tmpl-1.0.5
Bump tmpl from 1.0.4 to 1.0.5
2021-09-27 16:36:00 -04:00
dependabot[bot]
9fb7e4cebc Bump tmpl from 1.0.4 to 1.0.5
Bumps [tmpl](https://github.com/daaku/nodejs-tmpl) from 1.0.4 to 1.0.5.
- [Release notes](https://github.com/daaku/nodejs-tmpl/releases)
- [Commits](https://github.com/daaku/nodejs-tmpl/commits/v1.0.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-21 04:35:18 +00:00
dependabot[bot]
11350b2444 Bump path-parse from 1.0.6 to 1.0.7
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-11 02:52:55 +00:00
maxswa
e0d6c5b20f v2.6.0 2021-07-02 10:53:19 -04:00
Max Swartwout
c8a4440ac3 Merge pull request #41 from Not-Jayden/phosanis-nightmare
New Boss: Phosani's Nightmare
2021-07-02 10:49:19 -04:00
Not-Jayden
f3781cf142 add to readme 2021-07-02 18:09:10 +08:00
Not-Jayden
5fbc04217b Merge branch 'phosanis-nightmare' of https://github.com/Not-Jayden/osrs-json-hiscores into phosanis-nightmare 2021-07-02 13:20:45 +08:00
Not-Jayden
eb5d0ba49f add to lynxTitanStats.csv 2021-07-02 13:20:33 +08:00
Not-Jayden
c68e3bebea Update __tests__/hiscores.test.ts 2021-07-02 13:13:07 +08:00
Not-Jayden
aa6fd6f39a add phosani's nightmare to api 2021-07-01 20:14:31 +08:00
maxswa
cc9aae8ced v2.5.2 2021-06-11 14:46:04 -04:00
Max Swartwout
12882b4e34 Merge pull request #37 from Not-Jayden/revert-seasonal-changes
[Bug] Remove conditional `seasonal` gameMode logic for bosses
2021-06-11 14:44:07 -04:00
Max Swartwout
b17a8b9299 Merge pull request #39 from maxswa/dependabot/npm_and_yarn/hosted-git-info-2.8.9
Bump hosted-git-info from 2.8.8 to 2.8.9
2021-06-11 14:42:54 -04:00
dependabot[bot]
50f2c19257 Bump hosted-git-info from 2.8.8 to 2.8.9
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.8 to 2.8.9.
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9)

---
updated-dependencies:
- dependency-name: hosted-git-info
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-11 18:40:53 +00:00
Max Swartwout
d892f8e67b Merge pull request #38 from maxswa/dependabot/npm_and_yarn/normalize-url-4.5.1
Bump normalize-url from 4.5.0 to 4.5.1
2021-06-11 14:39:31 -04:00
dependabot[bot]
af5664ae6e Bump normalize-url from 4.5.0 to 4.5.1
Bumps [normalize-url](https://github.com/sindresorhus/normalize-url) from 4.5.0 to 4.5.1.
- [Release notes](https://github.com/sindresorhus/normalize-url/releases)
- [Commits](https://github.com/sindresorhus/normalize-url/commits)

---
updated-dependencies:
- dependency-name: normalize-url
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-09 17:37:06 +00:00
NotJayden
20c5c2f730 delete seasonal changes 2021-06-10 00:15:11 +08:00
Max Swartwout
04e59cff04 Merge pull request #36 from maxswa/dependabot/npm_and_yarn/trim-newlines-3.0.1
Bump trim-newlines from 3.0.0 to 3.0.1
2021-06-08 17:14:27 -04:00
dependabot[bot]
ad2249ba76 Bump trim-newlines from 3.0.0 to 3.0.1
Bumps [trim-newlines](https://github.com/sindresorhus/trim-newlines) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/sindresorhus/trim-newlines/releases)
- [Commits](https://github.com/sindresorhus/trim-newlines/commits)

---
updated-dependencies:
- dependency-name: trim-newlines
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-08 21:11:36 +00:00
maxswa
5c52bfd883 v2.5.1 2021-06-08 17:10:31 -04:00
Max Swartwout
947d994cdf Merge pull request #35 from Not-Jayden/fix-seasonal-bosses-results
[Bug fix] Add conditional bosses filter if gamemode is seasonal
2021-06-08 17:08:44 -04:00
NotJayden
130446ab74 use boss generic 2021-06-08 16:36:36 +08:00
NotJayden
f96e7e3e2d check bossKeys strict equals the BOSSES array, and check seasonal bossKeys doesn't include tob hard mode 2021-06-08 16:29:43 +08:00
NotJayden
90d66b6b2c prettier 2021-06-08 16:16:00 +08:00
NotJayden
14cedb5877 add fysadStatsSeasonal.csv, update lynxTitanStats.csv, and write tests to make sure the keys for bosses match the expectation for the given gamemode 2021-06-08 16:15:36 +08:00
NotJayden
4703812b52 add comment 2021-06-08 15:49:02 +08:00
NotJayden
a11ac96f68 prettier 2021-06-07 14:53:36 +08:00
NotJayden
f97caa6a15 undo lib change 2021-06-07 14:51:15 +08:00
NotJayden
e7e54741d2 add conditional bosses filter if gamemode is seasonal 2021-06-07 14:50:21 +08:00
maxswa
062e5e02b2 v2.5.0 2021-06-03 22:26:38 -04:00
Max Swartwout
ed7036f9c0 Merge pull request #33 from maxswa/add-tob-hard-mode
Add TOB hard mode.
2021-06-03 22:25:24 -04:00
maxswa
74aba3e818 Add TOB hard mode. 2021-06-03 22:19:03 -04:00
Max Swartwout
09fe7ed539 Merge pull request #32 from maxswa/dependabot/npm_and_yarn/ws-7.4.6
Bump ws from 7.4.2 to 7.4.6
2021-06-03 22:05:32 -04:00
dependabot[bot]
7a78e1ea0a Bump ws from 7.4.2 to 7.4.6
Bumps [ws](https://github.com/websockets/ws) from 7.4.2 to 7.4.6.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.4.2...7.4.6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-29 07:30:11 +00:00
maxswa
7a4163aed2 Add .gitattributes to ignore html test files. 2021-05-11 00:02:17 -04:00
Max Swartwout
85464d02fe Add build badge to README.md 2021-05-10 23:44:50 -04:00
maxswa
592d82f86b v2.4.2 2021-05-10 23:37:48 -04:00
maxswa
a28a9e253e Replace watch package with tsc --watch 2021-05-10 23:34:46 -04:00
Max Swartwout
0bd15f2402 Merge pull request #30 from maxswa/dependabot/npm_and_yarn/lodash-4.17.21
Bump lodash from 4.17.20 to 4.17.21
2021-05-10 23:24:21 -04:00
dependabot[bot]
ed8ad51b4d Bump lodash from 4.17.20 to 4.17.21
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-11 03:22:49 +00:00
Max Swartwout
311ea88c61 Merge pull request #31 from maxswa/add-axios-test-mocks
Mock axios requests for tests.
2021-05-10 23:21:18 -04:00
15 changed files with 4980 additions and 3309 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
*.html linguist-vendored

View File

@@ -10,19 +10,19 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: borales/actions-yarn@v2.0.0
- uses: actions/checkout@v3.3.0
- uses: borales/actions-yarn@v4.2.0
with:
cmd: install
- uses: borales/actions-yarn@v2.0.0
- uses: borales/actions-yarn@v4.2.0
with:
cmd: lint
- uses: borales/actions-yarn@v2.0.0
- uses: borales/actions-yarn@v4.2.0
with:
cmd: format
- uses: borales/actions-yarn@v2.0.0
- uses: borales/actions-yarn@v4.2.0
with:
cmd: build
- uses: borales/actions-yarn@v2.0.0
- uses: borales/actions-yarn@v4.2.0
with:
cmd: test

108
README.md
View File

@@ -3,6 +3,7 @@
[![npm](https://img.shields.io/npm/v/osrs-json-hiscores.svg?style=flat-square)](https://www.npmjs.com/package/osrs-json-hiscores)
[![downloads](https://img.shields.io/npm/dm/osrs-json-hiscores.svg?style=flat-square)](https://npm-stat.com/charts.html?package=osrs-json-hiscores)
[![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!**
@@ -108,7 +109,9 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
| Bounty Hunter (Rogue) | `rogueBH` |
| Bounty Hunter (Hunter) | `hunterBH` |
| Last Man Standing | `lastManStanding` |
| PvP Arena | `pvpArena` |
| Soul Wars Zeal | `soulWarsZeal` |
| Rifts Closed | `riftsClosed` |
### Leagues
@@ -118,53 +121,62 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
### Bosses
| Boss Name | Param |
| -------------------------------- | :----------------------------: |
| Abyssal Sire | `abyssalSire` |
| Alchemical Hydra | `alchemicalHydra` |
| Barrows Chests | `barrows` |
| Bryophyta | `bryophyta` |
| Callisto | `callisto` |
| Cerberus | `cerberus` |
| Chambers Of Xeric | `chambersOfXeric` |
| Chambers Of Xeric Challenge Mode | `chambersOfXericChallengeMode` |
| Chaos Elemental | `chaosElemental` |
| Chaos Fanatic | `chaosFanatic` |
| Commander Zilyana | `commanderZilyana` |
| Corporeal Beast | `corporealBeast` |
| Crazy Archaeologist | `crazyArchaeologist` |
| Dagannoth Prime | `dagannothPrime` |
| Dagannoth Rex | `dagannothRex` |
| Dagannoth Supreme | `dagannothSupreme` |
| Deranged Archaeologist | `derangedArchaeologist` |
| General Graardor | `generalGraardor` |
| Giant Mole | `giantMole` |
| Grotesque Guardians | `grotesqueGuardians` |
| Hespori | `hespori` |
| Kalphite Queen | `kalphiteQueen` |
| King Black Dragon | `kingBlackDragon` |
| Kraken | `kraken` |
| Kreearra | `kreeArra` |
| K'ril Tsutsaroth | `krilTsutsaroth` |
| Mimic | `mimic` |
| The Nightmare of Ashihama | `nightmare` |
| Obor | `obor` |
| Sarachnis | `sarachnis` |
| Scorpia | `scorpia` |
| Skotizo | `skotizo` |
| Tempoross | `tempoross` |
| Gauntlet | `gauntlet` |
| Corrupted Gauntlet | `corruptedGauntlet` |
| Theatre Of Blood | `theatreOfBlood` |
| Thermonuclear Smoke Devil | `thermonuclearSmokeDevil` |
| TzKal-Zuk | `tzKalZuk` |
| TzTok-Jad | `tzTokJad` |
| Venenatis | `venenatis` |
| Vetion | `vetion` |
| Vorkath | `vorkath` |
| Wintertodt | `wintertodt` |
| Zalcano | `zalcano` |
| Zulrah | `zulrah` |
| Boss Name | Param |
| --------------------------------- | :----------------------------: |
| Abyssal Sire | `abyssalSire` |
| Alchemical Hydra | `alchemicalHydra` |
| Artio | `artio` |
| Barrows Chests | `barrows` |
| Bryophyta | `bryophyta` |
| Callisto | `callisto` |
| Calvar'ion | `calvarion` |
| Cerberus | `cerberus` |
| Chambers Of Xeric | `chambersOfXeric` |
| Chambers Of Xeric: Challenge Mode | `chambersOfXericChallengeMode` |
| Chaos Elemental | `chaosElemental` |
| Chaos Fanatic | `chaosFanatic` |
| Commander Zilyana | `commanderZilyana` |
| Corporeal Beast | `corporealBeast` |
| Crazy Archaeologist | `crazyArchaeologist` |
| Dagannoth Prime | `dagannothPrime` |
| Dagannoth Rex | `dagannothRex` |
| Dagannoth Supreme | `dagannothSupreme` |
| Deranged Archaeologist | `derangedArchaeologist` |
| General Graardor | `generalGraardor` |
| Giant Mole | `giantMole` |
| Grotesque Guardians | `grotesqueGuardians` |
| Hespori | `hespori` |
| Kalphite Queen | `kalphiteQueen` |
| King Black Dragon | `kingBlackDragon` |
| Kraken | `kraken` |
| Kreearra | `kreeArra` |
| K'ril Tsutsaroth | `krilTsutsaroth` |
| Mimic | `mimic` |
| Nex | `nex` |
| The Nightmare of Ashihama | `nightmare` |
| Phosani's Nightmare | `phosanisNightmare` |
| Obor | `obor` |
| Phantom Muspah | `phantomMuspah` |
| Sarachnis | `sarachnis` |
| Scorpia | `scorpia` |
| Skotizo | `skotizo` |
| Spindel | `spindel` |
| Tempoross | `tempoross` |
| The Gauntlet | `gauntlet` |
| The Corrupted Gauntlet | `corruptedGauntlet` |
| Theatre Of Blood | `theatreOfBlood` |
| Theatre Of Blood: Hard Mode | `theatreOfBloodHardMode` |
| Thermonuclear Smoke Devil | `thermonuclearSmokeDevil` |
| Tombs of Amascut | `tombsOfAmascut` |
| Tombs of Amascut: Expert Mode | `tombsOfAmascutExpertMode` |
| TzKal-Zuk | `tzKalZuk` |
| TzTok-Jad | `tzTokJad` |
| Venenatis | `venenatis` |
| Vetion | `vetion` |
| Vorkath | `vorkath` |
| Wintertodt | `wintertodt` |
| Zalcano | `zalcano` |
| Zulrah | `zulrah` |
## What you'll get
@@ -188,7 +200,9 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
leaguePoints: {},
bountyHunter: {},
lastManStanding: {},
pvpArena: {},
soulWarsZeal: {},
riftsClosed: {},
bosses: {}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,9 @@ import {
Stats,
getPlayerTableURL,
getSkillPageURL,
getStatsURL
getStatsURL,
BOSSES,
INVALID_FORMAT_ERROR
} from '../src/index';
const B0ATY_NAME = 'B0ATY';
@@ -85,12 +87,16 @@ test('Parse CSV to json', () => {
392,250
1,6143
4814,898
13,4057
37,225
25,1110
382,2780
944,3000
704,892
1981,1452
4981,23
888,1046
444,792
613,4856
102,4038
156,334
@@ -113,16 +119,23 @@ test('Parse CSV to json', () => {
625,2391
120,2981
1,109
99,39002
3,22666
2,84
26,323
44,6233
201,1101
82,3404
5085,61
678,903
18823,23
63,375
2870,6
6984,138
23,923141
4043,2000
4073,1020
289,13070
489,8
967,47
11155,223
@@ -165,7 +178,9 @@ test('Parse CSV to json', () => {
rogue: { rank: 89912, score: 37 }
},
lastManStanding: { rank: 4814, score: 898 },
pvpArena: { rank: 13, score: 4057 },
soulWarsZeal: { rank: 37, score: 225 },
riftsClosed: { rank: 25, score: 1110 },
clues: {
all: { rank: 32, score: 12148 },
beginner: { rank: 3105, score: 76 },
@@ -178,9 +193,11 @@ test('Parse CSV to json', () => {
bosses: {
abyssalSire: { rank: 382, score: 2780 },
alchemicalHydra: { rank: 944, score: 3000 },
artio: { rank: 704, score: 892 },
barrows: { rank: 1981, score: 1452 },
bryophyta: { rank: 4981, score: 23 },
callisto: { rank: 888, score: 1046 },
calvarion: { rank: 444, score: 792 },
cerberus: { rank: 613, score: 4856 },
chambersOfXeric: { rank: 102, score: 4038 },
chambersOfXericChallengeMode: { rank: 156, score: 334 },
@@ -203,16 +220,23 @@ test('Parse CSV to json', () => {
kreeArra: { rank: 625, score: 2391 },
krilTsutsaroth: { rank: 120, score: 2981 },
mimic: { rank: 1, score: 109 },
nex: { rank: 99, score: 39002 },
nightmare: { rank: 3, score: 22666 },
phosanisNightmare: { rank: 2, score: 84 },
obor: { rank: 26, score: 323 },
phantomMuspah: { rank: 44, score: 6233 },
sarachnis: { rank: 201, score: 1101 },
scorpia: { rank: 82, score: 3404 },
skotizo: { rank: 5085, score: 61 },
spindel: { rank: 678, score: 903 },
tempoross: { rank: 18823, score: 23 },
gauntlet: { rank: 63, score: 375 },
corruptedGauntlet: { rank: 2870, score: 6 },
theatreOfBlood: { rank: 6984, score: 138 },
theatreOfBloodHardMode: { rank: 23, score: 923141 },
thermonuclearSmokeDevil: { rank: 4043, score: 2000 },
tombsOfAmascut: { rank: 4073, score: 1020 },
tombsOfAmascutExpertMode: { rank: 289, score: 13070 },
tzKalZuk: { rank: 489, score: 8 },
tzTokJad: { rank: 967, score: 47 },
venenatis: { rank: 11155, score: 223 },
@@ -227,6 +251,18 @@ test('Parse CSV to json', () => {
expect(parseStats(csv)).toStrictEqual(expectedOutput);
});
test('Parse CSV with unknown activity', () => {
const statsWithUnknownActivity = `${lynxTitanStats}
-1,-1`;
expect(() => parseStats(statsWithUnknownActivity)).toThrow(
INVALID_FORMAT_ERROR
);
});
test('Parse invalid CSV', () => {
expect(() => parseStats('invalid')).toThrow(INVALID_FORMAT_ERROR);
});
describe('Get name format', () => {
it('gets a name with a space', async () => {
const data = await getRSNFormat(LYNX_TITAN_SPACE_NAME);
@@ -439,7 +475,10 @@ test('Get non-existent player', async () => {
});
test('Get stats by gamemode', async () => {
const { skills } = await getStatsByGamemode(LYNX_TITAN_FORMATTED_NAME);
const { skills, bosses } = await getStatsByGamemode(
LYNX_TITAN_FORMATTED_NAME
);
expect(skills).toMatchObject({
overall: { rank: expect.any(Number), level: 2277, xp: 4600000000 },
attack: { rank: expect.any(Number), level: 99, xp: 200000000 },
@@ -466,4 +505,56 @@ test('Get stats by gamemode', async () => {
hunter: { rank: expect.any(Number), level: 99, xp: 200000000 },
construction: { rank: expect.any(Number), level: 99, xp: 200000000 }
});
const bossKeys = Object.keys(bosses);
expect(bossKeys).toStrictEqual(BOSSES);
expect.assertions(2);
});
describe('Get stats options', () => {
const rsn = 'player';
let axiosMock: jest.Mock;
beforeEach(() => {
axios.get = jest.fn(
(url) =>
new Promise<any>((resolve) =>
resolve(
url === getPlayerTableURL('main', rsn)
? { data: lynxTitanNamePage }
: { status: 200, data: lynxTitanStats }
)
)
);
axiosMock = axios.get as any;
axiosMock.mockClear();
});
it('fetches all gamemodes and formatted RSN when no options provided', async () => {
await getStats(rsn);
expect(axiosMock.mock.calls.map((val) => val[0])).toEqual([
getStatsURL('main', rsn),
getPlayerTableURL('main', rsn),
getStatsURL('ironman', rsn),
getStatsURL('hardcore', rsn),
getStatsURL('ultimate', rsn)
]);
});
it('skips fetching formatted RSN when option is provided', async () => {
await getStats(rsn, { shouldGetFormattedRsn: false });
expect(
axiosMock.mock.calls.some(
(val) => val[0] === getPlayerTableURL('main', rsn)
)
).toBeFalsy();
});
it('skips fetching game mode when option is provided', async () => {
await getStats(rsn, {
otherGamemodes: ['ironman', 'ultimate']
});
expect(
axiosMock.mock.calls.some(
(val) => val[0] === getStatsURL('hardcore', rsn)
)
).toBeFalsy();
});
});

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,7 @@
3,99,200000000
25,99,200000000
5,99,200000000
24,99,200000000
23,99,200000000
12,99,200000000
2,99,200000000
19,99,200000000
@@ -29,7 +29,18 @@
-1,-1
-1,-1
-1,-1
344430,22
347584,22
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
-1,-1
Can't render this file because it has a wrong number of fields in line 25.

View File

@@ -1,6 +1,6 @@
{
"name": "osrs-json-hiscores",
"version": "2.4.1",
"version": "2.13.1",
"description": "The Old School Runescape API wrapper that does more!",
"main": "lib/index.js",
"types": "lib/index.d.ts",
@@ -8,7 +8,7 @@
"lib/**/*"
],
"scripts": {
"dev": "watch 'yarn run build' src",
"dev": "yarn build --watch",
"build": "tsc",
"format": "prettier --write \"src/**/*.ts\"",
"lint": "eslint --fix \"src/**/*.ts\"",
@@ -30,6 +30,9 @@
"stats",
"skills"
],
"publishConfig": {
"registry": "https://registry.npmjs.org"
},
"author": "maxswa",
"license": "ISC",
"bugs": {
@@ -106,10 +109,9 @@
"husky": "^5.2.0",
"jest": "^26.6.3",
"lint-staged": "^10.5.4",
"np": "6.5.0",
"np": "^7.7.0",
"prettier": "^2.2.1",
"ts-jest": "^26.5.4",
"typescript": "^4.2.3",
"watch": "^1.0.2"
"typescript": "^4.2.3"
}
}

View File

@@ -1,4 +1,5 @@
import { JSDOM } from 'jsdom';
import { AxiosResponse } from 'axios';
import { BinaryData, JSDOM } from 'jsdom';
import {
Player,
Activity,
@@ -12,7 +13,8 @@ import {
PlayerSkillRow,
ActivityName,
PlayerActivityRow,
Bosses
Bosses,
GetStatsOptions
} from './types';
import {
getStatsURL,
@@ -27,7 +29,9 @@ import {
rsnFromElement,
getActivityPageURL,
httpGet,
BOSSES
BOSSES,
INVALID_FORMAT_ERROR,
validateRSN
} from './utils';
/**
@@ -37,24 +41,19 @@ import {
* @returns Formatted version of the rsn.
*/
export async function getRSNFormat(rsn: string): Promise<string> {
if (typeof rsn !== 'string') {
throw Error('RSN must be a string');
} else if (!/^[a-zA-Z0-9 _-]+$/.test(rsn)) {
throw Error('RSN contains invalid character');
} else if (rsn.length > 12 || rsn.length < 1) {
throw Error('RSN must be between 1 and 12 characters');
}
validateRSN(rsn);
const url = getPlayerTableURL('main', rsn);
try {
const response = await httpGet(url);
const dom = new JSDOM(response.data);
const spans = dom.window.document.querySelectorAll(
'span[style="color:#AA0022;"]'
const response = await httpGet<string | Buffer | BinaryData | undefined>(
url
);
if (spans.length >= 2) {
const nameSpan = spans[1];
return rsnFromElement(nameSpan);
const dom = new JSDOM(response.data);
const anchor = dom.window.document.querySelector(
'.personal-hiscores__row.personal-hiscores__row--type-highlight a'
);
if (anchor) {
return rsnFromElement(anchor);
}
throw Error('Player not found');
} catch {
@@ -74,6 +73,13 @@ export function parseStats(csv: string): Stats {
.filter((entry) => !!entry)
.map((stat) => stat.split(','));
if (
splitCSV.length !==
SKILLS.length + BH_MODES.length + CLUES.length + BOSSES.length + 5
) {
throw Error(INVALID_FORMAT_ERROR);
}
const skillObjects: Skill[] = splitCSV
.filter((stat) => stat.length === 3)
.map((stat) => {
@@ -100,7 +106,12 @@ export function parseStats(csv: string): Stats {
const [leaguePoints] = activityObjects.splice(0, 1);
const bhObjects = activityObjects.splice(0, BH_MODES.length);
const clueObjects = activityObjects.splice(0, CLUES.length);
const [lastManStanding, soulWarsZeal] = activityObjects.splice(0, 2);
const [
lastManStanding,
pvpArena,
soulWarsZeal,
riftsClosed
] = activityObjects.splice(0, 4);
const bossObjects = activityObjects.splice(0, BOSSES.length);
const skills: Skills = skillObjects.reduce<Skills>((prev, curr, index) => {
@@ -132,7 +143,9 @@ export function parseStats(csv: string): Stats {
leaguePoints,
bountyHunter,
lastManStanding,
pvpArena,
soulWarsZeal,
riftsClosed,
clues,
bosses
};
@@ -149,25 +162,36 @@ export function parseStats(csv: string): Stats {
* @param rsn Username of the player.
* @returns Player object.
*/
export async function getStats(rsn: string): Promise<Player> {
if (typeof rsn !== 'string') {
throw Error('RSN must be a string');
} else if (!/^[a-zA-Z0-9 _]+$/.test(rsn)) {
throw Error('RSN contains invalid character');
} else if (rsn.length > 12 || rsn.length < 1) {
throw Error('RSN must be between 1 and 12 characters');
}
export async function getStats(
rsn: string,
options?: GetStatsOptions
): Promise<Player> {
validateRSN(rsn);
const otherGamemodes = options?.otherGamemodes ?? [
'ironman',
'hardcore',
'ultimate'
];
const shouldGetFormattedRsn = options?.shouldGetFormattedRsn ?? true;
const mainRes = await httpGet(getStatsURL('main', rsn));
const mainRes = await httpGet<string>(getStatsURL('main', rsn));
if (mainRes.status === 200) {
const otherResponses = await Promise.all([
httpGet(getStatsURL('ironman', rsn)).catch((err) => err),
httpGet(getStatsURL('hardcore', rsn)).catch((err) => err),
httpGet(getStatsURL('ultimate', rsn)).catch((err) => err),
getRSNFormat(rsn).catch(() => undefined)
]);
const [ironRes, hcRes, ultRes, formattedName] = otherResponses;
const emptyResponse: AxiosResponse<string> = {
status: 404,
data: '',
statusText: '',
headers: {},
config: {}
};
const getModeStats = async (
mode: Extract<Gamemode, 'ironman' | 'hardcore' | 'ultimate'>
): Promise<AxiosResponse<string>> =>
otherGamemodes.includes(mode)
? httpGet<string>(getStatsURL(mode, rsn)).catch((err) => err)
: emptyResponse;
const formattedName = shouldGetFormattedRsn
? await getRSNFormat(rsn).catch(() => undefined)
: undefined;
const player: Player = {
name: formattedName ?? rsn,
@@ -178,8 +202,11 @@ export async function getStats(rsn: string): Promise<Player> {
};
player.main = parseStats(mainRes.data);
const ironRes = await getModeStats('ironman');
if (ironRes.status === 200) {
player.ironman = parseStats(ironRes.data);
const hcRes = await getModeStats('hardcore');
const ultRes = await getModeStats('ultimate');
if (hcRes.status === 200) {
player.mode = 'hardcore';
player.hardcore = parseStats(hcRes.data);
@@ -237,16 +264,11 @@ export async function getStatsByGamemode(
rsn: string,
mode: Gamemode = 'main'
): Promise<Stats> {
if (typeof rsn !== 'string') {
throw Error('RSN must be a string');
} else if (!/^[a-zA-Z0-9 _]+$/.test(rsn)) {
throw Error('RSN contains invalid character');
} else if (rsn.length > 12 || rsn.length < 1) {
throw Error('RSN must be between 1 and 12 characters');
} else if (!GAMEMODES.includes(mode)) {
validateRSN(rsn);
if (!GAMEMODES.includes(mode)) {
throw Error('Invalid game mode');
}
const response = await httpGet(getStatsURL(mode, rsn));
const response = await httpGet<string>(getStatsURL(mode, rsn));
if (response.status !== 200) {
throw Error('Player not found');
}
@@ -269,7 +291,7 @@ export async function getSkillPage(
}
const url = getSkillPageURL(mode, skill, page);
const response = await httpGet(url);
const response = await httpGet<string | Buffer | BinaryData | undefined>(url);
const dom = new JSDOM(response.data);
const playersHTML = dom.window.document.querySelectorAll(
'.personal-hiscores__row'
@@ -317,7 +339,7 @@ export async function getActivityPage(
}
const url = getActivityPageURL(mode, activity, page);
const response = await httpGet(url);
const response = await httpGet<string | Buffer | BinaryData | undefined>(url);
const dom = new JSDOM(response.data);
const playersHTML = dom.window.document.querySelectorAll(
'.personal-hiscores__row'

View File

@@ -5,7 +5,10 @@ export type Gamemode =
| 'hardcore'
| 'deadman'
| 'seasonal'
| 'tournament';
| 'tournament'
| 'skiller'
| 'oneDefence'
| 'freshStart';
export interface Skill {
rank: number;
@@ -64,9 +67,11 @@ export type BH = { [Type in BHType]: Activity };
export type Boss =
| 'abyssalSire'
| 'alchemicalHydra'
| 'artio'
| 'barrows'
| 'bryophyta'
| 'callisto'
| 'calvarion'
| 'cerberus'
| 'chambersOfXeric'
| 'chambersOfXericChallengeMode'
@@ -89,16 +94,23 @@ export type Boss =
| 'kreeArra'
| 'krilTsutsaroth'
| 'mimic'
| 'nex'
| 'nightmare'
| 'phosanisNightmare'
| 'obor'
| 'phantomMuspah'
| 'sarachnis'
| 'scorpia'
| 'skotizo'
| 'spindel'
| 'tempoross'
| 'gauntlet'
| 'corruptedGauntlet'
| 'theatreOfBlood'
| 'theatreOfBloodHardMode'
| 'thermonuclearSmokeDevil'
| 'tombsOfAmascut'
| 'tombsOfAmascutExpertMode'
| 'tzKalZuk'
| 'tzTokJad'
| 'venenatis'
@@ -115,7 +127,9 @@ export type ActivityName =
| 'hunterBH'
| 'rogueBH'
| 'lastManStanding'
| 'pvpArena'
| 'soulWarsZeal'
| 'riftsClosed'
| 'allClues'
| 'beginnerClues'
| 'easyClues'
@@ -131,7 +145,9 @@ export interface Stats {
leaguePoints: Activity;
bountyHunter: BH;
lastManStanding: Activity;
pvpArena: Activity;
soulWarsZeal: Activity;
riftsClosed: Activity;
bosses: Bosses;
}
export type Modes = { [M in Gamemode]?: Stats };
@@ -153,3 +169,16 @@ export interface PlayerActivityRow extends Activity {
name: string;
dead: boolean;
}
export interface GetStatsOptions {
/**
* Other game modes to fetch ranks for.
* @defaultvalue `['ironman', 'hardcore', 'ultimate']`
*/
otherGamemodes?: Extract<Gamemode, 'ironman' | 'hardcore' | 'ultimate'>[];
/**
* If true, the formatted RSN will be fetched. Otherwise it will return the provided, unformatted RSN.
* @defaultvalue `true`
*/
shouldGetFormattedRsn?: boolean;
}

View File

@@ -22,7 +22,10 @@ export const GAMEMODE_URL: GamemodeUrl = {
ultimate: `${BASE_URL}_ultimate/`,
deadman: `${BASE_URL}_deadman/`,
seasonal: `${BASE_URL}_seasonal/`,
tournament: `${BASE_URL}_tournament/`
tournament: `${BASE_URL}_tournament/`,
skiller: `${BASE_URL}_skiller/`,
oneDefence: `${BASE_URL}_skiller_defence/`,
freshStart: `${BASE_URL}_fresh_start/`
};
export const SKILLS: SkillName[] = [
'overall',
@@ -72,9 +75,11 @@ export const GAMEMODES: Gamemode[] = [
export const BOSSES: Boss[] = [
'abyssalSire',
'alchemicalHydra',
'artio',
'barrows',
'bryophyta',
'callisto',
'calvarion',
'cerberus',
'chambersOfXeric',
'chambersOfXericChallengeMode',
@@ -97,16 +102,23 @@ export const BOSSES: Boss[] = [
'kreeArra',
'krilTsutsaroth',
'mimic',
'nex',
'nightmare',
'phosanisNightmare',
'obor',
'phantomMuspah',
'sarachnis',
'scorpia',
'skotizo',
'spindel',
'tempoross',
'gauntlet',
'corruptedGauntlet',
'theatreOfBlood',
'theatreOfBloodHardMode',
'thermonuclearSmokeDevil',
'tombsOfAmascut',
'tombsOfAmascutExpertMode',
'tzKalZuk',
'tzTokJad',
'venenatis',
@@ -128,7 +140,9 @@ export const ACTIVITIES: ActivityName[] = [
'eliteClues',
'masterClues',
'lastManStanding',
'pvpArena',
'soulWarsZeal',
'riftsClosed',
...BOSSES
];
@@ -139,9 +153,11 @@ export type FormattedBossNames = {
export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
abyssalSire: 'Abyssal Sire',
alchemicalHydra: 'Alchemical Hydra',
artio: 'Artio',
barrows: 'Barrows Chests',
bryophyta: 'Bryophyta',
callisto: 'Callisto',
calvarion: "Calvar'ion",
cerberus: 'Cerberus',
chambersOfXeric: 'Chambers of Xeric',
chambersOfXericChallengeMode: 'Chambers of Xeric: Challenge Mode',
@@ -164,16 +180,23 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
kreeArra: "Kree'Arra",
krilTsutsaroth: "K'ril Tsutsaroth",
mimic: 'Mimic',
nex: 'Nex',
nightmare: 'The Nightmare of Ashihama',
phosanisNightmare: "Phosani's Nightmare",
obor: 'Obor',
phantomMuspah: 'Phantom Muspah',
sarachnis: 'Sarachnis',
scorpia: 'Scorpia',
skotizo: 'Skotizo',
spindel: 'Spindel',
tempoross: 'Tempoross',
gauntlet: 'The Gauntlet',
corruptedGauntlet: 'The Corrupted Gauntlet',
theatreOfBlood: 'Theatre of Blood',
theatreOfBloodHardMode: 'Theatre of Blood: Hard Mode',
thermonuclearSmokeDevil: 'Thermonuclear Smoke Devil',
tombsOfAmascut: 'Tombs of Amascut',
tombsOfAmascutExpertMode: 'Tombs of Amascut: Expert Mode',
tzKalZuk: 'TzKal-Zuk',
tzTokJad: 'TzTok-Jad',
venenatis: 'Venenatis',
@@ -239,5 +262,9 @@ export const FORMATTED_BH_NAMES: FormattedBHNames = {
};
export const FORMATTED_LMS = 'Last Man Standing';
export const FORMATTED_PVP_ARENA = 'PvP Arena';
export const FORMATTED_SOUL_WARS = 'Soul Wars Zeal';
export const FORMATTED_LEAGUE_POINTS = 'League Points';
export const FORMATTED_RIFTS_CLOSED = 'Rifts Closed';
export const INVALID_FORMAT_ERROR = 'Invalid hiscores format';

View File

@@ -96,10 +96,25 @@ export const rsnFromElement = (el: Element | null) => {
* @param url URL to run a `GET` request against.
* @returns Axios response.
*/
export const httpGet = (url: string) =>
axios.get(url, {
export const httpGet = <Response>(url: string) =>
axios.get<Response>(url, {
headers: {
// without User-Agent header requests may be rejected by DDoS protection mechanism
'User-Agent': ua.firefox(80)
}
});
/**
* Validates that a provided RSN has the same username restrictions as Jagex.
* @param rsn Username to validate.
* @throws Error if the RSN fails validation.
*/
export const validateRSN = (rsn: string) => {
if (typeof rsn !== 'string') {
throw Error('RSN must be a string');
} else if (!/^[a-zA-Z0-9 _-]+$/.test(rsn)) {
throw Error('RSN contains invalid character');
} else if (rsn.length > 12 || rsn.length < 1) {
throw Error('RSN must be between 1 and 12 characters');
}
};

View File

@@ -4,7 +4,12 @@
"module": "commonjs",
"declaration": true,
"outDir": "./lib",
"strict": true
"strict": true,
"lib": ["ES2015", "DOM", "DOM.Iterable"],
"typeRoots": [
"./node_modules/@types",
"./src/@types"
]
},
"include": ["src"],
"exclude": ["node_modules", "**/__tests__/*"]

837
yarn.lock

File diff suppressed because it is too large Load Diff