diff --git a/package-lock.json b/package-lock.json index 6c7dd64..06c4a46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,6 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "express-rate-limit": "^5.3.0", - "node-fetch": "^2.6.2", "pg": "^8.7.1", "redis": "^3.1.2", "sync-mysql": "^3.0.1" @@ -28,10 +27,8 @@ "@types/express-rate-limit": "^5.1.3", "@types/mocha": "^9.0.0", "@types/node": "^16.9.4", - "@types/node-fetch": "^2.5.12", "@types/pg": "^8.6.1", "@types/redis": "^2.8.32", - "@types/request": "^2.48.7", "@typescript-eslint/eslint-plugin": "^4.31.2", "@typescript-eslint/parser": "^4.31.2", "eslint": "^7.32.0", @@ -399,12 +396,6 @@ "@types/node": "*" } }, - "node_modules/@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, "node_modules/@types/connect": { "version": "3.4.33", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", @@ -480,16 +471,6 @@ "integrity": "sha512-KDazLNYAGIuJugdbULwFZULF9qQ13yNWEBFnfVpqlpgAAo6H/qnM9RjBgh0A0kmHf3XxAKLdN5mTIng9iUvVLA==", "devOptional": true }, - "node_modules/@types/node-fetch": { - "version": "2.5.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", - "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, "node_modules/@types/pg": { "version": "8.6.1", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", @@ -522,32 +503,6 @@ "@types/node": "*" } }, - "node_modules/@types/request": { - "version": "2.48.7", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.7.tgz", - "integrity": "sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA==", - "dev": true, - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, - "node_modules/@types/request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/@types/serve-static": { "version": "1.13.5", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.5.tgz", @@ -558,12 +513,6 @@ "@types/mime": "*" } }, - "node_modules/@types/tough-cookie": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", - "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", - "dev": true - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "4.31.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", @@ -1112,12 +1061,6 @@ "node": ">=8" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "node_modules/axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -1622,18 +1565,6 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1790,15 +1721,6 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -2606,20 +2528,6 @@ } } }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -3858,14 +3766,6 @@ "semver": "^5.4.1" } }, - "node_modules/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, "node_modules/nodemon": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", @@ -6139,12 +6039,6 @@ "@types/node": "*" } }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, "@types/connect": { "version": "3.4.33", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", @@ -6220,16 +6114,6 @@ "integrity": "sha512-KDazLNYAGIuJugdbULwFZULF9qQ13yNWEBFnfVpqlpgAAo6H/qnM9RjBgh0A0kmHf3XxAKLdN5mTIng9iUvVLA==", "devOptional": true }, - "@types/node-fetch": { - "version": "2.5.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", - "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, "@types/pg": { "version": "8.6.1", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", @@ -6262,31 +6146,6 @@ "@types/node": "*" } }, - "@types/request": { - "version": "2.48.7", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.7.tgz", - "integrity": "sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA==", - "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - }, - "dependencies": { - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, "@types/serve-static": { "version": "1.13.5", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.5.tgz", @@ -6297,12 +6156,6 @@ "@types/mime": "*" } }, - "@types/tough-cookie": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", - "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", - "dev": true - }, "@typescript-eslint/eslint-plugin": { "version": "4.31.2", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.2.tgz", @@ -6696,12 +6549,6 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -7099,15 +6946,6 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7239,12 +7077,6 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -7842,17 +7674,6 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -8802,11 +8623,6 @@ "semver": "^5.4.1" } }, - "node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA==" - }, "nodemon": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", diff --git a/package.json b/package.json index a5a7318..9b5cacc 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,6 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "express-rate-limit": "^5.3.0", - "node-fetch": "^2.6.2", "pg": "^8.7.1", "redis": "^3.1.2", "sync-mysql": "^3.0.1" @@ -35,10 +34,8 @@ "@types/express-rate-limit": "^5.1.3", "@types/mocha": "^9.0.0", "@types/node": "^16.9.4", - "@types/node-fetch": "^2.5.12", "@types/pg": "^8.6.1", "@types/redis": "^2.8.32", - "@types/request": "^2.48.7", "@typescript-eslint/eslint-plugin": "^4.31.2", "@typescript-eslint/parser": "^4.31.2", "eslint": "^7.32.0", diff --git a/src/routes/getTotalStats.ts b/src/routes/getTotalStats.ts index 6f7a739..6c6a01d 100644 --- a/src/routes/getTotalStats.ts +++ b/src/routes/getTotalStats.ts @@ -1,7 +1,6 @@ import { db } from "../databases/databases"; import { config } from "../config"; import { Request, Response } from "express"; -import fetch from "node-fetch"; import axios from "axios"; import { Logger } from "../utils/logger"; @@ -55,13 +54,12 @@ function updateExtensionUsers() { const mozillaAddonsUrl = "https://addons.mozilla.org/api/v3/addons/addon/sponsorblock/"; const chromeExtensionUrl = "https://chrome.google.com/webstore/detail/sponsorblock-for-youtube/mnjggcdmjocbbbhaepdhchncahnbgone"; - fetch(mozillaAddonsUrl) - .then(res => res.json() as Record) - .then(data => { - firefoxUsersCache = data.average_daily_users; - fetch(chromeExtensionUrl) - .then(res => res.text()) - .then(body => { + axios.get(mozillaAddonsUrl) + .then(res => { + firefoxUsersCache = res.data.average_daily_users; + axios.get(chromeExtensionUrl) + .then(res => { + const body = res.data; // 2021-01-05 // [...] 1) return; - fetch(config.discordFirstTimeSubmissionsWebhookURL, { - method: "POST", - body: JSON.stringify({ - "embeds": [{ - "title": data?.title, - "url": `https://www.youtube.com/watch?v=${videoID}&t=${(parseInt(startTime.toFixed(0)) - 2)}`, - "description": `Submission ID: ${UUID}\ - \n\nTimestamp: \ - ${getFormattedTime(startTime)} to ${getFormattedTime(endTime)}\ - \n\nCategory: ${segmentInfo.category}`, - "color": 10813440, - "author": { - "name": userID, - }, - "thumbnail": { - "url": getMaxResThumbnail(data) || "", - }, - }], - }), - headers: { - "Content-Type": "application/json" - } + axios.post(config.discordFirstTimeSubmissionsWebhookURL, { + "embeds": [{ + "title": data?.title, + "url": `https://www.youtube.com/watch?v=${videoID}&t=${(parseInt(startTime.toFixed(0)) - 2)}`, + "description": `Submission ID: ${UUID}\ + \n\nTimestamp: \ + ${getFormattedTime(startTime)} to ${getFormattedTime(endTime)}\ + \n\nCategory: ${segmentInfo.category}`, + "color": 10813440, + "author": { + "name": userID, + }, + "thumbnail": { + "url": getMaxResThumbnail(data) || "", + }, + }], }) .then(res => { if (res.status >= 400) { @@ -136,28 +130,22 @@ async function sendWebhooksNB(userID: string, videoID: string, UUID: string, sta // Send discord message if (config.discordNeuralBlockRejectWebhookURL === null) return; - fetch(config.discordNeuralBlockRejectWebhookURL, { - method: "POST", - body: JSON.stringify({ - "embeds": [{ - "title": ytData.items[0].snippet.title, - "url": `https://www.youtube.com/watch?v=${videoID}&t=${(parseFloat(startTime.toFixed(0)) - 2)}`, - "description": `**Submission ID:** ${UUID}\ - \n**Timestamp:** ${getFormattedTime(startTime)} to ${getFormattedTime(endTime)}\ - \n**Predicted Probability:** ${probability}\ - \n**Category:** ${category}\ - \n**Submitted by:** ${submittedBy}\ - \n**Total User Submissions:** ${submissionInfoRow.count}\ - \n**Ignored User Submissions:** ${submissionInfoRow.disregarded}`, - "color": 10813440, - "thumbnail": { - "url": ytData.items[0].snippet.thumbnails.maxres ? ytData.items[0].snippet.thumbnails.maxres.url : "", - }, - }], - }), - headers: { - "Content-Type": "application/json" - } + axios.post(config.discordNeuralBlockRejectWebhookURL, { + "embeds": [{ + "title": ytData.items[0].snippet.title, + "url": `https://www.youtube.com/watch?v=${videoID}&t=${(parseFloat(startTime.toFixed(0)) - 2)}`, + "description": `**Submission ID:** ${UUID}\ + \n**Timestamp:** ${getFormattedTime(startTime)} to ${getFormattedTime(endTime)}\ + \n**Predicted Probability:** ${probability}\ + \n**Category:** ${category}\ + \n**Submitted by:** ${submittedBy}\ + \n**Total User Submissions:** ${submissionInfoRow.count}\ + \n**Ignored User Submissions:** ${submissionInfoRow.disregarded}`, + "color": 10813440, + "thumbnail": { + "url": ytData.items[0].snippet.thumbnails.maxres ? ytData.items[0].snippet.thumbnails.maxres.url : "", + }, + }] }) .then(res => { if (res.status >= 400) { @@ -236,11 +224,11 @@ async function autoModerateSubmission(apiVideoInfo: APIVideoInfo, // Check NeuralBlock const neuralBlockURL = config.neuralBlockURL; if (!neuralBlockURL) return false; - const response = await fetch(`${neuralBlockURL}/api/checkSponsorSegments?vid=${submission.videoID} - &segments=${nbString.substring(0, nbString.length - 1)}`); - if (!response.ok) return false; + const response = await axios.get(`${neuralBlockURL}/api/checkSponsorSegments?vid=${submission.videoID} + &segments=${nbString.substring(0, nbString.length - 1)}`, { validateStatus: () => true }); + if (response.status !== 200) return false; - const nbPredictions = await response.json() as Record; + const nbPredictions = response.data; let nbDecision = false; let predictionIdx = 0; //Keep track because only sponsor categories were submitted for (let i = 0; i < segments.length; i++) { @@ -531,12 +519,9 @@ async function checkRateLimit(userID:string, videoID: VideoID, timeSubmitted: nu } function proxySubmission(req: Request) { - fetch(`${config.proxySubmission}/api/skipSegments?userID=${req.query.userID}&videoID=${req.query.videoID}`, { - method: "POST", - body: req.body, - }) - .then(async res => { - Logger.debug(`Proxy Submission: ${res.status} (${(await res.text())})`); + axios.post(`${config.proxySubmission}/api/skipSegments?userID=${req.query.userID}&videoID=${req.query.videoID}`, req.body) + .then(res => { + Logger.debug(`Proxy Submission: ${res.status} (${res.data})`); }) .catch(() => { Logger.error("Proxy Submission: Failed to make call"); diff --git a/src/routes/voteOnSponsorTime.ts b/src/routes/voteOnSponsorTime.ts index fae4425..c3783b5 100644 --- a/src/routes/voteOnSponsorTime.ts +++ b/src/routes/voteOnSponsorTime.ts @@ -1,7 +1,6 @@ import { Request, Response } from "express"; import { Logger } from "../utils/logger"; import { isUserVIP } from "../utils/isUserVIP"; -import fetch from "node-fetch"; import { getMaxResThumbnail, YouTubeAPI } from "../utils/youtubeApi"; import { db, privateDB } from "../databases/databases"; import { dispatchEvent, getVoteAuthor, getVoteAuthorRaw } from "../utils/webhookUtils"; @@ -13,6 +12,7 @@ import { UserID } from "../types/user.model"; import { Category, CategoryActionType, HashedIP, IPAddress, SegmentUUID, Service, VideoID, VideoIDHash, Visibility } from "../types/segments.model"; import { getCategoryActionType } from "../utils/categoryInfo"; import { QueryCacher } from "../utils/queryCacher"; +import axios from "axios"; const voteTypes = { normal: 0, @@ -111,40 +111,34 @@ async function sendWebhooks(voteData: VoteData) { // Send discord message if (webhookURL !== null && !isUpvote) { - fetch(webhookURL, { - method: "POST", - body: JSON.stringify({ - "embeds": [{ - "title": data?.title, - "url": `https://www.youtube.com/watch?v=${submissionInfoRow.videoID}&t=${(submissionInfoRow.startTime.toFixed(0) - 2)}`, - "description": `**${voteData.row.votes} Votes Prior | \ - ${(voteData.row.votes + voteData.incrementAmount - voteData.oldIncrementAmount)} Votes Now | ${voteData.row.views} \ - Views**\n\n**Submission ID:** ${voteData.UUID}\ - \n**Category:** ${submissionInfoRow.category}\ - \n\n**Submitted by:** ${submissionInfoRow.userName}\n${submissionInfoRow.userID}\ - \n\n**Total User Submissions:** ${submissionInfoRow.count}\ - \n**Ignored User Submissions:** ${submissionInfoRow.disregarded}\ - \n\n**Timestamp:** \ - ${getFormattedTime(submissionInfoRow.startTime)} to ${getFormattedTime(submissionInfoRow.endTime)}`, - "color": 10813440, - "author": { - "name": voteData.finalResponse?.webhookMessage ?? - voteData.finalResponse?.finalMessage ?? - getVoteAuthor(userSubmissionCountRow.submissionCount, voteData.isVIP, voteData.isOwnSubmission), - }, - "thumbnail": { - "url": getMaxResThumbnail(data) || "", - }, - }], - }), - headers: { - "Content-Type": "application/json" - } + axios.post(webhookURL, { + "embeds": [{ + "title": data?.title, + "url": `https://www.youtube.com/watch?v=${submissionInfoRow.videoID}&t=${(submissionInfoRow.startTime.toFixed(0) - 2)}`, + "description": `**${voteData.row.votes} Votes Prior | \ + ${(voteData.row.votes + voteData.incrementAmount - voteData.oldIncrementAmount)} Votes Now | ${voteData.row.views} \ + Views**\n\n**Submission ID:** ${voteData.UUID}\ + \n**Category:** ${submissionInfoRow.category}\ + \n\n**Submitted by:** ${submissionInfoRow.userName}\n${submissionInfoRow.userID}\ + \n\n**Total User Submissions:** ${submissionInfoRow.count}\ + \n**Ignored User Submissions:** ${submissionInfoRow.disregarded}\ + \n\n**Timestamp:** \ + ${getFormattedTime(submissionInfoRow.startTime)} to ${getFormattedTime(submissionInfoRow.endTime)}`, + "color": 10813440, + "author": { + "name": voteData.finalResponse?.webhookMessage ?? + voteData.finalResponse?.finalMessage ?? + getVoteAuthor(userSubmissionCountRow.submissionCount, voteData.isVIP, voteData.isOwnSubmission), + }, + "thumbnail": { + "url": getMaxResThumbnail(data) || "", + }, + }], }) - .then(async res => { + .then(res => { if (res.status >= 400) { Logger.error("Error sending reported submission Discord hook"); - Logger.error(JSON.stringify((await res.text()))); + Logger.error(JSON.stringify((res.data))); Logger.error("\n"); } }) diff --git a/src/utils/webhookUtils.ts b/src/utils/webhookUtils.ts index 76a40e0..c352bf9 100644 --- a/src/utils/webhookUtils.ts +++ b/src/utils/webhookUtils.ts @@ -1,6 +1,6 @@ import { config } from "../config"; import { Logger } from "../utils/logger"; -import fetch from "node-fetch"; +import axios from "axios"; function getVoteAuthorRaw(submissionCount: number, isVIP: boolean, isOwnSubmission: boolean): string { if (isOwnSubmission) { @@ -37,9 +37,10 @@ function dispatchEvent(scope: string, data: Record): void { const scopes = webhook.scopes || []; if (!scopes.includes(scope.toLowerCase())) return; - fetch(webhookURL, { + axios.request({ + url: webhookURL, method: "POST", - body: JSON.stringify(data), + data, headers: { "Authorization": authKey, "Event-Type": scope, // Maybe change this in the future? diff --git a/src/utils/youtubeApi.ts b/src/utils/youtubeApi.ts index 18c9e8b..1c962a1 100644 --- a/src/utils/youtubeApi.ts +++ b/src/utils/youtubeApi.ts @@ -1,8 +1,8 @@ -import fetch from "node-fetch"; import { config } from "../config"; import { Logger } from "./logger"; import { APIVideoData, APIVideoInfo } from "../types/youtubeApi.model"; import DiskCache from "./diskCache"; +import axios from "axios"; export class YouTubeAPI { static async listVideos(videoID: string, ignoreCache = false): Promise { @@ -27,11 +27,11 @@ export class YouTubeAPI { if (!config.newLeafURLs || config.newLeafURLs.length <= 0) return { err: "NewLeaf URL not found", data: null }; try { - const result = await fetch(`${config.newLeafURLs[Math.floor(Math.random() * config.newLeafURLs.length)]}/api/v1/videos/${videoID}`, { method: "GET" }); + const result = await axios.get(`${config.newLeafURLs[Math.floor(Math.random() * config.newLeafURLs.length)]}/api/v1/videos/${videoID}`); - if (result.ok) { - const data = await result.json() as (Record); - if (data.error as Record) { + if (result.status === 200) { + const data = result.data; + if (data.error) { Logger.warn(`NewLeaf API Error for ${videoID}: ${data.error}`); return { err: data.error, data: null }; } diff --git a/test/cases/userCounter.ts b/test/cases/userCounter.ts new file mode 100644 index 0000000..26a1adb --- /dev/null +++ b/test/cases/userCounter.ts @@ -0,0 +1,24 @@ +import axios from "axios"; +import assert from "assert"; +import { config } from "../../src/config"; +import { getHash } from "../../src/utils/getHash"; + + +describe("userCounter", () => { + it("Should return 200", (done) => { + if (!config.userCounterURL) return done(); // skip if no userCounterURL is set + axios.request({ + method: "POST", + baseURL: config.userCounterURL, + url: "/api/v1/addIP", + params: { + hashedIP: getHash("127.0.0.1",1) + } + }) + .then(res => { + assert.strictEqual(res.status, 200); + done(); + }) + .catch(err => done(err)); + }); +}); \ No newline at end of file