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