Bladeren bron

WIP: use new logger in slackbot-proxy, packages/slack and remark-attachment-refs

Yuki Takei 1 week geleden
bovenliggende
commit
69776a0538

+ 4 - 9
apps/slackbot-proxy/package.json

@@ -47,24 +47,22 @@
     "@tsed/typeorm": "=6.43.0",
     "@tsed/typeorm": "=6.43.0",
     "axios": "^1.11.0",
     "axios": "^1.11.0",
     "body-parser": "^1.20.3",
     "body-parser": "^1.20.3",
-    "browser-bunyan": "^1.6.3",
-    "bunyan": "^1.8.15",
+    "@growi/logger": "workspace:^",
     "compression": "^1.7.4",
     "compression": "^1.7.4",
     "cookie-parser": "^1.4.5",
     "cookie-parser": "^1.4.5",
     "cross-env": "^7.0.0",
     "cross-env": "^7.0.0",
     "date-fns": "^3.6.0",
     "date-fns": "^3.6.0",
     "dotenv-flow": "^3.2.0",
     "dotenv-flow": "^3.2.0",
     "express": "^4.20.0",
     "express": "^4.20.0",
-    "express-bunyan-logger": "^1.3.3",
     "extensible-custom-error": "^0.0.7",
     "extensible-custom-error": "^0.0.7",
     "helmet": "^4.6.0",
     "helmet": "^4.6.0",
     "http-errors": "^2.0.0",
     "http-errors": "^2.0.0",
     "method-override": "^3.0.0",
     "method-override": "^3.0.0",
     "mysql2": "^2.2.5",
     "mysql2": "^2.2.5",
     "read-pkg-up": "^7.0.1",
     "read-pkg-up": "^7.0.1",
+    "pino-http": "^11.0.0",
     "tslib": "^2.8.0",
     "tslib": "^2.8.0",
-    "typeorm": "=0.2.45",
-    "universal-bunyan": "^0.9.2"
+    "typeorm": "=0.2.45"
   },
   },
   "// comments for devDependencies": {
   "// comments for devDependencies": {
     "@tsed/*": "v6.133.1 causes 'TypeError: Cannot read properties of undefined (reading 'prototype')' with `@Middleware()`",
     "@tsed/*": "v6.133.1 causes 'TypeError: Cannot read properties of undefined (reading 'prototype')' with `@Middleware()`",
@@ -75,9 +73,6 @@
     "@tsed/core": "=6.43.0",
     "@tsed/core": "=6.43.0",
     "@tsed/exceptions": "=6.43.0",
     "@tsed/exceptions": "=6.43.0",
     "@tsed/json-mapper": "=6.43.0",
     "@tsed/json-mapper": "=6.43.0",
-    "@types/bunyan": "^1.8.11",
-    "bootstrap": "^5.3.8",
-    "browser-bunyan": "^1.6.3",
-    "morgan": "^1.10.0"
+    "bootstrap": "^5.3.8"
   }
   }
 }
 }

+ 4 - 17
apps/slackbot-proxy/src/Server.ts

@@ -9,9 +9,9 @@ import bodyParser from 'body-parser';
 import compress from 'compression';
 import compress from 'compression';
 import cookieParser from 'cookie-parser';
 import cookieParser from 'cookie-parser';
 import type { Express } from 'express';
 import type { Express } from 'express';
-import expressBunyanLogger from 'express-bunyan-logger';
 import helmet from 'helmet';
 import helmet from 'helmet';
 import methodOverride from 'method-override';
 import methodOverride from 'method-override';
+import pinoHttp from 'pino-http';
 import type { ConnectionOptions } from 'typeorm';
 import type { ConnectionOptions } from 'typeorm';
 import { getConnectionManager } from 'typeorm';
 import { getConnectionManager } from 'typeorm';
 
 
@@ -162,21 +162,8 @@ export class Server {
    * Setup logger for requests
    * Setup logger for requests
    */
    */
   private setupLogger(): void {
   private setupLogger(): void {
-    // use bunyan
-    if (isProduction) {
-      const logger = loggerFactory('express');
-
-      this.app.use(
-        expressBunyanLogger({
-          logger,
-          excludes: ['*'],
-        }),
-      );
-    }
-    // use morgan
-    else {
-      const morgan = require('morgan');
-      this.app.use(morgan('dev'));
-    }
+    // biome-ignore lint/suspicious/noExplicitAny: pino-http expects Logger<string> but loggerFactory returns Logger<never>; safe at runtime
+    const httpLogger = pinoHttp({ logger: loggerFactory('express') as any });
+    this.app.use(httpLogger);
   }
   }
 }
 }

+ 2 - 2
apps/slackbot-proxy/src/config/logger/config.dev.ts

@@ -1,6 +1,6 @@
-import { UniversalBunyanConfig } from 'universal-bunyan';
+import type { LoggerConfig } from '@growi/logger';
 
 
-const config: UniversalBunyanConfig = {
+const config: LoggerConfig = {
   default: 'info',
   default: 'info',
 
 
   // 'express-session': 'debug',
   // 'express-session': 'debug',

+ 2 - 2
apps/slackbot-proxy/src/config/logger/config.prod.ts

@@ -1,6 +1,6 @@
-import { UniversalBunyanConfig } from 'universal-bunyan';
+import type { LoggerConfig } from '@growi/logger';
 
 
-const config: UniversalBunyanConfig = {
+const config: LoggerConfig = {
   default: 'info',
   default: 'info',
 
 
   // 'express-session': 'debug',
   // 'express-session': 'debug',

+ 1 - 1
apps/slackbot-proxy/src/middlewares/slack-to-growi/authorizer.ts

@@ -1,6 +1,6 @@
+import type { Logger } from '@growi/logger';
 import { AuthorizeResult, InstallationQuery } from '@slack/oauth';
 import { AuthorizeResult, InstallationQuery } from '@slack/oauth';
 import { IMiddleware, Inject, Middleware, Next, Req, Res } from '@tsed/common';
 import { IMiddleware, Inject, Middleware, Next, Req, Res } from '@tsed/common';
-import Logger from 'bunyan';
 import createError from 'http-errors';
 import createError from 'http-errors';
 
 
 import { SlackOauthReq } from '~/interfaces/slack-to-growi/slack-oauth-req';
 import { SlackOauthReq } from '~/interfaces/slack-to-growi/slack-oauth-req';

+ 1 - 1
apps/slackbot-proxy/src/middlewares/slack-to-growi/join-to-conversation.ts

@@ -1,6 +1,6 @@
+import type { Logger } from '@growi/logger';
 import { generateWebClient } from '@growi/slack/dist/utils/webclient-factory';
 import { generateWebClient } from '@growi/slack/dist/utils/webclient-factory';
 import { IMiddleware, Middleware, Req } from '@tsed/common';
 import { IMiddleware, Middleware, Req } from '@tsed/common';
-import Logger from 'bunyan';
 
 
 import { SlackOauthReq } from '~/interfaces/slack-to-growi/slack-oauth-req';
 import { SlackOauthReq } from '~/interfaces/slack-to-growi/slack-oauth-req';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';

+ 4 - 7
apps/slackbot-proxy/src/utils/logger/index.ts

@@ -1,5 +1,5 @@
-import Logger from 'bunyan';
-import { createLogger } from 'universal-bunyan';
+import type { Logger } from '@growi/logger';
+import { initializeLoggerFactory, loggerFactory } from '@growi/logger';
 
 
 import configForDev from '~/config/logger/config.dev';
 import configForDev from '~/config/logger/config.dev';
 import configForProd from '~/config/logger/config.prod';
 import configForProd from '~/config/logger/config.prod';
@@ -7,10 +7,7 @@ import configForProd from '~/config/logger/config.prod';
 const isProduction = process.env.NODE_ENV === 'production';
 const isProduction = process.env.NODE_ENV === 'production';
 const config = isProduction ? configForProd : configForDev;
 const config = isProduction ? configForProd : configForDev;
 
 
-const loggerFactory = (name: string): Logger =>
-  createLogger({
-    name,
-    config,
-  });
+initializeLoggerFactory({ config });
 
 
+export type { Logger };
 export default loggerFactory;
 export default loggerFactory;

+ 1 - 3
packages/remark-attachment-refs/package.json

@@ -45,19 +45,17 @@
   },
   },
   "dependencies": {
   "dependencies": {
     "@growi/core": "workspace:^",
     "@growi/core": "workspace:^",
+    "@growi/logger": "workspace:^",
     "@growi/remark-growi-directive": "workspace:^",
     "@growi/remark-growi-directive": "workspace:^",
     "@growi/ui": "workspace:^",
     "@growi/ui": "workspace:^",
     "axios": "^1.11.0",
     "axios": "^1.11.0",
-    "bunyan": "^1.8.15",
     "express": "^4.20.0",
     "express": "^4.20.0",
     "hast-util-select": "^6.0.2",
     "hast-util-select": "^6.0.2",
     "mongoose": "^6.13.6",
     "mongoose": "^6.13.6",
     "swr": "^2.3.2",
     "swr": "^2.3.2",
-    "universal-bunyan": "^0.9.2",
     "xss": "^1.0.15"
     "xss": "^1.0.15"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "@types/bunyan": "^1.8.11",
     "@types/hast": "^3.0.4",
     "@types/hast": "^3.0.4",
     "@types/react": "^18.2.14",
     "@types/react": "^18.2.14",
     "@types/react-dom": "^18.2.6",
     "@types/react-dom": "^18.2.6",

+ 4 - 7
packages/remark-attachment-refs/src/utils/logger/index.ts

@@ -1,10 +1,7 @@
-import type Logger from 'bunyan';
-import { createLogger } from 'universal-bunyan';
+import type { Logger } from '@growi/logger';
+import { initializeLoggerFactory, loggerFactory } from '@growi/logger';
 
 
-const loggerFactory = (name: string): Logger =>
-  createLogger({
-    name,
-    config: { default: 'info' },
-  });
+initializeLoggerFactory({ config: { default: 'info' } });
 
 
+export type { Logger };
 export default loggerFactory;
 export default loggerFactory;

+ 5 - 5
packages/remark-attachment-refs/turbo.json

@@ -3,25 +3,25 @@
   "extends": ["//"],
   "extends": ["//"],
   "tasks": {
   "tasks": {
     "build": {
     "build": {
-      "dependsOn": ["@growi/core#build", "@growi/remark-growi-directive#build", "@growi/ui#build"],
+      "dependsOn": ["@growi/core#build", "@growi/logger#build", "@growi/remark-growi-directive#build", "@growi/ui#build"],
       "outputs": ["dist/**"],
       "outputs": ["dist/**"],
       "outputLogs": "new-only"
       "outputLogs": "new-only"
     },
     },
     "dev": {
     "dev": {
-      "dependsOn": ["@growi/core#dev", "@growi/remark-growi-directive#dev", "@growi/ui#dev"],
+      "dependsOn": ["@growi/core#dev", "@growi/logger#dev", "@growi/remark-growi-directive#dev", "@growi/ui#dev"],
       "outputs": ["dist/**"],
       "outputs": ["dist/**"],
       "outputLogs": "new-only"
       "outputLogs": "new-only"
     },
     },
     "watch": {
     "watch": {
-      "dependsOn": ["@growi/core#dev", "@growi/remark-growi-directive#dev", "@growi/ui#dev"],
+      "dependsOn": ["@growi/core#dev", "@growi/logger#dev", "@growi/remark-growi-directive#dev", "@growi/ui#dev"],
       "outputs": ["dist/**"],
       "outputs": ["dist/**"],
       "outputLogs": "new-only"
       "outputLogs": "new-only"
     },
     },
     "lint": {
     "lint": {
-      "dependsOn": ["@growi/core#dev", "@growi/remark-growi-directive#dev", "@growi/ui#dev"]
+      "dependsOn": ["@growi/core#dev", "@growi/logger#dev", "@growi/remark-growi-directive#dev", "@growi/ui#dev"]
     },
     },
     "test": {
     "test": {
-      "dependsOn": ["@growi/core#dev", "@growi/remark-growi-directive#dev", "@growi/ui#dev"],
+      "dependsOn": ["@growi/core#dev", "@growi/logger#dev", "@growi/remark-growi-directive#dev", "@growi/ui#dev"],
       "outputLogs": "new-only"
       "outputLogs": "new-only"
     }
     }
   }
   }

+ 1 - 4
packages/slack/package.json

@@ -49,20 +49,17 @@
     "test": "vitest run --coverage"
     "test": "vitest run --coverage"
   },
   },
   "dependencies": {
   "dependencies": {
+    "@growi/logger": "workspace:^",
     "@slack/oauth": "^3.0.3",
     "@slack/oauth": "^3.0.3",
     "@slack/web-api": "^6.2.4",
     "@slack/web-api": "^6.2.4",
-    "@types/bunyan": "^1.8.10",
     "@types/http-errors": "^2.0.3",
     "@types/http-errors": "^2.0.3",
     "@types/url-join": "^4.0.2",
     "@types/url-join": "^4.0.2",
     "axios": "^1.11.0",
     "axios": "^1.11.0",
-    "browser-bunyan": "^1.6.3",
-    "bunyan": "^1.8.15",
     "crypto": "^1.0.1",
     "crypto": "^1.0.1",
     "date-fns": "^3.6.0",
     "date-fns": "^3.6.0",
     "extensible-custom-error": "^0.0.7",
     "extensible-custom-error": "^0.0.7",
     "http-errors": "^2.0.0",
     "http-errors": "^2.0.0",
     "qs": "^6.14.2",
     "qs": "^6.14.2",
-    "universal-bunyan": "^0.9.2",
     "url-join": "^4.0.0"
     "url-join": "^4.0.0"
   },
   },
   "devDependencies": {
   "devDependencies": {

+ 4 - 7
packages/slack/src/utils/logger/index.ts

@@ -1,10 +1,7 @@
-import type Logger from 'bunyan';
-import { createLogger } from 'universal-bunyan';
+import type { Logger } from '@growi/logger';
+import { initializeLoggerFactory, loggerFactory } from '@growi/logger';
 
 
-const loggerFactory = (name: string): Logger =>
-  createLogger({
-    name,
-    config: { default: 'info' },
-  });
+initializeLoggerFactory({ config: { default: 'info' } });
 
 
+export type { Logger };
 export default loggerFactory;
 export default loggerFactory;

+ 11 - 0
packages/slack/turbo.json

@@ -0,0 +1,11 @@
+{
+  "extends": ["//"],
+  "tasks": {
+    "build": {
+      "dependsOn": ["@growi/logger#build"]
+    },
+    "dev": {
+      "dependsOn": ["@growi/logger#dev"]
+    }
+  }
+}

+ 205 - 39
pnpm-lock.yaml

@@ -1121,6 +1121,9 @@ importers:
       '@godaddy/terminus':
       '@godaddy/terminus':
         specifier: ^4.9.0
         specifier: ^4.9.0
         version: 4.12.1
         version: 4.12.1
+      '@growi/logger':
+        specifier: workspace:^
+        version: link:../../packages/logger
       '@growi/slack':
       '@growi/slack':
         specifier: workspace:^
         specifier: workspace:^
         version: link:../../packages/slack
         version: link:../../packages/slack
@@ -1157,12 +1160,6 @@ importers:
       body-parser:
       body-parser:
         specifier: ^1.20.3
         specifier: ^1.20.3
         version: 1.20.3
         version: 1.20.3
-      browser-bunyan:
-        specifier: ^1.6.3
-        version: 1.8.0
-      bunyan:
-        specifier: ^1.8.15
-        version: 1.8.15
       compression:
       compression:
         specifier: ^1.7.4
         specifier: ^1.7.4
         version: 1.7.4
         version: 1.7.4
@@ -1181,9 +1178,6 @@ importers:
       express:
       express:
         specifier: ^4.20.0
         specifier: ^4.20.0
         version: 4.21.0
         version: 4.21.0
-      express-bunyan-logger:
-        specifier: ^1.3.3
-        version: 1.3.3
       extensible-custom-error:
       extensible-custom-error:
         specifier: ^0.0.7
         specifier: ^0.0.7
         version: 0.0.7
         version: 0.0.7
@@ -1199,6 +1193,9 @@ importers:
       mysql2:
       mysql2:
         specifier: ^2.2.5
         specifier: ^2.2.5
         version: 2.3.3
         version: 2.3.3
+      pino-http:
+        specifier: ^11.0.0
+        version: 11.0.0
       read-pkg-up:
       read-pkg-up:
         specifier: ^7.0.1
         specifier: ^7.0.1
         version: 7.0.1
         version: 7.0.1
@@ -1208,9 +1205,6 @@ importers:
       typeorm:
       typeorm:
         specifier: '=0.2.45'
         specifier: '=0.2.45'
         version: 0.2.45(mysql2@2.3.3)(redis@3.1.2)
         version: 0.2.45(mysql2@2.3.3)(redis@3.1.2)
-      universal-bunyan:
-        specifier: ^0.9.2
-        version: 0.9.2(@browser-bunyan/console-formatted-stream@1.8.0)(browser-bunyan@1.8.0)(bunyan@1.8.15)
     devDependencies:
     devDependencies:
       '@popperjs/core':
       '@popperjs/core':
         specifier: ^2.11.8
         specifier: ^2.11.8
@@ -1224,15 +1218,9 @@ importers:
       '@tsed/json-mapper':
       '@tsed/json-mapper':
         specifier: '=6.43.0'
         specifier: '=6.43.0'
         version: 6.43.0
         version: 6.43.0
-      '@types/bunyan':
-        specifier: ^1.8.11
-        version: 1.8.11
       bootstrap:
       bootstrap:
         specifier: ^5.3.8
         specifier: ^5.3.8
         version: 5.3.8(@popperjs/core@2.11.8)
         version: 5.3.8(@popperjs/core@2.11.8)
-      morgan:
-        specifier: ^1.10.0
-        version: 1.10.0
 
 
   packages/core:
   packages/core:
     dependencies:
     dependencies:
@@ -1432,6 +1420,19 @@ importers:
         specifier: ^1.2.1
         specifier: ^1.2.1
         version: 1.2.1
         version: 1.2.1
 
 
+  packages/logger:
+    dependencies:
+      minimatch:
+        specifier: ^9.0.0
+        version: 9.0.5
+      pino:
+        specifier: ^9.0.0
+        version: 9.14.0
+    devDependencies:
+      pino-pretty:
+        specifier: ^13.0.0
+        version: 13.1.3
+
   packages/pdf-converter-client:
   packages/pdf-converter-client:
     dependencies:
     dependencies:
       axios:
       axios:
@@ -1561,6 +1562,9 @@ importers:
       '@growi/core':
       '@growi/core':
         specifier: workspace:^
         specifier: workspace:^
         version: link:../core
         version: link:../core
+      '@growi/logger':
+        specifier: workspace:^
+        version: link:../logger
       '@growi/remark-growi-directive':
       '@growi/remark-growi-directive':
         specifier: workspace:^
         specifier: workspace:^
         version: link:../remark-growi-directive
         version: link:../remark-growi-directive
@@ -1570,9 +1574,6 @@ importers:
       axios:
       axios:
         specifier: ^1.11.0
         specifier: ^1.11.0
         version: 1.11.0
         version: 1.11.0
-      bunyan:
-        specifier: ^1.8.15
-        version: 1.8.15
       express:
       express:
         specifier: ^4.20.0
         specifier: ^4.20.0
         version: 4.21.0
         version: 4.21.0
@@ -1591,16 +1592,10 @@ importers:
       swr:
       swr:
         specifier: ^2.3.2
         specifier: ^2.3.2
         version: 2.3.3(react@18.2.0)
         version: 2.3.3(react@18.2.0)
-      universal-bunyan:
-        specifier: ^0.9.2
-        version: 0.9.2(@browser-bunyan/console-formatted-stream@1.8.0)(browser-bunyan@1.8.0)(bunyan@1.8.15)
       xss:
       xss:
         specifier: ^1.0.15
         specifier: ^1.0.15
         version: 1.0.15
         version: 1.0.15
     devDependencies:
     devDependencies:
-      '@types/bunyan':
-        specifier: ^1.8.11
-        version: 1.8.11
       '@types/hast':
       '@types/hast':
         specifier: ^3.0.4
         specifier: ^3.0.4
         version: 3.0.4
         version: 3.0.4
@@ -1814,15 +1809,15 @@ importers:
 
 
   packages/slack:
   packages/slack:
     dependencies:
     dependencies:
+      '@growi/logger':
+        specifier: workspace:^
+        version: link:../logger
       '@slack/oauth':
       '@slack/oauth':
         specifier: ^3.0.3
         specifier: ^3.0.3
         version: 3.0.3
         version: 3.0.3
       '@slack/web-api':
       '@slack/web-api':
         specifier: ^6.2.4
         specifier: ^6.2.4
         version: 6.12.0
         version: 6.12.0
-      '@types/bunyan':
-        specifier: ^1.8.10
-        version: 1.8.11
       '@types/http-errors':
       '@types/http-errors':
         specifier: ^2.0.3
         specifier: ^2.0.3
         version: 2.0.4
         version: 2.0.4
@@ -1832,12 +1827,6 @@ importers:
       axios:
       axios:
         specifier: ^1.11.0
         specifier: ^1.11.0
         version: 1.11.0
         version: 1.11.0
-      browser-bunyan:
-        specifier: ^1.6.3
-        version: 1.8.0
-      bunyan:
-        specifier: ^1.8.15
-        version: 1.8.15
       crypto:
       crypto:
         specifier: ^1.0.1
         specifier: ^1.0.1
         version: 1.0.1
         version: 1.0.1
@@ -1853,9 +1842,6 @@ importers:
       qs:
       qs:
         specifier: ^6.14.2
         specifier: ^6.14.2
         version: 6.14.2
         version: 6.14.2
-      universal-bunyan:
-        specifier: ^0.9.2
-        version: 0.9.2(@browser-bunyan/console-formatted-stream@1.8.0)(browser-bunyan@1.8.0)(bunyan@1.8.15)
       url-join:
       url-join:
         specifier: ^4.0.0
         specifier: ^4.0.0
         version: 4.0.1
         version: 4.0.1
@@ -4207,6 +4193,9 @@ packages:
   '@paralleldrive/cuid2@2.2.2':
   '@paralleldrive/cuid2@2.2.2':
     resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==}
     resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==}
 
 
+  '@pinojs/redact@0.4.0':
+    resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
+
   '@pkgjs/parseargs@0.11.0':
   '@pkgjs/parseargs@0.11.0':
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     engines: {node: '>=14'}
     engines: {node: '>=14'}
@@ -6300,6 +6289,10 @@ packages:
   asynckit@0.4.0:
   asynckit@0.4.0:
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
 
 
+  atomic-sleep@1.0.0:
+    resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+    engines: {node: '>=8.0.0'}
+
   atomically@2.0.3:
   atomically@2.0.3:
     resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==}
     resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==}
 
 
@@ -7798,6 +7791,9 @@ packages:
     resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==}
     resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==}
     engines: {node: '>=4.0'}
     engines: {node: '>=4.0'}
 
 
+  dateformat@4.6.3:
+    resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
+
   dayjs@1.11.13:
   dayjs@1.11.13:
     resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
     resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
 
 
@@ -8441,6 +8437,9 @@ packages:
     resolution: {integrity: sha512-6NW8DZ8pWBc5NbGYUiqqccj9dXnuSzilZYqprdKJBZsQodGH9IyUoFOGxIWVDcBzHMb8ET24aqx9p66tZEWZkA==}
     resolution: {integrity: sha512-6NW8DZ8pWBc5NbGYUiqqccj9dXnuSzilZYqprdKJBZsQodGH9IyUoFOGxIWVDcBzHMb8ET24aqx9p66tZEWZkA==}
     engines: {'0': node >=0.6.0}
     engines: {'0': node >=0.6.0}
 
 
+  fast-copy@4.0.2:
+    resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==}
+
   fast-deep-equal@3.1.3:
   fast-deep-equal@3.1.3:
     resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
     resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
 
 
@@ -9104,6 +9103,9 @@ packages:
     resolution: {integrity: sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==}
     resolution: {integrity: sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==}
     engines: {node: '>=10.0.0'}
     engines: {node: '>=10.0.0'}
 
 
+  help-me@5.0.0:
+    resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
+
   highlight.js@10.7.3:
   highlight.js@10.7.3:
     resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
     resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
 
 
@@ -9753,6 +9755,10 @@ packages:
       react:
       react:
         optional: true
         optional: true
 
 
+  joycon@3.1.1:
+    resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
+    engines: {node: '>=10'}
+
   jpeg-js@0.4.4:
   jpeg-js@0.4.4:
     resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
     resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
 
 
@@ -9859,6 +9865,7 @@ packages:
     resolution: {integrity: sha512-Quz3MvAwHxVYNXsOByL7xI5EB2WYOeFswqaHIA3qOK3isRWTxiplBEocmmru6XmxDB2L7jDNYtYA4FyimoAFEw==}
     resolution: {integrity: sha512-Quz3MvAwHxVYNXsOByL7xI5EB2WYOeFswqaHIA3qOK3isRWTxiplBEocmmru6XmxDB2L7jDNYtYA4FyimoAFEw==}
     engines: {node: '>=8.17.0'}
     engines: {node: '>=8.17.0'}
     hasBin: true
     hasBin: true
+    bundledDependencies: []
 
 
   jsonfile@3.0.1:
   jsonfile@3.0.1:
     resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==}
     resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==}
@@ -11281,6 +11288,10 @@ packages:
     resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==}
     resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==}
     engines: {node: ^10.13.0 || >=12.0.0}
     engines: {node: ^10.13.0 || >=12.0.0}
 
 
+  on-exit-leak-free@2.1.2:
+    resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+    engines: {node: '>=14.0.0'}
+
   on-finished@2.3.0:
   on-finished@2.3.0:
     resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
     resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
     engines: {node: '>= 0.8'}
     engines: {node: '>= 0.8'}
@@ -11661,6 +11672,30 @@ packages:
     resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
     resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
     engines: {node: '>=0.10.0'}
     engines: {node: '>=0.10.0'}
 
 
+  pino-abstract-transport@2.0.0:
+    resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
+
+  pino-abstract-transport@3.0.0:
+    resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
+
+  pino-http@11.0.0:
+    resolution: {integrity: sha512-wqg5XIAGRRIWtTk8qPGxkbrfiwEWz1lgedVLvhLALudKXvg1/L2lTFgTGPJ4Z2e3qcRmxoFxDuSdMdMGNM6I1g==}
+
+  pino-pretty@13.1.3:
+    resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==}
+    hasBin: true
+
+  pino-std-serializers@7.1.0:
+    resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
+
+  pino@10.3.1:
+    resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
+    hasBin: true
+
+  pino@9.14.0:
+    resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==}
+    hasBin: true
+
   pirates@4.0.6:
   pirates@4.0.6:
     resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
     resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
     engines: {node: '>= 6'}
     engines: {node: '>= 6'}
@@ -11819,6 +11854,9 @@ packages:
   process-warning@2.3.2:
   process-warning@2.3.2:
     resolution: {integrity: sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==}
     resolution: {integrity: sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==}
 
 
+  process-warning@5.0.0:
+    resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
+
   progress@2.0.3:
   progress@2.0.3:
     resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
     resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
     engines: {node: '>=0.4.0'}
     engines: {node: '>=0.4.0'}
@@ -11950,6 +11988,9 @@ packages:
   queue-tick@1.0.1:
   queue-tick@1.0.1:
     resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
     resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
 
 
+  quick-format-unescaped@4.0.4:
+    resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
   quick-lru@4.0.1:
   quick-lru@4.0.1:
     resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
     resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
     engines: {node: '>=8'}
     engines: {node: '>=8'}
@@ -12283,6 +12324,10 @@ packages:
     resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
     resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
     engines: {node: '>= 14.16.0'}
     engines: {node: '>= 14.16.0'}
 
 
+  real-require@0.2.0:
+    resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+    engines: {node: '>= 12.13.0'}
+
   rechoir@0.6.2:
   rechoir@0.6.2:
     resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
     resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
     engines: {node: '>= 0.10'}
     engines: {node: '>= 0.10'}
@@ -12611,6 +12656,10 @@ packages:
   safe-stable-stringify@1.1.1:
   safe-stable-stringify@1.1.1:
     resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==}
     resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==}
 
 
+  safe-stable-stringify@2.5.0:
+    resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+    engines: {node: '>=10'}
+
   safer-buffer@2.1.2:
   safer-buffer@2.1.2:
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 
 
@@ -12907,6 +12956,9 @@ packages:
     resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
     resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
     engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
     engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
 
 
+  sonic-boom@4.2.1:
+    resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
+
   source-map-js@1.2.1:
   source-map-js@1.2.1:
     resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
     resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
     engines: {node: '>=0.10.0'}
     engines: {node: '>=0.10.0'}
@@ -12953,6 +13005,10 @@ packages:
   split2@1.1.1:
   split2@1.1.1:
     resolution: {integrity: sha512-cfurE2q8LamExY+lJ9Ex3ZfBwqAPduzOKVscPDXNCLLMvyaeD3DTz1yk7fVIs6Chco+12XeD0BB6HEoYzPYbXA==}
     resolution: {integrity: sha512-cfurE2q8LamExY+lJ9Ex3ZfBwqAPduzOKVscPDXNCLLMvyaeD3DTz1yk7fVIs6Chco+12XeD0BB6HEoYzPYbXA==}
 
 
+  split2@4.2.0:
+    resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+    engines: {node: '>= 10.x'}
+
   split@1.0.1:
   split@1.0.1:
     resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
     resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
 
 
@@ -13145,6 +13201,10 @@ packages:
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     engines: {node: '>=8'}
     engines: {node: '>=8'}
 
 
+  strip-json-comments@5.0.3:
+    resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==}
+    engines: {node: '>=14.16'}
+
   striptags@3.2.0:
   striptags@3.2.0:
     resolution: {integrity: sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==}
     resolution: {integrity: sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==}
 
 
@@ -13414,6 +13474,13 @@ packages:
   thenify@3.3.1:
   thenify@3.3.1:
     resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
     resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
 
 
+  thread-stream@3.1.0:
+    resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
+
+  thread-stream@4.0.0:
+    resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==}
+    engines: {node: '>=20'}
+
   throttle-debounce@5.0.2:
   throttle-debounce@5.0.2:
     resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
     resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
     engines: {node: '>=12.22'}
     engines: {node: '>=12.22'}
@@ -18247,6 +18314,8 @@ snapshots:
     dependencies:
     dependencies:
       '@noble/hashes': 1.8.0
       '@noble/hashes': 1.8.0
 
 
+  '@pinojs/redact@0.4.0': {}
+
   '@pkgjs/parseargs@0.11.0':
   '@pkgjs/parseargs@0.11.0':
     optional: true
     optional: true
 
 
@@ -21063,6 +21132,8 @@ snapshots:
 
 
   asynckit@0.4.0: {}
   asynckit@0.4.0: {}
 
 
+  atomic-sleep@1.0.0: {}
+
   atomically@2.0.3:
   atomically@2.0.3:
     dependencies:
     dependencies:
       stubborn-fs: 1.2.5
       stubborn-fs: 1.2.5
@@ -22444,6 +22515,8 @@ snapshots:
 
 
   date-format@4.0.14: {}
   date-format@4.0.14: {}
 
 
+  dateformat@4.6.3: {}
+
   dayjs@1.11.13: {}
   dayjs@1.11.13: {}
 
 
   de-indent@1.0.2: {}
   de-indent@1.0.2: {}
@@ -23239,6 +23312,8 @@ snapshots:
 
 
   extsprintf@1.4.0: {}
   extsprintf@1.4.0: {}
 
 
+  fast-copy@4.0.2: {}
+
   fast-deep-equal@3.1.3: {}
   fast-deep-equal@3.1.3: {}
 
 
   fast-fifo@1.3.2: {}
   fast-fifo@1.3.2: {}
@@ -24090,6 +24165,8 @@ snapshots:
 
 
   helmet@4.6.0: {}
   helmet@4.6.0: {}
 
 
+  help-me@5.0.0: {}
+
   highlight.js@10.7.3: {}
   highlight.js@10.7.3: {}
 
 
   highlight.js@11.11.1: {}
   highlight.js@11.11.1: {}
@@ -24697,6 +24774,8 @@ snapshots:
       '@types/react': 18.3.3
       '@types/react': 18.3.3
       react: 18.2.0
       react: 18.2.0
 
 
+  joycon@3.1.1: {}
+
   jpeg-js@0.4.4: {}
   jpeg-js@0.4.4: {}
 
 
   js-cookie@3.0.5: {}
   js-cookie@3.0.5: {}
@@ -26609,6 +26688,8 @@ snapshots:
 
 
   oidc-token-hash@5.0.3: {}
   oidc-token-hash@5.0.3: {}
 
 
+  on-exit-leak-free@2.1.2: {}
+
   on-finished@2.3.0:
   on-finished@2.3.0:
     dependencies:
     dependencies:
       ee-first: 1.1.1
       ee-first: 1.1.1
@@ -27051,6 +27132,67 @@ snapshots:
 
 
   pinkie@2.0.4: {}
   pinkie@2.0.4: {}
 
 
+  pino-abstract-transport@2.0.0:
+    dependencies:
+      split2: 4.2.0
+
+  pino-abstract-transport@3.0.0:
+    dependencies:
+      split2: 4.2.0
+
+  pino-http@11.0.0:
+    dependencies:
+      get-caller-file: 2.0.5
+      pino: 10.3.1
+      pino-std-serializers: 7.1.0
+      process-warning: 5.0.0
+
+  pino-pretty@13.1.3:
+    dependencies:
+      colorette: 2.0.20
+      dateformat: 4.6.3
+      fast-copy: 4.0.2
+      fast-safe-stringify: 2.1.1
+      help-me: 5.0.0
+      joycon: 3.1.1
+      minimist: 1.2.8
+      on-exit-leak-free: 2.1.2
+      pino-abstract-transport: 3.0.0
+      pump: 3.0.0
+      secure-json-parse: 4.0.0
+      sonic-boom: 4.2.1
+      strip-json-comments: 5.0.3
+
+  pino-std-serializers@7.1.0: {}
+
+  pino@10.3.1:
+    dependencies:
+      '@pinojs/redact': 0.4.0
+      atomic-sleep: 1.0.0
+      on-exit-leak-free: 2.1.2
+      pino-abstract-transport: 3.0.0
+      pino-std-serializers: 7.1.0
+      process-warning: 5.0.0
+      quick-format-unescaped: 4.0.4
+      real-require: 0.2.0
+      safe-stable-stringify: 2.5.0
+      sonic-boom: 4.2.1
+      thread-stream: 4.0.0
+
+  pino@9.14.0:
+    dependencies:
+      '@pinojs/redact': 0.4.0
+      atomic-sleep: 1.0.0
+      on-exit-leak-free: 2.1.2
+      pino-abstract-transport: 2.0.0
+      pino-std-serializers: 7.1.0
+      process-warning: 5.0.0
+      quick-format-unescaped: 4.0.4
+      real-require: 0.2.0
+      safe-stable-stringify: 2.5.0
+      sonic-boom: 4.2.1
+      thread-stream: 3.1.0
+
   pirates@4.0.6: {}
   pirates@4.0.6: {}
 
 
   pixelmatch@5.2.1:
   pixelmatch@5.2.1:
@@ -27181,6 +27323,8 @@ snapshots:
 
 
   process-warning@2.3.2: {}
   process-warning@2.3.2: {}
 
 
+  process-warning@5.0.0: {}
+
   progress@2.0.3: {}
   progress@2.0.3: {}
 
 
   promise-inflight@1.0.1: {}
   promise-inflight@1.0.1: {}
@@ -27333,6 +27477,8 @@ snapshots:
 
 
   queue-tick@1.0.1: {}
   queue-tick@1.0.1: {}
 
 
+  quick-format-unescaped@4.0.4: {}
+
   quick-lru@4.0.1: {}
   quick-lru@4.0.1: {}
 
 
   raf@3.4.1:
   raf@3.4.1:
@@ -27737,6 +27883,8 @@ snapshots:
 
 
   readdirp@4.0.2: {}
   readdirp@4.0.2: {}
 
 
+  real-require@0.2.0: {}
+
   rechoir@0.6.2:
   rechoir@0.6.2:
     dependencies:
     dependencies:
       resolve: 1.22.8
       resolve: 1.22.8
@@ -28246,6 +28394,8 @@ snapshots:
 
 
   safe-stable-stringify@1.1.1: {}
   safe-stable-stringify@1.1.1: {}
 
 
+  safe-stable-stringify@2.5.0: {}
+
   safer-buffer@2.1.2: {}
   safer-buffer@2.1.2: {}
 
 
   sanitize-filename@1.6.3:
   sanitize-filename@1.6.3:
@@ -28675,6 +28825,10 @@ snapshots:
       ip-address: 9.0.5
       ip-address: 9.0.5
       smart-buffer: 4.2.0
       smart-buffer: 4.2.0
 
 
+  sonic-boom@4.2.1:
+    dependencies:
+      atomic-sleep: 1.0.0
+
   source-map-js@1.2.1: {}
   source-map-js@1.2.1: {}
 
 
   source-map-support@0.5.19:
   source-map-support@0.5.19:
@@ -28726,6 +28880,8 @@ snapshots:
     dependencies:
     dependencies:
       through2: 2.0.5
       through2: 2.0.5
 
 
+  split2@4.2.0: {}
+
   split@1.0.1:
   split@1.0.1:
     dependencies:
     dependencies:
       through: 2.3.8
       through: 2.3.8
@@ -28921,6 +29077,8 @@ snapshots:
 
 
   strip-json-comments@3.1.1: {}
   strip-json-comments@3.1.1: {}
 
 
+  strip-json-comments@5.0.3: {}
+
   striptags@3.2.0: {}
   striptags@3.2.0: {}
 
 
   strnum@1.0.5: {}
   strnum@1.0.5: {}
@@ -29296,6 +29454,14 @@ snapshots:
     dependencies:
     dependencies:
       any-promise: 1.3.0
       any-promise: 1.3.0
 
 
+  thread-stream@3.1.0:
+    dependencies:
+      real-require: 0.2.0
+
+  thread-stream@4.0.0:
+    dependencies:
+      real-require: 0.2.0
+
   throttle-debounce@5.0.2: {}
   throttle-debounce@5.0.2: {}
 
 
   through2@2.0.5:
   through2@2.0.5: