From ffb02b86bc249c3ddfc1e7786d69fca8ac823008 Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Mon, 3 Nov 2025 17:26:16 -0500 Subject: [PATCH 1/7] chore: replacing gemini-1.5-* with gemini-2.5-* where appropriate --- go/genkit/genkit.go | 2 +- go/samples/prompts-dir/prompts/example.prompt | 2 +- js/doc-snippets/src/dotprompt/index.ts | 4 +- .../src/dotprompt/prompts/ex01.prompt | 2 +- .../src/dotprompt/prompts/ex02.prompt | 2 +- .../src/dotprompt/prompts/ex03.prompt | 2 +- .../src/dotprompt/prompts/ex04.prompt | 2 +- .../src/dotprompt/prompts/ex05.prompt | 2 +- .../src/dotprompt/prompts/ex06.prompt | 2 +- .../src/dotprompt/prompts/ex08.prompt | 2 +- js/genkit/tests/prompts/badSchemaRef.prompt | 2 +- js/genkit/tests/prompts/schemaRef.prompt | 2 +- js/plugins/google-genai/src/common/types.ts | 1 - .../google-genai/tests/common/utils_test.ts | 8 +-- .../google-genai/tests/googleai/index_test.ts | 4 +- .../google-genai/tests/vertexai/index_test.ts | 6 +- js/plugins/googleai/README.md | 2 +- js/pnpm-lock.yaml | 62 +++++++++---------- .../prompts/hello.first-last-name.prompt | 2 +- .../prompts/hello.history.prompt | 2 +- .../prompts/hello.json-output.prompt | 2 +- .../dev-ui-gallery/prompts/hello.prompt | 2 +- .../prompts/hello.system.prompt | 2 +- .../prompts/tools/weather.prompt | 2 +- js/testapps/durable-streaming/.firebaserc | 6 ++ .../flow-simple-ai/prompts/TellJoke.prompt | 2 +- js/testapps/format-tester/package.json | 2 +- js/testapps/format-tester/src/index.ts | 11 ++-- py/engdoc/extending/index.md | 2 +- py/engdoc/index.md | 2 +- samples/js-prompts/src/index.ts | 8 +-- 31 files changed, 79 insertions(+), 75 deletions(-) create mode 100644 js/testapps/durable-streaming/.firebaserc diff --git a/go/genkit/genkit.go b/go/genkit/genkit.go index 83cd33afeb..68130dafc2 100644 --- a/go/genkit/genkit.go +++ b/go/genkit/genkit.go @@ -556,7 +556,7 @@ func LookupTool(g *Genkit, name string) ai.Tool { // // Define the prompt // capitalPrompt := genkit.DefinePrompt(g, "findCapital", // ai.WithDescription("Finds the capital of a country."), -// ai.WithModelName("googleai/gemini-1.5-flash"), // Specify the model +// ai.WithModelName("googleai/gemini-2.5-flash"), // Specify the model // ai.WithSystem("You are a helpful geography assistant."), // ai.WithPrompt("What is the capital of {{country}}?"), // ai.WithInputType(GeoInput{Country: "USA"}), diff --git a/go/samples/prompts-dir/prompts/example.prompt b/go/samples/prompts-dir/prompts/example.prompt index 3d5930865e..0492cfd326 100644 --- a/go/samples/prompts-dir/prompts/example.prompt +++ b/go/samples/prompts-dir/prompts/example.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash config: temperature: 0.9 input: diff --git a/js/doc-snippets/src/dotprompt/index.ts b/js/doc-snippets/src/dotprompt/index.ts index 18c184f226..7854487b7f 100644 --- a/js/doc-snippets/src/dotprompt/index.ts +++ b/js/doc-snippets/src/dotprompt/index.ts @@ -153,7 +153,7 @@ function fn09() { // [START definePromptTempl] const myPrompt = ai.definePrompt({ name: 'myPrompt', - model: 'googleai/gemini-1.5-flash', + model: 'googleai/gemini-2.5-flash', input: { schema: z.object({ name: z.string(), @@ -168,7 +168,7 @@ function fn10() { // [START definePromptFn] const myPrompt = ai.definePrompt({ name: 'myPrompt', - model: 'googleai/gemini-1.5-flash', + model: 'googleai/gemini-2.5-flash', input: { schema: z.object({ name: z.string(), diff --git a/js/doc-snippets/src/dotprompt/prompts/ex01.prompt b/js/doc-snippets/src/dotprompt/prompts/ex01.prompt index 808989a655..68468abe1b 100644 --- a/js/doc-snippets/src/dotprompt/prompts/ex01.prompt +++ b/js/doc-snippets/src/dotprompt/prompts/ex01.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash config: temperature: 0.9 input: diff --git a/js/doc-snippets/src/dotprompt/prompts/ex02.prompt b/js/doc-snippets/src/dotprompt/prompts/ex02.prompt index 32f5b8eca2..262a1af53c 100644 --- a/js/doc-snippets/src/dotprompt/prompts/ex02.prompt +++ b/js/doc-snippets/src/dotprompt/prompts/ex02.prompt @@ -1,4 +1,4 @@ --- -model: vertexai/gemini-1.5-flash +model: vertexai/gemini-2.5-flash --- You are the world's most welcoming AI assistant. Greet the user and offer your assistance. \ No newline at end of file diff --git a/js/doc-snippets/src/dotprompt/prompts/ex03.prompt b/js/doc-snippets/src/dotprompt/prompts/ex03.prompt index b9e53b4a2d..716f28c66e 100644 --- a/js/doc-snippets/src/dotprompt/prompts/ex03.prompt +++ b/js/doc-snippets/src/dotprompt/prompts/ex03.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash config: temperature: 1.4 topK: 50 diff --git a/js/doc-snippets/src/dotprompt/prompts/ex04.prompt b/js/doc-snippets/src/dotprompt/prompts/ex04.prompt index 54f23637dd..8c2b108b55 100644 --- a/js/doc-snippets/src/dotprompt/prompts/ex04.prompt +++ b/js/doc-snippets/src/dotprompt/prompts/ex04.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash input: schema: theme?: string diff --git a/js/doc-snippets/src/dotprompt/prompts/ex05.prompt b/js/doc-snippets/src/dotprompt/prompts/ex05.prompt index 4099ba82ea..9402d2d810 100644 --- a/js/doc-snippets/src/dotprompt/prompts/ex05.prompt +++ b/js/doc-snippets/src/dotprompt/prompts/ex05.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash input: schema: theme?: string diff --git a/js/doc-snippets/src/dotprompt/prompts/ex06.prompt b/js/doc-snippets/src/dotprompt/prompts/ex06.prompt index 6c55a29454..326fa6d9d8 100644 --- a/js/doc-snippets/src/dotprompt/prompts/ex06.prompt +++ b/js/doc-snippets/src/dotprompt/prompts/ex06.prompt @@ -1,5 +1,5 @@ --- -model: vertexai/gemini-1.5-flash +model: vertexai/gemini-2.5-flash input: schema: userQuestion: string diff --git a/js/doc-snippets/src/dotprompt/prompts/ex08.prompt b/js/doc-snippets/src/dotprompt/prompts/ex08.prompt index 3df55e7876..b936a5fce1 100644 --- a/js/doc-snippets/src/dotprompt/prompts/ex08.prompt +++ b/js/doc-snippets/src/dotprompt/prompts/ex08.prompt @@ -1,5 +1,5 @@ --- -model: vertexai/gemini-1.5-flash +model: vertexai/gemini-2.5-flash input: schema: photoUrl: string diff --git a/js/genkit/tests/prompts/badSchemaRef.prompt b/js/genkit/tests/prompts/badSchemaRef.prompt index 84956e4727..d3c92047da 100644 --- a/js/genkit/tests/prompts/badSchemaRef.prompt +++ b/js/genkit/tests/prompts/badSchemaRef.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash input: schema: badSchemaRef1 output: diff --git a/js/genkit/tests/prompts/schemaRef.prompt b/js/genkit/tests/prompts/schemaRef.prompt index 3c4d37f6b1..9ee3f16ff3 100644 --- a/js/genkit/tests/prompts/schemaRef.prompt +++ b/js/genkit/tests/prompts/schemaRef.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash input: schema: myInputSchema output: diff --git a/js/plugins/google-genai/src/common/types.ts b/js/plugins/google-genai/src/common/types.ts index b29d6f16f5..9245bb4160 100644 --- a/js/plugins/google-genai/src/common/types.ts +++ b/js/plugins/google-genai/src/common/types.ts @@ -933,7 +933,6 @@ export declare interface GenerationConfig { /** * Optional. Positive values penalize tokens that repeatedly appear in the generated text, decreasing the probability of repeating content. * This maximum value for frequencyPenalty is up to, but not including, 2.0. Its minimum value is -2.0. - * Supported by gemini-1.5-pro and gemini-1.5-flash only. */ frequencyPenalty?: number; /** * Google AI Only. If True, export the logprobs results in response. diff --git a/js/plugins/google-genai/tests/common/utils_test.ts b/js/plugins/google-genai/tests/common/utils_test.ts index 56e6d0ade0..aa66161c25 100644 --- a/js/plugins/google-genai/tests/common/utils_test.ts +++ b/js/plugins/google-genai/tests/common/utils_test.ts @@ -62,8 +62,8 @@ describe('Common Utils', () => { }); it('should extract version from name if version field is missing', () => { - const ref = modelRef({ name: 'vertexai/gemini-1.5-flash' }); - assert.strictEqual(extractVersion(ref), 'gemini-1.5-flash'); + const ref = modelRef({ name: 'vertexai/gemini-2.5-flash' }); + assert.strictEqual(extractVersion(ref), 'gemini-2.5-flash'); }); it('should work with embedderRef', () => { @@ -79,8 +79,8 @@ describe('Common Utils', () => { 'gemini-1.5-pro' ); assert.strictEqual( - modelName('vertexai/gemini-1.5-flash'), - 'gemini-1.5-flash' + modelName('vertexai/gemini-2.5-flash'), + 'gemini-2.5-flash' ); assert.strictEqual(modelName('model/foo'), 'foo'); assert.strictEqual(modelName('embedders/bar'), 'bar'); diff --git a/js/plugins/google-genai/tests/googleai/index_test.ts b/js/plugins/google-genai/tests/googleai/index_test.ts index b38270c50e..ab7a629a1e 100644 --- a/js/plugins/google-genai/tests/googleai/index_test.ts +++ b/js/plugins/google-genai/tests/googleai/index_test.ts @@ -487,7 +487,7 @@ describe('GoogleAI Plugin', () => { it('should filter out deprecated models', async () => { const mockModels = [ { - name: 'models/gemini-1.5-flash', + name: 'models/gemini-2.5-flash', supportedGenerationMethods: ['generateContent'], }, { @@ -517,7 +517,7 @@ describe('GoogleAI Plugin', () => { const plugin = googleAI(); const actions = await plugin.list!(); const actionNames = actions.map((a) => a.name); - assert.deepStrictEqual(actionNames, ['googleai/gemini-1.5-flash']); + assert.deepStrictEqual(actionNames, ['googleai/gemini-2.5-flash']); }); it('should handle fetch errors gracefully', async () => { diff --git a/js/plugins/google-genai/tests/vertexai/index_test.ts b/js/plugins/google-genai/tests/vertexai/index_test.ts index 2e11e89f44..05b0f45b23 100644 --- a/js/plugins/google-genai/tests/vertexai/index_test.ts +++ b/js/plugins/google-genai/tests/vertexai/index_test.ts @@ -354,7 +354,7 @@ describe('VertexAI Plugin', () => { }); it('should use auth token for Gemini generateContent', async () => { - const modelRef = vertexAI.model('gemini-1.5-flash'); + const modelRef = vertexAI.model('gemini-2.5-flash'); const generateAction = await ai.registry.lookupAction( '/model/' + modelRef.name ); @@ -442,7 +442,7 @@ describe('VertexAI Plugin', () => { }); it('should use API key for Gemini generateContent', async () => { - const modelRef = vertexAI.model('gemini-1.5-flash'); + const modelRef = vertexAI.model('gemini-2.5-flash'); const generateAction = await ai.registry.lookupAction( '/model/' + modelRef.name ); @@ -537,7 +537,7 @@ describe('VertexAI Plugin', () => { }); it('should use API key for Gemini generateContent', async () => { - const modelRef = vertexAI.model('gemini-1.5-flash'); + const modelRef = vertexAI.model('gemini-2.5-flash'); const generateAction = await ai.registry.lookupAction( '/model/' + modelRef.name ); diff --git a/js/plugins/googleai/README.md b/js/plugins/googleai/README.md index 5342d19804..021ab8f946 100644 --- a/js/plugins/googleai/README.md +++ b/js/plugins/googleai/README.md @@ -14,7 +14,7 @@ import { googleAI, gemini } from '@genkit-ai/googleai'; const ai = genkit({ plugins: [googleAI()], - model: gemini('gemini-1.5-flash'), + model: gemini('gemini-2.5-flash'), }); async () => { diff --git a/js/pnpm-lock.yaml b/js/pnpm-lock.yaml index aaadbc135b..1e4bf209cf 100644 --- a/js/pnpm-lock.yaml +++ b/js/pnpm-lock.yaml @@ -181,7 +181,7 @@ importers: optionalDependencies: '@genkit-ai/firebase': specifier: ^1.16.1 - version: 1.16.1(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) + version: 1.16.1(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) doc-snippets: dependencies: @@ -1026,7 +1026,7 @@ importers: version: link:../../plugins/compat-oai '@genkit-ai/express': specifier: ^1.1.0 - version: 1.12.0(@genkit-ai/core@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(express@5.1.0)(genkit@genkit) + version: 1.12.0(@genkit-ai/core@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(express@5.1.0)(genkit@genkit) genkit: specifier: workspace:* version: link:../../genkit @@ -1465,9 +1465,9 @@ importers: testapps/format-tester: dependencies: - '@genkit-ai/googleai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/googleai + version: link:../../plugins/google-genai '@genkit-ai/vertexai': specifier: workspace:* version: link:../../plugins/vertexai @@ -1670,7 +1670,7 @@ importers: version: link:../../plugins/ollama genkitx-openai: specifier: ^0.10.1 - version: 0.10.1(@genkit-ai/ai@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(@genkit-ai/core@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(encoding@0.1.13) + version: 0.10.1(@genkit-ai/ai@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(@genkit-ai/core@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(encoding@0.1.13) devDependencies: rimraf: specifier: ^6.0.1 @@ -2677,11 +2677,11 @@ packages: '@firebase/webchannel-wrapper@1.0.3': resolution: {integrity: sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==} - '@genkit-ai/ai@1.21.0': - resolution: {integrity: sha512-DLAes+w3Yv9a4zgJUL5CS8eVrNvud/LRv+F4E/O3KkpWz0uoKYREIrTZYSrDt/pF/jlqkRDQaalf7sGKS44IuQ==} + '@genkit-ai/ai@1.22.0': + resolution: {integrity: sha512-TDKO+zWyM5YI8zE4a0IlqlpgHuLB4B4islzgWDvzdQlbjtyJp0ayODAMFhS2ruQ6+a/UdXDySRrOX/RcqF4yjA==} - '@genkit-ai/core@1.21.0': - resolution: {integrity: sha512-suQ81HwtDObejkXJUBWzD5145qoHFXxdozxwzYDy8m93f7kKKtQwSJPQmYXWsTAdHJSjERHfKLCe/xrDshkPYw==} + '@genkit-ai/core@1.22.0': + resolution: {integrity: sha512-etVlpwJkPoy91xR6H5+S/AWZPJMeovb7N35+B90md1+6xWcodQF7WZ3chKcH31Xamlz+jTIvd3riiZGY9RFumg==} '@genkit-ai/express@1.12.0': resolution: {integrity: sha512-QAxSS07dX5ovSfsUB4s90KaDnv4zg1wnoxCZCa+jBsYUyv9NvCCTsOk25xAQgGxc7xi3+MD+3AsPier5oZILIg==} @@ -5328,8 +5328,8 @@ packages: resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} engines: {node: '>=14'} - genkit@1.21.0: - resolution: {integrity: sha512-catTEjxhHZaicvxwak8jFL0K0H0ndN/qE9s+N7CIbsQeJczvRDleoyFa2mtaBOCaoZt7Xj8zJlYXOmt8tRyqJQ==} + genkit@1.22.0: + resolution: {integrity: sha512-GoVVO3EnNHrjkMkUPRvgx1MjBHKvOlZAu/ffMIJgLFxrH7rrUbvfHXE6Nk7uh5BNvET7+DApyhbhqz9G8sy+mQ==} genkitx-openai@0.10.1: resolution: {integrity: sha512-E9/DzyQcBUSTy81xT2pvEmdnn9Q/cKoojEt6lD/EdOeinhqE9oa59d/kuXTokCMekTrj3Rk7LtNBQIDjnyjNOA==} @@ -8533,9 +8533,9 @@ snapshots: '@firebase/webchannel-wrapper@1.0.3': {} - '@genkit-ai/ai@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1))': + '@genkit-ai/ai@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1))': dependencies: - '@genkit-ai/core': 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/core': 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) '@opentelemetry/api': 1.9.0 '@types/node': 20.19.1 colorette: 2.0.20 @@ -8554,9 +8554,9 @@ snapshots: - supports-color optional: true - '@genkit-ai/ai@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit)': + '@genkit-ai/ai@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit)': dependencies: - '@genkit-ai/core': 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) + '@genkit-ai/core': 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) '@opentelemetry/api': 1.9.0 '@types/node': 20.19.1 colorette: 2.0.20 @@ -8574,7 +8574,7 @@ snapshots: - genkit - supports-color - '@genkit-ai/core@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1))': + '@genkit-ai/core@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.9.0) @@ -8596,7 +8596,7 @@ snapshots: zod: 3.25.67 zod-to-json-schema: 3.24.5(zod@3.25.67) optionalDependencies: - '@genkit-ai/firebase': 1.16.1(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/firebase': 1.16.1(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) transitivePeerDependencies: - '@google-cloud/firestore' - encoding @@ -8606,7 +8606,7 @@ snapshots: - supports-color optional: true - '@genkit-ai/core@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit)': + '@genkit-ai/core@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.9.0) @@ -8637,9 +8637,9 @@ snapshots: - genkit - supports-color - '@genkit-ai/express@1.12.0(@genkit-ai/core@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(express@5.1.0)(genkit@genkit)': + '@genkit-ai/express@1.12.0(@genkit-ai/core@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(express@5.1.0)(genkit@genkit)': dependencies: - '@genkit-ai/core': 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) + '@genkit-ai/core': 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) body-parser: 1.20.3 cors: 2.8.5 express: 5.1.0 @@ -8647,12 +8647,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@genkit-ai/firebase@1.16.1(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1))': + '@genkit-ai/firebase@1.16.1(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1))': dependencies: - '@genkit-ai/google-cloud': 1.16.1(encoding@0.1.13)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/google-cloud': 1.16.1(encoding@0.1.13)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) '@google-cloud/firestore': 7.11.1(encoding@0.1.13) firebase-admin: 13.4.0(encoding@0.1.13) - genkit: 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1) + genkit: 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1) optionalDependencies: firebase: 11.9.1 transitivePeerDependencies: @@ -8673,7 +8673,7 @@ snapshots: - supports-color optional: true - '@genkit-ai/google-cloud@1.16.1(encoding@0.1.13)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1))': + '@genkit-ai/google-cloud@1.16.1(encoding@0.1.13)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1))': dependencies: '@google-cloud/logging-winston': 6.0.1(encoding@0.1.13)(winston@3.17.0) '@google-cloud/opentelemetry-cloud-monitoring-exporter': 0.19.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) @@ -8689,7 +8689,7 @@ snapshots: '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-node': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) - genkit: 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1) + genkit: 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1) google-auth-library: 9.15.1(encoding@0.1.13) node-fetch: 3.3.2 winston: 3.17.0 @@ -11719,10 +11719,10 @@ snapshots: - encoding - supports-color - genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1): + genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1): dependencies: - '@genkit-ai/ai': 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) - '@genkit-ai/core': 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/ai': 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/core': 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)) uuid: 10.0.0 transitivePeerDependencies: - '@google-cloud/firestore' @@ -11732,10 +11732,10 @@ snapshots: - supports-color optional: true - genkitx-openai@0.10.1(@genkit-ai/ai@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(@genkit-ai/core@1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(encoding@0.1.13): + genkitx-openai@0.10.1(@genkit-ai/ai@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(@genkit-ai/core@1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(encoding@0.1.13): dependencies: - '@genkit-ai/ai': 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) - '@genkit-ai/core': 1.21.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) + '@genkit-ai/ai': 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) + '@genkit-ai/core': 1.22.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.4.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) openai: 4.104.0(encoding@0.1.13)(zod@3.25.67) zod: 3.25.67 transitivePeerDependencies: diff --git a/js/testapps/dev-ui-gallery/prompts/hello.first-last-name.prompt b/js/testapps/dev-ui-gallery/prompts/hello.first-last-name.prompt index a88163bb5e..fa139e9cd9 100644 --- a/js/testapps/dev-ui-gallery/prompts/hello.first-last-name.prompt +++ b/js/testapps/dev-ui-gallery/prompts/hello.first-last-name.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash input: schema: firstName: string diff --git a/js/testapps/dev-ui-gallery/prompts/hello.history.prompt b/js/testapps/dev-ui-gallery/prompts/hello.history.prompt index 31f7468b27..3fffa09663 100644 --- a/js/testapps/dev-ui-gallery/prompts/hello.history.prompt +++ b/js/testapps/dev-ui-gallery/prompts/hello.history.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash config: maxOutputTokens: 2048 temperature: 0.6 diff --git a/js/testapps/dev-ui-gallery/prompts/hello.json-output.prompt b/js/testapps/dev-ui-gallery/prompts/hello.json-output.prompt index 60483c339d..909984f2f6 100644 --- a/js/testapps/dev-ui-gallery/prompts/hello.json-output.prompt +++ b/js/testapps/dev-ui-gallery/prompts/hello.json-output.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash input: schema: name: string diff --git a/js/testapps/dev-ui-gallery/prompts/hello.prompt b/js/testapps/dev-ui-gallery/prompts/hello.prompt index 6e0c4631a5..26da699a08 100644 --- a/js/testapps/dev-ui-gallery/prompts/hello.prompt +++ b/js/testapps/dev-ui-gallery/prompts/hello.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash config: maxOutputTokens: 2048 temperature: 0.6 diff --git a/js/testapps/dev-ui-gallery/prompts/hello.system.prompt b/js/testapps/dev-ui-gallery/prompts/hello.system.prompt index daf1ef1d5e..9da24dbd3b 100644 --- a/js/testapps/dev-ui-gallery/prompts/hello.system.prompt +++ b/js/testapps/dev-ui-gallery/prompts/hello.system.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash config: maxOutputTokens: 2048 temperature: 0.6 diff --git a/js/testapps/dev-ui-gallery/prompts/tools/weather.prompt b/js/testapps/dev-ui-gallery/prompts/tools/weather.prompt index 4a55dac664..0f806935eb 100644 --- a/js/testapps/dev-ui-gallery/prompts/tools/weather.prompt +++ b/js/testapps/dev-ui-gallery/prompts/tools/weather.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash config: maxOutputTokens: 2048 temperature: 0.6 diff --git a/js/testapps/durable-streaming/.firebaserc b/js/testapps/durable-streaming/.firebaserc new file mode 100644 index 0000000000..8987097a72 --- /dev/null +++ b/js/testapps/durable-streaming/.firebaserc @@ -0,0 +1,6 @@ +{ + "projects": { + "default": "pavelj-genkit-test1" + }, + "databaseURL": "https://pavelj-genkit-test1-default-rtdb.firebaseio.com/" +} diff --git a/js/testapps/flow-simple-ai/prompts/TellJoke.prompt b/js/testapps/flow-simple-ai/prompts/TellJoke.prompt index 1865390c79..f87f1a5960 100644 --- a/js/testapps/flow-simple-ai/prompts/TellJoke.prompt +++ b/js/testapps/flow-simple-ai/prompts/TellJoke.prompt @@ -1,5 +1,5 @@ --- -model: googleai/gemini-1.5-flash +model: googleai/gemini-2.5-flash input: schema: subject: string diff --git a/js/testapps/format-tester/package.json b/js/testapps/format-tester/package.json index 30dfebe9b7..71f244c2ee 100644 --- a/js/testapps/format-tester/package.json +++ b/js/testapps/format-tester/package.json @@ -15,7 +15,7 @@ "author": "", "license": "ISC", "dependencies": { - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "@genkit-ai/vertexai": "workspace:*", "@opentelemetry/sdk-trace-base": "~1.25.0", "genkit": "workspace:*" diff --git a/js/testapps/format-tester/src/index.ts b/js/testapps/format-tester/src/index.ts index c8ef88c016..1178cf4d38 100644 --- a/js/testapps/format-tester/src/index.ts +++ b/js/testapps/format-tester/src/index.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -import { googleAI } from '@genkit-ai/googleai'; -import { vertexAI } from '@genkit-ai/vertexai'; +import { googleAI, vertexAI } from '@genkit-ai/google-genai'; import { claude35Sonnet, claude35SonnetV2, @@ -150,10 +149,10 @@ for (const format in prompts) { let models = process.argv.slice(2); if (!models.length) { models = [ - 'vertexai/gemini-1.5-pro', - 'vertexai/gemini-1.5-flash', - 'googleai/gemini-1.5-pro', - 'googleai/gemini-1.5-flash', + 'vertexai/gemini-2.5-pro', + 'vertexai/gemini-2.5-flash', + 'googleai/gemini-2.5-pro', + 'googleai/gemini-2.5-flash', 'googleai/gemini-2.0-flash', ]; } diff --git a/py/engdoc/extending/index.md b/py/engdoc/extending/index.md index 575f341391..99adf0f124 100644 --- a/py/engdoc/extending/index.md +++ b/py/engdoc/extending/index.md @@ -119,7 +119,7 @@ text templates (e.g. using a templating language such as Handlebars): ```dotprompt --- -model: vertexai/gemini-1.5-flash +model: vertexai/gemini-2.5-flash config: temperature: 0.9 input: diff --git a/py/engdoc/index.md b/py/engdoc/index.md index 6120b6f16b..57909edcdb 100644 --- a/py/engdoc/index.md +++ b/py/engdoc/index.md @@ -524,7 +524,7 @@ capabilities in code: ```yaml --- - model: vertexai/gemini-1.5-flash + model: vertexai/gemini-2.5-flash config: temperature: 0.9 input: diff --git a/samples/js-prompts/src/index.ts b/samples/js-prompts/src/index.ts index 5241dd1a62..b1f2210ecb 100644 --- a/samples/js-prompts/src/index.ts +++ b/samples/js-prompts/src/index.ts @@ -27,7 +27,7 @@ const ai = genkit({ const simplePrompt = ai.defineFlow('simplePrompt', () => ai.generate({ - model: 'googleai/gemini-1.5-flash', + model: 'googleai/gemini-2.5-flash', prompt: 'You are a helpful AI assistant named Walt, say hello', }) ); @@ -35,7 +35,7 @@ const simplePrompt = ai.defineFlow('simplePrompt', () => const simpleTemplate = ai.defineFlow('simpleTemplate', () => { const name = 'Fred'; return ai.generate({ - model: 'googleai/gemini-1.5-flash', + model: 'googleai/gemini-2.5-flash', prompt: `You are a helpful AI assistant named Walt. Say hello to ${name}.`, }); }); @@ -43,7 +43,7 @@ const simpleTemplate = ai.defineFlow('simpleTemplate', () => { const helloDotprompt = ai.definePrompt( { name: 'helloPrompt', - model: 'googleai/gemini-1.5-flash', + model: 'googleai/gemini-2.5-flash', input: { schema: z.object({ name: z.string() }), }, @@ -64,7 +64,7 @@ const outputSchema = z.object({ const threeGreetingsPrompt = ai.definePrompt( { name: 'threeGreetingsPrompt', - model: 'googleai/gemini-1.5-flash', + model: 'googleai/gemini-2.5-flash', input: { schema: z.object({ name: z.string() }), }, From 0319212c6b47190948ac3cea662bdad2d1c6f048 Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Mon, 3 Nov 2025 21:53:04 -0500 Subject: [PATCH 2/7] more --- js/genkit/src/genkit.ts | 12 +- js/plugins/checks/README.md | 4 +- js/plugins/dev-local-vectorstore/README.md | 10 +- js/plugins/express/README.md | 2 +- js/plugins/next/README.md | 2 +- js/plugins/vertexai/README.md | 4 +- js/pnpm-lock.yaml | 221 +- js/testapps/custom-evaluators/package.json | 2 +- js/testapps/custom-evaluators/src/index.ts | 6 +- js/testapps/dev-ui-gallery/package.json | 2 +- js/testapps/dev-ui-gallery/src/genkit.ts | 17 +- .../dev-ui-gallery/src/main/prompts.ts | 8 +- js/testapps/dev-ui-gallery/src/main/tools.ts | 4 +- js/testapps/docs-menu-basic/package.json | 2 +- js/testapps/docs-menu-basic/src/index.ts | 4 +- js/testapps/docs-menu-rag/package.json | 2 +- js/testapps/docs-menu-rag/src/genkit.ts | 4 +- js/testapps/docs-menu-rag/src/menuQA.ts | 4 +- js/testapps/express/package.json | 3 +- js/testapps/express/src/index.ts | 7 +- .../functions/package.json | 2 +- .../functions/prompts/TellJoke.prompt | 2 +- .../functions/src/index.ts | 4 +- js/testapps/format-tester/src/tools.ts | 7 +- .../google-ai-code-execution/package.json | 25 - .../google-ai-code-execution/src/index.ts | 85 - .../google-ai-code-execution/tsconfig.json | 14 - .../langchain/genkit-getting-started.pdf | Bin 70365 -> 0 bytes .../langchain/genkit-getting-started.txt | 259 -- js/testapps/langchain/package.json | 36 - js/testapps/langchain/src/index.ts | 85 - js/testapps/langchain/tsconfig.json | 15 - js/testapps/menu/package.json | 2 +- js/testapps/menu/src/01/prompts.ts | 4 +- js/testapps/menu/src/02/prompts.ts | 4 +- js/testapps/menu/src/04/prompts.ts | 4 +- js/testapps/menu/src/05/prompts.ts | 6 +- js/testapps/menu/src/genkit.ts | 6 +- js/testapps/multimodal/docs/BirthdayPets.pdf | Bin 254347 -> 0 bytes js/testapps/multimodal/package.json | 44 - js/testapps/multimodal/src/genkit.ts | 79 - js/testapps/multimodal/src/index.ts | 18 - js/testapps/multimodal/src/pdf.ts | 180 - js/testapps/multimodal/src/prompt.ts | 91 - js/testapps/multimodal/src/video.ts | 329 -- js/testapps/multimodal/tsconfig.json | 16 - js/testapps/next/package.json | 2 +- js/testapps/next/src/genkit/index.ts | 4 +- js/testapps/rag/package.json | 2 +- js/testapps/rag/src/genkit.ts | 22 +- js/testapps/rag/src/pdf-rag-firebase.ts | 9 +- js/testapps/rag/src/pdf-rag.ts | 4 +- js/testapps/rag/src/prompt.ts | 4 +- .../tools-config-test1/genkit-tools.conf.js | 46 - js/testapps/tools-config-test1/package.json | 14 - samples/js-character-generator/index.ts | 4 +- .../js-character-generator/package-lock.json | 3025 +++++++++++-- samples/js-character-generator/package.json | 2 +- samples/js-chatbot/server/package-lock.json | 3779 +++++++++++++---- samples/js-chatbot/server/package.json | 9 +- samples/js-chatbot/server/src/index.ts | 7 +- samples/js-menu/package-lock.json | 981 +++-- samples/js-menu/package.json | 2 +- samples/js-menu/src/01/prompts.ts | 4 +- samples/js-menu/src/02/prompts.ts | 4 +- samples/js-menu/src/03/flows.ts | 4 +- samples/js-menu/src/03/prompts.ts | 4 +- samples/js-menu/src/04/prompts.ts | 4 +- samples/js-menu/src/05/prompts.ts | 6 +- samples/js-menu/src/genkit.ts | 6 +- 70 files changed, 6441 insertions(+), 3144 deletions(-) delete mode 100644 js/testapps/google-ai-code-execution/package.json delete mode 100644 js/testapps/google-ai-code-execution/src/index.ts delete mode 100644 js/testapps/google-ai-code-execution/tsconfig.json delete mode 100644 js/testapps/langchain/genkit-getting-started.pdf delete mode 100644 js/testapps/langchain/genkit-getting-started.txt delete mode 100644 js/testapps/langchain/package.json delete mode 100644 js/testapps/langchain/src/index.ts delete mode 100644 js/testapps/langchain/tsconfig.json delete mode 100644 js/testapps/multimodal/docs/BirthdayPets.pdf delete mode 100644 js/testapps/multimodal/package.json delete mode 100644 js/testapps/multimodal/src/genkit.ts delete mode 100644 js/testapps/multimodal/src/index.ts delete mode 100644 js/testapps/multimodal/src/pdf.ts delete mode 100644 js/testapps/multimodal/src/prompt.ts delete mode 100644 js/testapps/multimodal/src/video.ts delete mode 100644 js/testapps/multimodal/tsconfig.json delete mode 100644 js/testapps/tools-config-test1/genkit-tools.conf.js delete mode 100644 js/testapps/tools-config-test1/package.json diff --git a/js/genkit/src/genkit.ts b/js/genkit/src/genkit.ts index abe4f66d4a..96b72b53f9 100644 --- a/js/genkit/src/genkit.ts +++ b/js/genkit/src/genkit.ts @@ -658,7 +658,7 @@ export class Genkit implements HasRegistry { * ```ts * const ai = genkit({ * plugins: [googleAI()], - * model: gemini15Flash, // default model + * model: googleAI.model('gemini-2.5-flash'), // default model * }) * * const { text } = await ai.generate('hi'); @@ -674,7 +674,7 @@ export class Genkit implements HasRegistry { * ```ts * const ai = genkit({ * plugins: [googleAI()], - * model: gemini15Flash, // default model + * model: googleAI.model('gemini-2.5-flash'), // default model * }) * * const { text } = await ai.generate([ @@ -708,7 +708,7 @@ export class Genkit implements HasRegistry { * ], * messages: conversationHistory, * tools: [ userInfoLookup ], - * model: gemini15Flash, + * model: googleAI.model('gemini-2.5-flash'), * }); * ``` */ @@ -750,7 +750,7 @@ export class Genkit implements HasRegistry { * ```ts * const ai = genkit({ * plugins: [googleAI()], - * model: gemini15Flash, // default model + * model: googleAI.model('gemini-2.5-flash'), // default model * }) * * const { response, stream } = ai.generateStream('hi'); @@ -770,7 +770,7 @@ export class Genkit implements HasRegistry { * ```ts * const ai = genkit({ * plugins: [googleAI()], - * model: gemini15Flash, // default model + * model: googleAI.model('gemini-2.5-flash'), // default model * }) * * const { response, stream } = ai.generateStream([ @@ -808,7 +808,7 @@ export class Genkit implements HasRegistry { * ], * messages: conversationHistory, * tools: [ userInfoLookup ], - * model: gemini15Flash, + * model: googleAI.model('gemini-2.5-flash'), * }); * for await (const chunk of stream) { * console.log(chunk.text); diff --git a/js/plugins/checks/README.md b/js/plugins/checks/README.md index 8d8ad8025b..21dd2da6bb 100644 --- a/js/plugins/checks/README.md +++ b/js/plugins/checks/README.md @@ -37,7 +37,7 @@ import { } from '@genkit-ai/checks'; // Import any models you would like to use. -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; export const ai = genkit({ plugins: [ @@ -53,7 +53,7 @@ export const poemFlow = ai.defineFlow( }, async (topic) => { const { text } = await ai.generate({ - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), prompt: `Write a poem on this topic: ${topic}`, // Add checks middleware to your generate calls. use: [ diff --git a/js/plugins/dev-local-vectorstore/README.md b/js/plugins/dev-local-vectorstore/README.md index 44f3ada277..04cfddca53 100644 --- a/js/plugins/dev-local-vectorstore/README.md +++ b/js/plugins/dev-local-vectorstore/README.md @@ -14,11 +14,7 @@ npm i --save @genkit-ai/dev-local-vectorstore ```ts import { Document, genkit } from 'genkit'; -import { - googleAI, - gemini20Flash, // Replaced gemini15Flash with gemini20Flash - textEmbeddingGecko001, -} from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { devLocalVectorstore, devLocalIndexerRef, @@ -31,11 +27,11 @@ const ai = genkit({ devLocalVectorstore([ { indexName: 'BobFacts', - embedder: textEmbeddingGecko001, + embedder: googleAI.embedder('text-embedding-004'), }, ]), ], - model: gemini20Flash, // Use gemini20Flash + model: googleAI.model('gemini-2.5-flash'), }); // Reference to a local vector database storing Genkit documentation diff --git a/js/plugins/express/README.md b/js/plugins/express/README.md index adbed594ac..b46e0ca350 100644 --- a/js/plugins/express/README.md +++ b/js/plugins/express/README.md @@ -20,7 +20,7 @@ import express from 'express'; const simpleFlow = ai.defineFlow('simpleFlow', async (input, { sendChunk }) => { const { text } = await ai.generate({ - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), prompt: input, onChunk: (c) => sendChunk(c.text), }); diff --git a/js/plugins/next/README.md b/js/plugins/next/README.md index 3464b92988..ebf3e8727c 100644 --- a/js/plugins/next/README.md +++ b/js/plugins/next/README.md @@ -10,7 +10,7 @@ const simpleFlow = ai.defineFlow( 'simpleFlow', async (input, streamingCallback) => { const { text } = await ai.generate({ - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), prompt: input, streamingCallback: (chunk) => streamingCallback(chunk.text), }); diff --git a/js/plugins/vertexai/README.md b/js/plugins/vertexai/README.md index 0d21d53a78..66fee5c6cd 100644 --- a/js/plugins/vertexai/README.md +++ b/js/plugins/vertexai/README.md @@ -10,11 +10,11 @@ npm i --save @genkit-ai/vertexai ```ts import { genkit } from 'genkit'; -import { vertexAI, gemini, gemini15Flash } from '@genkit-ai/vertexai'; +import { vertexAI } from '@genkit-ai/vertexai'; const ai = genkit({ plugins: [vertexAI()], - model: gemini15Flash, + model: vertexAI.model('gemini-2.5-flash'), }); async () => { diff --git a/js/pnpm-lock.yaml b/js/pnpm-lock.yaml index 1e4bf209cf..25128d997a 100644 --- a/js/pnpm-lock.yaml +++ b/js/pnpm-lock.yaml @@ -1093,9 +1093,9 @@ importers: testapps/custom-evaluators: dependencies: - '@genkit-ai/googleai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/googleai + version: link:../../plugins/google-genai genkit: specifier: workspace:* version: link:../../genkit @@ -1130,9 +1130,9 @@ importers: '@genkit-ai/google-cloud': specifier: workspace:* version: link:../../plugins/google-cloud - '@genkit-ai/googleai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/googleai + version: link:../../plugins/google-genai '@genkit-ai/vertexai': specifier: workspace:* version: link:../../plugins/vertexai @@ -1176,9 +1176,9 @@ importers: '@genkit-ai/firebase': specifier: workspace:* version: link:../../plugins/firebase - '@genkit-ai/googleai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/googleai + version: link:../../plugins/google-genai express: specifier: ^4.21.0 version: 4.21.2 @@ -1201,9 +1201,9 @@ importers: '@genkit-ai/firebase': specifier: workspace:* version: link:../../plugins/firebase - '@genkit-ai/vertexai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/vertexai + version: link:../../plugins/google-genai genkit: specifier: workspace:* version: link:../../genkit @@ -1354,12 +1354,9 @@ importers: '@genkit-ai/firebase': specifier: workspace:* version: link:../../plugins/firebase - '@genkit-ai/googleai': - specifier: workspace:* - version: link:../../plugins/googleai - '@genkit-ai/vertexai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/vertexai + version: link:../../plugins/google-genai express: specifier: ^4.21.0 version: 4.21.2 @@ -1488,77 +1485,6 @@ importers: specifier: ^5.3.3 version: 5.8.3 - testapps/google-ai-code-execution: - dependencies: - '@genkit-ai/google-cloud': - specifier: workspace:* - version: link:../../plugins/google-cloud - '@genkit-ai/googleai': - specifier: workspace:* - version: link:../../plugins/googleai - dotenv: - specifier: ^16.4.5 - version: 16.5.0 - express: - specifier: ^4.21.0 - version: 4.21.2 - genkit: - specifier: workspace:* - version: link:../../genkit - devDependencies: - typescript: - specifier: ^5.5.3 - version: 5.8.3 - - testapps/langchain: - dependencies: - '@genkit-ai/firebase': - specifier: workspace:* - version: link:../../plugins/firebase - '@genkit-ai/googleai': - specifier: workspace:* - version: link:../../plugins/googleai - '@genkit-ai/vertexai': - specifier: workspace:* - version: link:../../plugins/vertexai - '@langchain/community': - specifier: ^0.0.53 - version: 0.0.53(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.2) - '@langchain/core': - specifier: ^0.1.61 - version: 0.1.63 - '@opentelemetry/api': - specifier: ^1.9.0 - version: 1.9.0 - express: - specifier: ^4.21.0 - version: 4.21.2 - genkit: - specifier: workspace:* - version: link:../../genkit - genkitx-langchain: - specifier: workspace:* - version: link:../../plugins/langchain - genkitx-ollama: - specifier: workspace:* - version: link:../../plugins/ollama - langchain: - specifier: ^0.1.36 - version: 0.1.37(@google-cloud/storage@7.16.0(encoding@0.1.13))(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(fast-xml-parser@4.5.3)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(handlebars@4.7.8)(ignore@5.3.1)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pdf-parse@1.1.1)(pg@8.16.2) - pdf-parse: - specifier: ^1.1.1 - version: 1.1.1 - devDependencies: - '@types/express': - specifier: ^4.17.21 - version: 4.17.23 - rimraf: - specifier: ^6.0.1 - version: 6.0.1 - typescript: - specifier: ^5.3.3 - version: 5.8.3 - testapps/mcp: dependencies: '@genkit-ai/dev-local-vectorstore': @@ -1634,9 +1560,9 @@ importers: '@genkit-ai/firebase': specifier: workspace:* version: link:../../plugins/firebase - '@genkit-ai/vertexai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/vertexai + version: link:../../plugins/google-genai genkit: specifier: workspace:* version: link:../../genkit @@ -1679,81 +1605,11 @@ importers: specifier: ^5.3.3 version: 5.8.3 - testapps/multimodal: - dependencies: - '@genkit-ai/ai': - specifier: workspace:* - version: link:../../ai - '@genkit-ai/dev-local-vectorstore': - specifier: workspace:* - version: link:../../plugins/dev-local-vectorstore - '@genkit-ai/evaluator': - specifier: workspace:* - version: link:../../plugins/evaluators - '@genkit-ai/express': - specifier: workspace:* - version: link:../../plugins/express - '@genkit-ai/firebase': - specifier: workspace:* - version: link:../../plugins/firebase - '@genkit-ai/googleai': - specifier: workspace:* - version: link:../../plugins/googleai - '@genkit-ai/vertexai': - specifier: workspace:* - version: link:../../plugins/vertexai - file-type-checker: - specifier: ^1.1.2 - version: 1.1.4 - genkit: - specifier: workspace:* - version: link:../../genkit - genkitx-chromadb: - specifier: workspace:* - version: link:../../plugins/chroma - genkitx-langchain: - specifier: workspace:* - version: link:../../plugins/langchain - genkitx-pinecone: - specifier: workspace:* - version: link:../../plugins/pinecone - google-auth-library: - specifier: ^9.6.3 - version: 9.15.1(encoding@0.1.13) - llm-chunk: - specifier: ^0.0.1 - version: 0.0.1 - pdf-lib: - specifier: ^1.17.1 - version: 1.17.1 - pdf-parse: - specifier: ^1.1.1 - version: 1.1.1 - devDependencies: - '@types/pdf-parse': - specifier: ^1.1.4 - version: 1.1.5 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - rimraf: - specifier: ^6.0.1 - version: 6.0.1 - tsx: - specifier: ^4.19.1 - version: 4.20.3 - typescript: - specifier: ^5.3.3 - version: 5.8.3 - vertexai: - specifier: link:@types/@genkit-ai/vertexai - version: link:@types/@genkit-ai/vertexai - testapps/next: dependencies: - '@genkit-ai/googleai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/googleai + version: link:../../plugins/google-genai '@genkit-ai/next': specifier: workspace:* version: link:../../plugins/next @@ -1817,9 +1673,9 @@ importers: '@genkit-ai/firebase': specifier: workspace:* version: link:../../plugins/firebase - '@genkit-ai/googleai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/googleai + version: link:../../plugins/google-genai '@genkit-ai/vertexai': specifier: workspace:* version: link:../../plugins/vertexai @@ -1864,12 +1720,6 @@ importers: specifier: ^5.3.3 version: 5.8.3 - testapps/tools-config-test1: - devDependencies: - typescript: - specifier: ^5.3.3 - version: 5.8.3 - testapps/vertexai-modelgarden: dependencies: '@genkit-ai/firebase': @@ -3929,12 +3779,6 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@pdf-lib/standard-fonts@1.0.0': - resolution: {integrity: sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==} - - '@pdf-lib/upng@1.0.1': - resolution: {integrity: sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==} - '@pinecone-database/pinecone@2.2.2': resolution: {integrity: sha512-gbe/4SowHc64pHIm0kBdgY9hVdzsQnnnpcWviwYMB33gOmsL8brvE8fUSpl1dLDvdyXzKcQkzdBsjCDlqgpdMA==} engines: {node: '>=14.0.0'} @@ -5195,9 +5039,6 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - file-type-checker@1.1.4: - resolution: {integrity: sha512-ZqDOywUE+cXb2PVb1iPHQP5/6ZLVCCJPIWJBStDXK1dWspUYNXtPRvU+Ae2ovWU5gmUXkmOQizTTGQZsqdekzg==} - filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -6671,9 +6512,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - parents@1.0.1: resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} @@ -6736,9 +6574,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pdf-lib@1.17.1: - resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==} - pdf-parse@1.1.1: resolution: {integrity: sha512-v6ZJ/efsBpGrGGknjtq9J/oC8tZWq0KWL5vQrk2GlzLEQPUDB1ex+13Rmidl1neNN358Jn9EHZw5y07FFtaC7A==} engines: {node: '>=6.8.1'} @@ -7463,9 +7298,6 @@ packages: '@swc/wasm': optional: true - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -10092,14 +9924,6 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) - '@pdf-lib/standard-fonts@1.0.0': - dependencies: - pako: 1.0.11 - - '@pdf-lib/upng@1.0.1': - dependencies: - pako: 1.0.11 - '@pinecone-database/pinecone@2.2.2': dependencies: '@sinclair/typebox': 0.29.6 @@ -11478,8 +11302,6 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - file-type-checker@1.1.4: {} - filelist@1.0.4: dependencies: minimatch: 5.1.6 @@ -13328,8 +13150,6 @@ snapshots: package-json-from-dist@1.0.1: {} - pako@1.0.11: {} - parents@1.0.1: dependencies: path-platform: 0.11.15 @@ -13385,13 +13205,6 @@ snapshots: pathe@2.0.3: {} - pdf-lib@1.17.1: - dependencies: - '@pdf-lib/standard-fonts': 1.0.0 - '@pdf-lib/upng': 1.0.1 - pako: 1.0.11 - tslib: 1.14.1 - pdf-parse@1.1.1: dependencies: debug: 3.2.7 @@ -14274,8 +14087,6 @@ snapshots: yn: 3.1.1 optional: true - tslib@1.14.1: {} - tslib@2.6.2: {} tslib@2.8.1: {} diff --git a/js/testapps/custom-evaluators/package.json b/js/testapps/custom-evaluators/package.json index a5c258b18b..c0b4766999 100644 --- a/js/testapps/custom-evaluators/package.json +++ b/js/testapps/custom-evaluators/package.json @@ -16,7 +16,7 @@ "author": "", "license": "ISC", "dependencies": { - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "genkit": "workspace:*", "path": "^0.12.7" }, diff --git a/js/testapps/custom-evaluators/src/index.ts b/js/testapps/custom-evaluators/src/index.ts index 363b0cb4d3..4e864017f4 100644 --- a/js/testapps/custom-evaluators/src/index.ts +++ b/js/testapps/custom-evaluators/src/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit, type Genkit, type ModelReference, type z } from 'genkit'; import { genkitPlugin, type GenkitPlugin } from 'genkit/plugin'; import { @@ -39,9 +39,9 @@ import { export const ai = genkit({ plugins: [ - googleAI({ apiVersion: ['v1'] }), + googleAI(), byoEval({ - judge: gemini15Flash, + judge: googleAI.model('gemini-2.5-flash'), judgeConfig: PERMISSIVE_SAFETY_SETTINGS, metrics: [ // regexMatcher will register an evaluator with a name in the format diff --git a/js/testapps/dev-ui-gallery/package.json b/js/testapps/dev-ui-gallery/package.json index 4782369525..e4053544cf 100644 --- a/js/testapps/dev-ui-gallery/package.json +++ b/js/testapps/dev-ui-gallery/package.json @@ -27,7 +27,7 @@ "@genkit-ai/evaluator": "workspace:*", "@genkit-ai/firebase": "workspace:*", "@genkit-ai/google-cloud": "workspace:*", - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "@genkit-ai/vertexai": "workspace:*", "firebase-admin": ">=12.2", "firebase-functions": "^6.3.1", diff --git a/js/testapps/dev-ui-gallery/src/genkit.ts b/js/testapps/dev-ui-gallery/src/genkit.ts index 6bf6dbd135..0f8334d7a0 100644 --- a/js/testapps/dev-ui-gallery/src/genkit.ts +++ b/js/testapps/dev-ui-gallery/src/genkit.ts @@ -17,8 +17,7 @@ import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; import { GenkitMetric, genkitEval } from '@genkit-ai/evaluator'; import { enableFirebaseTelemetry } from '@genkit-ai/firebase'; -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; -import { textEmbedding004, vertexAI } from '@genkit-ai/vertexai'; +import { googleAI, vertexAI } from '@genkit-ai/google-genai'; import { VertexAIEvaluationMetricType, vertexAIEvaluation, @@ -82,12 +81,12 @@ export const PERMISSIVE_SAFETY_SETTINGS: any = { // a second instance, just for fun export const ai2 = genkit({ name: 'Instance Two', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), plugins: [googleAI()], }); export const ai = genkit({ - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), // load at least one plugin representing each action type plugins: [ // model providers @@ -143,30 +142,30 @@ export const ai = genkit({ chroma([ { collectionName: 'chroma-collection', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), embedderOptions: { taskType: 'RETRIEVAL_DOCUMENT' }, }, ]), devLocalVectorstore([ { indexName: 'naive-index', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), embedderOptions: { taskType: 'RETRIEVAL_DOCUMENT' }, }, ]), pinecone([ { indexId: 'pinecone-index', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), embedderOptions: { taskType: 'RETRIEVAL_DOCUMENT' }, }, ]), // evaluation genkitEval({ - judge: gemini15Flash, + judge: googleAI.model('gemini-2.5-flash'), judgeConfig: PERMISSIVE_SAFETY_SETTINGS, - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), metrics: [ GenkitMetric.ANSWER_RELEVANCY, GenkitMetric.FAITHFULNESS, diff --git a/js/testapps/dev-ui-gallery/src/main/prompts.ts b/js/testapps/dev-ui-gallery/src/main/prompts.ts index 7a5fb40a1f..951812757a 100644 --- a/js/testapps/dev-ui-gallery/src/main/prompts.ts +++ b/js/testapps/dev-ui-gallery/src/main/prompts.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { HelloFullNameSchema, HelloSchema } from '../common/types.js'; import { ai } from '../genkit.js'; @@ -28,7 +28,7 @@ const template = 'Say hello to {{name}} in the voice of a {{persona}}.'; export const codeDefinedPrompt = ai.definePrompt({ name: promptName, - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: HelloSchema, }, @@ -66,7 +66,7 @@ export const codeDefinedPrompt = ai.definePrompt({ export const codeDefinedPromptVariant = ai.definePrompt({ name: promptName, variant: 'jsonOutput', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: HelloSchema, }, @@ -100,7 +100,7 @@ export const promptFn = ai.definePrompt({ input: { schema: HelloSchema, }, - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), messages: async (input) => [ { role: 'user', diff --git a/js/testapps/dev-ui-gallery/src/main/tools.ts b/js/testapps/dev-ui-gallery/src/main/tools.ts index 0a4582a731..cdac07dac7 100644 --- a/js/testapps/dev-ui-gallery/src/main/tools.ts +++ b/js/testapps/dev-ui-gallery/src/main/tools.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { WeatherSchema } from '../common/types'; import { ai } from '../genkit.js'; @@ -93,7 +93,7 @@ const template = ` export const weatherPrompt = ai.definePrompt({ name: 'weatherPrompt', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: WeatherSchema, }, diff --git a/js/testapps/docs-menu-basic/package.json b/js/testapps/docs-menu-basic/package.json index f3827c5f5c..d61834ecac 100644 --- a/js/testapps/docs-menu-basic/package.json +++ b/js/testapps/docs-menu-basic/package.json @@ -17,7 +17,7 @@ "dependencies": { "genkit": "workspace:*", "@genkit-ai/firebase": "workspace:*", - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "@genkit-ai/express": "workspace:*", "express": "^4.21.0" }, diff --git a/js/testapps/docs-menu-basic/src/index.ts b/js/testapps/docs-menu-basic/src/index.ts index 034d751669..15b5475413 100644 --- a/js/testapps/docs-menu-basic/src/index.ts +++ b/js/testapps/docs-menu-basic/src/index.ts @@ -17,7 +17,7 @@ // This sample is referenced by the genkit docs. Changes should be made to // both. import { startFlowServer } from '@genkit-ai/express'; -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit, z } from 'genkit'; const ai = genkit({ @@ -33,7 +33,7 @@ export const menuSuggestionFlow = ai.defineFlow( async (subject) => { const llmResponse = await ai.generate({ prompt: `Suggest an item for the menu of a ${subject} themed restaurant`, - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), config: { temperature: 1, }, diff --git a/js/testapps/docs-menu-rag/package.json b/js/testapps/docs-menu-rag/package.json index f034d6b222..08a2e8f171 100644 --- a/js/testapps/docs-menu-rag/package.json +++ b/js/testapps/docs-menu-rag/package.json @@ -18,7 +18,7 @@ "genkit": "workspace:*", "@genkit-ai/dev-local-vectorstore": "workspace:*", "@genkit-ai/firebase": "workspace:*", - "@genkit-ai/vertexai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "llm-chunk": "^0.0.1", "pdf-parse": "^1.1.1" }, diff --git a/js/testapps/docs-menu-rag/src/genkit.ts b/js/testapps/docs-menu-rag/src/genkit.ts index dc39ac0220..7934094b65 100644 --- a/js/testapps/docs-menu-rag/src/genkit.ts +++ b/js/testapps/docs-menu-rag/src/genkit.ts @@ -15,7 +15,7 @@ */ import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; -import { textEmbedding004, vertexAI } from '@genkit-ai/vertexai'; +import { vertexAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit'; export const ai = genkit({ @@ -24,7 +24,7 @@ export const ai = genkit({ devLocalVectorstore([ { indexName: 'menuQA', - embedder: textEmbedding004, + embedder: vertexAI.embedder('text-embedding-004'), }, ]), ], diff --git a/js/testapps/docs-menu-rag/src/menuQA.ts b/js/testapps/docs-menu-rag/src/menuQA.ts index cc942f2684..0b5279229f 100644 --- a/js/testapps/docs-menu-rag/src/menuQA.ts +++ b/js/testapps/docs-menu-rag/src/menuQA.ts @@ -15,7 +15,7 @@ */ import { devLocalRetrieverRef } from '@genkit-ai/dev-local-vectorstore'; -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { vertexAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { ai } from './genkit.js'; @@ -34,7 +34,7 @@ export const menuQAFlow = ai.defineFlow( // generate a response const llmResponse = await ai.generate({ - model: gemini15Flash, + model: vertexAI.model('gemini-2.5-flash'), prompt: ` You are acting as a helpful AI assistant that can answer questions about the food available on the menu at Genkit Grub Pub. diff --git a/js/testapps/express/package.json b/js/testapps/express/package.json index 39e3c8de82..296def21ff 100644 --- a/js/testapps/express/package.json +++ b/js/testapps/express/package.json @@ -18,9 +18,8 @@ "genkit": "workspace:*", "@genkit-ai/express": "workspace:*", "@genkit-ai/firebase": "workspace:*", - "@genkit-ai/googleai": "workspace:*", "genkitx-ollama": "workspace:*", - "@genkit-ai/vertexai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "express": "^4.21.0" }, "devDependencies": { diff --git a/js/testapps/express/src/index.ts b/js/testapps/express/src/index.ts index 993e85af4a..7671e732db 100644 --- a/js/testapps/express/src/index.ts +++ b/js/testapps/express/src/index.ts @@ -15,8 +15,7 @@ */ import { expressHandler } from '@genkit-ai/express'; -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; -import { vertexAI } from '@genkit-ai/vertexai'; +import { googleAI, vertexAI } from '@genkit-ai/google-genai'; import express, { type Request, type Response } from 'express'; import { UserFacingError, genkit, z } from 'genkit'; import type { ContextProvider, RequestData } from 'genkit/context'; @@ -48,7 +47,7 @@ export const jokeFlow = ai.defineFlow( return await ai.run('call-llm', async () => { const llmResponse = await ai.generate({ prompt: `tell me long joke about ${subject}`, - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), config: { temperature: 1, }, @@ -131,7 +130,7 @@ app.get('/jokeStream', async (req: Request, res: Response) => { }); await ai.generate({ prompt: `Tell me a long joke about ${subject}`, - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), config: { temperature: 1, }, diff --git a/js/testapps/firebase-functions-sample1/functions/package.json b/js/testapps/firebase-functions-sample1/functions/package.json index 568eecae69..a7c26e2efc 100644 --- a/js/testapps/firebase-functions-sample1/functions/package.json +++ b/js/testapps/firebase-functions-sample1/functions/package.json @@ -16,7 +16,7 @@ "dependencies": { "genkit": "^1.0.0-rc.14", "@genkit-ai/firebase": "^1.0.0-rc.14", - "@genkit-ai/vertexai": "^1.0.0-rc.14", + "@genkit-ai/google-genai": "^1.0.0-rc.14", "firebase-admin": "^12.2", "firebase-functions": "^6.3.1" }, diff --git a/js/testapps/firebase-functions-sample1/functions/prompts/TellJoke.prompt b/js/testapps/firebase-functions-sample1/functions/prompts/TellJoke.prompt index 15d49519a2..6f03b755ec 100644 --- a/js/testapps/firebase-functions-sample1/functions/prompts/TellJoke.prompt +++ b/js/testapps/firebase-functions-sample1/functions/prompts/TellJoke.prompt @@ -1,5 +1,5 @@ --- modelProvider: google-vertex -modelName: gemini-pro +modelName: gemini-2.5-pro --- Tell a joke about {subject} \ No newline at end of file diff --git a/js/testapps/firebase-functions-sample1/functions/src/index.ts b/js/testapps/firebase-functions-sample1/functions/src/index.ts index 1372a1fb6c..fdbbf28541 100644 --- a/js/testapps/firebase-functions-sample1/functions/src/index.ts +++ b/js/testapps/firebase-functions-sample1/functions/src/index.ts @@ -19,7 +19,7 @@ import { FirebaseUserEngagementSchema, collectUserEngagement, } from '@genkit-ai/firebase/user_engagement'; -import { gemini15Flash, vertexAI } from '@genkit-ai/vertexai'; +import { vertexAI } from '@genkit-ai/google-genai'; import { onCallGenkit, onRequest } from 'firebase-functions/https'; import { genkit, z } from 'genkit'; @@ -55,7 +55,7 @@ const jokeFlow = ai.defineFlow( return await ai.run('call-llm', async () => { const llmResponse = await ai.generate({ - model: gemini15Flash, + model: vertexAI.model('gemini-2.5-flash'), prompt: prompt, }); diff --git a/js/testapps/format-tester/src/tools.ts b/js/testapps/format-tester/src/tools.ts index 80ed923af8..cdeada0cbe 100644 --- a/js/testapps/format-tester/src/tools.ts +++ b/js/testapps/format-tester/src/tools.ts @@ -14,10 +14,13 @@ * limitations under the License. */ -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit, z } from 'genkit'; -const ai = genkit({ plugins: [googleAI()], model: gemini15Flash }); +const ai = genkit({ + plugins: [googleAI()], + model: googleAI.model('gemini-2.5-flash'), +}); const lookupUsers = ai.defineTool( { diff --git a/js/testapps/google-ai-code-execution/package.json b/js/testapps/google-ai-code-execution/package.json deleted file mode 100644 index 1cbf483d92..0000000000 --- a/js/testapps/google-ai-code-execution/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "google-ai-code-execution", - "version": "1.0.0", - "description": "", - "main": "lib/index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "node lib/index.js", - "build": "tsc", - "build:watch": "tsc --watch" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "genkit": "workspace:*", - "@genkit-ai/google-cloud": "workspace:*", - "@genkit-ai/googleai": "workspace:*", - "dotenv": "^16.4.5", - "express": "^4.21.0" - }, - "devDependencies": { - "typescript": "^5.5.3" - } -} diff --git a/js/testapps/google-ai-code-execution/src/index.ts b/js/testapps/google-ai-code-execution/src/index.ts deleted file mode 100644 index 07fb42cbc7..0000000000 --- a/js/testapps/google-ai-code-execution/src/index.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { config } from 'dotenv'; -config(); -// Import the Genkit core libraries and plugins. -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; -import { genkit, z } from 'genkit'; - -const ai = genkit({ - plugins: [googleAI()], -}); - -export const codeExecutionFlow = ai.defineFlow( - { - name: 'codeExecutionFlow', - inputSchema: z.string(), - outputSchema: z.object({ - executableCode: z.object({ - code: z.string(), - language: z.string(), - }), - codeExecutionResult: z.object({ - outcome: z.string(), - output: z.string(), - }), - text: z.string(), - }), - }, - async (task: string) => { - // Construct a request and send it to the model API. - const prompt = `Write and execute some code for ${task}`; - const llmResponse = await ai.generate({ - model: gemini15Flash, - prompt: prompt, - config: { - temperature: 1, - codeExecution: true, - }, - }); - - const parts = llmResponse.message!.content; - - const executableCodePart = parts.find( - (part) => part.custom && part.custom.executableCode - ); - const codeExecutionResultPart = parts.find( - (part) => part.custom && part.custom.codeExecutionResult - ); - - // these are typed as any, because the custom part schema is loosely typed... - const code = executableCodePart?.custom?.executableCode.code; - const language = executableCodePart?.custom?.executableCode.language; - - const codeExecutionResult = - codeExecutionResultPart?.custom?.codeExecutionResult; - const outcome = codeExecutionResult.outcome; - const output = codeExecutionResult.output; - - return { - executableCode: { - code, - language, - }, - codeExecutionResult: { - outcome, - output, - }, - text: llmResponse.text, - }; - } -); diff --git a/js/testapps/google-ai-code-execution/tsconfig.json b/js/testapps/google-ai-code-execution/tsconfig.json deleted file mode 100644 index efbb566bf7..0000000000 --- a/js/testapps/google-ai-code-execution/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compileOnSave": true, - "include": ["src"], - "compilerOptions": { - "module": "commonjs", - "noImplicitReturns": true, - "outDir": "lib", - "sourceMap": true, - "strict": true, - "target": "es2017", - "skipLibCheck": true, - "esModuleInterop": true - } -} diff --git a/js/testapps/langchain/genkit-getting-started.pdf b/js/testapps/langchain/genkit-getting-started.pdf deleted file mode 100644 index 36bbb094d73b43da3d4a9d2127a2049444a6fef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70365 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

*Hj-_dNZ)y3uvkJF&`4*fmRjvtyrjR~3@g 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

fiR7n_%Ru7eF^qqtVL%DCFJ)_lF^1>4gO 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 0.5 ? a : b; -} - - -const result = await generate({ - model: flipACoin(geminiPro, 'ollama/gemma'), - config: { temperature: 0.3, maxOutputTokens: 200 }, - prompt: 'What makes you the best LLM out there?', -}); - - -console.log(result.text()); -î°‚2. Structured output -Generate strongly-typed data with Genkit using Zod schema. This can help you analyze unstructured text, generate creative content, select tasks, and send results back to your app as structured type-safe objects. -î°ƒimport { generate } from "@genkit-ai/ai"; -import { geminiPro } from "@genkit-ai/vertexai"; -import { z } from "zod"; - - -const CreatureSchema = z.object({ - name: z.string().describe('the name of the creature'), - hitPoints: z.number().describe('hit points, between 5 and 100'), - attacks: z.array(z.object({ - name: z.string(), - damage: z.number().describe('amount of damage, between 2 and 25'), - })).describe('3 attacks the creature can use') -}); - - -const createCreature = defineFlow({ - name: "createCreature", - inputSchema: z.string(), - outputSchema: CreatureSchema, - }, - (habitat) => { - const result = await generate({ - model: geminiPro, - prompt: `You are a brilliant RPG designer. Generate a creature that lives in ${habitat}.`, - output: {schema: CreatureSchema} - }); - // strongly typed and ready to go - return result.output(); - } -) - - -console.log(await createCreature("a developer conference")); -î°‚3. Multimodal, multimedia -Genkit provides a common format for content that supports mixtures of text, data, and arbitrary media. This lets you use Genkit for models that perform any generative task (such as image generation), not just LLMs. -î°ƒimport { imagen2, geminiProVision } from '@genkit-ai/vertexai'; -import { generate } from '@genkit-ai/ai'; - - -const imageResult = await generate({ - model: imagen2, - prompt: 'Generate an image of a very specific historical time and place.', -}); -const generatedImage = imageResult.media(); - - -const descriptionResult = await generate({ - model: geminiProVision, - prompt: [ - { - text: 'What is the historical time and place represented in this picture?', - }, - { media: generatedImage }, - ], -}); -console.log(descriptionResult.text()); -î°‚4. Give LLMs tools -Genkit makes it simple to do function calling with LLMs through tools. Tools make it possible for AI to fetch data, display UI, write to a database, or take any other action you can code up. -î°ƒimport { generate, defineTool } from "@genkit-ai/ai"; -import { geminiPro } from "@genkit-ai/vertexai"; -import { z } from "zod"; - - -const createReminder = defineTool({ - name: "createReminder", - description: "Use this to create reminders for things in the future", - inputSchema: z.object({ - time: z.string().describe('ISO timestamp string, e.g. 2024-04-03T12:23:00Z'), - reminder: z.string().describe('the content of the reminder'), - }), - outputSchema: z.number().describe('the ID of the created reminder'), - (reminder) => db.reminders.create(reminder) -}); - - -const searchNotes = defineTool({ - name: "searchNotes", - description: "Use this to search the user's notes for people or phrases", - inputSchema: z.string().describe('the search query'), - outputSchema: z.object({notes: z.array(NoteSchema)}), - (query) => db.notes.search(query) -}); - - -const result = await generate({ - model: geminiPro, - tools: [createReminder, searchNotes], - prompt: ` - You are a note-taking assistant. Using the tools available, try to answer the provided query. - If you create a reminder, describe in text the reminder you created as a response. - - - Query: I took a note about a meeting with Anna - can you set a reminder for the time? - ` -}); -console.log(result.text()); -î°‚5. Prompt management with Dotprompt -Prompt engineering is more than just tweaking text. The model you use, parameters you supply, and format you request all impact the quality of your output. Genkit offers Dotprompt, a prompt file format that lets you put it all into a single file for easier testing and organization. -î°ƒ--- -model: vertexai/gemini-1.0-pro -config: - temperature: 0.9 -input: - schema: - properties: - location: {type: string} - style: {type: string} - name: {type: string} - required: [location] - default: - location: a restaurant ---- - - -You are the world's most welcoming AI assistant and are currently working at {{location}}. - - -Greet a guest{{#if name}} named {{name}}{{/if}}{{#if style}} in the style of {{style}}{{/if}}. -î°‚6. Run flows locally -Generative AI has a ton of variation in results, so experimenting is super important. The local Genkit Developer UI lets you interact with essential AI components like models and retrievers, as well as manually test your end-to-end flows including all the custom code you wrote. -7. Inspect traces -Debugging complex, multi-step workflows with AI can be challenging due to randomness and hidden processes. Genkit provides a trace inspector in the developer UI that lets you inspect traces for each model call and step in your flow. It can view traces from production and even render images! -8. Open & extensible -The AI ecosystem is growing faster than any one team can keep up with. Genkit has an open plugin model that provides pre-built integrations with new models, retrievers, and more. While the Genkit team maintains a small set of official plugins, anyone can feel free to publish their own Genkit plugins to NPM. -Can't find a plugin for a particular integration you want? No problem. Genkit's abstractions are flexible and make it easy to build custom components that integrate into the framework, like this custom Firestore retriever: -î°ƒimport { embed } from '@genkit-ai/ai/embedder'; -import { Document, defineRetriever } from '@genkit-ai/ai/retriever'; -import { textEmbeddingGecko } from '@genkit-ai/vertexai'; -import { - FieldValue, - VectorQuery, - VectorQuerySnapshot, -} from '@google-cloud/firestore'; -import { Firestore } from 'firebase-admin/firestore'; -import * as z from 'zod'; -import { augmentedPrompt } from './prompt'; - - -const QueryOptions = z.object({ - k: z.number().optional(), -}); - - -const firestoreArtifactsRetriever = defineRetriever( - { - name: 'firestore/artifacts', - configSchema: QueryOptions, - }, - async (input, options) => { - const embedding = await embed({ - embedder: textEmbeddingGecko, - content: input, - }); - - - const db = new Firestore(); - const coll = db.collection('vectors' /* your collection name */); - - - const vectorQuery: VectorQuery = coll.findNearest( - 'embedding' /* the name of the field that contains the vector */, - FieldValue.vector(embedding), - { - limit: options.k ?? 3, - distanceMeasure: 'COSINE', - } - ); - - - const vectorQuerySnapshot: VectorQuerySnapshot = await vectorQuery.get(); - return { - documents: vectorQuerySnapshot.docs.map((doc) => - // doc.data() represents the Firestore document. You may process - // it as needed to generate a Genkit document object, depending on your - // storage format. - Document.fromText(doc.data().content.text) - ), - }; - } -); -î°‚9. Built for production -Easily deploy your flows to any platform that can serve an Express.js app. Genkit is fully instrumented with OpenTelemetry and custom metadata for enterprise-grade production monitoring. -There are also official plugins for Google Cloud and Firebase that help you export data to Google Cloud's operations suite and integrate with Firebase services like Cloud Functions for Firebase, Firebase Authentication, App Check, and Firestore. - - -10. Authorization & security handling -When building any public-facing application, it's important to protect the data stored in your system. When it comes to LLMs, extra diligence is necessary to ensure that the model is only accessing data it should, tool calls are properly scoped to the user invoking the LLM, and the flow is being invoked only by verified client applications. -Genkit provides mechanisms for managing authorization policies and contexts. -î°ƒimport { defineFlow, runFlow } from '@genkit-ai/flow'; - - -export const selfSummaryFlow = defineFlow( - { - name: 'selfSummaryFlow', - inputSchema: z.object({uid: z.string()}), - outputSchema: z.string(), - authPolicy: (auth, input) => { - if (!auth) { - throw new Error('Authorization required.'); - } - if (input.uid !== auth.uid) { - throw new Error('You may only summarize your own profile data.'); - } - } - }, - async (input) => { ... }); -î°‚Integrations -Genkit provides integrations with AI models, vector databases, telemetry platforms, and more through its plugin system. The following plugins are maintained by the Genkit team: -Official plugins - googleai - Generative models: Gemini Pro, Gemini Pro Vision -Embedding models: Gecko text embedding - vertexai - Generative models: Gemini Pro, Gemini Pro Vision, Imagen2 -Embedding models: Gecko text embedding - ollama - Generative models: Many local models, including Gemma, Llama 2, Mistral, and more - chroma - Vector database: ChromaDB - pinecone - Vector database: Pinecone - google-cloud - Monitoring tools: Google Cloud Trace, Google Cloud Logging - firebase - Cloud deployment: Cloud Functions, Firebase Authentication, App Check - Get started -Read the Getting started guide to learn how to install Genkit and run your first AI flow. \ No newline at end of file diff --git a/js/testapps/langchain/package.json b/js/testapps/langchain/package.json deleted file mode 100644 index cff21f3afa..0000000000 --- a/js/testapps/langchain/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "express-sample", - "version": "1.0.0", - "description": "", - "main": "lib/index.js", - "scripts": { - "start": "node lib/index.js", - "compile": "tsc", - "build": "pnpm build:clean && pnpm compile", - "build:clean": "rimraf ./lib", - "build:watch": "tsc --watch", - "build-and-run": "pnpm build && node lib/index.js" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@genkit-ai/firebase": "workspace:*", - "@genkit-ai/googleai": "workspace:*", - "@genkit-ai/vertexai": "workspace:*", - "@langchain/community": "^0.0.53", - "@langchain/core": "^0.1.61", - "@opentelemetry/api": "^1.9.0", - "express": "^4.21.0", - "genkit": "workspace:*", - "genkitx-langchain": "workspace:*", - "genkitx-ollama": "workspace:*", - "langchain": "^0.1.36", - "pdf-parse": "^1.1.1" - }, - "devDependencies": { - "@types/express": "^4.17.21", - "rimraf": "^6.0.1", - "typescript": "^5.3.3" - } -} diff --git a/js/testapps/langchain/src/index.ts b/js/testapps/langchain/src/index.ts deleted file mode 100644 index f10553e6f1..0000000000 --- a/js/testapps/langchain/src/index.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { googleAI } from '@genkit-ai/googleai'; -import { vertexAI } from '@genkit-ai/vertexai'; -import { GoogleVertexAIEmbeddings } from '@langchain/community/embeddings/googlevertexai'; -import { GoogleVertexAI } from '@langchain/community/llms/googlevertexai'; -import { StringOutputParser } from '@langchain/core/output_parsers'; -import { PromptTemplate } from '@langchain/core/prompts'; -import { - RunnablePassthrough, - RunnableSequence, -} from '@langchain/core/runnables'; -import { genkit, z } from 'genkit'; -import { GenkitTracer } from 'genkitx-langchain'; -import { ollama } from 'genkitx-ollama'; -import { PDFLoader } from 'langchain/document_loaders/fs/pdf'; -import { formatDocumentsAsString } from 'langchain/util/document'; -import { MemoryVectorStore } from 'langchain/vectorstores/memory'; - -const ai = genkit({ - plugins: [ - googleAI(), - vertexAI(), - ollama({ - models: [ - { name: 'llama2', type: 'generate' }, - { name: 'gemma', type: 'chat' }, - ], - serverAddress: 'http://127.0.0.1:11434', // default local address - }), - ], -}); - -const vectorStore = new MemoryVectorStore(new GoogleVertexAIEmbeddings()); -const model = new GoogleVertexAI(); - -export const indexPdf = ai.defineFlow( - { name: 'indexPdf', inputSchema: z.string(), outputSchema: z.void() }, - async (filePath) => { - const docs = await ai.run('load-pdf', async () => { - return await new PDFLoader(filePath).load(); - }); - await ai.run('index', async () => { - vectorStore.addDocuments(docs); - }); - } -); - -const prompt = - PromptTemplate.fromTemplate(`Answer the question based only on the following context: -{context} - -Question: {question}`); -const retriever = vectorStore.asRetriever(); - -export const pdfQA = ai.defineFlow( - { name: 'pdfQA', inputSchema: z.string(), outputSchema: z.string() }, - async (question) => { - const chain = RunnableSequence.from([ - { - context: retriever.pipe(formatDocumentsAsString), - question: new RunnablePassthrough(), - }, - prompt, - model, - new StringOutputParser(), - ]); - - return await chain.invoke(question, { callbacks: [new GenkitTracer()] }); - } -); diff --git a/js/testapps/langchain/tsconfig.json b/js/testapps/langchain/tsconfig.json deleted file mode 100644 index e51f33ae38..0000000000 --- a/js/testapps/langchain/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "module": "NodeNext", - "noImplicitReturns": true, - "noUnusedLocals": false, - "outDir": "lib", - "sourceMap": true, - "strict": true, - "target": "es2017", - "skipLibCheck": true, - "esModuleInterop": true - }, - "compileOnSave": true, - "include": ["src"] -} diff --git a/js/testapps/menu/package.json b/js/testapps/menu/package.json index 7af5dd7559..3f2fff6322 100644 --- a/js/testapps/menu/package.json +++ b/js/testapps/menu/package.json @@ -20,7 +20,7 @@ "@genkit-ai/dev-local-vectorstore": "workspace:*", "@genkit-ai/firebase": "workspace:*", "@genkit-ai/evaluator": "workspace:*", - "@genkit-ai/vertexai": "workspace:*" + "@genkit-ai/google-genai": "workspace:*" }, "devDependencies": { "rimraf": "^6.0.1", diff --git a/js/testapps/menu/src/01/prompts.ts b/js/testapps/menu/src/01/prompts.ts index 16dbb8da38..c6d14a6057 100644 --- a/js/testapps/menu/src/01/prompts.ts +++ b/js/testapps/menu/src/01/prompts.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { ai } from '../genkit.js'; import { MenuQuestionInputSchema, type MenuQuestionInput } from '../types.js'; @@ -44,7 +44,7 @@ export const s01_vanillaPrompt = ai.definePrompt({ export const s01_staticMenuDotPrompt = ai.definePrompt({ name: 's01_staticMenuDotPrompt', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: MenuQuestionInputSchema }, output: { format: 'text' }, messages: ` diff --git a/js/testapps/menu/src/02/prompts.ts b/js/testapps/menu/src/02/prompts.ts index ff2f455149..b54c7d0f15 100644 --- a/js/testapps/menu/src/02/prompts.ts +++ b/js/testapps/menu/src/02/prompts.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { ai } from '../genkit.js'; import { MenuQuestionInputSchema } from '../types.js'; import { menuTool } from './tools.js'; @@ -24,7 +24,7 @@ import { menuTool } from './tools.js'; export const s02_dataMenuPrompt = ai.definePrompt({ name: 's02_dataMenu', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: MenuQuestionInputSchema }, output: { format: 'text' }, tools: [menuTool], diff --git a/js/testapps/menu/src/04/prompts.ts b/js/testapps/menu/src/04/prompts.ts index 088972708f..53d062ee74 100644 --- a/js/testapps/menu/src/04/prompts.ts +++ b/js/testapps/menu/src/04/prompts.ts @@ -14,13 +14,13 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { ai } from '../genkit.js'; import { DataMenuQuestionInputSchema } from '../types.js'; export const s04_ragDataMenuPrompt = ai.definePrompt({ name: 's04_ragDataMenu', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: DataMenuQuestionInputSchema }, output: { format: 'text' }, config: { temperature: 0.3 }, diff --git a/js/testapps/menu/src/05/prompts.ts b/js/testapps/menu/src/05/prompts.ts index 8e697cbd09..55162f8ab5 100644 --- a/js/testapps/menu/src/05/prompts.ts +++ b/js/testapps/menu/src/05/prompts.ts @@ -14,14 +14,14 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { ai } from '../genkit.js'; import { TextMenuQuestionInputSchema } from '../types.js'; export const s05_readMenuPrompt = ai.definePrompt({ name: 's05_readMenu', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: z.object({ imageUrl: z.string(), @@ -39,7 +39,7 @@ from the following image of a restaurant menu. export const s05_textMenuPrompt = ai.definePrompt({ name: 's05_textMenu', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: TextMenuQuestionInputSchema }, output: { format: 'text' }, config: { temperature: 0.3 }, diff --git a/js/testapps/menu/src/genkit.ts b/js/testapps/menu/src/genkit.ts index 0952d77f05..1fb5b31efa 100644 --- a/js/testapps/menu/src/genkit.ts +++ b/js/testapps/menu/src/genkit.ts @@ -14,18 +14,18 @@ * limitations under the License. */ import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; -import { textEmbedding004, vertexAI } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit'; // Initialize Genkit export const ai = genkit({ plugins: [ - vertexAI({ location: 'us-central1' }), + googleAI(), devLocalVectorstore([ { indexName: 'menu-items', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), embedderOptions: { taskType: 'RETRIEVAL_DOCUMENT' }, }, ]), diff --git a/js/testapps/multimodal/docs/BirthdayPets.pdf b/js/testapps/multimodal/docs/BirthdayPets.pdf deleted file mode 100644 index b2f0cc3091cfd044e05dfbe0d7ecef20f421819f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254347 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 Jm6NsNzX6|g9d`f# diff --git a/js/testapps/multimodal/package.json b/js/testapps/multimodal/package.json deleted file mode 100644 index 5308d3ba4a..0000000000 --- a/js/testapps/multimodal/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "multimodal", - "version": "1.0.0", - "description": "", - "main": "lib/index.js", - "scripts": { - "start": "node lib/index.js", - "dev": "tsx --watch src/index.ts", - "genkit:dev": "genkit start -- tsx --watch src/index.ts", - "compile": "tsc", - "build": "pnpm build:clean && pnpm compile", - "build:clean": "rimraf ./lib", - "build:watch": "tsc --watch" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@genkit-ai/dev-local-vectorstore": "workspace:*", - "@genkit-ai/evaluator": "workspace:*", - "@genkit-ai/express": "workspace:*", - "@genkit-ai/firebase": "workspace:*", - "@genkit-ai/googleai": "workspace:*", - "@genkit-ai/vertexai": "workspace:*", - "@genkit-ai/ai": "workspace:*", - "file-type-checker": "^1.1.2", - "genkit": "workspace:*", - "genkitx-chromadb": "workspace:*", - "genkitx-langchain": "workspace:*", - "genkitx-pinecone": "workspace:*", - "google-auth-library": "^9.6.3", - "llm-chunk": "^0.0.1", - "pdf-lib": "^1.17.1", - "pdf-parse": "^1.1.1" - }, - "devDependencies": { - "@types/pdf-parse": "^1.1.4", - "cross-env": "^7.0.3", - "rimraf": "^6.0.1", - "tsx": "^4.19.1", - "typescript": "^5.3.3", - "vertexai": "link:@types/@genkit-ai/vertexai" - } -} diff --git a/js/testapps/multimodal/src/genkit.ts b/js/testapps/multimodal/src/genkit.ts deleted file mode 100644 index 51d40de773..0000000000 --- a/js/testapps/multimodal/src/genkit.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; -import { - gemini15Flash, - multimodalEmbedding001, - vertexAI, -} from '@genkit-ai/vertexai'; -import { genkit, type Genkit } from 'genkit'; -import { chroma } from 'genkitx-chromadb'; -import { pinecone } from 'genkitx-pinecone'; -import { GoogleAuth, type IdTokenClient } from 'google-auth-library'; - -const auth = new GoogleAuth(); -let authClient: IdTokenClient | undefined = undefined; - -/** Helper method to cache {@link IdTokenClient} instance */ -async function getCloudRunAuthClient(aud: string) { - if (!authClient) { - authClient = await auth.getIdTokenClient(aud); - } - return authClient; -} - -export const ai: Genkit = genkit({ - plugins: [ - vertexAI({ - location: 'us-central1', - }), - pinecone([ - { - indexId: 'pinecone-multimodal-index', - embedder: multimodalEmbedding001, - }, - ]), - chroma([ - { - collectionName: 'multimodal_collection', - embedder: multimodalEmbedding001, - createCollectionIfMissing: true, - clientParams: async () => { - // Replace this with your Cloud Run Instance URL - const host = 'https://.run.app'; - const client = await getCloudRunAuthClient(host); - const idToken = await client.idTokenProvider.fetchIdToken(host); - return { - path: host, - fetchOptions: { - headers: { - Authorization: 'Bearer ' + idToken, - }, - }, - }; - }, - }, - ]), - devLocalVectorstore([ - { - indexName: 'localMultiModalIndex', - embedder: multimodalEmbedding001, - }, - ]), - ], - model: gemini15Flash, -}); diff --git a/js/testapps/multimodal/src/index.ts b/js/testapps/multimodal/src/index.ts deleted file mode 100644 index 4c12e497af..0000000000 --- a/js/testapps/multimodal/src/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export * from './pdf.js'; -export * from './video.js'; diff --git a/js/testapps/multimodal/src/pdf.ts b/js/testapps/multimodal/src/pdf.ts deleted file mode 100644 index 91842a33bd..0000000000 --- a/js/testapps/multimodal/src/pdf.ts +++ /dev/null @@ -1,180 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - devLocalIndexerRef, - devLocalRetrieverRef, -} from '@genkit-ai/dev-local-vectorstore'; -import fileTypeChecker from 'file-type-checker'; -import fs from 'fs'; -import { Document, z } from 'genkit'; -import { chunk } from 'llm-chunk'; -import path from 'path'; -import { PDFDocument, PDFRawStream } from 'pdf-lib'; -import pdf from 'pdf-parse'; - -import { ai } from './genkit.js'; -import { augmentedMultimodalPrompt } from './prompt.js'; -//import { ExecutablePrompt } from '@genkit-ai/ai'; - -export const pdfMultimodalRetriever = devLocalRetrieverRef('multiModalIndex'); - -export const pdfMultimodalIndexer = devLocalIndexerRef('multiModalIndex'); - -// Define a multimodal PDF QA flow -// (Index a PDF first) -export const multimodalPdfQAFlow = ai.defineFlow( - { - name: 'multimodalPdfQuestions', - inputSchema: z.string(), - outputSchema: z.string(), - }, - async (query: string, { sendChunk }) => { - const docs = (await ai.retrieve({ - retriever: pdfMultimodalRetriever, - query, - options: { k: 3 }, - })) as Document[]; - - return augmentedMultimodalPrompt( - { - question: query, - text: docs.filter((d) => d.text?.length).map((d) => d.text), - media: docs - .filter( - (d) => d.media[0]?.url?.length && d.media[0]?.contentType?.length - ) - .map((d) => { - if ( - d.media[0].url?.startsWith('gs://') || - d.media[0].url?.startsWith('http') - ) { - return { - gcsUrl: d.media[0]?.url, - contentType: d.media[0]?.contentType, - }; - } - return { - dataUrl: makeDataUrl(d.media[0]), - }; - }), - }, - { - onChunk: (c) => sendChunk(c.text), - } - ).then((r) => r.text); - } -); - -function isObject(value: unknown): value is Record { - return typeof value === 'object' && value !== null; -} - -function makeDataUrl(media: unknown) { - if (isObject(media)) { - if ( - typeof media.contentType === 'string' && - media.contentType.length > 0 && - typeof media.url === 'string' && - media.url.length > 0 - ) { - return `data:${media.contentType};base64,${media.url}`; - } else { - throw new Error( - 'Failed to make data URL. Invalid or missing contentType or url' - ); - } - } - throw new Error( - 'Failed to make data URL. Unexpected media type: ' + typeof media - ); -} - -const chunkingConfig = { - minLength: 800, // number of minimum characters into chunk - maxLength: 1000, // number of maximum characters into chunk - splitter: 'sentence', // paragraph | sentence - overlap: 100, // number of overlap chracters - delimiters: '', // regex for base split method -} as any; - -// Define a flow to index documents into the "vector store" -// genkit flow:run indexMultimodalPdf '"./docs/BirthdayPets.pdf"' -export const indexMultimodalPdf = ai.defineFlow( - { - name: 'indexMultimodalPdf', - inputSchema: z - .string() - .describe('PDF file path') - .default('./docs/BirthdayPets.pdf'), - }, - async (filePath: string) => { - let documents: Document[] = []; - if (filePath.startsWith('gs://') || filePath.startsWith('http')) { - // non local file, use url for pdf file - // e.g gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf - documents = [Document.fromMedia(filePath, 'application/pdf')]; - } else { - // local file (e.g. ./docs/BirthdayPets.pdf) - // use data URLs for images - filePath = path.resolve(filePath); - const pdfTxt = await ai.run('extract-text', () => extractText(filePath)); - - const chunks = await ai.run('chunk-it', async () => - chunk(pdfTxt, chunkingConfig) - ); - - const imageDocs = await ai.run('extract-images', () => - extractImages(filePath) - ); - - const textDocs: Document[] = chunks.map((text: string) => { - return Document.fromText(text, { filePath }); - }); - documents = imageDocs.concat(textDocs); - } - - await ai.index({ - indexer: pdfMultimodalIndexer, - documents, - }); - } -); - -async function extractImages(filePath: string): Promise { - const imgDocs: Document[] = []; - const pdfDoc = await PDFDocument.load(fs.readFileSync(filePath)); - const indirectObjects = pdfDoc.context.enumerateIndirectObjects(); - for (const [ref, obj] of indirectObjects) { - if (obj instanceof PDFRawStream) { - const detectedFileInfo = fileTypeChecker.detectFile(obj.contents); - if ( - detectedFileInfo?.mimeType && - detectedFileInfo?.mimeType.startsWith('image/') - ) { - const base64 = Buffer.from(obj.contents).toString('base64'); - imgDocs.push(Document.fromMedia(base64, detectedFileInfo.mimeType)); - } - } - } - return imgDocs; -} - -async function extractText(filePath: string) { - const dataBuffer = fs.readFileSync(filePath); - const data = await pdf(dataBuffer); - return data.text; -} diff --git a/js/testapps/multimodal/src/prompt.ts b/js/testapps/multimodal/src/prompt.ts deleted file mode 100644 index df27041077..0000000000 --- a/js/testapps/multimodal/src/prompt.ts +++ /dev/null @@ -1,91 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { gemini15Flash } from '@genkit-ai/vertexai'; -import { z } from 'genkit'; -import { ai } from './genkit.js'; - -export const augmentedVideoPrompt = ai.definePrompt({ - model: gemini15Flash, - name: 'augmentedVideoPrompt', - input: { - schema: z.object({ - question: z.string(), - media: z.object({ - gcsUrl: z.string(), - contentType: z.string(), - startOffsetSec: z.number(), - endOffsetSec: z.number(), - }), - }), - }, - output: { - format: 'text', - }, - messages: ` - Use the following video to answer the question at the end. - If you don't know the answer, just say that you don't know, don't try to make up an answer. - - {{media contentType=media.contentType url=media.gcsUrl}} - - Question: {{question}} - Helpful Answer: `, -}); - -// Define a prompt that includes the retrieved context documents -export const augmentedMultimodalPrompt = ai.definePrompt({ - model: gemini15Flash, - name: 'augmentedMultimodalPrompt', - input: { - schema: z.object({ - text: z.optional(z.array(z.string())), - media: z.optional( - z.array( - z - .object({ - dataUrl: z.string(), - gcsUrl: z.string(), - contentType: z.string(), - }) - .partial() - .refine((data) => data.dataUrl || (data.gcsUrl && data.contentType)) - ) - ), - question: z.string(), - }), - }, - output: { - format: 'text', - }, - messages: ` - Use the following context to answer the question at the end. - If you don't know the answer, just say that you don't know, don't try to make up an answer. - {{#each text}} - - {{this}} - {{/each}} - {{#each media}} - {{#if this.dataUrl}} - {{media url=this.dataUrl}} - {{/if}} - {{#if this.gcsUrl}} - {{media contentType=this.contentType url=this.gcsUrl}} - {{/if}} - {{/each}} - - Question: {{question}} - Helpful Answer: - `, -}); diff --git a/js/testapps/multimodal/src/video.ts b/js/testapps/multimodal/src/video.ts deleted file mode 100644 index 668ddb1bc2..0000000000 --- a/js/testapps/multimodal/src/video.ts +++ /dev/null @@ -1,329 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - devLocalIndexerRef, - devLocalRetrieverRef, -} from '@genkit-ai/dev-local-vectorstore'; -import fileTypeChecker from 'file-type-checker'; -import fs from 'fs'; -import { Document, z } from 'genkit'; -import { chromaIndexerRef, chromaRetrieverRef } from 'genkitx-chromadb'; -import { pineconeIndexerRef, pineconeRetrieverRef } from 'genkitx-pinecone'; -import path from 'path'; - -import { ai } from './genkit.js'; -import { augmentedVideoPrompt } from './prompt.js'; - -export const localVideoRetriever = devLocalRetrieverRef('localMultiModalIndex'); -export const localVideoIndexer = devLocalIndexerRef('localMultiModalIndex'); - -// Before using this, set up a pinecone database with -// dimension: 1408 and metric: cosine. -// Also set the PINECONE_API_KEY environment variable with your key. -export const pineconeVideoRetriever = pineconeRetrieverRef({ - indexId: 'pinecone-multimodal-index', - displayName: 'Pinecone video retriever', -}); - -export const pineconeVideoIndexer = pineconeIndexerRef({ - indexId: 'pinecone-multimodal-index', - displayName: 'Pinecone video indexer', -}); - -export const chromaVideoRetriever = chromaRetrieverRef({ - collectionName: 'multimodal_collection', - displayName: 'Chroma Video retriever', -}); - -export const chromaVideoIndexer = chromaIndexerRef({ - collectionName: 'multimodal_collection', - displayName: 'Chroma video indexer', -}); - -// Define a local video indexer flow -export const localIndexVideo = ai.defineFlow( - { - name: 'localIndexVideo', - inputSchema: z - .string() - .describe('A Video URL') - .default('gs://cloud-samples-data/generative-ai/video/pixel8.mp4'), - }, - async (videoUrl: string) => { - const documents = await ai.run('extract-video', () => - extractVideo(videoUrl) - ); - - await ai.index({ - indexer: localVideoIndexer, - documents, - }); - } -); - -// Define a pinecone video indexer flow -export const pineconeIndexVideo = ai.defineFlow( - { - name: 'pineconeIndexVideo', - inputSchema: z - .string() - .describe('A Video URL') - .default('gs://cloud-samples-data/generative-ai/video/pixel8.mp4'), - }, - async (videoUrl: string) => { - const documents = await ai.run('extract-video', () => - extractVideo(videoUrl) - ); - - await ai.index({ - indexer: pineconeVideoIndexer, - documents, - }); - } -); - -// Define a chroma video indexer flow -export const chromaIndexVideo = ai.defineFlow( - { - name: 'chromaIndexVideo', - inputSchema: z - .string() - .describe('A Video URL') - .default('gs://cloud-samples-data/generative-ai/video/pixel8.mp4'), - }, - async (videoUrl: string) => { - const documents = await ai.run('extract-video', () => - extractVideo(videoUrl) - ); - - await ai.index({ - indexer: chromaVideoIndexer, - documents, - }); - } -); - -// Suffix based type -function getVideoType(url: string) { - const lastDotIndex = url.lastIndexOf('.'); - if (lastDotIndex === -1) { - throw new Error('Error: Unable to determine video mime type'); - } - const suffix = url.substring(lastDotIndex + 1); - return `video/${suffix}`; -} - -async function extractVideo(filePath: string): Promise { - const videoDocs: Document[] = []; - - if (filePath.startsWith('http')) { - throw new Error( - 'Vertex AI does not support http(s) video urls. Please use Google Cloud Storage (gs://) urls' - ); - } else if (filePath.startsWith('gs://')) { - // The default configuration is to look at the first 120 seconds of the - // video and produce embeddings in 16 second increments. - // This is not really necessary, since we are very close to the defaults - // (i.e. 15 v.s. 16 seconds) it is just here to show what it looks like. - // See also: - // https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings#video-modes - // for pricing differences for the different intervals. - const metadataFirst120Seconds = { - videoSegmentConfig: { - startOffsetSec: 0, - endOffsetSec: 120, - intervalSec: 15, - }, - }; - - // If your video is longer than 120 seconds, you can add additional video - // document requests with different start/stop values e.g. - // const metadataNext120Seconds = { - // "videoSegmentConfig": { - // "startOffsetSec": 120, - // "endOffsetSec": 240, - // "intervalSec": 15 - // } - // } - // and then: - // videoDocs.push(Document.fromMedia(filePath, getVideoType(filePath), metadataNext120Seconds)); - // - // sample ~4 minute video: gs://cloud-samples-data/generative-ai/video/google_sustainability.mp4 - - videoDocs.push( - Document.fromMedia( - filePath, - getVideoType(filePath), - metadataFirst120Seconds - ) - ); - - return videoDocs; - } - - // Note, this is valid, but it only works for very very tiny videos. - // Otherwise the API request message size is too big. - // The recommended way to handle video is using a 'gs://' URL - const file = path.resolve(filePath); - const dataBuffer = fs.readFileSync(file); - const detectedFileInfo = fileTypeChecker.detectFile(dataBuffer); - if ( - detectedFileInfo?.mimeType && - detectedFileInfo?.mimeType.startsWith('video/') - ) { - videoDocs.push( - Document.fromMedia( - dataBuffer.toString('base64'), - detectedFileInfo?.mimeType - ) - ); - } else { - throw new Error('Error: Unable to determine mime type of the file.'); - } - return videoDocs; -} - -// Define a video QA flow -export const localVideoQAFlow = ai.defineFlow( - { - name: 'localVideoQuestions', - inputSchema: z - .string() - .describe('A question about the video') - .default('describe the video'), - outputSchema: z.string(), - }, - async (query: string, { sendChunk }) => { - const docs = (await ai.retrieve({ - retriever: localVideoRetriever, - query, - options: { k: 1 }, // we are choosing a single segment of video for context - })) as Document[]; - - return augmentedVideoPrompt( - { - question: query, - media: docs - .filter( - (d) => d.media[0]?.url?.length && d.media[0]?.contentType?.length - ) - .map((d) => { - console.log( - `Retriever returned video: ${d.media[0].url} from ${d.metadata?.embedMetadata?.startOffsetSec}s to ${d.metadata?.embedMetadata?.endOffsetSec}s` - ); - return { - gcsUrl: d.media[0]?.url, - contentType: d.media[0]?.contentType || '', - startOffsetSec: d.metadata?.embedMetadata - ?.startOffsetSec as number, - endOffsetSec: d.metadata?.embedMetadata?.endOffsetSec as number, - }; - })[0], - }, - { - onChunk: (c) => sendChunk(c.text), - } - ).then((r) => r.text); - } -); - -// Define a video QA flow -export const pineconeVideoQAFlow = ai.defineFlow( - { - name: 'pineconeVideoQuestions', - inputSchema: z - .string() - .describe('A question about the video') - .default('describe the video'), - outputSchema: z.string(), - }, - async (query: string, { sendChunk }) => { - const docs = (await ai.retrieve({ - retriever: pineconeVideoRetriever, - query, - options: { k: 1 }, // we are choosing a single segment of video for context - })) as Document[]; - - return augmentedVideoPrompt( - { - question: query, - media: docs - .filter( - (d) => d.media[0]?.url?.length && d.media[0]?.contentType?.length - ) - .map((d) => { - console.log( - `Retriever returned video: ${d.media[0].url} from ${d.metadata?.embedMetadata?.startOffsetSec}s to ${d.metadata?.embedMetadata?.endOffsetSec}s` - ); - return { - gcsUrl: d.media[0]?.url, - contentType: d.media[0]?.contentType || '', - startOffsetSec: d.metadata?.embedMetadata - ?.startOffsetSec as number, - endOffsetSec: d.metadata?.embedMetadata?.endOffsetSec as number, - }; - })[0], - }, - { - onChunk: (c) => sendChunk(c.text), - } - ).then((r) => r.text); - } -); - -export const chromaVideoQAFlow = ai.defineFlow( - { - name: 'chromaVideoQuestions', - inputSchema: z - .string() - .describe('A question about the video') - .default('describe the video'), - outputSchema: z.string(), - }, - async (query: string, { sendChunk }) => { - const docs = (await ai.retrieve({ - retriever: chromaVideoRetriever, - query, - options: { k: 1 }, // we are choosing a single segment of video for context - })) as Document[]; - - return augmentedVideoPrompt( - { - question: query, - media: docs - .filter( - (d) => d.media[0]?.url?.length && d.media[0]?.contentType?.length - ) - .map((d) => { - console.log( - `Retriever returned video: ${d.media[0].url} from ${d.metadata?.embedMetadata?.startOffsetSec}s to ${d.metadata?.embedMetadata?.endOffsetSec}s` - ); - return { - gcsUrl: d.media[0]?.url, - contentType: d.media[0]?.contentType || '', - startOffsetSec: d.metadata?.embedMetadata - ?.startOffsetSec as number, - endOffsetSec: d.metadata?.embedMetadata?.endOffsetSec as number, - }; - })[0], - }, - { - onChunk: (c) => sendChunk(c.text), - } - ).then((r) => r.text); - } -); diff --git a/js/testapps/multimodal/tsconfig.json b/js/testapps/multimodal/tsconfig.json deleted file mode 100644 index b73ccd04df..0000000000 --- a/js/testapps/multimodal/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "noImplicitReturns": true, - "noUnusedLocals": false, - "outDir": "lib", - "sourceMap": true, - "strict": true, - "target": "es2017", - "skipLibCheck": true, - "esModuleInterop": true - }, - "compileOnSave": true, - "include": ["src"] -} diff --git a/js/testapps/next/package.json b/js/testapps/next/package.json index f977de3efb..feb637679d 100644 --- a/js/testapps/next/package.json +++ b/js/testapps/next/package.json @@ -16,7 +16,7 @@ "author": "", "license": "ISC", "dependencies": { - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "@genkit-ai/next": "workspace:*", "genkit": "workspace:*", "next": "^15.2.4", diff --git a/js/testapps/next/src/genkit/index.ts b/js/testapps/next/src/genkit/index.ts index 3ea39c5908..411b3877f6 100644 --- a/js/testapps/next/src/genkit/index.ts +++ b/js/testapps/next/src/genkit/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit'; import { disableOTelRootSpanDetection } from 'genkit/tracing'; @@ -22,5 +22,5 @@ disableOTelRootSpanDetection(); export const ai = genkit({ plugins: [googleAI()], - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), }); diff --git a/js/testapps/rag/package.json b/js/testapps/rag/package.json index 96e669569f..bad32d5ed4 100644 --- a/js/testapps/rag/package.json +++ b/js/testapps/rag/package.json @@ -19,7 +19,7 @@ "@genkit-ai/dev-local-vectorstore": "workspace:*", "@genkit-ai/evaluator": "workspace:*", "@genkit-ai/firebase": "workspace:*", - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "@genkit-ai/vertexai": "workspace:*", "@google-cloud/firestore": "^7.11.0", "firebase-admin": ">=12.2", diff --git a/js/testapps/rag/src/genkit.ts b/js/testapps/rag/src/genkit.ts index b5c8dbf37c..12fd13a5bb 100644 --- a/js/testapps/rag/src/genkit.ts +++ b/js/testapps/rag/src/genkit.ts @@ -16,8 +16,7 @@ import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; import { GenkitMetric, genkitEval } from '@genkit-ai/evaluator'; -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; -import { textEmbedding004, vertexAI } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { claude3Sonnet, llama31, @@ -41,10 +40,7 @@ async function getCloudRunAuthClient(aud: string) { export const ai = genkit({ plugins: [ - googleAI({ apiVersion: ['v1'] }), - vertexAI({ - location: 'us-central1', - }), + googleAI(), vertexAIModelGarden({ location: 'us-central1', models: [claude3Sonnet, llama31], @@ -52,17 +48,17 @@ export const ai = genkit({ pinecone([ { indexId: 'cat-facts', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), }, { indexId: 'pdf-chat', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), }, ]), chroma([ { collectionName: 'dogfacts_collection', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), createCollectionIfMissing: true, clientParams: async () => { // Replace this with your Cloud Run Instance URL @@ -83,15 +79,15 @@ export const ai = genkit({ devLocalVectorstore([ { indexName: 'dog-facts', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), }, { indexName: 'pdfQA', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), }, ]), genkitEval({ - judge: gemini15Flash, + judge: googleAI.model('gemini-2.5-flash'), judgeConfig: { safetySettings: [ { @@ -115,5 +111,5 @@ export const ai = genkit({ metrics: [GenkitMetric.FAITHFULNESS, GenkitMetric.MALICIOUSNESS], }), ], - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), }); diff --git a/js/testapps/rag/src/pdf-rag-firebase.ts b/js/testapps/rag/src/pdf-rag-firebase.ts index 36eab41bd9..9a769f9f89 100644 --- a/js/testapps/rag/src/pdf-rag-firebase.ts +++ b/js/testapps/rag/src/pdf-rag-firebase.ts @@ -15,8 +15,7 @@ */ import { defineFirestoreRetriever } from '@genkit-ai/firebase'; -import { gemini15Flash } from '@genkit-ai/googleai'; -import { textEmbedding004 } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { FieldValue } from '@google-cloud/firestore'; import { initializeApp } from 'firebase-admin/app'; import { getFirestore } from 'firebase-admin/firestore'; @@ -63,7 +62,7 @@ export const pdfChatRetrieverFirebase = defineFirestoreRetriever(ai, { collection: 'pdf-qa', contentField: 'facts', vectorField: 'embedding', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), //distanceMeasure: 'COSINE', // optional //distanceResultField: 'vector_distance', // optional //distanceThreshold: 0.8, // optional @@ -125,7 +124,7 @@ export const pdfQAFirebase = ai.defineFlow( context: docs.map((d) => d.text).join('\n\n'), }); const llmResponse = await ai.generate({ - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), prompt: augmentedPrompt, }); @@ -161,7 +160,7 @@ const indexConfig = { collection: 'pdf-qa', contentField: 'facts', vectorField: 'embedding', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), }; const chunkingConfig = { diff --git a/js/testapps/rag/src/pdf-rag.ts b/js/testapps/rag/src/pdf-rag.ts index 63a9fcf0fc..8f26df6430 100644 --- a/js/testapps/rag/src/pdf-rag.ts +++ b/js/testapps/rag/src/pdf-rag.ts @@ -18,7 +18,7 @@ import { devLocalIndexerRef, devLocalRetrieverRef, } from '@genkit-ai/dev-local-vectorstore'; -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import fs from 'fs'; import { Document, z } from 'genkit'; import { chunk } from 'llm-chunk'; @@ -117,7 +117,7 @@ export const synthesizeQuestions = ai.defineFlow( const questions: string[] = []; for (let i = 0; i < chunks.length; i++) { const qResponse = await ai.generate({ - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), prompt: { text: `Generate one question about the text below: ${chunks[i]}`, }, diff --git a/js/testapps/rag/src/prompt.ts b/js/testapps/rag/src/prompt.ts index f939929371..c548548390 100644 --- a/js/testapps/rag/src/prompt.ts +++ b/js/testapps/rag/src/prompt.ts @@ -14,14 +14,14 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { ai } from './genkit.js'; // Define a prompt that includes the retrieved context documents export const augmentedPrompt = ai.definePrompt({ - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), name: 'augmentedPrompt', input: { schema: z.object({ diff --git a/js/testapps/tools-config-test1/genkit-tools.conf.js b/js/testapps/tools-config-test1/genkit-tools.conf.js deleted file mode 100644 index 55664a3cba..0000000000 --- a/js/testapps/tools-config-test1/genkit-tools.conf.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// TODO(sam-gc): Update this once we have actual libraries/plugins... - -module.exports = { - builder: { - cmd: "echo 'Custom message....' && npm run build", - }, - cliPlugins: [ - { - name: 'My tool', - keyword: 'tool-test', - actions: [ - { - name: 'hello', - action: 'hello', - helpText: 'help me', - hook: () => console.log('Tool test!'), - }, - ], - }, - ], - evaluators: [ - { - actionRef: '/flow/myFlow', - extractors: { - output: { inputOf: 'my-step-name' }, - context: (t) => 'Hello', - }, - }, - ], -}; diff --git a/js/testapps/tools-config-test1/package.json b/js/testapps/tools-config-test1/package.json deleted file mode 100644 index 14af8392cd..0000000000 --- a/js/testapps/tools-config-test1/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "tools-config-test1", - "version": "1.0.0", - "description": "", - "scripts": { - "build": "echo 'noop'" - }, - "keywords": [], - "author": "", - "license": "ISC", - "devDependencies": { - "typescript": "^5.3.3" - } -} diff --git a/samples/js-character-generator/index.ts b/samples/js-character-generator/index.ts index 8eedc35cd5..08113e35eb 100644 --- a/samples/js-character-generator/index.ts +++ b/samples/js-character-generator/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash, googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit, z } from 'genkit'; const ai = genkit({ @@ -23,7 +23,7 @@ const ai = genkit({ const prompt = ai.definePrompt({ name: 'Character Prompt', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: z.object({ inspiration: z.string(), diff --git a/samples/js-character-generator/package-lock.json b/samples/js-character-generator/package-lock.json index d27f3444dc..1c0dacf72c 100644 --- a/samples/js-character-generator/package-lock.json +++ b/samples/js-character-generator/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "license": "ISC", "dependencies": { - "@genkit-ai/googleai": "^1.0.4", + "@genkit-ai/google-genai": "^1.0.4", "genkit": "^1.0.4" }, "devDependencies": { @@ -34,7 +34,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.1.90" } @@ -43,7 +43,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, + "devOptional": true, "dependencies": { "colorspace": "1.1.x", "enabled": "2.0.x", @@ -434,58 +434,406 @@ "node": ">=18" } }, + "node_modules/@fastify/busboy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", + "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/@firebase/app-types": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", + "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", + "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz", + "integrity": "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz", + "integrity": "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/database": "1.1.0", + "@firebase/database-types": "1.0.16", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz", + "integrity": "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@firebase/app-types": "0.9.3", + "@firebase/util": "1.13.0" + } + }, + "node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@genkit-ai/ai": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.0.4.tgz", - "integrity": "sha512-omByB//cj5476YU+wdoVuhNI0En85kITjSxVwqVBz94hcP5hYhQfcfhNlN6BzhgNJER7XACyYKWehmw4KwxoLQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.22.0.tgz", + "integrity": "sha512-TDKO+zWyM5YI8zE4a0IlqlpgHuLB4B4islzgWDvzdQlbjtyJp0ayODAMFhS2ruQ6+a/UdXDySRrOX/RcqF4yjA==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/core": "1.0.4", + "@genkit-ai/core": "1.22.0", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.11.19", "colorette": "^2.0.20", - "dotprompt": "^1.0.0", + "dotprompt": "^1.1.1", "json5": "^2.2.3", "node-fetch": "^3.3.2", "partial-json": "^0.1.7", + "uri-templates": "^0.2.0", "uuid": "^10.0.0" } }, "node_modules/@genkit-ai/core": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.0.4.tgz", - "integrity": "sha512-O4ASgeXLkjc8qyhgUhY9TV//V0W6tvhv7YV0LEdeQ6Vum7CvdBNB1w8moUQADeyMPE00VuqURcGKpejVshY3OQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.22.0.tgz", + "integrity": "sha512-etVlpwJkPoy91xR6H5+S/AWZPJMeovb7N35+B90md1+6xWcodQF7WZ3chKcH31Xamlz+jTIvd3riiZGY9RFumg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.25.0", - "@opentelemetry/core": "^1.25.0", - "@opentelemetry/sdk-metrics": "^1.25.0", + "@opentelemetry/context-async-hooks": "~1.25.0", + "@opentelemetry/core": "~1.25.0", + "@opentelemetry/exporter-jaeger": "^1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", "@opentelemetry/sdk-node": "^0.52.0", - "@opentelemetry/sdk-trace-base": "^1.25.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", "@types/json-schema": "^7.0.15", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "async-mutex": "^0.5.0", "body-parser": "^1.20.3", "cors": "^2.8.5", - "dotprompt": "^1.0.0", + "dotprompt": "^1.1.1", "express": "^4.21.0", "get-port": "^5.1.0", "json-schema": "^0.4.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.22.4" + }, + "optionalDependencies": { + "@genkit-ai/firebase": "^1.16.1" } }, - "node_modules/@genkit-ai/googleai": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/googleai/-/googleai-1.0.4.tgz", - "integrity": "sha512-sTMj5lO5t9lBV0l0bC/3Ijr02XhRY1ztttOgJFJHMtlWw+ML9gdrphPMLcY1VdAVKAaxX+MeHND5tj4oWvp6xQ==", + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@genkit-ai/firebase": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/firebase/-/firebase-1.22.0.tgz", + "integrity": "sha512-iTOVma8be8cOFzO9yaNuzBIICgFAP+N1cuB5T8K5LE5ahsSIG7sZWUE5FwMKtEDFk9D343kgLuvW9nxLkV7IzA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@genkit-ai/google-cloud": "^1.22.0" + }, + "peerDependencies": { + "@google-cloud/firestore": "^7.11.0", + "firebase": ">=11.5.0", + "firebase-admin": ">=12.2", + "genkit": "^1.22.0" + }, + "peerDependenciesMeta": { + "firebase": { + "optional": true + } + } + }, + "node_modules/@genkit-ai/google-cloud": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.22.0.tgz", + "integrity": "sha512-PVt7oLu3VARQ4u/R4VvG/q2lsEdTke9jxQI8sg1jxHoKV03fNUwKAyNd59ZT4igrQIUCqdJD4tH3Kzh4yd4QTw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@google/generative-ai": "^0.21.0", + "@google-cloud/logging-winston": "^6.0.0", + "@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.19.0", + "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.4.1", + "@google-cloud/opentelemetry-resource-util": "^2.4.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.49.1", + "@opentelemetry/core": "~1.25.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resources": "~1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", + "@opentelemetry/sdk-node": "^0.52.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", "google-auth-library": "^9.6.3", - "node-fetch": "^3.3.2" + "node-fetch": "^3.3.2", + "winston": "^3.12.0" }, "peerDependencies": { - "genkit": "^1.0.4" + "genkit": "^1.22.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@genkit-ai/google-genai": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-genai/-/google-genai-1.22.0.tgz", + "integrity": "sha512-Bdzjy15zWBt5GGRmzjSh2jp73fyFt3X0la9jvECmxzn1zjVl68/OU3WJAoAD+z3N4F258NmXzsMh6t5QA9INFQ==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.2" + }, + "peerDependencies": { + "genkit": "^1.22.0" } }, "node_modules/@genkit-ai/telemetry-server": { @@ -554,11 +902,32 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/@google-cloud/common": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz", + "integrity": "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "arrify": "^2.0.1", + "duplexify": "^4.1.1", + "extend": "^3.0.2", + "google-auth-library": "^9.0.0", + "html-entities": "^2.5.2", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@google-cloud/firestore": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.0.tgz", "integrity": "sha512-88uZ+jLsp1aVMj7gh3EKYH1aulTAMFAp8sH/v5a9w8q8iqSG27RiWLoxSAFr/XocZ9hGiWH1kEnBw+zl3xAgNA==", - "dev": true, + "devOptional": true, "dependencies": { "@opentelemetry/api": "^1.3.0", "fast-deep-equal": "^3.1.1", @@ -570,24 +939,251 @@ "node": ">=14.0.0" } }, - "node_modules/@google/generative-ai": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.21.0.tgz", - "integrity": "sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg==", + "node_modules/@google-cloud/logging": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.1.tgz", + "integrity": "sha512-2h9HBJG3OAsvzXmb81qXmaTPfXYU7KJTQUxunoOKFGnY293YQ/eCkW1Y5mHLocwpEqeqQYT/Qvl6Tk+Q7PfStw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/common": "^5.0.0", + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "4.0.0", + "@opentelemetry/api": "^1.7.0", + "arrify": "^2.0.1", + "dot-prop": "^6.0.0", + "eventid": "^2.0.0", + "extend": "^3.0.2", + "gcp-metadata": "^6.0.0", + "google-auth-library": "^9.0.0", + "google-gax": "^4.0.3", + "on-finished": "^2.3.0", + "pumpify": "^2.0.1", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, "engines": { - "node": ">=18.0.0" + "node": ">=14.0.0" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.12.6", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.6.tgz", - "integrity": "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==", + "node_modules/@google-cloud/logging-winston": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-6.0.1.tgz", + "integrity": "sha512-tgA/qe/aGZITMrJ/5Tuykv234pLb/Qo6iDZ8SDkjbsiIy69mLQmbphrUd/IqnE17BSDfrwDUckvWdghiy8b+Qg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@grpc/proto-loader": "^0.7.13", - "@js-sdsl/ordered-map": "^4.4.2" + "@google-cloud/logging": "^11.0.0", + "google-auth-library": "^9.0.0", + "lodash.mapvalues": "^4.6.0", + "winston-transport": "^4.3.0" }, "engines": { - "node": ">=12.10.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "winston": ">=3.2.1" + } + }, + "node_modules/@google-cloud/logging/node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@google-cloud/logging/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-monitoring-exporter/-/opentelemetry-cloud-monitoring-exporter-0.19.0.tgz", + "integrity": "sha512-5SOPXwC6RET4ZvXxw5D97dp8fWpqWEunHrzrUUGXhG4UAeedQe1KvYV8CK+fnaAbN2l2ha6QDYspT6z40TVY0g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.3.0", + "@google-cloud/precise-date": "^4.0.0", + "google-auth-library": "^9.0.0", + "googleapis": "^137.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-metrics": "^1.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-trace-exporter": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-trace-exporter/-/opentelemetry-cloud-trace-exporter-2.4.1.tgz", + "integrity": "sha512-Dq2IyAyA9PCjbjLOn86i2byjkYPC59b5ic8k/L4q5bBWH0Jro8lzMs8C0G5pJfqh2druj8HF+oAIAlSdWQ+Z9Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.4.0", + "@grpc/grpc-js": "^1.1.8", + "@grpc/proto-loader": "^0.7.0", + "google-auth-library": "^9.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-trace-base": "^1.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-resource-util": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-resource-util/-/opentelemetry-resource-util-2.4.0.tgz", + "integrity": "sha512-/7ujlMoKtDtrbQlJihCjQnm31n2s2RTlvJqcSbt2jV3OkCzPAdo3u31Q13HNugqtIRUSk7bUoLx6AzhURkhW4w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.22.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/resources": "^1.0.0" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", + "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/precise-date": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-4.0.0.tgz", + "integrity": "sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", + "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.17.3.tgz", + "integrity": "sha512-gOnCAbFgAYKRozywLsxagdevTF7Gm+2Ncz5u5CQAuOv/2VCa0rdGJWvJFDOftPx1tc+q8TXiC2pEJfFKu+yeMQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "<4.1.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "duplexify": "^4.1.3", + "fast-xml-parser": "^4.4.1", + "gaxios": "^6.0.2", + "google-auth-library": "^9.6.3", + "html-entities": "^2.5.2", + "mime": "^3.0.0", + "p-limit": "^3.0.1", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@google-cloud/storage/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.12.6", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.6.tgz", + "integrity": "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" } }, "node_modules/@grpc/proto-loader": { @@ -731,10 +1327,73 @@ "node": ">=14" } }, + "node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.49.2.tgz", + "integrity": "sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-amqplib": "^0.41.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.43.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.43.1", + "@opentelemetry/instrumentation-bunyan": "^0.40.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.40.0", + "@opentelemetry/instrumentation-connect": "^0.38.0", + "@opentelemetry/instrumentation-cucumber": "^0.8.0", + "@opentelemetry/instrumentation-dataloader": "^0.11.0", + "@opentelemetry/instrumentation-dns": "^0.38.0", + "@opentelemetry/instrumentation-express": "^0.41.1", + "@opentelemetry/instrumentation-fastify": "^0.38.0", + "@opentelemetry/instrumentation-fs": "^0.14.0", + "@opentelemetry/instrumentation-generic-pool": "^0.38.1", + "@opentelemetry/instrumentation-graphql": "^0.42.0", + "@opentelemetry/instrumentation-grpc": "^0.52.0", + "@opentelemetry/instrumentation-hapi": "^0.40.0", + "@opentelemetry/instrumentation-http": "^0.52.0", + "@opentelemetry/instrumentation-ioredis": "^0.42.0", + "@opentelemetry/instrumentation-kafkajs": "^0.2.0", + "@opentelemetry/instrumentation-knex": "^0.39.0", + "@opentelemetry/instrumentation-koa": "^0.42.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.39.0", + "@opentelemetry/instrumentation-memcached": "^0.38.0", + "@opentelemetry/instrumentation-mongodb": "^0.46.0", + "@opentelemetry/instrumentation-mongoose": "^0.41.0", + "@opentelemetry/instrumentation-mysql": "^0.40.0", + "@opentelemetry/instrumentation-mysql2": "^0.40.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.39.0", + "@opentelemetry/instrumentation-net": "^0.38.0", + "@opentelemetry/instrumentation-pg": "^0.43.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-redis": "^0.41.0", + "@opentelemetry/instrumentation-redis-4": "^0.41.1", + "@opentelemetry/instrumentation-restify": "^0.40.0", + "@opentelemetry/instrumentation-router": "^0.39.0", + "@opentelemetry/instrumentation-socket.io": "^0.41.0", + "@opentelemetry/instrumentation-tedious": "^0.13.0", + "@opentelemetry/instrumentation-undici": "^0.5.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.0", + "@opentelemetry/resource-detector-aws": "^1.6.0", + "@opentelemetry/resource-detector-azure": "^0.2.10", + "@opentelemetry/resource-detector-container": "^0.4.0", + "@opentelemetry/resource-detector-gcp": "^0.29.10", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.4.1" + } + }, "node_modules/@opentelemetry/context-async-hooks": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", + "dev": true, "engines": { "node": ">=14" }, @@ -756,6 +1415,25 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@opentelemetry/exporter-jaeger": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-jaeger/-/exporter-jaeger-1.30.1.tgz", + "integrity": "sha512-7Ki+x7cZ/PEQxp3UyB+CWkWBqLk22yRGQ4AWIGwZlEs6rpCOdWwIFOyQDO9DdeyWtTPTvO3An/7chPZcRHOgzQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0", + "jaeger-client": "^3.15.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", @@ -833,224 +1511,948 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1" + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.41.0.tgz", + "integrity": "sha512-00Oi6N20BxJVcqETjgNzCmVKN+I5bJH/61IlHiIWd00snj1FdgiIKlpE4hYVacTB2sjIBB3nTbHskttdZEE2eg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.43.0.tgz", + "integrity": "sha512-pSxcWlsE/pCWQRIw92sV2C+LmKXelYkjkA7C5s39iPUi4pZ2lA1nIiw+1R/y2pDEhUHcaKkNyljQr3cx9ZpVlQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagator-aws-xray": "^1.3.1", + "@opentelemetry/resources": "^1.8.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/aws-lambda": "8.10.122" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.43.1.tgz", + "integrity": "sha512-qLT2cCniJ5W+6PFzKbksnoIQuq9pS83nmgaExfUwXVvlwi0ILc50dea0tWBHZMkdIDa/zZdcuFrJ7+fUcSnRow==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagation-utils": "^0.30.10", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.40.0.tgz", + "integrity": "sha512-aZ4cXaGWwj79ZXSYrgFVsrDlE4mmf2wfvP9bViwRc0j75A6eN6GaHYHqufFGMTCqASQn5pIjjP+Bx+PWTGiofw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@types/bunyan": "1.8.9" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.40.0.tgz", + "integrity": "sha512-JxbM39JU7HxE9MTKKwi6y5Z3mokjZB2BjwfqYi4B3Y29YO3I42Z7eopG6qq06yWZc+nQli386UDQe0d9xKmw0A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz", + "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/connect": "3.4.36" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.8.0.tgz", + "integrity": "sha512-ieTm4RBIlZt2brPwtX5aEZYtYnkyqhAVXJI9RIohiBVMe5DxiwCwt+2Exep/nDVqGPX8zRBZUl4AEw423OxJig==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.11.0.tgz", + "integrity": "sha512-27urJmwkH4KDaMJtEv1uy2S7Apk4XbN4AgWMdfMJbi7DnOduJmeuA+DpJCwXB72tEWXo89z5T3hUVJIDiSNmNw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.38.0.tgz", + "integrity": "sha512-Um07I0TQXDWa+ZbEAKDFUxFH40dLtejtExDOMLNJ1CL8VmOmA71qx93Qi/QG4tGkiI1XWqr7gF/oiMCJ4m8buQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz", + "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz", + "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz", + "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.38.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.38.1.tgz", + "integrity": "sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz", + "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", + "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz", + "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", + "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz", + "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.2.0.tgz", + "integrity": "sha512-uKKmhEFd0zR280tJovuiBG7cfnNZT4kvVTvqtHPxQP7nOmRbJstCYHFH13YzjVcKjkmoArmxiSulmZmF7SLIlg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.24.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.39.0.tgz", + "integrity": "sha512-lRwTqIKQecPWDkH1KEcAUcFhCaNssbKSpxf4sxRTAROCwrCEnYkjOuqJHV+q1/CApjMTaKu0Er4LBv/6bDpoxA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz", + "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.39.0.tgz", + "integrity": "sha512-eU1Wx1RRTR/2wYXFzH9gcpB8EPmhYlNDIUHzUXjyUE0CAXEJhBLkYNlzdaVCoQDw2neDqS+Woshiia6+emWK9A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.38.0.tgz", + "integrity": "sha512-tPmyqQEZNyrvg6G+iItdlguQEcGzfE+bJkpQifmBXmWBnoS5oU3UxqtyYuXGL2zI9qQM5yMBHH4nRXWALzy7WA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@types/memcached": "^2.2.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz", + "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.41.0.tgz", + "integrity": "sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz", + "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/mysql": "2.15.22" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz", + "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz", + "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", - "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.38.0.tgz", + "integrity": "sha512-stjow1PijcmUquSmRD/fSihm/H61DbjPlJuJhWUe7P22LFPjFhsrSeiB5vGj3vn+QGceNAs+kioUTzMGPbNxtg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz", + "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.4" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.41.0.tgz", + "integrity": "sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.41.0.tgz", + "integrity": "sha512-RJ1pwI3btykp67ts+5qZbaFSAAzacucwBet5/5EsKYtWBpHbWwV/qbGN/kIBzXg5WEZBhXLrR/RUq0EpEUpL3A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.1.tgz", + "integrity": "sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", - "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.40.0.tgz", + "integrity": "sha512-sm/rH/GysY/KOEvZqYBZSLYFeXlBkHCgqPDgWc07tz+bHCN6mPs9P3otGOSTe7o3KAIM8Nc6ncCO59vL+jb2cA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.39.0.tgz", + "integrity": "sha512-LaXnVmD69WPC4hNeLzKexCCS19hRLrUw3xicneAMkzJSzNJvPyk7G6I7lz7VjQh1cooObPBt9gNyd3hhTCUrag==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.41.0.tgz", + "integrity": "sha512-7fzDe9/FpO6NFizC/wnzXXX7bF9oRchsD//wFqy5g5hVEgXZCQ70IhxjrKdBvgjyIejR9T9zTvfQ6PfVKfkCAw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.13.0.tgz", + "integrity": "sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/tedious": "^4.0.14" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.5.0.tgz", + "integrity": "sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" } }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", - "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.39.0.tgz", + "integrity": "sha512-v/1xziLJ9CyB3YDjBSBzbB70Qd0JwWTo36EqWK5m3AR0CzsyMQQmf3ZIZM6sgx7hXMcRQ0pnEYhg6nhrUQPm9A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@types/shimmer": "^1.0.2", - "import-in-the-middle": "^1.8.1", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.2", - "shimmer": "^1.2.1" + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" @@ -1224,6 +2626,32 @@ "node": ">=14" } }, + "node_modules/@opentelemetry/propagation-utils": { + "version": "0.30.16", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.16.tgz", + "integrity": "sha512-ZVQ3Z/PQ+2GQlrBfbMMMT0U7MzvYZLCPP800+ooyaBqm4hMvuQHfP028gB9/db0mwkmyEAMad9houukUVxhwcw==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/propagator-aws-xray": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.26.2.tgz", + "integrity": "sha512-k43wxTjKYvwfce9L4eT8fFYy/ATmCfPHZPZsyT/6ABimf2KE1HafoOsIcxLOtmNSZt6dCvBIYCrXaOWta20xJg==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, "node_modules/@opentelemetry/propagator-b3": { "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", @@ -1296,6 +2724,107 @@ "node": ">=14" } }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.29.7", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.29.7.tgz", + "integrity": "sha512-PExUl/R+reSQI6Y/eNtgAsk6RHk1ElYSzOa8/FHfdc/nLmx9sqMasBEpLMkETkzDP7t27ORuXe4F9vwkV2uwwg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-aws": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.12.0.tgz", + "integrity": "sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-azure": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.12.tgz", + "integrity": "sha512-iIarQu6MiCjEEp8dOzmBvCSlRITPFTinFB2oNKAjU6xhx8d7eUcjNOKhBGQTvuCriZrxrEvDaEEY9NfrPQ6uYQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.25.1", + "@opentelemetry/resources": "^1.10.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.4.4.tgz", + "integrity": "sha512-ZEN2mq7lIjQWJ8NTt1umtr6oT/Kb89856BOmESLSvgSHbIwOFYs7cSfSRH5bfiVw6dXTQAVbZA/wLgCHKrebJA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp": { + "version": "0.29.13", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.13.tgz", + "integrity": "sha512-vdotx+l3Q+89PeyXMgKEGnZ/CwzwMtuMi/ddgD9/5tKZ08DfDGB2Npz9m2oXPHRCjc4Ro6ifMqFlRyzIvgOjhg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, "node_modules/@opentelemetry/resources": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", @@ -1368,6 +2897,7 @@ "version": "1.30.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", + "devOptional": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1" @@ -1581,6 +3111,22 @@ "node": ">=14" } }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1649,7 +3195,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 10" } @@ -1663,31 +3209,146 @@ "https://trpc.io/sponsor" ] }, - "node_modules/@types/caseless": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", - "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", - "dev": true + "node_modules/@types/aws-lambda": { + "version": "8.10.122", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.122.tgz", + "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bunyan": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", + "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", + "devOptional": true + }, + "node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } }, - "node_modules/@types/handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==", - "deprecated": "This is a stub types definition. handlebars provides its own type definitions, so you do not need this installed.", + "node_modules/@types/express-serve-static-core": { + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "handlebars": "*" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } }, "node_modules/@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "dev": true + "devOptional": true + }, + "node_modules/@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@types/mysql": { + "version": "2.15.22", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", + "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/node": { "version": "20.17.17", @@ -1697,11 +3358,49 @@ "undici-types": "~6.19.2" } }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz", + "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/request": { "version": "2.48.12", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", - "dev": true, + "devOptional": true, "dependencies": { "@types/caseless": "*", "@types/node": "*", @@ -1713,7 +3412,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", - "dev": true, + "devOptional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -1724,22 +3423,68 @@ "node": ">= 0.12" } }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/shimmer": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true + "devOptional": true }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "dev": true + "devOptional": true }, "node_modules/@types/yauzl": { "version": "2.10.3", @@ -1755,7 +3500,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, + "devOptional": true, "dependencies": { "event-target-shim": "^5.0.0" }, @@ -1842,6 +3587,14 @@ } } }, + "node_modules/ansi-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.1.tgz", + "integrity": "sha512-bF6xLaZBLpOQzgYUtYEhJx090nPSZk1BQ/q2oyBK9aMMcJHzx9uXGCjI2Y+LebsN4Jwoykr0V9whbPiogdyHoQ==", + "engines": { + "node": "*" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1903,11 +3656,21 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "devOptional": true }, "node_modules/async-mutex": { "version": "0.5.0", @@ -1917,11 +3680,22 @@ "tslib": "^2.4.0" } }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "retry": "0.13.1" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "devOptional": true }, "node_modules/axios": { "version": "1.7.9", @@ -2072,6 +3846,20 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, + "node_modules/bufrw": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/bufrw/-/bufrw-1.4.0.tgz", + "integrity": "sha512-sWm8iPbqvL9+5SiYxXH73UOkyEbGQg7kyHQmReF89WJHQJw2eV4P/yZ0E+b71cczJ4pPobVhXxgQcmfSTgGHxQ==", + "dependencies": { + "ansi-color": "^0.2.1", + "error": "^7.0.0", + "hexer": "^1.5.0", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.x" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2233,7 +4021,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -2259,7 +4047,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, + "devOptional": true, "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -2269,7 +4057,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "devOptional": true, "dependencies": { "color-name": "1.1.3" } @@ -2278,7 +4066,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "devOptional": true }, "node_modules/colorette": { "version": "2.0.20", @@ -2289,7 +4077,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, + "devOptional": true, "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" @@ -2299,7 +4087,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, + "devOptional": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2369,6 +4157,7 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -2441,7 +4230,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -2485,13 +4274,13 @@ } }, "node_modules/dotprompt": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dotprompt/-/dotprompt-1.0.1.tgz", - "integrity": "sha512-mruM6m+pWe4t41InRDRchNLSl3x+q7iIBukVuUfb7vvN7aEOwP+BuONACAdaEeAqlMDtWHcTsuqqBdAAjGwamg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dotprompt/-/dotprompt-1.1.2.tgz", + "integrity": "sha512-24EU+eORQbPywBicIP44BiqykzEXFwZq1ZQKO5TEr9KrrENyDA7I1NzqhtmmEdQVfAXka0DEbSLPN5nerCqJ8A==", + "license": "ISC", "dependencies": { - "@types/handlebars": "^4.1.0", "handlebars": "^4.7.8", - "yaml": "^2.5.0" + "yaml": "^2.8.0" } }, "node_modules/dunder-proto": { @@ -2517,7 +4306,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", - "dev": true, + "devOptional": true, "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", @@ -2553,7 +4342,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true + "devOptional": true }, "node_modules/encodeurl": { "version": "2.0.0", @@ -2567,11 +4356,20 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "devOptional": true, "dependencies": { "once": "^1.4.0" } }, + "node_modules/error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw==", + "dependencies": { + "string-template": "~0.2.1", + "xtend": "~4.0.0" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -2687,11 +4485,34 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } }, + "node_modules/eventid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", + "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eventid/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -2799,6 +4620,17 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/farmhash-modern": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/farmhash-modern/-/farmhash-modern-1.1.0.tgz", + "integrity": "sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2819,6 +4651,40 @@ } ] }, + "node_modules/fast-xml-parser": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "strnum": "^1.1.1" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -2832,7 +4698,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true + "devOptional": true }, "node_modules/fetch-blob": { "version": "3.2.0", @@ -2900,11 +4766,73 @@ "node": ">= 0.8" } }, + "node_modules/firebase-admin": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.5.0.tgz", + "integrity": "sha512-QZOpv1DJRJpH8NcWiL1xXE10tw3L/bdPFlgjcWrqU3ufyOJDYfxB1MMtxiVTwxK16NlybQbEM6ciSich2uWEIQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@fastify/busboy": "^3.0.0", + "@firebase/database-compat": "^2.0.0", + "@firebase/database-types": "^1.0.6", + "@types/node": "^22.8.7", + "farmhash-modern": "^1.1.0", + "fast-deep-equal": "^3.1.1", + "google-auth-library": "^9.14.2", + "jsonwebtoken": "^9.0.0", + "jwks-rsa": "^3.1.0", + "node-forge": "^1.3.1", + "uuid": "^11.0.2" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@google-cloud/firestore": "^7.11.0", + "@google-cloud/storage": "^7.14.0" + } + }, + "node_modules/firebase-admin/node_modules/@types/node": { + "version": "22.19.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.0.tgz", + "integrity": "sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/firebase-admin/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/firebase-admin/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true + "devOptional": true }, "node_modules/follow-redirects": { "version": "1.15.9", @@ -3015,7 +4943,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "devOptional": true }, "node_modules/gaxios": { "version": "6.7.1", @@ -3077,12 +5005,13 @@ } }, "node_modules/genkit": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.0.4.tgz", - "integrity": "sha512-QJBvz8tJBQaqaHwBge3Hf4xoDNWJ8VVyDtKJsbCGEMwKnZa+g9Qh3LyBPx14RpPpJizZrr2j8Rvv0IocMEaj6Q==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.22.0.tgz", + "integrity": "sha512-GoVVO3EnNHrjkMkUPRvgx1MjBHKvOlZAu/ffMIJgLFxrH7rrUbvfHXE6Nk7uh5BNvET7+DApyhbhqz9G8sy+mQ==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/ai": "1.0.4", - "@genkit-ai/core": "1.0.4", + "@genkit-ai/ai": "1.22.0", + "@genkit-ai/core": "1.22.0", "uuid": "^10.0.0" } }, @@ -3240,7 +5169,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.4.1.tgz", "integrity": "sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==", - "dev": true, + "devOptional": true, "dependencies": { "@grpc/grpc-js": "^1.10.9", "@grpc/proto-loader": "^0.7.13", @@ -3263,7 +5192,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, + "devOptional": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3283,7 +5212,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, + "devOptional": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -3300,6 +5229,52 @@ "node": ">=14" } }, + "node_modules/googleapis": { + "version": "137.1.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-137.1.0.tgz", + "integrity": "sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "google-auth-library": "^9.0.0", + "googleapis-common": "^7.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/googleapis-common": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz", + "integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^6.0.3", + "google-auth-library": "^9.7.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/googleapis-common/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -3333,6 +5308,7 @@ "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -3380,6 +5356,40 @@ "node": ">= 0.4" } }, + "node_modules/hexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/hexer/-/hexer-1.5.0.tgz", + "integrity": "sha512-dyrPC8KzBzUJ19QTIo1gXNqIISRXQ0NwteW6OeQHRN4ZuZeHkdODfj0zHBdOlHbRY8GqbqK57C9oWSvQZizFsg==", + "dependencies": { + "ansi-color": "^0.2.1", + "minimist": "^1.1.0", + "process": "^0.10.0", + "xtend": "^4.0.0" + }, + "bin": { + "hexer": "cli.js" + }, + "engines": { + "node": ">= 0.10.x" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT", + "optional": true + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -3395,11 +5405,19 @@ "node": ">= 0.8" } }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, + "devOptional": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -3413,7 +5431,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "4" }, @@ -3425,7 +5443,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, + "devOptional": true, "dependencies": { "ms": "^2.1.3" }, @@ -3442,7 +5460,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "devOptional": true }, "node_modules/https-proxy-agent": { "version": "7.0.6", @@ -3571,7 +5589,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "devOptional": true }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -3650,7 +5668,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -3708,10 +5726,46 @@ "@isaacs/cliui": "^8.0.2" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jaeger-client": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/jaeger-client/-/jaeger-client-3.19.0.tgz", + "integrity": "sha512-M0c7cKHmdyEUtjemnJyx/y9uX16XHocL46yQvyqDlPdvAcwPDbHrIbKjQdBqtiE4apQ/9dmr+ZLJYYPGnurgpw==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0", + "opentracing": "^0.14.4", + "thriftrw": "^3.5.0", + "uuid": "^8.3.2", + "xorshift": "^1.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jaeger-client/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/panva" } }, "node_modules/js-yaml": { @@ -3761,6 +5815,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3768,6 +5823,63 @@ "node": ">=6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -3778,6 +5890,52 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/jwks-rsa": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.2.0.tgz", + "integrity": "sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/express": "^4.17.20", + "@types/jsonwebtoken": "^9.0.4", + "debug": "^4.3.4", + "jose": "^4.15.4", + "limiter": "^1.1.5", + "lru-memoizer": "^2.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jwks-rsa/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/jwks-rsa/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/jws": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", @@ -3791,7 +5949,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true + "devOptional": true + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "optional": true, + "peer": true }, "node_modules/lodash": { "version": "4.17.21", @@ -3804,11 +5969,82 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "license": "MIT", + "optional": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3829,7 +6065,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "dev": true, + "devOptional": true, "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -3846,7 +6082,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "devOptional": true }, "node_modules/long": { "version": "5.2.4", @@ -3859,6 +6095,32 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true }, + "node_modules/lru-memoizer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", + "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3979,6 +6241,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4019,7 +6282,8 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", @@ -4056,6 +6320,23 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "optional": true, + "peer": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4069,6 +6350,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4077,7 +6359,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 6" } @@ -4108,7 +6390,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, + "devOptional": true, "dependencies": { "wrappy": "1" } @@ -4117,7 +6399,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, + "devOptional": true, "dependencies": { "fn.name": "1.x.x" } @@ -4158,6 +6440,15 @@ "yaml": "^2.5.0" } }, + "node_modules/opentracing": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", + "integrity": "sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -4190,6 +6481,23 @@ "node": ">=0.10.0" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -4207,7 +6515,8 @@ "node_modules/partial-json": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", - "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==" + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "license": "MIT" }, "node_modules/path-key": { "version": "3.1.1", @@ -4259,6 +6568,40 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "optional": true, + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -4271,11 +6614,62 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/process/-/process-0.10.1.tgz", + "integrity": "sha512-dyIett8dgGIZ/TXKUzeYExt7WA6ldDzys9vTDU/cCA9L17Ypme+KzS+NjQCjpn9xsvi/shbMC+yP/BcFMBz0NA==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/proto3-json-serializer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==", - "dev": true, + "devOptional": true, "dependencies": { "protobufjs": "^7.2.5" }, @@ -4343,12 +6737,24 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, + "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "license": "MIT", + "optional": true, + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, "node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", @@ -4389,7 +6795,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4508,11 +6914,22 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/retry-request": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", - "dev": true, + "devOptional": true, "dependencies": { "@types/request": "^2.48.8", "extend": "^3.0.2", @@ -4563,7 +6980,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=10" } @@ -4749,7 +7166,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, + "devOptional": true, "dependencies": { "is-arrayish": "^0.3.1" } @@ -4758,6 +7175,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -4778,7 +7196,7 @@ "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, + "devOptional": true, "engines": { "node": "*" } @@ -4804,7 +7222,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "dev": true, + "devOptional": true, "dependencies": { "stubs": "^3.0.0" } @@ -4813,17 +7231,22 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true + "devOptional": true }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, + "devOptional": true, "dependencies": { "safe-buffer": "~5.2.0" } }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4876,11 +7299,25 @@ "node": ">=8" } }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==", - "dev": true + "devOptional": true }, "node_modules/supports-color": { "version": "7.2.0", @@ -4909,7 +7346,7 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", - "dev": true, + "devOptional": true, "dependencies": { "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", @@ -4925,7 +7362,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, + "devOptional": true, "dependencies": { "debug": "4" }, @@ -4937,7 +7374,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, + "devOptional": true, "dependencies": { "ms": "^2.1.3" }, @@ -4954,7 +7391,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, + "devOptional": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -4967,13 +7404,13 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "devOptional": true }, "node_modules/teeny-request/node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, + "devOptional": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -4993,7 +7430,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, + "devOptional": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -5018,7 +7455,32 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true + "devOptional": true + }, + "node_modules/thriftrw": { + "version": "3.11.4", + "resolved": "https://registry.npmjs.org/thriftrw/-/thriftrw-3.11.4.tgz", + "integrity": "sha512-UcuBd3eanB3T10nXWRRMwfwoaC6VMk7qe3/5YIWP2Jtw+EbHqJ0p1/K3x8ixiR5dozKSSfcg1W+0e33G1Di3XA==", + "dependencies": { + "bufrw": "^1.2.1", + "error": "7.0.2", + "long": "^2.4.0" + }, + "bin": { + "thrift2json": "thrift2json.js" + }, + "engines": { + "node": ">= 0.10.x" + } + }, + "node_modules/thriftrw/node_modules/long": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz", + "integrity": "sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.6" + } }, "node_modules/through": { "version": "2.3.8", @@ -5067,7 +7529,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 14.0.0" } @@ -5146,6 +7608,7 @@ "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -5179,11 +7642,24 @@ "node": ">= 0.8" } }, + "node_modules/uri-templates": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/uri-templates/-/uri-templates-0.2.0.tgz", + "integrity": "sha512-EWkjYEN0L6KOfEoOH6Wj4ghQqU7eBZMJqRHQnxQAq+dSEzRPClkWjf8557HkWQXF6BrAUoLSAyy9i3RVTliaNg==", + "license": "http://geraintluff.github.io/tv4/LICENSE.txt" + }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "license": "BSD", + "optional": true + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "devOptional": true }, "node_modules/utils-merge": { "version": "1.0.1", @@ -5201,6 +7677,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -5235,6 +7712,33 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -5263,7 +7767,7 @@ "version": "3.17.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "dev": true, + "devOptional": true, "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", @@ -5285,7 +7789,7 @@ "version": "4.9.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "dev": true, + "devOptional": true, "dependencies": { "logform": "^2.7.0", "readable-stream": "^3.6.2", @@ -5298,7 +7802,8 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" }, "node_modules/wrap-ansi": { "version": "6.2.0", @@ -5336,7 +7841,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "devOptional": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -5365,6 +7870,21 @@ "node": ">=8" } }, + "node_modules/xorshift": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xorshift/-/xorshift-1.2.0.tgz", + "integrity": "sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g==", + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -5373,15 +7893,24 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true, + "peer": true + }, "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { @@ -5419,6 +7948,20 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.24.1", "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", diff --git a/samples/js-character-generator/package.json b/samples/js-character-generator/package.json index 5a03186f54..48380b519e 100644 --- a/samples/js-character-generator/package.json +++ b/samples/js-character-generator/package.json @@ -17,6 +17,6 @@ }, "dependencies": { "genkit": "^1.0.4", - "@genkit-ai/googleai": "^1.0.4" + "@genkit-ai/google-genai": "^1.0.4" } } diff --git a/samples/js-chatbot/server/package-lock.json b/samples/js-chatbot/server/package-lock.json index 595de767ec..15c71ed351 100644 --- a/samples/js-chatbot/server/package-lock.json +++ b/samples/js-chatbot/server/package-lock.json @@ -9,15 +9,16 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@genkit-ai/express": "^1.0.4", - "@genkit-ai/vertexai": "^1.0.4", + "@genkit-ai/express": "^1.22.0", + "@genkit-ai/google-genai": "^1.22.0", + "@genkit-ai/vertexai": "^1.22.0", "express": "^4.21.0", - "genkit": "^1.0.0-rc.18", + "genkit": "^1.22.0", "partial-json": "^0.1.7", "zod": "^3.23.8" }, "devDependencies": { - "genkit-cli": "^1.0.4", + "genkit-cli": "^1.22.0", "tsx": "^4.19.2", "typescript": "^5.4.5" } @@ -66,10 +67,11 @@ } }, "node_modules/@asteasolutions/zod-to-openapi": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@asteasolutions/zod-to-openapi/-/zod-to-openapi-7.3.0.tgz", - "integrity": "sha512-7tE/r1gXwMIvGnXVUdIqUhCU1RevEFC4Jk6Bussa0fk1ecbnnINkZzj1EOAJyE/M3AI25DnHT/zKQL1/FPFi8Q==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@asteasolutions/zod-to-openapi/-/zod-to-openapi-7.3.4.tgz", + "integrity": "sha512-/2rThQ5zPi9OzVwes6U7lK1+Yvug0iXu25olp7S0XsYmOqnyMfxH7gdSQjn/+DSOHRg7wnotwGJSyL+fBKdnEA==", "dev": true, + "license": "MIT", "dependencies": { "openapi3-ts": "^4.1.2" }, @@ -81,18 +83,20 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true, + "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", + "devOptional": true, + "license": "MIT", "dependencies": { - "colorspace": "1.1.x", + "@so-ric/colorspace": "^1.1.6", "enabled": "2.0.x", "kuler": "^2.0.0" } @@ -588,33 +592,37 @@ } }, "node_modules/@genkit-ai/ai": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.0.4.tgz", - "integrity": "sha512-omByB//cj5476YU+wdoVuhNI0En85kITjSxVwqVBz94hcP5hYhQfcfhNlN6BzhgNJER7XACyYKWehmw4KwxoLQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.22.0.tgz", + "integrity": "sha512-TDKO+zWyM5YI8zE4a0IlqlpgHuLB4B4islzgWDvzdQlbjtyJp0ayODAMFhS2ruQ6+a/UdXDySRrOX/RcqF4yjA==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/core": "1.0.4", + "@genkit-ai/core": "1.22.0", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.11.19", "colorette": "^2.0.20", - "dotprompt": "^1.0.0", + "dotprompt": "^1.1.1", "json5": "^2.2.3", "node-fetch": "^3.3.2", "partial-json": "^0.1.7", + "uri-templates": "^0.2.0", "uuid": "^10.0.0" } }, "node_modules/@genkit-ai/ai/node_modules/@types/node": { - "version": "20.17.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.17.tgz", - "integrity": "sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==", + "version": "20.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", + "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", + "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@genkit-ai/ai/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" }, "node_modules/@genkit-ai/ai/node_modules/uuid": { "version": "10.0.0", @@ -624,77 +632,149 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@genkit-ai/core": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.0.4.tgz", - "integrity": "sha512-O4ASgeXLkjc8qyhgUhY9TV//V0W6tvhv7YV0LEdeQ6Vum7CvdBNB1w8moUQADeyMPE00VuqURcGKpejVshY3OQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.22.0.tgz", + "integrity": "sha512-etVlpwJkPoy91xR6H5+S/AWZPJMeovb7N35+B90md1+6xWcodQF7WZ3chKcH31Xamlz+jTIvd3riiZGY9RFumg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.25.0", - "@opentelemetry/core": "^1.25.0", - "@opentelemetry/sdk-metrics": "^1.25.0", + "@opentelemetry/context-async-hooks": "~1.25.0", + "@opentelemetry/core": "~1.25.0", + "@opentelemetry/exporter-jaeger": "^1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", "@opentelemetry/sdk-node": "^0.52.0", - "@opentelemetry/sdk-trace-base": "^1.25.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", "@types/json-schema": "^7.0.15", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "async-mutex": "^0.5.0", "body-parser": "^1.20.3", "cors": "^2.8.5", - "dotprompt": "^1.0.0", + "dotprompt": "^1.1.1", "express": "^4.21.0", "get-port": "^5.1.0", "json-schema": "^0.4.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.22.4" + }, + "optionalDependencies": { + "@genkit-ai/firebase": "^1.16.1" } }, "node_modules/@genkit-ai/express": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/express/-/express-1.0.4.tgz", - "integrity": "sha512-KIFvnZ5BQ/EKlVS0zevrpix38zA7YBygQZuLSmEsCxWgfwrxoz2642C7YY7y95nnDNQ3Qh/jYpPZ11DCbYG3Hw==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/express/-/express-1.22.0.tgz", + "integrity": "sha512-dejpHSlH9YPTInDwz2COSpvI6rpZrWARJWbsf798HKMxuCDggRLJVMxxh1ZBjTJIcKfQzb2S+H/fRqHDWarpww==", + "license": "Apache-2.0", "dependencies": { "body-parser": "^1.20.3", "cors": "^2.8.5" }, "peerDependencies": { - "@genkit-ai/core": "1.0.4", "express": "^4.21.1", - "genkit": "^1.0.4" + "genkit": "^1.22.0" + } + }, + "node_modules/@genkit-ai/firebase": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/firebase/-/firebase-1.22.0.tgz", + "integrity": "sha512-iTOVma8be8cOFzO9yaNuzBIICgFAP+N1cuB5T8K5LE5ahsSIG7sZWUE5FwMKtEDFk9D343kgLuvW9nxLkV7IzA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@genkit-ai/google-cloud": "^1.22.0" + }, + "peerDependencies": { + "@google-cloud/firestore": "^7.11.0", + "firebase": ">=11.5.0", + "firebase-admin": ">=12.2", + "genkit": "^1.22.0" + }, + "peerDependenciesMeta": { + "firebase": { + "optional": true + } + } + }, + "node_modules/@genkit-ai/google-cloud": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.22.0.tgz", + "integrity": "sha512-PVt7oLu3VARQ4u/R4VvG/q2lsEdTke9jxQI8sg1jxHoKV03fNUwKAyNd59ZT4igrQIUCqdJD4tH3Kzh4yd4QTw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/logging-winston": "^6.0.0", + "@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.19.0", + "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.4.1", + "@google-cloud/opentelemetry-resource-util": "^2.4.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.49.1", + "@opentelemetry/core": "~1.25.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resources": "~1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", + "@opentelemetry/sdk-node": "^0.52.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", + "google-auth-library": "^9.6.3", + "node-fetch": "^3.3.2", + "winston": "^3.12.0" + }, + "peerDependencies": { + "genkit": "^1.22.0" + } + }, + "node_modules/@genkit-ai/google-genai": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-genai/-/google-genai-1.22.0.tgz", + "integrity": "sha512-Bdzjy15zWBt5GGRmzjSh2jp73fyFt3X0la9jvECmxzn1zjVl68/OU3WJAoAD+z3N4F258NmXzsMh6t5QA9INFQ==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.2" + }, + "peerDependencies": { + "genkit": "^1.22.0" } }, "node_modules/@genkit-ai/telemetry-server": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/telemetry-server/-/telemetry-server-1.0.4.tgz", - "integrity": "sha512-z6Hs1m4tf2pyKfdkGcnts5n2GPlBYOt3qg8dkNnWycItwTAvpTX0zWTCY5hgF6zqR4ZEhF/bZscwvOjOjy1fZQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/telemetry-server/-/telemetry-server-1.22.0.tgz", + "integrity": "sha512-rEeIeIeyLnW5q7Xx/cNQtCbrtAi32ISrctxVJ6t7zHL+8o+zpU1ugQd8+SMUDjWzKhSmfjLsNlmivl3d0cjfog==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@asteasolutions/zod-to-openapi": "^7.0.0", - "@genkit-ai/tools-common": "1.0.4", + "@genkit-ai/tools-common": "1.22.0", "@google-cloud/firestore": "^7.6.0", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.25.0", - "@opentelemetry/core": "^1.25.0", - "@opentelemetry/sdk-metrics": "^1.25.0", + "@opentelemetry/api": "~1.9.0", + "@opentelemetry/context-async-hooks": "~1.25.0", + "@opentelemetry/core": "~1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", "@opentelemetry/sdk-node": "^0.52.0", - "@opentelemetry/sdk-trace-base": "^1.25.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", "async-mutex": "^0.5.0", "express": "^4.21.0", + "lockfile": "^1.0.4", "zod": "^3.22.4" } }, "node_modules/@genkit-ai/tools-common": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/tools-common/-/tools-common-1.0.4.tgz", - "integrity": "sha512-0Xh6n0HJq0qEUKLC1gEqA7t390q7f5sRVuI8RJUb0gpP0/IV7aELzfV8LSmC6K+Rb2OUfBz/z+LkOTG0DeaTKQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/tools-common/-/tools-common-1.22.0.tgz", + "integrity": "sha512-1jrtHJACbacqxxuXYEV77BmnLclWDheiaxIoEK+Utx3PUsg6q44EHDSUDjCVqrNIgjt6lFsLdSuAhpnqGwB/Pw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@asteasolutions/zod-to-openapi": "^7.0.0", - "@trpc/server": "10.45.0", + "@inquirer/prompts": "^7.8.0", + "@trpc/server": "^10.45.2", "adm-zip": "^0.5.12", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", @@ -707,7 +787,6 @@ "express": "^4.21.0", "get-port": "5.1.1", "glob": "^10.3.12", - "inquirer": "^8.2.0", "js-yaml": "^4.1.0", "json-2-csv": "^5.5.1", "json-schema": "^0.4.0", @@ -721,9 +800,10 @@ } }, "node_modules/@genkit-ai/vertexai": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/vertexai/-/vertexai-1.0.4.tgz", - "integrity": "sha512-DprsooHms+iYpaDwagUIE0SqS1GgO4f6YlXCrwhl0NsVObYyDDJABZUO8AA58eglQp0WPjUSQRVXwWy6viZeLA==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/vertexai/-/vertexai-1.22.0.tgz", + "integrity": "sha512-ftCWDJ2OTkcuekc4R16xQCDnnLD5E8gnVEcHhD9wpY1YyLsJ7EATQCyNg6VC2BW4A3pwn9tqjaJpOyzAIXrLPg==", + "license": "Apache-2.0", "dependencies": { "@anthropic-ai/sdk": "^0.24.3", "@anthropic-ai/vertex-sdk": "^0.4.0", @@ -740,7 +820,7 @@ "firebase-admin": ">=12.2" }, "peerDependencies": { - "genkit": "^1.0.4" + "genkit": "^1.22.0" } }, "node_modules/@google-cloud/aiplatform": { @@ -813,6 +893,128 @@ "node": ">=14.0.0" } }, + "node_modules/@google-cloud/logging": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.1.tgz", + "integrity": "sha512-2h9HBJG3OAsvzXmb81qXmaTPfXYU7KJTQUxunoOKFGnY293YQ/eCkW1Y5mHLocwpEqeqQYT/Qvl6Tk+Q7PfStw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/common": "^5.0.0", + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "4.0.0", + "@opentelemetry/api": "^1.7.0", + "arrify": "^2.0.1", + "dot-prop": "^6.0.0", + "eventid": "^2.0.0", + "extend": "^3.0.2", + "gcp-metadata": "^6.0.0", + "google-auth-library": "^9.0.0", + "google-gax": "^4.0.3", + "on-finished": "^2.3.0", + "pumpify": "^2.0.1", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/logging-winston": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-6.0.1.tgz", + "integrity": "sha512-tgA/qe/aGZITMrJ/5Tuykv234pLb/Qo6iDZ8SDkjbsiIy69mLQmbphrUd/IqnE17BSDfrwDUckvWdghiy8b+Qg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/logging": "^11.0.0", + "google-auth-library": "^9.0.0", + "lodash.mapvalues": "^4.6.0", + "winston-transport": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "winston": ">=3.2.1" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-monitoring-exporter/-/opentelemetry-cloud-monitoring-exporter-0.19.0.tgz", + "integrity": "sha512-5SOPXwC6RET4ZvXxw5D97dp8fWpqWEunHrzrUUGXhG4UAeedQe1KvYV8CK+fnaAbN2l2ha6QDYspT6z40TVY0g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.3.0", + "@google-cloud/precise-date": "^4.0.0", + "google-auth-library": "^9.0.0", + "googleapis": "^137.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-metrics": "^1.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter/node_modules/googleapis": { + "version": "137.1.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-137.1.0.tgz", + "integrity": "sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "google-auth-library": "^9.0.0", + "googleapis-common": "^7.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-trace-exporter": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-trace-exporter/-/opentelemetry-cloud-trace-exporter-2.4.1.tgz", + "integrity": "sha512-Dq2IyAyA9PCjbjLOn86i2byjkYPC59b5ic8k/L4q5bBWH0Jro8lzMs8C0G5pJfqh2druj8HF+oAIAlSdWQ+Z9Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.4.0", + "@grpc/grpc-js": "^1.1.8", + "@grpc/proto-loader": "^0.7.0", + "google-auth-library": "^9.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-trace-base": "^1.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-resource-util": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-resource-util/-/opentelemetry-resource-util-2.4.0.tgz", + "integrity": "sha512-/7ujlMoKtDtrbQlJihCjQnm31n2s2RTlvJqcSbt2jV3OkCzPAdo3u31Q13HNugqtIRUSk7bUoLx6AzhURkhW4w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.22.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/resources": "^1.0.0" + } + }, "node_modules/@google-cloud/paginator": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", @@ -858,6 +1060,7 @@ "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.15.0.tgz", "integrity": "sha512-/j/+8DFuEOo33fbdX0V5wjooOoFahEaMEdImHBmM2tH9MPHJYNtmXOf2sGUmZmiufSukmBEvdlzYgDkkgeBiVQ==", "optional": true, + "peer": true, "dependencies": { "@google-cloud/paginator": "^5.0.0", "@google-cloud/projectify": "^4.0.0", @@ -884,6 +1087,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "optional": true, + "peer": true, "bin": { "uuid": "dist/bin/uuid" } @@ -928,134 +1132,478 @@ "node": ">=6" } }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.0.tgz", - "integrity": "sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==", + "node_modules/@inquirer/ansi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.1.tgz", + "integrity": "sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.0.tgz", + "integrity": "sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.6.3" + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/@inquirer/confirm": { + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.19.tgz", + "integrity": "sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@inquirer/core": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.0.tgz", + "integrity": "sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==", "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@inquirer/ansi": "^1.0.1", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/@inquirer/editor": { + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.21.tgz", + "integrity": "sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/external-editor": "^1.0.2", + "@inquirer/type": "^3.0.9" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@inquirer/expand": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.21.tgz", + "integrity": "sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==", "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", "dev": true, + "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=12" + "node": ">=0.10.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@inquirer/figures": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.14.tgz", + "integrity": "sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.5.tgz", + "integrity": "sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", + "node_modules/@inquirer/number": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.21.tgz", + "integrity": "sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.21.tgz", + "integrity": "sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.9.0.tgz", + "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.0", + "@inquirer/confirm": "^5.1.19", + "@inquirer/editor": "^4.2.21", + "@inquirer/expand": "^4.0.21", + "@inquirer/input": "^4.2.5", + "@inquirer/number": "^3.0.21", + "@inquirer/password": "^4.0.21", + "@inquirer/rawlist": "^4.1.9", + "@inquirer/search": "^3.2.0", + "@inquirer/select": "^4.4.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.9.tgz", + "integrity": "sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.0.tgz", + "integrity": "sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.0.tgz", + "integrity": "sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.9.tgz", + "integrity": "sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", "funding": { @@ -1063,356 +1611,1385 @@ "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/@mistralai/mistralai-gcp": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@mistralai/mistralai-gcp/-/mistralai-gcp-1.4.0.tgz", - "integrity": "sha512-QYBbR/T1U4qZ88m6l5RpOlhly2mXWsXi0owicSX6zt6pBaMORxRs6ZRLmaYX5BNjGqxQUl+LtsSwpMtXW2uU2A==", + "node_modules/@mistralai/mistralai-gcp": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@mistralai/mistralai-gcp/-/mistralai-gcp-1.4.0.tgz", + "integrity": "sha512-QYBbR/T1U4qZ88m6l5RpOlhly2mXWsXi0owicSX6zt6pBaMORxRs6ZRLmaYX5BNjGqxQUl+LtsSwpMtXW2uU2A==", + "dependencies": { + "google-auth-library": "^9.11.0" + }, + "peerDependencies": { + "zod": ">= 3" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.21.0.tgz", + "integrity": "sha512-YFBsXJMFCyI1zP98u7gezMFKX4lgu/XpoZJk7ufI6UlFKXLj2hAMUuRlQX/nrmIPOmhRrG6tw2OQ2ZA/ZlXYpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.49.2.tgz", + "integrity": "sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-amqplib": "^0.41.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.43.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.43.1", + "@opentelemetry/instrumentation-bunyan": "^0.40.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.40.0", + "@opentelemetry/instrumentation-connect": "^0.38.0", + "@opentelemetry/instrumentation-cucumber": "^0.8.0", + "@opentelemetry/instrumentation-dataloader": "^0.11.0", + "@opentelemetry/instrumentation-dns": "^0.38.0", + "@opentelemetry/instrumentation-express": "^0.41.1", + "@opentelemetry/instrumentation-fastify": "^0.38.0", + "@opentelemetry/instrumentation-fs": "^0.14.0", + "@opentelemetry/instrumentation-generic-pool": "^0.38.1", + "@opentelemetry/instrumentation-graphql": "^0.42.0", + "@opentelemetry/instrumentation-grpc": "^0.52.0", + "@opentelemetry/instrumentation-hapi": "^0.40.0", + "@opentelemetry/instrumentation-http": "^0.52.0", + "@opentelemetry/instrumentation-ioredis": "^0.42.0", + "@opentelemetry/instrumentation-kafkajs": "^0.2.0", + "@opentelemetry/instrumentation-knex": "^0.39.0", + "@opentelemetry/instrumentation-koa": "^0.42.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.39.0", + "@opentelemetry/instrumentation-memcached": "^0.38.0", + "@opentelemetry/instrumentation-mongodb": "^0.46.0", + "@opentelemetry/instrumentation-mongoose": "^0.41.0", + "@opentelemetry/instrumentation-mysql": "^0.40.0", + "@opentelemetry/instrumentation-mysql2": "^0.40.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.39.0", + "@opentelemetry/instrumentation-net": "^0.38.0", + "@opentelemetry/instrumentation-pg": "^0.43.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-redis": "^0.41.0", + "@opentelemetry/instrumentation-redis-4": "^0.41.1", + "@opentelemetry/instrumentation-restify": "^0.40.0", + "@opentelemetry/instrumentation-router": "^0.39.0", + "@opentelemetry/instrumentation-socket.io": "^0.41.0", + "@opentelemetry/instrumentation-tedious": "^0.13.0", + "@opentelemetry/instrumentation-undici": "^0.5.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.0", + "@opentelemetry/resource-detector-aws": "^1.6.0", + "@opentelemetry/resource-detector-azure": "^0.2.10", + "@opentelemetry/resource-detector-container": "^0.4.0", + "@opentelemetry/resource-detector-gcp": "^0.29.10", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.4.1" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-jaeger": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-jaeger/-/exporter-jaeger-1.30.1.tgz", + "integrity": "sha512-7Ki+x7cZ/PEQxp3UyB+CWkWBqLk22yRGQ4AWIGwZlEs6rpCOdWwIFOyQDO9DdeyWtTPTvO3An/7chPZcRHOgzQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0", + "jaeger-client": "^3.15.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", + "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.41.0.tgz", + "integrity": "sha512-00Oi6N20BxJVcqETjgNzCmVKN+I5bJH/61IlHiIWd00snj1FdgiIKlpE4hYVacTB2sjIBB3nTbHskttdZEE2eg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.43.0.tgz", + "integrity": "sha512-pSxcWlsE/pCWQRIw92sV2C+LmKXelYkjkA7C5s39iPUi4pZ2lA1nIiw+1R/y2pDEhUHcaKkNyljQr3cx9ZpVlQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagator-aws-xray": "^1.3.1", + "@opentelemetry/resources": "^1.8.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/aws-lambda": "8.10.122" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.43.1.tgz", + "integrity": "sha512-qLT2cCniJ5W+6PFzKbksnoIQuq9pS83nmgaExfUwXVvlwi0ILc50dea0tWBHZMkdIDa/zZdcuFrJ7+fUcSnRow==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagation-utils": "^0.30.10", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.40.0.tgz", + "integrity": "sha512-aZ4cXaGWwj79ZXSYrgFVsrDlE4mmf2wfvP9bViwRc0j75A6eN6GaHYHqufFGMTCqASQn5pIjjP+Bx+PWTGiofw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@types/bunyan": "1.8.9" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.40.0.tgz", + "integrity": "sha512-JxbM39JU7HxE9MTKKwi6y5Z3mokjZB2BjwfqYi4B3Y29YO3I42Z7eopG6qq06yWZc+nQli386UDQe0d9xKmw0A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz", + "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/connect": "3.4.36" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect/node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.8.0.tgz", + "integrity": "sha512-ieTm4RBIlZt2brPwtX5aEZYtYnkyqhAVXJI9RIohiBVMe5DxiwCwt+2Exep/nDVqGPX8zRBZUl4AEw423OxJig==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.11.0.tgz", + "integrity": "sha512-27urJmwkH4KDaMJtEv1uy2S7Apk4XbN4AgWMdfMJbi7DnOduJmeuA+DpJCwXB72tEWXo89z5T3hUVJIDiSNmNw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.38.0.tgz", + "integrity": "sha512-Um07I0TQXDWa+ZbEAKDFUxFH40dLtejtExDOMLNJ1CL8VmOmA71qx93Qi/QG4tGkiI1XWqr7gF/oiMCJ4m8buQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "google-auth-library": "^9.11.0" + "@opentelemetry/instrumentation": "^0.52.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=14" }, "peerDependencies": { - "zod": ">= 3" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz", + "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, "engines": { - "node": ">=8.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", - "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz", + "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", - "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz", + "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.38.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.38.1.tgz", + "integrity": "sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", - "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz", + "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", + "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { + "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/semantic-conventions": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz", + "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", + "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "license": "Apache-2.0", + "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/semantic-conventions": { + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": { "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=14" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", - "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz", + "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.23.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.2.0.tgz", + "integrity": "sha512-uKKmhEFd0zR280tJovuiBG7cfnNZT4kvVTvqtHPxQP7nOmRbJstCYHFH13YzjVcKjkmoArmxiSulmZmF7SLIlg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.24.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.39.0.tgz", + "integrity": "sha512-lRwTqIKQecPWDkH1KEcAUcFhCaNssbKSpxf4sxRTAROCwrCEnYkjOuqJHV+q1/CApjMTaKu0Er4LBv/6bDpoxA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz", + "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.39.0.tgz", + "integrity": "sha512-eU1Wx1RRTR/2wYXFzH9gcpB8EPmhYlNDIUHzUXjyUE0CAXEJhBLkYNlzdaVCoQDw2neDqS+Woshiia6+emWK9A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", - "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.38.0.tgz", + "integrity": "sha512-tPmyqQEZNyrvg6G+iItdlguQEcGzfE+bJkpQifmBXmWBnoS5oU3UxqtyYuXGL2zI9qQM5yMBHH4nRXWALzy7WA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@types/memcached": "^2.2.6" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz", + "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.41.0.tgz", + "integrity": "sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz", + "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/mysql": "2.15.22" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz", + "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", - "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz", + "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.38.0.tgz", + "integrity": "sha512-stjow1PijcmUquSmRD/fSihm/H61DbjPlJuJhWUe7P22LFPjFhsrSeiB5vGj3vn+QGceNAs+kioUTzMGPbNxtg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz", + "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.4" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.41.0.tgz", + "integrity": "sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.41.0.tgz", + "integrity": "sha512-RJ1pwI3btykp67ts+5qZbaFSAAzacucwBet5/5EsKYtWBpHbWwV/qbGN/kIBzXg5WEZBhXLrR/RUq0EpEUpL3A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.1.tgz", + "integrity": "sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.40.0.tgz", + "integrity": "sha512-sm/rH/GysY/KOEvZqYBZSLYFeXlBkHCgqPDgWc07tz+bHCN6mPs9P3otGOSTe7o3KAIM8Nc6ncCO59vL+jb2cA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.39.0.tgz", + "integrity": "sha512-LaXnVmD69WPC4hNeLzKexCCS19hRLrUw3xicneAMkzJSzNJvPyk7G6I7lz7VjQh1cooObPBt9gNyd3hhTCUrag==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.41.0.tgz", + "integrity": "sha512-7fzDe9/FpO6NFizC/wnzXXX7bF9oRchsD//wFqy5g5hVEgXZCQ70IhxjrKdBvgjyIejR9T9zTvfQ6PfVKfkCAw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.13.0.tgz", + "integrity": "sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/tedious": "^4.0.14" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.5.0.tgz", + "integrity": "sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" } }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", - "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.39.0.tgz", + "integrity": "sha512-v/1xziLJ9CyB3YDjBSBzbB70Qd0JwWTo36EqWK5m3AR0CzsyMQQmf3ZIZM6sgx7hXMcRQ0pnEYhg6nhrUQPm9A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@types/shimmer": "^1.0.2", - "import-in-the-middle": "^1.8.1", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.2", - "shimmer": "^1.2.1" + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" @@ -1425,6 +3002,7 @@ "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/otlp-transformer": "0.52.1" @@ -1436,32 +3014,11 @@ "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", - "engines": { - "node": ">=14" - } - }, "node_modules/@opentelemetry/otlp-grpc-exporter-base": { "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.25.1", @@ -1475,32 +3032,11 @@ "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", - "engines": { - "node": ">=14" - } - }, "node_modules/@opentelemetry/otlp-transformer": { "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/core": "1.25.1", @@ -1517,60 +3053,25 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", - "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-metrics": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", - "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", - "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "lodash.merge": "^4.6.2" - }, + "node_modules/@opentelemetry/propagation-utils": { + "version": "0.30.16", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.16.tgz", + "integrity": "sha512-ZVQ3Z/PQ+2GQlrBfbMMMT0U7MzvYZLCPP800+ooyaBqm4hMvuQHfP028gB9/db0mwkmyEAMad9houukUVxhwcw==", + "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", - "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" - }, + "node_modules/@opentelemetry/propagator-aws-xray": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.26.2.tgz", + "integrity": "sha512-k43wxTjKYvwfce9L4eT8fFYy/ATmCfPHZPZsyT/6ABimf2KE1HafoOsIcxLOtmNSZt6dCvBIYCrXaOWta20xJg==", + "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=14" }, @@ -1578,18 +3079,11 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", - "engines": { - "node": ">=14" - } - }, "node_modules/@opentelemetry/propagator-b3": { "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.25.1" }, @@ -1600,12 +3094,13 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/core": { + "node_modules/@opentelemetry/propagator-jaeger": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "1.25.1" }, "engines": { "node": ">=14" @@ -1614,34 +3109,42 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=14" } }, - "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", - "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.29.7", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.29.7.tgz", + "integrity": "sha512-PExUl/R+reSQI6Y/eNtgAsk6RHk1ElYSzOa8/FHfdc/nLmx9sqMasBEpLMkETkzDP7t27ORuXe4F9vwkV2uwwg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1" + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/resource-detector-alibaba-cloud/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" @@ -1650,66 +3153,78 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "node_modules/@opentelemetry/resource-detector-alibaba-cloud/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=14" } }, - "node_modules/@opentelemetry/resources": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", - "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "node_modules/@opentelemetry/resource-detector-aws": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.12.0.tgz", + "integrity": "sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/semantic-conventions": "1.28.0" + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", - "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "node_modules/@opentelemetry/resource-detector-azure": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.12.tgz", + "integrity": "sha512-iIarQu6MiCjEEp8dOzmBvCSlRITPFTinFB2oNKAjU6xhx8d7eUcjNOKhBGQTvuCriZrxrEvDaEEY9NfrPQ6uYQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1" + "@opentelemetry/core": "^1.25.1", + "@opentelemetry/resources": "^1.10.1", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/resource-detector-container": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.4.4.tgz", + "integrity": "sha512-ZEN2mq7lIjQWJ8NTt1umtr6oT/Kb89856BOmESLSvgSHbIwOFYs7cSfSRH5bfiVw6dXTQAVbZA/wLgCHKrebJA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/resource-detector-container/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" @@ -1718,60 +3233,42 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", - "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", - "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1" - }, + "node_modules/@opentelemetry/resource-detector-container/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-node": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", - "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "node_modules/@opentelemetry/resource-detector-gcp": { + "version": "0.29.13", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.13.tgz", + "integrity": "sha512-vdotx+l3Q+89PeyXMgKEGnZ/CwzwMtuMi/ddgD9/5tKZ08DfDGB2Npz9m2oXPHRCjc4Ro6ifMqFlRyzIvgOjhg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", - "@opentelemetry/exporter-trace-otlp-http": "0.52.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", - "@opentelemetry/exporter-zipkin": "1.25.1", - "@opentelemetry/instrumentation": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-logs": "0.52.1", - "@opentelemetry/sdk-metrics": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "@opentelemetry/sdk-trace-node": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "gcp-metadata": "^6.0.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/core": { + "node_modules/@opentelemetry/resources": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", "dependencies": { + "@opentelemetry/core": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { @@ -1781,25 +3278,37 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "license": "Apache-2.0", "dependencies": { + "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/resources": "1.25.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/sdk-metrics": { + "node_modules/@opentelemetry/sdk-metrics": { "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/resources": "1.25.1", @@ -1812,38 +3321,51 @@ "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "license": "Apache-2.0", "dependencies": { + "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/semantic-conventions": { "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", "engines": { "node": ">=14" } }, "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", - "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1", - "@opentelemetry/semantic-conventions": "1.28.0" + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { "node": ">=14" @@ -1852,10 +3374,20 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/sdk-trace-node": { "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/context-async-hooks": "1.25.1", "@opentelemetry/core": "1.25.1", @@ -1871,76 +3403,30 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/context-async-hooks": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", - "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", - "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" - }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", + "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.1.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", - "engines": { - "node": ">=14" + "@opentelemetry/api": "^1.1.0" } }, "node_modules/@pkgjs/parseargs": { @@ -1948,6 +3434,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -2007,6 +3494,17 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -2016,13 +3514,21 @@ } }, "node_modules/@trpc/server": { - "version": "10.45.0", - "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.45.0.tgz", - "integrity": "sha512-2Fwzv6nqpE0Ie/G7PeS0EVR89zLm+c1Mw7T+RAGtU807j4oaUx0zGkBXTu5u9AI+j+BYNN2GZxJcuDTAecbr1A==", + "version": "10.45.2", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.45.2.tgz", + "integrity": "sha512-wOrSThNNE4HUnuhJG6PfDRp4L2009KDVxsd+2VYH8ro6o/7/jwYZ8Uu5j+VaW+mOmc8EHerHzGcdbGNQSAUPgg==", "dev": true, "funding": [ "https://trpc.io/sponsor" - ] + ], + "license": "MIT" + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.122", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.122.tgz", + "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==", + "license": "MIT", + "optional": true }, "node_modules/@types/body-parser": { "version": "1.19.5", @@ -2034,6 +3540,16 @@ "@types/node": "*" } }, + "node_modules/@types/bunyan": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", + "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/caseless": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", @@ -2072,15 +3588,6 @@ "@types/send": "*" } }, - "node_modules/@types/handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==", - "deprecated": "This is a stub types definition. handlebars provides its own type definitions, so you do not need this installed.", - "dependencies": { - "handlebars": "*" - } - }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -2090,7 +3597,8 @@ "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, "node_modules/@types/jsonwebtoken": { "version": "9.0.8", @@ -2107,6 +3615,16 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, + "node_modules/@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -2119,6 +3637,16 @@ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "optional": true }, + "node_modules/@types/mysql": { + "version": "2.15.22", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", + "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "18.19.74", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.74.tgz", @@ -2136,6 +3664,28 @@ "form-data": "^4.0.0" } }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz", + "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/pg": "*" + } + }, "node_modules/@types/qs": { "version": "6.9.18", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", @@ -2197,7 +3747,18 @@ "node_modules/@types/shimmer": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", + "license": "MIT" + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/tough-cookie": { "version": "4.0.5", @@ -2208,7 +3769,8 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/@types/yauzl": { "version": "2.10.3", @@ -2244,9 +3806,10 @@ } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2258,6 +3821,7 @@ "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", "peerDependencies": { "acorn": "^8" } @@ -2267,6 +3831,7 @@ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.0" } @@ -2294,6 +3859,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -2309,6 +3875,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -2321,19 +3888,12 @@ } } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, + "node_modules/ansi-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.1.tgz", + "integrity": "sha512-bF6xLaZBLpOQzgYUtYEhJx090nPSZk1BQ/q2oyBK9aMMcJHzx9uXGCjI2Y+LebsN4Jwoykr0V9whbPiogdyHoQ==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, "node_modules/ansi-regex": { @@ -2363,6 +3923,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2375,7 +3936,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-flatten": { "version": "1.1.1", @@ -2395,12 +3957,14 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/async-mutex": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "license": "MIT", "dependencies": { "tslib": "^2.4.0" } @@ -2410,6 +3974,7 @@ "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "optional": true, + "peer": true, "dependencies": { "retry": "0.13.1" } @@ -2420,13 +3985,14 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz", + "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -2434,7 +4000,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -2481,6 +4048,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2493,6 +4061,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -2523,10 +4092,11 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2536,6 +4106,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -2562,6 +4133,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -2581,6 +4153,20 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, + "node_modules/bufrw": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/bufrw/-/bufrw-1.4.0.tgz", + "integrity": "sha512-sWm8iPbqvL9+5SiYxXH73UOkyEbGQg7kyHQmReF89WJHQJw2eV4P/yZ0E+b71cczJ4pPobVhXxgQcmfSTgGHxQ==", + "dependencies": { + "ansi-color": "^0.2.1", + "error": "^7.0.0", + "hexer": "^1.5.0", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.x" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2621,6 +4207,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2633,9 +4220,9 @@ } }, "node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "dev": true, "license": "MIT" }, @@ -2644,6 +4231,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2666,13 +4254,15 @@ "node_modules/cjs-module-lexer": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==" + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -2685,6 +4275,7 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2693,12 +4284,13 @@ } }, "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, + "license": "ISC", "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/cliui": { @@ -2735,18 +4327,23 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.2.tgz", + "integrity": "sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==", + "devOptional": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^3.0.1", + "color-string": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/color-convert": { @@ -2766,44 +4363,56 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.2.tgz", + "integrity": "sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==", + "devOptional": true, + "license": "MIT", "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-string/node_modules/color-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.2.tgz", + "integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.20" } }, "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.2.tgz", + "integrity": "sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" } }, "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.2.tgz", + "integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -2821,6 +4430,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" } @@ -2830,6 +4440,7 @@ "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -2842,6 +4453,19 @@ "node": ">=8" } }, + "node_modules/configstore/node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -2891,6 +4515,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2905,6 +4530,7 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2930,6 +4556,7 @@ "resolved": "https://registry.npmjs.org/deeks/-/deeks-3.1.0.tgz", "integrity": "sha512-e7oWH1LzIdv/prMQ7pmlDlaVoL64glqzvNgkgQNgyec9ORPHrT2jaOqMtRyqJuwWjtfb6v+2rk9pmaHj+F137A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" } @@ -2939,6 +4566,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -2976,30 +4604,35 @@ "resolved": "https://registry.npmjs.org/doc-path/-/doc-path-4.1.1.tgz", "integrity": "sha512-h1ErTglQAVv2gCnOpD3sFS6uolDbOKHDU1BZq+Kl3npPqroU3dYL42lUgMfd5UimlwtRgp7C9dLGwqQ5D2HYgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" } }, "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "optional": true, "dependencies": { "is-obj": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dotprompt": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dotprompt/-/dotprompt-1.0.1.tgz", - "integrity": "sha512-mruM6m+pWe4t41InRDRchNLSl3x+q7iIBukVuUfb7vvN7aEOwP+BuONACAdaEeAqlMDtWHcTsuqqBdAAjGwamg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dotprompt/-/dotprompt-1.1.2.tgz", + "integrity": "sha512-24EU+eORQbPywBicIP44BiqykzEXFwZq1ZQKO5TEr9KrrENyDA7I1NzqhtmmEdQVfAXka0DEbSLPN5nerCqJ8A==", + "license": "ISC", "dependencies": { - "@types/handlebars": "^4.1.0", "handlebars": "^4.7.8", - "yaml": "^2.5.0" + "yaml": "^2.8.0" } }, "node_modules/dunder-proto": { @@ -3019,7 +4652,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/duplexify": { "version": "4.1.3", @@ -3036,7 +4670,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", @@ -3060,7 +4695,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", @@ -3078,6 +4714,15 @@ "once": "^1.4.0" } }, + "node_modules/error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw==", + "dependencies": { + "string-template": "~0.2.1", + "xtend": "~4.0.0" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -3105,6 +4750,21 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", @@ -3157,15 +4817,6 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -3179,6 +4830,7 @@ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "from": "~0", @@ -3197,6 +4849,52 @@ "node": ">=6" } }, + "node_modules/eventid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", + "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eventid/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -3242,6 +4940,22 @@ "url": "https://opencollective.com/express" } }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3305,9 +5019,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -3317,7 +5031,8 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/fast-xml-parser": { "version": "4.5.1", @@ -3334,6 +5049,7 @@ } ], "optional": true, + "peer": true, "dependencies": { "strnum": "^1.0.5" }, @@ -3366,7 +5082,8 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/fetch-blob": { "version": "3.2.0", @@ -3390,26 +5107,12 @@ "node": "^12.20 || >= 14.13" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3491,12 +5194,13 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -3504,6 +5208,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3514,12 +5219,13 @@ } }, "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -3530,12 +5236,15 @@ } }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -3598,7 +5307,8 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fsevents": { "version": "2.3.3", @@ -3676,31 +5386,35 @@ } }, "node_modules/genkit": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.0.4.tgz", - "integrity": "sha512-QJBvz8tJBQaqaHwBge3Hf4xoDNWJ8VVyDtKJsbCGEMwKnZa+g9Qh3LyBPx14RpPpJizZrr2j8Rvv0IocMEaj6Q==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.22.0.tgz", + "integrity": "sha512-GoVVO3EnNHrjkMkUPRvgx1MjBHKvOlZAu/ffMIJgLFxrH7rrUbvfHXE6Nk7uh5BNvET7+DApyhbhqz9G8sy+mQ==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/ai": "1.0.4", - "@genkit-ai/core": "1.0.4", + "@genkit-ai/ai": "1.22.0", + "@genkit-ai/core": "1.22.0", "uuid": "^10.0.0" } }, "node_modules/genkit-cli": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/genkit-cli/-/genkit-cli-1.0.4.tgz", - "integrity": "sha512-8ypWX/TO7YrR0Mb7P5yIaInzpMT5RoC/LVmJGpBbEOFoqsjsT7PHVXWifDhHQdzef8J4/RzNuifqLWXH8fV8+Q==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/genkit-cli/-/genkit-cli-1.22.0.tgz", + "integrity": "sha512-ypoAyRZciDgh31ToU4ZbqWREta8BUimMC9wxmjBqH5j5k853vhv9dpN8kU6anBmIsK2HCB0WVZN/0jI3YKsbZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/telemetry-server": "1.0.4", - "@genkit-ai/tools-common": "1.0.4", + "@genkit-ai/telemetry-server": "1.22.0", + "@genkit-ai/tools-common": "1.22.0", + "@inquirer/prompts": "^7.8.0", + "@modelcontextprotocol/sdk": "^1.13.1", "axios": "^1.7.7", "colorette": "^2.0.20", "commander": "^11.1.0", "extract-zip": "^2.0.1", "get-port": "5.1.1", - "inquirer": "^8.2.0", "open": "^6.3.0", - "ora": "^5.4.1" + "ora": "^5.4.1", + "semver": "^7.7.2" }, "bin": { "genkit": "dist/bin/genkit.js" @@ -3753,6 +5467,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -3804,6 +5519,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3824,6 +5540,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3939,7 +5656,8 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/gtoken": { "version": "7.1.0", @@ -3957,6 +5675,7 @@ "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -3978,6 +5697,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3993,6 +5713,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -4004,6 +5739,23 @@ "node": ">= 0.4" } }, + "node_modules/hexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/hexer/-/hexer-1.5.0.tgz", + "integrity": "sha512-dyrPC8KzBzUJ19QTIo1gXNqIISRXQ0NwteW6OeQHRN4ZuZeHkdODfj0zHBdOlHbRY8GqbqK57C9oWSvQZizFsg==", + "dependencies": { + "ansi-color": "^0.2.1", + "minimist": "^1.1.0", + "process": "^0.10.0", + "xtend": "^4.0.0" + }, + "bin": { + "hexer": "cli.js" + }, + "engines": { + "node": ">= 0.10.x" + } + }, "node_modules/html-entities": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", @@ -4156,14 +5908,16 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/import-in-the-middle": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.12.0.tgz", - "integrity": "sha512-yAgSE7GmtRcu4ZUSFX/4v69UGXwugFFSdIQJ14LHPOPPQrWv8Y7O9PHsw8Ovk7bKCLe4sjXMbZFqGFcLHpZ89w==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz", + "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==", + "license": "Apache-2.0", "dependencies": { - "acorn": "^8.8.2", + "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" @@ -4174,6 +5928,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -4183,33 +5938,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/inquirer": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", - "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -4227,17 +5955,12 @@ "node": "*" } }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4249,6 +5972,7 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -4264,6 +5988,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4281,6 +6006,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4293,6 +6019,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4302,6 +6029,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4310,11 +6038,19 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, + "devOptional": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -4330,13 +6066,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4357,13 +6095,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -4374,6 +6114,31 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jaeger-client": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/jaeger-client/-/jaeger-client-3.19.0.tgz", + "integrity": "sha512-M0c7cKHmdyEUtjemnJyx/y9uX16XHocL46yQvyqDlPdvAcwPDbHrIbKjQdBqtiE4apQ/9dmr+ZLJYYPGnurgpw==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0", + "opentracing": "^0.14.4", + "thriftrw": "^3.5.0", + "uuid": "^8.3.2", + "xorshift": "^1.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jaeger-client/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/jose": { "version": "4.15.9", "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", @@ -4388,6 +6153,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4396,10 +6162,11 @@ } }, "node_modules/json-2-csv": { - "version": "5.5.8", - "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.8.tgz", - "integrity": "sha512-eMQHOwV+av8Sgo+fkbEbQWOw/kwh89AZ5fNA8TYfcooG6TG1ZOL2WcPUrngIMIK8dBJitQ8QEU0zbncQ0CX4CQ==", + "version": "5.5.10", + "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.10.tgz", + "integrity": "sha512-Dep8wO3Fr5wNjQevO2Z8Y7yeee/nYSGRsi7q6zJDKEVHxXkXT+v21vxHmDX923UzmCXXkSo62HaTz6eTWzFLaw==", "dev": true, + "license": "MIT", "dependencies": { "deeks": "3.1.0", "doc-path": "4.1.1" @@ -4419,17 +6186,20 @@ "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -4549,7 +6319,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/limiter": { "version": "1.1.5", @@ -4557,11 +6328,22 @@ "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", "optional": true }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "node_modules/lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "dev": true, + "license": "ISC", + "dependencies": { + "signal-exit": "^3.0.2" + } + }, + "node_modules/lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" }, "node_modules/lodash.camelcase": { "version": "4.3.0", @@ -4610,10 +6392,18 @@ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "optional": true }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "license": "MIT", + "optional": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", @@ -4626,6 +6416,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -4641,7 +6432,8 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -4658,7 +6450,8 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "devOptional": true, + "license": "MIT" }, "node_modules/long": { "version": "5.2.4", @@ -4692,6 +6485,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -4707,6 +6501,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -4754,6 +6549,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "optional": true, + "peer": true, "bin": { "mime": "cli.js" }, @@ -4785,6 +6581,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4794,6 +6591,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4808,6 +6606,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4817,14 +6616,16 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/module-details-from-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", + "license": "MIT" }, "node_modules/ms": { "version": "2.0.0", @@ -4832,10 +6633,14 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, "node_modules/negotiator": { "version": "0.6.3", @@ -4848,7 +6653,8 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", @@ -4894,11 +6700,18 @@ "node": ">= 6.13.0" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4953,7 +6766,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "fn.name": "1.x.x" } @@ -4963,6 +6777,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5034,12 +6849,22 @@ } }, "node_modules/openapi3-ts": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-4.4.0.tgz", - "integrity": "sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-4.5.0.tgz", + "integrity": "sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==", "dev": true, + "license": "MIT", "dependencies": { - "yaml": "^2.5.0" + "yaml": "^2.8.0" + } + }, + "node_modules/opentracing": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", + "integrity": "sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" } }, "node_modules/ora": { @@ -5047,6 +6872,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -5070,6 +6896,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "optional": true, + "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5084,7 +6911,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/parseurl": { "version": "1.3.3", @@ -5104,6 +6932,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5111,13 +6940,15 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -5133,7 +6964,8 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/path-to-regexp": { "version": "0.1.12", @@ -5145,6 +6977,10 @@ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, + "license": [ + "MIT", + "Apache2" + ], "dependencies": { "through": "~2.3" } @@ -5155,11 +6991,46 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "optional": true, + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -5167,6 +7038,67 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/process/-/process-0.10.1.tgz", + "integrity": "sha512-dyIett8dgGIZ/TXKUzeYExt7WA6ldDzys9vTDU/cCA9L17Ypme+KzS+NjQCjpn9xsvi/shbMC+yP/BcFMBz0NA==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/proto3-json-serializer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", @@ -5233,13 +7165,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", "dev": true, + "license": "MIT", "dependencies": { "event-stream": "=3.3.4" }, @@ -5254,12 +7188,24 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, + "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "license": "MIT", + "optional": true, + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, "node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", @@ -5314,6 +7260,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -5333,14 +7280,16 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-in-the-middle": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.0.tgz", - "integrity": "sha512-/Tvpny/RVVicqlYTKwt/GtpZRsPG1CmJNhxVKGz+Sy/4MONfXCVNK69MFgGKdUt0/324q3ClI2dICcPgISrC8g==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", + "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", + "license": "MIT", "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", @@ -5351,9 +7300,10 @@ } }, "node_modules/require-in-the-middle/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -5369,14 +7319,16 @@ "node_modules/require-in-the-middle/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5404,6 +7356,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -5416,13 +7369,15 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "optional": true, + "peer": true, "engines": { "node": ">= 4" } @@ -5440,22 +7395,57 @@ "node": ">=14" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 18" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "node_modules/router/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.1.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/router/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/safe-buffer": { @@ -5481,7 +7471,8 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true, + "devOptional": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -5492,9 +7483,10 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", - "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5573,6 +7565,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5585,6 +7578,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5592,7 +7586,8 @@ "node_modules/shimmer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "license": "BSD-2-Clause" }, "node_modules/side-channel": { "version": "1.1.0", @@ -5667,6 +7662,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -5674,19 +7670,11 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5696,6 +7684,7 @@ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -5707,7 +7696,8 @@ "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, + "devOptional": true, + "license": "MIT", "engines": { "node": "*" } @@ -5725,6 +7715,7 @@ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1" } @@ -5750,6 +7741,11 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -5769,6 +7765,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5795,6 +7792,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5806,7 +7804,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "optional": true + "optional": true, + "peer": true }, "node_modules/stubs": { "version": "3.0.0", @@ -5818,6 +7817,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5829,6 +7829,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5919,6 +7920,7 @@ "resolved": "https://registry.npmjs.org/terminate/-/terminate-2.8.0.tgz", "integrity": "sha512-bcbjJEg0wY5nuJXvGxxHfmoEPkyHLCctUKO6suwtxy7jVSgGcgPeGwpbLDLELFhIaxCGRr3dPvyNg1yuz2V0eg==", "dev": true, + "license": "GPL-2.0", "dependencies": { "ps-tree": "^1.2.0" }, @@ -5930,19 +7932,47 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true + "devOptional": true, + "license": "MIT" + }, + "node_modules/thriftrw": { + "version": "3.11.4", + "resolved": "https://registry.npmjs.org/thriftrw/-/thriftrw-3.11.4.tgz", + "integrity": "sha512-UcuBd3eanB3T10nXWRRMwfwoaC6VMk7qe3/5YIWP2Jtw+EbHqJ0p1/K3x8ixiR5dozKSSfcg1W+0e33G1Di3XA==", + "dependencies": { + "bufrw": "^1.2.1", + "error": "7.0.2", + "long": "^2.4.0" + }, + "bin": { + "thrift2json": "thrift2json.js" + }, + "engines": { + "node": ">= 0.10.x" + } + }, + "node_modules/thriftrw/node_modules/long": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz", + "integrity": "sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.6" + } }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -5967,7 +7997,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true, + "devOptional": true, + "license": "MIT", "engines": { "node": ">= 14.0.0" } @@ -5996,18 +8027,6 @@ "fsevents": "~2.3.3" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -6025,6 +8044,7 @@ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } @@ -6046,6 +8066,7 @@ "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -6064,6 +8085,7 @@ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -6079,6 +8101,12 @@ "node": ">= 0.8" } }, + "node_modules/uri-templates": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/uri-templates/-/uri-templates-0.2.0.tgz", + "integrity": "sha512-EWkjYEN0L6KOfEoOH6Wj4ghQqU7eBZMJqRHQnxQAq+dSEzRPClkWjf8557HkWQXF6BrAUoLSAyy9i3RVTliaNg==", + "license": "http://geraintluff.github.io/tv4/LICENSE.txt" + }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", @@ -6122,6 +8150,7 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -6176,6 +8205,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -6187,13 +8217,14 @@ } }, "node_modules/winston": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", - "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "dev": true, + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz", + "integrity": "sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==", + "devOptional": true, + "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", + "@dabh/diagnostics": "^2.0.8", "async": "^3.2.3", "is-stream": "^2.0.0", "logform": "^2.7.0", @@ -6212,7 +8243,8 @@ "version": "4.9.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "logform": "^2.7.0", "readable-stream": "^3.6.2", @@ -6225,13 +8257,15 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6247,6 +8281,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6269,6 +8304,7 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -6280,17 +8316,34 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/xorshift": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xorshift/-/xorshift-1.2.0.tgz", + "integrity": "sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g==", + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -6306,14 +8359,15 @@ "optional": true }, "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { @@ -6356,6 +8410,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -6363,6 +8418,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.24.1", "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", @@ -6372,9 +8440,10 @@ } }, "node_modules/zod-to-json-schema": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.1.tgz", - "integrity": "sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==", + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "license": "ISC", "peerDependencies": { "zod": "^3.24.1" } diff --git a/samples/js-chatbot/server/package.json b/samples/js-chatbot/server/package.json index 0ee92a3973..e5d1b93891 100644 --- a/samples/js-chatbot/server/package.json +++ b/samples/js-chatbot/server/package.json @@ -15,15 +15,16 @@ "author": "", "license": "ISC", "dependencies": { - "genkit": "^1.0.0-rc.18", - "@genkit-ai/vertexai": "^1.0.4", - "@genkit-ai/express": "^1.0.4", + "genkit": "^1.22.0", + "@genkit-ai/vertexai": "^1.22.0", + "@genkit-ai/google-genai": "^1.22.0", + "@genkit-ai/express": "^1.22.0", "express": "^4.21.0", "partial-json": "^0.1.7", "zod": "^3.23.8" }, "devDependencies": { - "genkit-cli": "^1.0.4", + "genkit-cli": "^1.22.0", "typescript": "^5.4.5", "tsx": "^4.19.2" } diff --git a/samples/js-chatbot/server/src/index.ts b/samples/js-chatbot/server/src/index.ts index f27e1d4ffb..1b0eda8feb 100644 --- a/samples/js-chatbot/server/src/index.ts +++ b/samples/js-chatbot/server/src/index.ts @@ -15,7 +15,7 @@ */ import { startFlowServer } from '@genkit-ai/express'; -import { gemini15Flash, vertexAI } from '@genkit-ai/vertexai'; +import { vertexAI } from '@genkit-ai/google-genai'; import { VertexAIEvaluationMetricType, vertexAIEvaluation, @@ -52,7 +52,10 @@ const ai = genkit({ ], }); -const llms: ModelReference[] = [gemini15Flash, llama31]; +const llms: ModelReference[] = [ + vertexAI.model('gemini-2.5-flash'), + llama31, +]; const historyStore = inMemoryStore(); diff --git a/samples/js-menu/package-lock.json b/samples/js-menu/package-lock.json index dda4af0fd8..7cc23463a9 100644 --- a/samples/js-menu/package-lock.json +++ b/samples/js-menu/package-lock.json @@ -12,7 +12,7 @@ "@genkit-ai/dev-local-vectorstore": "^1.0.4", "@genkit-ai/evaluator": "^1.0.4", "@genkit-ai/firebase": "^1.0.4", - "@genkit-ai/vertexai": "^1.0.4", + "@genkit-ai/google-genai": "^1.0.4", "genkit": "^1.0.4" }, "devDependencies": { @@ -21,49 +21,6 @@ "typescript": "^5.3.3" } }, - "node_modules/@anthropic-ai/sdk": { - "version": "0.24.3", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.24.3.tgz", - "integrity": "sha512-916wJXO6T6k8R6BAAcLhLPv/pnLGy7YSEBZXZ1XTFbLcTZE8oTy3oDW9WJf9KKZwMvVcePIfoTSvzXHRcGxkQQ==", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7", - "web-streams-polyfill": "^3.2.1" - } - }, - "node_modules/@anthropic-ai/sdk/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@anthropic-ai/vertex-sdk": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@anthropic-ai/vertex-sdk/-/vertex-sdk-0.4.3.tgz", - "integrity": "sha512-2Uef0C5P2Hx+T88RnUSRA3u4aZqmqnrRSOb2N64ozgKPiSUPTM5JlggAq2b32yWMj5d3MLYa6spJXKMmHXOcoA==", - "dependencies": { - "@anthropic-ai/sdk": ">=0.14 <1", - "google-auth-library": "^9.4.2" - } - }, "node_modules/@asteasolutions/zod-to-openapi": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/@asteasolutions/zod-to-openapi/-/zod-to-openapi-7.3.0.tgz", @@ -481,27 +438,32 @@ "node_modules/@fastify/busboy": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", - "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==" + "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==", + "peer": true }, "node_modules/@firebase/app-check-interop-types": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", - "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==" + "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==", + "peer": true }, "node_modules/@firebase/app-types": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", - "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==" + "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", + "peer": true }, "node_modules/@firebase/auth-interop-types": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", - "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==" + "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==", + "peer": true }, "node_modules/@firebase/component": { "version": "0.6.12", "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.12.tgz", "integrity": "sha512-YnxqjtohLbnb7raXt2YuA44cC1wA9GiehM/cmxrsoxKlFxBLy2V0OkRSj9gpngAE0UoJ421Wlav9ycO7lTPAUw==", + "peer": true, "dependencies": { "@firebase/util": "1.10.3", "tslib": "^2.1.0" @@ -514,6 +476,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.11.tgz", "integrity": "sha512-gLrw/XeioswWUXgpVKCPAzzoOuvYNqK5fRUeiJTzO7Mlp9P6ylFEyPJlRBl1djqYye641r3MX6AmIeMXwjgwuQ==", + "peer": true, "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", @@ -531,6 +494,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.2.tgz", "integrity": "sha512-5zvdnMsfDHvrQAVM6jBS7CkBpu+z3YbpFdhxRsrK1FP45IEfxlzpeuEUb17D/tpM10vfq4Ok0x5akIBaCv7gfA==", + "peer": true, "dependencies": { "@firebase/component": "0.6.12", "@firebase/database": "1.0.11", @@ -547,6 +511,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.8.tgz", "integrity": "sha512-6lPWIGeufhUq1heofZULyVvWFhD01TUrkkB9vyhmksjZ4XF7NaivQp9rICMk7QNhqwa+uDCaj4j+Q8qqcSVZ9g==", + "peer": true, "dependencies": { "@firebase/app-types": "0.9.3", "@firebase/util": "1.10.3" @@ -556,6 +521,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4.tgz", "integrity": "sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==", + "peer": true, "dependencies": { "tslib": "^2.1.0" }, @@ -567,6 +533,7 @@ "version": "1.10.3", "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.3.tgz", "integrity": "sha512-wfoF5LTy0m2ufUapV0ZnpcGQvuavTbJ5Qr1Ze9OJGL70cSMvhDyjS4w2121XdA3lGZSTOsDOyGhpoDtYwck85A==", + "peer": true, "dependencies": { "tslib": "^2.1.0" }, @@ -575,33 +542,37 @@ } }, "node_modules/@genkit-ai/ai": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.0.4.tgz", - "integrity": "sha512-omByB//cj5476YU+wdoVuhNI0En85kITjSxVwqVBz94hcP5hYhQfcfhNlN6BzhgNJER7XACyYKWehmw4KwxoLQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.22.0.tgz", + "integrity": "sha512-TDKO+zWyM5YI8zE4a0IlqlpgHuLB4B4islzgWDvzdQlbjtyJp0ayODAMFhS2ruQ6+a/UdXDySRrOX/RcqF4yjA==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/core": "1.0.4", + "@genkit-ai/core": "1.22.0", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.11.19", "colorette": "^2.0.20", - "dotprompt": "^1.0.0", + "dotprompt": "^1.1.1", "json5": "^2.2.3", "node-fetch": "^3.3.2", "partial-json": "^0.1.7", + "uri-templates": "^0.2.0", "uuid": "^10.0.0" } }, "node_modules/@genkit-ai/ai/node_modules/@types/node": { - "version": "20.17.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.17.tgz", - "integrity": "sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==", + "version": "20.19.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", + "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", + "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@genkit-ai/ai/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" }, "node_modules/@genkit-ai/ai/node_modules/uuid": { "version": "10.0.0", @@ -611,33 +582,113 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@genkit-ai/core": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.0.4.tgz", - "integrity": "sha512-O4ASgeXLkjc8qyhgUhY9TV//V0W6tvhv7YV0LEdeQ6Vum7CvdBNB1w8moUQADeyMPE00VuqURcGKpejVshY3OQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.22.0.tgz", + "integrity": "sha512-etVlpwJkPoy91xR6H5+S/AWZPJMeovb7N35+B90md1+6xWcodQF7WZ3chKcH31Xamlz+jTIvd3riiZGY9RFumg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.25.0", - "@opentelemetry/core": "^1.25.0", - "@opentelemetry/sdk-metrics": "^1.25.0", + "@opentelemetry/context-async-hooks": "~1.25.0", + "@opentelemetry/core": "~1.25.0", + "@opentelemetry/exporter-jaeger": "^1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", "@opentelemetry/sdk-node": "^0.52.0", - "@opentelemetry/sdk-trace-base": "^1.25.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", "@types/json-schema": "^7.0.15", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "async-mutex": "^0.5.0", "body-parser": "^1.20.3", "cors": "^2.8.5", - "dotprompt": "^1.0.0", + "dotprompt": "^1.1.1", "express": "^4.21.0", "get-port": "^5.1.0", "json-schema": "^0.4.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.22.4" + }, + "optionalDependencies": { + "@genkit-ai/firebase": "^1.16.1" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" } }, "node_modules/@genkit-ai/dev-local-vectorstore": { @@ -667,22 +718,30 @@ } }, "node_modules/@genkit-ai/firebase": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/firebase/-/firebase-1.0.4.tgz", - "integrity": "sha512-3r8vCjIfLqF8K9jMzJHAwBm1reS1TOzABVtnq5AiHEjs+JzYGFy5kKaJDbshokHxWasu+4S6tQA9edRtj5zTOw==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/firebase/-/firebase-1.22.0.tgz", + "integrity": "sha512-iTOVma8be8cOFzO9yaNuzBIICgFAP+N1cuB5T8K5LE5ahsSIG7sZWUE5FwMKtEDFk9D343kgLuvW9nxLkV7IzA==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/google-cloud": "^1.0.4" + "@genkit-ai/google-cloud": "^1.22.0" }, "peerDependencies": { - "@google-cloud/firestore": "^7.6.0", + "@google-cloud/firestore": "^7.11.0", + "firebase": ">=11.5.0", "firebase-admin": ">=12.2", - "genkit": "^1.0.4" + "genkit": "^1.22.0" + }, + "peerDependenciesMeta": { + "firebase": { + "optional": true + } } }, "node_modules/@genkit-ai/google-cloud": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.0.4.tgz", - "integrity": "sha512-llt9L+4VJuIfOw9OPA64iWOsb3FbH1jyoOmVrK8N97dkrhsMOay+J7YuKu70KJpWpULgexkMMRer1Rws00DCCA==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.22.0.tgz", + "integrity": "sha512-PVt7oLu3VARQ4u/R4VvG/q2lsEdTke9jxQI8sg1jxHoKV03fNUwKAyNd59ZT4igrQIUCqdJD4tH3Kzh4yd4QTw==", + "license": "Apache-2.0", "dependencies": { "@google-cloud/logging-winston": "^6.0.0", "@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.19.0", @@ -690,20 +749,106 @@ "@google-cloud/opentelemetry-resource-util": "^2.4.0", "@opentelemetry/api": "^1.9.0", "@opentelemetry/auto-instrumentations-node": "^0.49.1", - "@opentelemetry/core": "^1.25.0", + "@opentelemetry/core": "~1.25.0", "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/instrumentation-pino": "^0.41.0", "@opentelemetry/instrumentation-winston": "^0.39.0", - "@opentelemetry/resources": "^1.25.0", - "@opentelemetry/sdk-metrics": "^1.25.0", + "@opentelemetry/resources": "~1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", "@opentelemetry/sdk-node": "^0.52.0", - "@opentelemetry/sdk-trace-base": "^1.25.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", "google-auth-library": "^9.6.3", "node-fetch": "^3.3.2", "winston": "^3.12.0" }, "peerDependencies": { - "genkit": "^1.0.4" + "genkit": "^1.22.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@genkit-ai/google-genai": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-genai/-/google-genai-1.22.0.tgz", + "integrity": "sha512-Bdzjy15zWBt5GGRmzjSh2jp73fyFt3X0la9jvECmxzn1zjVl68/OU3WJAoAD+z3N4F258NmXzsMh6t5QA9INFQ==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.2" + }, + "peerDependencies": { + "genkit": "^1.22.0" } }, "node_modules/@genkit-ai/telemetry-server": { @@ -759,63 +904,6 @@ "zod-to-json-schema": "^3.22.4" } }, - "node_modules/@genkit-ai/vertexai": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@genkit-ai/vertexai/-/vertexai-1.0.4.tgz", - "integrity": "sha512-DprsooHms+iYpaDwagUIE0SqS1GgO4f6YlXCrwhl0NsVObYyDDJABZUO8AA58eglQp0WPjUSQRVXwWy6viZeLA==", - "dependencies": { - "@anthropic-ai/sdk": "^0.24.3", - "@anthropic-ai/vertex-sdk": "^0.4.0", - "@google-cloud/aiplatform": "^3.23.0", - "@google-cloud/vertexai": "^1.9.3", - "@mistralai/mistralai-gcp": "^1.3.5", - "google-auth-library": "^9.14.2", - "googleapis": "^140.0.1", - "node-fetch": "^3.3.2", - "openai": "^4.52.7" - }, - "optionalDependencies": { - "@google-cloud/bigquery": "^7.8.0", - "firebase-admin": ">=12.2" - }, - "peerDependencies": { - "genkit": "^1.0.4" - } - }, - "node_modules/@google-cloud/aiplatform": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/@google-cloud/aiplatform/-/aiplatform-3.34.0.tgz", - "integrity": "sha512-Ii1CXJ59g5hcVYNZOx08XBV5nq0JIOSo2I9uC/WYkdXWekc3XSV9emRz8pKOQSULzrTOTnD80N4re49S07xfyQ==", - "dependencies": { - "google-gax": "^4.0.3", - "protobuf.js": "^1.1.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@google-cloud/bigquery": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.1.tgz", - "integrity": "sha512-ZkcRMpBoFLxIh6TiQBywA22yT3c2j0f07AHWEMjtYqMQzZQbFrpxuJU2COp3tyjZ91ZIGHe4gY7/dGZL88cltg==", - "optional": true, - "dependencies": { - "@google-cloud/common": "^5.0.0", - "@google-cloud/paginator": "^5.0.2", - "@google-cloud/precise-date": "^4.0.0", - "@google-cloud/promisify": "^4.0.0", - "arrify": "^2.0.1", - "big.js": "^6.0.0", - "duplexify": "^4.0.0", - "extend": "^3.0.2", - "is": "^3.3.0", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@google-cloud/common": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz", @@ -851,14 +939,15 @@ } }, "node_modules/@google-cloud/logging": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.0.tgz", - "integrity": "sha512-Ma94jvuoMpbgNniwtelOt8w82hxK62FuOXZonEv0Hyk3B+/YVuLG/SWNyY9yMso/RXnPEc1fP2qo9kDrjf/b2w==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.1.tgz", + "integrity": "sha512-2h9HBJG3OAsvzXmb81qXmaTPfXYU7KJTQUxunoOKFGnY293YQ/eCkW1Y5mHLocwpEqeqQYT/Qvl6Tk+Q7PfStw==", + "license": "Apache-2.0", "dependencies": { "@google-cloud/common": "^5.0.0", "@google-cloud/paginator": "^5.0.0", "@google-cloud/projectify": "^4.0.0", - "@google-cloud/promisify": "^4.0.0", + "@google-cloud/promisify": "4.0.0", "@opentelemetry/api": "^1.7.0", "arrify": "^2.0.1", "dot-prop": "^6.0.0", @@ -877,9 +966,10 @@ } }, "node_modules/@google-cloud/logging-winston": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-6.0.0.tgz", - "integrity": "sha512-/lVp7CyT3nFOr+AjQlZnJhTIOf+kcNGB4JTziL0fkX6Ov/2qNKtRGS/NqE6cD+VSPiv5jLOty3LgkRsXMpYxQQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-6.0.1.tgz", + "integrity": "sha512-tgA/qe/aGZITMrJ/5Tuykv234pLb/Qo6iDZ8SDkjbsiIy69mLQmbphrUd/IqnE17BSDfrwDUckvWdghiy8b+Qg==", + "license": "Apache-2.0", "dependencies": { "@google-cloud/logging": "^11.0.0", "google-auth-library": "^9.0.0", @@ -897,6 +987,7 @@ "version": "0.19.0", "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-monitoring-exporter/-/opentelemetry-cloud-monitoring-exporter-0.19.0.tgz", "integrity": "sha512-5SOPXwC6RET4ZvXxw5D97dp8fWpqWEunHrzrUUGXhG4UAeedQe1KvYV8CK+fnaAbN2l2ha6QDYspT6z40TVY0g==", + "license": "Apache-2.0", "dependencies": { "@google-cloud/opentelemetry-resource-util": "^2.3.0", "@google-cloud/precise-date": "^4.0.0", @@ -917,6 +1008,7 @@ "version": "137.1.0", "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-137.1.0.tgz", "integrity": "sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==", + "license": "Apache-2.0", "dependencies": { "google-auth-library": "^9.0.0", "googleapis-common": "^7.0.0" @@ -929,6 +1021,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-trace-exporter/-/opentelemetry-cloud-trace-exporter-2.4.1.tgz", "integrity": "sha512-Dq2IyAyA9PCjbjLOn86i2byjkYPC59b5ic8k/L4q5bBWH0Jro8lzMs8C0G5pJfqh2druj8HF+oAIAlSdWQ+Z9Q==", + "license": "Apache-2.0", "dependencies": { "@google-cloud/opentelemetry-resource-util": "^2.4.0", "@grpc/grpc-js": "^1.1.8", @@ -949,6 +1042,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-resource-util/-/opentelemetry-resource-util-2.4.0.tgz", "integrity": "sha512-/7ujlMoKtDtrbQlJihCjQnm31n2s2RTlvJqcSbt2jV3OkCzPAdo3u31Q13HNugqtIRUSk7bUoLx6AzhURkhW4w==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "^1.22.0", "gcp-metadata": "^6.0.0" @@ -1001,6 +1095,7 @@ "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.15.0.tgz", "integrity": "sha512-/j/+8DFuEOo33fbdX0V5wjooOoFahEaMEdImHBmM2tH9MPHJYNtmXOf2sGUmZmiufSukmBEvdlzYgDkkgeBiVQ==", "optional": true, + "peer": true, "dependencies": { "@google-cloud/paginator": "^5.0.0", "@google-cloud/projectify": "^4.0.0", @@ -1027,21 +1122,11 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "optional": true, + "peer": true, "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/@google-cloud/vertexai": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@google-cloud/vertexai/-/vertexai-1.9.3.tgz", - "integrity": "sha512-35o5tIEMLW3JeFJOaaMNR2e5sq+6rpnhrF97PuAxeOm0GlqVTESKhkGj7a5B5mmJSSSU3hUfIhcQCRRsw4Ipzg==", - "dependencies": { - "google-auth-library": "^9.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@grpc/grpc-js": { "version": "1.12.5", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.5.tgz", @@ -1206,17 +1291,6 @@ "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/@mistralai/mistralai-gcp": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@mistralai/mistralai-gcp/-/mistralai-gcp-1.4.0.tgz", - "integrity": "sha512-QYBbR/T1U4qZ88m6l5RpOlhly2mXWsXi0owicSX6zt6pBaMORxRs6ZRLmaYX5BNjGqxQUl+LtsSwpMtXW2uU2A==", - "dependencies": { - "google-auth-library": "^9.11.0" - }, - "peerDependencies": { - "zod": ">= 3" - } - }, "node_modules/@opentelemetry/api": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", @@ -1240,6 +1314,7 @@ "version": "0.49.2", "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.49.2.tgz", "integrity": "sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/instrumentation-amqplib": "^0.41.0", @@ -1329,6 +1404,34 @@ "node": ">=14" } }, + "node_modules/@opentelemetry/exporter-jaeger": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-jaeger/-/exporter-jaeger-1.30.1.tgz", + "integrity": "sha512-7Ki+x7cZ/PEQxp3UyB+CWkWBqLk22yRGQ4AWIGwZlEs6rpCOdWwIFOyQDO9DdeyWtTPTvO3An/7chPZcRHOgzQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0", + "jaeger-client": "^3.15.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", @@ -1636,6 +1739,7 @@ "version": "0.41.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.41.0.tgz", "integrity": "sha512-00Oi6N20BxJVcqETjgNzCmVKN+I5bJH/61IlHiIWd00snj1FdgiIKlpE4hYVacTB2sjIBB3nTbHskttdZEE2eg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -1652,6 +1756,7 @@ "version": "0.43.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.43.0.tgz", "integrity": "sha512-pSxcWlsE/pCWQRIw92sV2C+LmKXelYkjkA7C5s39iPUi4pZ2lA1nIiw+1R/y2pDEhUHcaKkNyljQr3cx9ZpVlQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/propagator-aws-xray": "^1.3.1", @@ -1670,6 +1775,7 @@ "version": "0.43.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.43.1.tgz", "integrity": "sha512-qLT2cCniJ5W+6PFzKbksnoIQuq9pS83nmgaExfUwXVvlwi0ILc50dea0tWBHZMkdIDa/zZdcuFrJ7+fUcSnRow==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -1687,6 +1793,7 @@ "version": "0.40.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.40.0.tgz", "integrity": "sha512-aZ4cXaGWwj79ZXSYrgFVsrDlE4mmf2wfvP9bViwRc0j75A6eN6GaHYHqufFGMTCqASQn5pIjjP+Bx+PWTGiofw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "^0.52.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -1703,6 +1810,7 @@ "version": "0.40.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.40.0.tgz", "integrity": "sha512-JxbM39JU7HxE9MTKKwi6y5Z3mokjZB2BjwfqYi4B3Y29YO3I42Z7eopG6qq06yWZc+nQli386UDQe0d9xKmw0A==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0" @@ -1718,6 +1826,7 @@ "version": "0.38.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz", "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -1735,6 +1844,7 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.8.0.tgz", "integrity": "sha512-ieTm4RBIlZt2brPwtX5aEZYtYnkyqhAVXJI9RIohiBVMe5DxiwCwt+2Exep/nDVqGPX8zRBZUl4AEw423OxJig==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0" @@ -1750,6 +1860,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.11.0.tgz", "integrity": "sha512-27urJmwkH4KDaMJtEv1uy2S7Apk4XbN4AgWMdfMJbi7DnOduJmeuA+DpJCwXB72tEWXo89z5T3hUVJIDiSNmNw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0" }, @@ -1764,6 +1875,7 @@ "version": "0.38.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.38.0.tgz", "integrity": "sha512-Um07I0TQXDWa+ZbEAKDFUxFH40dLtejtExDOMLNJ1CL8VmOmA71qx93Qi/QG4tGkiI1XWqr7gF/oiMCJ4m8buQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "semver": "^7.5.4" @@ -1779,6 +1891,7 @@ "version": "0.41.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz", "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -1795,6 +1908,7 @@ "version": "0.38.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz", "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -1811,6 +1925,7 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz", "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0" @@ -1826,6 +1941,7 @@ "version": "0.38.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.38.1.tgz", "integrity": "sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0" }, @@ -1840,6 +1956,7 @@ "version": "0.42.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz", "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0" }, @@ -1854,6 +1971,7 @@ "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "0.52.1", "@opentelemetry/semantic-conventions": "1.25.1" @@ -1869,6 +1987,7 @@ "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -1877,6 +1996,7 @@ "version": "0.40.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz", "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -1893,6 +2013,7 @@ "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/instrumentation": "0.52.1", @@ -1910,6 +2031,7 @@ "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "1.25.1" }, @@ -1924,6 +2046,7 @@ "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -1932,6 +2055,7 @@ "version": "0.42.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz", "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/redis-common": "^0.36.2", @@ -1948,6 +2072,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.2.0.tgz", "integrity": "sha512-uKKmhEFd0zR280tJovuiBG7cfnNZT4kvVTvqtHPxQP7nOmRbJstCYHFH13YzjVcKjkmoArmxiSulmZmF7SLIlg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.24.0" @@ -1963,6 +2088,7 @@ "version": "0.39.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.39.0.tgz", "integrity": "sha512-lRwTqIKQecPWDkH1KEcAUcFhCaNssbKSpxf4sxRTAROCwrCEnYkjOuqJHV+q1/CApjMTaKu0Er4LBv/6bDpoxA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0" @@ -1978,6 +2104,7 @@ "version": "0.42.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz", "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -1994,6 +2121,7 @@ "version": "0.39.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.39.0.tgz", "integrity": "sha512-eU1Wx1RRTR/2wYXFzH9gcpB8EPmhYlNDIUHzUXjyUE0CAXEJhBLkYNlzdaVCoQDw2neDqS+Woshiia6+emWK9A==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0" }, @@ -2008,6 +2136,7 @@ "version": "0.38.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.38.0.tgz", "integrity": "sha512-tPmyqQEZNyrvg6G+iItdlguQEcGzfE+bJkpQifmBXmWBnoS5oU3UxqtyYuXGL2zI9qQM5yMBHH4nRXWALzy7WA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.23.0", @@ -2024,6 +2153,7 @@ "version": "0.46.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz", "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/sdk-metrics": "^1.9.1", @@ -2040,6 +2170,7 @@ "version": "0.41.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.41.0.tgz", "integrity": "sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -2056,6 +2187,7 @@ "version": "0.40.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz", "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0", @@ -2072,6 +2204,7 @@ "version": "0.40.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz", "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0", @@ -2088,6 +2221,7 @@ "version": "0.39.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz", "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.23.0" @@ -2103,6 +2237,7 @@ "version": "0.38.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.38.0.tgz", "integrity": "sha512-stjow1PijcmUquSmRD/fSihm/H61DbjPlJuJhWUe7P22LFPjFhsrSeiB5vGj3vn+QGceNAs+kioUTzMGPbNxtg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.23.0" @@ -2118,6 +2253,7 @@ "version": "0.43.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz", "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0", @@ -2136,6 +2272,7 @@ "version": "0.41.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.41.0.tgz", "integrity": "sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "^0.52.0", "@opentelemetry/core": "^1.25.0", @@ -2152,6 +2289,7 @@ "version": "0.41.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.41.0.tgz", "integrity": "sha512-RJ1pwI3btykp67ts+5qZbaFSAAzacucwBet5/5EsKYtWBpHbWwV/qbGN/kIBzXg5WEZBhXLrR/RUq0EpEUpL3A==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/redis-common": "^0.36.2", @@ -2168,6 +2306,7 @@ "version": "0.41.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.1.tgz", "integrity": "sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/redis-common": "^0.36.2", @@ -2184,6 +2323,7 @@ "version": "0.40.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.40.0.tgz", "integrity": "sha512-sm/rH/GysY/KOEvZqYBZSLYFeXlBkHCgqPDgWc07tz+bHCN6mPs9P3otGOSTe7o3KAIM8Nc6ncCO59vL+jb2cA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", @@ -2200,6 +2340,7 @@ "version": "0.39.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.39.0.tgz", "integrity": "sha512-LaXnVmD69WPC4hNeLzKexCCS19hRLrUw3xicneAMkzJSzNJvPyk7G6I7lz7VjQh1cooObPBt9gNyd3hhTCUrag==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0" @@ -2215,6 +2356,7 @@ "version": "0.41.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.41.0.tgz", "integrity": "sha512-7fzDe9/FpO6NFizC/wnzXXX7bF9oRchsD//wFqy5g5hVEgXZCQ70IhxjrKdBvgjyIejR9T9zTvfQ6PfVKfkCAw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0" @@ -2230,6 +2372,7 @@ "version": "0.13.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.13.0.tgz", "integrity": "sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0", @@ -2246,6 +2389,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.5.0.tgz", "integrity": "sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0" @@ -2261,6 +2405,7 @@ "version": "0.39.0", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.39.0.tgz", "integrity": "sha512-v/1xziLJ9CyB3YDjBSBzbB70Qd0JwWTo36EqWK5m3AR0CzsyMQQmf3ZIZM6sgx7hXMcRQ0pnEYhg6nhrUQPm9A==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "^0.52.0", "@opentelemetry/instrumentation": "^0.52.0" @@ -2438,9 +2583,10 @@ } }, "node_modules/@opentelemetry/propagation-utils": { - "version": "0.30.15", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.15.tgz", - "integrity": "sha512-nQ30K+eXTkd9Kt8yep9FPrqogS712GvdkV6R1T+xZMSZnFrRCyZuWxMtP3+s3hrK2HWw3ti4lsIfBzsHWYiyrA==", + "version": "0.30.16", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.16.tgz", + "integrity": "sha512-ZVQ3Z/PQ+2GQlrBfbMMMT0U7MzvYZLCPP800+ooyaBqm4hMvuQHfP028gB9/db0mwkmyEAMad9houukUVxhwcw==", + "license": "Apache-2.0", "engines": { "node": ">=14" }, @@ -2449,9 +2595,10 @@ } }, "node_modules/@opentelemetry/propagator-aws-xray": { - "version": "1.26.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.26.1.tgz", - "integrity": "sha512-rMffLq+rPJrejFPv40MQGXFroAfyg9zfVzO0Jy4wbfEkSJ4uOIeC8T2aAf7Z5igZ7nPZsQJ7xLpbCSq8MnQziQ==", + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.26.2.tgz", + "integrity": "sha512-k43wxTjKYvwfce9L4eT8fFYy/ATmCfPHZPZsyT/6ABimf2KE1HafoOsIcxLOtmNSZt6dCvBIYCrXaOWta20xJg==", + "license": "Apache-2.0", "engines": { "node": ">=14" }, @@ -2535,6 +2682,7 @@ "version": "0.36.2", "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -2543,6 +2691,7 @@ "version": "0.29.7", "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.29.7.tgz", "integrity": "sha512-PExUl/R+reSQI6Y/eNtgAsk6RHk1ElYSzOa8/FHfdc/nLmx9sqMasBEpLMkETkzDP7t27ORuXe4F9vwkV2uwwg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.26.0", "@opentelemetry/resources": "^1.10.0", @@ -2556,9 +2705,10 @@ } }, "node_modules/@opentelemetry/resource-detector-aws": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.11.0.tgz", - "integrity": "sha512-j7qQ75enAJrlSPkPowasScuukZ2ffFG659rhxOpUM4dBe/O8Jpq+dy4pIdFtjWKkM9i7LgisdUt/GW7wGIWoEQ==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.12.0.tgz", + "integrity": "sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.0.0", "@opentelemetry/resources": "^1.10.0", @@ -2575,6 +2725,7 @@ "version": "0.2.12", "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.12.tgz", "integrity": "sha512-iIarQu6MiCjEEp8dOzmBvCSlRITPFTinFB2oNKAjU6xhx8d7eUcjNOKhBGQTvuCriZrxrEvDaEEY9NfrPQ6uYQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.25.1", "@opentelemetry/resources": "^1.10.1", @@ -2591,6 +2742,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.4.4.tgz", "integrity": "sha512-ZEN2mq7lIjQWJ8NTt1umtr6oT/Kb89856BOmESLSvgSHbIwOFYs7cSfSRH5bfiVw6dXTQAVbZA/wLgCHKrebJA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.26.0", "@opentelemetry/resources": "^1.10.0", @@ -2607,6 +2759,7 @@ "version": "0.29.13", "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.13.tgz", "integrity": "sha512-vdotx+l3Q+89PeyXMgKEGnZ/CwzwMtuMi/ddgD9/5tKZ08DfDGB2Npz9m2oXPHRCjc4Ro6ifMqFlRyzIvgOjhg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.0.0", "@opentelemetry/resources": "^1.10.0", @@ -2903,9 +3056,10 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.29.0.tgz", - "integrity": "sha512-KZ1JsXcP2pqunfsJBNk+py6AJ5R6ZJ3yvM5Lhhf93rHPHvdDzgfMYPS4F7GNO3j/MVDCtfbttrkcpu7sl0Wu/Q==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", + "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -2914,6 +3068,7 @@ "version": "0.40.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.1.0" }, @@ -3008,12 +3163,14 @@ "node_modules/@types/aws-lambda": { "version": "8.10.122", "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.122.tgz", - "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==" + "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==", + "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "peer": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -3023,6 +3180,7 @@ "version": "1.8.9", "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3044,6 +3202,7 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "peer": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -3055,6 +3214,7 @@ "version": "4.19.6", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "peer": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3062,29 +3222,23 @@ "@types/send": "*" } }, - "node_modules/@types/handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==", - "deprecated": "This is a stub types definition. handlebars provides its own type definitions, so you do not need this installed.", - "dependencies": { - "handlebars": "*" - } - }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "peer": true }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, "node_modules/@types/jsonwebtoken": { "version": "9.0.8", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.8.tgz", "integrity": "sha512-7fx54m60nLFUVYlxAB1xpe9CBWX2vSrk50Y6ogRJ1v5xxtba7qXTg5BgYDN5dq+yuQQ9HaVlHJyAAt1/mxryFg==", + "peer": true, "dependencies": { "@types/ms": "*", "@types/node": "*" @@ -3099,6 +3253,7 @@ "version": "2.2.10", "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3106,17 +3261,20 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "peer": true }, "node_modules/@types/ms": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "peer": true }, "node_modules/@types/mysql": { "version": "2.15.22", "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3129,19 +3287,11 @@ "undici-types": "~5.26.4" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, "node_modules/@types/pg": { "version": "8.6.1", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", "dependencies": { "@types/node": "*", "pg-protocol": "*", @@ -3152,6 +3302,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz", "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==", + "license": "MIT", "dependencies": { "@types/pg": "*" } @@ -3159,12 +3310,14 @@ "node_modules/@types/qs": { "version": "6.9.18", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==" + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "peer": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "peer": true }, "node_modules/@types/request": { "version": "2.48.12", @@ -3195,6 +3348,7 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "peer": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -3204,6 +3358,7 @@ "version": "1.15.7", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "peer": true, "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -3219,6 +3374,7 @@ "version": "4.0.14", "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3302,17 +3458,6 @@ "node": ">= 14" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -3344,6 +3489,14 @@ } } }, + "node_modules/ansi-color": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.1.tgz", + "integrity": "sha512-bF6xLaZBLpOQzgYUtYEhJx090nPSZk1BQ/q2oyBK9aMMcJHzx9uXGCjI2Y+LebsN4Jwoykr0V9whbPiogdyHoQ==", + "engines": { + "node": "*" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -3431,6 +3584,7 @@ "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "optional": true, + "peer": true, "dependencies": { "retry": "0.13.1" } @@ -3476,19 +3630,6 @@ } ] }, - "node_modules/big.js": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", - "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", - "optional": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bigjs" - } - }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", @@ -3602,6 +3743,20 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, + "node_modules/bufrw": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/bufrw/-/bufrw-1.4.0.tgz", + "integrity": "sha512-sWm8iPbqvL9+5SiYxXH73UOkyEbGQg7kyHQmReF89WJHQJw2eV4P/yZ0E+b71cczJ4pPobVhXxgQcmfSTgGHxQ==", + "dependencies": { + "ansi-color": "^0.2.1", + "error": "^7.0.0", + "hexer": "^1.5.0", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.x" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -3935,6 +4090,7 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -4041,6 +4197,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -4052,13 +4209,13 @@ } }, "node_modules/dotprompt": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dotprompt/-/dotprompt-1.0.1.tgz", - "integrity": "sha512-mruM6m+pWe4t41InRDRchNLSl3x+q7iIBukVuUfb7vvN7aEOwP+BuONACAdaEeAqlMDtWHcTsuqqBdAAjGwamg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dotprompt/-/dotprompt-1.1.2.tgz", + "integrity": "sha512-24EU+eORQbPywBicIP44BiqykzEXFwZq1ZQKO5TEr9KrrENyDA7I1NzqhtmmEdQVfAXka0DEbSLPN5nerCqJ8A==", + "license": "ISC", "dependencies": { - "@types/handlebars": "^4.1.0", "handlebars": "^4.7.8", - "yaml": "^2.5.0" + "yaml": "^2.8.0" } }, "node_modules/dunder-proto": { @@ -4136,6 +4293,15 @@ "once": "^1.4.0" } }, + "node_modules/error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw==", + "dependencies": { + "string-template": "~0.2.1", + "xtend": "~4.0.0" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -4259,6 +4425,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", + "license": "Apache-2.0", "dependencies": { "uuid": "^8.0.0" }, @@ -4270,6 +4437,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -4371,6 +4539,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/farmhash-modern/-/farmhash-modern-1.1.0.tgz", "integrity": "sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA==", + "peer": true, "engines": { "node": ">=18.0.0" } @@ -4410,6 +4579,7 @@ } ], "optional": true, + "peer": true, "dependencies": { "strnum": "^1.0.5" }, @@ -4421,6 +4591,7 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "peer": true, "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -4512,6 +4683,7 @@ "version": "13.0.2", "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.0.2.tgz", "integrity": "sha512-YWVpoN+tZVSRXF0qC0gojoF5bSqvBRbnBk8+xUtFiguM2L4vB7f0moAwV1VVWDDHvTnvQ68OyTMpdp6wKo/clw==", + "peer": true, "dependencies": { "@fastify/busboy": "^3.0.0", "@firebase/database-compat": "^2.0.0", @@ -4536,6 +4708,7 @@ "version": "22.13.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", + "peer": true, "dependencies": { "undici-types": "~6.20.0" } @@ -4543,7 +4716,8 @@ "node_modules/firebase-admin/node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "peer": true }, "node_modules/firebase-admin/node_modules/uuid": { "version": "11.0.5", @@ -4553,6 +4727,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "peer": true, "bin": { "uuid": "dist/esm/bin/uuid" } @@ -4602,6 +4777,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4611,31 +4787,6 @@ "node": ">= 6" } }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/formdata-node/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "engines": { - "node": ">= 14" - } - }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -4744,12 +4895,13 @@ } }, "node_modules/genkit": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.0.4.tgz", - "integrity": "sha512-QJBvz8tJBQaqaHwBge3Hf4xoDNWJ8VVyDtKJsbCGEMwKnZa+g9Qh3LyBPx14RpPpJizZrr2j8Rvv0IocMEaj6Q==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.22.0.tgz", + "integrity": "sha512-GoVVO3EnNHrjkMkUPRvgx1MjBHKvOlZAu/ffMIJgLFxrH7rrUbvfHXE6Nk7uh5BNvET7+DApyhbhqz9G8sy+mQ==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/ai": "1.0.4", - "@genkit-ai/core": "1.0.4", + "@genkit-ai/ai": "1.22.0", + "@genkit-ai/core": "1.22.0", "uuid": "^10.0.0" } }, @@ -4964,18 +5116,6 @@ "node": ">=14" } }, - "node_modules/googleapis": { - "version": "140.0.1", - "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-140.0.1.tgz", - "integrity": "sha512-ZGvBX4mQcFXO9ACnVNg6Aqy3KtBPB5zTuue43YVLxwn8HSv8jB7w+uDKoIPSoWuxGROgnj2kbng6acXncOQRNA==", - "dependencies": { - "google-auth-library": "^9.0.0", - "googleapis-common": "^7.0.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/googleapis-common": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz", @@ -5025,6 +5165,7 @@ "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -5072,6 +5213,31 @@ "node": ">= 0.4" } }, + "node_modules/hexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/hexer/-/hexer-1.5.0.tgz", + "integrity": "sha512-dyrPC8KzBzUJ19QTIo1gXNqIISRXQ0NwteW6OeQHRN4ZuZeHkdODfj0zHBdOlHbRY8GqbqK57C9oWSvQZizFsg==", + "dependencies": { + "ansi-color": "^0.2.1", + "minimist": "^1.1.0", + "process": "^0.10.0", + "xtend": "^4.0.0" + }, + "bin": { + "hexer": "cli.js" + }, + "engines": { + "node": ">= 0.10.x" + } + }, + "node_modules/hexer/node_modules/process": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/process/-/process-0.10.1.tgz", + "integrity": "sha512-dyIett8dgGIZ/TXKUzeYExt7WA6ldDzys9vTDU/cCA9L17Ypme+KzS+NjQCjpn9xsvi/shbMC+yP/BcFMBz0NA==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/html-entities": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", @@ -5105,7 +5271,8 @@ "node_modules/http-parser-js": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", - "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==" + "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "peer": true }, "node_modules/http-proxy-agent": { "version": "5.0.0", @@ -5185,14 +5352,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5284,15 +5443,6 @@ "node": ">= 0.10" } }, - "node_modules/is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "optional": true, - "engines": { - "node": "*" - } - }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -5438,10 +5588,36 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jaeger-client": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/jaeger-client/-/jaeger-client-3.19.0.tgz", + "integrity": "sha512-M0c7cKHmdyEUtjemnJyx/y9uX16XHocL46yQvyqDlPdvAcwPDbHrIbKjQdBqtiE4apQ/9dmr+ZLJYYPGnurgpw==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0", + "opentracing": "^0.14.4", + "thriftrw": "^3.5.0", + "uuid": "^8.3.2", + "xorshift": "^1.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jaeger-client/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/jose": { "version": "4.15.9", "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "peer": true, "funding": { "url": "https://github.com/sponsors/panva" } @@ -5493,6 +5669,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -5504,6 +5681,7 @@ "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "peer": true, "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -5525,6 +5703,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "peer": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -5535,6 +5714,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "peer": true, "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -5543,7 +5723,8 @@ "node_modules/jsonwebtoken/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "peer": true }, "node_modules/jwa": { "version": "2.0.0", @@ -5559,6 +5740,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.1.0.tgz", "integrity": "sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==", + "peer": true, "dependencies": { "@types/express": "^4.17.17", "@types/jsonwebtoken": "^9.0.2", @@ -5575,6 +5757,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "peer": true, "dependencies": { "ms": "^2.1.3" }, @@ -5590,7 +5773,8 @@ "node_modules/jwks-rsa/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "peer": true }, "node_modules/jws": { "version": "4.0.0", @@ -5609,7 +5793,8 @@ "node_modules/limiter": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "peer": true }, "node_modules/lodash": { "version": "4.17.21", @@ -5625,42 +5810,50 @@ "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "peer": true }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "peer": true }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "peer": true }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "peer": true }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "peer": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "peer": true }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "peer": true }, "node_modules/lodash.mapvalues": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -5670,7 +5863,8 @@ "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "peer": true }, "node_modules/log-symbols": { "version": "4.1.0", @@ -5718,6 +5912,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5729,6 +5924,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", + "peer": true, "dependencies": { "lodash.clonedeep": "^4.5.0", "lru-cache": "6.0.0" @@ -5801,6 +5997,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "optional": true, + "peer": true, "bin": { "mime": "cli.js" }, @@ -5855,6 +6052,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5895,7 +6093,8 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", @@ -5936,10 +6135,17 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "peer": true, "engines": { "node": ">= 6.13.0" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5953,6 +6159,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6030,54 +6237,6 @@ "node": ">=8" } }, - "node_modules/openai": { - "version": "4.82.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.82.0.tgz", - "integrity": "sha512-1bTxOVGZuVGsKKUWbh3BEwX1QxIXUftJv+9COhhGGVDTFwiaOd4gWsMynF2ewj1mg6by3/O+U8+EEHpWRdPaJg==", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/openai/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/openapi3-ts": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-4.4.0.tgz", @@ -6087,6 +6246,15 @@ "yaml": "^2.5.0" } }, + "node_modules/opentracing": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", + "integrity": "sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -6115,6 +6283,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "optional": true, + "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -6142,7 +6311,8 @@ "node_modules/partial-json": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", - "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==" + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "license": "MIT" }, "node_modules/path": { "version": "0.12.7", @@ -6213,19 +6383,22 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", "engines": { "node": ">=4.0.0" } }, "node_modules/pg-protocol": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", - "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" }, "node_modules/pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -6253,6 +6426,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -6261,6 +6435,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6269,6 +6444,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6277,6 +6453,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -6303,22 +6480,6 @@ "node": ">=14.0.0" } }, - "node_modules/protobuf.js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/protobuf.js/-/protobuf.js-1.1.2.tgz", - "integrity": "sha512-USO7Xus/pzPw549M1TguiyoOrKEhm9VMXv+CkDufcjMC8Rd7EPbxeRQPEjCV8ua1tm0k7z9xHkogcxovZogWdA==", - "dependencies": { - "long": "~1.1.2" - } - }, - "node_modules/protobuf.js/node_modules/long": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/long/-/long-1.1.5.tgz", - "integrity": "sha512-TU6nAF5SdasnTr28c7e74P4Crbn9o3/zwo1pM22Wvg2i2vlZ4Eelxwu4QT7j21z0sDBlJDEnEZjXTZg2J8WJrg==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/protobufjs": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", @@ -6388,6 +6549,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "license": "MIT", "dependencies": { "duplexify": "^4.1.1", "inherits": "^2.0.3", @@ -6557,6 +6719,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "optional": true, + "peer": true, "engines": { "node": ">= 4" } @@ -6916,6 +7079,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -6978,6 +7142,11 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -7034,7 +7203,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "optional": true + "optional": true, + "peer": true }, "node_modules/stubs": { "version": "3.0.0", @@ -7159,6 +7329,31 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, + "node_modules/thriftrw": { + "version": "3.11.4", + "resolved": "https://registry.npmjs.org/thriftrw/-/thriftrw-3.11.4.tgz", + "integrity": "sha512-UcuBd3eanB3T10nXWRRMwfwoaC6VMk7qe3/5YIWP2Jtw+EbHqJ0p1/K3x8ixiR5dozKSSfcg1W+0e33G1Di3XA==", + "dependencies": { + "bufrw": "^1.2.1", + "error": "7.0.2", + "long": "^2.4.0" + }, + "bin": { + "thrift2json": "thrift2json.js" + }, + "engines": { + "node": ">= 0.10.x" + } + }, + "node_modules/thriftrw/node_modules/long": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz", + "integrity": "sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.6" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -7280,6 +7475,7 @@ "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -7313,6 +7509,12 @@ "node": ">= 0.8" } }, + "node_modules/uri-templates": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/uri-templates/-/uri-templates-0.2.0.tgz", + "integrity": "sha512-EWkjYEN0L6KOfEoOH6Wj4ghQqU7eBZMJqRHQnxQAq+dSEzRPClkWjf8557HkWQXF6BrAUoLSAyy9i3RVTliaNg==", + "license": "http://geraintluff.github.io/tv4/LICENSE.txt" + }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", @@ -7400,6 +7602,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "peer": true, "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -7413,6 +7616,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "peer": true, "engines": { "node": ">=0.8.0" } @@ -7478,7 +7682,8 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" }, "node_modules/wrap-ansi": { "version": "6.2.0", @@ -7544,10 +7749,17 @@ "node": ">=8" } }, + "node_modules/xorshift": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xorshift/-/xorshift-1.2.0.tgz", + "integrity": "sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g==", + "license": "MIT" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } @@ -7563,17 +7775,19 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true }, "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { @@ -7616,6 +7830,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "optional": true, + "peer": true, "engines": { "node": ">=10" }, diff --git a/samples/js-menu/package.json b/samples/js-menu/package.json index 707b42a3df..34502d58ad 100644 --- a/samples/js-menu/package.json +++ b/samples/js-menu/package.json @@ -19,7 +19,7 @@ "@genkit-ai/dev-local-vectorstore": "^1.0.4", "@genkit-ai/evaluator": "^1.0.4", "@genkit-ai/firebase": "^1.0.4", - "@genkit-ai/vertexai": "^1.0.4", + "@genkit-ai/google-genai": "^1.0.4", "genkit": "^1.0.4" }, "devDependencies": { diff --git a/samples/js-menu/src/01/prompts.ts b/samples/js-menu/src/01/prompts.ts index 75d256495d..3ebdec3e03 100644 --- a/samples/js-menu/src/01/prompts.ts +++ b/samples/js-menu/src/01/prompts.ts @@ -15,7 +15,7 @@ */ import type { GenerateRequest } from '@genkit-ai/ai/model'; -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { ai } from '../genkit.js'; import { MenuQuestionInputSchema, type MenuQuestionInput } from '../types'; @@ -48,7 +48,7 @@ export const s01_vanillaPrompt = ai.definePrompt( export const s01_staticMenuDotPrompt = ai.definePrompt( { name: 's01_staticMenuDotPrompt', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: MenuQuestionInputSchema }, output: { format: 'text' }, }, diff --git a/samples/js-menu/src/02/prompts.ts b/samples/js-menu/src/02/prompts.ts index 9ca0519ed1..2d969481ec 100644 --- a/samples/js-menu/src/02/prompts.ts +++ b/samples/js-menu/src/02/prompts.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { ai } from '../genkit.js'; import { MenuQuestionInputSchema } from '../types'; import { menuTool } from './tools'; @@ -25,7 +25,7 @@ import { menuTool } from './tools'; export const s02_dataMenuPrompt = ai.definePrompt( { name: 's02_dataMenu', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: MenuQuestionInputSchema }, output: { format: 'text' }, tools: [menuTool], diff --git a/samples/js-menu/src/03/flows.ts b/samples/js-menu/src/03/flows.ts index 840d465e10..030681820c 100644 --- a/samples/js-menu/src/03/flows.ts +++ b/samples/js-menu/src/03/flows.ts @@ -15,7 +15,7 @@ */ import type { MessageData } from '@genkit-ai/ai/model'; -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { ai } from '../genkit.js'; import type { MenuItem } from '../types'; import { @@ -77,7 +77,7 @@ export const s03_multiTurnChatFlow = ai.defineFlow( // Generate the response const llmResponse = await ai.generate({ - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), messages: history, prompt: { text: input.question, diff --git a/samples/js-menu/src/03/prompts.ts b/samples/js-menu/src/03/prompts.ts index d332da7b83..b36dc0f7c9 100644 --- a/samples/js-menu/src/03/prompts.ts +++ b/samples/js-menu/src/03/prompts.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { ai } from '../genkit.js'; import { DataMenuQuestionInputSchema } from '../types'; @@ -24,7 +24,7 @@ import { DataMenuQuestionInputSchema } from '../types'; export const s03_chatPreamblePrompt = ai.definePrompt( { name: 's03_chatPreamble', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: DataMenuQuestionInputSchema }, output: { format: 'text' }, config: { temperature: 0.3 }, diff --git a/samples/js-menu/src/04/prompts.ts b/samples/js-menu/src/04/prompts.ts index 7ed500a5f4..454bf65179 100644 --- a/samples/js-menu/src/04/prompts.ts +++ b/samples/js-menu/src/04/prompts.ts @@ -14,14 +14,14 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { ai } from '../genkit.js'; import { DataMenuQuestionInputSchema } from '../types'; export const s04_ragDataMenuPrompt = ai.definePrompt( { name: 's04_ragDataMenu', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: DataMenuQuestionInputSchema }, output: { format: 'text' }, config: { temperature: 0.3 }, diff --git a/samples/js-menu/src/05/prompts.ts b/samples/js-menu/src/05/prompts.ts index 894edd931a..e76a8e2fba 100644 --- a/samples/js-menu/src/05/prompts.ts +++ b/samples/js-menu/src/05/prompts.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Flash } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { ai } from '../genkit.js'; import { TextMenuQuestionInputSchema } from '../types'; @@ -22,7 +22,7 @@ import { TextMenuQuestionInputSchema } from '../types'; export const s05_readMenuPrompt = ai.definePrompt( { name: 's05_readMenu', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: z.object({ imageUrl: z.string(), @@ -42,7 +42,7 @@ from the following image of a restaurant menu. export const s05_textMenuPrompt = ai.definePrompt( { name: 's05_textMenu', - model: gemini15Flash, + model: googleAI.model('gemini-2.5-flash'), input: { schema: TextMenuQuestionInputSchema }, output: { format: 'text' }, config: { temperature: 0.3 }, diff --git a/samples/js-menu/src/genkit.ts b/samples/js-menu/src/genkit.ts index 6109f4b2a5..0d51b186ba 100644 --- a/samples/js-menu/src/genkit.ts +++ b/samples/js-menu/src/genkit.ts @@ -15,18 +15,18 @@ */ import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; -import { textEmbedding004, vertexAI } from '@genkit-ai/vertexai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit'; // Initialize Genkit export const ai = genkit({ plugins: [ - vertexAI({ location: 'us-central1' }), + googleAI(), devLocalVectorstore([ { indexName: 'menu-items', - embedder: textEmbedding004, + embedder: googleAI.embedder('text-embedding-004'), embedderOptions: { taskType: 'RETRIEVAL_DOCUMENT' }, }, ]), From 43d36778ce485c8d7302d60dbf787919f50fefb3 Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Tue, 4 Nov 2025 11:11:27 -0500 Subject: [PATCH 3/7] remove --- js/testapps/durable-streaming/.firebaserc | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 js/testapps/durable-streaming/.firebaserc diff --git a/js/testapps/durable-streaming/.firebaserc b/js/testapps/durable-streaming/.firebaserc deleted file mode 100644 index 8987097a72..0000000000 --- a/js/testapps/durable-streaming/.firebaserc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "projects": { - "default": "pavelj-genkit-test1" - }, - "databaseURL": "https://pavelj-genkit-test1-default-rtdb.firebaseio.com/" -} From de989e15bf0a42eabd2469283fe3b67a2616b079 Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Tue, 4 Nov 2025 11:16:11 -0500 Subject: [PATCH 4/7] undo multimodal sample --- .gitignore | 1 + js/pnpm-lock.yaml | 139 ++++++-- js/testapps/multimodal/docs/BirthdayPets.pdf | Bin 0 -> 254347 bytes js/testapps/multimodal/package.json | 44 +++ js/testapps/multimodal/src/genkit.ts | 78 +++++ js/testapps/multimodal/src/index.ts | 18 + js/testapps/multimodal/src/pdf.ts | 180 ++++++++++ js/testapps/multimodal/src/prompt.ts | 91 +++++ js/testapps/multimodal/src/video.ts | 329 +++++++++++++++++++ js/testapps/multimodal/tsconfig.json | 16 + 10 files changed, 868 insertions(+), 28 deletions(-) create mode 100644 js/testapps/multimodal/docs/BirthdayPets.pdf create mode 100644 js/testapps/multimodal/package.json create mode 100644 js/testapps/multimodal/src/genkit.ts create mode 100644 js/testapps/multimodal/src/index.ts create mode 100644 js/testapps/multimodal/src/pdf.ts create mode 100644 js/testapps/multimodal/src/prompt.ts create mode 100644 js/testapps/multimodal/src/video.ts create mode 100644 js/testapps/multimodal/tsconfig.json diff --git a/.gitignore b/.gitignore index 30c272aaf9..a959c062e6 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,4 @@ next-env.d.ts # Code Coverage js/plugins/compat-oai/coverage/ +.firebaserc diff --git a/js/pnpm-lock.yaml b/js/pnpm-lock.yaml index 25128d997a..90c61e56cf 100644 --- a/js/pnpm-lock.yaml +++ b/js/pnpm-lock.yaml @@ -1605,6 +1605,76 @@ importers: specifier: ^5.3.3 version: 5.8.3 + testapps/multimodal: + dependencies: + '@genkit-ai/ai': + specifier: workspace:* + version: link:../../ai + '@genkit-ai/dev-local-vectorstore': + specifier: workspace:* + version: link:../../plugins/dev-local-vectorstore + '@genkit-ai/evaluator': + specifier: workspace:* + version: link:../../plugins/evaluators + '@genkit-ai/express': + specifier: workspace:* + version: link:../../plugins/express + '@genkit-ai/firebase': + specifier: workspace:* + version: link:../../plugins/firebase + '@genkit-ai/googleai': + specifier: workspace:* + version: link:../../plugins/googleai + '@genkit-ai/vertexai': + specifier: workspace:* + version: link:../../plugins/vertexai + file-type-checker: + specifier: ^1.1.2 + version: 1.1.6 + genkit: + specifier: workspace:* + version: link:../../genkit + genkitx-chromadb: + specifier: workspace:* + version: link:../../plugins/chroma + genkitx-langchain: + specifier: workspace:* + version: link:../../plugins/langchain + genkitx-pinecone: + specifier: workspace:* + version: link:../../plugins/pinecone + google-auth-library: + specifier: ^9.6.3 + version: 9.15.1(encoding@0.1.13) + llm-chunk: + specifier: ^0.0.1 + version: 0.0.1 + pdf-lib: + specifier: ^1.17.1 + version: 1.17.1 + pdf-parse: + specifier: ^1.1.1 + version: 1.1.1 + devDependencies: + '@types/pdf-parse': + specifier: ^1.1.4 + version: 1.1.5 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + tsx: + specifier: ^4.19.1 + version: 4.20.3 + typescript: + specifier: ^5.3.3 + version: 5.8.3 + vertexai: + specifier: link:@types/@genkit-ai/vertexai + version: link:@types/@genkit-ai/vertexai + testapps/next: dependencies: '@genkit-ai/google-genai': @@ -3779,6 +3849,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@pdf-lib/standard-fonts@1.0.0': + resolution: {integrity: sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==} + + '@pdf-lib/upng@1.0.1': + resolution: {integrity: sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==} + '@pinecone-database/pinecone@2.2.2': resolution: {integrity: sha512-gbe/4SowHc64pHIm0kBdgY9hVdzsQnnnpcWviwYMB33gOmsL8brvE8fUSpl1dLDvdyXzKcQkzdBsjCDlqgpdMA==} engines: {node: '>=14.0.0'} @@ -4712,24 +4788,6 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -5039,6 +5097,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + file-type-checker@1.1.6: + resolution: {integrity: sha512-zT5JWzsQiSkV+XigcwgpDqW0jyucuajfwxetHM5AZ8n7YNhNnvd11nzo+6sdkQQvziN2nUal9z53K9b3GjwK9w==} + filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -6512,6 +6573,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + parents@1.0.1: resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} @@ -6574,6 +6638,9 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pdf-lib@1.17.1: + resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==} + pdf-parse@1.1.1: resolution: {integrity: sha512-v6ZJ/efsBpGrGGknjtq9J/oC8tZWq0KWL5vQrk2GlzLEQPUDB1ex+13Rmidl1neNN358Jn9EHZw5y07FFtaC7A==} engines: {node: '>=6.8.1'} @@ -7298,6 +7365,9 @@ packages: '@swc/wasm': optional: true + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -9924,6 +9994,14 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@pdf-lib/standard-fonts@1.0.0': + dependencies: + pako: 1.0.11 + + '@pdf-lib/upng@1.0.1': + dependencies: + pako: 1.0.11 + '@pinecone-database/pinecone@2.2.2': dependencies: '@sinclair/typebox': 0.29.6 @@ -10900,14 +10978,6 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.3.7: - dependencies: - ms: 2.1.3 - - debug@4.4.0: - dependencies: - ms: 2.1.3 - debug@4.4.1: dependencies: ms: 2.1.3 @@ -11302,6 +11372,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + file-type-checker@1.1.6: {} + filelist@1.0.4: dependencies: minimatch: 5.1.6 @@ -11831,7 +11903,7 @@ snapshots: https-proxy-agent@7.0.4: dependencies: agent-base: 7.1.0 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -13150,6 +13222,8 @@ snapshots: package-json-from-dist@1.0.1: {} + pako@1.0.11: {} + parents@1.0.1: dependencies: path-platform: 0.11.15 @@ -13205,6 +13279,13 @@ snapshots: pathe@2.0.3: {} + pdf-lib@1.17.1: + dependencies: + '@pdf-lib/standard-fonts': 1.0.0 + '@pdf-lib/upng': 1.0.1 + pako: 1.0.11 + tslib: 1.14.1 + pdf-parse@1.1.1: dependencies: debug: 3.2.7 @@ -13481,7 +13562,7 @@ snapshots: require-in-the-middle@7.3.0: dependencies: - debug: 4.3.7 + debug: 4.4.1 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -14087,6 +14168,8 @@ snapshots: yn: 3.1.1 optional: true + tslib@1.14.1: {} + tslib@2.6.2: {} tslib@2.8.1: {} diff --git a/js/testapps/multimodal/docs/BirthdayPets.pdf b/js/testapps/multimodal/docs/BirthdayPets.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b2f0cc3091cfd044e05dfbe0d7ecef20f421819f GIT binary patch literal 254347 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 Jm6NsNzX6|g9d`f# literal 0 HcmV?d00001 diff --git a/js/testapps/multimodal/package.json b/js/testapps/multimodal/package.json new file mode 100644 index 0000000000..5308d3ba4a --- /dev/null +++ b/js/testapps/multimodal/package.json @@ -0,0 +1,44 @@ +{ + "name": "multimodal", + "version": "1.0.0", + "description": "", + "main": "lib/index.js", + "scripts": { + "start": "node lib/index.js", + "dev": "tsx --watch src/index.ts", + "genkit:dev": "genkit start -- tsx --watch src/index.ts", + "compile": "tsc", + "build": "pnpm build:clean && pnpm compile", + "build:clean": "rimraf ./lib", + "build:watch": "tsc --watch" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@genkit-ai/dev-local-vectorstore": "workspace:*", + "@genkit-ai/evaluator": "workspace:*", + "@genkit-ai/express": "workspace:*", + "@genkit-ai/firebase": "workspace:*", + "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/vertexai": "workspace:*", + "@genkit-ai/ai": "workspace:*", + "file-type-checker": "^1.1.2", + "genkit": "workspace:*", + "genkitx-chromadb": "workspace:*", + "genkitx-langchain": "workspace:*", + "genkitx-pinecone": "workspace:*", + "google-auth-library": "^9.6.3", + "llm-chunk": "^0.0.1", + "pdf-lib": "^1.17.1", + "pdf-parse": "^1.1.1" + }, + "devDependencies": { + "@types/pdf-parse": "^1.1.4", + "cross-env": "^7.0.3", + "rimraf": "^6.0.1", + "tsx": "^4.19.1", + "typescript": "^5.3.3", + "vertexai": "link:@types/@genkit-ai/vertexai" + } +} diff --git a/js/testapps/multimodal/src/genkit.ts b/js/testapps/multimodal/src/genkit.ts new file mode 100644 index 0000000000..14d39f7941 --- /dev/null +++ b/js/testapps/multimodal/src/genkit.ts @@ -0,0 +1,78 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; +import { + multimodalEmbedding001, + vertexAI, +} from '@genkit-ai/vertexai'; +import { genkit, type Genkit } from 'genkit'; +import { chroma } from 'genkitx-chromadb'; +import { pinecone } from 'genkitx-pinecone'; +import { GoogleAuth, type IdTokenClient } from 'google-auth-library'; + +const auth = new GoogleAuth(); +let authClient: IdTokenClient | undefined = undefined; + +/** Helper method to cache {@link IdTokenClient} instance */ +async function getCloudRunAuthClient(aud: string) { + if (!authClient) { + authClient = await auth.getIdTokenClient(aud); + } + return authClient; +} + +export const ai: Genkit = genkit({ + plugins: [ + vertexAI({ + location: 'us-central1', + }), + pinecone([ + { + indexId: 'pinecone-multimodal-index', + embedder: multimodalEmbedding001, + }, + ]), + chroma([ + { + collectionName: 'multimodal_collection', + embedder: multimodalEmbedding001, + createCollectionIfMissing: true, + clientParams: async () => { + // Replace this with your Cloud Run Instance URL + const host = 'https://.run.app'; + const client = await getCloudRunAuthClient(host); + const idToken = await client.idTokenProvider.fetchIdToken(host); + return { + path: host, + fetchOptions: { + headers: { + Authorization: 'Bearer ' + idToken, + }, + }, + }; + }, + }, + ]), + devLocalVectorstore([ + { + indexName: 'localMultiModalIndex', + embedder: multimodalEmbedding001, + }, + ]), + ], + model: vertexAI.model('gemini-2.5-flash'), +}); diff --git a/js/testapps/multimodal/src/index.ts b/js/testapps/multimodal/src/index.ts new file mode 100644 index 0000000000..4c12e497af --- /dev/null +++ b/js/testapps/multimodal/src/index.ts @@ -0,0 +1,18 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './pdf.js'; +export * from './video.js'; diff --git a/js/testapps/multimodal/src/pdf.ts b/js/testapps/multimodal/src/pdf.ts new file mode 100644 index 0000000000..91842a33bd --- /dev/null +++ b/js/testapps/multimodal/src/pdf.ts @@ -0,0 +1,180 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + devLocalIndexerRef, + devLocalRetrieverRef, +} from '@genkit-ai/dev-local-vectorstore'; +import fileTypeChecker from 'file-type-checker'; +import fs from 'fs'; +import { Document, z } from 'genkit'; +import { chunk } from 'llm-chunk'; +import path from 'path'; +import { PDFDocument, PDFRawStream } from 'pdf-lib'; +import pdf from 'pdf-parse'; + +import { ai } from './genkit.js'; +import { augmentedMultimodalPrompt } from './prompt.js'; +//import { ExecutablePrompt } from '@genkit-ai/ai'; + +export const pdfMultimodalRetriever = devLocalRetrieverRef('multiModalIndex'); + +export const pdfMultimodalIndexer = devLocalIndexerRef('multiModalIndex'); + +// Define a multimodal PDF QA flow +// (Index a PDF first) +export const multimodalPdfQAFlow = ai.defineFlow( + { + name: 'multimodalPdfQuestions', + inputSchema: z.string(), + outputSchema: z.string(), + }, + async (query: string, { sendChunk }) => { + const docs = (await ai.retrieve({ + retriever: pdfMultimodalRetriever, + query, + options: { k: 3 }, + })) as Document[]; + + return augmentedMultimodalPrompt( + { + question: query, + text: docs.filter((d) => d.text?.length).map((d) => d.text), + media: docs + .filter( + (d) => d.media[0]?.url?.length && d.media[0]?.contentType?.length + ) + .map((d) => { + if ( + d.media[0].url?.startsWith('gs://') || + d.media[0].url?.startsWith('http') + ) { + return { + gcsUrl: d.media[0]?.url, + contentType: d.media[0]?.contentType, + }; + } + return { + dataUrl: makeDataUrl(d.media[0]), + }; + }), + }, + { + onChunk: (c) => sendChunk(c.text), + } + ).then((r) => r.text); + } +); + +function isObject(value: unknown): value is Record { + return typeof value === 'object' && value !== null; +} + +function makeDataUrl(media: unknown) { + if (isObject(media)) { + if ( + typeof media.contentType === 'string' && + media.contentType.length > 0 && + typeof media.url === 'string' && + media.url.length > 0 + ) { + return `data:${media.contentType};base64,${media.url}`; + } else { + throw new Error( + 'Failed to make data URL. Invalid or missing contentType or url' + ); + } + } + throw new Error( + 'Failed to make data URL. Unexpected media type: ' + typeof media + ); +} + +const chunkingConfig = { + minLength: 800, // number of minimum characters into chunk + maxLength: 1000, // number of maximum characters into chunk + splitter: 'sentence', // paragraph | sentence + overlap: 100, // number of overlap chracters + delimiters: '', // regex for base split method +} as any; + +// Define a flow to index documents into the "vector store" +// genkit flow:run indexMultimodalPdf '"./docs/BirthdayPets.pdf"' +export const indexMultimodalPdf = ai.defineFlow( + { + name: 'indexMultimodalPdf', + inputSchema: z + .string() + .describe('PDF file path') + .default('./docs/BirthdayPets.pdf'), + }, + async (filePath: string) => { + let documents: Document[] = []; + if (filePath.startsWith('gs://') || filePath.startsWith('http')) { + // non local file, use url for pdf file + // e.g gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf + documents = [Document.fromMedia(filePath, 'application/pdf')]; + } else { + // local file (e.g. ./docs/BirthdayPets.pdf) + // use data URLs for images + filePath = path.resolve(filePath); + const pdfTxt = await ai.run('extract-text', () => extractText(filePath)); + + const chunks = await ai.run('chunk-it', async () => + chunk(pdfTxt, chunkingConfig) + ); + + const imageDocs = await ai.run('extract-images', () => + extractImages(filePath) + ); + + const textDocs: Document[] = chunks.map((text: string) => { + return Document.fromText(text, { filePath }); + }); + documents = imageDocs.concat(textDocs); + } + + await ai.index({ + indexer: pdfMultimodalIndexer, + documents, + }); + } +); + +async function extractImages(filePath: string): Promise { + const imgDocs: Document[] = []; + const pdfDoc = await PDFDocument.load(fs.readFileSync(filePath)); + const indirectObjects = pdfDoc.context.enumerateIndirectObjects(); + for (const [ref, obj] of indirectObjects) { + if (obj instanceof PDFRawStream) { + const detectedFileInfo = fileTypeChecker.detectFile(obj.contents); + if ( + detectedFileInfo?.mimeType && + detectedFileInfo?.mimeType.startsWith('image/') + ) { + const base64 = Buffer.from(obj.contents).toString('base64'); + imgDocs.push(Document.fromMedia(base64, detectedFileInfo.mimeType)); + } + } + } + return imgDocs; +} + +async function extractText(filePath: string) { + const dataBuffer = fs.readFileSync(filePath); + const data = await pdf(dataBuffer); + return data.text; +} diff --git a/js/testapps/multimodal/src/prompt.ts b/js/testapps/multimodal/src/prompt.ts new file mode 100644 index 0000000000..0b04137243 --- /dev/null +++ b/js/testapps/multimodal/src/prompt.ts @@ -0,0 +1,91 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { vertexAI } from '@genkit-ai/vertexai'; +import { z } from 'genkit'; +import { ai } from './genkit.js'; + +export const augmentedVideoPrompt = ai.definePrompt({ + model: vertexAI.model('gemini-2.5-flash'), + name: 'augmentedVideoPrompt', + input: { + schema: z.object({ + question: z.string(), + media: z.object({ + gcsUrl: z.string(), + contentType: z.string(), + startOffsetSec: z.number(), + endOffsetSec: z.number(), + }), + }), + }, + output: { + format: 'text', + }, + messages: ` + Use the following video to answer the question at the end. + If you don't know the answer, just say that you don't know, don't try to make up an answer. + + {{media contentType=media.contentType url=media.gcsUrl}} + + Question: {{question}} + Helpful Answer: `, +}); + +// Define a prompt that includes the retrieved context documents +export const augmentedMultimodalPrompt = ai.definePrompt({ + model: vertexAI.model('gemini-2.5-flash'), + name: 'augmentedMultimodalPrompt', + input: { + schema: z.object({ + text: z.optional(z.array(z.string())), + media: z.optional( + z.array( + z + .object({ + dataUrl: z.string(), + gcsUrl: z.string(), + contentType: z.string(), + }) + .partial() + .refine((data) => data.dataUrl || (data.gcsUrl && data.contentType)) + ) + ), + question: z.string(), + }), + }, + output: { + format: 'text', + }, + messages: ` + Use the following context to answer the question at the end. + If you don't know the answer, just say that you don't know, don't try to make up an answer. + {{#each text}} + - {{this}} + {{/each}} + {{#each media}} + {{#if this.dataUrl}} + {{media url=this.dataUrl}} + {{/if}} + {{#if this.gcsUrl}} + {{media contentType=this.contentType url=this.gcsUrl}} + {{/if}} + {{/each}} + + Question: {{question}} + Helpful Answer: + `, +}); diff --git a/js/testapps/multimodal/src/video.ts b/js/testapps/multimodal/src/video.ts new file mode 100644 index 0000000000..668ddb1bc2 --- /dev/null +++ b/js/testapps/multimodal/src/video.ts @@ -0,0 +1,329 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + devLocalIndexerRef, + devLocalRetrieverRef, +} from '@genkit-ai/dev-local-vectorstore'; +import fileTypeChecker from 'file-type-checker'; +import fs from 'fs'; +import { Document, z } from 'genkit'; +import { chromaIndexerRef, chromaRetrieverRef } from 'genkitx-chromadb'; +import { pineconeIndexerRef, pineconeRetrieverRef } from 'genkitx-pinecone'; +import path from 'path'; + +import { ai } from './genkit.js'; +import { augmentedVideoPrompt } from './prompt.js'; + +export const localVideoRetriever = devLocalRetrieverRef('localMultiModalIndex'); +export const localVideoIndexer = devLocalIndexerRef('localMultiModalIndex'); + +// Before using this, set up a pinecone database with +// dimension: 1408 and metric: cosine. +// Also set the PINECONE_API_KEY environment variable with your key. +export const pineconeVideoRetriever = pineconeRetrieverRef({ + indexId: 'pinecone-multimodal-index', + displayName: 'Pinecone video retriever', +}); + +export const pineconeVideoIndexer = pineconeIndexerRef({ + indexId: 'pinecone-multimodal-index', + displayName: 'Pinecone video indexer', +}); + +export const chromaVideoRetriever = chromaRetrieverRef({ + collectionName: 'multimodal_collection', + displayName: 'Chroma Video retriever', +}); + +export const chromaVideoIndexer = chromaIndexerRef({ + collectionName: 'multimodal_collection', + displayName: 'Chroma video indexer', +}); + +// Define a local video indexer flow +export const localIndexVideo = ai.defineFlow( + { + name: 'localIndexVideo', + inputSchema: z + .string() + .describe('A Video URL') + .default('gs://cloud-samples-data/generative-ai/video/pixel8.mp4'), + }, + async (videoUrl: string) => { + const documents = await ai.run('extract-video', () => + extractVideo(videoUrl) + ); + + await ai.index({ + indexer: localVideoIndexer, + documents, + }); + } +); + +// Define a pinecone video indexer flow +export const pineconeIndexVideo = ai.defineFlow( + { + name: 'pineconeIndexVideo', + inputSchema: z + .string() + .describe('A Video URL') + .default('gs://cloud-samples-data/generative-ai/video/pixel8.mp4'), + }, + async (videoUrl: string) => { + const documents = await ai.run('extract-video', () => + extractVideo(videoUrl) + ); + + await ai.index({ + indexer: pineconeVideoIndexer, + documents, + }); + } +); + +// Define a chroma video indexer flow +export const chromaIndexVideo = ai.defineFlow( + { + name: 'chromaIndexVideo', + inputSchema: z + .string() + .describe('A Video URL') + .default('gs://cloud-samples-data/generative-ai/video/pixel8.mp4'), + }, + async (videoUrl: string) => { + const documents = await ai.run('extract-video', () => + extractVideo(videoUrl) + ); + + await ai.index({ + indexer: chromaVideoIndexer, + documents, + }); + } +); + +// Suffix based type +function getVideoType(url: string) { + const lastDotIndex = url.lastIndexOf('.'); + if (lastDotIndex === -1) { + throw new Error('Error: Unable to determine video mime type'); + } + const suffix = url.substring(lastDotIndex + 1); + return `video/${suffix}`; +} + +async function extractVideo(filePath: string): Promise { + const videoDocs: Document[] = []; + + if (filePath.startsWith('http')) { + throw new Error( + 'Vertex AI does not support http(s) video urls. Please use Google Cloud Storage (gs://) urls' + ); + } else if (filePath.startsWith('gs://')) { + // The default configuration is to look at the first 120 seconds of the + // video and produce embeddings in 16 second increments. + // This is not really necessary, since we are very close to the defaults + // (i.e. 15 v.s. 16 seconds) it is just here to show what it looks like. + // See also: + // https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings#video-modes + // for pricing differences for the different intervals. + const metadataFirst120Seconds = { + videoSegmentConfig: { + startOffsetSec: 0, + endOffsetSec: 120, + intervalSec: 15, + }, + }; + + // If your video is longer than 120 seconds, you can add additional video + // document requests with different start/stop values e.g. + // const metadataNext120Seconds = { + // "videoSegmentConfig": { + // "startOffsetSec": 120, + // "endOffsetSec": 240, + // "intervalSec": 15 + // } + // } + // and then: + // videoDocs.push(Document.fromMedia(filePath, getVideoType(filePath), metadataNext120Seconds)); + // + // sample ~4 minute video: gs://cloud-samples-data/generative-ai/video/google_sustainability.mp4 + + videoDocs.push( + Document.fromMedia( + filePath, + getVideoType(filePath), + metadataFirst120Seconds + ) + ); + + return videoDocs; + } + + // Note, this is valid, but it only works for very very tiny videos. + // Otherwise the API request message size is too big. + // The recommended way to handle video is using a 'gs://' URL + const file = path.resolve(filePath); + const dataBuffer = fs.readFileSync(file); + const detectedFileInfo = fileTypeChecker.detectFile(dataBuffer); + if ( + detectedFileInfo?.mimeType && + detectedFileInfo?.mimeType.startsWith('video/') + ) { + videoDocs.push( + Document.fromMedia( + dataBuffer.toString('base64'), + detectedFileInfo?.mimeType + ) + ); + } else { + throw new Error('Error: Unable to determine mime type of the file.'); + } + return videoDocs; +} + +// Define a video QA flow +export const localVideoQAFlow = ai.defineFlow( + { + name: 'localVideoQuestions', + inputSchema: z + .string() + .describe('A question about the video') + .default('describe the video'), + outputSchema: z.string(), + }, + async (query: string, { sendChunk }) => { + const docs = (await ai.retrieve({ + retriever: localVideoRetriever, + query, + options: { k: 1 }, // we are choosing a single segment of video for context + })) as Document[]; + + return augmentedVideoPrompt( + { + question: query, + media: docs + .filter( + (d) => d.media[0]?.url?.length && d.media[0]?.contentType?.length + ) + .map((d) => { + console.log( + `Retriever returned video: ${d.media[0].url} from ${d.metadata?.embedMetadata?.startOffsetSec}s to ${d.metadata?.embedMetadata?.endOffsetSec}s` + ); + return { + gcsUrl: d.media[0]?.url, + contentType: d.media[0]?.contentType || '', + startOffsetSec: d.metadata?.embedMetadata + ?.startOffsetSec as number, + endOffsetSec: d.metadata?.embedMetadata?.endOffsetSec as number, + }; + })[0], + }, + { + onChunk: (c) => sendChunk(c.text), + } + ).then((r) => r.text); + } +); + +// Define a video QA flow +export const pineconeVideoQAFlow = ai.defineFlow( + { + name: 'pineconeVideoQuestions', + inputSchema: z + .string() + .describe('A question about the video') + .default('describe the video'), + outputSchema: z.string(), + }, + async (query: string, { sendChunk }) => { + const docs = (await ai.retrieve({ + retriever: pineconeVideoRetriever, + query, + options: { k: 1 }, // we are choosing a single segment of video for context + })) as Document[]; + + return augmentedVideoPrompt( + { + question: query, + media: docs + .filter( + (d) => d.media[0]?.url?.length && d.media[0]?.contentType?.length + ) + .map((d) => { + console.log( + `Retriever returned video: ${d.media[0].url} from ${d.metadata?.embedMetadata?.startOffsetSec}s to ${d.metadata?.embedMetadata?.endOffsetSec}s` + ); + return { + gcsUrl: d.media[0]?.url, + contentType: d.media[0]?.contentType || '', + startOffsetSec: d.metadata?.embedMetadata + ?.startOffsetSec as number, + endOffsetSec: d.metadata?.embedMetadata?.endOffsetSec as number, + }; + })[0], + }, + { + onChunk: (c) => sendChunk(c.text), + } + ).then((r) => r.text); + } +); + +export const chromaVideoQAFlow = ai.defineFlow( + { + name: 'chromaVideoQuestions', + inputSchema: z + .string() + .describe('A question about the video') + .default('describe the video'), + outputSchema: z.string(), + }, + async (query: string, { sendChunk }) => { + const docs = (await ai.retrieve({ + retriever: chromaVideoRetriever, + query, + options: { k: 1 }, // we are choosing a single segment of video for context + })) as Document[]; + + return augmentedVideoPrompt( + { + question: query, + media: docs + .filter( + (d) => d.media[0]?.url?.length && d.media[0]?.contentType?.length + ) + .map((d) => { + console.log( + `Retriever returned video: ${d.media[0].url} from ${d.metadata?.embedMetadata?.startOffsetSec}s to ${d.metadata?.embedMetadata?.endOffsetSec}s` + ); + return { + gcsUrl: d.media[0]?.url, + contentType: d.media[0]?.contentType || '', + startOffsetSec: d.metadata?.embedMetadata + ?.startOffsetSec as number, + endOffsetSec: d.metadata?.embedMetadata?.endOffsetSec as number, + }; + })[0], + }, + { + onChunk: (c) => sendChunk(c.text), + } + ).then((r) => r.text); + } +); diff --git a/js/testapps/multimodal/tsconfig.json b/js/testapps/multimodal/tsconfig.json new file mode 100644 index 0000000000..b73ccd04df --- /dev/null +++ b/js/testapps/multimodal/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "noImplicitReturns": true, + "noUnusedLocals": false, + "outDir": "lib", + "sourceMap": true, + "strict": true, + "target": "es2017", + "skipLibCheck": true, + "esModuleInterop": true + }, + "compileOnSave": true, + "include": ["src"] +} From f672a1cb86001da0c503e76eeca324d628e31564 Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Tue, 4 Nov 2025 11:17:40 -0500 Subject: [PATCH 5/7] fmt --- js/testapps/multimodal/src/genkit.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/js/testapps/multimodal/src/genkit.ts b/js/testapps/multimodal/src/genkit.ts index 14d39f7941..313ea7b305 100644 --- a/js/testapps/multimodal/src/genkit.ts +++ b/js/testapps/multimodal/src/genkit.ts @@ -15,10 +15,7 @@ */ import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; -import { - multimodalEmbedding001, - vertexAI, -} from '@genkit-ai/vertexai'; +import { multimodalEmbedding001, vertexAI } from '@genkit-ai/vertexai'; import { genkit, type Genkit } from 'genkit'; import { chroma } from 'genkitx-chromadb'; import { pinecone } from 'genkitx-pinecone'; From faa81072ec7f5299b8bc9d6648032e0852ca4f5c Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Tue, 4 Nov 2025 11:21:09 -0500 Subject: [PATCH 6/7] updated versions --- .../firebase-functions-sample1/functions/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/testapps/firebase-functions-sample1/functions/package.json b/js/testapps/firebase-functions-sample1/functions/package.json index a7c26e2efc..58753f547b 100644 --- a/js/testapps/firebase-functions-sample1/functions/package.json +++ b/js/testapps/firebase-functions-sample1/functions/package.json @@ -14,9 +14,9 @@ }, "main": "lib/index.js", "dependencies": { - "genkit": "^1.0.0-rc.14", - "@genkit-ai/firebase": "^1.0.0-rc.14", - "@genkit-ai/google-genai": "^1.0.0-rc.14", + "genkit": "^1.22.0", + "@genkit-ai/firebase": "^1.22.0", + "@genkit-ai/google-genai": "^1.22.0", "firebase-admin": "^12.2", "firebase-functions": "^6.3.1" }, From 8dd12ccbeb818e85a8548ac9e0e172740c9314ec Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Tue, 4 Nov 2025 13:49:21 -0500 Subject: [PATCH 7/7] multimodal continued --- js/pnpm-lock.yaml | 10 ++-------- js/testapps/basic-gemini/src/index.ts | 8 ++++---- js/testapps/multimodal/package.json | 4 +--- js/testapps/multimodal/src/genkit.ts | 8 ++++---- js/testapps/multimodal/src/prompt.ts | 2 +- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/js/pnpm-lock.yaml b/js/pnpm-lock.yaml index 90c61e56cf..71644552e3 100644 --- a/js/pnpm-lock.yaml +++ b/js/pnpm-lock.yaml @@ -1607,9 +1607,6 @@ importers: testapps/multimodal: dependencies: - '@genkit-ai/ai': - specifier: workspace:* - version: link:../../ai '@genkit-ai/dev-local-vectorstore': specifier: workspace:* version: link:../../plugins/dev-local-vectorstore @@ -1622,12 +1619,9 @@ importers: '@genkit-ai/firebase': specifier: workspace:* version: link:../../plugins/firebase - '@genkit-ai/googleai': - specifier: workspace:* - version: link:../../plugins/googleai - '@genkit-ai/vertexai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/vertexai + version: link:../../plugins/google-genai file-type-checker: specifier: ^1.1.2 version: 1.1.6 diff --git a/js/testapps/basic-gemini/src/index.ts b/js/testapps/basic-gemini/src/index.ts index 3e38f7b4d2..b810ab1017 100644 --- a/js/testapps/basic-gemini/src/index.ts +++ b/js/testapps/basic-gemini/src/index.ts @@ -17,12 +17,12 @@ import { googleAI } from '@genkit-ai/google-genai'; import * as fs from 'fs'; import { - MediaPart, - Operation, - Part, - StreamingCallback, genkit, z, + type MediaPart, + type Operation, + type Part, + type StreamingCallback, } from 'genkit'; import { Readable } from 'stream'; import wav from 'wav'; diff --git a/js/testapps/multimodal/package.json b/js/testapps/multimodal/package.json index 5308d3ba4a..c290f47a5a 100644 --- a/js/testapps/multimodal/package.json +++ b/js/testapps/multimodal/package.json @@ -20,9 +20,7 @@ "@genkit-ai/evaluator": "workspace:*", "@genkit-ai/express": "workspace:*", "@genkit-ai/firebase": "workspace:*", - "@genkit-ai/googleai": "workspace:*", - "@genkit-ai/vertexai": "workspace:*", - "@genkit-ai/ai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "file-type-checker": "^1.1.2", "genkit": "workspace:*", "genkitx-chromadb": "workspace:*", diff --git a/js/testapps/multimodal/src/genkit.ts b/js/testapps/multimodal/src/genkit.ts index 313ea7b305..d7ac4727cf 100644 --- a/js/testapps/multimodal/src/genkit.ts +++ b/js/testapps/multimodal/src/genkit.ts @@ -15,7 +15,7 @@ */ import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; -import { multimodalEmbedding001, vertexAI } from '@genkit-ai/vertexai'; +import { vertexAI } from '@genkit-ai/google-genai'; import { genkit, type Genkit } from 'genkit'; import { chroma } from 'genkitx-chromadb'; import { pinecone } from 'genkitx-pinecone'; @@ -40,13 +40,13 @@ export const ai: Genkit = genkit({ pinecone([ { indexId: 'pinecone-multimodal-index', - embedder: multimodalEmbedding001, + embedder: vertexAI.embedder('multimodalembedding@001'), }, ]), chroma([ { collectionName: 'multimodal_collection', - embedder: multimodalEmbedding001, + embedder: vertexAI.embedder('multimodalembedding@001'), createCollectionIfMissing: true, clientParams: async () => { // Replace this with your Cloud Run Instance URL @@ -67,7 +67,7 @@ export const ai: Genkit = genkit({ devLocalVectorstore([ { indexName: 'localMultiModalIndex', - embedder: multimodalEmbedding001, + embedder: vertexAI.embedder('multimodalembedding@001'), }, ]), ], diff --git a/js/testapps/multimodal/src/prompt.ts b/js/testapps/multimodal/src/prompt.ts index 0b04137243..370430663e 100644 --- a/js/testapps/multimodal/src/prompt.ts +++ b/js/testapps/multimodal/src/prompt.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { vertexAI } from '@genkit-ai/vertexai'; +import { vertexAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { ai } from './genkit.js';