diff --git a/dist/util/Database.js b/dist/util/Database.js
index 9ac6eeeb..01b1b57c 100644
--- a/dist/util/Database.js
+++ b/dist/util/Database.js
@@ -1,10 +1,75 @@
"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
Object.defineProperty(exports, "__esModule", { value: true });
-const lambert_db_1 = require("lambert-db");
-// TODO: load url from config
-const db = new lambert_db_1.MongoDatabase("mongodb://127.0.0.1:27017/lambert?readPreference=secondaryPreferred", {
- useNewUrlParser: true,
- useUnifiedTopology: false,
-});
-exports.default = db;
+exports.MongooseCache = void 0;
+require("./MongoBigInt");
+const mongoose_1 = __importDefault(require("mongoose"));
+const mongodb_1 = require("mongodb");
+const events_1 = __importDefault(require("events"));
+const uri = process.env.MONGO_URL || "mongodb://localhost:27017/fosscord?readPreference=secondaryPreferred";
+const connection = mongoose_1.default.createConnection(uri, { autoIndex: true });
+exports.default = connection;
+class MongooseCache extends events_1.default {
+ constructor(collection, pipeline, opts) {
+ super();
+ this.collection = collection;
+ this.pipeline = pipeline;
+ this.opts = opts;
+ this.change = (doc) => {
+ // @ts-ignore
+ if (doc.fullDocument) {
+ // @ts-ignore
+ if (!this.opts.onlyEvents)
+ this.data = doc.fullDocument;
+ }
+ switch (doc.operationType) {
+ case "dropDatabase":
+ return this.destroy();
+ case "drop":
+ return this.destroy();
+ case "delete":
+ return this.emit("delete", doc.documentKey._id.toHexString());
+ case "insert":
+ return this.emit("insert", doc.fullDocument);
+ case "update":
+ case "replace":
+ return this.emit("change", doc.fullDocument);
+ case "invalidate":
+ return this.destroy();
+ default:
+ return;
+ }
+ };
+ }
+ async init() {
+ this.stream = this.collection.watch(this.pipeline, { fullDocument: "updateLookup" });
+ this.stream.on("change", this.change);
+ this.stream.on("close", this.destroy);
+ this.stream.on("error", console.error);
+ if (!this.opts.onlyEvents) {
+ const arr = await this.collection.aggregate(this.pipeline).toArray();
+ this.data = arr.length ? arr[0] : arr;
+ }
+ }
+ convertResult(obj) {
+ if (obj instanceof mongodb_1.Long)
+ return BigInt(obj.toString());
+ if (typeof obj === "object") {
+ Object.keys(obj).forEach((key) => {
+ obj[key] = this.convertResult(obj[key]);
+ });
+ }
+ return obj;
+ }
+ destroy() {
+ this.stream.off("change", this.change);
+ this.emit("close");
+ if (this.stream.isClosed())
+ return;
+ return this.stream.close();
+ }
+}
+exports.MongooseCache = MongooseCache;
//# sourceMappingURL=Database.js.map
\ No newline at end of file
diff --git a/dist/util/Database.js.map b/dist/util/Database.js.map
index f7157bb6..7dacb4cd 100644
--- a/dist/util/Database.js.map
+++ b/dist/util/Database.js.map
@@ -1 +1 @@
-{"version":3,"file":"Database.js","sourceRoot":"","sources":["../../src/util/Database.ts"],"names":[],"mappings":";;AAAA,2CAA2C;AAE3C,6BAA6B;AAC7B,MAAM,EAAE,GAAG,IAAI,0BAAa,CAAC,qEAAqE,EAAE;IACnG,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,KAAK;CACzB,CAAC,CAAC;AAEH,kBAAe,EAAE,CAAC"}
\ No newline at end of file
+{"version":3,"file":"Database.js","sourceRoot":"","sources":["../../src/util/Database.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
|