osrs-json-hiscores 2.16.1 → 2.16.3

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -115,11 +115,12 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
115
115
  | Soul Wars Zeal | `soulWarsZeal` |
116
116
  | Rifts closed | `riftsClosed` |
117
117
 
118
- ### Leagues
118
+ ### Points
119
119
 
120
- | Activity | Param |
121
- | ------------- | :------------: |
122
- | League Points | `leaguePoints` |
120
+ | Activity | Param |
121
+ | -------------- | :-------------: |
122
+ | League Points | `leaguePoints` |
123
+ | Deadman Points | `deadmanPoints` |
123
124
 
124
125
  ### Bosses
125
126
 
package/lib/hiscores.js CHANGED
@@ -48,6 +48,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
48
48
  };
49
49
  Object.defineProperty(exports, "__esModule", { value: true });
50
50
  exports.getActivityPage = exports.getSkillPage = exports.getStatsByGamemode = exports.getStats = exports.parseStats = exports.parseJsonStats = exports.getRSNFormat = exports.getOfficialStats = void 0;
51
+ var axios_1 = require("axios");
51
52
  var jsdom_1 = require("jsdom");
52
53
  var utils_1 = require("./utils");
53
54
  /**
@@ -59,9 +60,10 @@ var utils_1 = require("./utils");
59
60
  * @returns Official JSON stats object.
60
61
  */
61
62
  function getOfficialStats(rsn, mode, config) {
63
+ var _a;
62
64
  if (mode === void 0) { mode = 'main'; }
63
65
  return __awaiter(this, void 0, void 0, function () {
64
- var url, response, _a;
66
+ var url, response, err_1;
65
67
  return __generator(this, function (_b) {
66
68
  switch (_b.label) {
67
69
  case 0:
@@ -75,8 +77,12 @@ function getOfficialStats(rsn, mode, config) {
75
77
  response = _b.sent();
76
78
  return [2 /*return*/, response.data];
77
79
  case 3:
78
- _a = _b.sent();
79
- throw Error(utils_1.PLAYER_NOT_FOUND_ERROR);
80
+ err_1 = _b.sent();
81
+ if (!axios_1.default.isAxiosError(err_1))
82
+ throw err_1;
83
+ if (((_a = err_1.response) === null || _a === void 0 ? void 0 : _a.status) === 404)
84
+ throw new utils_1.PlayerNotFoundError();
85
+ throw new utils_1.HiScoresError();
80
86
  case 4: return [2 /*return*/];
81
87
  }
82
88
  });
@@ -109,10 +115,10 @@ function getRSNFormat(rsn, config) {
109
115
  if (anchor) {
110
116
  return [2 /*return*/, (0, utils_1.rsnFromElement)(anchor)];
111
117
  }
112
- throw Error(utils_1.PLAYER_NOT_FOUND_ERROR);
118
+ throw new utils_1.PlayerNotFoundError();
113
119
  case 3:
114
120
  _a = _b.sent();
115
- throw Error(utils_1.PLAYER_NOT_FOUND_ERROR);
121
+ throw new utils_1.HiScoresError();
116
122
  case 4: return [2 /*return*/];
117
123
  }
118
124
  });
@@ -164,6 +170,7 @@ function parseJsonStats(json) {
164
170
  var clues = reduceActivity(utils_1.CLUES, utils_1.FORMATTED_CLUE_NAMES);
165
171
  var bosses = reduceActivity(utils_1.BOSSES, utils_1.FORMATTED_BOSS_NAMES);
166
172
  var leaguePoints = getActivity(utils_1.FORMATTED_LEAGUE_POINTS);
173
+ var deadmanPoints = getActivity(utils_1.FORMATTED_DEADMAN_POINTS);
167
174
  var lastManStanding = getActivity(utils_1.FORMATTED_LMS);
168
175
  var pvpArena = getActivity(utils_1.FORMATTED_PVP_ARENA);
169
176
  var soulWarsZeal = getActivity(utils_1.FORMATTED_SOUL_WARS);
@@ -171,6 +178,7 @@ function parseJsonStats(json) {
171
178
  var stats = {
172
179
  skills: skills,
173
180
  leaguePoints: leaguePoints,
181
+ deadmanPoints: deadmanPoints,
174
182
  bountyHunter: bountyHunter,
175
183
  lastManStanding: lastManStanding,
176
184
  pvpArena: pvpArena,
@@ -193,9 +201,8 @@ function parseStats(csv) {
193
201
  .split('\n')
194
202
  .filter(function (entry) { return !!entry; })
195
203
  .map(function (stat) { return stat.split(','); });
196
- if (splitCSV.length !==
197
- utils_1.SKILLS.length + utils_1.BH_MODES.length + utils_1.CLUES.length + utils_1.BOSSES.length + 5) {
198
- throw Error(utils_1.INVALID_FORMAT_ERROR);
204
+ if (splitCSV.length !== utils_1.SKILLS.length + utils_1.ACTIVITIES.length) {
205
+ throw new utils_1.InvalidFormatError();
199
206
  }
200
207
  var skillObjects = splitCSV
201
208
  .filter(function (stat) { return stat.length === 3; })
@@ -218,10 +225,10 @@ function parseStats(csv) {
218
225
  };
219
226
  return activity;
220
227
  });
221
- var leaguePoints = activityObjects.splice(0, 1)[0];
228
+ var _a = activityObjects.splice(0, 2), leaguePoints = _a[0], deadmanPoints = _a[1];
222
229
  var bhObjects = activityObjects.splice(0, utils_1.BH_MODES.length);
223
230
  var clueObjects = activityObjects.splice(0, utils_1.CLUES.length);
224
- var _a = activityObjects.splice(0, 4), lastManStanding = _a[0], pvpArena = _a[1], soulWarsZeal = _a[2], riftsClosed = _a[3];
231
+ var _b = activityObjects.splice(0, 4), lastManStanding = _b[0], pvpArena = _b[1], soulWarsZeal = _b[2], riftsClosed = _b[3];
225
232
  var bossObjects = activityObjects.splice(0, utils_1.BOSSES.length);
226
233
  var skills = skillObjects.reduce(function (prev, curr, index) {
227
234
  var newSkills = __assign({}, prev);
@@ -246,6 +253,7 @@ function parseStats(csv) {
246
253
  var stats = {
247
254
  skills: skills,
248
255
  leaguePoints: leaguePoints,
256
+ deadmanPoints: deadmanPoints,
249
257
  bountyHunter: bountyHunter,
250
258
  lastManStanding: lastManStanding,
251
259
  pvpArena: pvpArena,
@@ -269,7 +277,7 @@ exports.parseStats = parseStats;
269
277
  function getStats(rsn, options) {
270
278
  var _a, _b, _c, _d;
271
279
  return __awaiter(this, void 0, void 0, function () {
272
- var otherGamemodes, shouldGetFormattedRsn, mainRes, emptyResponse_1, getModeStats, formattedName, _e, player, ironRes, hcRes, ultRes;
280
+ var otherGamemodes, shouldGetFormattedRsn, main, getModeStats, formattedName, _e, player, iron, hc, ult;
273
281
  var _this = this;
274
282
  return __generator(this, function (_f) {
275
283
  switch (_f.label) {
@@ -281,23 +289,15 @@ function getStats(rsn, options) {
281
289
  'ultimate'
282
290
  ];
283
291
  shouldGetFormattedRsn = (_b = options === null || options === void 0 ? void 0 : options.shouldGetFormattedRsn) !== null && _b !== void 0 ? _b : true;
284
- return [4 /*yield*/, (0, utils_1.httpGet)((0, utils_1.getStatsURL)('main', rsn, true), (_c = options === null || options === void 0 ? void 0 : options.axiosConfigs) === null || _c === void 0 ? void 0 : _c.main)];
292
+ return [4 /*yield*/, getOfficialStats(rsn, 'main', (_c = options === null || options === void 0 ? void 0 : options.axiosConfigs) === null || _c === void 0 ? void 0 : _c.main)];
285
293
  case 1:
286
- mainRes = _f.sent();
287
- if (!(mainRes.status === 200)) return [3 /*break*/, 9];
288
- emptyResponse_1 = {
289
- status: 404,
290
- data: { skills: [], activities: [] },
291
- statusText: '',
292
- headers: {},
293
- config: {}
294
- };
294
+ main = _f.sent();
295
295
  getModeStats = function (mode) { return __awaiter(_this, void 0, void 0, function () {
296
296
  var _a;
297
297
  return __generator(this, function (_b) {
298
298
  return [2 /*return*/, otherGamemodes.includes(mode)
299
- ? (0, utils_1.httpGet)((0, utils_1.getStatsURL)(mode, rsn, true), (_a = options === null || options === void 0 ? void 0 : options.axiosConfigs) === null || _a === void 0 ? void 0 : _a[mode]).catch(function (err) { return err; })
300
- : emptyResponse_1];
299
+ ? getOfficialStats(rsn, mode, (_a = options === null || options === void 0 ? void 0 : options.axiosConfigs) === null || _a === void 0 ? void 0 : _a[mode]).catch(function () { return undefined; })
300
+ : undefined];
301
301
  });
302
302
  }); };
303
303
  if (!shouldGetFormattedRsn) return [3 /*break*/, 3];
@@ -317,21 +317,21 @@ function getStats(rsn, options) {
317
317
  deulted: false,
318
318
  deironed: false
319
319
  };
320
- player.main = parseJsonStats(mainRes.data);
320
+ player.main = parseJsonStats(main);
321
321
  return [4 /*yield*/, getModeStats('ironman')];
322
322
  case 5:
323
- ironRes = _f.sent();
324
- if (!(ironRes.status === 200)) return [3 /*break*/, 8];
325
- player.ironman = parseJsonStats(ironRes.data);
323
+ iron = _f.sent();
324
+ if (!iron) return [3 /*break*/, 8];
325
+ player.ironman = parseJsonStats(iron);
326
326
  return [4 /*yield*/, getModeStats('hardcore')];
327
327
  case 6:
328
- hcRes = _f.sent();
328
+ hc = _f.sent();
329
329
  return [4 /*yield*/, getModeStats('ultimate')];
330
330
  case 7:
331
- ultRes = _f.sent();
332
- if (hcRes.status === 200) {
331
+ ult = _f.sent();
332
+ if (hc) {
333
333
  player.mode = 'hardcore';
334
- player.hardcore = parseJsonStats(hcRes.data);
334
+ player.hardcore = parseJsonStats(hc);
335
335
  if (player.ironman.skills.overall.xp !== player.hardcore.skills.overall.xp) {
336
336
  player.dead = true;
337
337
  player.mode = 'ironman';
@@ -341,9 +341,9 @@ function getStats(rsn, options) {
341
341
  player.mode = 'main';
342
342
  }
343
343
  }
344
- else if (ultRes.status === 200) {
344
+ else if (ult) {
345
345
  player.mode = 'ultimate';
346
- player.ultimate = parseJsonStats(ultRes.data);
346
+ player.ultimate = parseJsonStats(ult);
347
347
  if (player.ironman.skills.overall.xp !== player.ultimate.skills.overall.xp) {
348
348
  player.deulted = true;
349
349
  player.mode = 'ironman';
@@ -362,7 +362,6 @@ function getStats(rsn, options) {
362
362
  }
363
363
  _f.label = 8;
364
364
  case 8: return [2 /*return*/, player];
365
- case 9: throw Error(utils_1.PLAYER_NOT_FOUND_ERROR);
366
365
  }
367
366
  });
368
367
  });
package/lib/types.d.ts CHANGED
@@ -25,11 +25,18 @@ export type Boss = 'abyssalSire' | 'alchemicalHydra' | 'artio' | 'barrows' | 'br
25
25
  export type Bosses = {
26
26
  [Type in Boss]: Activity;
27
27
  };
28
- export type ActivityName = 'leaguePoints' | 'hunterBHV2' | 'rogueBHV2' | 'hunterBH' | 'rogueBH' | 'lastManStanding' | 'pvpArena' | 'soulWarsZeal' | 'riftsClosed' | 'allClues' | 'beginnerClues' | 'easyClues' | 'mediumClues' | 'hardClues' | 'eliteClues' | 'masterClues' | Boss;
28
+ export type ActivityName = 'leaguePoints' | 'deadmanPoints' | 'hunterBHV2' | 'rogueBHV2' | 'hunterBH' | 'rogueBH' | 'lastManStanding' | 'pvpArena' | 'soulWarsZeal' | 'riftsClosed' | 'allClues' | 'beginnerClues' | 'easyClues' | 'mediumClues' | 'hardClues' | 'eliteClues' | 'masterClues' | Boss;
29
29
  export interface Stats {
30
30
  skills: Skills;
31
31
  clues: Clues;
32
+ /**
33
+ * Will only contain rank and score data for the `seasonal` gamemode.
34
+ */
32
35
  leaguePoints: Activity;
36
+ /**
37
+ * Will only contain rank and score data for the `tournament` gamemode.
38
+ */
39
+ deadmanPoints: Activity;
33
40
  bountyHunter: BH;
34
41
  lastManStanding: Activity;
35
42
  pvpArena: Activity;
@@ -33,6 +33,24 @@ export declare const FORMATTED_LMS = "LMS - Rank";
33
33
  export declare const FORMATTED_PVP_ARENA = "PvP Arena - Rank";
34
34
  export declare const FORMATTED_SOUL_WARS = "Soul Wars Zeal";
35
35
  export declare const FORMATTED_LEAGUE_POINTS = "League Points";
36
+ export declare const FORMATTED_DEADMAN_POINTS = "Deadman Points";
36
37
  export declare const FORMATTED_RIFTS_CLOSED = "Rifts closed";
37
38
  export declare const INVALID_FORMAT_ERROR = "Invalid hiscores format";
38
39
  export declare const PLAYER_NOT_FOUND_ERROR = "Player not found";
40
+ export declare const HISCORES_ERROR = "HiScores not responding";
41
+ export declare class InvalidFormatError extends Error {
42
+ __proto__: ErrorConstructor;
43
+ constructor();
44
+ }
45
+ export declare class InvalidRSNError extends Error {
46
+ __proto__: ErrorConstructor;
47
+ constructor(message: string);
48
+ }
49
+ export declare class PlayerNotFoundError extends Error {
50
+ __proto__: ErrorConstructor;
51
+ constructor();
52
+ }
53
+ export declare class HiScoresError extends Error {
54
+ __proto__: ErrorConstructor;
55
+ constructor();
56
+ }
@@ -1,4 +1,19 @@
1
1
  "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
2
17
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
18
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
19
  if (ar || !(i in from)) {
@@ -9,7 +24,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
9
24
  return to.concat(ar || Array.prototype.slice.call(from));
10
25
  };
11
26
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PLAYER_NOT_FOUND_ERROR = exports.INVALID_FORMAT_ERROR = exports.FORMATTED_RIFTS_CLOSED = exports.FORMATTED_LEAGUE_POINTS = exports.FORMATTED_SOUL_WARS = exports.FORMATTED_PVP_ARENA = exports.FORMATTED_LMS = exports.FORMATTED_BH_NAMES = exports.FORMATTED_CLUE_NAMES = exports.FORMATTED_SKILL_NAMES = exports.FORMATTED_BOSS_NAMES = exports.ACTIVITIES = exports.BOSSES = exports.GAMEMODES = exports.BH_MODES = exports.CLUES = exports.SKILLS = exports.GAMEMODE_URL = exports.SCORES_URL = exports.JSON_STATS_URL = exports.STATS_URL = exports.BASE_URL = void 0;
27
+ exports.HiScoresError = exports.PlayerNotFoundError = exports.InvalidRSNError = exports.InvalidFormatError = exports.HISCORES_ERROR = exports.PLAYER_NOT_FOUND_ERROR = exports.INVALID_FORMAT_ERROR = exports.FORMATTED_RIFTS_CLOSED = exports.FORMATTED_DEADMAN_POINTS = exports.FORMATTED_LEAGUE_POINTS = exports.FORMATTED_SOUL_WARS = exports.FORMATTED_PVP_ARENA = exports.FORMATTED_LMS = exports.FORMATTED_BH_NAMES = exports.FORMATTED_CLUE_NAMES = exports.FORMATTED_SKILL_NAMES = exports.FORMATTED_BOSS_NAMES = exports.ACTIVITIES = exports.BOSSES = exports.GAMEMODES = exports.BH_MODES = exports.CLUES = exports.SKILLS = exports.GAMEMODE_URL = exports.SCORES_URL = exports.JSON_STATS_URL = exports.STATS_URL = exports.BASE_URL = void 0;
13
28
  exports.BASE_URL = 'https://secure.runescape.com/m=hiscore_oldschool';
14
29
  exports.STATS_URL = 'index_lite.ws?player=';
15
30
  exports.JSON_STATS_URL = 'index_lite.json?player=';
@@ -133,6 +148,7 @@ exports.BOSSES = [
133
148
  ];
134
149
  exports.ACTIVITIES = __spreadArray([
135
150
  'leaguePoints',
151
+ 'deadmanPoints',
136
152
  'hunterBHV2',
137
153
  'rogueBHV2',
138
154
  'hunterBH',
@@ -254,6 +270,52 @@ exports.FORMATTED_LMS = 'LMS - Rank';
254
270
  exports.FORMATTED_PVP_ARENA = 'PvP Arena - Rank';
255
271
  exports.FORMATTED_SOUL_WARS = 'Soul Wars Zeal';
256
272
  exports.FORMATTED_LEAGUE_POINTS = 'League Points';
273
+ exports.FORMATTED_DEADMAN_POINTS = 'Deadman Points';
257
274
  exports.FORMATTED_RIFTS_CLOSED = 'Rifts closed';
258
275
  exports.INVALID_FORMAT_ERROR = 'Invalid hiscores format';
259
276
  exports.PLAYER_NOT_FOUND_ERROR = 'Player not found';
277
+ exports.HISCORES_ERROR = 'HiScores not responding';
278
+ var InvalidFormatError = /** @class */ (function (_super) {
279
+ __extends(InvalidFormatError, _super);
280
+ function InvalidFormatError() {
281
+ var _this = _super.call(this, exports.INVALID_FORMAT_ERROR) || this;
282
+ _this.__proto__ = Error;
283
+ Object.setPrototypeOf(_this, InvalidFormatError.prototype);
284
+ return _this;
285
+ }
286
+ return InvalidFormatError;
287
+ }(Error));
288
+ exports.InvalidFormatError = InvalidFormatError;
289
+ var InvalidRSNError = /** @class */ (function (_super) {
290
+ __extends(InvalidRSNError, _super);
291
+ function InvalidRSNError(message) {
292
+ var _this = _super.call(this, message) || this;
293
+ _this.__proto__ = Error;
294
+ Object.setPrototypeOf(_this, InvalidRSNError.prototype);
295
+ return _this;
296
+ }
297
+ return InvalidRSNError;
298
+ }(Error));
299
+ exports.InvalidRSNError = InvalidRSNError;
300
+ var PlayerNotFoundError = /** @class */ (function (_super) {
301
+ __extends(PlayerNotFoundError, _super);
302
+ function PlayerNotFoundError() {
303
+ var _this = _super.call(this, exports.PLAYER_NOT_FOUND_ERROR) || this;
304
+ _this.__proto__ = Error;
305
+ Object.setPrototypeOf(_this, PlayerNotFoundError.prototype);
306
+ return _this;
307
+ }
308
+ return PlayerNotFoundError;
309
+ }(Error));
310
+ exports.PlayerNotFoundError = PlayerNotFoundError;
311
+ var HiScoresError = /** @class */ (function (_super) {
312
+ __extends(HiScoresError, _super);
313
+ function HiScoresError() {
314
+ var _this = _super.call(this, exports.HISCORES_ERROR) || this;
315
+ _this.__proto__ = Error;
316
+ Object.setPrototypeOf(_this, HiScoresError.prototype);
317
+ return _this;
318
+ }
319
+ return HiScoresError;
320
+ }(Error));
321
+ exports.HiScoresError = HiScoresError;
@@ -109,13 +109,13 @@ exports.httpGet = httpGet;
109
109
  */
110
110
  var validateRSN = function (rsn) {
111
111
  if (typeof rsn !== 'string') {
112
- throw Error('RSN must be a string');
112
+ throw new constants_1.InvalidRSNError('RSN must be a string');
113
113
  }
114
114
  else if (!/^[a-zA-Z0-9 _-]+$/.test(rsn)) {
115
- throw Error('RSN contains invalid character');
115
+ throw new constants_1.InvalidRSNError('RSN contains invalid character');
116
116
  }
117
117
  else if (rsn.length > 12 || rsn.length < 1) {
118
- throw Error('RSN must be between 1 and 12 characters');
118
+ throw new constants_1.InvalidRSNError('RSN must be between 1 and 12 characters');
119
119
  }
120
120
  };
121
121
  exports.validateRSN = validateRSN;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osrs-json-hiscores",
3
- "version": "2.16.1",
3
+ "version": "2.16.3",
4
4
  "description": "The Old School Runescape API wrapper that does more!",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -67,7 +67,10 @@
67
67
  ],
68
68
  "ignorePatterns": [
69
69
  "**/@types/*"
70
- ]
70
+ ],
71
+ "rules": {
72
+ "max-classes-per-file": "off"
73
+ }
71
74
  },
72
75
  "prettier": {
73
76
  "trailingComma": "none",