diff --git a/package-lock.json b/package-lock.json index 22def022..4e0e6aed 100644 Binary files a/package-lock.json and b/package-lock.json differ diff --git a/package.json b/package.json index 4b8e4106..413931b2 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@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", @@ -40,5 +41,8 @@ "mongoose": "^5.12.3", "mongoose-autopopulate": "^0.12.3", "typescript": "^4.1.3" + }, + "devDependencies": { + "@types/amqplib": "^0.8.1" } } diff --git a/src/util/Config.ts b/src/util/Config.ts index cbdc194c..10dddc88 100644 --- a/src/util/Config.ts +++ b/src/util/Config.ts @@ -25,17 +25,17 @@ export interface RateLimitOptions { } export interface Region { - id: string, - name: string, - vip: boolean, - custom: boolean, - deprecated: boolean, - optimal: boolean, + id: string; + name: string; + vip: boolean; + custom: boolean; + deprecated: boolean; + optimal: boolean; } export interface KafkaBroker { - ip: string, - port: number + ip: string; + port: number; } export interface DefaultOptions { @@ -133,10 +133,13 @@ export interface DefaultOptions { regions: { default: string; available: Region[]; - } + }; + rabbitmq: { + host: string | null; + }; kafka: { - brokers: KafkaBroker[] | null - } + brokers: KafkaBroker[] | null; + }; } export const DefaultOptions: DefaultOptions = { @@ -230,17 +233,18 @@ export const DefaultOptions: DefaultOptions = { }, regions: { default: "fosscord", - available: [ - { id: "fosscord", name: "Fosscord", vip: false, custom: false, deprecated: false, optimal: false }, - ] + available: [{ id: "fosscord", name: "Fosscord", vip: false, custom: false, deprecated: false, optimal: false }], + }, + rabbitmq: { + host: null, }, kafka: { - brokers: null - } + brokers: null, + }, }; export const ConfigSchema = new Schema({}, { strict: false }); -export interface DefaultOptionsDocument extends DefaultOptions, Document { } +export interface DefaultOptionsDocument extends DefaultOptions, Document {} export const ConfigModel = model("Config", ConfigSchema, "config"); diff --git a/src/util/RabbitMQ.ts b/src/util/RabbitMQ.ts new file mode 100644 index 00000000..9df95231 --- /dev/null +++ b/src/util/RabbitMQ.ts @@ -0,0 +1,14 @@ +import amqp, { Connection, Channel } from "amqplib"; +import Config from "./Config"; + +var rabbitCon: Connection; +var rabbitCh: Channel; + +export async function init() { + const host = Config.get().rabbitmq.host; + if (!host) return; + rabbitCon = await amqp.connect(host); + rabbitCh = await rabbitCon.createChannel(); +} + +export { rabbitCon, rabbitCh }; diff --git a/src/util/index.ts b/src/util/index.ts index 7e8bca20..7523a6ad 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -5,4 +5,5 @@ export * from "./MessageFlags"; export * from "./Permissions"; export * from "./Snowflake"; export * from "./UserFlags"; -export * from "./toBigInt" \ No newline at end of file +export * from "./toBigInt"; +export * from "./RabbitMQ";