rename @fosscord/server-util to -> @fosscord/util
This commit is contained in:
parent
0802d5e6a8
commit
90d5307a56
50
api/package-lock.json
generated
50
api/package-lock.json
generated
@ -7,9 +7,11 @@
|
|||||||
"": {
|
"": {
|
||||||
"name": "@fosscord/api",
|
"name": "@fosscord/api",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
"hasInstallScript": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fosscord/server-util": "^1.3.52",
|
"@fosscord/server-util": "^1.3.52",
|
||||||
|
"@fosscord/util": "file:../util",
|
||||||
"@types/jest": "^26.0.22",
|
"@types/jest": "^26.0.22",
|
||||||
"@types/json-schema": "^7.0.7",
|
"@types/json-schema": "^7.0.7",
|
||||||
"ajv": "^8.4.0",
|
"ajv": "^8.4.0",
|
||||||
@ -60,6 +62,30 @@
|
|||||||
"typescript": "^4.1.2"
|
"typescript": "^4.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"../util": {
|
||||||
|
"name": "@fosscord/util",
|
||||||
|
"version": "1.3.52",
|
||||||
|
"license": "GPLV3",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
|
"@types/mongoose-autopopulate": "^0.10.1",
|
||||||
|
"@types/mongoose-lean-virtuals": "^0.5.1",
|
||||||
|
"@types/node": "^14.14.25",
|
||||||
|
"ajv": "^8.5.0",
|
||||||
|
"amqplib": "^0.8.0",
|
||||||
|
"dot-prop": "^6.0.1",
|
||||||
|
"env-paths": "^2.2.1",
|
||||||
|
"jsonwebtoken": "^8.5.1",
|
||||||
|
"missing-native-js-functions": "^1.2.2",
|
||||||
|
"mongodb": "^3.6.9",
|
||||||
|
"mongoose": "^5.13.7",
|
||||||
|
"mongoose-autopopulate": "^0.12.3",
|
||||||
|
"typescript": "^4.1.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/amqplib": "^0.8.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@babel/code-frame": {
|
"node_modules/@babel/code-frame": {
|
||||||
"version": "7.14.5",
|
"version": "7.14.5",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
|
||||||
@ -700,6 +726,10 @@
|
|||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@fosscord/util": {
|
||||||
|
"resolved": "../util",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/@istanbuljs/load-nyc-config": {
|
"node_modules/@istanbuljs/load-nyc-config": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
||||||
@ -11593,6 +11623,26 @@
|
|||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@fosscord/util": {
|
||||||
|
"version": "file:../util",
|
||||||
|
"requires": {
|
||||||
|
"@types/amqplib": "^0.8.1",
|
||||||
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
|
"@types/mongoose-autopopulate": "^0.10.1",
|
||||||
|
"@types/mongoose-lean-virtuals": "^0.5.1",
|
||||||
|
"@types/node": "^14.14.25",
|
||||||
|
"ajv": "^8.5.0",
|
||||||
|
"amqplib": "^0.8.0",
|
||||||
|
"dot-prop": "^6.0.1",
|
||||||
|
"env-paths": "^2.2.1",
|
||||||
|
"jsonwebtoken": "^8.5.1",
|
||||||
|
"missing-native-js-functions": "^1.2.2",
|
||||||
|
"mongodb": "^3.6.9",
|
||||||
|
"mongoose": "^5.13.7",
|
||||||
|
"mongoose-autopopulate": "^0.12.3",
|
||||||
|
"typescript": "^4.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@istanbuljs/load-nyc-config": {
|
"@istanbuljs/load-nyc-config": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
"main": "dist/Server.js",
|
"main": "dist/Server.js",
|
||||||
"types": "dist/Server.d.ts",
|
"types": "dist/Server.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"link": "npm run build && npm link",
|
||||||
|
"postinstall": "npm run --prefix ../util/ link && npm link @fosscord/util && npm run link",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"test:watch": "jest --watch",
|
"test:watch": "jest --watch",
|
||||||
"start": "npm run build && node dist/start",
|
"start": "npm run build && node dist/start",
|
||||||
@ -34,6 +36,7 @@
|
|||||||
"homepage": "https://github.com/fosscord/fosscord-api#readme",
|
"homepage": "https://github.com/fosscord/fosscord-api#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fosscord/server-util": "^1.3.52",
|
"@fosscord/server-util": "^1.3.52",
|
||||||
|
"@fosscord/util": "file:../util",
|
||||||
"@types/jest": "^26.0.22",
|
"@types/jest": "^26.0.22",
|
||||||
"@types/json-schema": "^7.0.7",
|
"@types/json-schema": "^7.0.7",
|
||||||
"ajv": "^8.4.0",
|
"ajv": "^8.4.0",
|
||||||
|
@ -3,7 +3,7 @@ import fs from "fs";
|
|||||||
import { Connection } from "mongoose";
|
import { Connection } from "mongoose";
|
||||||
import { Server, ServerOptions } from "lambert-server";
|
import { Server, ServerOptions } from "lambert-server";
|
||||||
import { Authentication, CORS } from "./middlewares/";
|
import { Authentication, CORS } from "./middlewares/";
|
||||||
import { Config, db, RabbitMQ } from "@fosscord/server-util";
|
import { Config, db, initEvent, RabbitMQ } from "@fosscord/util";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import i18nextMiddleware, { I18next } from "i18next-http-middleware";
|
import i18nextMiddleware, { I18next } from "i18next-http-middleware";
|
||||||
import i18nextBackend from "i18next-node-fs-backend";
|
import i18nextBackend from "i18next-node-fs-backend";
|
||||||
@ -56,9 +56,8 @@ export class FosscordServer extends Server {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
await (db as Promise<Connection>);
|
await (db as Promise<Connection>);
|
||||||
await this.setupSchema();
|
await this.setupSchema();
|
||||||
console.log("[Database] connected");
|
|
||||||
await Config.init();
|
await Config.init();
|
||||||
await RabbitMQ.init();
|
await initEvent();
|
||||||
|
|
||||||
this.app.use(CORS);
|
this.app.use(CORS);
|
||||||
this.app.use(Authentication);
|
this.app.use(Authentication);
|
||||||
@ -93,11 +92,12 @@ export class FosscordServer extends Server {
|
|||||||
app.use("/api/v9", api);
|
app.use("/api/v9", api);
|
||||||
app.use("/api", api); // allow unversioned requests
|
app.use("/api", api); // allow unversioned requests
|
||||||
|
|
||||||
api.get("*", (req: Request, res: Response) => {
|
api.get("*", (req: Request, res: Response, next) => {
|
||||||
res.status(404).json({
|
res.status(404).json({
|
||||||
message: "404: Not Found",
|
message: "404: Not Found",
|
||||||
code: 0
|
code: 0
|
||||||
});
|
});
|
||||||
|
next();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.app = app;
|
this.app = app;
|
||||||
|
@ -7,9 +7,7 @@ export * from "./schema/Invite";
|
|||||||
export * from "./schema/Message";
|
export * from "./schema/Message";
|
||||||
export * from "./util/Config";
|
export * from "./util/Config";
|
||||||
export * from "./util/Constants";
|
export * from "./util/Constants";
|
||||||
export * from "./util/Event";
|
|
||||||
export * from "./util/instanceOf";
|
export * from "./util/instanceOf";
|
||||||
export * from "./util/Event";
|
|
||||||
export * from "./util/instanceOf";
|
export * from "./util/instanceOf";
|
||||||
export * from "./util/Member";
|
export * from "./util/Member";
|
||||||
export * from "./util/RandomInviteID";
|
export * from "./util/RandomInviteID";
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
import { NextFunction, Request, Response } from "express";
|
import { NextFunction, Request, Response } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { checkToken, Config } from "@fosscord/server-util";
|
import { checkToken, Config } from "@fosscord/util";
|
||||||
|
|
||||||
export const NO_AUTHORIZATION_ROUTES = [
|
export const NO_AUTHORIZATION_ROUTES = [
|
||||||
/^\/api(\/v\d+)?\/auth\/login/,
|
"/auth/login",
|
||||||
/^\/api(\/v\d+)?\/auth\/register/,
|
"/auth/register",
|
||||||
/^\/api(\/v\d+)?\/webhooks\//,
|
"/webhooks/",
|
||||||
/^\/api(\/v\d+)?\/ping/,
|
"/ping",
|
||||||
/^\/api(\/v\d+)?\/gateway/,
|
"/gateway",
|
||||||
/^\/api(\/v\d+)?\/experiments/,
|
"/experiments"
|
||||||
/^\/api(\/v\d+)?\/guilds\/\d+\/widget\.(json|png)/
|
// /^\/api(\/v\d+)?\/guilds\/\d+\/widget\.(json|png)/
|
||||||
];
|
];
|
||||||
|
|
||||||
export const API_PREFIX = /^\/api(\/v\d+)?/;
|
export const API_PREFIX = /^\/api(\/v\d+)?/;
|
||||||
@ -24,13 +24,14 @@ declare global {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// TODO wenn client offen ist, wird http://localhost:8080/api/v9/users/@me/guild-events blockiert?
|
||||||
|
|
||||||
export async function Authentication(req: Request, res: Response, next: NextFunction) {
|
export async function Authentication(req: Request, res: Response, next: NextFunction) {
|
||||||
if (req.method === "OPTIONS") return res.sendStatus(204);
|
if (req.method === "OPTIONS") return res.sendStatus(204);
|
||||||
if (!req.url.startsWith("/api")) return next();
|
if (!req.url.startsWith("/api")) return next();
|
||||||
const apiPath = req.url.replace(API_PREFIX, "");
|
const apiPath = req.url.replace(API_PREFIX, "");
|
||||||
if (apiPath.startsWith("/invites") && req.method === "GET") return next();
|
if (apiPath.startsWith("/invites") && req.method === "GET") return next(); // @ts-ignore
|
||||||
if (NO_AUTHORIZATION_ROUTES.some((x) => x.test(req.url))) return next();
|
if (NO_AUTHORIZATION_ROUTES.some((x) => apiPath.startsWith(x) || x.test?.(req.url))) return next();
|
||||||
if (!req.headers.authorization) return next(new HTTPError("Missing Authorization Header", 401));
|
if (!req.headers.authorization) return next(new HTTPError("Missing Authorization Header", 401));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -25,8 +25,6 @@ export function ErrorHandler(error: Error, req: Request, res: Response, next: Ne
|
|||||||
if (httpcode > 511) httpcode = 400;
|
if (httpcode > 511) httpcode = 400;
|
||||||
|
|
||||||
res.status(httpcode).json({ code: code, message, errors });
|
res.status(httpcode).json({ code: code, message, errors });
|
||||||
|
|
||||||
return;
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
return res.status(500).json({ code: 500, message: "Internal Server Error" });
|
return res.status(500).json({ code: 500, message: "Internal Server Error" });
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
import { db, MongooseCache, Bucket, Config } from "@fosscord/server-util";
|
// @ts-nocheck
|
||||||
|
import { db, Bucket, Config } from "@fosscord/util";
|
||||||
import { NextFunction, Request, Response, Router } from "express";
|
import { NextFunction, Request, Response, Router } from "express";
|
||||||
import { getIpAdress } from "../util/ipAddress";
|
import { getIpAdress } from "../util/ipAddress";
|
||||||
import { API_PREFIX_TRAILING_SLASH } from "./Authentication";
|
import { API_PREFIX_TRAILING_SLASH } from "./Authentication";
|
||||||
|
|
||||||
const Cache = new MongooseCache(
|
// const Cache = new MongooseCache(
|
||||||
db.collection("ratelimits"),
|
// db.collection("ratelimits"),
|
||||||
[
|
// [
|
||||||
// TODO: uncomment $match and fix error: not receiving change events
|
// // TODO: uncomment $match and fix error: not receiving change events
|
||||||
// { $match: { blocked: true } }
|
// // { $match: { blocked: true } }
|
||||||
],
|
// ],
|
||||||
{ onlyEvents: false, array: true }
|
// { onlyEvents: false, array: true }
|
||||||
);
|
// );
|
||||||
|
|
||||||
// Docs: https://discord.com/developers/docs/topics/rate-limits
|
// Docs: https://discord.com/developers/docs/topics/rate-limits
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ TODO: use config values
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TODO: FIX with new event handling
|
||||||
export default function RateLimit(opts: {
|
export default function RateLimit(opts: {
|
||||||
bucket?: string;
|
bucket?: string;
|
||||||
window: number;
|
window: number;
|
||||||
@ -44,6 +46,7 @@ export default function RateLimit(opts: {
|
|||||||
success?: boolean;
|
success?: boolean;
|
||||||
onlyIp?: boolean;
|
onlyIp?: boolean;
|
||||||
}): any {
|
}): any {
|
||||||
|
return (req, res, next) => next();
|
||||||
Cache.init(); // will only initalize it once
|
Cache.init(); // will only initalize it once
|
||||||
|
|
||||||
return async (req: Request, res: Response, next: NextFunction): Promise<any> => {
|
return async (req: Request, res: Response, next: NextFunction): Promise<any> => {
|
||||||
|
@ -2,7 +2,7 @@ import { Request, Response, Router } from "express";
|
|||||||
import { check, FieldErrors, Length } from "../../util/instanceOf";
|
import { check, FieldErrors, Length } from "../../util/instanceOf";
|
||||||
import bcrypt from "bcrypt";
|
import bcrypt from "bcrypt";
|
||||||
import jwt from "jsonwebtoken";
|
import jwt from "jsonwebtoken";
|
||||||
import { Config, UserModel } from "@fosscord/server-util";
|
import { Config, UserModel } from "@fosscord/util";
|
||||||
import { adjustEmail } from "./register";
|
import { adjustEmail } from "./register";
|
||||||
import RateLimit from "../../middlewares/RateLimit";
|
import RateLimit from "../../middlewares/RateLimit";
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { trimSpecial, User, Snowflake, UserModel, Config } from "@fosscord/server-util";
|
import { trimSpecial, User, Snowflake, UserModel, Config } from "@fosscord/util";
|
||||||
import bcrypt from "bcrypt";
|
import bcrypt from "bcrypt";
|
||||||
import { check, Email, EMAIL_REGEX, FieldErrors, Length } from "../../util/instanceOf";
|
import { check, Email, EMAIL_REGEX, FieldErrors, Length } from "../../util/instanceOf";
|
||||||
import "missing-native-js-functions";
|
import "missing-native-js-functions";
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { ChannelDeleteEvent, ChannelModel, ChannelUpdateEvent, getPermission, GuildUpdateEvent, toObject } from "@fosscord/server-util";
|
import { ChannelDeleteEvent, ChannelModel, ChannelUpdateEvent, emitEvent, getPermission, GuildUpdateEvent, toObject } from "@fosscord/util";
|
||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { ChannelModifySchema } from "../../../schema/Channel";
|
import { ChannelModifySchema } from "../../../schema/Channel";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
// TODO: delete channel
|
// TODO: delete channel
|
||||||
|
@ -3,11 +3,10 @@ import { HTTPError } from "lambert-server";
|
|||||||
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { random } from "../../../util/RandomInviteID";
|
import { random } from "../../../util/RandomInviteID";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
|
|
||||||
import { InviteCreateSchema } from "../../../schema/Invite";
|
import { InviteCreateSchema } from "../../../schema/Invite";
|
||||||
|
|
||||||
import { getPermission, ChannelModel, InviteModel, InviteCreateEvent, toObject } from "@fosscord/server-util";
|
import { getPermission, ChannelModel, InviteModel, InviteCreateEvent, toObject, emitEvent } from "@fosscord/util";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { getPermission, MessageAckEvent, ReadStateModel } from "@fosscord/server-util";
|
import { emitEvent, getPermission, MessageAckEvent, ReadStateModel } from "@fosscord/util";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { emitEvent } from "../../../../../util/Event";
|
|
||||||
import { check } from "../../../../../util/instanceOf";
|
import { check } from "../../../../../util/instanceOf";
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { ChannelModel, getPermission, MessageDeleteEvent, MessageModel, MessageUpdateEvent, toObject } from "@fosscord/server-util";
|
import { ChannelModel, emitEvent, getPermission, MessageDeleteEvent, MessageModel, MessageUpdateEvent, toObject } from "@fosscord/util";
|
||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { MessageCreateSchema } from "../../../../../schema/Message";
|
import { MessageCreateSchema } from "../../../../../schema/Message";
|
||||||
import { emitEvent } from "../../../../../util/Event";
|
|
||||||
import { check } from "../../../../../util/instanceOf";
|
import { check } from "../../../../../util/instanceOf";
|
||||||
import { handleMessage, postHandleMessage } from "../../../../../util/Message";
|
import { handleMessage, postHandleMessage } from "../../../../../util/Message";
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
ChannelModel,
|
ChannelModel,
|
||||||
|
emitEvent,
|
||||||
EmojiModel,
|
EmojiModel,
|
||||||
getPermission,
|
getPermission,
|
||||||
MemberModel,
|
MemberModel,
|
||||||
@ -12,10 +13,9 @@ import {
|
|||||||
PublicUserProjection,
|
PublicUserProjection,
|
||||||
toObject,
|
toObject,
|
||||||
UserModel
|
UserModel
|
||||||
} from "@fosscord/server-util";
|
} from "@fosscord/util";
|
||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../../../util/Event";
|
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
// TODO: check if emoji is really an unicode emoji or a prperly encoded external emoji
|
// TODO: check if emoji is really an unicode emoji or a prperly encoded external emoji
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { ChannelModel, Config, getPermission, MessageDeleteBulkEvent, MessageModel } from "@fosscord/server-util";
|
import { ChannelModel, Config, emitEvent, getPermission, MessageDeleteBulkEvent, MessageModel } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../../util/Event";
|
|
||||||
import { check } from "../../../../util/instanceOf";
|
import { check } from "../../../../util/instanceOf";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { Attachment, ChannelModel, ChannelType, getPermission, MessageDocument, MessageModel, toObject } from "@fosscord/server-util";
|
import { Attachment, ChannelModel, ChannelType, getPermission, MessageDocument, MessageModel, toObject } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { MessageCreateSchema } from "../../../../schema/Message";
|
import { MessageCreateSchema } from "../../../../schema/Message";
|
||||||
import { check, instanceOf, Length } from "../../../../util/instanceOf";
|
import { check, instanceOf, Length } from "../../../../util/instanceOf";
|
||||||
|
@ -1,7 +1,15 @@
|
|||||||
import { ChannelModel, ChannelPermissionOverwrite, ChannelUpdateEvent, getPermission, MemberModel, RoleModel } from "@fosscord/server-util";
|
import {
|
||||||
|
ChannelModel,
|
||||||
|
ChannelPermissionOverwrite,
|
||||||
|
ChannelUpdateEvent,
|
||||||
|
emitEvent,
|
||||||
|
getPermission,
|
||||||
|
MemberModel,
|
||||||
|
RoleModel
|
||||||
|
} from "@fosscord/util";
|
||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
|
@ -2,14 +2,14 @@ import {
|
|||||||
ChannelModel,
|
ChannelModel,
|
||||||
ChannelPinsUpdateEvent,
|
ChannelPinsUpdateEvent,
|
||||||
Config,
|
Config,
|
||||||
|
emitEvent,
|
||||||
getPermission,
|
getPermission,
|
||||||
MessageModel,
|
MessageModel,
|
||||||
MessageUpdateEvent,
|
MessageUpdateEvent,
|
||||||
toObject
|
toObject
|
||||||
} from "@fosscord/server-util";
|
} from "@fosscord/util";
|
||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { ChannelModel, MemberModel, toObject, TypingStartEvent } from "@fosscord/server-util";
|
import { ChannelModel, emitEvent, MemberModel, toObject, TypingStartEvent } from "@fosscord/util";
|
||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
|
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { check, Length } from "../../../util/instanceOf";
|
import { check, Length } from "../../../util/instanceOf";
|
||||||
import { ChannelModel, getPermission, trimSpecial } from "@fosscord/server-util";
|
import { ChannelModel, getPermission, trimSpecial } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { isTextChannel } from "./messages/index";
|
import { isTextChannel } from "./messages/index";
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Config } from "@fosscord/server-util";
|
import { Config } from "@fosscord/util";
|
||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { BanModel, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, GuildModel, toObject } from "@fosscord/server-util";
|
import { BanModel, emitEvent, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, GuildModel, toObject } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { getIpAdress } from "../../../util/ipAddress";
|
import { getIpAdress } from "../../../util/ipAddress";
|
||||||
import { BanCreateSchema } from "../../../schema/Ban";
|
import { BanCreateSchema } from "../../../schema/Ban";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { removeMember } from "../../../util/Member";
|
import { removeMember } from "../../../util/Member";
|
||||||
import { getPublicUser } from "../../../util/User";
|
import { getPublicUser } from "../../../util/User";
|
||||||
|
@ -8,11 +8,12 @@ import {
|
|||||||
toObject,
|
toObject,
|
||||||
ChannelUpdateEvent,
|
ChannelUpdateEvent,
|
||||||
AnyChannel,
|
AnyChannel,
|
||||||
getPermission
|
getPermission,
|
||||||
} from "@fosscord/server-util";
|
emitEvent
|
||||||
|
} from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { ChannelModifySchema } from "../../../schema/Channel";
|
import { ChannelModifySchema } from "../../../schema/Channel";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { createChannel } from "../../../util/Channel";
|
import { createChannel } from "../../../util/Channel";
|
||||||
const router = Router();
|
const router = Router();
|
||||||
@ -64,7 +65,7 @@ router.patch(
|
|||||||
|
|
||||||
const channel = await ChannelModel.findOneAndUpdate({ id: req.body, guild_id }, opts).exec();
|
const channel = await ChannelModel.findOneAndUpdate({ id: req.body, guild_id }, opts).exec();
|
||||||
|
|
||||||
await emitEvent({ event: "CHANNEL_UPDATE", data: channel, channel_id: body.id, guild_id } as ChannelUpdateEvent);
|
await emitEvent({ event: "CHANNEL_UPDATE", data: toObject(channel), channel_id: body.id, guild_id } as ChannelUpdateEvent);
|
||||||
|
|
||||||
res.json(toObject(channel));
|
res.json(toObject(channel));
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
ChannelModel,
|
ChannelModel,
|
||||||
|
emitEvent,
|
||||||
EmojiModel,
|
EmojiModel,
|
||||||
GuildDeleteEvent,
|
GuildDeleteEvent,
|
||||||
GuildModel,
|
GuildModel,
|
||||||
@ -8,10 +9,9 @@ import {
|
|||||||
MessageModel,
|
MessageModel,
|
||||||
RoleModel,
|
RoleModel,
|
||||||
UserModel
|
UserModel
|
||||||
} from "@fosscord/server-util";
|
} from "@fosscord/util";
|
||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import {
|
import {
|
||||||
ChannelModel,
|
ChannelModel,
|
||||||
|
emitEvent,
|
||||||
EmojiModel,
|
EmojiModel,
|
||||||
getPermission,
|
getPermission,
|
||||||
GuildDeleteEvent,
|
GuildDeleteEvent,
|
||||||
@ -12,10 +13,10 @@ import {
|
|||||||
RoleModel,
|
RoleModel,
|
||||||
toObject,
|
toObject,
|
||||||
UserModel
|
UserModel
|
||||||
} from "@fosscord/server-util";
|
} from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { GuildUpdateSchema } from "../../../schema/Guild";
|
import { GuildUpdateSchema } from "../../../schema/Guild";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { handleFile } from "../../../util/cdn";
|
import { handleFile } from "../../../util/cdn";
|
||||||
import "missing-native-js-functions";
|
import "missing-native-js-functions";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { getPermission, InviteModel, toObject } from "@fosscord/server-util";
|
import { getPermission, InviteModel, toObject } from "@fosscord/util";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
@ -8,13 +8,13 @@ import {
|
|||||||
getPermission,
|
getPermission,
|
||||||
PermissionResolvable,
|
PermissionResolvable,
|
||||||
RoleModel,
|
RoleModel,
|
||||||
GuildMemberUpdateEvent
|
GuildMemberUpdateEvent,
|
||||||
} from "@fosscord/server-util";
|
emitEvent
|
||||||
|
} from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { addMember, isMember, removeMember } from "../../../../../util/Member";
|
import { addMember, isMember, removeMember } from "../../../../../util/Member";
|
||||||
import { check } from "../../../../../util/instanceOf";
|
import { check } from "../../../../../util/instanceOf";
|
||||||
import { MemberChangeSchema } from "../../../../../schema/Member";
|
import { MemberChangeSchema } from "../../../../../schema/Member";
|
||||||
import { emitEvent } from "../../../../../util/Event";
|
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { getPermission, PermissionResolvable } from "@fosscord/server-util";
|
import { getPermission, PermissionResolvable } from "@fosscord/util";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { check } from "lambert-server";
|
import { check } from "lambert-server";
|
||||||
import { MemberNickChangeSchema } from "../../../../../schema/Member";
|
import { MemberNickChangeSchema } from "../../../../../schema/Member";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { getPermission } from "@fosscord/server-util";
|
import { getPermission } from "@fosscord/util";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { addRole, removeRole } from "../../../../../../../util/Member";
|
import { addRole, removeRole } from "../../../../../../../util/Member";
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { GuildModel, MemberModel, toObject } from "@fosscord/server-util";
|
import { GuildModel, MemberModel, toObject } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { instanceOf, Length } from "../../../../util/instanceOf";
|
import { instanceOf, Length } from "../../../../util/instanceOf";
|
||||||
import { PublicMemberProjection, isMember } from "../../../../util/Member";
|
import { PublicMemberProjection, isMember } from "../../../../util/Member";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Config } from "@fosscord/server-util";
|
import { Config } from "@fosscord/util";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
@ -7,4 +7,4 @@ router.get("/", async (req: Request, res: Response) => {
|
|||||||
return res.json(Config.get().regions.available);
|
return res.json(Config.get().regions.available);
|
||||||
});
|
});
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
@ -9,10 +9,11 @@ import {
|
|||||||
MemberModel,
|
MemberModel,
|
||||||
GuildRoleCreateEvent,
|
GuildRoleCreateEvent,
|
||||||
GuildRoleUpdateEvent,
|
GuildRoleUpdateEvent,
|
||||||
GuildRoleDeleteEvent
|
GuildRoleDeleteEvent,
|
||||||
} from "@fosscord/server-util";
|
emitEvent
|
||||||
|
} from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { RoleModifySchema } from "../../../schema/Roles";
|
import { RoleModifySchema } from "../../../schema/Roles";
|
||||||
import { getPublicUser } from "../../../util/User";
|
import { getPublicUser } from "../../../util/User";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { TemplateModel, GuildModel, getPermission, toObject, UserModel, Snowflake } from "@fosscord/server-util";
|
import { TemplateModel, GuildModel, getPermission, toObject, UserModel, Snowflake } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { TemplateCreateSchema, TemplateModifySchema } from "../../../schema/Template";
|
import { TemplateCreateSchema, TemplateModifySchema } from "../../../schema/Template";
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { getPermission, GuildModel, InviteModel, trimSpecial } from "@fosscord/server-util";
|
import { getPermission, GuildModel, InviteModel, trimSpecial } from "@fosscord/util";
|
||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { check, Length } from "../../../util/instanceOf";
|
import { check, Length } from "../../../util/instanceOf";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { GuildModel, getPermission, toObject, Snowflake } from "@fosscord/server-util";
|
import { GuildModel, getPermission, toObject, Snowflake } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { isMember } from "../../../util/Member";
|
import { isMember } from "../../../util/Member";
|
||||||
import { GuildAddChannelToWelcomeScreenSchema } from "../../../schema/Guild";
|
import { GuildAddChannelToWelcomeScreenSchema } from "../../../schema/Guild";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { Config, Permissions, GuildModel, InviteModel, ChannelModel, MemberModel } from "@fosscord/server-util";
|
import { Config, Permissions, GuildModel, InviteModel, ChannelModel, MemberModel } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { random } from "../../../util/RandomInviteID";
|
import { random } from "../../../util/RandomInviteID";
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { GuildModel } from "@fosscord/server-util";
|
import { GuildModel } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { getPermission, GuildModel } from "@fosscord/server-util";
|
import { getPermission, GuildModel } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
import { WidgetModifySchema } from "../../../schema/Widget";
|
import { WidgetModifySchema } from "../../../schema/Widget";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { RoleModel, GuildModel, Snowflake, Guild, RoleDocument, Config } from "@fosscord/server-util";
|
import { RoleModel, GuildModel, Snowflake, Guild, RoleDocument, Config } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { check } from "./../../util/instanceOf";
|
import { check } from "./../../util/instanceOf";
|
||||||
import { GuildCreateSchema } from "../../schema/Guild";
|
import { GuildCreateSchema } from "../../schema/Guild";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
import { TemplateModel, GuildModel, toObject, UserModel, RoleModel, Snowflake, Guild, Config } from "@fosscord/server-util";
|
import { TemplateModel, GuildModel, toObject, UserModel, RoleModel, Snowflake, Guild, Config } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { GuildTemplateCreateSchema } from "../../../schema/Guild";
|
import { GuildTemplateCreateSchema } from "../../../schema/Guild";
|
||||||
import { getPublicUser } from "../../../util/User";
|
import { getPublicUser } from "../../../util/User";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { getPermission, InviteModel, toObject } from "@fosscord/server-util";
|
import { getPermission, InviteModel, toObject } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { addMember } from "../../util/Member";
|
import { addMember } from "../../util/Member";
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
|
@ -8,10 +8,11 @@ import {
|
|||||||
trimSpecial,
|
trimSpecial,
|
||||||
Channel,
|
Channel,
|
||||||
DMChannel,
|
DMChannel,
|
||||||
UserModel
|
UserModel,
|
||||||
} from "@fosscord/server-util";
|
emitEvent
|
||||||
|
} from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { DmChannelCreateSchema } from "../../../schema/Channel";
|
import { DmChannelCreateSchema } from "../../../schema/Channel";
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { GuildModel, MemberModel, UserModel } from "@fosscord/server-util";
|
import { GuildModel, MemberModel, UserModel } from "@fosscord/util";
|
||||||
import bcrypt from "bcrypt";
|
import bcrypt from "bcrypt";
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { UserModel } from "@fosscord/server-util";
|
import { UserModel } from "@fosscord/util";
|
||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import bcrypt from "bcrypt";
|
import bcrypt from "bcrypt";
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject } from "@fosscord/server-util";
|
import { GuildModel, MemberModel, UserModel, GuildDeleteEvent, GuildMemberRemoveEvent, toObject, emitEvent } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { getPublicUser } from "../../../util/User";
|
import { getPublicUser } from "../../../util/User";
|
||||||
|
|
||||||
const router: Router = Router();
|
const router: Router = Router();
|
||||||
@ -32,10 +32,10 @@ router.delete("/:id", async (req: Request, res: Response) => {
|
|||||||
emitEvent({
|
emitEvent({
|
||||||
event: "GUILD_DELETE",
|
event: "GUILD_DELETE",
|
||||||
data: {
|
data: {
|
||||||
id: guild_id,
|
id: guild_id
|
||||||
},
|
},
|
||||||
user_id: req.user_id,
|
user_id: req.user_id
|
||||||
} as GuildDeleteEvent),
|
} as GuildDeleteEvent)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const user = await getPublicUser(req.user_id);
|
const user = await getPublicUser(req.user_id);
|
||||||
@ -44,9 +44,9 @@ router.delete("/:id", async (req: Request, res: Response) => {
|
|||||||
event: "GUILD_MEMBER_REMOVE",
|
event: "GUILD_MEMBER_REMOVE",
|
||||||
data: {
|
data: {
|
||||||
guild_id: guild_id,
|
guild_id: guild_id,
|
||||||
user: user,
|
user: user
|
||||||
},
|
},
|
||||||
guild_id: guild_id,
|
guild_id: guild_id
|
||||||
} as GuildMemberRemoveEvent);
|
} as GuildMemberRemoveEvent);
|
||||||
|
|
||||||
return res.sendStatus(204);
|
return res.sendStatus(204);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { UserModel, toObject, PublicUserProjection } from "@fosscord/server-util";
|
import { UserModel, toObject, PublicUserProjection } from "@fosscord/util";
|
||||||
import { getPublicUser } from "../../../util/User";
|
import { getPublicUser } from "../../../util/User";
|
||||||
import { UserModifySchema } from "../../../schema/User";
|
import { UserModifySchema } from "../../../schema/User";
|
||||||
import { check } from "../../../util/instanceOf";
|
import { check } from "../../../util/instanceOf";
|
||||||
|
@ -5,11 +5,12 @@ import {
|
|||||||
toObject,
|
toObject,
|
||||||
RelationshipType,
|
RelationshipType,
|
||||||
RelationshipRemoveEvent,
|
RelationshipRemoveEvent,
|
||||||
UserDocument
|
UserDocument,
|
||||||
} from "@fosscord/server-util";
|
emitEvent
|
||||||
|
} from "@fosscord/util";
|
||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "../../../util/Event";
|
|
||||||
import { check, Length } from "../../../util/instanceOf";
|
import { check, Length } from "../../../util/instanceOf";
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { ChannelType } from "@fosscord/server-util";
|
import { ChannelType } from "@fosscord/util";
|
||||||
import { Length } from "../util/instanceOf";
|
import { Length } from "../util/instanceOf";
|
||||||
|
|
||||||
export const ChannelModifySchema = {
|
export const ChannelModifySchema = {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { ChannelSchema, GuildChannel } from "@fosscord/server-util";
|
import { ChannelSchema, GuildChannel } from "@fosscord/util";
|
||||||
import { Length } from "../util/instanceOf";
|
import { Length } from "../util/instanceOf";
|
||||||
|
|
||||||
export const GuildCreateSchema = {
|
export const GuildCreateSchema = {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Embed, EmbedImage } from "@fosscord/server-util";
|
import { Embed, EmbedImage } from "@fosscord/util";
|
||||||
import { Length } from "../util/instanceOf";
|
import { Length } from "../util/instanceOf";
|
||||||
|
|
||||||
export const MessageCreateSchema = {
|
export const MessageCreateSchema = {
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
import { Snowflake } from "@fosscord/server-util";
|
import { Snowflake } from "@fosscord/util";
|
||||||
|
|
||||||
console.log(Snowflake.deconstruct("0"));
|
console.log(Snowflake.deconstruct("0"));
|
||||||
|
@ -2,18 +2,18 @@ import {
|
|||||||
ChannelCreateEvent,
|
ChannelCreateEvent,
|
||||||
ChannelModel,
|
ChannelModel,
|
||||||
ChannelType,
|
ChannelType,
|
||||||
|
emitEvent,
|
||||||
getPermission,
|
getPermission,
|
||||||
GuildModel,
|
GuildModel,
|
||||||
Snowflake,
|
Snowflake,
|
||||||
TextChannel,
|
TextChannel,
|
||||||
|
toObject,
|
||||||
VoiceChannel
|
VoiceChannel
|
||||||
} from "@fosscord/server-util";
|
} from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "./Event";
|
|
||||||
|
|
||||||
// TODO: DM channel
|
// TODO: DM channel
|
||||||
export async function createChannel(channel: Partial<TextChannel | VoiceChannel>, user_id: string = "0") {
|
export async function createChannel(channel: Partial<TextChannel | VoiceChannel>, user_id: string = "0") {
|
||||||
|
|
||||||
// Always check if user has permission first
|
// Always check if user has permission first
|
||||||
const permissions = await getPermission(user_id, channel.guild_id);
|
const permissions = await getPermission(user_id, channel.guild_id);
|
||||||
permissions.hasThrow("MANAGE_CHANNELS");
|
permissions.hasThrow("MANAGE_CHANNELS");
|
||||||
@ -50,7 +50,7 @@ export async function createChannel(channel: Partial<TextChannel | VoiceChannel>
|
|||||||
recipient_ids: null
|
recipient_ids: null
|
||||||
}).save();
|
}).save();
|
||||||
|
|
||||||
await emitEvent({ event: "CHANNEL_CREATE", data: channel, guild_id: channel.guild_id } as ChannelCreateEvent);
|
await emitEvent({ event: "CHANNEL_CREATE", data: toObject(channel), guild_id: channel.guild_id } as ChannelCreateEvent);
|
||||||
|
|
||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// @ts-nocheck
|
// @ts-nocheck
|
||||||
import Ajv, { JSONSchemaType } from "ajv";
|
import Ajv, { JSONSchemaType } from "ajv";
|
||||||
import { getConfigPathForFile } from "@fosscord/server-util/dist/util/Config";
|
import { getConfigPathForFile } from "@fosscord/util/dist/util/Config";
|
||||||
import { Config } from "@fosscord/server-util";
|
import { Config } from "@fosscord/util";
|
||||||
|
|
||||||
export interface RateLimitOptions {
|
export interface RateLimitOptions {
|
||||||
count: number;
|
count: number;
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
import { Config, Event, EventModel, RabbitMQ } from "@fosscord/server-util";
|
|
||||||
|
|
||||||
export async function emitEvent(payload: Omit<Event, "created_at">) {
|
|
||||||
if (RabbitMQ.connection) {
|
|
||||||
const id = (payload.channel_id || payload.user_id || payload.guild_id) as string;
|
|
||||||
if (!id) console.error("event doesn't contain any id", payload);
|
|
||||||
const data = typeof payload.data === "object" ? JSON.stringify(payload.data) : payload.data; // use rabbitmq for event transmission
|
|
||||||
await RabbitMQ.channel?.assertExchange(id, "fanout", { durable: false });
|
|
||||||
|
|
||||||
// assertQueue isn't needed, because a queue will automatically created if it doesn't exist
|
|
||||||
const successful = RabbitMQ.channel?.publish(id, "", Buffer.from(`${data}`), { type: payload.event });
|
|
||||||
if (!successful) throw new Error("failed to send event");
|
|
||||||
} else {
|
|
||||||
// use mongodb for event transmission
|
|
||||||
// TODO: use event emitter for local server bundle
|
|
||||||
const obj = {
|
|
||||||
created_at: new Date(), // in seconds
|
|
||||||
...payload
|
|
||||||
};
|
|
||||||
// TODO: bigint isn't working
|
|
||||||
|
|
||||||
return await new EventModel(obj).save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function emitAuditLog(payload: any) {}
|
|
@ -11,11 +11,12 @@ import {
|
|||||||
toObject,
|
toObject,
|
||||||
UserModel,
|
UserModel,
|
||||||
GuildDocument,
|
GuildDocument,
|
||||||
Config
|
Config,
|
||||||
} from "@fosscord/server-util";
|
emitEvent
|
||||||
|
} from "@fosscord/util";
|
||||||
|
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { emitEvent } from "./Event";
|
|
||||||
import { getPublicUser } from "./User";
|
import { getPublicUser } from "./User";
|
||||||
|
|
||||||
export const PublicMemberProjection = {
|
export const PublicMemberProjection = {
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
import { ChannelModel, Embed, Message, MessageCreateEvent, MessageUpdateEvent } from "@fosscord/server-util";
|
import { ChannelModel, Embed, emitEvent, Message, MessageCreateEvent, MessageUpdateEvent } from "@fosscord/util";
|
||||||
import { Snowflake } from "@fosscord/server-util";
|
import { Snowflake } from "@fosscord/util";
|
||||||
import { MessageModel } from "@fosscord/server-util";
|
import { MessageModel } from "@fosscord/util";
|
||||||
import { PublicMemberProjection } from "@fosscord/server-util";
|
import { PublicMemberProjection } from "@fosscord/util";
|
||||||
import { toObject } from "@fosscord/server-util";
|
import { toObject } from "@fosscord/util";
|
||||||
import { getPermission } from "@fosscord/server-util";
|
import { getPermission } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import fetch from "node-fetch";
|
import fetch from "node-fetch";
|
||||||
import cheerio from "cheerio";
|
import cheerio from "cheerio";
|
||||||
import { emitEvent } from "./Event";
|
|
||||||
import { MessageType } from "@fosscord/server-util/dist/util/Constants";
|
import { MessageType } from "@fosscord/util/dist/util/Constants";
|
||||||
// TODO: check webhook, application, system author
|
// TODO: check webhook, application, system author
|
||||||
|
|
||||||
const LINK_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
|
const LINK_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { toObject, UserModel, PublicUserProjection } from "@fosscord/server-util";
|
import { toObject, UserModel, PublicUserProjection } from "@fosscord/util";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
|
|
||||||
export { PublicUserProjection };
|
export { PublicUserProjection };
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Config } from "@fosscord/server-util";
|
import { Config } from "@fosscord/util";
|
||||||
import FormData from "form-data";
|
import FormData from "form-data";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import fetch from "node-fetch";
|
import fetch from "node-fetch";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Config } from "@fosscord/server-util";
|
import { Config } from "@fosscord/util";
|
||||||
import { Request } from "express";
|
import { Request } from "express";
|
||||||
// use ipdata package instead of simple fetch because of integrated caching
|
// use ipdata package instead of simple fetch because of integrated caching
|
||||||
import fetch from "node-fetch";
|
import fetch from "node-fetch";
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Config } from "@fosscord/server-util";
|
import { Config } from "@fosscord/util";
|
||||||
import "missing-native-js-functions";
|
import "missing-native-js-functions";
|
||||||
|
|
||||||
const reNUMBER = /[0-9]/g;
|
const reNUMBER = /[0-9]/g;
|
||||||
|
50
cdn/package-lock.json
generated
50
cdn/package-lock.json
generated
@ -7,9 +7,11 @@
|
|||||||
"": {
|
"": {
|
||||||
"name": "@fosscord/cdn",
|
"name": "@fosscord/cdn",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
"hasInstallScript": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fosscord/server-util": "^1.3.42",
|
"@fosscord/server-util": "^1.3.42",
|
||||||
|
"@fosscord/util": "file:../util",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"btoa": "^1.2.1",
|
"btoa": "^1.2.1",
|
||||||
"cheerio": "^1.0.0-rc.5",
|
"cheerio": "^1.0.0-rc.5",
|
||||||
@ -39,6 +41,30 @@
|
|||||||
"@types/uuid": "^8.3.0"
|
"@types/uuid": "^8.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"../util": {
|
||||||
|
"name": "@fosscord/util",
|
||||||
|
"version": "1.3.52",
|
||||||
|
"license": "GPLV3",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
|
"@types/mongoose-autopopulate": "^0.10.1",
|
||||||
|
"@types/mongoose-lean-virtuals": "^0.5.1",
|
||||||
|
"@types/node": "^14.14.25",
|
||||||
|
"ajv": "^8.5.0",
|
||||||
|
"amqplib": "^0.8.0",
|
||||||
|
"dot-prop": "^6.0.1",
|
||||||
|
"env-paths": "^2.2.1",
|
||||||
|
"jsonwebtoken": "^8.5.1",
|
||||||
|
"missing-native-js-functions": "^1.2.2",
|
||||||
|
"mongodb": "^3.6.9",
|
||||||
|
"mongoose": "^5.13.7",
|
||||||
|
"mongoose-autopopulate": "^0.12.3",
|
||||||
|
"typescript": "^4.1.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/amqplib": "^0.8.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@fosscord/server-util": {
|
"node_modules/@fosscord/server-util": {
|
||||||
"version": "1.3.42",
|
"version": "1.3.42",
|
||||||
"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.42.tgz",
|
"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.42.tgz",
|
||||||
@ -59,6 +85,10 @@
|
|||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@fosscord/util": {
|
||||||
|
"resolved": "../util",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/@tokenizer/token": {
|
"node_modules/@tokenizer/token": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
|
||||||
@ -1963,6 +1993,26 @@
|
|||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@fosscord/util": {
|
||||||
|
"version": "file:../util",
|
||||||
|
"requires": {
|
||||||
|
"@types/amqplib": "^0.8.1",
|
||||||
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
|
"@types/mongoose-autopopulate": "^0.10.1",
|
||||||
|
"@types/mongoose-lean-virtuals": "^0.5.1",
|
||||||
|
"@types/node": "^14.14.25",
|
||||||
|
"ajv": "^8.5.0",
|
||||||
|
"amqplib": "^0.8.0",
|
||||||
|
"dot-prop": "^6.0.1",
|
||||||
|
"env-paths": "^2.2.1",
|
||||||
|
"jsonwebtoken": "^8.5.1",
|
||||||
|
"missing-native-js-functions": "^1.2.2",
|
||||||
|
"mongodb": "^3.6.9",
|
||||||
|
"mongoose": "^5.13.7",
|
||||||
|
"mongoose-autopopulate": "^0.12.3",
|
||||||
|
"typescript": "^4.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@tokenizer/token": {
|
"@tokenizer/token": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"link": "npm run build && npm link",
|
||||||
|
"postinstall": "npm run --prefix ../util/ link && npm link @fosscord/util && npm run link",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
"build": "tsc -b .",
|
"build": "tsc -b .",
|
||||||
"start": "npm run build && node dist/start.js"
|
"start": "npm run build && node dist/start.js"
|
||||||
@ -22,6 +24,7 @@
|
|||||||
"homepage": "https://github.com/discord-open-source/discord-cdn#readme",
|
"homepage": "https://github.com/discord-open-source/discord-cdn#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fosscord/server-util": "^1.3.42",
|
"@fosscord/server-util": "^1.3.42",
|
||||||
|
"@fosscord/util": "file:../util",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"btoa": "^1.2.1",
|
"btoa": "^1.2.1",
|
||||||
"cheerio": "^1.0.0-rc.5",
|
"cheerio": "^1.0.0-rc.5",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Server, ServerOptions } from "lambert-server";
|
import { Server, ServerOptions } from "lambert-server";
|
||||||
import { Config, db } from "@fosscord/server-util";
|
import { Config, db } from "@fosscord/util";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import avatarsRoute from "./routes/avatars";
|
import avatarsRoute from "./routes/avatars";
|
||||||
|
|
||||||
@ -13,11 +13,9 @@ export class CDNServer extends Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async start() {
|
async start() {
|
||||||
console.log("[Database] connecting ...");
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
await (db as Promise<Connection>);
|
await (db as Promise<Connection>);
|
||||||
await Config.init();
|
await Config.init();
|
||||||
console.log("[Database] connected");
|
|
||||||
this.app.use((req, res, next) => {
|
this.app.use((req, res, next) => {
|
||||||
res.set("Access-Control-Allow-Origin", "*");
|
res.set("Access-Control-Allow-Origin", "*");
|
||||||
// TODO: use better CSP policy
|
// TODO: use better CSP policy
|
||||||
@ -33,31 +31,31 @@ export class CDNServer extends Server {
|
|||||||
await this.registerRoutes(path.join(__dirname, "routes/"));
|
await this.registerRoutes(path.join(__dirname, "routes/"));
|
||||||
|
|
||||||
this.app.use("/icons/", avatarsRoute);
|
this.app.use("/icons/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /icons registered");
|
this.log("verbose", "[Server] Route /icons registered");
|
||||||
|
|
||||||
this.app.use("/emojis/", avatarsRoute);
|
this.app.use("/emojis/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /emojis registered");
|
this.log("verbose", "[Server] Route /emojis registered");
|
||||||
|
|
||||||
this.app.use("/stickers/", avatarsRoute);
|
this.app.use("/stickers/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /stickers registered");
|
this.log("verbose", "[Server] Route /stickers registered");
|
||||||
|
|
||||||
this.app.use("/banners/", avatarsRoute);
|
this.app.use("/banners/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /banners registered");
|
this.log("verbose", "[Server] Route /banners registered");
|
||||||
|
|
||||||
this.app.use("/splashes/", avatarsRoute);
|
this.app.use("/splashes/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /splashes registered");
|
this.log("verbose", "[Server] Route /splashes registered");
|
||||||
|
|
||||||
this.app.use("/app-icons/", avatarsRoute);
|
this.app.use("/app-icons/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /app-icons registered");
|
this.log("verbose", "[Server] Route /app-icons registered");
|
||||||
|
|
||||||
this.app.use("/app-assets/", avatarsRoute);
|
this.app.use("/app-assets/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /app-assets registered");
|
this.log("verbose", "[Server] Route /app-assets registered");
|
||||||
|
|
||||||
this.app.use("/discover-splashes/", avatarsRoute);
|
this.app.use("/discover-splashes/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /discover-splashes registered");
|
this.log("verbose", "[Server] Route /discover-splashes registered");
|
||||||
|
|
||||||
this.app.use("/team-icons/", avatarsRoute);
|
this.app.use("/team-icons/", avatarsRoute);
|
||||||
this.log("info", "[Server] Route /team-icons registered");
|
this.log("verbose", "[Server] Route /team-icons registered");
|
||||||
|
|
||||||
return super.start();
|
return super.start();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { Config, Snowflake } from "@fosscord/server-util";
|
import { Config, Snowflake } from "@fosscord/util";
|
||||||
import { storage } from "../util/Storage";
|
import { storage } from "../util/Storage";
|
||||||
import FileType from "file-type";
|
import FileType from "file-type";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Router, Response, Request } from "express";
|
import { Router, Response, Request } from "express";
|
||||||
import { Config, Snowflake } from "@fosscord/server-util";
|
import { Config, Snowflake } from "@fosscord/util";
|
||||||
import { storage } from "../util/Storage";
|
import { storage } from "../util/Storage";
|
||||||
import FileType from "file-type";
|
import FileType from "file-type";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
|
@ -4,7 +4,7 @@ import { Router, Response, Request } from "express";
|
|||||||
import fetch from "node-fetch";
|
import fetch from "node-fetch";
|
||||||
import crypto from "crypto";
|
import crypto from "crypto";
|
||||||
import { HTTPError } from "lambert-server";
|
import { HTTPError } from "lambert-server";
|
||||||
import { Snowflake } from "@fosscord/server-util";
|
import { Snowflake } from "@fosscord/util";
|
||||||
import { storage } from "../util/Storage";
|
import { storage } from "../util/Storage";
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user