From e472fe48b4c756a14d3f23e95f2f4e7b0e228eca Mon Sep 17 00:00:00 2001 From: Alie Date: Wed, 17 Apr 2024 20:02:24 +0200 Subject: [PATCH] Added logger and new logs to all error branches and possible issue loop --- bun.lockb | Bin 43620 -> 53938 bytes package.json | 3 +- src/controllers/ImageController.ts | 4 +- src/index.ts | 5 +- src/logger.ts | 17 +++ src/services/BotApiService.ts | 4 +- src/services/GelbooruApiService.ts | 4 +- src/services/ImageService.ts | 2 + yarn.lock | 196 ++++++++++++++++++++++++++++- 9 files changed, 225 insertions(+), 10 deletions(-) create mode 100644 src/logger.ts diff --git a/bun.lockb b/bun.lockb index ad4cfffe83f2695ad9340e2c994947da7c43bdc1..70433471b13cd81c79fbdee7ac11a9b48d89da70 100755 GIT binary patch delta 13486 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 DaoV?4 diff --git a/package.json b/package.json index fa23b98..0708b23 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "dependencies": { "compression": "^1.7.4", "express": "^4.19.2", - "express-list-endpoints": "^6.0.0" + "express-list-endpoints": "^6.0.0", + "winston": "^3.13.0" }, "scripts": { "start": "bun run src/index.ts", diff --git a/src/controllers/ImageController.ts b/src/controllers/ImageController.ts index 611b1cc..18d010d 100644 --- a/src/controllers/ImageController.ts +++ b/src/controllers/ImageController.ts @@ -1,12 +1,14 @@ import { Request, Response } from "express"; +import logger from "src/logger"; import ImageService from "src/services/ImageService"; class ImageController { - async get(req: Request, res: Response) { + async get(_: Request, res: Response) { try { const image = await ImageService.get(); res.json(image); } catch (error: any) { + logger.error(error) res.status(500).json({ "error": `Internal server error: ${error}` }); } } diff --git a/src/index.ts b/src/index.ts index 6032ee1..50cac35 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,16 @@ import { env } from "bun"; import app from "src/app"; +import logger from "src/logger"; const PORT = env.PORT; const server = app.listen(PORT, () => - console.log(`Express server listening on port ${PORT}`) + logger.info(`Express server listening on port ${PORT}`) ); process.on("SIGTERM", () => { server.close(() => { - console.log('Server closed.'); + logger.info('Server closed.'); process.exit(0); }); }); \ No newline at end of file diff --git a/src/logger.ts b/src/logger.ts new file mode 100644 index 0000000..fe55880 --- /dev/null +++ b/src/logger.ts @@ -0,0 +1,17 @@ +import winston, { format } from "winston"; + +const logger = winston.createLogger({ + format: format.combine( + format.timestamp(), + format.align(), + format.colorize({ all: true }), + format.printf((info) => `${info.timestamp} ${info.level}:${info.message}`) + ), +}); + +const files = new winston.transports.File({ filename: "/tmp/express.log" }); +const console = new winston.transports.Console(); + +logger.clear().add(files).add(console); + +export default logger; diff --git a/src/services/BotApiService.ts b/src/services/BotApiService.ts index 94cdd38..2de1249 100644 --- a/src/services/BotApiService.ts +++ b/src/services/BotApiService.ts @@ -1,4 +1,5 @@ import { env } from "bun"; +import logger from "src/logger"; import { BotApiResponse } from "src/types/BotApiResponse"; class BotApiService { @@ -7,8 +8,9 @@ class BotApiService { async getAll(): Promise { const get_url = `${this.BOT_API_URI}/images`; const response: BotApiResponse = await fetch(get_url) - .then(res => { + .then(async res => { if (!res.ok) { + logger.error(`${res.status}: ${res.statusText}, ${await res.text()}`) throw new Error("Error fetching images"); } else { return res.json(); diff --git a/src/services/GelbooruApiService.ts b/src/services/GelbooruApiService.ts index 8a38f27..be70475 100644 --- a/src/services/GelbooruApiService.ts +++ b/src/services/GelbooruApiService.ts @@ -1,4 +1,5 @@ import { env } from "bun"; +import logger from "src/logger"; import GelbooruApiResponse from "src/types/GelbooruApiResponse"; import GelbooruServiceResponse from "src/types/GelbooruServiceResponse"; @@ -9,8 +10,9 @@ class GelbooruApiService { const url: string = `https://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=${LIMIT}&json=1&tags=${TAGS}`; const response: GelbooruApiResponse = await fetch(url) - .then(res => { + .then(async res => { if (!res.ok) { + logger.error(`${res.status}: ${res.statusText}, ${await res.text()}`) throw new Error("Error fetching images"); } else { return res.json(); diff --git a/src/services/ImageService.ts b/src/services/ImageService.ts index 20f37a3..00ab51d 100644 --- a/src/services/ImageService.ts +++ b/src/services/ImageService.ts @@ -2,6 +2,7 @@ import GelbooruServiceResponse from "src/types/GelbooruServiceResponse"; import Image from "src/types/Image"; import BotApiService from "src/services/BotApiService"; import GelbooruApiService from "src/services/GelbooruApiService"; +import logger from "src/logger"; class ImageService { postsQueue: Image[] = []; @@ -10,6 +11,7 @@ class ImageService { while (this.postsQueue.length === 0) { const validPosts = await this.getNewValidImages(); this.postsQueue = validPosts; + logger.info(`Got ${validPosts.length} images from remote`) } return this.postsQueue.pop() as Image; } diff --git a/yarn.lock b/yarn.lock index 17cc7f0..5db6c5e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,8 +1,22 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 -# bun ./bun.lockb --hash: D2F4EB28F4D7A9AB-c66ee1379fa18f54-F2EFEC486AB909C5-0f692bf48fab37c2 +# bun ./bun.lockb --hash: 2D4E664D3091262E-6e6ac083a9fdd796-C67F3D33680268C0-c674fd6e89aeea1f +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": + version "1.6.0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + "@types/body-parser@*": version "1.19.5" resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" @@ -128,6 +142,11 @@ "@types/methods" "^1.1.4" "@types/superagent" "^8.1.0" +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + "@types/ws@~8.5.10": version "8.5.10" resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz" @@ -153,6 +172,11 @@ asap@^2.0.0: resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +async@^3.2.3: + version "3.2.5" + resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -205,6 +229,47 @@ call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" +color@^3.1.3: + version "3.2.1" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" @@ -315,6 +380,11 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" @@ -389,6 +459,11 @@ fast-safe-stringify@^2.1.1: resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + finalhandler@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" @@ -402,6 +477,11 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + form-data@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" @@ -501,7 +581,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -inherits@2.0.4: +inherits@2.0.4, inherits@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -511,6 +591,33 @@ ipaddr.js@1.9.1: resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +logform@^2.3.2, logform@^2.4.0: + version "2.6.0" + resolved "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz" + integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" @@ -565,7 +672,7 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -599,6 +706,13 @@ once@^1.4.0: dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" @@ -639,16 +753,30 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" +readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + safe-buffer@5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" @@ -717,11 +845,30 @@ side-channel@^1.0.4: get-intrinsic "^1.2.4" object-inspect "^1.13.1" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + superagent@^8.1.2: version "8.1.2" resolved "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz" @@ -746,11 +893,21 @@ supertest@^6.3.4: methods "^1.1.2" superagent "^8.1.2" +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + toidentifier@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" @@ -774,6 +931,11 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" @@ -784,6 +946,32 @@ vary@~1.1.2: resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +winston@^3.13.0: + version "3.13.0" + resolved "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz" + integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ== + dependencies: + "@dabh/diagnostics" "^2.0.2" + "@colors/colors" "^1.6.0" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.7.0" + +winston-transport@^4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz" + integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"