mirror of
https://github.com/FoxxMD/context-mod.git
synced 2026-01-14 16:08:02 -05:00
Compare commits
3 Commits
master
...
redisCache
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e364c3e28 | ||
|
|
acd4b54d8e | ||
|
|
19f4ff0b53 |
274
package-lock.json
generated
274
package-lock.json
generated
@@ -29,7 +29,7 @@
|
|||||||
"autolinker": "^3.14.3",
|
"autolinker": "^3.14.3",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"cache-manager": "^3.4.4",
|
"cache-manager": "^3.4.4",
|
||||||
"cache-manager-redis-store": "^2.0.0",
|
"cache-manager-redis-store": "^3.0.1",
|
||||||
"commander": "^8.0.0",
|
"commander": "^8.0.0",
|
||||||
"comment-json": "^4.1.1",
|
"comment-json": "^4.1.1",
|
||||||
"connect-typeorm": "^2.0.0",
|
"connect-typeorm": "^2.0.0",
|
||||||
@@ -95,7 +95,6 @@
|
|||||||
"@tsconfig/node14": "^1.0.0",
|
"@tsconfig/node14": "^1.0.0",
|
||||||
"@types/async": "^3.2.7",
|
"@types/async": "^3.2.7",
|
||||||
"@types/cache-manager": "^3.4.2",
|
"@types/cache-manager": "^3.4.2",
|
||||||
"@types/cache-manager-redis-store": "^2.0.0",
|
|
||||||
"@types/chai": "^4.3.0",
|
"@types/chai": "^4.3.0",
|
||||||
"@types/chai-as-promised": "^7.1.5",
|
"@types/chai-as-promised": "^7.1.5",
|
||||||
"@types/cookie-parser": "^1.4.2",
|
"@types/cookie-parser": "^1.4.2",
|
||||||
@@ -138,7 +137,7 @@
|
|||||||
"typescript-json-schema": "~0.53"
|
"typescript-json-schema": "~0.53"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=16.18.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"better-sqlite3": "^7.5.0",
|
"better-sqlite3": "^7.5.0",
|
||||||
@@ -979,6 +978,59 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@nlpjs/slot/-/slot-4.22.17.tgz",
|
"resolved": "https://registry.npmjs.org/@nlpjs/slot/-/slot-4.22.17.tgz",
|
||||||
"integrity": "sha512-cNYcxf9DKB+fnRa2NxT5wbWq5j57R1WCTXLWI/1Cyycr227IP7GN7qaD4RbkzotBFFB8wm63UHod9frzmuiXxg=="
|
"integrity": "sha512-cNYcxf9DKB+fnRa2NxT5wbWq5j57R1WCTXLWI/1Cyycr227IP7GN7qaD4RbkzotBFFB8wm63UHod9frzmuiXxg=="
|
||||||
},
|
},
|
||||||
|
"node_modules/@redis/bloom": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@redis/client": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@redis/client": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/client/-/client-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-XCFV60nloXAefDsPnYMjHGtvbtHR8fV5Om8cQ0JYqTNbWcQo/4AryzJ2luRj4blveWazRK/j40gES8M7Cp6cfQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"cluster-key-slot": "1.1.0",
|
||||||
|
"generic-pool": "3.8.2",
|
||||||
|
"yallist": "4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@redis/graph": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@redis/client": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@redis/json": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@redis/client": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@redis/search": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@redis/client": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@redis/time-series": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@redis/client": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@sindresorhus/is": {
|
"node_modules/@sindresorhus/is": {
|
||||||
"version": "4.6.0",
|
"version": "4.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
|
||||||
@@ -1163,16 +1215,6 @@
|
|||||||
"integrity": "sha512-71aBXoFYXZW4TnDHHH8gExw2lS28BZaWeKefgsiJI7QYZeJfUEbMKw6CQtzGjlYQcGIWwB76hcCrkVA3YHSvsw==",
|
"integrity": "sha512-71aBXoFYXZW4TnDHHH8gExw2lS28BZaWeKefgsiJI7QYZeJfUEbMKw6CQtzGjlYQcGIWwB76hcCrkVA3YHSvsw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/cache-manager-redis-store": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/cache-manager-redis-store/-/cache-manager-redis-store-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-8QuccvcPieh1xM/5kReE76SfdcIdEB0ePc+54ah/NBuK2eG+6O50SX4WKoJX81UxGdW3sh/WlDaDNqjnqxWNsA==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"@types/cache-manager": "*",
|
|
||||||
"@types/redis": "^2.8.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@types/cacheable-request": {
|
"node_modules/@types/cacheable-request": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
|
||||||
@@ -1456,15 +1498,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
|
||||||
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
|
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/redis": {
|
|
||||||
"version": "2.8.32",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.32.tgz",
|
|
||||||
"integrity": "sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"@types/node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@types/responselike": {
|
"node_modules/@types/responselike": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
|
||||||
@@ -2350,14 +2383,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/cache-manager-redis-store": {
|
"node_modules/cache-manager-redis-store": {
|
||||||
"version": "2.0.0",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/cache-manager-redis-store/-/cache-manager-redis-store-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cache-manager-redis-store/-/cache-manager-redis-store-3.0.1.tgz",
|
||||||
"integrity": "sha512-bWLWlUg6nCYHiJLCCYxY2MgvwvKnvlWwrbuynrzpjEIhfArD2GC9LtutIHFEPeyGVQN6C+WEw+P3r+BFBwhswg==",
|
"integrity": "sha512-o560kw+dFqusC9lQJhcm6L2F2fMKobJ5af+FoR2PdnMVdpQ3f3Bz6qzvObTGyvoazQJxjQNWgMQeChP4vRTuXQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"redis": "^3.0.2"
|
"redis": "^4.3.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 8.3"
|
"node": ">= 16.18.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/cacheable-lookup": {
|
"node_modules/cacheable-lookup": {
|
||||||
@@ -2641,6 +2674,14 @@
|
|||||||
"mimic-response": "^1.0.0"
|
"mimic-response": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/cluster-key-slot": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/code-point-at": {
|
"node_modules/code-point-at": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||||
@@ -3210,14 +3251,6 @@
|
|||||||
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
|
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/denque": {
|
|
||||||
"version": "1.5.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
|
|
||||||
"integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/depd": {
|
"node_modules/depd": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
||||||
@@ -4166,6 +4199,14 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/generic-pool": {
|
||||||
|
"version": "3.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz",
|
||||||
|
"integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/gensync": {
|
"node_modules/gensync": {
|
||||||
"version": "1.0.0-beta.2",
|
"version": "1.0.0-beta.2",
|
||||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
||||||
@@ -7798,45 +7839,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/redis": {
|
"node_modules/redis": {
|
||||||
"version": "3.1.2",
|
"version": "4.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/redis/-/redis-4.3.1.tgz",
|
||||||
"integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==",
|
"integrity": "sha512-cM7yFU5CA6zyCF7N/+SSTcSJQSRMEKN0k0Whhu6J7n9mmXRoXugfWDBo5iOzGwABmsWKSwGPTU5J4Bxbl+0mrA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"denque": "^1.5.0",
|
"@redis/bloom": "1.0.2",
|
||||||
"redis-commands": "^1.7.0",
|
"@redis/client": "1.3.0",
|
||||||
"redis-errors": "^1.2.0",
|
"@redis/graph": "1.0.1",
|
||||||
"redis-parser": "^3.0.0"
|
"@redis/json": "1.0.4",
|
||||||
},
|
"@redis/search": "1.1.0",
|
||||||
"engines": {
|
"@redis/time-series": "1.0.3"
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/node-redis"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/redis-commands": {
|
|
||||||
"version": "1.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
|
|
||||||
"integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ=="
|
|
||||||
},
|
|
||||||
"node_modules/redis-errors": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/redis-parser": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=",
|
|
||||||
"dependencies": {
|
|
||||||
"redis-errors": "^1.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/reflect-metadata": {
|
"node_modules/reflect-metadata": {
|
||||||
@@ -11115,6 +11127,46 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@nlpjs/slot/-/slot-4.22.17.tgz",
|
"resolved": "https://registry.npmjs.org/@nlpjs/slot/-/slot-4.22.17.tgz",
|
||||||
"integrity": "sha512-cNYcxf9DKB+fnRa2NxT5wbWq5j57R1WCTXLWI/1Cyycr227IP7GN7qaD4RbkzotBFFB8wm63UHod9frzmuiXxg=="
|
"integrity": "sha512-cNYcxf9DKB+fnRa2NxT5wbWq5j57R1WCTXLWI/1Cyycr227IP7GN7qaD4RbkzotBFFB8wm63UHod9frzmuiXxg=="
|
||||||
},
|
},
|
||||||
|
"@redis/bloom": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
|
"@redis/client": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/client/-/client-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-XCFV60nloXAefDsPnYMjHGtvbtHR8fV5Om8cQ0JYqTNbWcQo/4AryzJ2luRj4blveWazRK/j40gES8M7Cp6cfQ==",
|
||||||
|
"requires": {
|
||||||
|
"cluster-key-slot": "1.1.0",
|
||||||
|
"generic-pool": "3.8.2",
|
||||||
|
"yallist": "4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@redis/graph": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
|
"@redis/json": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
|
"@redis/search": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
|
"@redis/time-series": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
"@sindresorhus/is": {
|
"@sindresorhus/is": {
|
||||||
"version": "4.6.0",
|
"version": "4.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
|
||||||
@@ -11214,16 +11266,6 @@
|
|||||||
"integrity": "sha512-71aBXoFYXZW4TnDHHH8gExw2lS28BZaWeKefgsiJI7QYZeJfUEbMKw6CQtzGjlYQcGIWwB76hcCrkVA3YHSvsw==",
|
"integrity": "sha512-71aBXoFYXZW4TnDHHH8gExw2lS28BZaWeKefgsiJI7QYZeJfUEbMKw6CQtzGjlYQcGIWwB76hcCrkVA3YHSvsw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/cache-manager-redis-store": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/cache-manager-redis-store/-/cache-manager-redis-store-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-8QuccvcPieh1xM/5kReE76SfdcIdEB0ePc+54ah/NBuK2eG+6O50SX4WKoJX81UxGdW3sh/WlDaDNqjnqxWNsA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@types/cache-manager": "*",
|
|
||||||
"@types/redis": "^2.8.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@types/cacheable-request": {
|
"@types/cacheable-request": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
|
||||||
@@ -11507,15 +11549,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
|
||||||
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
|
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
|
||||||
},
|
},
|
||||||
"@types/redis": {
|
|
||||||
"version": "2.8.32",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.32.tgz",
|
|
||||||
"integrity": "sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@types/node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@types/responselike": {
|
"@types/responselike": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
|
||||||
@@ -12253,11 +12286,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cache-manager-redis-store": {
|
"cache-manager-redis-store": {
|
||||||
"version": "2.0.0",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/cache-manager-redis-store/-/cache-manager-redis-store-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cache-manager-redis-store/-/cache-manager-redis-store-3.0.1.tgz",
|
||||||
"integrity": "sha512-bWLWlUg6nCYHiJLCCYxY2MgvwvKnvlWwrbuynrzpjEIhfArD2GC9LtutIHFEPeyGVQN6C+WEw+P3r+BFBwhswg==",
|
"integrity": "sha512-o560kw+dFqusC9lQJhcm6L2F2fMKobJ5af+FoR2PdnMVdpQ3f3Bz6qzvObTGyvoazQJxjQNWgMQeChP4vRTuXQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"redis": "^3.0.2"
|
"redis": "^4.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cacheable-lookup": {
|
"cacheable-lookup": {
|
||||||
@@ -12470,6 +12503,11 @@
|
|||||||
"mimic-response": "^1.0.0"
|
"mimic-response": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"cluster-key-slot": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw=="
|
||||||
|
},
|
||||||
"code-point-at": {
|
"code-point-at": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||||
@@ -12933,11 +12971,6 @@
|
|||||||
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
|
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"denque": {
|
|
||||||
"version": "1.5.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
|
|
||||||
"integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
|
|
||||||
},
|
|
||||||
"depd": {
|
"depd": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
||||||
@@ -13675,6 +13708,11 @@
|
|||||||
"json-bigint": "^1.0.0"
|
"json-bigint": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"generic-pool": {
|
||||||
|
"version": "3.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz",
|
||||||
|
"integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg=="
|
||||||
|
},
|
||||||
"gensync": {
|
"gensync": {
|
||||||
"version": "1.0.0-beta.2",
|
"version": "1.0.0-beta.2",
|
||||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
||||||
@@ -16455,32 +16493,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"redis": {
|
"redis": {
|
||||||
"version": "3.1.2",
|
"version": "4.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/redis/-/redis-4.3.1.tgz",
|
||||||
"integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==",
|
"integrity": "sha512-cM7yFU5CA6zyCF7N/+SSTcSJQSRMEKN0k0Whhu6J7n9mmXRoXugfWDBo5iOzGwABmsWKSwGPTU5J4Bxbl+0mrA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"denque": "^1.5.0",
|
"@redis/bloom": "1.0.2",
|
||||||
"redis-commands": "^1.7.0",
|
"@redis/client": "1.3.0",
|
||||||
"redis-errors": "^1.2.0",
|
"@redis/graph": "1.0.1",
|
||||||
"redis-parser": "^3.0.0"
|
"@redis/json": "1.0.4",
|
||||||
}
|
"@redis/search": "1.1.0",
|
||||||
},
|
"@redis/time-series": "1.0.3"
|
||||||
"redis-commands": {
|
|
||||||
"version": "1.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
|
|
||||||
"integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ=="
|
|
||||||
},
|
|
||||||
"redis-errors": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60="
|
|
||||||
},
|
|
||||||
"redis-parser": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=",
|
|
||||||
"requires": {
|
|
||||||
"redis-errors": "^1.0.0"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"reflect-metadata": {
|
"reflect-metadata": {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
"initMigration": "npm run typeorm -- migration:generate -t 1642180264563 -d ormconfig.js \"src/Common/Migrations/Database/init\""
|
"initMigration": "npm run typeorm -- migration:generate -t 1642180264563 -d ormconfig.js \"src/Common/Migrations/Database/init\""
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=16.18.0"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
"autolinker": "^3.14.3",
|
"autolinker": "^3.14.3",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"cache-manager": "^3.4.4",
|
"cache-manager": "^3.4.4",
|
||||||
"cache-manager-redis-store": "^2.0.0",
|
"cache-manager-redis-store": "^3.0.1",
|
||||||
"commander": "^8.0.0",
|
"commander": "^8.0.0",
|
||||||
"comment-json": "^4.1.1",
|
"comment-json": "^4.1.1",
|
||||||
"connect-typeorm": "^2.0.0",
|
"connect-typeorm": "^2.0.0",
|
||||||
@@ -115,7 +115,6 @@
|
|||||||
"@tsconfig/node14": "^1.0.0",
|
"@tsconfig/node14": "^1.0.0",
|
||||||
"@types/async": "^3.2.7",
|
"@types/async": "^3.2.7",
|
||||||
"@types/cache-manager": "^3.4.2",
|
"@types/cache-manager": "^3.4.2",
|
||||||
"@types/cache-manager-redis-store": "^2.0.0",
|
|
||||||
"@types/chai": "^4.3.0",
|
"@types/chai": "^4.3.0",
|
||||||
"@types/chai-as-promised": "^7.1.5",
|
"@types/chai-as-promised": "^7.1.5",
|
||||||
"@types/cookie-parser": "^1.4.2",
|
"@types/cookie-parser": "^1.4.2",
|
||||||
|
|||||||
47
src/Common/Cache/index.ts
Normal file
47
src/Common/Cache/index.ts
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import {CacheOptions} from "../interfaces";
|
||||||
|
import cacheManager, {Cache} from "cache-manager";
|
||||||
|
import {redisStore} from "cache-manager-redis-store";
|
||||||
|
import {create as createMemoryStore} from "../../Utils/memoryStore";
|
||||||
|
import {CacheProvider} from "../Infrastructure/Atomic";
|
||||||
|
import {cacheOptDefaults} from "../defaults";
|
||||||
|
|
||||||
|
export const buildCacheOptionsFromProvider = (provider: CacheProvider | any): CacheOptions => {
|
||||||
|
if (typeof provider === 'string') {
|
||||||
|
return {
|
||||||
|
store: provider as CacheProvider,
|
||||||
|
...cacheOptDefaults
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
store: 'memory',
|
||||||
|
...cacheOptDefaults,
|
||||||
|
...provider,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export const createCacheManager = async (options: CacheOptions): Promise<Cache> => {
|
||||||
|
const {store, max, ttl = 60, host = 'localhost', port, auth_pass, db, ...rest} = options;
|
||||||
|
switch (store) {
|
||||||
|
case 'none':
|
||||||
|
return cacheManager.caching({store: 'none', max, ttl});
|
||||||
|
case 'redis':
|
||||||
|
const rStore = await redisStore(
|
||||||
|
{
|
||||||
|
socket: {
|
||||||
|
host,
|
||||||
|
port
|
||||||
|
},
|
||||||
|
password: auth_pass,
|
||||||
|
database: db,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return cacheManager.caching({
|
||||||
|
store: rStore,
|
||||||
|
ttl,
|
||||||
|
...rest,
|
||||||
|
});
|
||||||
|
case 'memory':
|
||||||
|
default:
|
||||||
|
//return cacheManager.caching({store: 'memory', max, ttl});
|
||||||
|
return cacheManager.caching({store: {create: createMemoryStore}, max, ttl, shouldCloneBeforeSet: false});
|
||||||
|
}
|
||||||
|
}
|
||||||
6
src/Common/Typings/support.d.ts
vendored
6
src/Common/Typings/support.d.ts
vendored
@@ -163,3 +163,9 @@ declare module 'wink-sentiment' {
|
|||||||
|
|
||||||
export default sentiment;
|
export default sentiment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare module 'cache-manager-redis-store' {
|
||||||
|
import {RedisClientOptions} from "@redis/client";
|
||||||
|
import {Cache, CachingConfig} from "cache-manager";
|
||||||
|
export async function redisStore(config: RedisClientOptions & Partial<CachingConfig>): Cache;
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,10 +14,8 @@ import {
|
|||||||
asActivity,
|
asActivity,
|
||||||
asSubmission,
|
asSubmission,
|
||||||
asUserNoteCriteria,
|
asUserNoteCriteria,
|
||||||
buildCacheOptionsFromProvider,
|
|
||||||
buildCachePrefix,
|
buildCachePrefix,
|
||||||
cacheStats,
|
cacheStats,
|
||||||
createCacheManager,
|
|
||||||
escapeRegex,
|
escapeRegex,
|
||||||
FAIL,
|
FAIL,
|
||||||
fetchExternalResult,
|
fetchExternalResult,
|
||||||
@@ -173,6 +171,7 @@ import ConfigParseError from "../Utils/ConfigParseError";
|
|||||||
import {ActivityReport} from "../Common/Entities/ActivityReport";
|
import {ActivityReport} from "../Common/Entities/ActivityReport";
|
||||||
import {ActionResultEntity} from "../Common/Entities/ActionResultEntity";
|
import {ActionResultEntity} from "../Common/Entities/ActionResultEntity";
|
||||||
import {ActivitySource} from "../Common/ActivitySource";
|
import {ActivitySource} from "../Common/ActivitySource";
|
||||||
|
import {buildCacheOptionsFromProvider, createCacheManager} from "../Common/Cache";
|
||||||
|
|
||||||
export const DEFAULT_FOOTER = '\r\n*****\r\nThis action was performed by [a bot.]({{botLink}}) Mention a moderator or [send a modmail]({{modmailLink}}) if you have any ideas, questions, or concerns about this action.';
|
export const DEFAULT_FOOTER = '\r\n*****\r\nThis action was performed by [a bot.]({{botLink}}) Mention a moderator or [send a modmail]({{modmailLink}}) if you have any ideas, questions, or concerns about this action.';
|
||||||
|
|
||||||
@@ -3545,7 +3544,7 @@ export class BotResourcesManager {
|
|||||||
authorTTL: number = 10000;
|
authorTTL: number = 10000;
|
||||||
enabled: boolean = true;
|
enabled: boolean = true;
|
||||||
modStreams: Map<string, SPoll<Snoowrap.Submission | Snoowrap.Comment>> = new Map();
|
modStreams: Map<string, SPoll<Snoowrap.Submission | Snoowrap.Comment>> = new Map();
|
||||||
defaultCache: Cache;
|
defaultCache: Promise<Cache>;
|
||||||
defaultCacheConfig: StrongCache
|
defaultCacheConfig: StrongCache
|
||||||
defaultCacheMigrated: boolean = false;
|
defaultCacheMigrated: boolean = false;
|
||||||
cacheType: string = 'none';
|
cacheType: string = 'none';
|
||||||
@@ -3649,7 +3648,7 @@ export class BotResourcesManager {
|
|||||||
// });
|
// });
|
||||||
|
|
||||||
let opts: SubredditResourceOptions = {
|
let opts: SubredditResourceOptions = {
|
||||||
cache: this.defaultCache,
|
cache: await this.defaultCache,
|
||||||
cacheType: this.cacheType,
|
cacheType: this.cacheType,
|
||||||
cacheSettingsHash: hash,
|
cacheSettingsHash: hash,
|
||||||
ttl: this.ttlDefaults,
|
ttl: this.ttlDefaults,
|
||||||
@@ -3680,7 +3679,7 @@ export class BotResourcesManager {
|
|||||||
trueProvider.prefix = subPrefix;
|
trueProvider.prefix = subPrefix;
|
||||||
const eventsMax = this.actionedEventsMaxDefault !== undefined ? Math.min(actionedEventsMax, this.actionedEventsMaxDefault) : actionedEventsMax;
|
const eventsMax = this.actionedEventsMaxDefault !== undefined ? Math.min(actionedEventsMax, this.actionedEventsMaxDefault) : actionedEventsMax;
|
||||||
opts = {
|
opts = {
|
||||||
cache: createCacheManager(trueProvider),
|
cache: await createCacheManager(trueProvider),
|
||||||
actionedEventsMax: eventsMax,
|
actionedEventsMax: eventsMax,
|
||||||
cacheType: trueProvider.store,
|
cacheType: trueProvider.store,
|
||||||
cacheSettingsHash: hash,
|
cacheSettingsHash: hash,
|
||||||
@@ -3695,7 +3694,7 @@ export class BotResourcesManager {
|
|||||||
await runMigrations(opts.cache, opts.logger, trueProvider.prefix);
|
await runMigrations(opts.cache, opts.logger, trueProvider.prefix);
|
||||||
}
|
}
|
||||||
} else if(!this.defaultCacheMigrated) {
|
} else if(!this.defaultCacheMigrated) {
|
||||||
await runMigrations(this.defaultCache, this.logger, opts.prefix);
|
await runMigrations(await this.defaultCache, this.logger, opts.prefix);
|
||||||
this.defaultCacheMigrated = true;
|
this.defaultCacheMigrated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3730,7 +3729,7 @@ export class BotResourcesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getPendingSubredditInvites(): Promise<(string[])> {
|
async getPendingSubredditInvites(): Promise<(string[])> {
|
||||||
const subredditNames = await this.defaultCache.get(`modInvites`);
|
const subredditNames = await (await this.defaultCache).get(`modInvites`);
|
||||||
if (subredditNames !== undefined && subredditNames !== null) {
|
if (subredditNames !== undefined && subredditNames !== null) {
|
||||||
return subredditNames as string[];
|
return subredditNames as string[];
|
||||||
}
|
}
|
||||||
@@ -3741,7 +3740,7 @@ export class BotResourcesManager {
|
|||||||
if(subreddit === null || subreddit === undefined || subreddit == '') {
|
if(subreddit === null || subreddit === undefined || subreddit == '') {
|
||||||
throw new CMError('Subreddit name cannot be empty');
|
throw new CMError('Subreddit name cannot be empty');
|
||||||
}
|
}
|
||||||
let subredditNames = await this.defaultCache.get(`modInvites`) as (string[] | undefined | null);
|
let subredditNames = await (await this.defaultCache).get(`modInvites`) as (string[] | undefined | null);
|
||||||
if (subredditNames === undefined || subredditNames === null) {
|
if (subredditNames === undefined || subredditNames === null) {
|
||||||
subredditNames = [];
|
subredditNames = [];
|
||||||
}
|
}
|
||||||
@@ -3751,22 +3750,22 @@ export class BotResourcesManager {
|
|||||||
throw new CMError(`An invite for the Subreddit '${subreddit}' already exists`);
|
throw new CMError(`An invite for the Subreddit '${subreddit}' already exists`);
|
||||||
}
|
}
|
||||||
subredditNames.push(cleanName);
|
subredditNames.push(cleanName);
|
||||||
await this.defaultCache.set(`modInvites`, subredditNames, {ttl: 0});
|
await (await this.defaultCache).set(`modInvites`, subredditNames, {ttl: 0});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async deletePendingSubredditInvite(subreddit: string): Promise<void> {
|
async deletePendingSubredditInvite(subreddit: string): Promise<void> {
|
||||||
let subredditNames = await this.defaultCache.get(`modInvites`) as (string[] | undefined | null);
|
let subredditNames = await (await this.defaultCache).get(`modInvites`) as (string[] | undefined | null);
|
||||||
if (subredditNames === undefined || subredditNames === null) {
|
if (subredditNames === undefined || subredditNames === null) {
|
||||||
subredditNames = [];
|
subredditNames = [];
|
||||||
}
|
}
|
||||||
subredditNames = subredditNames.filter(x => x.toLowerCase() !== subreddit.trim().toLowerCase());
|
subredditNames = subredditNames.filter(x => x.toLowerCase() !== subreddit.trim().toLowerCase());
|
||||||
await this.defaultCache.set(`modInvites`, subredditNames, {ttl: 0});
|
await (await this.defaultCache).set(`modInvites`, subredditNames, {ttl: 0});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async clearPendingSubredditInvites(): Promise<void> {
|
async clearPendingSubredditInvites(): Promise<void> {
|
||||||
await this.defaultCache.del(`modInvites`);
|
await (await this.defaultCache).del(`modInvites`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import {SessionOptions, Store} from "express-session";
|
import {SessionOptions, Store} from "express-session";
|
||||||
import {TypeormStore} from "connect-typeorm";
|
import {TypeormStore} from "connect-typeorm";
|
||||||
import {InviteData} from "../Common/interfaces";
|
import {InviteData} from "../Common/interfaces";
|
||||||
import {buildCachePrefix, createCacheManager, mergeArr} from "../../util";
|
import {buildCachePrefix, mergeArr} from "../../util";
|
||||||
import {Cache} from "cache-manager";
|
import {Cache} from "cache-manager";
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import CacheManagerStore from 'express-session-cache-manager'
|
import CacheManagerStore from 'express-session-cache-manager'
|
||||||
@@ -11,6 +11,7 @@ import {ClientSession} from "../../Common/WebEntities/ClientSession";
|
|||||||
import {Logger} from "winston";
|
import {Logger} from "winston";
|
||||||
import {WebSetting} from "../../Common/WebEntities/WebSetting";
|
import {WebSetting} from "../../Common/WebEntities/WebSetting";
|
||||||
import {ErrorWithCause} from "pony-cause";
|
import {ErrorWithCause} from "pony-cause";
|
||||||
|
import {createCacheManager} from "../../Common/Cache";
|
||||||
|
|
||||||
export interface CacheManagerStoreOptions {
|
export interface CacheManagerStoreOptions {
|
||||||
prefix?: string
|
prefix?: string
|
||||||
@@ -24,7 +25,7 @@ export type TypeormStoreOptions = Partial<SessionOptions & {
|
|||||||
}>;
|
}>;
|
||||||
|
|
||||||
interface IWebStorageProvider {
|
interface IWebStorageProvider {
|
||||||
createSessionStore(options?: CacheManagerStoreOptions | TypeormStoreOptions): Store
|
createSessionStore(options?: CacheManagerStoreOptions | TypeormStoreOptions): Promise<Store>
|
||||||
|
|
||||||
getSessionSecret(): Promise<string | undefined>
|
getSessionSecret(): Promise<string | undefined>
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ abstract class StorageProvider implements IWebStorageProvider {
|
|||||||
this.logger = logger.child({labels: ['Web', 'Storage', ...loggerLabels]}, mergeArr);
|
this.logger = logger.child({labels: ['Web', 'Storage', ...loggerLabels]}, mergeArr);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract createSessionStore(options?: CacheManagerStoreOptions | TypeormStoreOptions): Store;
|
abstract createSessionStore(options?: CacheManagerStoreOptions | TypeormStoreOptions): Promise<Store>;
|
||||||
|
|
||||||
abstract getSessionSecret(): Promise<string | undefined>;
|
abstract getSessionSecret(): Promise<string | undefined>;
|
||||||
|
|
||||||
@@ -57,24 +58,24 @@ abstract class StorageProvider implements IWebStorageProvider {
|
|||||||
|
|
||||||
export class CacheStorageProvider extends StorageProvider {
|
export class CacheStorageProvider extends StorageProvider {
|
||||||
|
|
||||||
protected cache: Cache;
|
protected cache: Promise<Cache>;
|
||||||
|
|
||||||
constructor(caching: CacheOptions & StorageProviderOptions) {
|
constructor(caching: CacheOptions & StorageProviderOptions) {
|
||||||
super(caching);
|
super(caching);
|
||||||
const {logger, invitesMaxAge, loggerLabels, ...restCache } = caching;
|
const {logger, invitesMaxAge, loggerLabels, ...restCache } = caching;
|
||||||
this.cache = createCacheManager({...restCache, prefix: buildCachePrefix(['web'])}) as Cache;
|
this.cache = createCacheManager({...restCache, prefix: buildCachePrefix(['web'])}) as Promise<Cache>;
|
||||||
this.logger.debug('Using CACHE');
|
this.logger.debug('Using CACHE');
|
||||||
if (caching.store === 'none') {
|
if (caching.store === 'none') {
|
||||||
this.logger.warn(`Using 'none' as cache provider means no one will be able to access the interface since sessions will never be persisted!`);
|
this.logger.warn(`Using 'none' as cache provider means no one will be able to access the interface since sessions will never be persisted!`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createSessionStore(options?: CacheManagerStoreOptions): Store {
|
async createSessionStore(options?: CacheManagerStoreOptions): Promise<Store> {
|
||||||
return new CacheManagerStore(this.cache, {prefix: 'sess:'});
|
return new CacheManagerStore((await this.cache), {prefix: 'sess:'});
|
||||||
}
|
}
|
||||||
|
|
||||||
async getSessionSecret() {
|
async getSessionSecret() {
|
||||||
const val = await this.cache.get(`sessionSecret`);
|
const val = await (await this.cache).get(`sessionSecret`);
|
||||||
if (val === null || val === undefined) {
|
if (val === null || val === undefined) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
@@ -82,7 +83,7 @@ export class CacheStorageProvider extends StorageProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async setSessionSecret(secret: string) {
|
async setSessionSecret(secret: string) {
|
||||||
await this.cache.set('sessionSecret', secret, {ttl: 0});
|
await (await this.cache).set('sessionSecret', secret, {ttl: 0});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -101,7 +102,7 @@ export class DatabaseStorageProvider extends StorageProvider {
|
|||||||
this.logger.debug('Using DATABASE');
|
this.logger.debug('Using DATABASE');
|
||||||
}
|
}
|
||||||
|
|
||||||
createSessionStore(options?: TypeormStoreOptions): Store {
|
async createSessionStore(options?: TypeormStoreOptions): Promise<Store> {
|
||||||
return new TypeormStore(options).connect(this.clientSessionRepo)
|
return new TypeormStore(options).connect(this.clientSessionRepo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
} from "../../Common/interfaces";
|
} from "../../Common/interfaces";
|
||||||
import {
|
import {
|
||||||
buildCachePrefix,
|
buildCachePrefix,
|
||||||
createCacheManager, defaultFormat, filterLogBySubreddit, filterCriteriaSummary, formatFilterData,
|
defaultFormat, filterLogBySubreddit, filterCriteriaSummary, formatFilterData,
|
||||||
formatLogLineToHtml, filterLogs, getUserAgent,
|
formatLogLineToHtml, filterLogs, getUserAgent,
|
||||||
intersect, isLogLineMinLevel,
|
intersect, isLogLineMinLevel,
|
||||||
LogEntry, parseInstanceLogInfoName, parseInstanceLogName, parseRedditEntity,
|
LogEntry, parseInstanceLogInfoName, parseInstanceLogName, parseRedditEntity,
|
||||||
@@ -64,6 +64,7 @@ import {
|
|||||||
InviteData, SubredditInviteDataPersisted
|
InviteData, SubredditInviteDataPersisted
|
||||||
} from "../Common/interfaces";
|
} from "../Common/interfaces";
|
||||||
import {open} from "fs/promises";
|
import {open} from "fs/promises";
|
||||||
|
import {createCacheManager} from "../../Common/Cache";
|
||||||
|
|
||||||
const emitter = new EventEmitter();
|
const emitter = new EventEmitter();
|
||||||
|
|
||||||
@@ -323,7 +324,7 @@ const webClient = async (options: OperatorConfigWithFileContext) => {
|
|||||||
cookie: {
|
cookie: {
|
||||||
maxAge: sessionMaxAge * 1000,
|
maxAge: sessionMaxAge * 1000,
|
||||||
},
|
},
|
||||||
store: sessionStoreProvider.createSessionStore(sessionStorage === 'database' ? {
|
store: await sessionStoreProvider.createSessionStore(sessionStorage === 'database' ? {
|
||||||
cleanupLimit: 2,
|
cleanupLimit: 2,
|
||||||
ttl: sessionMaxAge
|
ttl: sessionMaxAge
|
||||||
} : {}),
|
} : {}),
|
||||||
|
|||||||
53
src/util.ts
53
src/util.ts
@@ -14,7 +14,6 @@ import {
|
|||||||
ActionResult,
|
ActionResult,
|
||||||
ActivityDispatch,
|
ActivityDispatch,
|
||||||
ActivityDispatchConfig,
|
ActivityDispatchConfig,
|
||||||
CacheOptions,
|
|
||||||
CheckSummary,
|
CheckSummary,
|
||||||
ImageComparisonResult,
|
ImageComparisonResult,
|
||||||
ItemCritPropHelper,
|
ItemCritPropHelper,
|
||||||
@@ -35,11 +34,9 @@ import {
|
|||||||
} from "./Common/interfaces";
|
} from "./Common/interfaces";
|
||||||
import InvalidRegexError from "./Utils/InvalidRegexError";
|
import InvalidRegexError from "./Utils/InvalidRegexError";
|
||||||
import {accessSync, constants, promises} from "fs";
|
import {accessSync, constants, promises} from "fs";
|
||||||
import {cacheOptDefaults, VERSION} from "./Common/defaults";
|
import {VERSION} from "./Common/defaults";
|
||||||
import cacheManager, {Cache} from "cache-manager";
|
import cacheManager from "cache-manager";
|
||||||
import redisStore from "cache-manager-redis-store";
|
|
||||||
import Autolinker from 'autolinker';
|
import Autolinker from 'autolinker';
|
||||||
import {create as createMemoryStore} from './Utils/memoryStore';
|
|
||||||
import {LEVEL, MESSAGE} from "triple-beam";
|
import {LEVEL, MESSAGE} from "triple-beam";
|
||||||
import {Comment, PrivateMessage, RedditUser, Submission, Subreddit} from "snoowrap/dist/objects";
|
import {Comment, PrivateMessage, RedditUser, Submission, Subreddit} from "snoowrap/dist/objects";
|
||||||
import reRegExp from '@stdlib/regexp-regexp';
|
import reRegExp from '@stdlib/regexp-regexp';
|
||||||
@@ -71,9 +68,9 @@ import {
|
|||||||
UserNoteCriteria
|
UserNoteCriteria
|
||||||
} from "./Common/Infrastructure/Filters/FilterCriteria";
|
} from "./Common/Infrastructure/Filters/FilterCriteria";
|
||||||
import {
|
import {
|
||||||
ActivitySourceValue,
|
ActivitySourceData,
|
||||||
ActivitySourceTypes,
|
ActivitySourceTypes,
|
||||||
CacheProvider,
|
ActivitySourceValue,
|
||||||
ConfigFormat,
|
ConfigFormat,
|
||||||
DurationVal,
|
DurationVal,
|
||||||
ExternalUrlContext,
|
ExternalUrlContext,
|
||||||
@@ -81,13 +78,13 @@ import {
|
|||||||
ModUserNoteLabel,
|
ModUserNoteLabel,
|
||||||
modUserNoteLabels,
|
modUserNoteLabels,
|
||||||
RedditEntity,
|
RedditEntity,
|
||||||
RedditEntityType, RelativeDateTimeMatch,
|
RedditEntityType,
|
||||||
|
RelativeDateTimeMatch,
|
||||||
statFrequencies,
|
statFrequencies,
|
||||||
StatisticFrequency,
|
StatisticFrequency,
|
||||||
StatisticFrequencyOption,
|
StatisticFrequencyOption,
|
||||||
UrlContext,
|
UrlContext,
|
||||||
WikiContext,
|
WikiContext
|
||||||
ActivitySourceData
|
|
||||||
} from "./Common/Infrastructure/Atomic";
|
} from "./Common/Infrastructure/Atomic";
|
||||||
import {
|
import {
|
||||||
AuthorOptions,
|
AuthorOptions,
|
||||||
@@ -1765,42 +1762,6 @@ export const cacheStats = (): ResourceStats => {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export const buildCacheOptionsFromProvider = (provider: CacheProvider | any): CacheOptions => {
|
|
||||||
if(typeof provider === 'string') {
|
|
||||||
return {
|
|
||||||
store: provider as CacheProvider,
|
|
||||||
...cacheOptDefaults
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
store: 'memory',
|
|
||||||
...cacheOptDefaults,
|
|
||||||
...provider,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const createCacheManager = (options: CacheOptions): Cache => {
|
|
||||||
const {store, max, ttl = 60, host = 'localhost', port, auth_pass, db, ...rest} = options;
|
|
||||||
switch (store) {
|
|
||||||
case 'none':
|
|
||||||
return cacheManager.caching({store: 'none', max, ttl});
|
|
||||||
case 'redis':
|
|
||||||
return cacheManager.caching({
|
|
||||||
store: redisStore,
|
|
||||||
host,
|
|
||||||
port,
|
|
||||||
auth_pass,
|
|
||||||
db,
|
|
||||||
ttl,
|
|
||||||
...rest,
|
|
||||||
});
|
|
||||||
case 'memory':
|
|
||||||
default:
|
|
||||||
//return cacheManager.caching({store: 'memory', max, ttl});
|
|
||||||
return cacheManager.caching({store: {create: createMemoryStore}, max, ttl, shouldCloneBeforeSet: false});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const randomId = () => crypto.randomBytes(20).toString('hex');
|
export const randomId = () => crypto.randomBytes(20).toString('hex');
|
||||||
|
|
||||||
export const intersect = (a: Array<any>, b: Array<any>) => {
|
export const intersect = (a: Array<any>, b: Array<any>) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user