diff --git a/assets/schemas.json b/assets/schemas.json index 6681e695..9d9b7c09 100644 Binary files a/assets/schemas.json and b/assets/schemas.json differ diff --git a/hashes.json b/hashes.json index 2ecf7662..613da98a 100644 --- a/hashes.json +++ b/hashes.json @@ -1,3 +1,3 @@ { - "npmDepsHash": "sha256-7dAZmZ8yLaUsDavaX9Fw2RYK/lV4Yy4PIDqfLjh29cg=" + "npmDepsHash": "sha256-KuKvhybhYGxC6oiVUxyjdEQD4xalXZ3OxT4KJ49ROAw=" } diff --git a/package-lock.json b/package-lock.json index d28557d1..1978d844 100644 Binary files a/package-lock.json and b/package-lock.json differ diff --git a/package.json b/package.json index 6d9e35b7..1e7b2047 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@aws-sdk/client-s3": "^3.629.0", "@sentry/integrations": "^7.66.0", "@sentry/node": "^7.66.0", - "ajv": "8.6.2", + "ajv": "^8.6.2", "ajv-formats": "2.1.1", "amqplib": "^0.10.3", "bcrypt": "^5.1.0", @@ -95,7 +95,7 @@ "multer": "^1.4.5-lts.1", "murmurhash-js": "^1.0.0", "node-2fa": "^2.0.3", - "node-fetch": "^2.7.0", + "node-fetch-commonjs": "^3.3.2", "node-os-utils": "^1.3.7", "nodemailer": "^6.9.14", "picocolors": "^1.0.0", diff --git a/patches/body-parser+1.20.1.patch b/patches/body-parser+1.20.3.patch similarity index 80% rename from patches/body-parser+1.20.1.patch rename to patches/body-parser+1.20.3.patch index 11d1a9d1..8f44efd0 100644 --- a/patches/body-parser+1.20.1.patch +++ b/patches/body-parser+1.20.3.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js -index c2745be..17c2cfe 100644 +index 59f3f7e..604f8b1 100644 --- a/node_modules/body-parser/lib/types/json.js +++ b/node_modules/body-parser/lib/types/json.js @@ -18,6 +18,7 @@ var createError = require('http-errors') @@ -10,7 +10,7 @@ index c2745be..17c2cfe 100644 /** * Module exports. -@@ -86,7 +87,7 @@ function json (options) { +@@ -89,7 +90,7 @@ function json (options) { try { debug('parse json') @@ -19,16 +19,16 @@ index c2745be..17c2cfe 100644 } catch (e) { throw normalizeJsonSyntaxError(e, { message: e.message, -@@ -157,7 +158,7 @@ function createStrictSyntaxError (str, char) { - : '' +@@ -166,7 +167,7 @@ function createStrictSyntaxError (str, char) { + } try { - JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') + JSONbig.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') } catch (e) { return normalizeJsonSyntaxError(e, { - message: e.message.replace('#', char), -@@ -216,7 +217,7 @@ function normalizeJsonSyntaxError (error, obj) { + message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) { +@@ -227,7 +228,7 @@ function normalizeJsonSyntaxError (error, obj) { } // replace stack before message for Node.js 0.10 and below diff --git a/patches/express+4.19.2.patch b/patches/express+4.21.1.patch similarity index 84% rename from patches/express+4.19.2.patch rename to patches/express+4.21.1.patch index c69be207..59aa0bba 100644 --- a/patches/express+4.19.2.patch +++ b/patches/express+4.21.1.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/express/lib/response.js b/node_modules/express/lib/response.js -index dd7b3c8..a339896 100644 +index 2b654f4..60592b0 100644 --- a/node_modules/express/lib/response.js +++ b/node_modules/express/lib/response.js @@ -27,7 +27,6 @@ var merge = require('utils-merge'); @@ -10,15 +10,16 @@ index dd7b3c8..a339896 100644 var cookie = require('cookie'); var send = require('send'); var extname = path.extname; -@@ -54,7 +53,6 @@ module.exports = res +@@ -54,8 +53,6 @@ module.exports = res * @private */ -var charsetRegExp = /;\s*charset\s*=/; - var schemaAndHostRegExp = /^(?:[a-zA-Z][a-zA-Z0-9+.-]*:)?\/\/[^\\\/\?]+/; - +- /** -@@ -165,16 +163,6 @@ res.send = function send(body) { + * Set status `code`. + * +@@ -164,16 +161,6 @@ res.send = function send(body) { break; } @@ -35,7 +36,7 @@ index dd7b3c8..a339896 100644 // determine if ETag should be generated var etagFn = app.get('etag fn') -@@ -781,17 +769,6 @@ res.header = function header(field, val) { +@@ -780,17 +767,6 @@ res.header = function header(field, val) { ? val.map(String) : String(val); diff --git a/src/api/middlewares/ImageProxy.ts b/src/api/middlewares/ImageProxy.ts index 4f9eef10..deb48bd5 100644 --- a/src/api/middlewares/ImageProxy.ts +++ b/src/api/middlewares/ImageProxy.ts @@ -20,7 +20,7 @@ import { Config, JimpType } from "@spacebar/util"; import { Request, Response } from "express"; import { yellow } from "picocolors"; import crypto from "crypto"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; let sharp: undefined | false | { default: typeof import("sharp") } = undefined; diff --git a/src/api/routes/gifs/search.ts b/src/api/routes/gifs/search.ts index 305a2a48..3869bbe6 100644 --- a/src/api/routes/gifs/search.ts +++ b/src/api/routes/gifs/search.ts @@ -17,9 +17,14 @@ */ import { route } from "@spacebar/api"; -import { TenorMediaTypes, getGifApiKey, parseGifResult } from "@spacebar/util"; +import { + TenorMediaTypes, + getGifApiKey, + parseGifResult, + TenorGif, +} from "@spacebar/util"; import { Request, Response, Router } from "express"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; import { ProxyAgent } from "proxy-agent"; const router = Router(); @@ -68,7 +73,7 @@ router.get( }, ); - const { results } = await response.json(); + const { results } = (await response.json()) as { results: TenorGif[] }; res.json(results.map(parseGifResult)).status(200); }, diff --git a/src/api/routes/gifs/trending-gifs.ts b/src/api/routes/gifs/trending-gifs.ts index 77a61efc..f19874e6 100644 --- a/src/api/routes/gifs/trending-gifs.ts +++ b/src/api/routes/gifs/trending-gifs.ts @@ -17,9 +17,14 @@ */ import { route } from "@spacebar/api"; -import { TenorMediaTypes, getGifApiKey, parseGifResult } from "@spacebar/util"; +import { + TenorMediaTypes, + getGifApiKey, + parseGifResult, + TenorGif, +} from "@spacebar/util"; import { Request, Response, Router } from "express"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; import { ProxyAgent } from "proxy-agent"; const router = Router(); @@ -63,7 +68,7 @@ router.get( }, ); - const { results } = await response.json(); + const { results } = (await response.json()) as { results: TenorGif[] }; res.json(results.map(parseGifResult)).status(200); }, diff --git a/src/api/routes/gifs/trending.ts b/src/api/routes/gifs/trending.ts index fe726842..2c43a501 100644 --- a/src/api/routes/gifs/trending.ts +++ b/src/api/routes/gifs/trending.ts @@ -24,7 +24,7 @@ import { parseGifResult, } from "@spacebar/util"; import { Request, Response, Router } from "express"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; import { ProxyAgent } from "proxy-agent"; const router = Router(); diff --git a/src/api/routes/guilds/templates/index.ts b/src/api/routes/guilds/templates/index.ts index 8f718a21..a611f421 100644 --- a/src/api/routes/guilds/templates/index.ts +++ b/src/api/routes/guilds/templates/index.ts @@ -28,7 +28,7 @@ import { Template, } from "@spacebar/util"; import { Request, Response, Router } from "express"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; const router: Router = Router(); router.get( diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts index f037417a..1733f7cb 100644 --- a/src/api/util/handlers/Message.ts +++ b/src/api/util/handlers/Message.ts @@ -48,7 +48,7 @@ import { } from "@spacebar/util"; import { HTTPError } from "lambert-server"; import { In } from "typeorm"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; const allow_empty = false; // TODO: check webhook, application, system author, stickers // TODO: embed gifs/videos/images diff --git a/src/api/util/utility/EmbedHandlers.ts b/src/api/util/utility/EmbedHandlers.ts index 0f1e88a5..450d9d7e 100644 --- a/src/api/util/utility/EmbedHandlers.ts +++ b/src/api/util/utility/EmbedHandlers.ts @@ -19,7 +19,7 @@ import { Config, Embed, EmbedImage, EmbedType } from "@spacebar/util"; import * as cheerio from "cheerio"; import crypto from "crypto"; -import fetch, { RequestInit } from "node-fetch"; +import fetch, { RequestInit } from "node-fetch-commonjs"; import { yellow } from "picocolors"; import probe from "probe-image-size"; @@ -221,7 +221,7 @@ export const EmbedHandlers: { ? { name: metas.site_name, url: url.origin, - } + } : undefined, }; }, @@ -269,7 +269,27 @@ export const EmbedHandlers: { authorization: `Bearer ${token}`, }, }); - const json = await response.json(); + const json = (await response.json()) as { + errors?: never[]; + includes: { + users: { + profile_image_url: string; + username: string; + name: string; + }[]; + media: { + type: string; + width: number; + height: number; + url: string; + }[]; + }; + data: { + text: string; + created_at: string; + public_metrics: { like_count: number; retweet_count: number }; + }; + }; if (json.errors) return null; const author = json.includes.users[0]; const text = json.data.text; @@ -508,7 +528,7 @@ export const EmbedHandlers: { ? { name: metas.author, // TODO: author channel url - } + } : undefined, }; }, @@ -533,7 +553,7 @@ export const EmbedHandlers: { footer: hoverText ? { text: hoverText, - } + } : undefined, }; }, diff --git a/src/api/util/utility/captcha.ts b/src/api/util/utility/captcha.ts index db1b7957..3c0ac766 100644 --- a/src/api/util/utility/captcha.ts +++ b/src/api/util/utility/captcha.ts @@ -17,7 +17,7 @@ */ import { Config } from "@spacebar/util"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; export interface hcaptchaResponse { success: boolean; diff --git a/src/api/util/utility/ipAddress.ts b/src/api/util/utility/ipAddress.ts index c51daf6c..c19c7c35 100644 --- a/src/api/util/utility/ipAddress.ts +++ b/src/api/util/utility/ipAddress.ts @@ -19,7 +19,7 @@ import { Config } from "@spacebar/util"; import { Request } from "express"; // use ipdata package instead of simple fetch because of integrated caching -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; const exampleData = { ip: "", @@ -85,7 +85,7 @@ export async function IPAnalysis(ip: string): Promise { return ( await fetch(`https://api.ipdata.co/${ip}?api-key=${ipdataApiKey}`) - ).json(); + ).json() as Promise; } export function isProxy(data: typeof exampleData) { diff --git a/src/util/util/AutoUpdate.ts b/src/util/util/AutoUpdate.ts index 2af5cf1c..b7721cdb 100644 --- a/src/util/util/AutoUpdate.ts +++ b/src/util/util/AutoUpdate.ts @@ -17,7 +17,7 @@ */ import "missing-native-js-functions"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; import { ProxyAgent } from "proxy-agent"; import readline from "readline"; import fs from "fs/promises"; @@ -100,7 +100,7 @@ async function getLatestVersion(url: string) { try { const agent = new ProxyAgent(); const response = await fetch(url, { agent }); - const content = await response.json(); + const content = (await response.json()) as { version: string }; return content.version; } catch (error) { throw new Error("[Auto update] check failed for " + url); diff --git a/src/util/util/cdn.ts b/src/util/util/cdn.ts index f7d310a3..d5ca9ba9 100644 --- a/src/util/util/cdn.ts +++ b/src/util/util/cdn.ts @@ -18,7 +18,7 @@ import FormData from "form-data"; import { HTTPError } from "lambert-server"; -import fetch from "node-fetch"; +import fetch from "node-fetch-commonjs"; import { Attachment } from "../entities"; import { Config } from "./Config";