wuyiqunLu commited on
Commit
314f2dc
1 Parent(s): 0a08909

feat: log request param to loki (#24)

Browse files

loki winston has compiling issue in next js, so using pino instead.

<img width="1358" alt="image"
src="https://github.com/landing-ai/vision-agent-ui/assets/132986242/d6c1b86d-b378-4e88-ba75-f4c25747eace">

app/api/chat/route.ts CHANGED
@@ -14,7 +14,7 @@ const openai = new OpenAI({
14
  apiKey: process.env.OPENAI_API_KEY,
15
  });
16
 
17
- export async function POST(req: Request) {
18
  const json = await req.json();
19
  const { messages } = json as {
20
  messages: MessageBase[];
@@ -54,4 +54,4 @@ export async function POST(req: Request) {
54
  const stream = OpenAIStream(res);
55
 
56
  return new StreamingTextResponse(stream);
57
- }
 
14
  apiKey: process.env.OPENAI_API_KEY,
15
  });
16
 
17
+ export const POST = async (req: Request) => {
18
  const json = await req.json();
19
  const { messages } = json as {
20
  messages: MessageBase[];
 
54
  const stream = OpenAIStream(res);
55
 
56
  return new StreamingTextResponse(stream);
57
+ };
app/api/sign/route.ts CHANGED
@@ -1,38 +1,42 @@
1
- import { auth } from '@/auth';
2
  import { getPresignedUrl } from '@/lib/aws';
 
3
  import { nanoid } from '@/lib/utils';
4
 
5
  /**
6
  * @param req
7
  * @returns
8
  */
9
- export async function POST(req: Request): Promise<Response> {
10
- const session = await auth();
11
- const user = session?.user?.email ?? 'anonymous';
12
- // if (!email) {
13
- // return new Response('Unauthorized', {
14
- // status: 401,
15
- // });
16
- // }
17
-
18
- try {
19
- const { fileName, fileType, id } = (await req.json()) as {
20
  id?: string;
21
  fileName: string;
22
  fileType: string;
23
- };
 
 
 
 
 
 
 
 
 
 
24
 
25
- const signedFileName = `${user}/${id ?? nanoid()}/${fileName}`;
26
- const res = await getPresignedUrl(signedFileName, fileType);
27
- return Response.json({
28
- id,
29
- signedUrl: res.url,
30
- publicUrl: `https://${process.env.AWS_BUCKET_NAME}.s3.${process.env.AWS_REGION}.amazonaws.com/${signedFileName}`,
31
- fields: res.fields,
32
- });
33
- } catch (error) {
34
- return new Response((error as Error).message, {
35
- status: 400,
36
- });
37
- }
38
- }
 
 
 
1
  import { getPresignedUrl } from '@/lib/aws';
2
+ import { withLogging } from '../../../lib/logger';
3
  import { nanoid } from '@/lib/utils';
4
 
5
  /**
6
  * @param req
7
  * @returns
8
  */
9
+ export const POST = withLogging(
10
+ async (
11
+ session,
12
+ json: {
 
 
 
 
 
 
 
13
  id?: string;
14
  fileName: string;
15
  fileType: string;
16
+ },
17
+ ): Promise<Response> => {
18
+ const user = session?.user?.email ?? 'anonymous';
19
+ // if (!email) {
20
+ // return new Response('Unauthorized', {
21
+ // status: 401,
22
+ // });
23
+ // }
24
+
25
+ try {
26
+ const { fileName, fileType, id } = json;
27
 
28
+ const signedFileName = `${user}/${id ?? nanoid()}/${fileName}`;
29
+ const res = await getPresignedUrl(signedFileName, fileType);
30
+ return Response.json({
31
+ id,
32
+ signedUrl: res.url,
33
+ publicUrl: `https://${process.env.AWS_BUCKET_NAME}.s3.${process.env.AWS_REGION}.amazonaws.com/${signedFileName}`,
34
+ fields: res.fields,
35
+ });
36
+ } catch (error) {
37
+ return new Response((error as Error).message, {
38
+ status: 400,
39
+ });
40
+ }
41
+ },
42
+ );
app/api/upload/route.ts CHANGED
@@ -1,45 +1,51 @@
1
  import { auth } from '@/auth';
2
  import { createKVChat } from '@/lib/kv/chat';
 
3
  import { ChatEntity, MessageBase } from '@/lib/types';
4
  import { nanoid } from '@/lib/utils';
 
5
  import { revalidatePath } from 'next/cache';
6
 
7
  /**
8
  * @param req
9
  * @returns
10
  */
11
- export async function POST(req: Request): Promise<Response> {
12
- const session = await auth();
13
- const user = session?.user?.email ?? 'anonymous';
14
- // if (!email) {
15
- // return new Response('Unauthorized', {
16
- // status: 401,
17
- // });
18
- // }
19
-
20
- try {
21
- const { id, url, initMessages } = (await req.json()) as {
22
  id?: string;
23
  url: string;
24
  initMessages?: MessageBase[];
25
- };
 
 
 
 
 
 
 
 
 
 
26
 
27
- const payload: ChatEntity = {
28
- url,
29
- id: id ?? nanoid(),
30
- user,
31
- messages: initMessages ?? [],
32
- updatedAt: Date.now(),
33
- };
34
 
35
- await createKVChat(payload);
36
 
37
- revalidatePath('/chat', 'layout');
38
 
39
- return Response.json(payload);
40
- } catch (error) {
41
- return new Response((error as Error).message, {
42
- status: 400,
43
- });
44
- }
45
- }
 
 
1
  import { auth } from '@/auth';
2
  import { createKVChat } from '@/lib/kv/chat';
3
+ import { withLogging } from '@/lib/logger';
4
  import { ChatEntity, MessageBase } from '@/lib/types';
5
  import { nanoid } from '@/lib/utils';
6
+ import { Session } from 'next-auth';
7
  import { revalidatePath } from 'next/cache';
8
 
9
  /**
10
  * @param req
11
  * @returns
12
  */
13
+ export const POST = withLogging(
14
+ async (
15
+ session,
16
+ json: {
 
 
 
 
 
 
 
17
  id?: string;
18
  url: string;
19
  initMessages?: MessageBase[];
20
+ },
21
+ ): Promise<Response> => {
22
+ const user = session?.user?.email ?? 'anonymous';
23
+ // if (!email) {
24
+ // return new Response('Unauthorized', {
25
+ // status: 401,
26
+ // });
27
+ // }
28
+
29
+ try {
30
+ const { id, url, initMessages } = json;
31
 
32
+ const payload: ChatEntity = {
33
+ url,
34
+ id: id ?? nanoid(),
35
+ user,
36
+ messages: initMessages ?? [],
37
+ updatedAt: Date.now(),
38
+ };
39
 
40
+ await createKVChat(payload);
41
 
42
+ revalidatePath('/chat', 'layout');
43
 
44
+ return Response.json(payload);
45
+ } catch (error) {
46
+ return new Response((error as Error).message, {
47
+ status: 400,
48
+ });
49
+ }
50
+ },
51
+ );
app/api/vision-agent/route.ts CHANGED
@@ -2,14 +2,17 @@ import { StreamingTextResponse } from 'ai';
2
 
3
  // import { auth } from '@/auth';
4
  import { MessageBase } from '../../../lib/types';
 
5
  import { CLEANED_SEPARATOR } from '@/lib/constants';
6
 
7
- // export const runtime = 'edge';
8
  export const dynamic = 'force-dynamic';
9
  export const maxDuration = 300; // This function can run for a maximum of 5 minutes
10
 
11
- export async function POST(req: Request) {
12
- const json = await req.json();
 
 
13
  const { messages, url } = json as {
14
  messages: MessageBase[];
15
  id: string;
@@ -44,6 +47,7 @@ export async function POST(req: Request) {
44
  ),
45
  );
46
  formData.append('image', url);
 
47
  const fetchResponse = await fetch(
48
  'https://api.dev.landing.ai/v1/agent/chat?agent_class=vision_agent&visualize_output=true',
49
  // 'http://localhost:5050/v1/agent/chat?agent_class=vision_agent',
@@ -61,4 +65,4 @@ export async function POST(req: Request) {
61
  } else {
62
  return fetchResponse;
63
  }
64
- }
 
2
 
3
  // import { auth } from '@/auth';
4
  import { MessageBase } from '../../../lib/types';
5
+
6
  import { CLEANED_SEPARATOR } from '@/lib/constants';
7
 
8
+ export const runtime = 'edge';
9
  export const dynamic = 'force-dynamic';
10
  export const maxDuration = 300; // This function can run for a maximum of 5 minutes
11
 
12
+ export const POST = async (
13
+ request: Request,
14
+ ) => {
15
+ const json = await request.json();
16
  const { messages, url } = json as {
17
  messages: MessageBase[];
18
  id: string;
 
47
  ),
48
  );
49
  formData.append('image', url);
50
+
51
  const fetchResponse = await fetch(
52
  'https://api.dev.landing.ai/v1/agent/chat?agent_class=vision_agent&visualize_output=true',
53
  // 'http://localhost:5050/v1/agent/chat?agent_class=vision_agent',
 
65
  } else {
66
  return fetchResponse;
67
  }
68
+ };
lib/hooks/useVisionAgent.tsx CHANGED
@@ -56,6 +56,7 @@ const useVisionAgent = (chat: ChatEntity) => {
56
  input,
57
  setInput,
58
  setMessages,
 
59
  } = useChat({
60
  sendExtraMessageFields: true,
61
  api: '/api/vision-agent',
@@ -82,7 +83,6 @@ const useVisionAgent = (chat: ChatEntity) => {
82
  ...message,
83
  content: logs + CLEANED_SEPARATOR + newContent,
84
  };
85
- console.log(messages);
86
  setMessages([...messages, newMessage]);
87
  saveKVChatMessage(id, newMessage);
88
  } else {
@@ -146,8 +146,8 @@ const useVisionAgent = (chat: ChatEntity) => {
146
 
147
  const messageWithLoading =
148
  isLoading &&
149
- messages.length &&
150
- messages[messages.length - 1].role !== 'assistant'
151
  ? [...messages, assistantLoadingMessage]
152
  : messages;
153
 
 
56
  input,
57
  setInput,
58
  setMessages,
59
+ error,
60
  } = useChat({
61
  sendExtraMessageFields: true,
62
  api: '/api/vision-agent',
 
83
  ...message,
84
  content: logs + CLEANED_SEPARATOR + newContent,
85
  };
 
86
  setMessages([...messages, newMessage]);
87
  saveKVChatMessage(id, newMessage);
88
  } else {
 
146
 
147
  const messageWithLoading =
148
  isLoading &&
149
+ messages.length &&
150
+ messages[messages.length - 1].role !== 'assistant'
151
  ? [...messages, assistantLoadingMessage]
152
  : messages;
153
 
lib/logger.ts ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { auth } from '@/auth';
2
+ import { Session } from 'next-auth';
3
+
4
+ import { pino, Logger as LokiLogger } from 'pino';
5
+ import pinoLoki from 'pino-loki';
6
+
7
+ let loggerInstance: Logger;
8
+
9
+ class Logger {
10
+ private lokiLogger!: LokiLogger;
11
+
12
+ constructor() {
13
+ if (loggerInstance) {
14
+ return loggerInstance;
15
+ }
16
+ this.lokiLogger = pino(
17
+ { level: 'info' },
18
+ pinoLoki({
19
+ batching: false,
20
+
21
+ // These labels will be added to every log
22
+ labels: {
23
+ app: 'grafanacloud-landingai-logs',
24
+ namespace: 'vision-agent',
25
+ },
26
+
27
+ // Credentials for our Loki instance
28
+ host: 'https://logs-prod3.grafana.net',
29
+ basicAuth: {
30
+ username: process.env.LOKI_AUTH_USER_ID!,
31
+ password: process.env.LOKI_AUTH_USER_PASSWORD!,
32
+ },
33
+ }),
34
+ );
35
+ this.lokiLogger.debug('test');
36
+ loggerInstance = this;
37
+ return loggerInstance;
38
+ }
39
+
40
+ private createLogMessage(
41
+ request: Request,
42
+ message: Object | string,
43
+ session: Session | null,
44
+ logDescription?: string,
45
+ ) {
46
+ const body = {
47
+ type: logDescription || '__DEFAULT',
48
+ context: {
49
+ method: request.method,
50
+ url: request.url,
51
+ sessionUserId: session?.user.id,
52
+ sessionUserName: session?.user.name,
53
+ sessionUserEmail: session?.user.email,
54
+ },
55
+ message: message,
56
+ };
57
+ return body;
58
+ }
59
+
60
+ info(
61
+ request: Request,
62
+ session: Session | null,
63
+ message: string | Object,
64
+ logDescription?: string,
65
+ ) {
66
+ this.lokiLogger.info(
67
+ this.createLogMessage(request, message, session, logDescription),
68
+ );
69
+ }
70
+ warn(
71
+ request: Request,
72
+ session: Session | null,
73
+ message: string | Object,
74
+ logDescription?: string,
75
+ ) {
76
+ this.lokiLogger.warn(
77
+ this.createLogMessage(request, message, session, logDescription),
78
+ );
79
+ }
80
+ debug(
81
+ request: Request,
82
+ session: Session | null,
83
+ message: string | Object,
84
+ logDescription?: string,
85
+ ) {
86
+ this.lokiLogger.debug(
87
+ this.createLogMessage(request, message, session, logDescription),
88
+ );
89
+ }
90
+ error(
91
+ request: Request,
92
+ session: Session | null,
93
+ message: string | Object,
94
+ logDescription?: string,
95
+ ) {
96
+ this.lokiLogger.error(
97
+ this.createLogMessage(request, message, session, logDescription),
98
+ );
99
+ }
100
+ }
101
+
102
+ export const withLogging = (
103
+ handler: (session: Session | null, json: any) => Promise<Response>,
104
+ ) => {
105
+ return async (req: Request) => {
106
+ const session = await auth();
107
+ const json = await req.json();
108
+ logger.info(
109
+ req,
110
+ session,
111
+ {
112
+ params: json,
113
+ },
114
+ '_API_REQUEST',
115
+ );
116
+ return handler(session, json);
117
+ };
118
+ };
119
+
120
+ export const logger = new Logger();
next.config.js CHANGED
@@ -1,4 +1,5 @@
1
  /** @type {import('next').NextConfig} */
 
2
  module.exports = {
3
  images: {
4
  remotePatterns: [
@@ -8,4 +9,7 @@ module.exports = {
8
  },
9
  ],
10
  },
 
 
 
11
  };
 
1
  /** @type {import('next').NextConfig} */
2
+
3
  module.exports = {
4
  images: {
5
  remotePatterns: [
 
9
  },
10
  ],
11
  },
12
+ experimental: {
13
+ serverComponentsExternalPackages: ['pino', 'pino-loki'],
14
+ }
15
  };
package.json CHANGED
@@ -38,6 +38,8 @@
38
  "next-auth": "5.0.0-beta.16",
39
  "next-themes": "^0.2.1",
40
  "openai": "^4.24.7",
 
 
41
  "react": "^18.2.0",
42
  "react-dom": "^18.2.0",
43
  "react-dropzone": "^14.2.3",
@@ -71,4 +73,4 @@
71
  "typescript": "^5.3.3"
72
  },
73
  "packageManager": "pnpm@9.0.1"
74
- }
 
38
  "next-auth": "5.0.0-beta.16",
39
  "next-themes": "^0.2.1",
40
  "openai": "^4.24.7",
41
+ "pino": "^9.0.0",
42
+ "pino-loki": "^2.2.1",
43
  "react": "^18.2.0",
44
  "react-dom": "^18.2.0",
45
  "react-dropzone": "^14.2.3",
 
73
  "typescript": "^5.3.3"
74
  },
75
  "packageManager": "pnpm@9.0.1"
76
+ }
pnpm-lock.yaml CHANGED
@@ -80,6 +80,12 @@ dependencies:
80
  openai:
81
  specifier: ^4.24.7
82
  version: 4.38.1
 
 
 
 
 
 
83
  react:
84
  specifier: ^18.2.0
85
  version: 18.2.0
@@ -1905,6 +1911,11 @@ packages:
1905
  resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==}
1906
  dev: true
1907
 
 
 
 
 
 
1908
  /@smithy/abort-controller@2.2.0:
1909
  resolution: {integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==}
1910
  engines: {node: '>=14.0.0'}
@@ -2366,6 +2377,13 @@ packages:
2366
  tslib: 2.6.2
2367
  dev: false
2368
 
 
 
 
 
 
 
 
2369
  /@tailwindcss/typography@0.5.12(tailwindcss@3.4.3):
2370
  resolution: {integrity: sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==}
2371
  peerDependencies:
@@ -2378,6 +2396,15 @@ packages:
2378
  tailwindcss: 3.4.3
2379
  dev: true
2380
 
 
 
 
 
 
 
 
 
 
2381
  /@types/cookie@0.6.0:
2382
  resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
2383
  dev: false
@@ -2398,6 +2425,10 @@ packages:
2398
  '@types/unist': 2.0.10
2399
  dev: false
2400
 
 
 
 
 
2401
  /@types/json5@0.0.29:
2402
  resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
2403
  dev: true
@@ -2406,6 +2437,12 @@ packages:
2406
  resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
2407
  dev: false
2408
 
 
 
 
 
 
 
2409
  /@types/mdast@3.0.15:
2410
  resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
2411
  dependencies:
@@ -2454,6 +2491,12 @@ packages:
2454
  '@types/prop-types': 15.7.12
2455
  csstype: 3.1.3
2456
 
 
 
 
 
 
 
2457
  /@types/unist@2.0.10:
2458
  resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
2459
  dev: false
@@ -2847,6 +2890,11 @@ packages:
2847
  resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
2848
  dev: false
2849
 
 
 
 
 
 
2850
  /attr-accept@2.2.2:
2851
  resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==}
2852
  engines: {node: '>=4'}
@@ -2900,6 +2948,10 @@ packages:
2900
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
2901
  dev: true
2902
 
 
 
 
 
2903
  /binary-extensions@2.3.0:
2904
  resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
2905
  engines: {node: '>=8'}
@@ -2940,6 +2992,13 @@ packages:
2940
  update-browserslist-db: 1.0.13(browserslist@4.23.0)
2941
  dev: true
2942
 
 
 
 
 
 
 
 
2943
  /busboy@1.6.0:
2944
  resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
2945
  engines: {node: '>=10.16.0'}
@@ -2947,6 +3006,24 @@ packages:
2947
  streamsearch: 1.1.0
2948
  dev: false
2949
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2950
  /call-bind@1.0.7:
2951
  resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
2952
  engines: {node: '>= 0.4'}
@@ -3024,6 +3101,12 @@ packages:
3024
  resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
3025
  dev: false
3026
 
 
 
 
 
 
 
3027
  /clsx@2.0.0:
3028
  resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
3029
  engines: {node: '>=6'}
@@ -3070,6 +3153,11 @@ packages:
3070
  resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
3071
  dev: false
3072
 
 
 
 
 
 
3073
  /commander@4.1.1:
3074
  resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
3075
  engines: {node: '>= 6'}
@@ -3182,10 +3270,22 @@ packages:
3182
  character-entities: 2.0.2
3183
  dev: false
3184
 
 
 
 
 
 
 
 
3185
  /deep-is@0.1.4:
3186
  resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
3187
  dev: true
3188
 
 
 
 
 
 
3189
  /define-data-property@1.1.4:
3190
  resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
3191
  engines: {node: '>= 0.4'}
@@ -3267,6 +3367,12 @@ packages:
3267
  resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
3268
  dev: true
3269
 
 
 
 
 
 
 
3270
  /enhanced-resolve@5.16.0:
3271
  resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==}
3272
  engines: {node: '>=10.13.0'}
@@ -3722,6 +3828,11 @@ packages:
3722
  engines: {node: '>=6'}
3723
  dev: false
3724
 
 
 
 
 
 
3725
  /eventsource-parser@1.0.0:
3726
  resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==}
3727
  engines: {node: '>=14.18'}
@@ -3754,6 +3865,11 @@ packages:
3754
  resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
3755
  dev: true
3756
 
 
 
 
 
 
3757
  /fast-xml-parser@4.2.5:
3758
  resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==}
3759
  hasBin: true
@@ -3951,6 +4067,13 @@ packages:
3951
  engines: {node: '>=6'}
3952
  dev: false
3953
 
 
 
 
 
 
 
 
3954
  /get-symbol-description@1.0.2:
3955
  resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
3956
  engines: {node: '>= 0.4'}
@@ -4055,6 +4178,23 @@ packages:
4055
  get-intrinsic: 1.2.4
4056
  dev: true
4057
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4058
  /graceful-fs@4.2.11:
4059
  resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
4060
 
@@ -4123,12 +4263,28 @@ packages:
4123
  resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
4124
  dev: false
4125
 
 
 
 
 
 
 
 
 
 
 
 
 
4126
  /humanize-ms@1.2.1:
4127
  resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
4128
  dependencies:
4129
  ms: 2.1.3
4130
  dev: false
4131
 
 
 
 
 
4132
  /ignore@5.3.1:
4133
  resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
4134
  engines: {node: '>= 4'}
@@ -4458,7 +4614,6 @@ packages:
4458
 
4459
  /json-buffer@3.0.1:
4460
  resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
4461
- dev: true
4462
 
4463
  /json-schema-traverse@0.4.1:
4464
  resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -4496,7 +4651,6 @@ packages:
4496
  resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
4497
  dependencies:
4498
  json-buffer: 3.0.1
4499
- dev: true
4500
 
4501
  /kleur@4.1.5:
4502
  resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
@@ -4569,6 +4723,11 @@ packages:
4569
  dependencies:
4570
  js-tokens: 4.0.0
4571
 
 
 
 
 
 
4572
  /lowlight@1.20.0:
4573
  resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
4574
  dependencies:
@@ -5025,6 +5184,16 @@ packages:
5025
  mime-db: 1.52.0
5026
  dev: false
5027
 
 
 
 
 
 
 
 
 
 
 
5028
  /minimatch@3.1.2:
5029
  resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
5030
  dependencies:
@@ -5197,6 +5366,11 @@ packages:
5197
  engines: {node: '>=0.10.0'}
5198
  dev: true
5199
 
 
 
 
 
 
5200
  /oauth4webapi@2.10.4:
5201
  resolution: {integrity: sha512-DSoj8QoChzOCQlJkRmYxAJCIpnXFW32R0Uq7avyghIeB6iJq0XAblOD7pcq3mx4WEBDwMuKr0Y1qveCBleG2Xw==}
5202
  dev: false
@@ -5275,11 +5449,15 @@ packages:
5275
  es-object-atoms: 1.0.0
5276
  dev: true
5277
 
 
 
 
 
 
5278
  /once@1.4.0:
5279
  resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
5280
  dependencies:
5281
  wrappy: 1.0.2
5282
- dev: true
5283
 
5284
  /openai@4.38.1:
5285
  resolution: {integrity: sha512-nmSKE9O2piuoh9+AgDqwGHojIFSxToQ2jJqwaxjbzz2ebdD5LYY9s+bMe25b18t4QEgvtgW70JfK8BU3xf5dRw==}
@@ -5309,6 +5487,11 @@ packages:
5309
  type-check: 0.4.0
5310
  dev: true
5311
 
 
 
 
 
 
5312
  /p-limit@3.1.0:
5313
  resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
5314
  engines: {node: '>=10'}
@@ -5394,6 +5577,44 @@ packages:
5394
  engines: {node: '>=0.10.0'}
5395
  dev: true
5396
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5397
  /pirates@4.0.6:
5398
  resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
5399
  engines: {node: '>= 6'}
@@ -5528,6 +5749,15 @@ packages:
5528
  engines: {node: '>=6'}
5529
  dev: false
5530
 
 
 
 
 
 
 
 
 
 
5531
  /prop-types@15.8.1:
5532
  resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
5533
  dependencies:
@@ -5545,6 +5775,13 @@ packages:
5545
  resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
5546
  dev: false
5547
 
 
 
 
 
 
 
 
5548
  /punycode@2.3.1:
5549
  resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
5550
  engines: {node: '>=6'}
@@ -5554,6 +5791,15 @@ packages:
5554
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
5555
  dev: true
5556
 
 
 
 
 
 
 
 
 
 
5557
  /react-dom@18.2.0(react@18.2.0):
5558
  resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
5559
  peerDependencies:
@@ -5729,6 +5975,17 @@ packages:
5729
  pify: 2.3.0
5730
  dev: true
5731
 
 
 
 
 
 
 
 
 
 
 
 
5732
  /readdirp@3.6.0:
5733
  resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
5734
  engines: {node: '>=8.10.0'}
@@ -5736,6 +5993,11 @@ packages:
5736
  picomatch: 2.3.1
5737
  dev: true
5738
 
 
 
 
 
 
5739
  /reflect.getprototypeof@1.0.6:
5740
  resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
5741
  engines: {node: '>= 0.4'}
@@ -5809,6 +6071,10 @@ packages:
5809
  unified: 10.1.2
5810
  dev: false
5811
 
 
 
 
 
5812
  /resolve-from@4.0.0:
5813
  resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
5814
  engines: {node: '>=4'}
@@ -5836,6 +6102,12 @@ packages:
5836
  supports-preserve-symlinks-flag: 1.0.0
5837
  dev: true
5838
 
 
 
 
 
 
 
5839
  /reusify@1.0.4:
5840
  resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
5841
  engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -5871,6 +6143,10 @@ packages:
5871
  isarray: 2.0.5
5872
  dev: true
5873
 
 
 
 
 
5874
  /safe-regex-test@1.0.3:
5875
  resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
5876
  engines: {node: '>= 0.4'}
@@ -5880,6 +6156,11 @@ packages:
5880
  is-regex: 1.1.4
5881
  dev: true
5882
 
 
 
 
 
 
5883
  /scheduler@0.23.0:
5884
  resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
5885
  dependencies:
@@ -5986,6 +6267,12 @@ packages:
5986
  swr-store: 0.10.6
5987
  dev: false
5988
 
 
 
 
 
 
 
5989
  /source-map-js@1.2.0:
5990
  resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
5991
  engines: {node: '>=0.10.0'}
@@ -5998,6 +6285,11 @@ packages:
5998
  resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
5999
  dev: false
6000
 
 
 
 
 
 
6001
  /sswr@2.0.0(svelte@4.2.15):
6002
  resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==}
6003
  peerDependencies:
@@ -6075,6 +6367,12 @@ packages:
6075
  es-object-atoms: 1.0.0
6076
  dev: true
6077
 
 
 
 
 
 
 
6078
  /strip-ansi@6.0.1:
6079
  resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
6080
  engines: {node: '>=8'}
@@ -6271,6 +6569,12 @@ packages:
6271
  any-promise: 1.3.0
6272
  dev: true
6273
 
 
 
 
 
 
 
6274
  /to-fast-properties@2.0.0:
6275
  resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
6276
  engines: {node: '>=4'}
@@ -6688,7 +6992,6 @@ packages:
6688
 
6689
  /wrappy@1.0.2:
6690
  resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
6691
- dev: true
6692
 
6693
  /xtend@4.0.2:
6694
  resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
 
80
  openai:
81
  specifier: ^4.24.7
82
  version: 4.38.1
83
+ pino:
84
+ specifier: ^9.0.0
85
+ version: 9.0.0
86
+ pino-loki:
87
+ specifier: ^2.2.1
88
+ version: 2.2.1
89
  react:
90
  specifier: ^18.2.0
91
  version: 18.2.0
 
1911
  resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==}
1912
  dev: true
1913
 
1914
+ /@sindresorhus/is@4.6.0:
1915
+ resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
1916
+ engines: {node: '>=10'}
1917
+ dev: false
1918
+
1919
  /@smithy/abort-controller@2.2.0:
1920
  resolution: {integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==}
1921
  engines: {node: '>=14.0.0'}
 
2377
  tslib: 2.6.2
2378
  dev: false
2379
 
2380
+ /@szmarczak/http-timer@4.0.6:
2381
+ resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
2382
+ engines: {node: '>=10'}
2383
+ dependencies:
2384
+ defer-to-connect: 2.0.1
2385
+ dev: false
2386
+
2387
  /@tailwindcss/typography@0.5.12(tailwindcss@3.4.3):
2388
  resolution: {integrity: sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==}
2389
  peerDependencies:
 
2396
  tailwindcss: 3.4.3
2397
  dev: true
2398
 
2399
+ /@types/cacheable-request@6.0.3:
2400
+ resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
2401
+ dependencies:
2402
+ '@types/http-cache-semantics': 4.0.4
2403
+ '@types/keyv': 3.1.4
2404
+ '@types/node': 20.12.7
2405
+ '@types/responselike': 1.0.3
2406
+ dev: false
2407
+
2408
  /@types/cookie@0.6.0:
2409
  resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
2410
  dev: false
 
2425
  '@types/unist': 2.0.10
2426
  dev: false
2427
 
2428
+ /@types/http-cache-semantics@4.0.4:
2429
+ resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
2430
+ dev: false
2431
+
2432
  /@types/json5@0.0.29:
2433
  resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
2434
  dev: true
 
2437
  resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
2438
  dev: false
2439
 
2440
+ /@types/keyv@3.1.4:
2441
+ resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
2442
+ dependencies:
2443
+ '@types/node': 20.12.7
2444
+ dev: false
2445
+
2446
  /@types/mdast@3.0.15:
2447
  resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
2448
  dependencies:
 
2491
  '@types/prop-types': 15.7.12
2492
  csstype: 3.1.3
2493
 
2494
+ /@types/responselike@1.0.3:
2495
+ resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
2496
+ dependencies:
2497
+ '@types/node': 20.12.7
2498
+ dev: false
2499
+
2500
  /@types/unist@2.0.10:
2501
  resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
2502
  dev: false
 
2890
  resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
2891
  dev: false
2892
 
2893
+ /atomic-sleep@1.0.0:
2894
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
2895
+ engines: {node: '>=8.0.0'}
2896
+ dev: false
2897
+
2898
  /attr-accept@2.2.2:
2899
  resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==}
2900
  engines: {node: '>=4'}
 
2948
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
2949
  dev: true
2950
 
2951
+ /base64-js@1.5.1:
2952
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
2953
+ dev: false
2954
+
2955
  /binary-extensions@2.3.0:
2956
  resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
2957
  engines: {node: '>=8'}
 
2992
  update-browserslist-db: 1.0.13(browserslist@4.23.0)
2993
  dev: true
2994
 
2995
+ /buffer@6.0.3:
2996
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
2997
+ dependencies:
2998
+ base64-js: 1.5.1
2999
+ ieee754: 1.2.1
3000
+ dev: false
3001
+
3002
  /busboy@1.6.0:
3003
  resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
3004
  engines: {node: '>=10.16.0'}
 
3006
  streamsearch: 1.1.0
3007
  dev: false
3008
 
3009
+ /cacheable-lookup@5.0.4:
3010
+ resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
3011
+ engines: {node: '>=10.6.0'}
3012
+ dev: false
3013
+
3014
+ /cacheable-request@7.0.4:
3015
+ resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==}
3016
+ engines: {node: '>=8'}
3017
+ dependencies:
3018
+ clone-response: 1.0.3
3019
+ get-stream: 5.2.0
3020
+ http-cache-semantics: 4.1.1
3021
+ keyv: 4.5.4
3022
+ lowercase-keys: 2.0.0
3023
+ normalize-url: 6.1.0
3024
+ responselike: 2.0.1
3025
+ dev: false
3026
+
3027
  /call-bind@1.0.7:
3028
  resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
3029
  engines: {node: '>= 0.4'}
 
3101
  resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
3102
  dev: false
3103
 
3104
+ /clone-response@1.0.3:
3105
+ resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
3106
+ dependencies:
3107
+ mimic-response: 1.0.1
3108
+ dev: false
3109
+
3110
  /clsx@2.0.0:
3111
  resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
3112
  engines: {node: '>=6'}
 
3153
  resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
3154
  dev: false
3155
 
3156
+ /commander@10.0.1:
3157
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
3158
+ engines: {node: '>=14'}
3159
+ dev: false
3160
+
3161
  /commander@4.1.1:
3162
  resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
3163
  engines: {node: '>= 6'}
 
3270
  character-entities: 2.0.2
3271
  dev: false
3272
 
3273
+ /decompress-response@6.0.0:
3274
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
3275
+ engines: {node: '>=10'}
3276
+ dependencies:
3277
+ mimic-response: 3.1.0
3278
+ dev: false
3279
+
3280
  /deep-is@0.1.4:
3281
  resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
3282
  dev: true
3283
 
3284
+ /defer-to-connect@2.0.1:
3285
+ resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
3286
+ engines: {node: '>=10'}
3287
+ dev: false
3288
+
3289
  /define-data-property@1.1.4:
3290
  resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
3291
  engines: {node: '>= 0.4'}
 
3367
  resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
3368
  dev: true
3369
 
3370
+ /end-of-stream@1.4.4:
3371
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
3372
+ dependencies:
3373
+ once: 1.4.0
3374
+ dev: false
3375
+
3376
  /enhanced-resolve@5.16.0:
3377
  resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==}
3378
  engines: {node: '>=10.13.0'}
 
3828
  engines: {node: '>=6'}
3829
  dev: false
3830
 
3831
+ /events@3.3.0:
3832
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
3833
+ engines: {node: '>=0.8.x'}
3834
+ dev: false
3835
+
3836
  /eventsource-parser@1.0.0:
3837
  resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==}
3838
  engines: {node: '>=14.18'}
 
3865
  resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
3866
  dev: true
3867
 
3868
+ /fast-redact@3.5.0:
3869
+ resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
3870
+ engines: {node: '>=6'}
3871
+ dev: false
3872
+
3873
  /fast-xml-parser@4.2.5:
3874
  resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==}
3875
  hasBin: true
 
4067
  engines: {node: '>=6'}
4068
  dev: false
4069
 
4070
+ /get-stream@5.2.0:
4071
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
4072
+ engines: {node: '>=8'}
4073
+ dependencies:
4074
+ pump: 3.0.0
4075
+ dev: false
4076
+
4077
  /get-symbol-description@1.0.2:
4078
  resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
4079
  engines: {node: '>= 0.4'}
 
4178
  get-intrinsic: 1.2.4
4179
  dev: true
4180
 
4181
+ /got@11.8.6:
4182
+ resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==}
4183
+ engines: {node: '>=10.19.0'}
4184
+ dependencies:
4185
+ '@sindresorhus/is': 4.6.0
4186
+ '@szmarczak/http-timer': 4.0.6
4187
+ '@types/cacheable-request': 6.0.3
4188
+ '@types/responselike': 1.0.3
4189
+ cacheable-lookup: 5.0.4
4190
+ cacheable-request: 7.0.4
4191
+ decompress-response: 6.0.0
4192
+ http2-wrapper: 1.0.3
4193
+ lowercase-keys: 2.0.0
4194
+ p-cancelable: 2.1.1
4195
+ responselike: 2.0.1
4196
+ dev: false
4197
+
4198
  /graceful-fs@4.2.11:
4199
  resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
4200
 
 
4263
  resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
4264
  dev: false
4265
 
4266
+ /http-cache-semantics@4.1.1:
4267
+ resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
4268
+ dev: false
4269
+
4270
+ /http2-wrapper@1.0.3:
4271
+ resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
4272
+ engines: {node: '>=10.19.0'}
4273
+ dependencies:
4274
+ quick-lru: 5.1.1
4275
+ resolve-alpn: 1.2.1
4276
+ dev: false
4277
+
4278
  /humanize-ms@1.2.1:
4279
  resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
4280
  dependencies:
4281
  ms: 2.1.3
4282
  dev: false
4283
 
4284
+ /ieee754@1.2.1:
4285
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
4286
+ dev: false
4287
+
4288
  /ignore@5.3.1:
4289
  resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
4290
  engines: {node: '>= 4'}
 
4614
 
4615
  /json-buffer@3.0.1:
4616
  resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
 
4617
 
4618
  /json-schema-traverse@0.4.1:
4619
  resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
 
4651
  resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
4652
  dependencies:
4653
  json-buffer: 3.0.1
 
4654
 
4655
  /kleur@4.1.5:
4656
  resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
 
4723
  dependencies:
4724
  js-tokens: 4.0.0
4725
 
4726
+ /lowercase-keys@2.0.0:
4727
+ resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
4728
+ engines: {node: '>=8'}
4729
+ dev: false
4730
+
4731
  /lowlight@1.20.0:
4732
  resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==}
4733
  dependencies:
 
5184
  mime-db: 1.52.0
5185
  dev: false
5186
 
5187
+ /mimic-response@1.0.1:
5188
+ resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
5189
+ engines: {node: '>=4'}
5190
+ dev: false
5191
+
5192
+ /mimic-response@3.1.0:
5193
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
5194
+ engines: {node: '>=10'}
5195
+ dev: false
5196
+
5197
  /minimatch@3.1.2:
5198
  resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
5199
  dependencies:
 
5366
  engines: {node: '>=0.10.0'}
5367
  dev: true
5368
 
5369
+ /normalize-url@6.1.0:
5370
+ resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
5371
+ engines: {node: '>=10'}
5372
+ dev: false
5373
+
5374
  /oauth4webapi@2.10.4:
5375
  resolution: {integrity: sha512-DSoj8QoChzOCQlJkRmYxAJCIpnXFW32R0Uq7avyghIeB6iJq0XAblOD7pcq3mx4WEBDwMuKr0Y1qveCBleG2Xw==}
5376
  dev: false
 
5449
  es-object-atoms: 1.0.0
5450
  dev: true
5451
 
5452
+ /on-exit-leak-free@2.1.2:
5453
+ resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
5454
+ engines: {node: '>=14.0.0'}
5455
+ dev: false
5456
+
5457
  /once@1.4.0:
5458
  resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
5459
  dependencies:
5460
  wrappy: 1.0.2
 
5461
 
5462
  /openai@4.38.1:
5463
  resolution: {integrity: sha512-nmSKE9O2piuoh9+AgDqwGHojIFSxToQ2jJqwaxjbzz2ebdD5LYY9s+bMe25b18t4QEgvtgW70JfK8BU3xf5dRw==}
 
5487
  type-check: 0.4.0
5488
  dev: true
5489
 
5490
+ /p-cancelable@2.1.1:
5491
+ resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
5492
+ engines: {node: '>=8'}
5493
+ dev: false
5494
+
5495
  /p-limit@3.1.0:
5496
  resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
5497
  engines: {node: '>=10'}
 
5577
  engines: {node: '>=0.10.0'}
5578
  dev: true
5579
 
5580
+ /pino-abstract-transport@1.2.0:
5581
+ resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==}
5582
+ dependencies:
5583
+ readable-stream: 4.5.2
5584
+ split2: 4.2.0
5585
+ dev: false
5586
+
5587
+ /pino-loki@2.2.1:
5588
+ resolution: {integrity: sha512-NLo9INo4lOQ8PfC0i/AZBh8xh6LCCkuGRuREq69Mw25zmoISlZiYCn5FBidagu+Cjm/dvhvt19THRhc0B71NnA==}
5589
+ hasBin: true
5590
+ dependencies:
5591
+ commander: 10.0.1
5592
+ got: 11.8.6
5593
+ pino-abstract-transport: 1.2.0
5594
+ pump: 3.0.0
5595
+ dev: false
5596
+
5597
+ /pino-std-serializers@6.2.2:
5598
+ resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==}
5599
+ dev: false
5600
+
5601
+ /pino@9.0.0:
5602
+ resolution: {integrity: sha512-uI1ThkzTShNSwvsUM6b4ND8ANzWURk9zTELMztFkmnCQeR/4wkomJ+echHee5GMWGovoSfjwdeu80DsFIt7mbA==}
5603
+ hasBin: true
5604
+ dependencies:
5605
+ atomic-sleep: 1.0.0
5606
+ fast-redact: 3.5.0
5607
+ on-exit-leak-free: 2.1.2
5608
+ pino-abstract-transport: 1.2.0
5609
+ pino-std-serializers: 6.2.2
5610
+ process-warning: 3.0.0
5611
+ quick-format-unescaped: 4.0.4
5612
+ real-require: 0.2.0
5613
+ safe-stable-stringify: 2.4.3
5614
+ sonic-boom: 3.8.1
5615
+ thread-stream: 2.7.0
5616
+ dev: false
5617
+
5618
  /pirates@4.0.6:
5619
  resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
5620
  engines: {node: '>= 6'}
 
5749
  engines: {node: '>=6'}
5750
  dev: false
5751
 
5752
+ /process-warning@3.0.0:
5753
+ resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==}
5754
+ dev: false
5755
+
5756
+ /process@0.11.10:
5757
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
5758
+ engines: {node: '>= 0.6.0'}
5759
+ dev: false
5760
+
5761
  /prop-types@15.8.1:
5762
  resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
5763
  dependencies:
 
5775
  resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
5776
  dev: false
5777
 
5778
+ /pump@3.0.0:
5779
+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
5780
+ dependencies:
5781
+ end-of-stream: 1.4.4
5782
+ once: 1.4.0
5783
+ dev: false
5784
+
5785
  /punycode@2.3.1:
5786
  resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
5787
  engines: {node: '>=6'}
 
5791
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
5792
  dev: true
5793
 
5794
+ /quick-format-unescaped@4.0.4:
5795
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
5796
+ dev: false
5797
+
5798
+ /quick-lru@5.1.1:
5799
+ resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
5800
+ engines: {node: '>=10'}
5801
+ dev: false
5802
+
5803
  /react-dom@18.2.0(react@18.2.0):
5804
  resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
5805
  peerDependencies:
 
5975
  pify: 2.3.0
5976
  dev: true
5977
 
5978
+ /readable-stream@4.5.2:
5979
+ resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==}
5980
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
5981
+ dependencies:
5982
+ abort-controller: 3.0.0
5983
+ buffer: 6.0.3
5984
+ events: 3.3.0
5985
+ process: 0.11.10
5986
+ string_decoder: 1.3.0
5987
+ dev: false
5988
+
5989
  /readdirp@3.6.0:
5990
  resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
5991
  engines: {node: '>=8.10.0'}
 
5993
  picomatch: 2.3.1
5994
  dev: true
5995
 
5996
+ /real-require@0.2.0:
5997
+ resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
5998
+ engines: {node: '>= 12.13.0'}
5999
+ dev: false
6000
+
6001
  /reflect.getprototypeof@1.0.6:
6002
  resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
6003
  engines: {node: '>= 0.4'}
 
6071
  unified: 10.1.2
6072
  dev: false
6073
 
6074
+ /resolve-alpn@1.2.1:
6075
+ resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
6076
+ dev: false
6077
+
6078
  /resolve-from@4.0.0:
6079
  resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
6080
  engines: {node: '>=4'}
 
6102
  supports-preserve-symlinks-flag: 1.0.0
6103
  dev: true
6104
 
6105
+ /responselike@2.0.1:
6106
+ resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
6107
+ dependencies:
6108
+ lowercase-keys: 2.0.0
6109
+ dev: false
6110
+
6111
  /reusify@1.0.4:
6112
  resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
6113
  engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
 
6143
  isarray: 2.0.5
6144
  dev: true
6145
 
6146
+ /safe-buffer@5.2.1:
6147
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
6148
+ dev: false
6149
+
6150
  /safe-regex-test@1.0.3:
6151
  resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
6152
  engines: {node: '>= 0.4'}
 
6156
  is-regex: 1.1.4
6157
  dev: true
6158
 
6159
+ /safe-stable-stringify@2.4.3:
6160
+ resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==}
6161
+ engines: {node: '>=10'}
6162
+ dev: false
6163
+
6164
  /scheduler@0.23.0:
6165
  resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
6166
  dependencies:
 
6267
  swr-store: 0.10.6
6268
  dev: false
6269
 
6270
+ /sonic-boom@3.8.1:
6271
+ resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==}
6272
+ dependencies:
6273
+ atomic-sleep: 1.0.0
6274
+ dev: false
6275
+
6276
  /source-map-js@1.2.0:
6277
  resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
6278
  engines: {node: '>=0.10.0'}
 
6285
  resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
6286
  dev: false
6287
 
6288
+ /split2@4.2.0:
6289
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
6290
+ engines: {node: '>= 10.x'}
6291
+ dev: false
6292
+
6293
  /sswr@2.0.0(svelte@4.2.15):
6294
  resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==}
6295
  peerDependencies:
 
6367
  es-object-atoms: 1.0.0
6368
  dev: true
6369
 
6370
+ /string_decoder@1.3.0:
6371
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
6372
+ dependencies:
6373
+ safe-buffer: 5.2.1
6374
+ dev: false
6375
+
6376
  /strip-ansi@6.0.1:
6377
  resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
6378
  engines: {node: '>=8'}
 
6569
  any-promise: 1.3.0
6570
  dev: true
6571
 
6572
+ /thread-stream@2.7.0:
6573
+ resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==}
6574
+ dependencies:
6575
+ real-require: 0.2.0
6576
+ dev: false
6577
+
6578
  /to-fast-properties@2.0.0:
6579
  resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
6580
  engines: {node: '>=4'}
 
6992
 
6993
  /wrappy@1.0.2:
6994
  resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
 
6995
 
6996
  /xtend@4.0.2:
6997
  resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}