refactor: migrate discord-gateway from winston to @bete/shared/logger and utils
- Replace all local logger imports (../../shared/logger/logger.js) with @bete/shared/logger across 26 files - Remove winston dependency, add pino to discord-gateway package.json - Delete shared/logger/logger.ts (winston-based, 132 lines) and serialization.ts (109 lines) - Replace local retryWithBackoff imports with @bete/shared/utils across 6 files - Delete shared/utils/retry.ts (42 lines) - Add CustomLogger type alias to @bete/shared/logger for backwards compatibility - Remove logger param from all retryWithBackoff calls and uploadToTele interfaces - Frontend: convert entity type files to re-exports from shared/api/client.ts - Full monorepo typecheck clean (4/4 packages) 35 files changed, 42 insertions(+), 488 deletions(-)
This commit is contained in:
@@ -17,6 +17,11 @@ const rootLogger = pino({
|
|||||||
|
|
||||||
export type Logger = ReturnType<typeof createChildLogger>;
|
export type Logger = ReturnType<typeof createChildLogger>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alias for backwards compatibility (discord-gateway uses this name).
|
||||||
|
*/
|
||||||
|
export type CustomLogger = Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a child logger bound to the root singleton via pino's .child().
|
* Returns a child logger bound to the root singleton via pino's .child().
|
||||||
* Preserves parent context and is efficient (no transport re-init per call).
|
* Preserves parent context and is efficient (no transport re-init per call).
|
||||||
|
|||||||
Generated
+3
-157
@@ -160,6 +160,9 @@ importers:
|
|||||||
pg:
|
pg:
|
||||||
specifier: ^8.21.0
|
specifier: ^8.21.0
|
||||||
version: 8.21.0
|
version: 8.21.0
|
||||||
|
pino:
|
||||||
|
specifier: ^9.6.0
|
||||||
|
version: 9.14.0
|
||||||
piscina:
|
piscina:
|
||||||
specifier: ^5.1.4
|
specifier: ^5.1.4
|
||||||
version: 5.1.4
|
version: 5.1.4
|
||||||
@@ -169,9 +172,6 @@ importers:
|
|||||||
sharp:
|
sharp:
|
||||||
specifier: ^0.34.5
|
specifier: ^0.34.5
|
||||||
version: 0.34.5
|
version: 0.34.5
|
||||||
winston:
|
|
||||||
specifier: ^3.19.0
|
|
||||||
version: 3.19.0
|
|
||||||
ws:
|
ws:
|
||||||
specifier: ^8.20.1
|
specifier: ^8.20.1
|
||||||
version: 8.20.1
|
version: 8.20.1
|
||||||
@@ -541,13 +541,6 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@colors/colors@1.6.0':
|
|
||||||
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
|
|
||||||
engines: {node: '>=0.1.90'}
|
|
||||||
|
|
||||||
'@dabh/diagnostics@2.0.8':
|
|
||||||
resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==}
|
|
||||||
|
|
||||||
'@discordjs/builders@1.14.1':
|
'@discordjs/builders@1.14.1':
|
||||||
resolution: {integrity: sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ==}
|
resolution: {integrity: sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ==}
|
||||||
engines: {node: '>=16.11.0'}
|
engines: {node: '>=16.11.0'}
|
||||||
@@ -1943,9 +1936,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-oBN+msHzPnm1M5DDx3wVD7iBwpNXFUtkh2MrAbUJu0OhKjliLChi28hq++mu1+qdMpAVQO5JKAvQQxYVbyneiw==}
|
resolution: {integrity: sha512-oBN+msHzPnm1M5DDx3wVD7iBwpNXFUtkh2MrAbUJu0OhKjliLChi28hq++mu1+qdMpAVQO5JKAvQQxYVbyneiw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
|
|
||||||
'@so-ric/colorspace@1.1.6':
|
|
||||||
resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==}
|
|
||||||
|
|
||||||
'@standard-schema/spec@1.1.0':
|
'@standard-schema/spec@1.1.0':
|
||||||
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
|
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
|
||||||
|
|
||||||
@@ -2139,9 +2129,6 @@ packages:
|
|||||||
'@types/serve-static@2.2.0':
|
'@types/serve-static@2.2.0':
|
||||||
resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==}
|
resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==}
|
||||||
|
|
||||||
'@types/triple-beam@1.3.5':
|
|
||||||
resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==}
|
|
||||||
|
|
||||||
'@types/ws@8.18.1':
|
'@types/ws@8.18.1':
|
||||||
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
|
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
|
||||||
|
|
||||||
@@ -2300,9 +2287,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==}
|
resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
async@3.2.6:
|
|
||||||
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
|
|
||||||
|
|
||||||
asyncc@2.0.9:
|
asyncc@2.0.9:
|
||||||
resolution: {integrity: sha512-nTQfwHtnL+MSqPaUJhV22GWP3jThj0GnS4Nw1uJyBus6EQ40hQFnbBGUvWxC5P3m+1neSqH1p8asMXg/ypmsQw==}
|
resolution: {integrity: sha512-nTQfwHtnL+MSqPaUJhV22GWP3jThj0GnS4Nw1uJyBus6EQ40hQFnbBGUvWxC5P3m+1neSqH1p8asMXg/ypmsQw==}
|
||||||
engines: {node: '>=6.0.0'}
|
engines: {node: '>=6.0.0'}
|
||||||
@@ -2481,32 +2465,16 @@ packages:
|
|||||||
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
||||||
engines: {node: '>=7.0.0'}
|
engines: {node: '>=7.0.0'}
|
||||||
|
|
||||||
color-convert@3.1.3:
|
|
||||||
resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==}
|
|
||||||
engines: {node: '>=14.6'}
|
|
||||||
|
|
||||||
color-name@1.1.3:
|
color-name@1.1.3:
|
||||||
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
|
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
|
||||||
|
|
||||||
color-name@1.1.4:
|
color-name@1.1.4:
|
||||||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||||
|
|
||||||
color-name@2.1.0:
|
|
||||||
resolution: {integrity: sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==}
|
|
||||||
engines: {node: '>=12.20'}
|
|
||||||
|
|
||||||
color-string@2.1.4:
|
|
||||||
resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==}
|
|
||||||
engines: {node: '>=18'}
|
|
||||||
|
|
||||||
color-support@1.1.3:
|
color-support@1.1.3:
|
||||||
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
|
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
color@5.0.3:
|
|
||||||
resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==}
|
|
||||||
engines: {node: '>=18'}
|
|
||||||
|
|
||||||
colorette@2.0.20:
|
colorette@2.0.20:
|
||||||
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
|
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
|
||||||
|
|
||||||
@@ -2809,9 +2777,6 @@ packages:
|
|||||||
emoji-regex@8.0.0:
|
emoji-regex@8.0.0:
|
||||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||||
|
|
||||||
enabled@2.0.0:
|
|
||||||
resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==}
|
|
||||||
|
|
||||||
encodeurl@2.0.0:
|
encodeurl@2.0.0:
|
||||||
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
|
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
@@ -2990,9 +2955,6 @@ packages:
|
|||||||
picomatch:
|
picomatch:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
fecha@4.2.3:
|
|
||||||
resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==}
|
|
||||||
|
|
||||||
fetch-cookie@3.2.0:
|
fetch-cookie@3.2.0:
|
||||||
resolution: {integrity: sha512-n61pQIxP25C6DRhcJxn7BDzgHP/+S56Urowb5WFxtcRMpU6drqXD90xjyAsVQYsNSNNVbaCcYY1DuHsdkZLuiA==}
|
resolution: {integrity: sha512-n61pQIxP25C6DRhcJxn7BDzgHP/+S56Urowb5WFxtcRMpU6drqXD90xjyAsVQYsNSNNVbaCcYY1DuHsdkZLuiA==}
|
||||||
|
|
||||||
@@ -3059,9 +3021,6 @@ packages:
|
|||||||
fluent-ffmpeg-simplified@0.1.0:
|
fluent-ffmpeg-simplified@0.1.0:
|
||||||
resolution: {integrity: sha512-u3McLUh6H6/hhXYxfZcSGwCJAAlN8wsCCPZjVpaK9HIIvmjOB3G584H3PAWZb/ZQTHVKUrzhjNEYMXZXZjOR+g==}
|
resolution: {integrity: sha512-u3McLUh6H6/hhXYxfZcSGwCJAAlN8wsCCPZjVpaK9HIIvmjOB3G584H3PAWZb/ZQTHVKUrzhjNEYMXZXZjOR+g==}
|
||||||
|
|
||||||
fn.name@1.1.0:
|
|
||||||
resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
|
|
||||||
|
|
||||||
follow-redirects@1.16.0:
|
follow-redirects@1.16.0:
|
||||||
resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
|
resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
|
||||||
engines: {node: '>=4.0'}
|
engines: {node: '>=4.0'}
|
||||||
@@ -3351,10 +3310,6 @@ packages:
|
|||||||
is-property@1.0.2:
|
is-property@1.0.2:
|
||||||
resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
|
resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
|
||||||
|
|
||||||
is-stream@2.0.1:
|
|
||||||
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
|
|
||||||
engines: {node: '>=8'}
|
|
||||||
|
|
||||||
is-stream@4.0.1:
|
is-stream@4.0.1:
|
||||||
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
|
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
@@ -3461,9 +3416,6 @@ packages:
|
|||||||
klaw@3.0.0:
|
klaw@3.0.0:
|
||||||
resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==}
|
resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==}
|
||||||
|
|
||||||
kuler@2.0.0:
|
|
||||||
resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
|
|
||||||
|
|
||||||
levn@0.3.0:
|
levn@0.3.0:
|
||||||
resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
|
resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
@@ -3582,10 +3534,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
|
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
logform@2.7.0:
|
|
||||||
resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==}
|
|
||||||
engines: {node: '>= 12.0.0'}
|
|
||||||
|
|
||||||
loglevel@1.9.2:
|
loglevel@1.9.2:
|
||||||
resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
|
resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
|
||||||
engines: {node: '>= 0.6.0'}
|
engines: {node: '>= 0.6.0'}
|
||||||
@@ -3845,9 +3793,6 @@ packages:
|
|||||||
once@1.4.0:
|
once@1.4.0:
|
||||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||||
|
|
||||||
one-time@1.0.0:
|
|
||||||
resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==}
|
|
||||||
|
|
||||||
onetime@5.1.2:
|
onetime@5.1.2:
|
||||||
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
|
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@@ -4490,9 +4435,6 @@ packages:
|
|||||||
sprintf-js@1.0.3:
|
sprintf-js@1.0.3:
|
||||||
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
|
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
|
||||||
|
|
||||||
stack-trace@0.0.10:
|
|
||||||
resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
|
|
||||||
|
|
||||||
stackback@0.0.2:
|
stackback@0.0.2:
|
||||||
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
|
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
|
||||||
|
|
||||||
@@ -4631,9 +4573,6 @@ packages:
|
|||||||
engines: {node: '>=4.0.0'}
|
engines: {node: '>=4.0.0'}
|
||||||
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
|
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
|
||||||
|
|
||||||
text-hex@1.0.0:
|
|
||||||
resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==}
|
|
||||||
|
|
||||||
text-table@0.2.0:
|
text-table@0.2.0:
|
||||||
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
||||||
|
|
||||||
@@ -4714,10 +4653,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
|
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
triple-beam@1.4.1:
|
|
||||||
resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==}
|
|
||||||
engines: {node: '>= 14.0.0'}
|
|
||||||
|
|
||||||
ts-mixer@6.0.4:
|
ts-mixer@6.0.4:
|
||||||
resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==}
|
resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==}
|
||||||
|
|
||||||
@@ -5022,14 +4957,6 @@ packages:
|
|||||||
wide-align@1.1.5:
|
wide-align@1.1.5:
|
||||||
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
|
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
|
||||||
|
|
||||||
winston-transport@4.9.0:
|
|
||||||
resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==}
|
|
||||||
engines: {node: '>= 12.0.0'}
|
|
||||||
|
|
||||||
winston@3.19.0:
|
|
||||||
resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==}
|
|
||||||
engines: {node: '>= 12.0.0'}
|
|
||||||
|
|
||||||
word-wrap@1.2.5:
|
word-wrap@1.2.5:
|
||||||
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
|
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
@@ -5237,14 +5164,6 @@ snapshots:
|
|||||||
'@biomejs/cli-win32-x64@2.4.16':
|
'@biomejs/cli-win32-x64@2.4.16':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@colors/colors@1.6.0': {}
|
|
||||||
|
|
||||||
'@dabh/diagnostics@2.0.8':
|
|
||||||
dependencies:
|
|
||||||
'@so-ric/colorspace': 1.1.6
|
|
||||||
enabled: 2.0.0
|
|
||||||
kuler: 2.0.0
|
|
||||||
|
|
||||||
'@discordjs/builders@1.14.1':
|
'@discordjs/builders@1.14.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@discordjs/formatters': 0.6.2
|
'@discordjs/formatters': 0.6.2
|
||||||
@@ -6316,11 +6235,6 @@ snapshots:
|
|||||||
- '@emnapi/core'
|
- '@emnapi/core'
|
||||||
- '@emnapi/runtime'
|
- '@emnapi/runtime'
|
||||||
|
|
||||||
'@so-ric/colorspace@1.1.6':
|
|
||||||
dependencies:
|
|
||||||
color: 5.0.3
|
|
||||||
text-hex: 1.0.0
|
|
||||||
|
|
||||||
'@standard-schema/spec@1.1.0': {}
|
'@standard-schema/spec@1.1.0': {}
|
||||||
|
|
||||||
'@tailwindcss/node@4.3.0':
|
'@tailwindcss/node@4.3.0':
|
||||||
@@ -6504,8 +6418,6 @@ snapshots:
|
|||||||
'@types/http-errors': 2.0.5
|
'@types/http-errors': 2.0.5
|
||||||
'@types/node': 25.9.0
|
'@types/node': 25.9.0
|
||||||
|
|
||||||
'@types/triple-beam@1.3.5': {}
|
|
||||||
|
|
||||||
'@types/ws@8.18.1':
|
'@types/ws@8.18.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 25.8.0
|
'@types/node': 25.8.0
|
||||||
@@ -6649,8 +6561,6 @@ snapshots:
|
|||||||
|
|
||||||
astral-regex@1.0.0: {}
|
astral-regex@1.0.0: {}
|
||||||
|
|
||||||
async@3.2.6: {}
|
|
||||||
|
|
||||||
asyncc@2.0.9: {}
|
asyncc@2.0.9: {}
|
||||||
|
|
||||||
asynckit@0.4.0: {}
|
asynckit@0.4.0: {}
|
||||||
@@ -6840,27 +6750,12 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
color-name: 1.1.4
|
color-name: 1.1.4
|
||||||
|
|
||||||
color-convert@3.1.3:
|
|
||||||
dependencies:
|
|
||||||
color-name: 2.1.0
|
|
||||||
|
|
||||||
color-name@1.1.3: {}
|
color-name@1.1.3: {}
|
||||||
|
|
||||||
color-name@1.1.4: {}
|
color-name@1.1.4: {}
|
||||||
|
|
||||||
color-name@2.1.0: {}
|
|
||||||
|
|
||||||
color-string@2.1.4:
|
|
||||||
dependencies:
|
|
||||||
color-name: 2.1.0
|
|
||||||
|
|
||||||
color-support@1.1.3: {}
|
color-support@1.1.3: {}
|
||||||
|
|
||||||
color@5.0.3:
|
|
||||||
dependencies:
|
|
||||||
color-convert: 3.1.3
|
|
||||||
color-string: 2.1.4
|
|
||||||
|
|
||||||
colorette@2.0.20: {}
|
colorette@2.0.20: {}
|
||||||
|
|
||||||
combined-stream@1.0.8:
|
combined-stream@1.0.8:
|
||||||
@@ -7064,8 +6959,6 @@ snapshots:
|
|||||||
|
|
||||||
emoji-regex@8.0.0: {}
|
emoji-regex@8.0.0: {}
|
||||||
|
|
||||||
enabled@2.0.0: {}
|
|
||||||
|
|
||||||
encodeurl@2.0.0: {}
|
encodeurl@2.0.0: {}
|
||||||
|
|
||||||
end-of-stream@1.4.5:
|
end-of-stream@1.4.5:
|
||||||
@@ -7369,8 +7262,6 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
picomatch: 4.0.4
|
picomatch: 4.0.4
|
||||||
|
|
||||||
fecha@4.2.3: {}
|
|
||||||
|
|
||||||
fetch-cookie@3.2.0:
|
fetch-cookie@3.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
set-cookie-parser: 2.7.2
|
set-cookie-parser: 2.7.2
|
||||||
@@ -7453,8 +7344,6 @@ snapshots:
|
|||||||
execa: 9.6.1
|
execa: 9.6.1
|
||||||
string-argv: 0.3.2
|
string-argv: 0.3.2
|
||||||
|
|
||||||
fn.name@1.1.0: {}
|
|
||||||
|
|
||||||
follow-redirects@1.16.0: {}
|
follow-redirects@1.16.0: {}
|
||||||
|
|
||||||
form-data@4.0.5:
|
form-data@4.0.5:
|
||||||
@@ -7737,8 +7626,6 @@ snapshots:
|
|||||||
|
|
||||||
is-property@1.0.2: {}
|
is-property@1.0.2: {}
|
||||||
|
|
||||||
is-stream@2.0.1: {}
|
|
||||||
|
|
||||||
is-stream@4.0.1: {}
|
is-stream@4.0.1: {}
|
||||||
|
|
||||||
is-unicode-supported@0.1.0: {}
|
is-unicode-supported@0.1.0: {}
|
||||||
@@ -7864,8 +7751,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
graceful-fs: 4.2.11
|
graceful-fs: 4.2.11
|
||||||
|
|
||||||
kuler@2.0.0: {}
|
|
||||||
|
|
||||||
levn@0.3.0:
|
levn@0.3.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
prelude-ls: 1.1.2
|
prelude-ls: 1.1.2
|
||||||
@@ -7956,15 +7841,6 @@ snapshots:
|
|||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
is-unicode-supported: 0.1.0
|
is-unicode-supported: 0.1.0
|
||||||
|
|
||||||
logform@2.7.0:
|
|
||||||
dependencies:
|
|
||||||
'@colors/colors': 1.6.0
|
|
||||||
'@types/triple-beam': 1.3.5
|
|
||||||
fecha: 4.2.3
|
|
||||||
ms: 2.1.3
|
|
||||||
safe-stable-stringify: 2.5.0
|
|
||||||
triple-beam: 1.4.1
|
|
||||||
|
|
||||||
loglevel@1.9.2: {}
|
loglevel@1.9.2: {}
|
||||||
|
|
||||||
lru-cache@6.0.0:
|
lru-cache@6.0.0:
|
||||||
@@ -8199,10 +8075,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
wrappy: 1.0.2
|
wrappy: 1.0.2
|
||||||
|
|
||||||
one-time@1.0.0:
|
|
||||||
dependencies:
|
|
||||||
fn.name: 1.1.0
|
|
||||||
|
|
||||||
onetime@5.1.2:
|
onetime@5.1.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
mimic-fn: 2.1.0
|
mimic-fn: 2.1.0
|
||||||
@@ -8903,8 +8775,6 @@ snapshots:
|
|||||||
|
|
||||||
sprintf-js@1.0.3: {}
|
sprintf-js@1.0.3: {}
|
||||||
|
|
||||||
stack-trace@0.0.10: {}
|
|
||||||
|
|
||||||
stackback@0.0.2: {}
|
stackback@0.0.2: {}
|
||||||
|
|
||||||
standard-as-callback@2.1.0: {}
|
standard-as-callback@2.1.0: {}
|
||||||
@@ -9044,8 +8914,6 @@ snapshots:
|
|||||||
array-back: 2.0.0
|
array-back: 2.0.0
|
||||||
typical: 2.6.1
|
typical: 2.6.1
|
||||||
|
|
||||||
text-hex@1.0.0: {}
|
|
||||||
|
|
||||||
text-table@0.2.0: {}
|
text-table@0.2.0: {}
|
||||||
|
|
||||||
thirty-two@1.0.2: {}
|
thirty-two@1.0.2: {}
|
||||||
@@ -9107,8 +8975,6 @@ snapshots:
|
|||||||
|
|
||||||
trim-newlines@3.0.1: {}
|
trim-newlines@3.0.1: {}
|
||||||
|
|
||||||
triple-beam@1.4.1: {}
|
|
||||||
|
|
||||||
ts-mixer@6.0.4: {}
|
ts-mixer@6.0.4: {}
|
||||||
|
|
||||||
tsd@0.33.0:
|
tsd@0.33.0:
|
||||||
@@ -9381,26 +9247,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
string-width: 4.2.3
|
string-width: 4.2.3
|
||||||
|
|
||||||
winston-transport@4.9.0:
|
|
||||||
dependencies:
|
|
||||||
logform: 2.7.0
|
|
||||||
readable-stream: 3.6.2
|
|
||||||
triple-beam: 1.4.1
|
|
||||||
|
|
||||||
winston@3.19.0:
|
|
||||||
dependencies:
|
|
||||||
'@colors/colors': 1.6.0
|
|
||||||
'@dabh/diagnostics': 2.0.8
|
|
||||||
async: 3.2.6
|
|
||||||
is-stream: 2.0.1
|
|
||||||
logform: 2.7.0
|
|
||||||
one-time: 1.0.0
|
|
||||||
readable-stream: 3.6.2
|
|
||||||
safe-stable-stringify: 2.5.0
|
|
||||||
stack-trace: 0.0.10
|
|
||||||
triple-beam: 1.4.1
|
|
||||||
winston-transport: 4.9.0
|
|
||||||
|
|
||||||
word-wrap@1.2.5: {}
|
word-wrap@1.2.5: {}
|
||||||
|
|
||||||
wordwrap@1.0.0: {}
|
wordwrap@1.0.0: {}
|
||||||
|
|||||||
@@ -30,10 +30,10 @@
|
|||||||
"p-limit": "^7.3.0",
|
"p-limit": "^7.3.0",
|
||||||
"p-retry": "^8.0.0",
|
"p-retry": "^8.0.0",
|
||||||
"pg": "^8.21.0",
|
"pg": "^8.21.0",
|
||||||
|
"pino": "^9.6.0",
|
||||||
"piscina": "^5.1.4",
|
"piscina": "^5.1.4",
|
||||||
"prism-media": "2.0.0-alpha.0",
|
"prism-media": "2.0.0-alpha.0",
|
||||||
"sharp": "^0.34.5",
|
"sharp": "^0.34.5",
|
||||||
"winston": "^3.19.0",
|
|
||||||
"ws": "^8.20.1",
|
"ws": "^8.20.1",
|
||||||
"zod": "^4.4.3"
|
"zod": "^4.4.3"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
} from "../shared/database/drizzle.js";
|
} from "../shared/database/drizzle.js";
|
||||||
import { runMigrations } from "../shared/database/migrate.js";
|
import { runMigrations } from "../shared/database/migrate.js";
|
||||||
import { createDiscordClientOptions } from "../shared/discord/clientOptions.js";
|
import { createDiscordClientOptions } from "../shared/discord/clientOptions.js";
|
||||||
import { createChildLogger } from "../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { createGracefulShutdown } from "./shutdown.js";
|
import { createGracefulShutdown } from "./shutdown.js";
|
||||||
|
|
||||||
const logger = createChildLogger("discord-gateway");
|
const logger = createChildLogger("discord-gateway");
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { CommandHandler } from "../modules/command-handler/commandHandler.j
|
|||||||
import type { EventBroadcaster } from "../modules/event-broadcaster/index.js";
|
import type { EventBroadcaster } from "../modules/event-broadcaster/index.js";
|
||||||
import type { VoiceController } from "../modules/voice-recording/voiceController.js";
|
import type { VoiceController } from "../modules/voice-recording/voiceController.js";
|
||||||
import type { closeDatabase } from "../shared/database/drizzle.js";
|
import type { closeDatabase } from "../shared/database/drizzle.js";
|
||||||
import type { createChildLogger } from "../shared/logger/logger.js";
|
import type { createChildLogger } from "@bete/shared/logger";
|
||||||
|
|
||||||
type Logger = ReturnType<typeof createChildLogger>;
|
type Logger = ReturnType<typeof createChildLogger>;
|
||||||
type CloseDatabase = typeof closeDatabase;
|
type CloseDatabase = typeof closeDatabase;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import "libsodium-wrappers";
|
|||||||
import "@snazzah/davey";
|
import "@snazzah/davey";
|
||||||
import "dotenv/config";
|
import "dotenv/config";
|
||||||
import { initializeDiscordGateway } from "./app/bootstrap.js";
|
import { initializeDiscordGateway } from "./app/bootstrap.js";
|
||||||
import { createChildLogger } from "./shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
|
|
||||||
const logger = createChildLogger("discord-gateway");
|
const logger = createChildLogger("discord-gateway");
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import type { Client } from "discord.js-selfbot-v13";
|
|||||||
import { AbortError } from "p-retry";
|
import { AbortError } from "p-retry";
|
||||||
import { Piscina } from "piscina";
|
import { Piscina } from "piscina";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { retryWithBackoff } from "../../shared/utils/retry.js";
|
import { retryWithBackoff } from "@bete/shared/utils";
|
||||||
import type { EventBroadcaster } from "../event-broadcaster/index.js";
|
import type { EventBroadcaster } from "../event-broadcaster/index.js";
|
||||||
import { invalidateAnalyticsCache } from "../message-capture/analyticsStore.js";
|
import { invalidateAnalyticsCache } from "../message-capture/analyticsStore.js";
|
||||||
import { isAgeRestrictedMetadata } from "../message-capture/messageMetadata.js";
|
import { isAgeRestrictedMetadata } from "../message-capture/messageMetadata.js";
|
||||||
@@ -380,7 +380,6 @@ async function processIndividualFallback(
|
|||||||
retries: 0,
|
retries: 0,
|
||||||
minTimeout: 0,
|
minTimeout: 0,
|
||||||
maxTimeout: 0,
|
maxTimeout: 0,
|
||||||
logger,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { Client, PermissionString } from "discord.js-selfbot-v13";
|
import type { Client, PermissionString } from "discord.js-selfbot-v13";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { createModerationAction } from "../message-capture/messageStore.js";
|
import { createModerationAction } from "../message-capture/messageStore.js";
|
||||||
import type { MessageRecord } from "../message-capture/types.js";
|
import type { MessageRecord } from "../message-capture/types.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { getCachedText, upsertCachedText } from "./textCacheStore.js";
|
import { getCachedText, upsertCachedText } from "./textCacheStore.js";
|
||||||
import { llmDetectBadwords } from "./llmClient.js";
|
import { llmDetectBadwords } from "./llmClient.js";
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
|
|
||||||
import OpenAI from "openai";
|
import OpenAI from "openai";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { retryWithBackoff } from "../../shared/utils/retry.js";
|
import { retryWithBackoff } from "@bete/shared/utils";
|
||||||
import { withLlmConcurrency } from "./concurrencyLimiter.js";
|
import { withLlmConcurrency } from "./concurrencyLimiter.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
|
|
||||||
const log = createChildLogger("llm-client");
|
const log = createChildLogger("llm-client");
|
||||||
|
|
||||||
@@ -136,7 +136,6 @@ export async function llmChat(
|
|||||||
minTimeout: 0,
|
minTimeout: 0,
|
||||||
maxTimeout: 0,
|
maxTimeout: 0,
|
||||||
factor: 2,
|
factor: 2,
|
||||||
logger: log,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import type { ChatCompletion } from "openai/resources/chat/completions";
|
|||||||
import { AbortError } from "p-retry";
|
import { AbortError } from "p-retry";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { retryWithBackoff } from "../../shared/utils/retry.js";
|
import { retryWithBackoff } from "@bete/shared/utils";
|
||||||
import { resizeImageForVision } from "../attachment-upload/imageResizer.js";
|
import { resizeImageForVision } from "../attachment-upload/imageResizer.js";
|
||||||
import { extractMessageMediaEvidence } from "../message-capture/messageMetadata.js";
|
import { extractMessageMediaEvidence } from "../message-capture/messageMetadata.js";
|
||||||
import type {
|
import type {
|
||||||
@@ -677,7 +677,6 @@ async function callModerationLLM(
|
|||||||
minTimeout: 3000,
|
minTimeout: 3000,
|
||||||
maxTimeout: 8000,
|
maxTimeout: 8000,
|
||||||
factor: 2,
|
factor: 2,
|
||||||
logger: log,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
parsed = analysis.parsed;
|
parsed = analysis.parsed;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
* Enables full audit trail and debugging of moderation decisions.
|
* Enables full audit trail and debugging of moderation decisions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import type { AnalysisResult } from "../message-capture/types.js";
|
import type { AnalysisResult } from "../message-capture/types.js";
|
||||||
|
|
||||||
const logger = createChildLogger("response-logger");
|
const logger = createChildLogger("response-logger");
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
|
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
|
|
||||||
const logger = createChildLogger("sticker-cache");
|
const logger = createChildLogger("sticker-cache");
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { createHash } from "node:crypto";
|
import { createHash } from "node:crypto";
|
||||||
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
|
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
|
|
||||||
const logger = createChildLogger("text-cache-store");
|
const logger = createChildLogger("text-cache-store");
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { resolve } from "node:dns/promises";
|
import { resolve } from "node:dns/promises";
|
||||||
import { isIP } from "node:net";
|
import { isIP } from "node:net";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
|
|
||||||
const log = createChildLogger("urlFetcher");
|
const log = createChildLogger("urlFetcher");
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { uploadToTele } from "./teleUpload.js";
|
import { uploadToTele } from "./teleUpload.js";
|
||||||
import {
|
import {
|
||||||
updateAttachmentAsFailedUpload,
|
updateAttachmentAsFailedUpload,
|
||||||
@@ -45,7 +45,6 @@ export async function uploadAttachmentToTele(
|
|||||||
uploadUrl: config.TELE_UPLOAD_URL,
|
uploadUrl: config.TELE_UPLOAD_URL,
|
||||||
timeoutMs: config.ATTACHMENT_UPLOAD_TIMEOUT_MS,
|
timeoutMs: config.ATTACHMENT_UPLOAD_TIMEOUT_MS,
|
||||||
retries: 0,
|
retries: 0,
|
||||||
logger,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return result.url;
|
return result.url;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import sharp from "sharp";
|
import sharp from "sharp";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
|
|
||||||
const log = createChildLogger("imageResizer");
|
const log = createChildLogger("imageResizer");
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { CustomLogger } from "../../shared/logger/logger.js";
|
import { retryWithBackoff } from "@bete/shared/utils";
|
||||||
import { retryWithBackoff } from "../../shared/utils/retry.js";
|
|
||||||
|
|
||||||
export interface TeleUploadResponse {
|
export interface TeleUploadResponse {
|
||||||
download_url: string;
|
download_url: string;
|
||||||
@@ -37,7 +36,6 @@ export async function uploadToTele(input: {
|
|||||||
uploadUrl: string;
|
uploadUrl: string;
|
||||||
timeoutMs?: number;
|
timeoutMs?: number;
|
||||||
retries: number;
|
retries: number;
|
||||||
logger: CustomLogger;
|
|
||||||
}): Promise<TeleUploadResult> {
|
}): Promise<TeleUploadResult> {
|
||||||
const {
|
const {
|
||||||
buffer,
|
buffer,
|
||||||
@@ -46,7 +44,6 @@ export async function uploadToTele(input: {
|
|||||||
uploadUrl,
|
uploadUrl,
|
||||||
timeoutMs,
|
timeoutMs,
|
||||||
retries,
|
retries,
|
||||||
logger,
|
|
||||||
} = input;
|
} = input;
|
||||||
|
|
||||||
const response = await retryWithBackoff(
|
const response = await retryWithBackoff(
|
||||||
@@ -77,7 +74,6 @@ export async function uploadToTele(input: {
|
|||||||
retries,
|
retries,
|
||||||
minTimeout: 0,
|
minTimeout: 0,
|
||||||
maxTimeout: 0,
|
maxTimeout: 0,
|
||||||
logger,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { Client } from "discord.js-selfbot-v13";
|
import type { Client } from "discord.js-selfbot-v13";
|
||||||
import Redis from "ioredis";
|
import Redis from "ioredis";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { discordPlayer } from "../voice-recording/player.js";
|
import { discordPlayer } from "../voice-recording/player.js";
|
||||||
import type { VoiceController } from "../voice-recording/voiceController.js";
|
import type { VoiceController } from "../voice-recording/voiceController.js";
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import Redis from "ioredis";
|
import Redis from "ioredis";
|
||||||
import type { CustomLogger } from "../../shared/logger/logger.js";
|
import type { CustomLogger } from "@bete/shared/logger";
|
||||||
|
|
||||||
export interface DiscordGatewayEvent {
|
export interface DiscordGatewayEvent {
|
||||||
type: string;
|
type: string;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
|
import { executeAll, executeGet } from "../../shared/database/drizzle.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import type { MessageRecord } from "./types.js";
|
import type { MessageRecord } from "./types.js";
|
||||||
|
|
||||||
const logger = createChildLogger("analytics-store");
|
const logger = createChildLogger("analytics-store");
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { WebSocket } from "ws";
|
import type { WebSocket } from "ws";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import type { MediaState } from "../voice-recording/mediaTypes.js";
|
import type { MediaState } from "../voice-recording/mediaTypes.js";
|
||||||
import type {
|
import type {
|
||||||
AnalysisQueueStatus,
|
AnalysisQueueStatus,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { Client, Message } from "discord.js-selfbot-v13";
|
import type { Client, Message } from "discord.js-selfbot-v13";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { queueMessageAnalysis } from "../ai-moderation/aiAnalyzer.js";
|
import { queueMessageAnalysis } from "../ai-moderation/aiAnalyzer.js";
|
||||||
import { processAttachmentUpload } from "../attachment-upload/attachmentUploader.js";
|
import { processAttachmentUpload } from "../attachment-upload/attachmentUploader.js";
|
||||||
import type { EventBroadcaster } from "../event-broadcaster/eventBroadcaster.js";
|
import type { EventBroadcaster } from "../event-broadcaster/eventBroadcaster.js";
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
moderationActionsTable,
|
moderationActionsTable,
|
||||||
retentionPoliciesTable,
|
retentionPoliciesTable,
|
||||||
} from "../../shared/database/schema.js";
|
} from "../../shared/database/schema.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { decodeCursor, encodeCursor } from "../message-capture/pagination.js";
|
import { decodeCursor, encodeCursor } from "../message-capture/pagination.js";
|
||||||
import type {
|
import type {
|
||||||
AttachmentRecord,
|
AttachmentRecord,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
} from "@discordjs/voice";
|
} from "@discordjs/voice";
|
||||||
import type { Client, VoiceChannel } from "discord.js-selfbot-v13";
|
import type { Client, VoiceChannel } from "discord.js-selfbot-v13";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { PacketFilter } from "./packetFilter.js";
|
import { PacketFilter } from "./packetFilter.js";
|
||||||
import { subscribeToAudioStream } from "./recorder/audioStream.js";
|
import { subscribeToAudioStream } from "./recorder/audioStream.js";
|
||||||
import { OpusDecoder } from "./recorder/decoder.js";
|
import { OpusDecoder } from "./recorder/decoder.js";
|
||||||
@@ -26,7 +26,7 @@ import {
|
|||||||
type RecordingSession,
|
type RecordingSession,
|
||||||
} from "./recorder/sessionRecording.js";
|
} from "./recorder/sessionRecording.js";
|
||||||
import { uploadRecordingSegment } from "./recorder/uploader.js";
|
import { uploadRecordingSegment } from "./recorder/uploader.js";
|
||||||
import { retryWithBackoff } from "../../shared/utils/retry.js";
|
import { retryWithBackoff } from "@bete/shared/utils";
|
||||||
import type { PcmBroadcaster } from "../message-capture/types.js";
|
import type { PcmBroadcaster } from "../message-capture/types.js";
|
||||||
|
|
||||||
const logger = createChildLogger("recorder");
|
const logger = createChildLogger("recorder");
|
||||||
@@ -95,7 +95,6 @@ export async function startRecording(
|
|||||||
retries: 0,
|
retries: 0,
|
||||||
minTimeout: 0,
|
minTimeout: 0,
|
||||||
maxTimeout: 0,
|
maxTimeout: 0,
|
||||||
logger,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
logger.info("Connected to voice channel. Recording started");
|
logger.info("Connected to voice channel. Recording started");
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
updateVoiceRecordingAsFailed,
|
updateVoiceRecordingAsFailed,
|
||||||
updateVoiceRecordingAsUploaded,
|
updateVoiceRecordingAsUploaded,
|
||||||
} from "../../../shared/database/voiceRecordingRepo.js";
|
} from "../../../shared/database/voiceRecordingRepo.js";
|
||||||
import { createChildLogger } from "../../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { uploadToTele } from "../teleUpload.js";
|
import { uploadToTele } from "../teleUpload.js";
|
||||||
|
|
||||||
const logger = createChildLogger("recording-uploader");
|
const logger = createChildLogger("recording-uploader");
|
||||||
@@ -61,7 +61,6 @@ export async function uploadRecordingSegment(input: {
|
|||||||
contentType: "audio/ogg",
|
contentType: "audio/ogg",
|
||||||
uploadUrl: config.TELE_UPLOAD_URL,
|
uploadUrl: config.TELE_UPLOAD_URL,
|
||||||
retries: 0,
|
retries: 0,
|
||||||
logger,
|
|
||||||
});
|
});
|
||||||
const downloadUrl = uploadResult.url;
|
const downloadUrl = uploadResult.url;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import type { CustomLogger } from "../../shared/logger/logger.js";
|
import { retryWithBackoff } from "@bete/shared/utils";
|
||||||
import { retryWithBackoff } from "../../shared/utils/retry.js";
|
|
||||||
|
|
||||||
export interface TeleUploadResponse {
|
export interface TeleUploadResponse {
|
||||||
download_url: string;
|
download_url: string;
|
||||||
@@ -37,7 +36,6 @@ export async function uploadToTele(input: {
|
|||||||
uploadUrl: string;
|
uploadUrl: string;
|
||||||
timeoutMs?: number;
|
timeoutMs?: number;
|
||||||
retries: number;
|
retries: number;
|
||||||
logger: CustomLogger;
|
|
||||||
}): Promise<TeleUploadResult> {
|
}): Promise<TeleUploadResult> {
|
||||||
const {
|
const {
|
||||||
buffer,
|
buffer,
|
||||||
@@ -46,7 +44,6 @@ export async function uploadToTele(input: {
|
|||||||
uploadUrl,
|
uploadUrl,
|
||||||
timeoutMs,
|
timeoutMs,
|
||||||
retries,
|
retries,
|
||||||
logger,
|
|
||||||
} = input;
|
} = input;
|
||||||
|
|
||||||
const response = await retryWithBackoff(
|
const response = await retryWithBackoff(
|
||||||
@@ -77,7 +74,6 @@ export async function uploadToTele(input: {
|
|||||||
retries,
|
retries,
|
||||||
minTimeout: 0,
|
minTimeout: 0,
|
||||||
maxTimeout: 0,
|
maxTimeout: 0,
|
||||||
logger,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { getVoiceConnection, type VoiceConnection } from "@discordjs/voice";
|
import { getVoiceConnection, type VoiceConnection } from "@discordjs/voice";
|
||||||
import type { Client, Guild, VoiceChannel } from "discord.js-selfbot-v13";
|
import type { Client, Guild, VoiceChannel } from "discord.js-selfbot-v13";
|
||||||
import { AppError } from "@bete/shared/errors";
|
import { AppError } from "@bete/shared/errors";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { discordPlayer } from "./player.js";
|
import { discordPlayer } from "./player.js";
|
||||||
import { startRecording, stopRecording } from "./recorder.js";
|
import { startRecording, stopRecording } from "./recorder.js";
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { drizzle as drizzlePostgres } from "drizzle-orm/node-postgres";
|
|||||||
import type { PoolClient } from "pg";
|
import type { PoolClient } from "pg";
|
||||||
import { Pool } from "pg";
|
import { Pool } from "pg";
|
||||||
import { config } from "../../shared/config/config.js";
|
import { config } from "../../shared/config/config.js";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import * as schema from "./schema.js";
|
import * as schema from "./schema.js";
|
||||||
|
|
||||||
const logger = createChildLogger("drizzle");
|
const logger = createChildLogger("drizzle");
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import "dotenv/config";
|
|||||||
import type { PoolClient } from "pg";
|
import type { PoolClient } from "pg";
|
||||||
import { drizzle as drizzlePostgres } from "drizzle-orm/node-postgres";
|
import { drizzle as drizzlePostgres } from "drizzle-orm/node-postgres";
|
||||||
import { migrate as migratePostgres } from "drizzle-orm/node-postgres/migrator";
|
import { migrate as migratePostgres } from "drizzle-orm/node-postgres/migrator";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import {
|
import {
|
||||||
closeDatabase,
|
closeDatabase,
|
||||||
initializeDatabase,
|
initializeDatabase,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { runMigrations } from "./migrate.js";
|
import { runMigrations } from "./migrate.js";
|
||||||
|
|
||||||
const logger = createChildLogger("migrate-cli");
|
const logger = createChildLogger("migrate-cli");
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { desc, eq } from "drizzle-orm";
|
import { desc, eq } from "drizzle-orm";
|
||||||
import { createChildLogger } from "../../shared/logger/logger.js";
|
import { createChildLogger } from "@bete/shared/logger";
|
||||||
import { getDatabase } from "./drizzle.js";
|
import { getDatabase } from "./drizzle.js";
|
||||||
import {
|
import {
|
||||||
type VoiceRecording,
|
type VoiceRecording,
|
||||||
|
|||||||
@@ -1,132 +0,0 @@
|
|||||||
import fs from "node:fs";
|
|
||||||
import path from "node:path";
|
|
||||||
import winston from "winston";
|
|
||||||
import { formatLogMetadata, serializeLogValue } from "./serialization.js";
|
|
||||||
|
|
||||||
const isDev = process.env.NODE_ENV !== "production";
|
|
||||||
const logLevel = process.env.LOG_LEVEL || (isDev ? "debug" : "info");
|
|
||||||
const logsDir = path.resolve(process.cwd(), "logs");
|
|
||||||
|
|
||||||
fs.mkdirSync(logsDir, { recursive: true });
|
|
||||||
|
|
||||||
const metadataFormat = winston.format((info) => {
|
|
||||||
const {
|
|
||||||
level: _level,
|
|
||||||
message: _message,
|
|
||||||
timestamp: _timestamp,
|
|
||||||
...metadata
|
|
||||||
} = info;
|
|
||||||
|
|
||||||
for (const key of Object.keys(metadata)) {
|
|
||||||
delete info[key];
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.assign(info, formatLogMetadata(metadata));
|
|
||||||
return info;
|
|
||||||
});
|
|
||||||
|
|
||||||
const consoleFormat = winston.format.printf((info) => {
|
|
||||||
const { level, message, timestamp, context, ...metadata } = info;
|
|
||||||
const contextLabel = context ? ` [${String(context)}]` : "";
|
|
||||||
const metadataText = Object.keys(metadata).length
|
|
||||||
? ` ${JSON.stringify(formatLogMetadata(metadata))}`
|
|
||||||
: "";
|
|
||||||
|
|
||||||
return `${timestamp} ${level}${contextLabel}: ${message}${metadataText}`;
|
|
||||||
});
|
|
||||||
|
|
||||||
export interface CustomLogger {
|
|
||||||
error: (msgOrObj: any, msgOrArgs?: any, ...args: any[]) => void;
|
|
||||||
warn: (msgOrObj: any, msgOrArgs?: any, ...args: any[]) => void;
|
|
||||||
info: (msgOrObj: any, msgOrArgs?: any, ...args: any[]) => void;
|
|
||||||
debug: (msgOrObj: any, msgOrArgs?: any, ...args: any[]) => void;
|
|
||||||
trace: (msgOrObj: any, msgOrArgs?: any, ...args: any[]) => void;
|
|
||||||
fatal: (msgOrObj: any, msgOrArgs?: any, ...args: any[]) => void;
|
|
||||||
silent: (msgOrObj: any, msgOrArgs?: any, ...args: any[]) => void;
|
|
||||||
child(options: { context: string } & Record<string, any>): CustomLogger;
|
|
||||||
[key: string]: any;
|
|
||||||
}
|
|
||||||
|
|
||||||
const winstonLogger = winston.createLogger({
|
|
||||||
level: logLevel,
|
|
||||||
levels: winston.config.npm.levels,
|
|
||||||
format: winston.format.combine(
|
|
||||||
winston.format.timestamp(),
|
|
||||||
winston.format.errors({ stack: true }),
|
|
||||||
metadataFormat(),
|
|
||||||
),
|
|
||||||
transports: [
|
|
||||||
new winston.transports.Console({
|
|
||||||
format: winston.format.combine(
|
|
||||||
winston.format.colorize(),
|
|
||||||
winston.format.timestamp(),
|
|
||||||
metadataFormat(),
|
|
||||||
consoleFormat,
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
new winston.transports.File({
|
|
||||||
filename: path.join(logsDir, "app.log"),
|
|
||||||
format: winston.format.json(),
|
|
||||||
}),
|
|
||||||
new winston.transports.File({
|
|
||||||
filename: path.join(logsDir, "error.log"),
|
|
||||||
level: "error",
|
|
||||||
format: winston.format.json(),
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
function wrapLogger(wLogger: winston.Logger): CustomLogger {
|
|
||||||
const logAtLevel = (level: string) => {
|
|
||||||
return (arg1: any, arg2?: any) => {
|
|
||||||
if (arg1 instanceof Error) {
|
|
||||||
wLogger.log(level, arg1.message, { error: arg1 });
|
|
||||||
} else if (typeof arg1 === "object" && arg1 !== null) {
|
|
||||||
const message = typeof arg2 === "string" ? arg2 : "";
|
|
||||||
wLogger.log(level, message, { ...arg1 });
|
|
||||||
} else {
|
|
||||||
const message = typeof arg1 === "string" ? arg1 : String(arg1);
|
|
||||||
const metadata = typeof arg2 === "object" && arg2 !== null ? arg2 : {};
|
|
||||||
wLogger.log(level, message, metadata);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const wrapped: CustomLogger = {
|
|
||||||
error: logAtLevel("error"),
|
|
||||||
warn: logAtLevel("warn"),
|
|
||||||
info: logAtLevel("info"),
|
|
||||||
debug: logAtLevel("debug"),
|
|
||||||
trace: logAtLevel("debug"),
|
|
||||||
fatal: logAtLevel("error"),
|
|
||||||
silent: () => {},
|
|
||||||
child: (options: any) => {
|
|
||||||
const childWinston = wLogger.child(options);
|
|
||||||
return wrapLogger(childWinston);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const proxy = new Proxy(wrapped, {
|
|
||||||
get(target, prop) {
|
|
||||||
if (prop in target) {
|
|
||||||
return (target as any)[prop];
|
|
||||||
}
|
|
||||||
const val = (wLogger as any)[prop];
|
|
||||||
if (typeof val === "function") {
|
|
||||||
return val.bind(wLogger);
|
|
||||||
}
|
|
||||||
return val;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return proxy;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const logger: CustomLogger = wrapLogger(winstonLogger);
|
|
||||||
|
|
||||||
export const createChildLogger = (context: string): CustomLogger => {
|
|
||||||
return logger.child({ context });
|
|
||||||
};
|
|
||||||
|
|
||||||
export const serializeLogValueForTest = serializeLogValue;
|
|
||||||
export const formatLogMetadataForTest = formatLogMetadata;
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
export type LogMetadata = Record<string, unknown>;
|
|
||||||
|
|
||||||
type SerializedError = {
|
|
||||||
name: string;
|
|
||||||
message: string;
|
|
||||||
stack?: string;
|
|
||||||
code?: unknown;
|
|
||||||
statusCode?: unknown;
|
|
||||||
} & Record<string, unknown>;
|
|
||||||
|
|
||||||
const serializeError = (error: Error): SerializedError => {
|
|
||||||
const serialized: SerializedError = {
|
|
||||||
name: error.name,
|
|
||||||
message: error.message,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (error.stack) {
|
|
||||||
serialized.stack = error.stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
const errorWithFields = error as Error & {
|
|
||||||
code?: unknown;
|
|
||||||
statusCode?: unknown;
|
|
||||||
[key: string]: unknown;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (errorWithFields.code !== undefined) {
|
|
||||||
serialized.code = errorWithFields.code;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (errorWithFields.statusCode !== undefined) {
|
|
||||||
serialized.statusCode = errorWithFields.statusCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const [key, value] of Object.entries(errorWithFields)) {
|
|
||||||
if (serialized[key] === undefined) {
|
|
||||||
serialized[key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return serialized;
|
|
||||||
};
|
|
||||||
|
|
||||||
const isPlainObject = (value: unknown): value is Record<string, unknown> => {
|
|
||||||
if (!value || typeof value !== "object") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const prototype = Object.getPrototypeOf(value);
|
|
||||||
return prototype === Object.prototype || prototype === null;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const serializeLogValue = (
|
|
||||||
value: unknown,
|
|
||||||
_seen: WeakSet<object> = new WeakSet(),
|
|
||||||
): unknown => {
|
|
||||||
if (value === null || value === undefined) return value;
|
|
||||||
|
|
||||||
if (value instanceof Error) {
|
|
||||||
return serializeError(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value instanceof Date) {
|
|
||||||
return value.toISOString();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value instanceof RegExp) {
|
|
||||||
return value.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof value === "object") {
|
|
||||||
if (_seen.has(value as object)) {
|
|
||||||
return "[Circular]";
|
|
||||||
}
|
|
||||||
_seen.add(value as object);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
return value.map((item) => serializeLogValue(item, _seen));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isPlainObject(value)) {
|
|
||||||
return Object.fromEntries(
|
|
||||||
Object.entries(value).map(([key, nestedValue]) => [
|
|
||||||
key,
|
|
||||||
serializeLogValue(nestedValue, _seen),
|
|
||||||
]),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof value === "object") {
|
|
||||||
try {
|
|
||||||
return `[Object ${(value as any)?.constructor?.name ?? "unknown"}]`;
|
|
||||||
} catch {
|
|
||||||
return "[Object]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const formatLogMetadata = (metadata: LogMetadata): LogMetadata => {
|
|
||||||
return Object.fromEntries(
|
|
||||||
Object.entries(metadata).map(([key, value]) => [
|
|
||||||
key,
|
|
||||||
serializeLogValue(value),
|
|
||||||
]),
|
|
||||||
);
|
|
||||||
};
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
import pRetry from "p-retry";
|
|
||||||
import type { CustomLogger } from "../../shared/logger/logger.js";
|
|
||||||
|
|
||||||
export interface RetryOptions {
|
|
||||||
retries?: number;
|
|
||||||
minTimeout?: number;
|
|
||||||
maxTimeout?: number;
|
|
||||||
factor?: number;
|
|
||||||
logger?: CustomLogger;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function retryWithBackoff<T>(
|
|
||||||
fn: () => Promise<T>,
|
|
||||||
options: RetryOptions = {},
|
|
||||||
): Promise<T> {
|
|
||||||
const {
|
|
||||||
retries = 3,
|
|
||||||
minTimeout = 0,
|
|
||||||
maxTimeout = 0,
|
|
||||||
factor = 1,
|
|
||||||
logger,
|
|
||||||
} = options;
|
|
||||||
|
|
||||||
return pRetry(fn, {
|
|
||||||
retries,
|
|
||||||
minTimeout,
|
|
||||||
maxTimeout,
|
|
||||||
factor,
|
|
||||||
onFailedAttempt: (error) => {
|
|
||||||
if (logger) {
|
|
||||||
logger.warn(
|
|
||||||
{
|
|
||||||
attempt: error.attemptNumber,
|
|
||||||
retriesLeft: error.retriesLeft,
|
|
||||||
error: error.error,
|
|
||||||
},
|
|
||||||
"Retry attempt",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user