diff --git a/docs/general/changelog.md b/docs/general/changelog.md
index 462618aa..cb104e7b 100644
--- a/docs/general/changelog.md
+++ b/docs/general/changelog.md
@@ -1,5 +1,15 @@
# Changelog
+## 3.1.2
+
+### Fixes
+* Battle Royale Stats
+ * Fixed an issue that caused values like k/d and winrate to be Infinity instead of 0
+* HTTP Ratelimit handling
+ * The HTTP client now properly handles ratelimits on the user search api (`Client#searchProfiles()`)
+
+
+
## 3.1.1
### Fixes
diff --git a/package-lock.json b/package-lock.json
index ffda2948..7c612825 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "fnbr",
- "version": "3.1.1",
+ "version": "3.1.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "fnbr",
- "version": "3.1.1",
+ "version": "3.1.2",
"license": "MIT",
"dependencies": {
"@discordjs/collection": "^1.0.0",
@@ -1268,12 +1268,12 @@
}
},
"node_modules/@types/jest": {
- "version": "28.1.6",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.6.tgz",
- "integrity": "sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==",
+ "version": "28.1.7",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.7.tgz",
+ "integrity": "sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA==",
"dev": true,
"dependencies": {
- "jest-matcher-utils": "^28.0.0",
+ "expect": "^28.0.0",
"pretty-format": "^28.0.0"
}
},
@@ -1290,9 +1290,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "18.6.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
- "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw=="
+ "version": "18.7.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.9.tgz",
+ "integrity": "sha512-0N5Y1XAdcl865nDdjbO0m3T6FdmQ4ijE89/urOHLREyTXbpMWbSafx9y7XIsgWGtwUP2iYTinLyyW3FatAxBLQ=="
},
"node_modules/@types/prettier": {
"version": "2.6.3",
@@ -1335,14 +1335,14 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.0.tgz",
- "integrity": "sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg==",
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz",
+ "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.33.0",
- "@typescript-eslint/type-utils": "5.33.0",
- "@typescript-eslint/utils": "5.33.0",
+ "@typescript-eslint/scope-manager": "5.33.1",
+ "@typescript-eslint/type-utils": "5.33.1",
+ "@typescript-eslint/utils": "5.33.1",
"debug": "^4.3.4",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.2.0",
@@ -1367,15 +1367,62 @@
}
}
},
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
+ "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+ "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
+ "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.33.1",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
"node_modules/@typescript-eslint/parser": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.0.tgz",
- "integrity": "sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w==",
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz",
+ "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.33.0",
- "@typescript-eslint/types": "5.33.0",
- "@typescript-eslint/typescript-estree": "5.33.0",
+ "@typescript-eslint/scope-manager": "5.33.1",
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/typescript-estree": "5.33.1",
"debug": "^4.3.4"
},
"engines": {
@@ -1394,14 +1441,14 @@
}
}
},
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz",
- "integrity": "sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw==",
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
+ "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.33.0",
- "@typescript-eslint/visitor-keys": "5.33.0"
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1411,14 +1458,31 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/type-utils": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.0.tgz",
- "integrity": "sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA==",
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+ "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
+ "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/utils": "5.33.0",
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1",
"debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
"tsutils": "^3.21.0"
},
"engines": {
@@ -1428,20 +1492,21 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependencies": {
- "eslint": "*"
- },
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
- "node_modules/@typescript-eslint/types": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.0.tgz",
- "integrity": "sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw==",
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
+ "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
"dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.33.1",
+ "eslint-visitor-keys": "^3.3.0"
+ },
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -1450,18 +1515,14 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz",
- "integrity": "sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ==",
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz",
+ "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.33.0",
- "@typescript-eslint/visitor-keys": "5.33.0",
+ "@typescript-eslint/utils": "5.33.1",
"debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
"tsutils": "^3.21.0"
},
"engines": {
@@ -1471,6 +1532,9 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
+ "peerDependencies": {
+ "eslint": "*"
+ },
"peerDependenciesMeta": {
"typescript": {
"optional": true
@@ -1478,15 +1542,15 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.0.tgz",
- "integrity": "sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw==",
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz",
+ "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.33.0",
- "@typescript-eslint/types": "5.33.0",
- "@typescript-eslint/typescript-estree": "5.33.0",
+ "@typescript-eslint/scope-manager": "5.33.1",
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/typescript-estree": "5.33.1",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
@@ -1501,13 +1565,70 @@
"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz",
- "integrity": "sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw==",
+ "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
+ "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.33.0",
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+ "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
+ "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
+ "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.33.1",
"eslint-visitor-keys": "^3.3.0"
},
"engines": {
@@ -2246,9 +2367,9 @@
}
},
"node_modules/eslint": {
- "version": "8.21.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz",
- "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==",
+ "version": "8.22.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz",
+ "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==",
"dev": true,
"dependencies": {
"@eslint/eslintrc": "^1.3.0",
@@ -6616,12 +6737,12 @@
}
},
"@types/jest": {
- "version": "28.1.6",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.6.tgz",
- "integrity": "sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==",
+ "version": "28.1.7",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.7.tgz",
+ "integrity": "sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA==",
"dev": true,
"requires": {
- "jest-matcher-utils": "^28.0.0",
+ "expect": "^28.0.0",
"pretty-format": "^28.0.0"
}
},
@@ -6638,9 +6759,9 @@
"dev": true
},
"@types/node": {
- "version": "18.6.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
- "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw=="
+ "version": "18.7.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.9.tgz",
+ "integrity": "sha512-0N5Y1XAdcl865nDdjbO0m3T6FdmQ4ijE89/urOHLREyTXbpMWbSafx9y7XIsgWGtwUP2iYTinLyyW3FatAxBLQ=="
},
"@types/prettier": {
"version": "2.6.3",
@@ -6683,98 +6804,171 @@
"dev": true
},
"@typescript-eslint/eslint-plugin": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.0.tgz",
- "integrity": "sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg==",
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz",
+ "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.33.0",
- "@typescript-eslint/type-utils": "5.33.0",
- "@typescript-eslint/utils": "5.33.0",
+ "@typescript-eslint/scope-manager": "5.33.1",
+ "@typescript-eslint/type-utils": "5.33.1",
+ "@typescript-eslint/utils": "5.33.1",
"debug": "^4.3.4",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.2.0",
"regexpp": "^3.2.0",
"semver": "^7.3.7",
"tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
+ "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+ "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
+ "dev": true
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
+ "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.33.1",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ }
}
},
"@typescript-eslint/parser": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.0.tgz",
- "integrity": "sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w==",
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz",
+ "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.33.0",
- "@typescript-eslint/types": "5.33.0",
- "@typescript-eslint/typescript-estree": "5.33.0",
+ "@typescript-eslint/scope-manager": "5.33.1",
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/typescript-estree": "5.33.1",
"debug": "^4.3.4"
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz",
- "integrity": "sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.33.0",
- "@typescript-eslint/visitor-keys": "5.33.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
+ "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+ "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
+ "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
+ "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.33.1",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ }
}
},
"@typescript-eslint/type-utils": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.0.tgz",
- "integrity": "sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA==",
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz",
+ "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==",
"dev": true,
"requires": {
- "@typescript-eslint/utils": "5.33.0",
+ "@typescript-eslint/utils": "5.33.1",
"debug": "^4.3.4",
"tsutils": "^3.21.0"
}
},
- "@typescript-eslint/types": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.0.tgz",
- "integrity": "sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz",
- "integrity": "sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.33.0",
- "@typescript-eslint/visitor-keys": "5.33.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- }
- },
"@typescript-eslint/utils": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.0.tgz",
- "integrity": "sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw==",
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz",
+ "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.33.0",
- "@typescript-eslint/types": "5.33.0",
- "@typescript-eslint/typescript-estree": "5.33.0",
+ "@typescript-eslint/scope-manager": "5.33.1",
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/typescript-estree": "5.33.1",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz",
- "integrity": "sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.33.0",
- "eslint-visitor-keys": "^3.3.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
+ "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
+ "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
+ "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/visitor-keys": "5.33.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.33.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
+ "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.33.1",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ }
}
},
"acorn": {
@@ -7316,9 +7510,9 @@
"dev": true
},
"eslint": {
- "version": "8.21.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz",
- "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==",
+ "version": "8.22.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz",
+ "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==",
"dev": true,
"requires": {
"@eslint/eslintrc": "^1.3.0",
diff --git a/package.json b/package.json
index 15fadf32..1eb1d03b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "fnbr",
- "version": "3.1.1",
+ "version": "3.1.2",
"description": "A library to interact with Epic Games' Fortnite HTTP and XMPP services",
"main": "dist/index.js",
"types": "dist/index.d.ts",
diff --git a/src/client/HTTP.ts b/src/client/HTTP.ts
index b7caad88..8babef0e 100644
--- a/src/client/HTTP.ts
+++ b/src/client/HTTP.ts
@@ -92,13 +92,17 @@ class HTTP extends Base {
+ `${err.response?.status || '???'} ${err.response?.statusText || '???'}`, 'http');
const errResponse = (err as AxiosError).response;
+ const errResponseData = errResponse?.data as any;
if (errResponse?.status.toString().startsWith('5') && retries < this.client.config.restRetryLimit) {
return this.send(method, url, headers, body, form, responseType, retries + 1);
}
- if (errResponse && (errResponse.status === 429 || (errResponse?.data as any)?.errorCode === 'errors.com.epicgames.common.throttled')) {
- const retryAfter = parseInt(errResponse.headers['Retry-After'] || (errResponse.data as any).messageVars[0], 10);
+ if (errResponse && (errResponse.status === 429 || errResponseData?.errorCode === 'errors.com.epicgames.common.throttled')) {
+ const retryString = errResponse.headers['retry-after']
+ || errResponseData?.messageVars?.[0]
+ || errResponseData?.errorMessage?.match(/(?<=in )\d+(?= second)/)?.[0];
+ const retryAfter = parseInt(retryString, 10);
if (!Number.isNaN(retryAfter)) {
const sleepTimeout = (retryAfter * 1000) + 500;
await new Promise((res) => {
diff --git a/src/structures/Stats.ts b/src/structures/Stats.ts
index 409e1776..4aa03062 100644
--- a/src/structures/Stats.ts
+++ b/src/structures/Stats.ts
@@ -122,12 +122,12 @@ class Stats extends Base {
for (const inputTypes of Object.keys(this.stats)) {
for (const playlistTypeStats of Object.values(this.stats[inputTypes as keyof StatsData]) as StatsPlaylistTypeData[]) {
playlistTypeStats.deaths = playlistTypeStats.matches - playlistTypeStats.wins;
- playlistTypeStats.kd = playlistTypeStats.kills / playlistTypeStats.deaths;
- playlistTypeStats.killsPerMin = playlistTypeStats.kills / playlistTypeStats.minutesPlayed;
- playlistTypeStats.killsPerMatch = playlistTypeStats.kills / playlistTypeStats.matches;
- playlistTypeStats.scorePerMin = playlistTypeStats.score / playlistTypeStats.minutesPlayed;
- playlistTypeStats.scorePerMatch = playlistTypeStats.score / playlistTypeStats.matches;
- playlistTypeStats.winRate = playlistTypeStats.wins / playlistTypeStats.matches;
+ playlistTypeStats.kd = playlistTypeStats.kills / (playlistTypeStats.deaths || 1);
+ playlistTypeStats.killsPerMin = playlistTypeStats.kills / (playlistTypeStats.minutesPlayed || 1);
+ playlistTypeStats.killsPerMatch = playlistTypeStats.kills / (playlistTypeStats.matches || 1);
+ playlistTypeStats.scorePerMin = playlistTypeStats.score / (playlistTypeStats.minutesPlayed || 1);
+ playlistTypeStats.scorePerMatch = playlistTypeStats.score / (playlistTypeStats.matches || 1);
+ playlistTypeStats.winRate = playlistTypeStats.wins / (playlistTypeStats.matches || 1);
}
}
}