mirror of
				https://github.com/maxswa/osrs-json-hiscores.git
				synced 2025-10-15 10:19:04 +00:00 
			
		
		
		
	Compare commits
	
		
			21 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | fc7897d4c7 | ||
|   | 72ea31490f | ||
|   | 66825955c1 | ||
|   | 4b4bf8c702 | ||
|   | 53981e7468 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | a90e5b98dd | ||
|   | 16a975f10b | ||
|   | c800501188 | ||
|   | 8a320df015 | ||
|   | 169462c446 | ||
|   | 317a972314 | ||
|   | c558f8402c | ||
|   | 41c6da4d5c | ||
|   | 99ad5eb662 | ||
|   | a8cf1713af | ||
|   | 11391c90f2 | ||
|   | e4d2b10488 | ||
|   | 0cfd0e2471 | ||
|   | 9c284ad4b0 | ||
|   | ec60a72c08 | ||
|   | d45e2efcfd | 
							
								
								
									
										12
									
								
								.github/workflows/main.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/main.yml
									
									
									
									
										vendored
									
									
								
							| @@ -10,19 +10,19 @@ jobs: | |||||||
|   build: |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v2 |       - uses: actions/checkout@v3.3.0 | ||||||
|       - uses: borales/actions-yarn@v2.0.0 |       - uses: borales/actions-yarn@v4.2.0 | ||||||
|         with: |         with: | ||||||
|           cmd: install |           cmd: install | ||||||
|       - uses: borales/actions-yarn@v2.0.0 |       - uses: borales/actions-yarn@v4.2.0 | ||||||
|         with: |         with: | ||||||
|           cmd: lint |           cmd: lint | ||||||
|       - uses: borales/actions-yarn@v2.0.0 |       - uses: borales/actions-yarn@v4.2.0 | ||||||
|         with: |         with: | ||||||
|           cmd: format |           cmd: format | ||||||
|       - uses: borales/actions-yarn@v2.0.0 |       - uses: borales/actions-yarn@v4.2.0 | ||||||
|         with: |         with: | ||||||
|           cmd: build |           cmd: build | ||||||
|       - uses: borales/actions-yarn@v2.0.0 |       - uses: borales/actions-yarn@v4.2.0 | ||||||
|         with: |         with: | ||||||
|           cmd: test |           cmd: test | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README.md
									
									
									
									
									
								
							| @@ -105,9 +105,11 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses | |||||||
| ### Minigames | ### Minigames | ||||||
|  |  | ||||||
| | Minigame                        |       Param       | | | Minigame                        |       Param       | | ||||||
| | ---------------------- | :---------------: | | | ------------------------------- | :---------------: | | ||||||
| | Bounty Hunter (Rogue)  |     `rogueBH`     | | | Bounty Hunter (Legacy - Rogue)  |     `rogueBH`     | | ||||||
| | Bounty Hunter (Hunter) |    `hunterBH`     | | | Bounty Hunter (Legacy - Hunter) |    `hunterBH`     | | ||||||
|  | | Bounty Hunter (Rogue)           |    `rogueBHV2`    | | ||||||
|  | | Bounty Hunter (Hunter)          |   `hunterBHV2`    | | ||||||
| | Last Man Standing               | `lastManStanding` | | | Last Man Standing               | `lastManStanding` | | ||||||
| | PvP Arena                       |    `pvpArena`     | | | PvP Arena                       |    `pvpArena`     | | ||||||
| | Soul Wars Zeal                  |  `soulWarsZeal`   | | | Soul Wars Zeal                  |  `soulWarsZeal`   | | ||||||
| @@ -129,7 +131,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses | |||||||
| | Barrows Chests                    |           `barrows`            | | | Barrows Chests                    |           `barrows`            | | ||||||
| | Bryophyta                         |          `bryophyta`           | | | Bryophyta                         |          `bryophyta`           | | ||||||
| | Callisto                          |           `callisto`           | | | Callisto                          |           `callisto`           | | ||||||
| | Cal'varion                        |          `calvarion`           | | | Calvar'ion                        |          `calvarion`           | | ||||||
| | Cerberus                          |           `cerberus`           | | | Cerberus                          |           `cerberus`           | | ||||||
| | Chambers Of Xeric                 |       `chambersOfXeric`        | | | Chambers Of Xeric                 |       `chambersOfXeric`        | | ||||||
| | Chambers Of Xeric: Challenge Mode | `chambersOfXericChallengeMode` | | | Chambers Of Xeric: Challenge Mode | `chambersOfXericChallengeMode` | | ||||||
|   | |||||||
							
								
								
									
										611
									
								
								__tests__/b0atyNamePage.html
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										611
									
								
								__tests__/b0atyNamePage.html
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -12,7 +12,8 @@ import { | |||||||
|   getSkillPageURL, |   getSkillPageURL, | ||||||
|   getStatsURL, |   getStatsURL, | ||||||
|   BOSSES, |   BOSSES, | ||||||
|   INVALID_FORMAT_ERROR |   INVALID_FORMAT_ERROR, | ||||||
|  |   BH_MODES | ||||||
| } from '../src/index'; | } from '../src/index'; | ||||||
|  |  | ||||||
| const B0ATY_NAME = 'B0ATY'; | const B0ATY_NAME = 'B0ATY'; | ||||||
| @@ -77,6 +78,8 @@ test('Parse CSV to json', () => { | |||||||
|   810,99,37688883 |   810,99,37688883 | ||||||
|   92,99,32005622 |   92,99,32005622 | ||||||
|   23423,478 |   23423,478 | ||||||
|  |   89914,35 | ||||||
|  |   99834,25 | ||||||
|   99831,23 |   99831,23 | ||||||
|   89912,37 |   89912,37 | ||||||
|   32,12148 |   32,12148 | ||||||
| @@ -174,8 +177,10 @@ test('Parse CSV to json', () => { | |||||||
|     }, |     }, | ||||||
|     leaguePoints: { rank: 23423, score: 478 }, |     leaguePoints: { rank: 23423, score: 478 }, | ||||||
|     bountyHunter: { |     bountyHunter: { | ||||||
|  |       hunterV2: { rank: 89914, score: 35 }, | ||||||
|  |       rogueV2: { rank: 99834, score: 25 }, | ||||||
|       hunter: { rank: 99831, score: 23 }, |       hunter: { rank: 99831, score: 23 }, | ||||||
|       rogue: { rank: 89912, score: 37 } |       rogue: { rank: 89912, score: 37 }, | ||||||
|     }, |     }, | ||||||
|     lastManStanding: { rank: 4814, score: 898 }, |     lastManStanding: { rank: 4814, score: 898 }, | ||||||
|     pvpArena: { rank: 13, score: 4057 }, |     pvpArena: { rank: 13, score: 4057 }, | ||||||
| @@ -475,7 +480,7 @@ test('Get non-existent player', async () => { | |||||||
| }); | }); | ||||||
|  |  | ||||||
| test('Get stats by gamemode', async () => { | test('Get stats by gamemode', async () => { | ||||||
|   const { skills, bosses } = await getStatsByGamemode( |   const { skills, bosses, bountyHunter } = await getStatsByGamemode( | ||||||
|     LYNX_TITAN_FORMATTED_NAME |     LYNX_TITAN_FORMATTED_NAME | ||||||
|   ); |   ); | ||||||
|  |  | ||||||
| @@ -508,8 +513,10 @@ test('Get stats by gamemode', async () => { | |||||||
|  |  | ||||||
|   const bossKeys = Object.keys(bosses); |   const bossKeys = Object.keys(bosses); | ||||||
|   expect(bossKeys).toStrictEqual(BOSSES); |   expect(bossKeys).toStrictEqual(BOSSES); | ||||||
|  |   const bountyHunterKeys = Object.keys(bountyHunter); | ||||||
|  |   expect(bountyHunterKeys).toStrictEqual(BH_MODES); | ||||||
|  |  | ||||||
|   expect.assertions(2); |   expect.assertions(3); | ||||||
| }); | }); | ||||||
|  |  | ||||||
| describe('Get stats options', () => { | describe('Get stats options', () => { | ||||||
|   | |||||||
							
								
								
									
										297
									
								
								__tests__/lynxTitanNamePage.html
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										297
									
								
								__tests__/lynxTitanNamePage.html
									
									
									
									
										vendored
									
									
								
							| @@ -9,7 +9,7 @@ | |||||||
|   <!--<![endif]--> |   <!--<![endif]--> | ||||||
|   <head> |   <head> | ||||||
|     <link |     <link | ||||||
|       href="https://www.runescape.com/css/rsp777_basic-104.css" |       href="https://www.runescape.com/a=135/css/rsp777_basic-104.css" | ||||||
|       rel="stylesheet" |       rel="stylesheet" | ||||||
|       type="text/css" |       type="text/css" | ||||||
|       media="all" |       media="all" | ||||||
| @@ -51,7 +51,7 @@ | |||||||
|       data-blockingmode="auto" |       data-blockingmode="auto" | ||||||
|     ></script> |     ></script> | ||||||
|     <script |     <script | ||||||
|       src="https://www.runescape.com/js/c/responsive/vendor-151.js" |       src="https://www.runescape.com/a=135/js/c/responsive/vendor-151.js" | ||||||
|       data-cookieconsent="ignore" |       data-cookieconsent="ignore" | ||||||
|     ></script> |     ></script> | ||||||
|     <title>Old School Hiscores</title> |     <title>Old School Hiscores</title> | ||||||
| @@ -86,7 +86,7 @@ | |||||||
|       property="og:image" |       property="og:image" | ||||||
|       content="https://www.runescape.com/img/rsp777/social-share-fb.jpg?1" |       content="https://www.runescape.com/img/rsp777/social-share-fb.jpg?1" | ||||||
|     /> |     /> | ||||||
|     <meta property="og:url" content="https://www.runescape.com" /> |     <meta property="og:url" content="https://www.runescape.com/a=135" /> | ||||||
|     <meta |     <meta | ||||||
|       property="og:description" |       property="og:description" | ||||||
|       content="If you're a RuneScape veteran hungry for nostalgia, get stuck right in to Old School RuneScape. Sign up for membership and re-live the adventure." |       content="If you're a RuneScape veteran hungry for nostalgia, get stuck right in to Old School RuneScape. Sign up for membership and re-live the adventure." | ||||||
| @@ -102,7 +102,7 @@ | |||||||
|     /> |     /> | ||||||
|     <meta name="twitter:card" content="summary_large_image" /> |     <meta name="twitter:card" content="summary_large_image" /> | ||||||
|     <meta name="twitter:domain" content="Oldschool.RuneScape.com" /> |     <meta name="twitter:domain" content="Oldschool.RuneScape.com" /> | ||||||
|     <meta name="twitter:url" content="https://www.runescape.com" /> |     <meta name="twitter:url" content="https://www.runescape.com/a=135" /> | ||||||
|     <meta name="twitter:title" content="Old School  Hiscores" /> |     <meta name="twitter:title" content="Old School  Hiscores" /> | ||||||
|     <meta |     <meta | ||||||
|       name="twitter:description" |       name="twitter:description" | ||||||
| @@ -118,7 +118,7 @@ | |||||||
|       content="pUwl5KYHKSZ6tbbgsR2wYNv1kbVmsYral3iFmijHTWM" |       content="pUwl5KYHKSZ6tbbgsR2wYNv1kbVmsYral3iFmijHTWM" | ||||||
|     /> |     /> | ||||||
|     <link |     <link | ||||||
|       href="https://www.runescape.com/css/rsp777_hiscore-108.css" |       href="https://www.runescape.com/a=135/css/rsp777_hiscore-108.css" | ||||||
|       rel="stylesheet" |       rel="stylesheet" | ||||||
|       type="text/css" |       type="text/css" | ||||||
|       media="all" |       media="all" | ||||||
| @@ -136,6 +136,14 @@ | |||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_bountyhunterrogue.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_bountyhunterrogue.png?2'); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       .bountyhunterlegacyhunter:before { | ||||||
|  |         content: url('https://www.runescape.com/img/rsp777/game_icon_bountyhunterlegacyhunter.png?2'); | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .bountyhunterlegacyrogue:before { | ||||||
|  |         content: url('https://www.runescape.com/img/rsp777/game_icon_bountyhunterlegacyrogue.png?2'); | ||||||
|  |       } | ||||||
|  |  | ||||||
|       .cluescrollsall:before { |       .cluescrollsall:before { | ||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_cluescrollsall.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_cluescrollsall.png?2'); | ||||||
|       } |       } | ||||||
| @@ -188,6 +196,10 @@ | |||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_alchemicalhydra.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_alchemicalhydra.png?2'); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       .artio:before { | ||||||
|  |         content: url('https://www.runescape.com/img/rsp777/game_icon_artio.png?2'); | ||||||
|  |       } | ||||||
|  |  | ||||||
|       .barrowschests:before { |       .barrowschests:before { | ||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_barrowschests.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_barrowschests.png?2'); | ||||||
|       } |       } | ||||||
| @@ -200,6 +212,10 @@ | |||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_callisto.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_callisto.png?2'); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       .calvarion:before { | ||||||
|  |         content: url('https://www.runescape.com/img/rsp777/game_icon_calvarion.png?2'); | ||||||
|  |       } | ||||||
|  |  | ||||||
|       .cerberus:before { |       .cerberus:before { | ||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_cerberus.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_cerberus.png?2'); | ||||||
|       } |       } | ||||||
| @@ -304,6 +320,10 @@ | |||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_obor.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_obor.png?2'); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       .phantommuspah:before { | ||||||
|  |         content: url('https://www.runescape.com/img/rsp777/game_icon_phantommuspah.png?2'); | ||||||
|  |       } | ||||||
|  |  | ||||||
|       .sarachnis:before { |       .sarachnis:before { | ||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_sarachnis.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_sarachnis.png?2'); | ||||||
|       } |       } | ||||||
| @@ -316,6 +336,10 @@ | |||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_skotizo.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_skotizo.png?2'); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       .spindel:before { | ||||||
|  |         content: url('https://www.runescape.com/img/rsp777/game_icon_spindel.png?2'); | ||||||
|  |       } | ||||||
|  |  | ||||||
|       .tempoross:before { |       .tempoross:before { | ||||||
|         content: url('https://www.runescape.com/img/rsp777/game_icon_tempoross.png?2'); |         content: url('https://www.runescape.com/img/rsp777/game_icon_tempoross.png?2'); | ||||||
|       } |       } | ||||||
| @@ -387,7 +411,7 @@ | |||||||
|         <span style="float: right" |         <span style="float: right" | ||||||
|           ><a |           ><a | ||||||
|             id="loginLink" |             id="loginLink" | ||||||
|             href="https://secure.runescape.com/m=weblogin/loginform?theme=oldschool&mod=hiscore_oldschool&ssl=1&dest=overall.ws?table=0&user=lYnX%20tiTAn" |             href="https://secure.runescape.com/m=weblogin/a=135/loginform?theme=oldschool&mod=hiscore_oldschool&ssl=1&dest=overall.ws?table=0&user=lynx%20titan" | ||||||
|             >Log in</a |             >Log in</a | ||||||
|           ></span |           ></span | ||||||
|         > |         > | ||||||
| @@ -396,7 +420,7 @@ | |||||||
|       <div class="hiscoretitlebground"> |       <div class="hiscoretitlebground"> | ||||||
|         <div class="hiscoretitleframe"> |         <div class="hiscoretitleframe"> | ||||||
|           <strong>Old School Hiscores</strong><br /> |           <strong>Old School Hiscores</strong><br /> | ||||||
|           <a href="https://oldschool.runescape.com/">Home</a> |           <a href="https://oldschool.runescape.com/a=135/">Home</a> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|       <br /> |       <br /> | ||||||
| @@ -412,17 +436,17 @@ | |||||||
|             <div class="ironman-nav__submenu"> |             <div class="ironman-nav__submenu"> | ||||||
|               <a |               <a | ||||||
|                 class="ironman-nav__option" |                 class="ironman-nav__option" | ||||||
|                 href="https://secure.runescape.com/m=hiscore_oldschool_ironman/" |                 href="https://secure.runescape.com/m=hiscore_oldschool_ironman/a=135/" | ||||||
|                 >Ironman</a |                 >Ironman</a | ||||||
|               > |               > | ||||||
|               <a |               <a | ||||||
|                 class="ironman-nav__option" |                 class="ironman-nav__option" | ||||||
|                 href="https://secure.runescape.com/m=hiscore_oldschool_ultimate/" |                 href="https://secure.runescape.com/m=hiscore_oldschool_ultimate/a=135/" | ||||||
|                 >Ultimate Ironman</a |                 >Ultimate Ironman</a | ||||||
|               > |               > | ||||||
|               <a |               <a | ||||||
|                 class="ironman-nav__option" |                 class="ironman-nav__option" | ||||||
|                 href="https://secure.runescape.com/m=hiscore_oldschool_hardcore_ironman/" |                 href="https://secure.runescape.com/m=hiscore_oldschool_hardcore_ironman/a=135/" | ||||||
|                 >Hardcore Ironman</a |                 >Hardcore Ironman</a | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
| @@ -434,17 +458,17 @@ | |||||||
|             <div class="ironman-nav__submenu"> |             <div class="ironman-nav__submenu"> | ||||||
|               <a |               <a | ||||||
|                 class="ironman-nav__option" |                 class="ironman-nav__option" | ||||||
|                 href="https://secure.runescape.com/m=hiscore_oldschool_deadman/" |                 href="https://secure.runescape.com/m=hiscore_oldschool_deadman/a=135/" | ||||||
|                 >Deadman Mode</a |                 >Deadman Mode</a | ||||||
|               > |               > | ||||||
|               <a |               <a | ||||||
|                 class="ironman-nav__option" |                 class="ironman-nav__option" | ||||||
|                 href="https://secure.runescape.com/m=hiscore_oldschool_seasonal/" |                 href="https://secure.runescape.com/m=hiscore_oldschool_seasonal/a=135/" | ||||||
|                 >Leagues</a |                 >Leagues</a | ||||||
|               > |               > | ||||||
|               <a |               <a | ||||||
|                 class="ironman-nav__option" |                 class="ironman-nav__option" | ||||||
|                 href="https://secure.runescape.com/m=hiscore_oldschool_tournament/" |                 href="https://secure.runescape.com/m=hiscore_oldschool_tournament/a=135/" | ||||||
|                 >Tournament</a |                 >Tournament</a | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
| @@ -456,12 +480,12 @@ | |||||||
|             <div class="ironman-nav__submenu"> |             <div class="ironman-nav__submenu"> | ||||||
|               <a |               <a | ||||||
|                 class="ironman-nav__option" |                 class="ironman-nav__option" | ||||||
|                 href="https://secure.runescape.com/m=hiscore_oldschool_ironman/group-ironman/" |                 href="https://secure.runescape.com/m=hiscore_oldschool_ironman/a=135/group-ironman/" | ||||||
|                 >Group Ironman</a |                 >Group Ironman</a | ||||||
|               > |               > | ||||||
|               <a |               <a | ||||||
|                 class="ironman-nav__option" |                 class="ironman-nav__option" | ||||||
|                 href="https://secure.runescape.com/m=hiscore_oldschool_hardcore_ironman/group-ironman/" |                 href="https://secure.runescape.com/m=hiscore_oldschool_hardcore_ironman/a=135/group-ironman/" | ||||||
|                 >Hardcore Group Ironman</a |                 >Hardcore Group Ironman</a | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
| @@ -469,11 +493,28 @@ | |||||||
|           <div class="ironman-nav__group"> |           <div class="ironman-nav__group"> | ||||||
|             <a |             <a | ||||||
|               class="ironman-nav__option" |               class="ironman-nav__option" | ||||||
|               href="https://secure.runescape.com/m=hiscore_oldschool_fresh_start/" |               href="https://secure.runescape.com/m=hiscore_oldschool_fresh_start/a=135/" | ||||||
|             > |             > | ||||||
|               Fresh Start Worlds |               Fresh Start Worlds | ||||||
|             </a> |             </a> | ||||||
|           </div> |           </div> | ||||||
|  |           <div class="ironman-nav__group"> | ||||||
|  |             <a class="ironman-nav__option ironman-nav__option--parent"> | ||||||
|  |               Account Builds | ||||||
|  |             </a> | ||||||
|  |             <div class="ironman-nav__submenu"> | ||||||
|  |               <a | ||||||
|  |                 class="ironman-nav__option" | ||||||
|  |                 href="https://secure.runescape.com/m=hiscore_oldschool_skiller/a=135/" | ||||||
|  |                 >Skillers</a | ||||||
|  |               > | ||||||
|  |               <a | ||||||
|  |                 class="ironman-nav__option" | ||||||
|  |                 href="https://secure.runescape.com/m=hiscore_oldschool_skiller_defence/a=135/" | ||||||
|  |                 >1 Defence</a | ||||||
|  |               > | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="personal-hiscores"> |         <div class="personal-hiscores"> | ||||||
|           <nav class="personal-hiscores__side-banner"> |           <nav class="personal-hiscores__side-banner"> | ||||||
| @@ -486,393 +527,423 @@ | |||||||
|                 >Up</a |                 >Up</a | ||||||
|               > |               > | ||||||
|               <div id="contentCategory"> |               <div id="contentCategory"> | ||||||
|                 <a href="overall?table=0&user=lYnX tiTAn" class="Overall"> |                 <a href="overall?table=0&user=lynx titan" class="Overall"> | ||||||
|                   Overall |                   Overall | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=1&user=lYnX tiTAn" class="Attack"> |                 <a href="overall?table=1&user=lynx titan" class="Attack"> | ||||||
|                   Attack |                   Attack | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=2&user=lYnX tiTAn" class="Defence"> |                 <a href="overall?table=2&user=lynx titan" class="Defence"> | ||||||
|                   Defence |                   Defence | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=3&user=lYnX tiTAn" class="Strength"> |                 <a href="overall?table=3&user=lynx titan" class="Strength"> | ||||||
|                   Strength |                   Strength | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=4&user=lYnX tiTAn" class="Hitpoints"> |                 <a href="overall?table=4&user=lynx titan" class="Hitpoints"> | ||||||
|                   Hitpoints |                   Hitpoints | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=5&user=lYnX tiTAn" class="Ranged"> |                 <a href="overall?table=5&user=lynx titan" class="Ranged"> | ||||||
|                   Ranged |                   Ranged | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=6&user=lYnX tiTAn" class="Prayer"> |                 <a href="overall?table=6&user=lynx titan" class="Prayer"> | ||||||
|                   Prayer |                   Prayer | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=7&user=lYnX tiTAn" class="Magic"> |                 <a href="overall?table=7&user=lynx titan" class="Magic"> | ||||||
|                   Magic |                   Magic | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=8&user=lYnX tiTAn" class="Cooking"> |                 <a href="overall?table=8&user=lynx titan" class="Cooking"> | ||||||
|                   Cooking |                   Cooking | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=9&user=lYnX tiTAn" class="Woodcutting"> |                 <a href="overall?table=9&user=lynx titan" class="Woodcutting"> | ||||||
|                   Woodcutting |                   Woodcutting | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=10&user=lYnX tiTAn" class="Fletching"> |                 <a href="overall?table=10&user=lynx titan" class="Fletching"> | ||||||
|                   Fletching |                   Fletching | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=11&user=lYnX tiTAn" class="Fishing"> |                 <a href="overall?table=11&user=lynx titan" class="Fishing"> | ||||||
|                   Fishing |                   Fishing | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=12&user=lYnX tiTAn" class="Firemaking"> |                 <a href="overall?table=12&user=lynx titan" class="Firemaking"> | ||||||
|                   Firemaking |                   Firemaking | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=13&user=lYnX tiTAn" class="Crafting"> |                 <a href="overall?table=13&user=lynx titan" class="Crafting"> | ||||||
|                   Crafting |                   Crafting | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=14&user=lYnX tiTAn" class="Smithing"> |                 <a href="overall?table=14&user=lynx titan" class="Smithing"> | ||||||
|                   Smithing |                   Smithing | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=15&user=lYnX tiTAn" class="Mining"> |                 <a href="overall?table=15&user=lynx titan" class="Mining"> | ||||||
|                   Mining |                   Mining | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=16&user=lYnX tiTAn" class="Herblore"> |                 <a href="overall?table=16&user=lynx titan" class="Herblore"> | ||||||
|                   Herblore |                   Herblore | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=17&user=lYnX tiTAn" class="Agility"> |                 <a href="overall?table=17&user=lynx titan" class="Agility"> | ||||||
|                   Agility |                   Agility | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=18&user=lYnX tiTAn" class="Thieving"> |                 <a href="overall?table=18&user=lynx titan" class="Thieving"> | ||||||
|                   Thieving |                   Thieving | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=19&user=lYnX tiTAn" class="Slayer"> |                 <a href="overall?table=19&user=lynx titan" class="Slayer"> | ||||||
|                   Slayer |                   Slayer | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=20&user=lYnX tiTAn" class="Farming"> |                 <a href="overall?table=20&user=lynx titan" class="Farming"> | ||||||
|                   Farming |                   Farming | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=21&user=lYnX tiTAn" class="Runecraft"> |                 <a href="overall?table=21&user=lynx titan" class="Runecraft"> | ||||||
|                   Runecraft |                   Runecraft | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=22&user=lYnX tiTAn" class="Hunter"> |                 <a href="overall?table=22&user=lynx titan" class="Hunter"> | ||||||
|                   Hunter |                   Hunter | ||||||
|                 </a> |                 </a> | ||||||
|                 <a href="overall?table=23&user=lYnX tiTAn" class="Construction"> |                 <a href="overall?table=23&user=lynx titan" class="Construction"> | ||||||
|                   Construction |                   Construction | ||||||
|                 </a> |                 </a> | ||||||
|                 <span style="color: #d9c27e; display: block; text-align: center" |                 <span style="color: #d9c27e; display: block; text-align: center" | ||||||
|                   >----</span |                   >----</span | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=1&user=lYnX tiTAn" |                   href="overall?category_type=1&table=1&user=lynx titan" | ||||||
|                   class="activity-link bountyhunterhunter" |                   class="activity-link bountyhunterhunter" | ||||||
|                   >Bounty Hunter - Hunter</a |                   >Bounty Hunter - Hunter</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=2&user=lYnX tiTAn" |                   href="overall?category_type=1&table=2&user=lynx titan" | ||||||
|                   class="activity-link bountyhunterrogue" |                   class="activity-link bountyhunterrogue" | ||||||
|                   >Bounty Hunter - Rogue</a |                   >Bounty Hunter - Rogue</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=3&user=lYnX tiTAn" |                   href="overall?category_type=1&table=3&user=lynx titan" | ||||||
|  |                   class="activity-link bountyhunterlegacyhunter" | ||||||
|  |                   >Bounty Hunter (Legacy) - Hunter</a | ||||||
|  |                 > | ||||||
|  |                 <a | ||||||
|  |                   href="overall?category_type=1&table=4&user=lynx titan" | ||||||
|  |                   class="activity-link bountyhunterlegacyrogue" | ||||||
|  |                   >Bounty Hunter (Legacy) - Rogue</a | ||||||
|  |                 > | ||||||
|  |                 <a | ||||||
|  |                   href="overall?category_type=1&table=5&user=lynx titan" | ||||||
|                   class="activity-link cluescrollsall" |                   class="activity-link cluescrollsall" | ||||||
|                   >Clue Scrolls (all)</a |                   >Clue Scrolls (all)</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=4&user=lYnX tiTAn" |                   href="overall?category_type=1&table=6&user=lynx titan" | ||||||
|                   class="activity-link cluescrollsbeginner" |                   class="activity-link cluescrollsbeginner" | ||||||
|                   >Clue Scrolls (beginner)</a |                   >Clue Scrolls (beginner)</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=5&user=lYnX tiTAn" |                   href="overall?category_type=1&table=7&user=lynx titan" | ||||||
|                   class="activity-link cluescrollseasy" |                   class="activity-link cluescrollseasy" | ||||||
|                   >Clue Scrolls (easy)</a |                   >Clue Scrolls (easy)</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=6&user=lYnX tiTAn" |                   href="overall?category_type=1&table=8&user=lynx titan" | ||||||
|                   class="activity-link cluescrollsmedium" |                   class="activity-link cluescrollsmedium" | ||||||
|                   >Clue Scrolls (medium)</a |                   >Clue Scrolls (medium)</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=7&user=lYnX tiTAn" |                   href="overall?category_type=1&table=9&user=lynx titan" | ||||||
|                   class="activity-link cluescrollshard" |                   class="activity-link cluescrollshard" | ||||||
|                   >Clue Scrolls (hard)</a |                   >Clue Scrolls (hard)</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=8&user=lYnX tiTAn" |                   href="overall?category_type=1&table=10&user=lynx titan" | ||||||
|                   class="activity-link cluescrollselite" |                   class="activity-link cluescrollselite" | ||||||
|                   >Clue Scrolls (elite)</a |                   >Clue Scrolls (elite)</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=9&user=lYnX tiTAn" |                   href="overall?category_type=1&table=11&user=lynx titan" | ||||||
|                   class="activity-link cluescrollsmaster" |                   class="activity-link cluescrollsmaster" | ||||||
|                   >Clue Scrolls (master)</a |                   >Clue Scrolls (master)</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=10&user=lYnX tiTAn" |                   href="overall?category_type=1&table=12&user=lynx titan" | ||||||
|                   class="activity-link lmsrank" |                   class="activity-link lmsrank" | ||||||
|                   >LMS - Rank</a |                   >LMS - Rank</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=11&user=lYnX tiTAn" |                   href="overall?category_type=1&table=13&user=lynx titan" | ||||||
|                   class="activity-link pvparenarank" |                   class="activity-link pvparenarank" | ||||||
|                   >PvP Arena - Rank</a |                   >PvP Arena - Rank</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=12&user=lYnX tiTAn" |                   href="overall?category_type=1&table=14&user=lynx titan" | ||||||
|                   class="activity-link soulwarszeal" |                   class="activity-link soulwarszeal" | ||||||
|                   >Soul Wars Zeal</a |                   >Soul Wars Zeal</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=13&user=lYnX tiTAn" |                   href="overall?category_type=1&table=15&user=lynx titan" | ||||||
|                   class="activity-link riftsclosed" |                   class="activity-link riftsclosed" | ||||||
|                   >Rifts closed</a |                   >Rifts closed</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=14&user=lYnX tiTAn" |                   href="overall?category_type=1&table=16&user=lynx titan" | ||||||
|                   class="activity-link abyssalsire" |                   class="activity-link abyssalsire" | ||||||
|                   >Abyssal Sire</a |                   >Abyssal Sire</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=15&user=lYnX tiTAn" |                   href="overall?category_type=1&table=17&user=lynx titan" | ||||||
|                   class="activity-link alchemicalhydra" |                   class="activity-link alchemicalhydra" | ||||||
|                   >Alchemical Hydra</a |                   >Alchemical Hydra</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=16&user=lYnX tiTAn" |                   href="overall?category_type=1&table=18&user=lynx titan" | ||||||
|  |                   class="activity-link artio" | ||||||
|  |                   >Artio</a | ||||||
|  |                 > | ||||||
|  |                 <a | ||||||
|  |                   href="overall?category_type=1&table=19&user=lynx titan" | ||||||
|                   class="activity-link barrowschests" |                   class="activity-link barrowschests" | ||||||
|                   >Barrows Chests</a |                   >Barrows Chests</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=17&user=lYnX tiTAn" |                   href="overall?category_type=1&table=20&user=lynx titan" | ||||||
|                   class="activity-link bryophyta" |                   class="activity-link bryophyta" | ||||||
|                   >Bryophyta</a |                   >Bryophyta</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=18&user=lYnX tiTAn" |                   href="overall?category_type=1&table=21&user=lynx titan" | ||||||
|                   class="activity-link callisto" |                   class="activity-link callisto" | ||||||
|                   >Callisto</a |                   >Callisto</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=19&user=lYnX tiTAn" |                   href="overall?category_type=1&table=22&user=lynx titan" | ||||||
|  |                   class="activity-link calvarion" | ||||||
|  |                   >Calvar'ion</a | ||||||
|  |                 > | ||||||
|  |                 <a | ||||||
|  |                   href="overall?category_type=1&table=23&user=lynx titan" | ||||||
|                   class="activity-link cerberus" |                   class="activity-link cerberus" | ||||||
|                   >Cerberus</a |                   >Cerberus</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=20&user=lYnX tiTAn" |                   href="overall?category_type=1&table=24&user=lynx titan" | ||||||
|                   class="activity-link chambersofxeric" |                   class="activity-link chambersofxeric" | ||||||
|                   >Chambers of Xeric</a |                   >Chambers of Xeric</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=21&user=lYnX tiTAn" |                   href="overall?category_type=1&table=25&user=lynx titan" | ||||||
|                   class="activity-link chambersofxericchallengemode" |                   class="activity-link chambersofxericchallengemode" | ||||||
|                   >Chambers of Xeric: Challenge Mode</a |                   >Chambers of Xeric: Challenge Mode</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=22&user=lYnX tiTAn" |                   href="overall?category_type=1&table=26&user=lynx titan" | ||||||
|                   class="activity-link chaoselemental" |                   class="activity-link chaoselemental" | ||||||
|                   >Chaos Elemental</a |                   >Chaos Elemental</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=23&user=lYnX tiTAn" |                   href="overall?category_type=1&table=27&user=lynx titan" | ||||||
|                   class="activity-link chaosfanatic" |                   class="activity-link chaosfanatic" | ||||||
|                   >Chaos Fanatic</a |                   >Chaos Fanatic</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=24&user=lYnX tiTAn" |                   href="overall?category_type=1&table=28&user=lynx titan" | ||||||
|                   class="activity-link commanderzilyana" |                   class="activity-link commanderzilyana" | ||||||
|                   >Commander Zilyana</a |                   >Commander Zilyana</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=25&user=lYnX tiTAn" |                   href="overall?category_type=1&table=29&user=lynx titan" | ||||||
|                   class="activity-link corporealbeast" |                   class="activity-link corporealbeast" | ||||||
|                   >Corporeal Beast</a |                   >Corporeal Beast</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=26&user=lYnX tiTAn" |                   href="overall?category_type=1&table=30&user=lynx titan" | ||||||
|                   class="activity-link crazyarchaeologist" |                   class="activity-link crazyarchaeologist" | ||||||
|                   >Crazy Archaeologist</a |                   >Crazy Archaeologist</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=27&user=lYnX tiTAn" |                   href="overall?category_type=1&table=31&user=lynx titan" | ||||||
|                   class="activity-link dagannothprime" |                   class="activity-link dagannothprime" | ||||||
|                   >Dagannoth Prime</a |                   >Dagannoth Prime</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=28&user=lYnX tiTAn" |                   href="overall?category_type=1&table=32&user=lynx titan" | ||||||
|                   class="activity-link dagannothrex" |                   class="activity-link dagannothrex" | ||||||
|                   >Dagannoth Rex</a |                   >Dagannoth Rex</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=29&user=lYnX tiTAn" |                   href="overall?category_type=1&table=33&user=lynx titan" | ||||||
|                   class="activity-link dagannothsupreme" |                   class="activity-link dagannothsupreme" | ||||||
|                   >Dagannoth Supreme</a |                   >Dagannoth Supreme</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=30&user=lYnX tiTAn" |                   href="overall?category_type=1&table=34&user=lynx titan" | ||||||
|                   class="activity-link derangedarchaeologist" |                   class="activity-link derangedarchaeologist" | ||||||
|                   >Deranged Archaeologist</a |                   >Deranged Archaeologist</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=31&user=lYnX tiTAn" |                   href="overall?category_type=1&table=35&user=lynx titan" | ||||||
|                   class="activity-link generalgraardor" |                   class="activity-link generalgraardor" | ||||||
|                   >General Graardor</a |                   >General Graardor</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=32&user=lYnX tiTAn" |                   href="overall?category_type=1&table=36&user=lynx titan" | ||||||
|                   class="activity-link giantmole" |                   class="activity-link giantmole" | ||||||
|                   >Giant Mole</a |                   >Giant Mole</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=33&user=lYnX tiTAn" |                   href="overall?category_type=1&table=37&user=lynx titan" | ||||||
|                   class="activity-link grotesqueguardians" |                   class="activity-link grotesqueguardians" | ||||||
|                   >Grotesque Guardians</a |                   >Grotesque Guardians</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=34&user=lYnX tiTAn" |                   href="overall?category_type=1&table=38&user=lynx titan" | ||||||
|                   class="activity-link hespori" |                   class="activity-link hespori" | ||||||
|                   >Hespori</a |                   >Hespori</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=35&user=lYnX tiTAn" |                   href="overall?category_type=1&table=39&user=lynx titan" | ||||||
|                   class="activity-link kalphitequeen" |                   class="activity-link kalphitequeen" | ||||||
|                   >Kalphite Queen</a |                   >Kalphite Queen</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=36&user=lYnX tiTAn" |                   href="overall?category_type=1&table=40&user=lynx titan" | ||||||
|                   class="activity-link kingblackdragon" |                   class="activity-link kingblackdragon" | ||||||
|                   >King Black Dragon</a |                   >King Black Dragon</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=37&user=lYnX tiTAn" |                   href="overall?category_type=1&table=41&user=lynx titan" | ||||||
|                   class="activity-link kraken" |                   class="activity-link kraken" | ||||||
|                   >Kraken</a |                   >Kraken</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=38&user=lYnX tiTAn" |                   href="overall?category_type=1&table=42&user=lynx titan" | ||||||
|                   class="activity-link kreearra" |                   class="activity-link kreearra" | ||||||
|                   >Kree'Arra</a |                   >Kree'Arra</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=39&user=lYnX tiTAn" |                   href="overall?category_type=1&table=43&user=lynx titan" | ||||||
|                   class="activity-link kriltsutsaroth" |                   class="activity-link kriltsutsaroth" | ||||||
|                   >K'ril Tsutsaroth</a |                   >K'ril Tsutsaroth</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=40&user=lYnX tiTAn" |                   href="overall?category_type=1&table=44&user=lynx titan" | ||||||
|                   class="activity-link mimic" |                   class="activity-link mimic" | ||||||
|                   >Mimic</a |                   >Mimic</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=41&user=lYnX tiTAn" |                   href="overall?category_type=1&table=45&user=lynx titan" | ||||||
|                   class="activity-link nex" |                   class="activity-link nex" | ||||||
|                   >Nex</a |                   >Nex</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=42&user=lYnX tiTAn" |                   href="overall?category_type=1&table=46&user=lynx titan" | ||||||
|                   class="activity-link nightmare" |                   class="activity-link nightmare" | ||||||
|                   >Nightmare</a |                   >Nightmare</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=43&user=lYnX tiTAn" |                   href="overall?category_type=1&table=47&user=lynx titan" | ||||||
|                   class="activity-link phosanisnightmare" |                   class="activity-link phosanisnightmare" | ||||||
|                   >Phosani's Nightmare</a |                   >Phosani's Nightmare</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=44&user=lYnX tiTAn" |                   href="overall?category_type=1&table=48&user=lynx titan" | ||||||
|                   class="activity-link obor" |                   class="activity-link obor" | ||||||
|                   >Obor</a |                   >Obor</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=45&user=lYnX tiTAn" |                   href="overall?category_type=1&table=49&user=lynx titan" | ||||||
|  |                   class="activity-link phantommuspah" | ||||||
|  |                   >Phantom Muspah</a | ||||||
|  |                 > | ||||||
|  |                 <a | ||||||
|  |                   href="overall?category_type=1&table=50&user=lynx titan" | ||||||
|                   class="activity-link sarachnis" |                   class="activity-link sarachnis" | ||||||
|                   >Sarachnis</a |                   >Sarachnis</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=46&user=lYnX tiTAn" |                   href="overall?category_type=1&table=51&user=lynx titan" | ||||||
|                   class="activity-link scorpia" |                   class="activity-link scorpia" | ||||||
|                   >Scorpia</a |                   >Scorpia</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=47&user=lYnX tiTAn" |                   href="overall?category_type=1&table=52&user=lynx titan" | ||||||
|                   class="activity-link skotizo" |                   class="activity-link skotizo" | ||||||
|                   >Skotizo</a |                   >Skotizo</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=48&user=lYnX tiTAn" |                   href="overall?category_type=1&table=53&user=lynx titan" | ||||||
|  |                   class="activity-link spindel" | ||||||
|  |                   >Spindel</a | ||||||
|  |                 > | ||||||
|  |                 <a | ||||||
|  |                   href="overall?category_type=1&table=54&user=lynx titan" | ||||||
|                   class="activity-link tempoross" |                   class="activity-link tempoross" | ||||||
|                   >Tempoross</a |                   >Tempoross</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=49&user=lYnX tiTAn" |                   href="overall?category_type=1&table=55&user=lynx titan" | ||||||
|                   class="activity-link thegauntlet" |                   class="activity-link thegauntlet" | ||||||
|                   >The Gauntlet</a |                   >The Gauntlet</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=50&user=lYnX tiTAn" |                   href="overall?category_type=1&table=56&user=lynx titan" | ||||||
|                   class="activity-link thecorruptedgauntlet" |                   class="activity-link thecorruptedgauntlet" | ||||||
|                   >The Corrupted Gauntlet</a |                   >The Corrupted Gauntlet</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=51&user=lYnX tiTAn" |                   href="overall?category_type=1&table=57&user=lynx titan" | ||||||
|                   class="activity-link theatreofblood" |                   class="activity-link theatreofblood" | ||||||
|                   >Theatre of Blood</a |                   >Theatre of Blood</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=52&user=lYnX tiTAn" |                   href="overall?category_type=1&table=58&user=lynx titan" | ||||||
|                   class="activity-link theatreofbloodhardmode" |                   class="activity-link theatreofbloodhardmode" | ||||||
|                   >Theatre of Blood: Hard Mode</a |                   >Theatre of Blood: Hard Mode</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=53&user=lYnX tiTAn" |                   href="overall?category_type=1&table=59&user=lynx titan" | ||||||
|                   class="activity-link thermonuclearsmokedevil" |                   class="activity-link thermonuclearsmokedevil" | ||||||
|                   >Thermonuclear Smoke Devil</a |                   >Thermonuclear Smoke Devil</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=54&user=lYnX tiTAn" |                   href="overall?category_type=1&table=60&user=lynx titan" | ||||||
|                   class="activity-link tombsofamascut" |                   class="activity-link tombsofamascut" | ||||||
|                   >Tombs of Amascut</a |                   >Tombs of Amascut</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=55&user=lYnX tiTAn" |                   href="overall?category_type=1&table=61&user=lynx titan" | ||||||
|                   class="activity-link tombsofamascutexpertmode" |                   class="activity-link tombsofamascutexpertmode" | ||||||
|                   >Tombs of Amascut: Expert Mode</a |                   >Tombs of Amascut: Expert Mode</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=56&user=lYnX tiTAn" |                   href="overall?category_type=1&table=62&user=lynx titan" | ||||||
|                   class="activity-link tzkalzuk" |                   class="activity-link tzkalzuk" | ||||||
|                   >TzKal-Zuk</a |                   >TzKal-Zuk</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=57&user=lYnX tiTAn" |                   href="overall?category_type=1&table=63&user=lynx titan" | ||||||
|                   class="activity-link tztokjad" |                   class="activity-link tztokjad" | ||||||
|                   >TzTok-Jad</a |                   >TzTok-Jad</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=58&user=lYnX tiTAn" |                   href="overall?category_type=1&table=64&user=lynx titan" | ||||||
|                   class="activity-link venenatis" |                   class="activity-link venenatis" | ||||||
|                   >Venenatis</a |                   >Venenatis</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=59&user=lYnX tiTAn" |                   href="overall?category_type=1&table=65&user=lynx titan" | ||||||
|                   class="activity-link vetion" |                   class="activity-link vetion" | ||||||
|                   >Vet'ion</a |                   >Vet'ion</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=60&user=lYnX tiTAn" |                   href="overall?category_type=1&table=66&user=lynx titan" | ||||||
|                   class="activity-link vorkath" |                   class="activity-link vorkath" | ||||||
|                   >Vorkath</a |                   >Vorkath</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=61&user=lYnX tiTAn" |                   href="overall?category_type=1&table=67&user=lynx titan" | ||||||
|                   class="activity-link wintertodt" |                   class="activity-link wintertodt" | ||||||
|                   >Wintertodt</a |                   >Wintertodt</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=62&user=lYnX tiTAn" |                   href="overall?category_type=1&table=68&user=lynx titan" | ||||||
|                   class="activity-link zalcano" |                   class="activity-link zalcano" | ||||||
|                   >Zalcano</a |                   >Zalcano</a | ||||||
|                 > |                 > | ||||||
|                 <a |                 <a | ||||||
|                   href="overall?category_type=1&table=63&user=lYnX tiTAn" |                   href="overall?category_type=1&table=69&user=lynx titan" | ||||||
|                   class="activity-link zulrah" |                   class="activity-link zulrah" | ||||||
|                   >Zulrah</a |                   >Zulrah</a | ||||||
|                 > |                 > | ||||||
| @@ -1190,7 +1261,7 @@ | |||||||
|                 </div> |                 </div> | ||||||
|               </form> |               </form> | ||||||
|               <form |               <form | ||||||
|                 action="https://secure.runescape.com/m=hiscore_oldschool/compare" |                 action="https://secure.runescape.com/m=hiscore_oldschool/a=135/compare" | ||||||
|                 method="post" |                 method="post" | ||||||
|                 class="compareForm" |                 class="compareForm" | ||||||
|               > |               > | ||||||
| @@ -1229,7 +1300,7 @@ | |||||||
|                   yourself to your friends<br /> |                   yourself to your friends<br /> | ||||||
|                 </div> |                 </div> | ||||||
|                 <a |                 <a | ||||||
|                   href="https://secure.runescape.com/m=weblogin/oldschool_login?mod=hiscore_oldschool&ssl=0&dest=hiscorefriends_all" |                   href="https://secure.runescape.com/m=weblogin/a=135/oldschool_login?mod=hiscore_oldschool&ssl=0&dest=hiscorefriends_all" | ||||||
|                   class="linkToFriends" |                   class="linkToFriends" | ||||||
|                   >Click here</a |                   >Click here</a | ||||||
|                 > |                 > | ||||||
| @@ -1246,7 +1317,7 @@ | |||||||
|             alt="Jagex Software" |             alt="Jagex Software" | ||||||
|         /></a> |         /></a> | ||||||
|         <p class="tandc__copy"> |         <p class="tandc__copy"> | ||||||
|           This website and its contents are copyright © 1999 - 2022 Jagex |           This website and its contents are copyright © 1999 - 2023 Jagex | ||||||
|           Ltd, 220 Science Park, Cambridge, CB4 0WA, United Kingdom.<br />Use of |           Ltd, 220 Science Park, Cambridge, CB4 0WA, United Kingdom.<br />Use of | ||||||
|           this website is subject to our |           this website is subject to our | ||||||
|           <a href="https://www.jagex.com/en-GB/terms/terms.ws" target="_blank" |           <a href="https://www.jagex.com/en-GB/terms/terms.ws" target="_blank" | ||||||
| @@ -1269,16 +1340,16 @@ | |||||||
|         <a |         <a | ||||||
|           class="osrsRSS" |           class="osrsRSS" | ||||||
|           target="_BLANK" |           target="_BLANK" | ||||||
|           href="https://secure.runescape.com/m=news/latest_news.rss?oldschool=true" |           href="https://secure.runescape.com/m=news/a=135/latest_news.rss?oldschool=true" | ||||||
|           ><img |           ><img | ||||||
|             src="https://www.runescape.com/img/rsp777/rss.png" |             src="https://www.runescape.com/img/rsp777/rss.png" | ||||||
|             title="OSRS RSS Feed" |             title="OSRS RSS Feed" | ||||||
|             alt="OSRS RSS Feed" |             alt="OSRS RSS Feed" | ||||||
|         /></a> |         /></a> | ||||||
|       </div> |       </div> | ||||||
|       <script src="https://www.runescape.com/js/c/rs3/modernizr_3_0_0_min-100.js"></script> |       <script src="https://www.runescape.com/a=135/js/c/rs3/modernizr_3_0_0_min-100.js"></script> | ||||||
|       <script src="https://www.runescape.com/js/rsp777_basic-105.js"></script> |       <script src="https://www.runescape.com/a=135/js/rsp777_basic-105.js"></script> | ||||||
|       <script src="https://www.runescape.com/js/rsp777_twitter-100.js"></script> |       <script src="https://www.runescape.com/a=135/js/rsp777_twitter-100.js"></script> | ||||||
|  |  | ||||||
|       <script type="text/javascript"> |       <script type="text/javascript"> | ||||||
|         if ($('#fb-root').length == 0) { |         if ($('#fb-root').length == 0) { | ||||||
| @@ -1313,7 +1384,7 @@ | |||||||
|           _target |           _target | ||||||
|         ) { |         ) { | ||||||
|           $.getJSON( |           $.getJSON( | ||||||
|             'https://secure.runescape.com/m=sn-integration/checkLogin.ws?json=?', |             'https://secure.runescape.com/m=sn-integration/a=135/checkLogin.ws?json=?', | ||||||
|             { |             { | ||||||
|               tps: 0, |               tps: 0, | ||||||
|               token: FB.getAuthResponse().accessToken, |               token: FB.getAuthResponse().accessToken, | ||||||
| @@ -1369,7 +1440,7 @@ | |||||||
|       </script> |       </script> | ||||||
|       <script |       <script | ||||||
|         type="text/javascript" |         type="text/javascript" | ||||||
|         src="https://www.runescape.com/js/rs3/plugins-100.js" |         src="https://www.runescape.com/a=135/js/rs3/plugins-100.js" | ||||||
|         data-cookieconsent="ignore" |         data-cookieconsent="ignore" | ||||||
|       ></script> |       ></script> | ||||||
|       <script> |       <script> | ||||||
| @@ -1383,7 +1454,7 @@ | |||||||
|       </script> |       </script> | ||||||
|       <script |       <script | ||||||
|         type="text/javascript" |         type="text/javascript" | ||||||
|         src="https://www.runescape.com/js/osrs/gtm-100.js" |         src="https://www.runescape.com/a=135/js/osrs/gtm-100.js" | ||||||
|         data-cookieconsent="ignore" |         data-cookieconsent="ignore" | ||||||
|       ></script> |       ></script> | ||||||
|     </div> |     </div> | ||||||
|   | |||||||
| @@ -29,6 +29,8 @@ | |||||||
| -1,-1 | -1,-1 | ||||||
| -1,-1 | -1,-1 | ||||||
| -1,-1 | -1,-1 | ||||||
|  | -1,-1 | ||||||
|  | -1,-1 | ||||||
| 347584,22 | 347584,22 | ||||||
| -1,-1 | -1,-1 | ||||||
| -1,-1 | -1,-1 | ||||||
|   | |||||||
| Can't render this file because it has a wrong number of fields in line 25. | 
							
								
								
									
										39
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "osrs-json-hiscores", |   "name": "osrs-json-hiscores", | ||||||
|   "version": "2.13.0", |   "version": "2.14.2", | ||||||
|   "description": "The Old School Runescape API wrapper that does more!", |   "description": "The Old School Runescape API wrapper that does more!", | ||||||
|   "main": "lib/index.js", |   "main": "lib/index.js", | ||||||
|   "types": "lib/index.d.ts", |   "types": "lib/index.d.ts", | ||||||
| @@ -61,7 +61,8 @@ | |||||||
|       "@typescript-eslint" |       "@typescript-eslint" | ||||||
|     ], |     ], | ||||||
|     "extends": [ |     "extends": [ | ||||||
|       "eslint-config-airbnb-typescript", |       "airbnb-base", | ||||||
|  |       "airbnb-typescript/base", | ||||||
|       "prettier" |       "prettier" | ||||||
|     ], |     ], | ||||||
|     "ignorePatterns": [ |     "ignorePatterns": [ | ||||||
| @@ -72,7 +73,8 @@ | |||||||
|     "trailingComma": "none", |     "trailingComma": "none", | ||||||
|     "tabWidth": 2, |     "tabWidth": 2, | ||||||
|     "semi": true, |     "semi": true, | ||||||
|     "singleQuote": true |     "singleQuote": true, | ||||||
|  |     "endOfLine": "auto" | ||||||
|   }, |   }, | ||||||
|   "jest": { |   "jest": { | ||||||
|     "transform": { |     "transform": { | ||||||
| @@ -91,27 +93,24 @@ | |||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "axios": "^0.21.1", |     "axios": "^0.21.1", | ||||||
|     "jsdom": "^16.3.0", |     "jsdom": "^22.1.0", | ||||||
|     "useragent-generator": "^1.1.0" |     "useragent-generator": "^1.1.0" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@types/jest": "^26.0.21", |     "@types/jest": "^29.5.3", | ||||||
|     "@types/jsdom": "^16.2.3", |     "@types/jsdom": "^21.1.1", | ||||||
|     "@typescript-eslint/eslint-plugin": "^4.19.0", |     "@typescript-eslint/eslint-plugin": "^6.0.0", | ||||||
|     "@typescript-eslint/parser": "^4.19.0", |     "@typescript-eslint/parser": "^6.0.0", | ||||||
|     "eslint": "^7.22.0", |     "eslint": "^8.44.0", | ||||||
|     "eslint-config-airbnb-typescript": "^12.3.1", |     "eslint-config-airbnb-typescript": "^17.1.0", | ||||||
|     "eslint-config-prettier": "^8.1.0", |     "eslint-config-prettier": "^8.8.0", | ||||||
|     "eslint-plugin-import": "^2.22.1", |     "eslint-plugin-import": "^2.27.5", | ||||||
|     "eslint-plugin-jsx-a11y": "^6.4.1", |  | ||||||
|     "eslint-plugin-react": "^7.23.1", |  | ||||||
|     "eslint-plugin-react-hooks": "^4.2.0", |  | ||||||
|     "husky": "^5.2.0", |     "husky": "^5.2.0", | ||||||
|     "jest": "^26.6.3", |     "jest": "^29.6.1", | ||||||
|     "lint-staged": "^10.5.4", |     "lint-staged": "^13.2.3", | ||||||
|     "np": "^7.7.0", |     "np": "^7.7.0", | ||||||
|     "prettier": "^2.2.1", |     "prettier": "^3.0.0", | ||||||
|     "ts-jest": "^26.5.4", |     "ts-jest": "^29.1.1", | ||||||
|     "typescript": "^4.2.3" |     "typescript": "^5.1.6" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| import { AxiosResponse } from 'axios'; | import { AxiosRequestConfig, AxiosResponse } from 'axios'; | ||||||
| import { BinaryData, JSDOM } from 'jsdom'; | import { BinaryData, JSDOM } from 'jsdom'; | ||||||
| import { | import { | ||||||
|   Player, |   Player, | ||||||
| @@ -38,15 +38,20 @@ import { | |||||||
|  * Screen scrapes the hiscores to get the formatted rsn of a player. |  * Screen scrapes the hiscores to get the formatted rsn of a player. | ||||||
|  * |  * | ||||||
|  * @param rsn Username of the player. |  * @param rsn Username of the player. | ||||||
|  |  * @param config Optional axios request config object. | ||||||
|  * @returns Formatted version of the rsn. |  * @returns Formatted version of the rsn. | ||||||
|  */ |  */ | ||||||
| export async function getRSNFormat(rsn: string): Promise<string> { | export async function getRSNFormat( | ||||||
|  |   rsn: string, | ||||||
|  |   config?: AxiosRequestConfig | ||||||
|  | ): Promise<string> { | ||||||
|   validateRSN(rsn); |   validateRSN(rsn); | ||||||
|  |  | ||||||
|   const url = getPlayerTableURL('main', rsn); |   const url = getPlayerTableURL('main', rsn); | ||||||
|   try { |   try { | ||||||
|     const response = await httpGet<string | Buffer | BinaryData | undefined>( |     const response = await httpGet<string | Buffer | BinaryData | undefined>( | ||||||
|       url |       url, | ||||||
|  |       config | ||||||
|     ); |     ); | ||||||
|     const dom = new JSDOM(response.data); |     const dom = new JSDOM(response.data); | ||||||
|     const anchor = dom.window.document.querySelector( |     const anchor = dom.window.document.querySelector( | ||||||
| @@ -106,12 +111,8 @@ export function parseStats(csv: string): Stats { | |||||||
|   const [leaguePoints] = activityObjects.splice(0, 1); |   const [leaguePoints] = activityObjects.splice(0, 1); | ||||||
|   const bhObjects = activityObjects.splice(0, BH_MODES.length); |   const bhObjects = activityObjects.splice(0, BH_MODES.length); | ||||||
|   const clueObjects = activityObjects.splice(0, CLUES.length); |   const clueObjects = activityObjects.splice(0, CLUES.length); | ||||||
|   const [ |   const [lastManStanding, pvpArena, soulWarsZeal, riftsClosed] = | ||||||
|     lastManStanding, |     activityObjects.splice(0, 4); | ||||||
|     pvpArena, |  | ||||||
|     soulWarsZeal, |  | ||||||
|     riftsClosed |  | ||||||
|   ] = activityObjects.splice(0, 4); |  | ||||||
|   const bossObjects = activityObjects.splice(0, BOSSES.length); |   const bossObjects = activityObjects.splice(0, BOSSES.length); | ||||||
|  |  | ||||||
|   const skills: Skills = skillObjects.reduce<Skills>((prev, curr, index) => { |   const skills: Skills = skillObjects.reduce<Skills>((prev, curr, index) => { | ||||||
| @@ -174,7 +175,10 @@ export async function getStats( | |||||||
|   ]; |   ]; | ||||||
|   const shouldGetFormattedRsn = options?.shouldGetFormattedRsn ?? true; |   const shouldGetFormattedRsn = options?.shouldGetFormattedRsn ?? true; | ||||||
|  |  | ||||||
|   const mainRes = await httpGet<string>(getStatsURL('main', rsn)); |   const mainRes = await httpGet<string>( | ||||||
|  |     getStatsURL('main', rsn), | ||||||
|  |     options?.axiosConfigs?.main | ||||||
|  |   ); | ||||||
|   if (mainRes.status === 200) { |   if (mainRes.status === 200) { | ||||||
|     const emptyResponse: AxiosResponse<string> = { |     const emptyResponse: AxiosResponse<string> = { | ||||||
|       status: 404, |       status: 404, | ||||||
| @@ -187,10 +191,15 @@ export async function getStats( | |||||||
|       mode: Extract<Gamemode, 'ironman' | 'hardcore' | 'ultimate'> |       mode: Extract<Gamemode, 'ironman' | 'hardcore' | 'ultimate'> | ||||||
|     ): Promise<AxiosResponse<string>> => |     ): Promise<AxiosResponse<string>> => | ||||||
|       otherGamemodes.includes(mode) |       otherGamemodes.includes(mode) | ||||||
|         ? httpGet<string>(getStatsURL(mode, rsn)).catch((err) => err) |         ? httpGet<string>( | ||||||
|  |             getStatsURL(mode, rsn), | ||||||
|  |             options?.axiosConfigs?.[mode] | ||||||
|  |           ).catch((err) => err) | ||||||
|         : emptyResponse; |         : emptyResponse; | ||||||
|     const formattedName = shouldGetFormattedRsn |     const formattedName = shouldGetFormattedRsn | ||||||
|       ? await getRSNFormat(rsn).catch(() => undefined) |       ? await getRSNFormat(rsn, options?.axiosConfigs?.rsn).catch( | ||||||
|  |           () => undefined | ||||||
|  |         ) | ||||||
|       : undefined; |       : undefined; | ||||||
|  |  | ||||||
|     const player: Player = { |     const player: Player = { | ||||||
| @@ -258,17 +267,19 @@ export async function getStats( | |||||||
|  * |  * | ||||||
|  * @param rsn Username of the player. |  * @param rsn Username of the player. | ||||||
|  * @param mode Gamemode to fetch ranks for. |  * @param mode Gamemode to fetch ranks for. | ||||||
|  |  * @param config Optional axios request config object. | ||||||
|  * @returns Stats object. |  * @returns Stats object. | ||||||
|  */ |  */ | ||||||
| export async function getStatsByGamemode( | export async function getStatsByGamemode( | ||||||
|   rsn: string, |   rsn: string, | ||||||
|   mode: Gamemode = 'main' |   mode: Gamemode = 'main', | ||||||
|  |   config?: AxiosRequestConfig | ||||||
| ): Promise<Stats> { | ): Promise<Stats> { | ||||||
|   validateRSN(rsn); |   validateRSN(rsn); | ||||||
|   if (!GAMEMODES.includes(mode)) { |   if (!GAMEMODES.includes(mode)) { | ||||||
|     throw Error('Invalid game mode'); |     throw Error('Invalid game mode'); | ||||||
|   } |   } | ||||||
|   const response = await httpGet<string>(getStatsURL(mode, rsn)); |   const response = await httpGet<string>(getStatsURL(mode, rsn), config); | ||||||
|   if (response.status !== 200) { |   if (response.status !== 200) { | ||||||
|     throw Error('Player not found'); |     throw Error('Player not found'); | ||||||
|   } |   } | ||||||
| @@ -280,7 +291,8 @@ export async function getStatsByGamemode( | |||||||
| export async function getSkillPage( | export async function getSkillPage( | ||||||
|   skill: SkillName, |   skill: SkillName, | ||||||
|   mode: Gamemode = 'main', |   mode: Gamemode = 'main', | ||||||
|   page: number = 1 |   page: number = 1, | ||||||
|  |   config?: AxiosRequestConfig | ||||||
| ): Promise<PlayerSkillRow[]> { | ): Promise<PlayerSkillRow[]> { | ||||||
|   if (!GAMEMODES.includes(mode)) { |   if (!GAMEMODES.includes(mode)) { | ||||||
|     throw Error('Invalid game mode'); |     throw Error('Invalid game mode'); | ||||||
| @@ -291,7 +303,10 @@ export async function getSkillPage( | |||||||
|   } |   } | ||||||
|   const url = getSkillPageURL(mode, skill, page); |   const url = getSkillPageURL(mode, skill, page); | ||||||
|  |  | ||||||
|   const response = await httpGet<string | Buffer | BinaryData | undefined>(url); |   const response = await httpGet<string | Buffer | BinaryData | undefined>( | ||||||
|  |     url, | ||||||
|  |     config | ||||||
|  |   ); | ||||||
|   const dom = new JSDOM(response.data); |   const dom = new JSDOM(response.data); | ||||||
|   const playersHTML = dom.window.document.querySelectorAll( |   const playersHTML = dom.window.document.querySelectorAll( | ||||||
|     '.personal-hiscores__row' |     '.personal-hiscores__row' | ||||||
| @@ -323,12 +338,14 @@ export async function getSkillPage( | |||||||
|  * @param activity Name of the activity or boss to fetch hiscores for. |  * @param activity Name of the activity or boss to fetch hiscores for. | ||||||
|  * @param mode Gamemode to fetch ranks for. |  * @param mode Gamemode to fetch ranks for. | ||||||
|  * @param page Page number. |  * @param page Page number. | ||||||
|  |  * @param config Optional axios request config object. | ||||||
|  * @returns Array of `PlayerActivityRow` objects. |  * @returns Array of `PlayerActivityRow` objects. | ||||||
|  */ |  */ | ||||||
| export async function getActivityPage( | export async function getActivityPage( | ||||||
|   activity: ActivityName, |   activity: ActivityName, | ||||||
|   mode: Gamemode = 'main', |   mode: Gamemode = 'main', | ||||||
|   page: number = 1 |   page: number = 1, | ||||||
|  |   config?: AxiosRequestConfig | ||||||
| ): Promise<PlayerActivityRow[]> { | ): Promise<PlayerActivityRow[]> { | ||||||
|   if (!GAMEMODES.includes(mode)) { |   if (!GAMEMODES.includes(mode)) { | ||||||
|     throw Error('Invalid game mode'); |     throw Error('Invalid game mode'); | ||||||
| @@ -339,7 +356,10 @@ export async function getActivityPage( | |||||||
|   } |   } | ||||||
|   const url = getActivityPageURL(mode, activity, page); |   const url = getActivityPageURL(mode, activity, page); | ||||||
|  |  | ||||||
|   const response = await httpGet<string | Buffer | BinaryData | undefined>(url); |   const response = await httpGet<string | Buffer | BinaryData | undefined>( | ||||||
|  |     url, | ||||||
|  |     config | ||||||
|  |   ); | ||||||
|   const dom = new JSDOM(response.data); |   const dom = new JSDOM(response.data); | ||||||
|   const playersHTML = dom.window.document.querySelectorAll( |   const playersHTML = dom.window.document.querySelectorAll( | ||||||
|     '.personal-hiscores__row' |     '.personal-hiscores__row' | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								src/types.ts
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/types.ts
									
									
									
									
									
								
							| @@ -1,3 +1,5 @@ | |||||||
|  | import { AxiosRequestConfig } from 'axios'; | ||||||
|  |  | ||||||
| export type Gamemode = | export type Gamemode = | ||||||
|   | 'main' |   | 'main' | ||||||
|   | 'ironman' |   | 'ironman' | ||||||
| @@ -60,7 +62,7 @@ export type ClueType = | |||||||
|  |  | ||||||
| export type Clues = { [Type in ClueType]: Activity }; | export type Clues = { [Type in ClueType]: Activity }; | ||||||
|  |  | ||||||
| export type BHType = 'rogue' | 'hunter'; | export type BHType = 'rogue' | 'hunter' | 'rogueV2' | 'hunterV2'; | ||||||
|  |  | ||||||
| export type BH = { [Type in BHType]: Activity }; | export type BH = { [Type in BHType]: Activity }; | ||||||
|  |  | ||||||
| @@ -124,6 +126,8 @@ export type Bosses = { [Type in Boss]: Activity }; | |||||||
|  |  | ||||||
| export type ActivityName = | export type ActivityName = | ||||||
|   | 'leaguePoints' |   | 'leaguePoints' | ||||||
|  |   | 'hunterBHV2' | ||||||
|  |   | 'rogueBHV2' | ||||||
|   | 'hunterBH' |   | 'hunterBH' | ||||||
|   | 'rogueBH' |   | 'rogueBH' | ||||||
|   | 'lastManStanding' |   | 'lastManStanding' | ||||||
| @@ -181,4 +185,13 @@ export interface GetStatsOptions { | |||||||
|    * @defaultvalue `true` |    * @defaultvalue `true` | ||||||
|    */ |    */ | ||||||
|   shouldGetFormattedRsn?: boolean; |   shouldGetFormattedRsn?: boolean; | ||||||
|  |   /** | ||||||
|  |    * Map of configs for each requests that can take place in the `getStats` function. | ||||||
|  |    */ | ||||||
|  |   axiosConfigs?: Partial<Record<Gamemode, AxiosRequestConfig>> & { | ||||||
|  |     /** | ||||||
|  |      * The axios request config object to use for the RSN format request. | ||||||
|  |      */ | ||||||
|  |     rsn?: AxiosRequestConfig; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -62,7 +62,7 @@ export const CLUES: ClueType[] = [ | |||||||
|   'elite', |   'elite', | ||||||
|   'master' |   'master' | ||||||
| ]; | ]; | ||||||
| export const BH_MODES: BHType[] = ['hunter', 'rogue']; | export const BH_MODES: BHType[] = ['hunterV2', 'rogueV2', 'hunter', 'rogue']; | ||||||
| export const GAMEMODES: Gamemode[] = [ | export const GAMEMODES: Gamemode[] = [ | ||||||
|   'main', |   'main', | ||||||
|   'ironman', |   'ironman', | ||||||
| @@ -130,6 +130,8 @@ export const BOSSES: Boss[] = [ | |||||||
| ]; | ]; | ||||||
| export const ACTIVITIES: ActivityName[] = [ | export const ACTIVITIES: ActivityName[] = [ | ||||||
|   'leaguePoints', |   'leaguePoints', | ||||||
|  |   'hunterBHV2', | ||||||
|  |   'rogueBHV2', | ||||||
|   'hunterBH', |   'hunterBH', | ||||||
|   'rogueBH', |   'rogueBH', | ||||||
|   'allClues', |   'allClues', | ||||||
| @@ -157,7 +159,7 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = { | |||||||
|   barrows: 'Barrows Chests', |   barrows: 'Barrows Chests', | ||||||
|   bryophyta: 'Bryophyta', |   bryophyta: 'Bryophyta', | ||||||
|   callisto: 'Callisto', |   callisto: 'Callisto', | ||||||
|   calvarion: "Cal'varion", |   calvarion: "Calvar'ion", | ||||||
|   cerberus: 'Cerberus', |   cerberus: 'Cerberus', | ||||||
|   chambersOfXeric: 'Chambers of Xeric', |   chambersOfXeric: 'Chambers of Xeric', | ||||||
|   chambersOfXericChallengeMode: 'Chambers of Xeric: Challenge Mode', |   chambersOfXericChallengeMode: 'Chambers of Xeric: Challenge Mode', | ||||||
| @@ -257,8 +259,10 @@ export type FormattedBHNames = { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| export const FORMATTED_BH_NAMES: FormattedBHNames = { | export const FORMATTED_BH_NAMES: FormattedBHNames = { | ||||||
|   rogue: 'Bounty Hunter - Rogue', |   rogue: 'Bounty Hunter (Legacy) - Rogue', | ||||||
|   hunter: 'Bounty Hunter - Hunter' |   hunter: 'Bounty Hunter (Legacy) - Hunter', | ||||||
|  |   rogueV2: 'Bounty Hunter - Rogue', | ||||||
|  |   hunterV2: 'Bounty Hunter - Hunter' | ||||||
| }; | }; | ||||||
|  |  | ||||||
| export const FORMATTED_LMS = 'Last Man Standing'; | export const FORMATTED_LMS = 'Last Man Standing'; | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| import axios from 'axios'; | import axios, { AxiosRequestConfig } from 'axios'; | ||||||
| import * as ua from 'useragent-generator'; | import * as ua from 'useragent-generator'; | ||||||
| import { Gamemode, SkillName, ActivityName } from '../types'; | import { Gamemode, SkillName, ActivityName } from '../types'; | ||||||
| import { | import { | ||||||
| @@ -96,12 +96,16 @@ export const rsnFromElement = (el: Element | null) => { | |||||||
|  * @param url URL to run a `GET` request against. |  * @param url URL to run a `GET` request against. | ||||||
|  * @returns Axios response. |  * @returns Axios response. | ||||||
|  */ |  */ | ||||||
| export const httpGet = <Response>(url: string) => | export const httpGet = <Response>( | ||||||
|  |   url: string, | ||||||
|  |   config: AxiosRequestConfig = {} | ||||||
|  | ) => | ||||||
|   axios.get<Response>(url, { |   axios.get<Response>(url, { | ||||||
|     headers: { |     headers: { | ||||||
|       // without User-Agent header requests may be rejected by DDoS protection mechanism |       // without User-Agent header requests may be rejected by DDoS protection mechanism | ||||||
|       'User-Agent': ua.firefox(80) |       'User-Agent': ua.firefox(80) | ||||||
|     } |     }, | ||||||
|  |     ...config | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
| /** | /** | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user