diff --git a/.gitignore b/.gitignore index 0f1d93323..c4d703d25 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,5 @@ api/assets/plugins/*.js *.log -*.log.ansi \ No newline at end of file +*.log.ansi +bundle/depclean.* \ No newline at end of file diff --git a/api/package.json b/api/package.json index f8d8376eb..1fa85884b 100644 --- a/api/package.json +++ b/api/package.json @@ -39,52 +39,39 @@ "@babel/core": "^7.18.9", "@babel/preset-env": "^7.18.9", "@babel/preset-typescript": "^7.15.0", - "@ovos-media/ts-transform-paths": "^1.7.18-1", - "@types/amqplib": "^0.8.1", "@types/bcrypt": "^5.0.0", "@types/express": "^4.17.9", "@types/i18next-node-fs-backend": "^2.1.0", - "@types/jest": "^28.1.6", - "@types/jest-expect-message": "^1.0.3", - "@types/jsonwebtoken": "^8.5.0", "@types/morgan": "^1.9.3", "@types/multer": "^1.4.5", "@types/node": "^18.0.6", - "@types/supertest": "^2.0.11", "jest": "^28.1.3", "jest-expect-message": "^1.0.2", - "jest-runtime": "^28.1.3", - "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", - "ts-patch": "^2.0.1", "typescript": "^4.4.2", "typescript-json-schema": "^0.54.0" }, "dependencies": { "@babel/preset-typescript": "^7.15.0", "@fosscord/util": "file:../util", - "@sentry/node": "^7.7.0", - "@sentry/tracing": "^7.7.0", "ajv": "8.6.2", "ajv-formats": "^2.1.1", - "amqplib": "^0.10.0", - "assert": "^2.0.0", "bcrypt": "^5.0.1", "body-parser": "^1.19.0", + "canvas": "^2.9.3", "cheerio": "^1.0.0-rc.10", "dotenv": "^16.0.1", "express": "^4.17.1", - "form-data": "^4.0.0", "i18next": "^21.8.14", "i18next-http-middleware": "^3.1.3", "i18next-node-fs-backend": "^2.1.3", "image-size": "^1.0.0", - "jsonwebtoken": "^8.5.1", "lambert-server": "^1.2.12", "missing-native-js-functions": "^1.2.18", "morgan": "^1.10.0", "multer": "^1.4.5-lts.1", "node-2fa": "^2.0.3", + "node-fetch": "^2.6.7", "patch-package": "^6.4.7", "picocolors": "^1.0.0", "proxy-agent": "^5.0.0", diff --git a/api/src/Server.ts b/api/src/Server.ts index 2b38f4a15..f309834b2 100644 --- a/api/src/Server.ts +++ b/api/src/Server.ts @@ -1,7 +1,6 @@ -import "missing-native-js-functions"; import { Server, ServerOptions } from "lambert-server"; import { Authentication, CORS } from "./middlewares/"; -import { Config, initDatabase, initEvent } from "@fosscord/util"; +import { Config, initDatabase, initEvent, registerRoutes } from "@fosscord/util"; import { ErrorHandler } from "./middlewares/ErrorHandler"; import { BodyParser } from "./middlewares/BodyParser"; import { Router, Request, Response, NextFunction } from "express"; @@ -11,7 +10,6 @@ import TestClient from "./middlewares/TestClient"; import { initTranslation } from "./middlewares/Translation"; import morgan from "morgan"; import { initInstance } from "./util/handlers/Instance"; -import { registerRoutes } from "@fosscord/util"; import { red } from "picocolors" export interface FosscordServerOptions extends ServerOptions {} @@ -50,7 +48,7 @@ export class FosscordServer extends Server { } }) ); - }; + } this.app.use(CORS); this.app.use(BodyParser({ inflate: true, limit: "10mb" })); @@ -91,4 +89,4 @@ export class FosscordServer extends Server { return super.start(); } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/api/src/middlewares/Authentication.ts b/api/src/middlewares/Authentication.ts index 1df7911be..2d9ccf571 100644 --- a/api/src/middlewares/Authentication.ts +++ b/api/src/middlewares/Authentication.ts @@ -1,5 +1,5 @@ import { NextFunction, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { checkToken, Config, Rights } from "@fosscord/util"; export const NO_AUTHORIZATION_ROUTES = [ diff --git a/api/src/middlewares/BodyParser.ts b/api/src/middlewares/BodyParser.ts index 4cb376bc2..35db3c6fb 100644 --- a/api/src/middlewares/BodyParser.ts +++ b/api/src/middlewares/BodyParser.ts @@ -1,6 +1,6 @@ import bodyParser, { OptionsJson } from "body-parser"; import { NextFunction, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; export function BodyParser(opts?: OptionsJson) { const jsonParser = bodyParser.json(opts); diff --git a/api/src/middlewares/ErrorHandler.ts b/api/src/middlewares/ErrorHandler.ts index 2012b91c3..8a046e06f 100644 --- a/api/src/middlewares/ErrorHandler.ts +++ b/api/src/middlewares/ErrorHandler.ts @@ -1,5 +1,5 @@ import { NextFunction, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { ApiError, FieldError } from "@fosscord/util"; const EntityNotFoundErrorRegex = /"(\w+)"/; diff --git a/api/src/middlewares/TestClient.ts b/api/src/middlewares/TestClient.ts index 466d4bccf..167b4c47c 100644 --- a/api/src/middlewares/TestClient.ts +++ b/api/src/middlewares/TestClient.ts @@ -1,11 +1,10 @@ import express, { Request, Response, Application } from "express"; -import fs, { writeFile } from "fs"; +import fs from "fs"; import path from "path"; import fetch, { Response as FetchResponse, Headers } from "node-fetch"; import ProxyAgent from 'proxy-agent'; import { Config } from "@fosscord/util"; import { AssetCacheItem } from "../util/entities/AssetCacheItem" -import { FileLogger } from "typeorm"; export default function TestClient(app: Application) { const agent = new ProxyAgent(); diff --git a/api/src/routes/auth/register.ts b/api/src/routes/auth/register.ts index 94dd65021..9816c5fd1 100644 --- a/api/src/routes/auth/register.ts +++ b/api/src/routes/auth/register.ts @@ -1,9 +1,8 @@ import { Request, Response, Router } from "express"; import { Config, generateToken, Invite, FieldErrors, User, adjustEmail, trimSpecial } from "@fosscord/util"; import { route, getIpAdress, IPAnalysis, isProxy } from "@fosscord/api"; -import "missing-native-js-functions"; import bcrypt from "bcrypt"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router: Router = Router(); diff --git a/api/src/routes/channels/#channel_id/invites.ts b/api/src/routes/channels/#channel_id/invites.ts index 9c3611647..788f7d6de 100644 --- a/api/src/routes/channels/#channel_id/invites.ts +++ b/api/src/routes/channels/#channel_id/invites.ts @@ -1,5 +1,5 @@ import { Router, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { random } from "@fosscord/api"; import { Channel, Invite, InviteCreateEvent, emitEvent, User, Guild, PublicInviteRelation } from "@fosscord/util"; diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/index.ts b/api/src/routes/channels/#channel_id/messages/#message_id/index.ts index b7f1e1307..0b228ed66 100644 --- a/api/src/routes/channels/#channel_id/messages/#message_id/index.ts +++ b/api/src/routes/channels/#channel_id/messages/#message_id/index.ts @@ -19,7 +19,7 @@ import multer from "multer"; import { route } from "@fosscord/api"; import { handleMessage, postHandleMessage } from "@fosscord/api"; import { MessageCreateSchema } from "../index"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); // TODO: message content/embed string length limit diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts b/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts index 2a387fc1b..f56f18d30 100644 --- a/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts +++ b/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts @@ -15,7 +15,7 @@ import { } from "@fosscord/util"; import { route } from "@fosscord/api"; import { Router, Response, Request } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { In } from "typeorm"; const router = Router(); diff --git a/api/src/routes/channels/#channel_id/messages/bulk-delete.ts b/api/src/routes/channels/#channel_id/messages/bulk-delete.ts index 9e8cad235..2e40f110d 100644 --- a/api/src/routes/channels/#channel_id/messages/bulk-delete.ts +++ b/api/src/routes/channels/#channel_id/messages/bulk-delete.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, Config, emitEvent, getPermission, getRights, MessageDeleteBulkEvent, Message } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { In } from "typeorm"; diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/api/src/routes/channels/#channel_id/messages/index.ts index 6d4d57941..f8e62d8ce 100644 --- a/api/src/routes/channels/#channel_id/messages/index.ts +++ b/api/src/routes/channels/#channel_id/messages/index.ts @@ -15,7 +15,7 @@ import { uploadFile, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { handleMessage, postHandleMessage, route } from "@fosscord/api"; import multer from "multer"; import { FindManyOptions, LessThan, MoreThan } from "typeorm"; diff --git a/api/src/routes/channels/#channel_id/permissions.ts b/api/src/routes/channels/#channel_id/permissions.ts index cdcbde3d4..798f7c8da 100644 --- a/api/src/routes/channels/#channel_id/permissions.ts +++ b/api/src/routes/channels/#channel_id/permissions.ts @@ -9,7 +9,7 @@ import { Role } from "@fosscord/util"; import { Router, Response, Request } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/channels/#channel_id/pins.ts b/api/src/routes/channels/#channel_id/pins.ts index e71e659fb..5c314f092 100644 --- a/api/src/routes/channels/#channel_id/pins.ts +++ b/api/src/routes/channels/#channel_id/pins.ts @@ -9,7 +9,7 @@ import { DiscordApiErrors } from "@fosscord/util"; import { Router, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/channels/#channel_id/purge.ts b/api/src/routes/channels/#channel_id/purge.ts index 3a6997b24..7ab4ad9a4 100644 --- a/api/src/routes/channels/#channel_id/purge.ts +++ b/api/src/routes/channels/#channel_id/purge.ts @@ -1,4 +1,4 @@ -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { isTextChannel } from "./messages"; import { FindManyOptions, Between, Not } from "typeorm"; diff --git a/api/src/routes/channels/#channel_id/webhooks.ts b/api/src/routes/channels/#channel_id/webhooks.ts index cfb276ba9..52f7ef7d5 100644 --- a/api/src/routes/channels/#channel_id/webhooks.ts +++ b/api/src/routes/channels/#channel_id/webhooks.ts @@ -1,7 +1,7 @@ import { Router, Response, Request } from "express"; import { route } from "@fosscord/api"; import { Channel, Config, getPermission, trimSpecial, Webhook } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { isTextChannel } from "./messages/index"; import { DiscordApiErrors } from "@fosscord/util"; diff --git a/api/src/routes/discoverable-guilds.ts b/api/src/routes/discoverable-guilds.ts index fb7b844f4..2d1e60b61 100644 --- a/api/src/routes/discoverable-guilds.ts +++ b/api/src/routes/discoverable-guilds.ts @@ -1,7 +1,8 @@ import { Guild, Config } from "@fosscord/util"; import { Router, Request, Response } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; +import { Like } from "typeorm"; const router = Router(); diff --git a/api/src/routes/discovery.ts b/api/src/routes/discovery.ts index a7df120e7..30c418c62 100644 --- a/api/src/routes/discovery.ts +++ b/api/src/routes/discovery.ts @@ -1,6 +1,6 @@ import { Categories } from "@fosscord/util"; import { Router, Response, Request } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; const router = Router(); diff --git a/api/src/routes/downloads.ts b/api/src/routes/downloads.ts index ddfc080cf..03c73f440 100644 --- a/api/src/routes/downloads.ts +++ b/api/src/routes/downloads.ts @@ -1,5 +1,5 @@ import { Router, Response, Request } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; import { Release, Config } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/experiments.ts b/api/src/routes/experiments.ts index 7be86fb89..fcbd9271d 100644 --- a/api/src/routes/experiments.ts +++ b/api/src/routes/experiments.ts @@ -1,5 +1,5 @@ import { Router, Response, Request } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; const router = Router(); diff --git a/api/src/routes/gifs/trending.ts b/api/src/routes/gifs/trending.ts index bc143f005..61eb76c4c 100644 --- a/api/src/routes/gifs/trending.ts +++ b/api/src/routes/gifs/trending.ts @@ -3,7 +3,7 @@ import fetch from "node-fetch"; import ProxyAgent from 'proxy-agent'; import { route } from "@fosscord/api"; import { Config } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/guild-recommendations.ts b/api/src/routes/guild-recommendations.ts index 069e42218..ee2c26f1b 100644 --- a/api/src/routes/guild-recommendations.ts +++ b/api/src/routes/guild-recommendations.ts @@ -1,7 +1,8 @@ import { Guild, Config } from "@fosscord/util"; import { Router, Request, Response } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; +import {Like} from "typeorm" const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/audit-logs.ts b/api/src/routes/guilds/#guild_id/audit-logs.ts index a4f2f800b..7b1d00628 100644 --- a/api/src/routes/guilds/#guild_id/audit-logs.ts +++ b/api/src/routes/guilds/#guild_id/audit-logs.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/bans.ts b/api/src/routes/guilds/#guild_id/bans.ts index 1ce41936a..eb38de0db 100644 --- a/api/src/routes/guilds/#guild_id/bans.ts +++ b/api/src/routes/guilds/#guild_id/bans.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { DiscordApiErrors, emitEvent, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, Guild, Ban, User, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { getIpAdress, route } from "@fosscord/api"; export interface BanCreateSchema { diff --git a/api/src/routes/guilds/#guild_id/channels.ts b/api/src/routes/guilds/#guild_id/channels.ts index a921fa214..e3c6b8bd7 100644 --- a/api/src/routes/guilds/#guild_id/channels.ts +++ b/api/src/routes/guilds/#guild_id/channels.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/delete.ts b/api/src/routes/guilds/#guild_id/delete.ts index 86550005d..e26246511 100644 --- a/api/src/routes/guilds/#guild_id/delete.ts +++ b/api/src/routes/guilds/#guild_id/delete.ts @@ -1,6 +1,6 @@ import { Channel, emitEvent, GuildDeleteEvent, Guild, Member, Message, Role, Invite, Emoji } from "@fosscord/util"; import { Router, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/index.ts b/api/src/routes/guilds/#guild_id/index.ts index bf77bd5ec..d9c8f13ba 100644 --- a/api/src/routes/guilds/#guild_id/index.ts +++ b/api/src/routes/guilds/#guild_id/index.ts @@ -1,8 +1,7 @@ import { Request, Response, Router } from "express"; import { DiscordApiErrors, emitEvent, getPermission, getRights, Guild, GuildUpdateEvent, handleFile, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; -import "missing-native-js-functions"; import { GuildCreateSchema } from "../index"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/integrations.ts b/api/src/routes/guilds/#guild_id/integrations.ts index abf997c9d..19f685635 100644 --- a/api/src/routes/guilds/#guild_id/integrations.ts +++ b/api/src/routes/guilds/#guild_id/integrations.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts index 5601097e0..e4a060d66 100644 --- a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts +++ b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Member, getPermission, getRights, Role, GuildMemberUpdateEvent, emitEvent, Sticker, Emoji, Rights, Guild } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/members/index.ts b/api/src/routes/guilds/#guild_id/members/index.ts index b730a4e77..2ed28bda5 100644 --- a/api/src/routes/guilds/#guild_id/members/index.ts +++ b/api/src/routes/guilds/#guild_id/members/index.ts @@ -2,7 +2,7 @@ import { Request, Response, Router } from "express"; import { Guild, Member, PublicMemberProjection } from "@fosscord/util"; import { route } from "@fosscord/api"; import { MoreThan } from "typeorm"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts b/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts index 2ad01682c..7efc53823 100644 --- a/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts +++ b/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts @@ -1,7 +1,7 @@ import { Router, Request, Response } from "express"; import { Role, Member, GuildRoleUpdateEvent, GuildRoleDeleteEvent, emitEvent, handleFile } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { RoleModifySchema } from "../"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/roles/index.ts b/api/src/routes/guilds/#guild_id/roles/index.ts index 534651054..2f5141b84 100644 --- a/api/src/routes/guilds/#guild_id/roles/index.ts +++ b/api/src/routes/guilds/#guild_id/roles/index.ts @@ -11,7 +11,7 @@ import { DiscordApiErrors, handleFile } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/guilds/#guild_id/stickers.ts b/api/src/routes/guilds/#guild_id/stickers.ts index 4ea1dce1c..bfc462915 100644 --- a/api/src/routes/guilds/#guild_id/stickers.ts +++ b/api/src/routes/guilds/#guild_id/stickers.ts @@ -12,7 +12,7 @@ import { import { Router, Request, Response } from "express"; import { route } from "@fosscord/api"; import multer from "multer"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); router.get("/", route({}), async (req: Request, res: Response) => { diff --git a/api/src/routes/guilds/#guild_id/templates.ts b/api/src/routes/guilds/#guild_id/templates.ts index 2989c0d2d..7e4119076 100644 --- a/api/src/routes/guilds/#guild_id/templates.ts +++ b/api/src/routes/guilds/#guild_id/templates.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Guild, Template } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { generateCode } from "@fosscord/api"; diff --git a/api/src/routes/guilds/#guild_id/vanity-url.ts b/api/src/routes/guilds/#guild_id/vanity-url.ts index 29cd25e23..e841b8b39 100644 --- a/api/src/routes/guilds/#guild_id/vanity-url.ts +++ b/api/src/routes/guilds/#guild_id/vanity-url.ts @@ -1,7 +1,7 @@ import { Channel, ChannelType, getPermission, Guild, Invite, trimSpecial } from "@fosscord/util"; import { Router, Request, Response } from "express"; import { route } from "@fosscord/api"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/webhooks.ts b/api/src/routes/guilds/#guild_id/webhooks.ts index 8b2febeac..7f5b95928 100644 --- a/api/src/routes/guilds/#guild_id/webhooks.ts +++ b/api/src/routes/guilds/#guild_id/webhooks.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/welcome_screen.ts b/api/src/routes/guilds/#guild_id/welcome_screen.ts index 7141f17ee..ab1251311 100644 --- a/api/src/routes/guilds/#guild_id/welcome_screen.ts +++ b/api/src/routes/guilds/#guild_id/welcome_screen.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Guild, getPermission, Snowflake, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/guilds/#guild_id/widget.json.ts b/api/src/routes/guilds/#guild_id/widget.json.ts index 154b25173..97f3c3034 100644 --- a/api/src/routes/guilds/#guild_id/widget.json.ts +++ b/api/src/routes/guilds/#guild_id/widget.json.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Config, Permissions, Guild, Invite, Channel, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { random, route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/guilds/#guild_id/widget.png.ts b/api/src/routes/guilds/#guild_id/widget.png.ts index 4c82b7407..4298d0fe4 100644 --- a/api/src/routes/guilds/#guild_id/widget.png.ts +++ b/api/src/routes/guilds/#guild_id/widget.png.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Guild } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import fs from "fs"; import path from "path"; diff --git a/api/src/routes/invites/index.ts b/api/src/routes/invites/index.ts index eeafb22ab..b0a349393 100644 --- a/api/src/routes/invites/index.ts +++ b/api/src/routes/invites/index.ts @@ -1,7 +1,7 @@ import { Router, Request, Response } from "express"; import { emitEvent, getPermission, Guild, Invite, InviteDeleteEvent, User, PublicInviteRelation } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router: Router = Router(); diff --git a/api/src/routes/users/@me/delete.ts b/api/src/routes/users/@me/delete.ts index c24c3f1ec..1d81c2b98 100644 --- a/api/src/routes/users/@me/delete.ts +++ b/api/src/routes/users/@me/delete.ts @@ -2,7 +2,7 @@ import { Router, Request, Response } from "express"; import { Guild, Member, User } from "@fosscord/util"; import { route } from "@fosscord/api"; import bcrypt from "bcrypt"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/users/@me/guilds.ts b/api/src/routes/users/@me/guilds.ts index 754a240e3..4d4fccd4a 100644 --- a/api/src/routes/users/@me/guilds.ts +++ b/api/src/routes/users/@me/guilds.ts @@ -1,6 +1,6 @@ import { Router, Request, Response } from "express"; import { Guild, Member, User, GuildDeleteEvent, GuildMemberRemoveEvent, emitEvent, Config } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/users/@me/relationships.ts b/api/src/routes/users/@me/relationships.ts index d03014b64..b2e39d52d 100644 --- a/api/src/routes/users/@me/relationships.ts +++ b/api/src/routes/users/@me/relationships.ts @@ -9,7 +9,7 @@ import { Config } from "@fosscord/util"; import { Router, Response, Request } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { DiscordApiErrors } from "@fosscord/util"; import { route } from "@fosscord/api"; diff --git a/api/src/start.ts b/api/src/start.ts index 841ad3d5d..9ba198e72 100644 --- a/api/src/start.ts +++ b/api/src/start.ts @@ -1,7 +1,6 @@ process.on("uncaughtException", console.error); process.on("unhandledRejection", console.error); -import "missing-native-js-functions"; import { config } from "dotenv"; config(); import { FosscordServer } from "./Server"; diff --git a/api/src/util/handlers/Message.ts b/api/src/util/handlers/Message.ts index 31ac91080..0a74312ef 100644 --- a/api/src/util/handlers/Message.ts +++ b/api/src/util/handlers/Message.ts @@ -22,7 +22,7 @@ import { Attachment, Config, } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import fetch from "node-fetch"; import cheerio from "cheerio"; import { MessageCreateSchema } from "../../routes/channels/#channel_id/messages"; diff --git a/api/src/util/utility/passwordStrength.ts b/api/src/util/utility/passwordStrength.ts index f8badea78..8eca63b8a 100644 --- a/api/src/util/utility/passwordStrength.ts +++ b/api/src/util/utility/passwordStrength.ts @@ -1,5 +1,4 @@ import { Config } from "@fosscord/util"; -import "missing-native-js-functions"; const reNUMBER = /[0-9]/g; const reUPPERCASELETTER = /[A-Z]/g; diff --git a/api/tsconfig.json b/api/tsconfig.json index 91396aa8e..80fca16df 100644 --- a/api/tsconfig.json +++ b/api/tsconfig.json @@ -5,7 +5,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "lib": ["ES2021"] /* Specify library files to be included in the compilation. */, diff --git a/bundle/package-lock.json b/bundle/package-lock.json index 5078696fd..7a409df31 100644 Binary files a/bundle/package-lock.json and b/bundle/package-lock.json differ diff --git a/bundle/package.json b/bundle/package.json index 002ed7f9d..a2c2f5300 100644 --- a/bundle/package.json +++ b/bundle/package.json @@ -26,82 +26,27 @@ }, "homepage": "https://fosscord.com", "devDependencies": { - "@babel/core": "^7.18.9", - "@babel/preset-env": "^7.18.9", - "@babel/preset-typescript": "^7.15.0", - "@ovos-media/ts-transform-paths": "^1.7.18-1", - "@types/amqplib": "^0.8.1", - "@types/bcrypt": "^5.0.0", - "@types/body-parser": "^1.19.0", - "@types/btoa": "^1.2.3", "@types/dotenv": "^8.2.0", "@types/express": "^4.17.12", - "@types/fs-extra": "^9.0.12", - "@types/i18next-node-fs-backend": "^2.1.0", - "@types/jest": "^28.1.6", - "@types/jest-expect-message": "^1.0.3", - "@types/jsonwebtoken": "^8.5.0", - "@types/morgan": "^1.9.3", - "@types/multer": "^1.4.7", "@types/node": "^18.0.6", - "@types/node-os-utils": "^1.2.0", - "@types/supertest": "^2.0.11", - "@types/ws": "^8.5.3", - "jest": "^28.1.3", - "jest-expect-message": "^1.0.2", - "jest-runtime": "^28.1.3", + "@types/node-os-utils": "^1.3.0", "ts-node": "^10.2.1", - "ts-node-dev": "^2.0.0", "ts-patch": "^2.0.1", - "tsconfig-paths": "^3.12.0", - "typescript": "^4.2.3", - "typescript-json-schema": "^0.54.0" + "typescript": "^4.7.4" }, "dependencies": { - "@aws-sdk/client-s3": "^3.36.1", - "@aws-sdk/node-http-handler": "^3.36.0", - "@babel/preset-env": "^7.15.8", - "@babel/preset-typescript": "^7.15.0", "@fosscord/api": "file:../api", "@fosscord/cdn": "file:../cdn", "@fosscord/gateway": "file:../gateway", + "@ovos-media/ts-transform-paths": "^1.7.18-1", "@sentry/node": "^7.7.0", "@sentry/tracing": "^7.7.0", - "ajv": "8.6.2", - "ajv-formats": "^2.1.1", - "amqplib": "^0.10.0", - "assert": "^2.0.0", - "async-exit-hook": "^2.0.1", - "bcrypt": "^5.0.1", - "body-parser": "^1.19.0", - "btoa": "^1.2.1", - "cheerio": "^1.0.0-rc.10", "dotenv": "^16.0.1", - "exif-be-gone": "^1.2.0", - "express": "^4.17.1", - "express-async-errors": "^3.1.1", - "file-type": "^17.1.2", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "i18next": "^21.8.14", - "i18next-http-middleware": "^3.1.3", - "i18next-node-fs-backend": "^2.1.3", - "image-size": "^1.0.0", - "jest": "^28.1.3", - "jsonwebtoken": "^8.5.1", - "lambert-db": "^1.2.3", - "lambert-server": "^1.2.11", - "missing-native-js-functions": "^1.2.18", - "morgan": "^1.10.0", - "multer": "^1.4.5-lts.1", - "nan": "^2.15.0", - "nanocolors": "^0.2.12", - "node-2fa": "^2.0.3", - "node-os-utils": "^1.3.5", + "express": "^4.18.1", + "node-fetch": "^2.6.7", + "node-os-utils": "^1.3.7", "patch-package": "^6.4.7", - "pg": "^8.7.3", "picocolors": "^1.0.0", - "proxy-agent": "^5.0.0", "reflect-metadata": "^0.1.13", "sqlite3": "^4.2.0", "supertest": "^6.1.6", diff --git a/cdn/package.json b/cdn/package.json index 2b2866cbd..f7438109c 100644 --- a/cdn/package.json +++ b/cdn/package.json @@ -21,38 +21,27 @@ }, "homepage": "https://github.com/fosscord/fosscord-server#readme", "devDependencies": { - "@ovos-media/ts-transform-paths": "^1.7.18-1", - "@types/amqplib": "^0.8.1", "@types/body-parser": "^1.19.0", - "@types/btoa": "^1.2.3", "@types/dotenv": "^8.2.0", "@types/express": "^4.17.12", - "@types/fs-extra": "^9.0.12", - "@types/jsonwebtoken": "^8.5.0", "@types/multer": "^1.4.7", - "@types/node": "^18.0.6", - "ts-patch": "^2.0.1" + "@types/node": "^18.0.6" }, "dependencies": { "@aws-sdk/client-s3": "^3.36.1", - "@aws-sdk/node-http-handler": "^3.36.0", "@fosscord/util": "file:../util", + "@types/node-fetch": "^2.6.2", "body-parser": "^1.19.0", - "btoa": "^1.2.1", "dotenv": "^16.0.1", "exif-be-gone": "^1.2.0", "express": "^4.17.1", - "express-async-errors": "^3.1.1", "file-type": "^17.1.2", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", "image-size": "^1.0.0", "jest": "^28.1.3", - "lambert-db": "^1.2.3", "lambert-server": "^1.2.12", - "missing-native-js-functions": "^1.2.17", "multer": "^1.4.5-lts.1", - "nanocolors": "^0.2.12", + "node-fetch": "^2.6.7", + "picocolors": "^1.0.0", "supertest": "^6.1.6", "typescript": "^4.1.2" }, diff --git a/cdn/src/routes/attachments.ts b/cdn/src/routes/attachments.ts index 2aed752eb..3e04fe76a 100644 --- a/cdn/src/routes/attachments.ts +++ b/cdn/src/routes/attachments.ts @@ -2,7 +2,7 @@ import { Router, Response, Request } from "express"; import { Config, Snowflake } from "@fosscord/util"; import { storage } from "../util/Storage"; import FileType from "file-type"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { multer } from "../util/multer"; import imageSize from "image-size"; diff --git a/cdn/src/routes/avatars.ts b/cdn/src/routes/avatars.ts index 3b521cc3b..bbdf42cc7 100644 --- a/cdn/src/routes/avatars.ts +++ b/cdn/src/routes/avatars.ts @@ -2,7 +2,7 @@ import { Router, Response, Request } from "express"; import { Config, Snowflake } from "@fosscord/util"; import { storage } from "../util/Storage"; import FileType from "file-type"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import crypto from "crypto"; import { multer } from "../util/multer"; diff --git a/cdn/src/routes/external.ts b/cdn/src/routes/external.ts index ed44c9054..cf02f645b 100644 --- a/cdn/src/routes/external.ts +++ b/cdn/src/routes/external.ts @@ -1,10 +1,9 @@ import { Router, Response, Request } from "express"; import fetch from "node-fetch"; -import { HTTPError } from "lambert-server"; -import { Snowflake } from "@fosscord/util"; +import { HTTPError } from "@fosscord/util"; +import { Snowflake, Config } from "@fosscord/util"; import { storage } from "../util/Storage"; import FileType from "file-type"; -import { Config } from "@fosscord/util"; // TODO: somehow handle the deletion of images posted to the /external route diff --git a/cdn/src/routes/role-icons.ts b/cdn/src/routes/role-icons.ts index a850db886..dd96c90e6 100644 --- a/cdn/src/routes/role-icons.ts +++ b/cdn/src/routes/role-icons.ts @@ -2,7 +2,7 @@ import { Router, Response, Request } from "express"; import { Config, Snowflake } from "@fosscord/util"; import { storage } from "../util/Storage"; import FileType from "file-type"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import crypto from "crypto"; import { multer } from "../util/multer"; diff --git a/cdn/src/util/FileStorage.ts b/cdn/src/util/FileStorage.ts index 376ce007c..ed007abbf 100644 --- a/cdn/src/util/FileStorage.ts +++ b/cdn/src/util/FileStorage.ts @@ -1,8 +1,7 @@ import { Storage } from "./Storage"; import fs from "fs"; -import fse from "fs-extra"; +//import fse from "fs-extra"; import { join, relative, dirname } from "path"; -import "missing-native-js-functions"; import { Readable } from "stream"; import ExifTransformer = require("exif-be-gone"); @@ -36,7 +35,8 @@ export class FileStorage implements Storage { async set(path: string, value: any) { path = getPath(path); - fse.ensureDirSync(dirname(path)); + //fse.ensureDirSync(dirname(path)); + fs.mkdirSync(dirname(path), {recursive: true}); value = Readable.from(value); const cleaned_file = fs.createWriteStream(path); diff --git a/cdn/src/util/Storage.ts b/cdn/src/util/Storage.ts index 89dd5634b..728804a0c 100644 --- a/cdn/src/util/Storage.ts +++ b/cdn/src/util/Storage.ts @@ -1,6 +1,7 @@ import { FileStorage } from "./FileStorage"; import path from "path"; -import fse from "fs-extra"; +//import fse from "fs-extra"; +import fs from "fs"; import { bgCyan, black } from "picocolors"; import { S3 } from "@aws-sdk/client-s3"; import { S3Storage } from "./S3Storage"; @@ -22,7 +23,8 @@ if (process.env.STORAGE_PROVIDER === "file" || !process.env.STORAGE_PROVIDER) { location = path.join(process.cwd(), "files"); } console.log(`[CDN] storage location: ${bgCyan(`${black(location)}`)}`); - fse.ensureDirSync(location); + //fse.ensureDirSync(location); + fs.mkdirSync(location, {recursive: true}); process.env.STORAGE_LOCATION = location; storage = new FileStorage(); diff --git a/cdn/tsconfig.json b/cdn/tsconfig.json index 1ad037c60..94cc7b586 100644 --- a/cdn/tsconfig.json +++ b/cdn/tsconfig.json @@ -4,7 +4,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ES6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "lib": [ diff --git a/gateway/package.json b/gateway/package.json index 05ef5c558..19d44eba7 100644 --- a/gateway/package.json +++ b/gateway/package.json @@ -15,9 +15,7 @@ "author": "Fosscord", "license": "AGPL-3.0-only", "devDependencies": { - "@ovos-media/ts-transform-paths": "^1.7.18-1", "@types/amqplib": "^0.8.1", - "@types/jsonwebtoken": "^8.5.0", "@types/node": "^18.0.6", "@types/ws": "^8.5.3", "ts-node-dev": "^2.0.0", @@ -28,10 +26,6 @@ "@fosscord/util": "file:../util", "amqplib": "^0.10.0", "dotenv": "^16.0.1", - "jsonwebtoken": "^8.5.1", - "lambert-server": "^1.2.11", - "missing-native-js-functions": "^1.2.18", - "proxy-agent": "^5.0.0", "typeorm": "^0.3.7", "ws": "^8.8.1" }, diff --git a/gateway/src/Server.ts b/gateway/src/Server.ts index 7e1489bee..254820c9b 100644 --- a/gateway/src/Server.ts +++ b/gateway/src/Server.ts @@ -1,4 +1,3 @@ -import "missing-native-js-functions"; import dotenv from "dotenv"; dotenv.config(); import { closeDatabase, Config, initDatabase, initEvent } from "@fosscord/util"; diff --git a/gateway/src/events/Message.ts b/gateway/src/events/Message.ts index 83e6fc1b6..313287841 100644 --- a/gateway/src/events/Message.ts +++ b/gateway/src/events/Message.ts @@ -1,17 +1,16 @@ -import { CLOSECODES, OPCODES } from "../util/Constants"; +import { CLOSECODES } from "../util/Constants"; import { WebSocket, Payload } from "@fosscord/gateway"; let erlpack: any; try { erlpack = require("@yukikaze-bot/erlpack"); } catch (error) {} import OPCodeHandlers from "../opcodes"; -import { Tuple } from "lambert-server"; import { check } from "../opcodes/instanceOf"; import WS from "ws"; const PayloadSchema = { op: Number, - $d: new Tuple(Object, Number), // or number for heartbeat sequence + $d: Object || Number, // or number for heartbeat sequence $s: Number, $t: String, }; diff --git a/gateway/src/listener/listener.ts b/gateway/src/listener/listener.ts index 060de65bb..0cf2b82b9 100644 --- a/gateway/src/listener/listener.ts +++ b/gateway/src/listener/listener.ts @@ -13,7 +13,6 @@ import { import { OPCODES } from "../util/Constants"; import { Send } from "../util/Send"; import { WebSocket } from "@fosscord/gateway"; -import "missing-native-js-functions"; import { Channel as AMQChannel } from "amqplib"; import { Recipient } from "@fosscord/util"; diff --git a/gateway/src/opcodes/LazyRequest.ts b/gateway/src/opcodes/LazyRequest.ts index 7503ee614..dd96d6d7b 100644 --- a/gateway/src/opcodes/LazyRequest.ts +++ b/gateway/src/opcodes/LazyRequest.ts @@ -4,9 +4,7 @@ import { Send } from "../util/Send"; import { OPCODES } from "../util/Constants"; import { WebSocket, Payload, handlePresenceUpdate } from "@fosscord/gateway"; import { check } from "./instanceOf"; -import "missing-native-js-functions"; import { getRepository } from "typeorm"; -import "missing-native-js-functions"; // TODO: only show roles/members that have access to this channel // TODO: config: to list all members (even those who are offline) sorted by role, or just those who are online diff --git a/gateway/src/opcodes/instanceOf.ts b/gateway/src/opcodes/instanceOf.ts index 6fd508527..eb6f6ea18 100644 --- a/gateway/src/opcodes/instanceOf.ts +++ b/gateway/src/opcodes/instanceOf.ts @@ -1,4 +1,4 @@ -import { instanceOf } from "lambert-server"; +import { instanceOf } from "@fosscord/util"; import { WebSocket } from "@fosscord/gateway"; import { CLOSECODES } from "../util/Constants"; diff --git a/gateway/tsconfig.json b/gateway/tsconfig.json index 56b9ca7d0..70407c6b0 100644 --- a/gateway/tsconfig.json +++ b/gateway/tsconfig.json @@ -5,7 +5,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ES2020" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "lib": [ diff --git a/package-lock.json b/package-lock.json index 18a82aab5..abc8be0dd 100644 Binary files a/package-lock.json and b/package-lock.json differ diff --git a/util/package-lock.json b/util/package-lock.json index e56a5f1bc..472f1b95f 100644 Binary files a/util/package-lock.json and b/util/package-lock.json differ diff --git a/util/package.json b/util/package.json index f9440500c..01c3d9f20 100644 --- a/util/package.json +++ b/util/package.json @@ -37,12 +37,14 @@ "ts-node": "^10.2.1" }, "dependencies": { + "@types/node-fetch": "^2.6.2", "amqplib": "^0.10.0", "form-data": "^4.0.0", "jsonwebtoken": "^8.5.1", "lambert-server": "^1.2.12", "missing-native-js-functions": "^1.2.18", "multer": "^1.4.5-lts.1", + "node-fetch": "^2.6.7", "picocolors": "^1.0.0", "proxy-agent": "^5.0.0", "reflect-metadata": "^0.1.13", diff --git a/util/src/entities/BaseClass.ts b/util/src/entities/BaseClass.ts index 7ee27e304..770824baa 100644 --- a/util/src/entities/BaseClass.ts +++ b/util/src/entities/BaseClass.ts @@ -1,7 +1,6 @@ import "reflect-metadata"; import { BaseEntity, EntityMetadata, ObjectIdColumn, PrimaryColumn, FindOptionsWhere } from "typeorm"; import { Snowflake } from "../util/Snowflake"; -import "missing-native-js-functions"; export class BaseClassWithoutId extends BaseEntity { constructor(props?: any) { diff --git a/util/src/entities/Channel.ts b/util/src/entities/Channel.ts index 1a20153c6..2a1e38a47 100644 --- a/util/src/entities/Channel.ts +++ b/util/src/entities/Channel.ts @@ -2,7 +2,7 @@ import { Column, Entity, JoinColumn, ManyToOne, OneToMany, RelationId } from "ty import { BaseClass } from "./BaseClass"; import { Guild } from "./Guild"; import { PublicUserProjection, User } from "./User"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from ".."; import { containsAll, emitEvent, getPermission, Snowflake, trimSpecial, InvisibleCharacters } from "../util"; import { ChannelCreateEvent, ChannelRecipientRemoveEvent } from "../interfaces"; import { Recipient } from "./Recipient"; diff --git a/util/src/entities/Encryption.ts b/util/src/entities/Encryption.ts index 3b82ff84b..6b578d155 100644 --- a/util/src/entities/Encryption.ts +++ b/util/src/entities/Encryption.ts @@ -2,7 +2,7 @@ import { Column, Entity, JoinColumn, ManyToOne, OneToMany, RelationId } from "ty import { BaseClass } from "./BaseClass"; import { Guild } from "./Guild"; import { PublicUserProjection, User } from "./User"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from ".."; import { containsAll, emitEvent, getPermission, Snowflake, trimSpecial, InvisibleCharacters } from "../util"; import { BitField, BitFieldResolvable, BitFlag } from "../util/BitField"; import { Recipient } from "./Recipient"; diff --git a/util/src/entities/Member.ts b/util/src/entities/Member.ts index 0194c9a9b..f6d99125c 100644 --- a/util/src/entities/Member.ts +++ b/util/src/entities/Member.ts @@ -20,7 +20,7 @@ import { GuildMemberRemoveEvent, GuildMemberUpdateEvent, } from "../interfaces"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from ".."; import { Role } from "./Role"; import { BaseClassWithoutId } from "./BaseClass"; import { Ban, PublicGuildRelations } from "."; diff --git a/util/src/fetch.js b/util/src/fetch.js deleted file mode 100644 index 709bc4405..000000000 --- a/util/src/fetch.js +++ /dev/null @@ -1 +0,0 @@ -export default fetch; diff --git a/util/src/index.ts b/util/src/index.ts index 0de1e19ab..ae0f7e54a 100644 --- a/util/src/index.ts +++ b/util/src/index.ts @@ -4,4 +4,3 @@ export * from "./util/index"; export * from "./interfaces/index"; export * from "./entities/index"; export * from "./dtos/index"; -export * from "./fetch.js"; diff --git a/util/src/util/AutoUpdate.ts b/util/src/util/AutoUpdate.ts index 7a4af4ffe..7d0201065 100644 --- a/util/src/util/AutoUpdate.ts +++ b/util/src/util/AutoUpdate.ts @@ -1,5 +1,4 @@ -import "missing-native-js-functions"; -import fetch from "../fetch"; +import fetch from "node-fetch"; import ProxyAgent from 'proxy-agent'; import readline from "readline"; import fs from "fs/promises"; diff --git a/util/src/util/Config.ts b/util/src/util/Config.ts index 31b0b35f0..c358444f2 100644 --- a/util/src/util/Config.ts +++ b/util/src/util/Config.ts @@ -1,4 +1,3 @@ -import "missing-native-js-functions"; import { ConfigValue, ConfigEntity, DefaultConfigOptions } from "../entities/Config"; import path from "path"; import fs from "fs"; diff --git a/util/src/util/Event.ts b/util/src/util/Event.ts index bb624051c..90c243479 100644 --- a/util/src/util/Event.ts +++ b/util/src/util/Event.ts @@ -58,8 +58,8 @@ export async function listenEvent(event: string, callback: (event: EventOpts) => process.setMaxListeners(process.getMaxListeners() - 1); }; - const listener = (msg: ProcessEvent) => { - msg.type === "event" && msg.id === event && callback({ ...msg.event, cancel }); + const listener = (message: any) => { + message.type === "event" && message.id === event && callback({ ...message.event, cancel }); }; process.addListener("message", listener); diff --git a/util/src/util/FieldError.ts b/util/src/util/FieldError.ts index 406b33e82..49968e1a2 100644 --- a/util/src/util/FieldError.ts +++ b/util/src/util/FieldError.ts @@ -1,5 +1,3 @@ -import "missing-native-js-functions"; - export function FieldErrors(fields: Record) { return new FieldError( 50035, diff --git a/util/src/util/Permissions.ts b/util/src/util/Permissions.ts index e003bf05e..d3efb70c1 100644 --- a/util/src/util/Permissions.ts +++ b/util/src/util/Permissions.ts @@ -1,17 +1,8 @@ // https://github.com/discordjs/discord.js/blob/master/src/util/Permissions.js // Apache License Version 2.0 Copyright 2015 - 2021 Amish Shah import { Channel, ChannelPermissionOverwrite, Guild, Member, Role } from "../entities"; -import { BitField } from "./BitField"; -import "missing-native-js-functions"; -import { BitFieldResolvable, BitFlag } from "./BitField"; - -let HTTPError: any; - -try { - HTTPError = require("lambert-server").HTTPError; -} catch (e) { - HTTPError = Error; -} +import { BitField, BitFieldResolvable, BitFlag } from "./BitField"; +import { HTTPError } from ".."; export type PermissionResolvable = bigint | number | Permissions | PermissionResolvable[] | PermissionString; diff --git a/util/src/util/Rights.ts b/util/src/util/Rights.ts index b7f458363..1c3906fb4 100644 --- a/util/src/util/Rights.ts +++ b/util/src/util/Rights.ts @@ -1,15 +1,6 @@ -import { BitField } from "./BitField"; -import "missing-native-js-functions"; -import { BitFieldResolvable, BitFlag } from "./BitField"; +import { BitField, BitFieldResolvable, BitFlag } from "./BitField"; import { User } from "../entities"; - -let HTTPError: any; - -try { - HTTPError = require("lambert-server").HTTPError; -} catch (e) { - HTTPError = Error; -} +import { HTTPError } from ".."; export type RightResolvable = bigint | number | Rights | RightResolvable[] | RightString; diff --git a/util/src/util/cdn.ts b/util/src/util/cdn.ts index ef4ac47d6..9cfe4896c 100644 --- a/util/src/util/cdn.ts +++ b/util/src/util/cdn.ts @@ -1,8 +1,8 @@ import FormData from "form-data"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from ".."; import { Config } from "./Config"; import multer from "multer"; -import fetch from "../fetch" +import fetch from "node-fetch" import { nodeModuleNameResolver } from "typescript"; export async function uploadFile(path: string, file?: Express.Multer.File) { diff --git a/util/src/util/imports/Checks.ts b/util/src/util/imports/Checks.ts new file mode 100644 index 000000000..19a841713 --- /dev/null +++ b/util/src/util/imports/Checks.ts @@ -0,0 +1,125 @@ +//source: https://github.com/Flam3rboy/-server/blob/master/src/check.ts +import { NextFunction, Request, Response } from "express"; +import { HTTPError } from "."; + +const OPTIONAL_PREFIX = "$"; +const EMAIL_REGEX = + /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + +export function check(schema: any) { + return (req: Request, res: Response, next: NextFunction) => { + try { + const result = instanceOf(schema, req.body, { path: "body" }); + if (result === true) return next(); + throw result; + } catch (error) { + next(new HTTPError((error as any).toString(), 400)); + } + }; +} +export class Tuple { + public types: any[]; + constructor(...types: any[]) { + this.types = types; + } +} + +export class Email { + constructor(public email: string) {} + check() { + return !!this.email.match(EMAIL_REGEX); + } +} +export function instanceOf( + type: any, + value: any, + { path = "", optional = false }: { path?: string; optional?: boolean } = {} +): boolean { + if (!type) return true; // no type was specified + + if (value == null) { + if (optional) return true; + throw `${path} is required`; + } + + switch (type) { + case String: + if (typeof value === "string") return true; + throw `${path} must be a string`; + case Number: + value = Number(value); + if (typeof value === "number" && !isNaN(value)) return true; + throw `${path} must be a number`; + case BigInt: + try { + value = BigInt(value); + if (typeof value === "bigint") return true; + } catch (error) {} + throw `${path} must be a bigint`; + case Boolean: + if (value == "true") value = true; + if (value == "false") value = false; + if (typeof value === "boolean") return true; + throw `${path} must be a boolean`; + case Object: + if (typeof value === "object" && value !== null) return true; + throw `${path} must be a object`; + } + + if (typeof type === "object") { + if (Array.isArray(type)) { + if (!Array.isArray(value)) throw `${path} must be an array`; + if (!type.length) return true; // type array didn't specify any type + + return value.every((val, i) => instanceOf(type[0], val, { path: `${path}[${i}]`, optional })); + } + if (type?.constructor?.name != "Object") { + if (type instanceof Tuple) { + if ( + (type).types.some((x) => { + try { + return instanceOf(x, value, { path, optional }); + } catch (error) { + return false; + } + }) + ) { + return true; + } + throw `${path} must be one of ${type.types}`; + } + if (type instanceof Email) { + if ((type).check()) return true; + throw `${path} is not a valid E-Mail`; + } + if (value instanceof type) return true; + throw `${path} must be an instance of ${type}`; + } + if (typeof value !== "object") throw `${path} must be a object`; + + const diff = Object.keys(value).missing( + Object.keys(type).map((x) => (x.startsWith(OPTIONAL_PREFIX) ? x.slice(OPTIONAL_PREFIX.length) : x)) + ); + + if (diff.length) throw `Unkown key ${diff}`; + + return Object.keys(type).every((key) => { + let newKey = key; + const OPTIONAL = key.startsWith(OPTIONAL_PREFIX); + if (OPTIONAL) newKey = newKey.slice(OPTIONAL_PREFIX.length); + + return instanceOf(type[key], value[newKey], { + path: `${path}.${newKey}`, + optional: OPTIONAL, + }); + }); + } else if (typeof type === "number" || typeof type === "string" || typeof type === "boolean") { + if (value === type) return true; + throw `${path} must be ${value}`; + } else if (typeof type === "bigint") { + if (BigInt(value) === type) return true; + throw `${path} must be ${value}`; + } + + return type == value; +} diff --git a/util/src/util/imports/HTTPError.ts b/util/src/util/imports/HTTPError.ts new file mode 100644 index 000000000..56a7dd553 --- /dev/null +++ b/util/src/util/imports/HTTPError.ts @@ -0,0 +1,5 @@ +export class HTTPError extends Error { + constructor(message: string, public code: number = 400) { + super(message); + } +} \ No newline at end of file diff --git a/util/src/util/imports/index.ts b/util/src/util/imports/index.ts new file mode 100644 index 000000000..4a4448ba8 --- /dev/null +++ b/util/src/util/imports/index.ts @@ -0,0 +1,2 @@ +export * from './Checks'; +export * from './HTTPError'; diff --git a/util/src/util/index.ts b/util/src/util/index.ts index f7a273cb3..cfad53f3b 100644 --- a/util/src/util/index.ts +++ b/util/src/util/index.ts @@ -19,4 +19,6 @@ export * from "./Snowflake"; export * from "./String"; export * from "./Array"; export * from "./TraverseDirectory"; -export * from "./InvisibleCharacters"; \ No newline at end of file +export * from "./InvisibleCharacters"; + +export * from "./imports/index" diff --git a/util/tsconfig.json b/util/tsconfig.json index 0398ce9a7..a5d5ae05f 100644 --- a/util/tsconfig.json +++ b/util/tsconfig.json @@ -4,7 +4,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ES6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "lib": ["ES2021"] /* Specify library files to be included in the compilation. */,