mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-10 20:52:42 +01:00
✨ event emit
This commit is contained in:
parent
0a08938d18
commit
644430921a
121
util/package-lock.json
generated
121
util/package-lock.json
generated
@ -1,12 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "@fosscord/server-util",
|
"name": "@fosscord/util",
|
||||||
"version": "1.3.52",
|
"version": "1.3.52",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@fosscord/server-util",
|
"name": "@fosscord/util",
|
||||||
"version": "1.3.52",
|
"version": "1.3.52",
|
||||||
|
"hasInstallScript": true,
|
||||||
"license": "GPLV3",
|
"license": "GPLV3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/jsonwebtoken": "^8.5.0",
|
"@types/jsonwebtoken": "^8.5.0",
|
||||||
@ -20,7 +21,7 @@
|
|||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"missing-native-js-functions": "^1.2.2",
|
"missing-native-js-functions": "^1.2.2",
|
||||||
"mongodb": "^3.6.9",
|
"mongodb": "^3.6.9",
|
||||||
"mongoose": "^5.12.3",
|
"mongoose": "^5.13.7",
|
||||||
"mongoose-autopopulate": "^0.12.3",
|
"mongoose-autopopulate": "^0.12.3",
|
||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
},
|
},
|
||||||
@ -382,9 +383,9 @@
|
|||||||
"integrity": "sha512-kNdwKWXh1hM8RdNqW2BIHsqD6fYN9RV27M+0uQF1pGF1yLKVc+xIv1VB8WEN1HxQ22N8Rj9sdEezOX2yBpsMZA=="
|
"integrity": "sha512-kNdwKWXh1hM8RdNqW2BIHsqD6fYN9RV27M+0uQF1pGF1yLKVc+xIv1VB8WEN1HxQ22N8Rj9sdEezOX2yBpsMZA=="
|
||||||
},
|
},
|
||||||
"node_modules/mongodb": {
|
"node_modules/mongodb": {
|
||||||
"version": "3.6.9",
|
"version": "3.6.11",
|
||||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.9.tgz",
|
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.11.tgz",
|
||||||
"integrity": "sha512-1nSCKgSunzn/CXwgOWgbPHUWOO5OfERcuOWISmqd610jn0s8BU9K4879iJVabqgpPPbA6hO7rG48eq+fGED3Mg==",
|
"integrity": "sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bl": "^2.2.1",
|
"bl": "^2.2.1",
|
||||||
"bson": "^1.1.4",
|
"bson": "^1.1.4",
|
||||||
@ -420,25 +421,30 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mongoose": {
|
"node_modules/mongoose": {
|
||||||
"version": "5.12.3",
|
"version": "5.13.7",
|
||||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.3.tgz",
|
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.7.tgz",
|
||||||
"integrity": "sha512-frsSR9yeldaRpSUeTegXCSB0Tu5UGq8sHuHBuEV31Jk3COyxlKFQPL7UsdMhxPUCmk74FpOYSmNwxhWBEqgzQg==",
|
"integrity": "sha512-ADIvftZ+KfoTALMZ0n8HvBlezFhcUd73hQaHQDwQ+3X+JZlqE47fUy9yhFZ2SjT+qzmuaCcIXCfhewIc38t2fQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/mongodb": "^3.5.27",
|
"@types/mongodb": "^3.5.27",
|
||||||
"bson": "^1.1.4",
|
"bson": "^1.1.4",
|
||||||
"kareem": "2.3.2",
|
"kareem": "2.3.2",
|
||||||
"mongodb": "3.6.5",
|
"mongodb": "3.6.11",
|
||||||
"mongoose-legacy-pluralize": "1.0.2",
|
"mongoose-legacy-pluralize": "1.0.2",
|
||||||
"mpath": "0.8.3",
|
"mpath": "0.8.3",
|
||||||
"mquery": "3.2.5",
|
"mquery": "3.2.5",
|
||||||
"ms": "2.1.2",
|
"ms": "2.1.2",
|
||||||
|
"optional-require": "1.0.x",
|
||||||
"regexp-clone": "1.0.0",
|
"regexp-clone": "1.0.0",
|
||||||
"safe-buffer": "5.2.1",
|
"safe-buffer": "5.2.1",
|
||||||
"sift": "7.0.1",
|
"sift": "13.5.2",
|
||||||
"sliced": "1.0.1"
|
"sliced": "1.0.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=4.0.0"
|
"node": ">=4.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/mongoose"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mongoose-autopopulate": {
|
"node_modules/mongoose-autopopulate": {
|
||||||
@ -451,24 +457,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
|
||||||
"integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
|
"integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
|
||||||
},
|
},
|
||||||
"node_modules/mongoose/node_modules/mongodb": {
|
|
||||||
"version": "3.6.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.5.tgz",
|
|
||||||
"integrity": "sha512-mQlYKw1iGbvJJejcPuyTaytq0xxlYbIoVDm2FODR+OHxyEiMR021vc32bTvamgBjCswsD54XIRwhg3yBaWqJjg==",
|
|
||||||
"dependencies": {
|
|
||||||
"bl": "^2.2.1",
|
|
||||||
"bson": "^1.1.4",
|
|
||||||
"denque": "^1.4.1",
|
|
||||||
"require_optional": "^1.0.1",
|
|
||||||
"safe-buffer": "^5.1.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"saslprep": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/mpath": {
|
"node_modules/mpath": {
|
||||||
"version": "0.8.3",
|
"version": "0.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz",
|
||||||
@ -565,15 +553,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
|
||||||
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
|
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
|
||||||
},
|
},
|
||||||
"node_modules/require_optional": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
|
|
||||||
"dependencies": {
|
|
||||||
"resolve-from": "^2.0.0",
|
|
||||||
"semver": "^5.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/require-from-string": {
|
"node_modules/require-from-string": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
||||||
@ -587,14 +566,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
||||||
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
||||||
},
|
},
|
||||||
"node_modules/resolve-from": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/safe-buffer": {
|
"node_modules/safe-buffer": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
@ -621,9 +592,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/sift": {
|
"node_modules/sift": {
|
||||||
"version": "7.0.1",
|
"version": "13.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz",
|
||||||
"integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
|
"integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA=="
|
||||||
},
|
},
|
||||||
"node_modules/sliced": {
|
"node_modules/sliced": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
@ -1016,9 +987,9 @@
|
|||||||
"integrity": "sha512-kNdwKWXh1hM8RdNqW2BIHsqD6fYN9RV27M+0uQF1pGF1yLKVc+xIv1VB8WEN1HxQ22N8Rj9sdEezOX2yBpsMZA=="
|
"integrity": "sha512-kNdwKWXh1hM8RdNqW2BIHsqD6fYN9RV27M+0uQF1pGF1yLKVc+xIv1VB8WEN1HxQ22N8Rj9sdEezOX2yBpsMZA=="
|
||||||
},
|
},
|
||||||
"mongodb": {
|
"mongodb": {
|
||||||
"version": "3.6.9",
|
"version": "3.6.11",
|
||||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.9.tgz",
|
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.11.tgz",
|
||||||
"integrity": "sha512-1nSCKgSunzn/CXwgOWgbPHUWOO5OfERcuOWISmqd610jn0s8BU9K4879iJVabqgpPPbA6hO7rG48eq+fGED3Mg==",
|
"integrity": "sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"bl": "^2.2.1",
|
"bl": "^2.2.1",
|
||||||
"bson": "^1.1.4",
|
"bson": "^1.1.4",
|
||||||
@ -1029,37 +1000,23 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mongoose": {
|
"mongoose": {
|
||||||
"version": "5.12.3",
|
"version": "5.13.7",
|
||||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.3.tgz",
|
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.7.tgz",
|
||||||
"integrity": "sha512-frsSR9yeldaRpSUeTegXCSB0Tu5UGq8sHuHBuEV31Jk3COyxlKFQPL7UsdMhxPUCmk74FpOYSmNwxhWBEqgzQg==",
|
"integrity": "sha512-ADIvftZ+KfoTALMZ0n8HvBlezFhcUd73hQaHQDwQ+3X+JZlqE47fUy9yhFZ2SjT+qzmuaCcIXCfhewIc38t2fQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/mongodb": "^3.5.27",
|
"@types/mongodb": "^3.5.27",
|
||||||
"bson": "^1.1.4",
|
"bson": "^1.1.4",
|
||||||
"kareem": "2.3.2",
|
"kareem": "2.3.2",
|
||||||
"mongodb": "3.6.5",
|
"mongodb": "3.6.11",
|
||||||
"mongoose-legacy-pluralize": "1.0.2",
|
"mongoose-legacy-pluralize": "1.0.2",
|
||||||
"mpath": "0.8.3",
|
"mpath": "0.8.3",
|
||||||
"mquery": "3.2.5",
|
"mquery": "3.2.5",
|
||||||
"ms": "2.1.2",
|
"ms": "2.1.2",
|
||||||
|
"optional-require": "1.0.x",
|
||||||
"regexp-clone": "1.0.0",
|
"regexp-clone": "1.0.0",
|
||||||
"safe-buffer": "5.2.1",
|
"safe-buffer": "5.2.1",
|
||||||
"sift": "7.0.1",
|
"sift": "13.5.2",
|
||||||
"sliced": "1.0.1"
|
"sliced": "1.0.1"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"mongodb": {
|
|
||||||
"version": "3.6.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.5.tgz",
|
|
||||||
"integrity": "sha512-mQlYKw1iGbvJJejcPuyTaytq0xxlYbIoVDm2FODR+OHxyEiMR021vc32bTvamgBjCswsD54XIRwhg3yBaWqJjg==",
|
|
||||||
"requires": {
|
|
||||||
"bl": "^2.2.1",
|
|
||||||
"bson": "^1.1.4",
|
|
||||||
"denque": "^1.4.1",
|
|
||||||
"require_optional": "^1.0.1",
|
|
||||||
"safe-buffer": "^5.1.2",
|
|
||||||
"saslprep": "^1.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mongoose-autopopulate": {
|
"mongoose-autopopulate": {
|
||||||
@ -1160,15 +1117,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
|
||||||
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
|
"integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
|
||||||
},
|
},
|
||||||
"require_optional": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
|
|
||||||
"requires": {
|
|
||||||
"resolve-from": "^2.0.0",
|
|
||||||
"semver": "^5.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"require-from-string": {
|
"require-from-string": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
||||||
@ -1179,11 +1127,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
||||||
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
||||||
},
|
},
|
||||||
"resolve-from": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
|
|
||||||
},
|
|
||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
@ -1204,9 +1147,9 @@
|
|||||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||||
},
|
},
|
||||||
"sift": {
|
"sift": {
|
||||||
"version": "7.0.1",
|
"version": "13.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz",
|
||||||
"integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
|
"integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA=="
|
||||||
},
|
},
|
||||||
"sliced": {
|
"sliced": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "@fosscord/server-util",
|
"name": "@fosscord/util",
|
||||||
"version": "1.3.52",
|
"version": "1.3.52",
|
||||||
"description": "Utility functions for the all server repositories",
|
"description": "Utility functions and database models for fosscord",
|
||||||
"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",
|
||||||
"build": "tsc -b ."
|
"build": "tsc -b ."
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -36,7 +37,7 @@
|
|||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"missing-native-js-functions": "^1.2.2",
|
"missing-native-js-functions": "^1.2.2",
|
||||||
"mongodb": "^3.6.9",
|
"mongodb": "^3.6.9",
|
||||||
"mongoose": "^5.12.3",
|
"mongoose": "^5.13.7",
|
||||||
"mongoose-autopopulate": "^0.12.3",
|
"mongoose-autopopulate": "^0.12.3",
|
||||||
"typescript": "^4.1.3"
|
"typescript": "^4.1.3"
|
||||||
},
|
},
|
||||||
|
@ -12,6 +12,9 @@ type UpdateAggregationStage =
|
|||||||
type EnforceDocument<T, TMethods> = T extends Document ? T : T & Document & TMethods;
|
type EnforceDocument<T, TMethods> = T extends Document ? T : T & Document & TMethods;
|
||||||
|
|
||||||
declare module "mongoose" {
|
declare module "mongoose" {
|
||||||
|
interface SchemaOptions {
|
||||||
|
removeResponse?: string[];
|
||||||
|
}
|
||||||
interface Model<T, TQueryHelpers = {}, TMethods = {}> {
|
interface Model<T, TQueryHelpers = {}, TMethods = {}> {
|
||||||
// removed null -> always return document -> throw error if it doesn't exist
|
// removed null -> always return document -> throw error if it doesn't exist
|
||||||
findOne(
|
findOne(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Schema, model, Types, Document } from "mongoose";
|
import { Schema, model, Types, Document } from "mongoose";
|
||||||
import "missing-native-js-functions";
|
import "missing-native-js-functions";
|
||||||
import db, { MongooseCache } from "./Database";
|
import db from "./Database";
|
||||||
import { Snowflake } from "./Snowflake";
|
import { Snowflake } from "./Snowflake";
|
||||||
import crypto from "crypto";
|
import crypto from "crypto";
|
||||||
|
|
||||||
@ -15,6 +15,7 @@ export default {
|
|||||||
return config as DefaultOptions;
|
return config as DefaultOptions;
|
||||||
},
|
},
|
||||||
set: function set(val: any) {
|
set: function set(val: any) {
|
||||||
|
config = val.merge(config);
|
||||||
return db.collection("config").updateOne({}, { $set: val }, { upsert: true });
|
return db.collection("config").updateOne({}, { $set: val }, { upsert: true });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -14,6 +14,9 @@ const connection = mongoose.createConnection(uri, {
|
|||||||
useFindAndModify: false,
|
useFindAndModify: false,
|
||||||
});
|
});
|
||||||
console.log(`[Database] connect: mongodb://${url.username}@${url.host}${url.pathname}${url.search}`);
|
console.log(`[Database] connect: mongodb://${url.username}@${url.host}${url.pathname}${url.search}`);
|
||||||
|
connection.once("open", () => {
|
||||||
|
console.log("[Database] connected");
|
||||||
|
});
|
||||||
|
|
||||||
export default <Connection>connection;
|
export default <Connection>connection;
|
||||||
|
|
||||||
|
94
util/src/util/Event.ts
Normal file
94
util/src/util/Event.ts
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
import { Channel, ConsumeMessage } from "amqplib";
|
||||||
|
import { EVENT, Event, EventModel } from "../models";
|
||||||
|
import { RabbitMQ } from "./RabbitMQ";
|
||||||
|
import EventEmitter from "events";
|
||||||
|
const events = new EventEmitter();
|
||||||
|
|
||||||
|
export async function emitEvent(payload: Omit<Event, "created_at">) {
|
||||||
|
const id = (payload.channel_id || payload.user_id || payload.guild_id) as string;
|
||||||
|
if (!id) console.error("event doesn't contain any id", payload);
|
||||||
|
|
||||||
|
if (RabbitMQ.connection) {
|
||||||
|
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 {
|
||||||
|
events.emit(id, payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function initEvent() {
|
||||||
|
await RabbitMQ.init(); // does nothing if rabbitmq is not setup
|
||||||
|
if (RabbitMQ.connection) {
|
||||||
|
} else {
|
||||||
|
// use event emitter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface EventOpts extends Event {
|
||||||
|
acknowledge?: Function;
|
||||||
|
channel?: Channel;
|
||||||
|
cancel: Function;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ListenEventOpts {
|
||||||
|
channel?: Channel;
|
||||||
|
acknowledge?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function listenEvent(event: string, callback: (event: EventOpts) => any, opts?: ListenEventOpts) {
|
||||||
|
if (RabbitMQ.connection) {
|
||||||
|
// @ts-ignore
|
||||||
|
return rabbitListen(opts?.channel || RabbitMQ.channel, event, callback, { acknowledge: opts?.acknowledge });
|
||||||
|
} else {
|
||||||
|
const cancel = () => events.removeListener(event, callback);
|
||||||
|
events.addListener(event, (opts) => callback({ ...opts, cancel }));
|
||||||
|
|
||||||
|
return cancel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function rabbitListen(
|
||||||
|
channel: Channel,
|
||||||
|
id: string,
|
||||||
|
callback: (event: EventOpts) => any,
|
||||||
|
opts?: { acknowledge?: boolean }
|
||||||
|
) {
|
||||||
|
await channel.assertExchange(id, "fanout", { durable: false });
|
||||||
|
const q = await channel.assertQueue("", { exclusive: true, autoDelete: true });
|
||||||
|
|
||||||
|
const cancel = () => {
|
||||||
|
channel.cancel(q.queue);
|
||||||
|
channel.unbindQueue(q.queue, id, "");
|
||||||
|
};
|
||||||
|
|
||||||
|
channel.bindQueue(q.queue, id, "");
|
||||||
|
channel.consume(
|
||||||
|
q.queue,
|
||||||
|
(opts) => {
|
||||||
|
if (!opts) return;
|
||||||
|
|
||||||
|
const data = JSON.parse(opts.content.toString());
|
||||||
|
const event = opts.properties.type as EVENT;
|
||||||
|
|
||||||
|
callback({
|
||||||
|
event,
|
||||||
|
data,
|
||||||
|
acknowledge() {
|
||||||
|
channel.ack(opts);
|
||||||
|
},
|
||||||
|
channel,
|
||||||
|
cancel,
|
||||||
|
});
|
||||||
|
// rabbitCh.ack(opts);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
noAck: !opts?.acknowledge,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return cancel;
|
||||||
|
}
|
@ -7,3 +7,4 @@ export * from "./Snowflake";
|
|||||||
export * from "./UserFlags";
|
export * from "./UserFlags";
|
||||||
export * from "./toBigInt";
|
export * from "./toBigInt";
|
||||||
export * from "./RabbitMQ";
|
export * from "./RabbitMQ";
|
||||||
|
export * from "./Event";
|
||||||
|
Loading…
Reference in New Issue
Block a user