diff --git a/moleculer.config.ts b/moleculer.config.ts index b6f5393..69e2ce2 100644 --- a/moleculer.config.ts +++ b/moleculer.config.ts @@ -225,7 +225,7 @@ const brokerConfig: BrokerOptions = { middlewares: [], // Register custom REPL commands. - replCommands: null, + // replCommands: null, /* // Called after broker created. created : (broker: ServiceBroker): void => {}, diff --git a/package-lock.json b/package-lock.json index 1021c79..17375a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,12 +33,12 @@ "leven": "^3.1.0", "lodash": "^4.17.21", "mkdirp": "^0.5.5", - "moleculer": "^0.14.19", + "moleculer": "^0.14.23", "moleculer-bull": "github:rishighan/moleculer-bull", "moleculer-db": "^0.8.17", "moleculer-db-adapter-mongo": "^0.4.7", "moleculer-db-adapter-mongoose": "^0.8.12", - "moleculer-io": "^2.0.0", + "moleculer-io": "^2.1.0", "moleculer-web": "^0.10.4", "mongoosastic-ts": "^5.0.7", "mongoose": "^5.12.7", @@ -1447,14 +1447,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@socket.io/base64-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/@swiftcarrot/color-fns": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@swiftcarrot/color-fns/-/color-fns-3.2.0.tgz", @@ -2046,9 +2038,9 @@ } }, "node_modules/args": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", - "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", + "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", "dependencies": { "camelcase": "5.0.0", "chalk": "2.4.2", @@ -2102,12 +2094,12 @@ "node_modules/args/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/args/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } @@ -2115,7 +2107,7 @@ "node_modules/args/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } @@ -2123,7 +2115,7 @@ "node_modules/args/node_modules/leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", "engines": { "node": ">=0.10.0" } @@ -3767,9 +3759,9 @@ } }, "node_modules/engine.io": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", - "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -3787,12 +3779,9 @@ } }, "node_modules/engine.io-parser": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", - "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", - "dependencies": { - "@socket.io/base64-arraybuffer": "~1.0.2" - }, + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", "engines": { "node": ">=10.0.0" } @@ -4471,9 +4460,9 @@ "dev": true }, "node_modules/eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==" }, "node_modules/execa": { "version": "5.1.1", @@ -7228,9 +7217,9 @@ } }, "node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "engines": { "node": ">=6" } @@ -7828,23 +7817,24 @@ "integrity": "sha1-ilSTsPZzgvv3BcJg4HBDZlWn3Po=" }, "node_modules/moleculer": { - "version": "0.14.19", - "resolved": "https://registry.npmjs.org/moleculer/-/moleculer-0.14.19.tgz", - "integrity": "sha512-XtZwfYHk2xP6mnTEf2h44OPh/ha0jMqK4bCCROMNRdngBZR2i3LKruZA1SeHUBW+1HtDh2GliAEG7a0rW9VZhg==", + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/moleculer/-/moleculer-0.14.23.tgz", + "integrity": "sha512-DE84fy8+1QiA7kUkF9ce4nyDdptBDlLFQfsaUccTScMGAbEjye5e+zfoI9iSA9rznwvshC8tgLhbOcnQBMn/HA==", "dependencies": { - "args": "^5.0.1", - "eventemitter2": "^6.4.5", + "args": "^5.0.3", + "eventemitter2": "^6.4.7", "fastest-validator": "^1.12.0", "glob": "^7.2.0", "ipaddr.js": "^2.0.1", - "kleur": "^4.1.4", + "kleur": "^4.1.5", "lodash": "^4.17.21", "lru-cache": "^6.0.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.7", "recursive-watch": "^1.1.4" }, "bin": { - "moleculer-runner": "bin/moleculer-runner.js" + "moleculer-runner": "bin/moleculer-runner.js", + "moleculer-runner-esm": "bin/moleculer-runner.mjs" }, "engines": { "node": ">= 10.x.x" @@ -7853,27 +7843,27 @@ "url": "https://github.com/moleculerjs/moleculer?sponsor=1" }, "peerDependencies": { - "amqplib": "^0.7.0 || ^0.8.0", + "amqplib": "^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0", "avsc": "^5.0.0", "bunyan": "^1.0.0", - "cbor-x": "^0.8.3 || ^0.9.0", + "cbor-x": "^0.8.3 || ^0.9.0 || ^1.2.0", "dd-trace": "^0.33.0 || ^0.34.0 || ^0.35.0 || ^0.36.0 || >=1.0.0 <1.6.0", "debug": "^4.0.0", "etcd3": "^1.0.0", - "ioredis": "^4.0.0", + "ioredis": "^4.0.0 || ^5.0.0", "jaeger-client": "^3.0.0", "kafka-node": "^5.0.0", "log4js": "^6.0.0", "mqtt": "^4.0.0", - "msgpack5": "^5.0.0", + "msgpack5": "^5.0.0 || ^6.0.0", "nats": "^1.0.0 || ^2.0.0", "node-nats-streaming": "^0.0.51 || ^0.2.0 || ^0.3.0", - "notepack.io": "^2.0.0", - "pino": "^6.0.0 || ^7.0.0", - "protobufjs": "^6.0.0", + "notepack.io": "^2.0.0 || ^3.0.0", + "pino": "^6.0.0 || ^7.0.0 || ^8.0.0", + "protobufjs": "^6.0.0 || ^7.0.0", "redlock": "^4.0.0", "rhea-promise": "^1.0.0 || ^2.0.0", - "thrift": "^0.12.0", + "thrift": "^0.12.0 || ^0.16.0", "winston": "^3.0.0" }, "peerDependenciesMeta": { @@ -7994,9 +7984,9 @@ } }, "node_modules/moleculer-db-adapter-mongoose": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/moleculer-db-adapter-mongoose/-/moleculer-db-adapter-mongoose-0.8.12.tgz", - "integrity": "sha512-bWxpkHH7YFLoqBYD12Nl7hd/fmF+gVbC9Xc+dtW8QF68hm+iul6yTTcJVVWm7OZ4zRykBuuj6sssqPzsie+MfQ==", + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/moleculer-db-adapter-mongoose/-/moleculer-db-adapter-mongoose-0.8.14.tgz", + "integrity": "sha512-XKESD8BzxbQaP52PcHPt5kFz5mC5epGPq8IiXQp9hbPkkpERp1RJIbMGLFQyeAx7wlNxASAMEAxq0uEUMqulDQ==", "dependencies": { "bluebird": "^3.7.2", "lodash": "^4.17.21" @@ -8010,13 +8000,13 @@ } }, "node_modules/moleculer-io": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/moleculer-io/-/moleculer-io-2.0.0.tgz", - "integrity": "sha512-de/t7cG5at5KYPiukkR+cEnZ0nb0xRmSHkCoLrd7mmHfNI8+FwoUbg1fE2+Yt5aoEnVhpvY7UE2x8qcBOT6T3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/moleculer-io/-/moleculer-io-2.1.0.tgz", + "integrity": "sha512-lekTCMc5ZVZ/h/vfKISRkOQWTmBpOJHa1lqmoGt6asCaQv78V+Q9/I1qw56gYOVD1vNlkCsS6ZkZPUW6Z35Y/w==", "dependencies": { - "kleur": "^4.1.4", + "kleur": "^4.1.5", "lodash": "^4.17.21", - "socket.io": "^4.4.1" + "socket.io": "^4.5.1" }, "engines": { "node": ">= 10.x.x" @@ -8072,9 +8062,9 @@ } }, "node_modules/moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "engines": { "node": "*" } @@ -12674,15 +12664,15 @@ } }, "node_modules/socket.io": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", - "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", "socket.io-parser": "~4.0.4" }, "engines": { @@ -12690,14 +12680,14 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" }, "node_modules/socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", "dependencies": { "@types/component-emitter": "^1.2.10", "component-emitter": "~1.3.0", @@ -13785,7 +13775,7 @@ "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } @@ -15283,11 +15273,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@socket.io/base64-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" - }, "@swiftcarrot/color-fns": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@swiftcarrot/color-fns/-/color-fns-3.2.0.tgz", @@ -15746,9 +15731,9 @@ } }, "args": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", - "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", + "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", "requires": { "camelcase": "5.0.0", "chalk": "2.4.2", @@ -15790,22 +15775,22 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==" }, "supports-color": { "version": "5.5.0", @@ -17078,9 +17063,9 @@ } }, "engine.io": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz", - "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -17103,12 +17088,9 @@ } }, "engine.io-parser": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", - "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", - "requires": { - "@socket.io/base64-arraybuffer": "~1.0.2" - } + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" }, "enquirer": { "version": "2.3.6", @@ -17659,9 +17641,9 @@ } }, "eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==" }, "execa": { "version": "5.1.1", @@ -19759,9 +19741,9 @@ "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==" }, "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==" + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" }, "leven": { "version": "3.1.0", @@ -20294,19 +20276,19 @@ "integrity": "sha1-ilSTsPZzgvv3BcJg4HBDZlWn3Po=" }, "moleculer": { - "version": "0.14.19", - "resolved": "https://registry.npmjs.org/moleculer/-/moleculer-0.14.19.tgz", - "integrity": "sha512-XtZwfYHk2xP6mnTEf2h44OPh/ha0jMqK4bCCROMNRdngBZR2i3LKruZA1SeHUBW+1HtDh2GliAEG7a0rW9VZhg==", + "version": "0.14.23", + "resolved": "https://registry.npmjs.org/moleculer/-/moleculer-0.14.23.tgz", + "integrity": "sha512-DE84fy8+1QiA7kUkF9ce4nyDdptBDlLFQfsaUccTScMGAbEjye5e+zfoI9iSA9rznwvshC8tgLhbOcnQBMn/HA==", "requires": { - "args": "^5.0.1", - "eventemitter2": "^6.4.5", + "args": "^5.0.3", + "eventemitter2": "^6.4.7", "fastest-validator": "^1.12.0", "glob": "^7.2.0", "ipaddr.js": "^2.0.1", - "kleur": "^4.1.4", + "kleur": "^4.1.5", "lodash": "^4.17.21", "lru-cache": "^6.0.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.7", "recursive-watch": "^1.1.4" } }, @@ -20340,22 +20322,22 @@ } }, "moleculer-db-adapter-mongoose": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/moleculer-db-adapter-mongoose/-/moleculer-db-adapter-mongoose-0.8.12.tgz", - "integrity": "sha512-bWxpkHH7YFLoqBYD12Nl7hd/fmF+gVbC9Xc+dtW8QF68hm+iul6yTTcJVVWm7OZ4zRykBuuj6sssqPzsie+MfQ==", + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/moleculer-db-adapter-mongoose/-/moleculer-db-adapter-mongoose-0.8.14.tgz", + "integrity": "sha512-XKESD8BzxbQaP52PcHPt5kFz5mC5epGPq8IiXQp9hbPkkpERp1RJIbMGLFQyeAx7wlNxASAMEAxq0uEUMqulDQ==", "requires": { "bluebird": "^3.7.2", "lodash": "^4.17.21" } }, "moleculer-io": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/moleculer-io/-/moleculer-io-2.0.0.tgz", - "integrity": "sha512-de/t7cG5at5KYPiukkR+cEnZ0nb0xRmSHkCoLrd7mmHfNI8+FwoUbg1fE2+Yt5aoEnVhpvY7UE2x8qcBOT6T3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/moleculer-io/-/moleculer-io-2.1.0.tgz", + "integrity": "sha512-lekTCMc5ZVZ/h/vfKISRkOQWTmBpOJHa1lqmoGt6asCaQv78V+Q9/I1qw56gYOVD1vNlkCsS6ZkZPUW6Z35Y/w==", "requires": { - "kleur": "^4.1.4", + "kleur": "^4.1.5", "lodash": "^4.17.21", - "socket.io": "^4.4.1" + "socket.io": "^4.5.1" } }, "moleculer-repl": { @@ -20396,9 +20378,9 @@ } }, "moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "mongodb": { "version": "3.7.3", @@ -23684,27 +23666,27 @@ "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==" }, "socket.io": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", - "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io": "~6.1.0", - "socket.io-adapter": "~2.3.3", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", "socket.io-parser": "~4.0.4" } }, "socket.io-adapter": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", - "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" }, "socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", "requires": { "@types/component-emitter": "^1.2.10", "component-emitter": "~1.3.0", @@ -24590,7 +24572,7 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "verror": { "version": "1.10.0", diff --git a/package.json b/package.json index 1dc8ab6..13d5d8e 100644 --- a/package.json +++ b/package.json @@ -61,12 +61,12 @@ "leven": "^3.1.0", "lodash": "^4.17.21", "mkdirp": "^0.5.5", - "moleculer": "^0.14.19", + "moleculer": "^0.14.23", "moleculer-bull": "github:rishighan/moleculer-bull", "moleculer-db": "^0.8.17", "moleculer-db-adapter-mongo": "^0.4.7", "moleculer-db-adapter-mongoose": "^0.8.12", - "moleculer-io": "^2.0.0", + "moleculer-io": "^2.1.0", "moleculer-web": "^0.10.4", "mongoosastic-ts": "^5.0.7", "mongoose": "^5.12.7", diff --git a/services/imagetransformation.service.ts b/services/imagetransformation.service.ts index f1ca304..4cac0a6 100644 --- a/services/imagetransformation.service.ts +++ b/services/imagetransformation.service.ts @@ -20,76 +20,68 @@ export default class ImageTransformation extends Service { schema: ServiceSchema<{}> = { name: "imagetransformation" } ) { super(broker); - this.parseServiceSchema( - Service.mergeSchemas( - { - name: "imagetransformation", - mixins: [], - settings: { - // Available fields in the responses - fields: ["_id", "name", "quantity", "price"], + this.parseServiceSchema({ + name: "imagetransformation", + mixins: [], + settings: { + // Available fields in the responses + fields: ["_id", "name", "quantity", "price"], - // Validator for the `create` & `insert` actions. - entityValidator: { - name: "string|min:3", - price: "number|positive", - }, - }, - hooks: {}, - actions: { - resize: { - rest: "POST /resizeImage", - params: {}, - async handler( - ctx: Context<{ - imageFile: string | Buffer; - newWidth: number; - newHeight: number; - outputPath: string; - }> - ) { - const resizeResult = await resizeImage( - ctx.params.imageFile, - ctx.params.outputPath, - ctx.params.newWidth, - ctx.params.newHeight - ); - return { resizeOperationStatus: resizeResult }; - }, - }, - analyze: { - rest: "POST /analyze", - params: {}, - handler: async ( - ctx: Context<{ imageFilePath: string }> - ) => { - const url = new URL(ctx.params.imageFilePath); - const pathName = url.pathname; - const decodedImageFileURI = decodeURI(pathName); - const finalImagePath = path.resolve( - "." + decodedImageFileURI - ); - - const analyzedData = await analyze( - finalImagePath - ); - const colorHistogramData = - await getColorHistogramData( - finalImagePath, - false - ); - - return { - analyzedData, - colorHistogramData, - }; - }, - }, - }, - methods: {}, + // Validator for the `create` & `insert` actions. + entityValidator: { + name: "string|min:3", + price: "number|positive", }, - schema - ) - ); + }, + hooks: {}, + actions: { + resize: { + rest: "POST /resizeImage", + params: {}, + async handler( + ctx: Context<{ + imageFile: string | Buffer; + newWidth: number; + newHeight: number; + outputPath: string; + }> + ) { + const resizeResult = await resizeImage( + ctx.params.imageFile, + ctx.params.outputPath, + ctx.params.newWidth, + ctx.params.newHeight + ); + return { resizeOperationStatus: resizeResult }; + }, + }, + analyze: { + rest: "POST /analyze", + params: {}, + handler: async ( + ctx: Context<{ imageFilePath: string }> + ) => { + const url = new URL(ctx.params.imageFilePath); + const pathName = url.pathname; + const decodedImageFileURI = decodeURI(pathName); + const finalImagePath = path.resolve( + "." + decodedImageFileURI + ); + + const analyzedData = await analyze(finalImagePath); + const colorHistogramData = await getColorHistogramData( + finalImagePath, + false + ); + + return { + analyzedData, + colorHistogramData, + }; + }, + }, + }, + methods: {}, + }); } } diff --git a/services/opds.service.ts b/services/opds.service.ts index c192e84..8ad1bd3 100644 --- a/services/opds.service.ts +++ b/services/opds.service.ts @@ -21,120 +21,108 @@ export default class OpdsService extends Service { schema: ServiceSchema<{}> = { name: "opds" } ) { super(broker); - this.parseServiceSchema( - Service.mergeSchemas( - { - name: "opds", - mixins: [], - settings: { - port: process.env.PORT || 3001, - }, - hooks: {}, - actions: { - serve: { - rest: "POST /serve", - handler: async (ctx) => { - return buildAsync( - initMain({ - title: `title`, - subtitle: `subtitle`, - icon: "/favicon.ico", - }), - [ - async (feed: Feed) => { - feed.id = - "urn:uuid:2853dacf-ed79-42f5-8e8a-a7bb3d1ae6a2"; - feed.books = feed.books || []; - await FastGlob( - [ - "*.cbr", - "*.cbz", - "*.cb7", - "*.cba", - "*.cbt", - ], - { - cwd: COMICS_DIRECTORY, - } - ).each((file, idx) => { - const ext = extname(file); - const title = basename( - file, - ext - ); - const href = encodeURI( - `/comics/${file}` - ); - const type = - lookup(ext) || - "application/octet-stream"; - - const entry = - Entry.deserialize({ - title, - id: idx.toString(), - links: [ - { - rel: EnumLinkRel.ACQUISITION, - href, - type, - } as Link, - ], - }); - - if ( - !isUndefined(feed) && - !isUndefined(feed.books) - ) { - feed.books.push(entry); - } - }); - - return feed; - }, - ] - ).then((feed) => { - ctx.meta.$responseHeaders = { - "Content-Type": " application/xml", - }; - let data; - xml2js.parseString( - feed.toXML(), - (err, result) => { - result.feed.link = { - $: { - rel: "self", - href: "/opds-catalogs/root.xml", - type: "application/atom+xml;profile=opds-catalog;kind=navigation", - }, - _: "", - }; - const builder = new xml2js.Builder({ - xmldec: { - version: "1.0", - encoding: "UTF-8", - standalone: false, - }, - }); - data = builder.buildObject(result, { - renderOpts: { - pretty: true, - indent: " ", - newline: "\n", - allowEmpty: true, - }, - }); + this.parseServiceSchema({ + name: "opds", + mixins: [], + settings: { + port: process.env.PORT || 3001, + }, + hooks: {}, + actions: { + serve: { + rest: "POST /serve", + handler: async (ctx) => { + return buildAsync( + initMain({ + title: `title`, + subtitle: `subtitle`, + icon: "/favicon.ico", + }), + [ + async (feed: Feed) => { + feed.id = + "urn:uuid:2853dacf-ed79-42f5-8e8a-a7bb3d1ae6a2"; + feed.books = feed.books || []; + await FastGlob( + [ + "*.cbr", + "*.cbz", + "*.cb7", + "*.cba", + "*.cbt", + ], + { + cwd: COMICS_DIRECTORY, } - ); - return data; + ).each((file, idx) => { + const ext = extname(file); + const title = basename(file, ext); + const href = encodeURI( + `/comics/${file}` + ); + const type = + lookup(ext) || + "application/octet-stream"; + + const entry = Entry.deserialize({ + title, + id: idx.toString(), + links: [ + { + rel: EnumLinkRel.ACQUISITION, + href, + type, + } as Link, + ], + }); + + if ( + !isUndefined(feed) && + !isUndefined(feed.books) + ) { + feed.books.push(entry); + } + }); + + return feed; + }, + ] + ).then((feed) => { + ctx.meta.$responseHeaders = { + "Content-Type": " application/xml", + }; + let data; + xml2js.parseString(feed.toXML(), (err, result) => { + result.feed.link = { + $: { + rel: "self", + href: "/opds-catalogs/root.xml", + type: "application/atom+xml;profile=opds-catalog;kind=navigation", + }, + _: "", + }; + const builder = new xml2js.Builder({ + xmldec: { + version: "1.0", + encoding: "UTF-8", + standalone: false, + }, }); - }, - }, + data = builder.buildObject(result, { + renderOpts: { + pretty: true, + indent: " ", + newline: "\n", + allowEmpty: true, + }, + }); + }); + return data; + }); }, - methods: {}, }, - schema - ) - ); + }, + methods: {}, + }); } -} \ No newline at end of file +} diff --git a/services/search.service.ts b/services/search.service.ts index f91bb5d..e50edac 100644 --- a/services/search.service.ts +++ b/services/search.service.ts @@ -20,166 +20,157 @@ export default class SettingsService extends Service { schema: ServiceSchema<{}> = { name: "search" } ) { super(broker); - this.parseServiceSchema( - Service.mergeSchemas( - { - name: "search", - mixins: [DbMixin("comics", Comic)], - hooks: {}, - actions: { - searchComic: { - rest: "POST /searchComic", - params: {}, - timeout: 400000, - async handler( - ctx: Context<{ - queryObjects: []; - elasticSearchQueries: [ - { - elasticSearchQuery: object; - } - ]; - }> - ) { - const flattenedQueryArray = flatten( - ctx.params.elasticSearchQueries - ); - let queries = flattenedQueryArray - .map((item) => JSON.stringify(item)) - .join("\n"); - queries += "\n"; - const { body } = await eSClient.msearch({ - body: queries, - }); - body.responses.forEach((match) => { - console.log(match.hits); - }); - - return body.responses; - }, - }, - issue: { - rest: "POST /searchIssue", - params: {}, - handler: async ( - ctx: Context<{ - query: { - volumeName: string; - issueNumber: string; - }; - pagination: { - size: number; - from: number; - }; - type: string; - }> - ) => { - try { - console.log(ctx.params); - const { query, pagination } = ctx.params; - let eSQuery = {}; - switch (ctx.params.type) { - case "all": - Object.assign(eSQuery, { - match_all: {}, - }); - break; - - case "volumeName": - Object.assign(eSQuery, { - multi_match: { - fields: [ - "rawFileDetails.name", - "sourcedMetadata.locg.name", - "sourcedMetadata.comicvine.name", - "sourcedMetadata.comicvine.volumeInformation.name", - ], - query: query.volumeName, - }, - }); - break; - case "wanted": - Object.assign(eSQuery, { - bool: { - must: { - term: { - "acquisition.source.wanted": - true, - }, - }, - }, - }); - break; - case "volumes": - Object.assign(eSQuery, { - exists: { - field: "sourcedMetadata.comicvine.volumeInformation", - }, - }); - break; - } - console.log( - "Searching ElasticSearch index with this query -> " - ); - console.log( - JSON.stringify(eSQuery, null, 2) - ); - const result = await eSClient.search( - { - index: "comics", - body: { - query: eSQuery, - }, - ...pagination, - }, - { hydrate: true } - ); - - return result; - } catch (error) { - return new Errors.MoleculerClientError( - "Failed to return data", - 404, - "ElasticSearch error", - error - ); + this.parseServiceSchema({ + name: "search", + mixins: [DbMixin("comics", Comic)], + hooks: {}, + actions: { + searchComic: { + rest: "POST /searchComic", + params: {}, + timeout: 400000, + async handler( + ctx: Context<{ + queryObjects: []; + elasticSearchQueries: [ + { + elasticSearchQuery: object; } - }, - }, - groupIssuesByBundles: { - rest: "GET /groupIssuesByBundles", - params: {}, - handler: async ( - ctx: Context<{ bundleIds: [] }> - ) => { - // params: array of bundle IDs - if (!isNil(ctx.params.bundleIds)) { - return await Comic.find({ - "acquisition.directconnect.downloads": { - $elemMatch: { - bundleId: { - $in: ctx.params.bundleIds, + ]; + }> + ) { + const flattenedQueryArray = flatten( + ctx.params.elasticSearchQueries + ); + let queries = flattenedQueryArray + .map((item) => JSON.stringify(item)) + .join("\n"); + queries += "\n"; + const { body } = await eSClient.msearch({ + body: queries, + }); + body.responses.forEach((match) => { + console.log(match.hits); + }); + + return body.responses; + }, + }, + issue: { + rest: "POST /searchIssue", + params: {}, + handler: async ( + ctx: Context<{ + query: { + volumeName: string; + issueNumber: string; + }; + pagination: { + size: number; + from: number; + }; + type: string; + }> + ) => { + try { + console.log(ctx.params); + const { query, pagination } = ctx.params; + let eSQuery = {}; + switch (ctx.params.type) { + case "all": + Object.assign(eSQuery, { + match_all: {}, + }); + break; + + case "volumeName": + Object.assign(eSQuery, { + multi_match: { + fields: [ + "rawFileDetails.name", + "sourcedMetadata.locg.name", + "sourcedMetadata.comicvine.name", + "sourcedMetadata.comicvine.volumeInformation.name", + ], + query: query.volumeName, + }, + }); + break; + case "wanted": + Object.assign(eSQuery, { + bool: { + must: { + term: { + "acquisition.source.wanted": + true, }, }, }, }); - } - }, - }, - deleteElasticSearchIndices: { - rest: "GET /deleteElasticSearchIndices", - params: {}, - handler: async (ctx: Context<{}>) => { - return await eSClient.indices.delete({ + break; + case "volumes": + Object.assign(eSQuery, { + exists: { + field: "sourcedMetadata.comicvine.volumeInformation", + }, + }); + break; + } + console.log( + "Searching ElasticSearch index with this query -> " + ); + console.log(JSON.stringify(eSQuery, null, 2)); + const result = await eSClient.search( + { index: "comics", - }); - }, - }, + body: { + query: eSQuery, + }, + ...pagination, + }, + { hydrate: true } + ); + + return result; + } catch (error) { + return new Errors.MoleculerClientError( + "Failed to return data", + 404, + "ElasticSearch error", + error + ); + } }, - methods: {}, }, - schema - ) - ); + groupIssuesByBundles: { + rest: "GET /groupIssuesByBundles", + params: {}, + handler: async (ctx: Context<{ bundleIds: [] }>) => { + // params: array of bundle IDs + if (!isNil(ctx.params.bundleIds)) { + return await Comic.find({ + "acquisition.directconnect.downloads": { + $elemMatch: { + bundleId: { + $in: ctx.params.bundleIds, + }, + }, + }, + }); + } + }, + }, + deleteElasticSearchIndices: { + rest: "GET /deleteElasticSearchIndices", + params: {}, + handler: async (ctx: Context<{}>) => { + return await eSClient.indices.delete({ + index: "comics", + }); + }, + }, + }, + methods: {}, + }); } } diff --git a/services/settings.service.ts b/services/settings.service.ts index f44fa65..9ca5638 100644 --- a/services/settings.service.ts +++ b/services/settings.service.ts @@ -18,91 +18,79 @@ export default class SettingsService extends Service { schema: ServiceSchema<{}> = { name: "settings" } ) { super(broker); - this.parseServiceSchema( - Service.mergeSchemas( - { - name: "settings", - mixins: [DbMixin("settings", Settings)], - settings: {}, - hooks: {}, - actions: { - getSettings: { - rest: "GET /getAllSettings", - params: {}, - async handler( - ctx: Context<{ settingsKey: string }> - ) { - const settings = await Settings.find({}); - if (isEmpty(settings)) { - return {}; - } - console.log(settings[0]); - return settings[0]; - }, - }, - - saveSettings: { - rest: "POST /saveSettings", - params: {}, - async handler( - ctx: Context<{ - settingsPayload: { - host: object; - airDCPPUserSettings: object; - hubs: []; - }; - settingsObjectId: string; - }> - ) { - console.log("varan bhat", ctx.params); - const { host, airDCPPUserSettings, hubs } = - ctx.params.settingsPayload; - let query = { - host, - airDCPPUserSettings, - hubs, - }; - const keysToUpdate = pickBy(query, identity); - let updateQuery = {}; - - map(Object.keys(keysToUpdate), (key) => { - updateQuery[`directConnect.client.${key}`] = - query[key]; - }); - const options = { - upsert: true, - new: true, - setDefaultsOnInsert: true, - }; - const filter = { - _id: new ObjectId( - ctx.params.settingsObjectId - ), - }; - const result = Settings.findOneAndUpdate( - filter, - { $set: updateQuery }, - options - ); - - return result; - }, - }, - deleteSettings: { - rest: "POST /deleteSettings", - params: {}, - async handler(ctx: Context<{}>) { - return await Settings.remove( - {}, - (result) => result - ); - }, - }, + this.parseServiceSchema({ + name: "settings", + mixins: [DbMixin("settings", Settings)], + settings: {}, + hooks: {}, + actions: { + getSettings: { + rest: "GET /getAllSettings", + params: {}, + async handler(ctx: Context<{ settingsKey: string }>) { + const settings = await Settings.find({}); + if (isEmpty(settings)) { + return {}; + } + console.log(settings[0]); + return settings[0]; }, - methods: {}, }, - schema - ) - ); + + saveSettings: { + rest: "POST /saveSettings", + params: {}, + async handler( + ctx: Context<{ + settingsPayload: { + host: object; + airDCPPUserSettings: object; + hubs: []; + }; + settingsObjectId: string; + }> + ) { + console.log("varan bhat", ctx.params); + const { host, airDCPPUserSettings, hubs } = + ctx.params.settingsPayload; + let query = { + host, + airDCPPUserSettings, + hubs, + }; + const keysToUpdate = pickBy(query, identity); + let updateQuery = {}; + + map(Object.keys(keysToUpdate), (key) => { + updateQuery[`directConnect.client.${key}`] = + query[key]; + }); + const options = { + upsert: true, + new: true, + setDefaultsOnInsert: true, + }; + const filter = { + _id: new ObjectId(ctx.params.settingsObjectId), + }; + const result = Settings.findOneAndUpdate( + filter, + { $set: updateQuery }, + options + ); + + return result; + }, + }, + deleteSettings: { + rest: "POST /deleteSettings", + params: {}, + async handler(ctx: Context<{}>) { + return await Settings.remove({}, (result) => result); + }, + }, + }, + methods: {}, + }); } } diff --git a/services/socket.service.ts b/services/socket.service.ts index 9067d49..164b902 100644 --- a/services/socket.service.ts +++ b/services/socket.service.ts @@ -12,70 +12,71 @@ export default class SocketService extends Service { schema: ServiceSchema<{}> = { name: "socket" } ) { super(broker); - this.parseServiceSchema( - Service.mergeSchemas( - { - name: "socket", - mixins: [SocketIOService], - settings: { - port: process.env.PORT || 3001, - io: { - namespaces: { - "/": { - events: { - call: { - // whitelist: ["math.*", "say.*", "accounts.*", "rooms.*", "io.*"], - }, - action: async (data, ack) => { - // write your handler function here. - switch (data.type) { - case "LS_IMPORT": - console.log( - `Recieved ${data.type} event.` - ); - // 1. Send task to queue - await this.broker.call( - "library.newImport", - data.data, - {} - ); - break; - case "LS_TOGGLE_IMPORT_QUEUE": - await this.broker.call( - "importqueue.toggleImportQueue", - data.data, - {} - ); - break; - case "LS_SINGLE_IMPORT": - console.info("AirDC++ finished a download -> ") - console.log(data); - await this.broker.call("library.importDownloadedFileToLibrary", data.data, {}); - break; - } - }, - }, + this.parseServiceSchema({ + name: "socket", + mixins: [SocketIOService], + settings: { + port: process.env.PORT || 3001, + io: { + namespaces: { + "/": { + events: { + call: { + // whitelist: ["math.*", "say.*", "accounts.*", "rooms.*", "io.*"], + }, + action: async (data, ack) => { + // write your handler function here. + switch (data.type) { + case "LS_IMPORT": + console.log( + `Recieved ${data.type} event.` + ); + // 1. Send task to queue + await this.broker.call( + "library.newImport", + data.data, + {} + ); + break; + case "LS_TOGGLE_IMPORT_QUEUE": + await this.broker.call( + "importqueue.toggleImportQueue", + data.data, + {} + ); + break; + case "LS_SINGLE_IMPORT": + console.info( + "AirDC++ finished a download -> " + ); + console.log(data); + await this.broker.call( + "library.importDownloadedFileToLibrary", + data.data, + {} + ); + break; + } }, - }, - options: { - adapter: redisAdapter({ - host: redisURL.hostname, - port: 6379, - }), }, }, }, - hooks: {}, - actions: {}, - methods: {}, - async started() { - this.io.on("connection", (data) => - console.log("socket.io server initialized.") - ); + options: { + adapter: redisAdapter({ + host: redisURL.hostname, + port: 6379, + }), }, }, - schema - ) - ); + }, + hooks: {}, + actions: {}, + methods: {}, + async started() { + this.io.on("connection", (data) => + console.log("socket.io server initialized.") + ); + }, + }); } }