From 250397fca0969d399375b0f6000916baf8071efb Mon Sep 17 00:00:00 2001 From: Niraj Nepal Date: Wed, 18 Feb 2026 17:15:08 +0100 Subject: [PATCH 01/16] fix: Fixed streaming behaviour for samples (#4713) --- py/samples/shared/flows.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/py/samples/shared/flows.py b/py/samples/shared/flows.py index 9e88074cd2..7518ec5881 100644 --- a/py/samples/shared/flows.py +++ b/py/samples/shared/flows.py @@ -207,11 +207,14 @@ async def generate_streaming_story_logic(ai: Genkit, name: str, ctx: ActionRunCo Returns: Complete story text. """ - response = await ai.generate( + stream, response = ai.generate_stream( prompt=f'Tell me a short story about {name}', - on_chunk=ctx.send_chunk if ctx is not None else None, ) - return response.text + async for chunk in stream: + if chunk.text: + if ctx is not None: + ctx.send_chunk(chunk.text) + return (await response).text async def generate_streaming_with_tools_logic( @@ -236,12 +239,10 @@ async def generate_streaming_with_tools_logic( prompt=f'What is the weather in {location}? Describe it poetically.', tools=['get_weather'], ) - full_text = '' async for chunk in stream: if chunk.text: if ctx is not None: ctx.send_chunk(chunk.text) - full_text += chunk.text return (await response).text From fa4b68b19e7f5a02ee96475eed0c77b45aa87404 Mon Sep 17 00:00:00 2001 From: Google Admin Date: Wed, 18 Feb 2026 11:48:37 -0500 Subject: [PATCH 02/16] chore: Refactor Github Action per b/485167538 (#4767) --- .github/actions/setup-releasekit/action.yml | 9 +++++++-- .github/workflows/build-cli-binaries.yml | 14 ++++++++++---- .github/workflows/bump-cli-version.yml | 4 +++- .github/workflows/bump-js-version.yml | 4 +++- .github/workflows/bump-package-version.yml | 6 +++++- .github/workflows/publish_python.yml | 11 ++++++++--- .github/workflows/release_js_main.yml | 3 ++- .github/workflows/release_js_package.yml | 6 ++++-- .github/workflows/releasekit-uv.yml | 14 ++++++++++---- 9 files changed, 52 insertions(+), 19 deletions(-) diff --git a/.github/actions/setup-releasekit/action.yml b/.github/actions/setup-releasekit/action.yml index 8a56810b44..3bf0ff78d6 100644 --- a/.github/actions/setup-releasekit/action.yml +++ b/.github/actions/setup-releasekit/action.yml @@ -156,8 +156,13 @@ runs: - name: Configure git identity shell: bash run: | - git config user.name "${{ inputs.git-user-name }}" - git config user.email "${{ inputs.git-user-email }}" + git config user.name "${INPUTS_GIT_USER_NAME}" + git config user.email "${INPUTS_GIT_USER_EMAIL}" + + env: + INPUTS_GIT_USER_NAME: ${{ inputs.git-user-name }} + + INPUTS_GIT_USER_EMAIL: ${{ inputs.git-user-email }} # ── 8. Restore clean worktree ──────────────────────────────────── # uv sync may regenerate uv.lock (e.g. --no-dev vs full install) diff --git a/.github/workflows/build-cli-binaries.yml b/.github/workflows/build-cli-binaries.yml index 8bbfb73f9b..d374b8944f 100644 --- a/.github/workflows/build-cli-binaries.yml +++ b/.github/workflows/build-cli-binaries.yml @@ -146,20 +146,26 @@ jobs: shell: bash run: | echo "Testing genkit --help" - ./genkit-${{ matrix.target }}${{ steps.binary.outputs.ext }} --help + ./genkit-${{ matrix.target }}${STEPS_BINARY_OUTPUTS_EXT} --help + env: + STEPS_BINARY_OUTPUTS_EXT: ${{ steps.binary.outputs.ext }} - name: Test --version command shell: bash run: | echo "Testing genkit --version" - ./genkit-${{ matrix.target }}${{ steps.binary.outputs.ext }} --version + ./genkit-${{ matrix.target }}${STEPS_BINARY_OUTPUTS_EXT} --version + env: + STEPS_BINARY_OUTPUTS_EXT: ${{ steps.binary.outputs.ext }} - name: Verify UI commands exist shell: bash run: | echo "Verifying UI commands are available" - ./genkit-${{ matrix.target }}${{ steps.binary.outputs.ext }} ui:start --help - ./genkit-${{ matrix.target }}${{ steps.binary.outputs.ext }} ui:stop --help + ./genkit-${{ matrix.target }}${STEPS_BINARY_OUTPUTS_EXT} ui:start --help + ./genkit-${{ matrix.target }}${STEPS_BINARY_OUTPUTS_EXT} ui:stop --help + env: + STEPS_BINARY_OUTPUTS_EXT: ${{ steps.binary.outputs.ext }} - name: Test UI start functionality (Unix only) if: runner.os != 'Windows' diff --git a/.github/workflows/bump-cli-version.yml b/.github/workflows/bump-cli-version.yml index 6ce05c4da4..49e442d2f9 100644 --- a/.github/workflows/bump-cli-version.yml +++ b/.github/workflows/bump-cli-version.yml @@ -63,7 +63,9 @@ jobs: - name: Bump and Tag run: | - js/scripts/bump_and_tag_cli.sh ${{ inputs.releaseType }} ${{ inputs.preid }} + js/scripts/bump_and_tag_cli.sh ${{ inputs.releaseType }} ${INPUTS_PREID} + env: + INPUTS_PREID: ${{ inputs.preid }} - name: Push shell: bash diff --git a/.github/workflows/bump-js-version.yml b/.github/workflows/bump-js-version.yml index d139baea42..65b9fafd87 100644 --- a/.github/workflows/bump-js-version.yml +++ b/.github/workflows/bump-js-version.yml @@ -63,7 +63,9 @@ jobs: - name: Bump and Tag run: | - js/scripts/bump_and_tag_js.sh ${{ inputs.releaseType }} ${{ inputs.preid }} + js/scripts/bump_and_tag_js.sh ${{ inputs.releaseType }} ${INPUTS_PREID} + env: + INPUTS_PREID: ${{ inputs.preid }} - name: Push shell: bash diff --git a/.github/workflows/bump-package-version.yml b/.github/workflows/bump-package-version.yml index d1d8ad81a2..79a392b1b5 100644 --- a/.github/workflows/bump-package-version.yml +++ b/.github/workflows/bump-package-version.yml @@ -71,7 +71,11 @@ jobs: - name: Bump and Tag run: | - js/scripts/bump_and_tag.sh ${{ inputs.packageDir }} ${{ inputs.packageName }} ${{ inputs.releaseType }} ${{ inputs.preid }} + js/scripts/bump_and_tag.sh ${INPUTS_PACKAGEDIR} ${INPUTS_PACKAGENAME} ${{ inputs.releaseType }} ${INPUTS_PREID} + env: + INPUTS_PACKAGEDIR: ${{ inputs.packageDir }} + INPUTS_PACKAGENAME: ${{ inputs.packageName }} + INPUTS_PREID: ${{ inputs.preid }} - name: Push shell: bash diff --git a/.github/workflows/publish_python.yml b/.github/workflows/publish_python.yml index 6ba9f1cd3c..a95c448b9e 100644 --- a/.github/workflows/publish_python.yml +++ b/.github/workflows/publish_python.yml @@ -245,16 +245,16 @@ jobs: echo "**Dry Run:** ${{ inputs.dry_run }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - if [ "${{ needs.publish.result }}" == "success" ]; then + if [ "${NEEDS_PUBLISH_RESULT}" == "success" ]; then echo "### ✅ Publish Status: Success" >> $GITHUB_STEP_SUMMARY else echo "### ❌ Publish Status: Failed" >> $GITHUB_STEP_SUMMARY fi echo "" >> $GITHUB_STEP_SUMMARY - if [ "${{ needs.verify.result }}" == "success" ]; then + if [ "${NEEDS_VERIFY_RESULT}" == "success" ]; then echo "### ✅ Verification: Passed" >> $GITHUB_STEP_SUMMARY - elif [ "${{ needs.verify.result }}" == "failure" ]; then + elif [ "${NEEDS_VERIFY_RESULT}" == "failure" ]; then echo "### ⚠️ Verification: Some packages failed" >> $GITHUB_STEP_SUMMARY else echo "### ⏭️ Verification: Skipped" >> $GITHUB_STEP_SUMMARY @@ -265,3 +265,8 @@ jobs: echo "1. Verify on PyPI: https://pypi.org/project/genkit/$VERSION/" >> $GITHUB_STEP_SUMMARY echo "2. Test installation: \`pip install genkit==$VERSION\`" >> $GITHUB_STEP_SUMMARY echo "3. Update documentation if needed" >> $GITHUB_STEP_SUMMARY + + env: + NEEDS_PUBLISH_RESULT: ${{ needs.publish.result }} + + NEEDS_VERIFY_RESULT: ${{ needs.verify.result }} diff --git a/.github/workflows/release_js_main.yml b/.github/workflows/release_js_main.yml index 5ae4453b48..9dec1f58d8 100644 --- a/.github/workflows/release_js_main.yml +++ b/.github/workflows/release_js_main.yml @@ -62,6 +62,7 @@ jobs: registry-url: 'https://wombat-dressing-room.appspot.com/' - name: release script shell: bash - run: RELEASE_BRANCH=${{ steps.extract_branch.outputs.branch }} RELEASE_TAG=${{ inputs.releaseTag }} scripts/release_main.sh + run: RELEASE_BRANCH=${STEPS_EXTRACT_BRANCH_OUTPUTS_BRANCH} RELEASE_TAG=${{ inputs.releaseTag }} scripts/release_main.sh env: NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} + STEPS_EXTRACT_BRANCH_OUTPUTS_BRANCH: ${{ steps.extract_branch.outputs.branch }} diff --git a/.github/workflows/release_js_package.yml b/.github/workflows/release_js_package.yml index c3119251a0..dd215e57fe 100644 --- a/.github/workflows/release_js_package.yml +++ b/.github/workflows/release_js_package.yml @@ -65,7 +65,9 @@ jobs: - name: release script shell: bash run: | - cd ${{ inputs.packageDir }} - pnpm publish --tag ${{ inputs.releaseTag }} --publish-branch ${{ steps.extract_branch.outputs.branch }} --access=public --registry https://wombat-dressing-room.appspot.com + cd ${INPUTS_PACKAGEDIR} + pnpm publish --tag ${{ inputs.releaseTag }} --publish-branch ${STEPS_EXTRACT_BRANCH_OUTPUTS_BRANCH} --access=public --registry https://wombat-dressing-room.appspot.com env: NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} + INPUTS_PACKAGEDIR: ${{ inputs.packageDir }} + STEPS_EXTRACT_BRANCH_OUTPUTS_BRANCH: ${{ steps.extract_branch.outputs.branch }} diff --git a/.github/workflows/releasekit-uv.yml b/.github/workflows/releasekit-uv.yml index ac78e59517..7178449a1f 100644 --- a/.github/workflows/releasekit-uv.yml +++ b/.github/workflows/releasekit-uv.yml @@ -341,7 +341,7 @@ jobs: if: steps.app-token.outcome == 'success' id: app-user run: | - if ! user_id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id 2>/dev/null); then + if ! user_id=$(gh api "/users/${STEPS_APP_TOKEN_OUTPUTS_APP_SLUG}[bot]" --jq .id 2>/dev/null); then echo "::warning::Failed to fetch App bot user ID — using 0 as fallback" user_id=0 fi @@ -349,6 +349,8 @@ jobs: env: GH_TOKEN: ${{ steps.app-token.outputs.token }} + STEPS_APP_TOKEN_OUTPUTS_APP_SLUG: ${{ steps.app-token.outputs.app-slug }} + # Resolve: App > PAT > GITHUB_TOKEN (respects auth_method override). - name: Resolve token and identity id: resolve @@ -359,10 +361,10 @@ jobs: if [ "$AUTH" = "app" ] || { [ "$AUTH" = "auto" ] && [ -n "$APP_TOKEN" ]; }; then { echo "token=$APP_TOKEN" echo "auth-method=app" - echo "git-user-name=${{ steps.app-token.outputs.app-slug }}[bot]" - echo "git-user-email=${{ steps.app-user.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com" + echo "git-user-name=${STEPS_APP_TOKEN_OUTPUTS_APP_SLUG}[bot]" + echo "git-user-email=${STEPS_APP_USER_OUTPUTS_USER_ID}+${STEPS_APP_TOKEN_OUTPUTS_APP_SLUG}[bot]@users.noreply.github.com" } >> "$GITHUB_OUTPUT" - echo "::notice::Using GitHub App token (${{ steps.app-token.outputs.app-slug }})" + echo "::notice::Using GitHub App token (${STEPS_APP_TOKEN_OUTPUTS_APP_SLUG})" # PAT — used when auth=auto (and available) or auth=pat. elif [ "$AUTH" = "pat" ] || { [ "$AUTH" = "auto" ] && [ -n "$PAT_TOKEN" ]; }; then @@ -396,6 +398,10 @@ jobs: GIT_USER_NAME: ${{ vars.RELEASEKIT_GIT_USER_NAME }} GIT_USER_EMAIL: ${{ vars.RELEASEKIT_GIT_USER_EMAIL }} + STEPS_APP_TOKEN_OUTPUTS_APP_SLUG: ${{ steps.app-token.outputs.app-slug }} + + STEPS_APP_USER_OUTPUTS_USER_ID: ${{ steps.app-user.outputs.user-id }} + # ═══════════════════════════════════════════════════════════════════════ # PREPARE: Compute bumps and open/update Release PR # ═══════════════════════════════════════════════════════════════════════ From 0c214af7bfb84a0537adec74aa64a9123418cb37 Mon Sep 17 00:00:00 2001 From: Juhyuk <77675374+7hokerz@users.noreply.github.com> Date: Thu, 19 Feb 2026 02:54:53 +0900 Subject: [PATCH 03/16] fix(js/plugin/compat-oai): invalid model ID error in transcription models (#4708) --- js/plugins/compat-oai/src/audio.ts | 5 +++-- js/testapps/compat-oai/audio.mp3 | Bin 0 -> 60288 bytes js/testapps/compat-oai/src/index.ts | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 js/testapps/compat-oai/audio.mp3 diff --git a/js/plugins/compat-oai/src/audio.ts b/js/plugins/compat-oai/src/audio.ts index 31fb596929..7e0e9c52e5 100644 --- a/js/plugins/compat-oai/src/audio.ts +++ b/js/plugins/compat-oai/src/audio.ts @@ -358,15 +358,16 @@ export function defineCompatOpenAITranscriptionModel< requestBuilder?: TranscriptionRequestBuilder; }): ModelAction { const { - name: modelName, + name, pluginOptions, client: defaultClient, modelRef, requestBuilder, } = params; - + const modelName = toModelName(name, pluginOptions?.name); const actionName = modelRef?.name ?? `${pluginOptions?.name ?? 'compat-oai'}/${modelName}`; + return model( { name: actionName, diff --git a/js/testapps/compat-oai/audio.mp3 b/js/testapps/compat-oai/audio.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8aa31b4de3264579f274e28e5f792dcaeea749ad GIT binary patch literal 60288 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 sEeZ { + const audioFile = fs.readFileSync('audio.mp3'); + + const { text } = await ai.generate({ + model: openAI.model('whisper-1'), + prompt: [ + { + media: { + contentType: 'audio/mp3', + url: `data:audio/mp3;base64,${audioFile.toString('base64')}`, + }, + }, + ], + }); + + return text; +}); + // PDF file input example ai.defineFlow( { From 123c0280529a46c55efdb2926e7db77c9552fe1d Mon Sep 17 00:00:00 2001 From: Hugo Aguirre Date: Wed, 18 Feb 2026 19:14:26 +0000 Subject: [PATCH 04/16] fix(go): handle loosely formatted JSON markdown blocks (#4700) --- go/ai/generate_test.go | 75 ++++++++++++++++++++++++++++++++++- go/internal/base/json.go | 11 ++++- go/internal/base/json_test.go | 15 +++++++ 3 files changed, 98 insertions(+), 3 deletions(-) diff --git a/go/ai/generate_test.go b/go/ai/generate_test.go index cf85d2baa3..2ae8b00fdc 100644 --- a/go/ai/generate_test.go +++ b/go/ai/generate_test.go @@ -2243,7 +2243,6 @@ func TestGenerateText(t *testing.T) { WithModel(echoModel), WithPrompt("hello"), ) - if err != nil { t.Fatalf("GenerateText error: %v", err) } @@ -2276,7 +2275,6 @@ func TestGenerateData(t *testing.T) { WithModel(jsonModel), WithPrompt("get value"), ) - if err != nil { t.Fatalf("GenerateData error: %v", err) } @@ -2415,3 +2413,76 @@ func TestOutputFrom(t *testing.T) { } }) } + +func TestGenerateWithMarkdownJSON(t *testing.T) { + r := registry.New() + ConfigureFormats(r) + DefineGenerateAction(context.Background(), r) + + // A model that returns JSON wrapped in markdown + markdownModel := DefineModel(r, "test/markdownJson", &ModelOptions{ + Supports: &ModelSupports{Constrained: ConstrainedSupportAll}, + }, func(ctx context.Context, req *ModelRequest, cb ModelStreamCallback) (*ModelResponse, error) { + jsonContent := "{\"name\": \"test\", \"value\": 123}" + return &ModelResponse{ + Request: req, + Message: NewModelTextMessage("```json\n" + jsonContent + "\n```"), + }, nil + }) + + // A model that returns JSON wrapped in markdown with loose formatting (spaces) + looseMarkdownModel := DefineModel(r, "test/looseMarkdownJson", &ModelOptions{ + Supports: &ModelSupports{Constrained: ConstrainedSupportAll}, + }, func(ctx context.Context, req *ModelRequest, cb ModelStreamCallback) (*ModelResponse, error) { + jsonContent := "{\"name\": \"test\", \"value\": 123}" + return &ModelResponse{ + Request: req, + Message: NewModelTextMessage("Here is your JSON:\n ``` json \n" + jsonContent + "\n```"), + }, nil + }) + + type OutputData struct { + Name string `json:"name"` + Value int `json:"value"` + } + + t.Run("Standard Markdown JSON", func(t *testing.T) { + resp, err := Generate(context.Background(), r, + WithModel(markdownModel), + WithPrompt("get data"), + WithOutputType(OutputData{}), + ) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + var out OutputData + if err := resp.Output(&out); err != nil { + t.Fatalf("Output unmarshal failed: %v", err) + } + + if out.Name != "test" || out.Value != 123 { + t.Errorf("Unexpected output: %+v", out) + } + }) + + t.Run("Loose Markdown JSON", func(t *testing.T) { + resp, err := Generate(context.Background(), r, + WithModel(looseMarkdownModel), + WithPrompt("get data"), + WithOutputType(OutputData{}), + ) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + var out OutputData + if err := resp.Output(&out); err != nil { + t.Fatalf("Output unmarshal failed: %v", err) + } + + if out.Name != "test" || out.Value != 123 { + t.Errorf("Unexpected output: %+v", out) + } + }) +} diff --git a/go/internal/base/json.go b/go/internal/base/json.go index dff45c260a..8312301e48 100644 --- a/go/internal/base/json.go +++ b/go/internal/base/json.go @@ -165,11 +165,14 @@ func SchemaAsMap(s *jsonschema.Schema) map[string]any { } // jsonMarkdownRegex matches fenced code blocks with "json" language identifier (case-insensitive). -var jsonMarkdownRegex = regexp.MustCompile("(?si)```json\\s*(.*?)```") +var jsonMarkdownRegex = regexp.MustCompile("(?si)```\\s*json\\s*(.*?)```") // plainMarkdownRegex matches fenced code blocks without any language identifier. var plainMarkdownRegex = regexp.MustCompile("(?s)```\\s*\\n(.*?)```") +// implicitJSONRegex matches fenced code blocks with no language identifier that start with { or [ +var implicitJSONRegex = regexp.MustCompile("(?si)```\\s*([{\\[].*?)```") + // ExtractJSONFromMarkdown returns the contents of the first fenced code block in // the markdown text md. It matches code blocks with "json" identifier (case-insensitive) // or code blocks without any language identifier. If there is no matching block, it returns md. @@ -186,6 +189,12 @@ func ExtractJSONFromMarkdown(md string) string { return strings.TrimSpace(matches[1]) } + // Fall back to implicit JSON blocks (no language identifier, starts with { or [) + matches = implicitJSONRegex.FindStringSubmatch(md) + if len(matches) >= 2 { + return strings.TrimSpace(matches[1]) + } + return md } diff --git a/go/internal/base/json_test.go b/go/internal/base/json_test.go index eda537c9ba..3b7072291a 100644 --- a/go/internal/base/json_test.go +++ b/go/internal/base/json_test.go @@ -103,6 +103,21 @@ func TestExtractJSONFromMarkdown(t *testing.T) { in: "```\n{\"plain\": true}\n``` then ```json\n{\"json\": true}\n```", want: "{\"json\": true}", }, + { + desc: "json block with spaces", + in: "``` json\n{\"a\": 1}\n```", + want: "{\"a\": 1}", + }, + { + desc: "implicit json block", + in: "```{\"a\": 1}```", + want: "{\"a\": 1}", + }, + { + desc: "implicit json block array", + in: "```[1, 2]```", + want: "[1, 2]", + }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { From 1ebb8360665bb8a1b9829cf89911c0ad011f092b Mon Sep 17 00:00:00 2001 From: DM Date: Wed, 18 Feb 2026 11:58:53 -0800 Subject: [PATCH 05/16] feat(go/compat-oai): add OpenAI structured output API support (#4680) --- go/plugins/compat_oai/generate.go | 39 ++++++- go/plugins/compat_oai/generate_live_test.go | 109 ++++++++++++++++++++ 2 files changed, 146 insertions(+), 2 deletions(-) diff --git a/go/plugins/compat_oai/generate.go b/go/plugins/compat_oai/generate.go index acc7865582..01ee4c73ab 100644 --- a/go/plugins/compat_oai/generate.go +++ b/go/plugins/compat_oai/generate.go @@ -219,10 +219,14 @@ func (g *ModelGenerator) Generate(ctx context.Context, req *ai.ModelRequest, han if len(g.messages) == 0 { return nil, fmt.Errorf("no messages provided") } - g.request.Messages = (g.messages) + g.request.Messages = g.messages if len(g.tools) > 0 { - g.request.Tools = (g.tools) + g.request.Tools = g.tools + } + + if req.Output != nil { + g.request.ResponseFormat = getResponseFormat(req.Output) } if handleChunk != nil { @@ -231,6 +235,37 @@ func (g *ModelGenerator) Generate(ctx context.Context, req *ai.ModelRequest, han return g.generateComplete(ctx, req) } +// getResponseFormat determines the appropriate response format based on the output configuration +func getResponseFormat(output *ai.ModelOutputConfig) openai.ChatCompletionNewParamsResponseFormatUnion { + var format openai.ChatCompletionNewParamsResponseFormatUnion + + if output == nil { + return format + } + + switch output.Format { + case "json": + if output.Schema != nil { + jsonSchemaParam := shared.ResponseFormatJSONSchemaParam{ + JSONSchema: shared.ResponseFormatJSONSchemaJSONSchemaParam{ + Name: "output", + Schema: output.Schema, + Strict: openai.Bool(true), + }, + } + format.OfJSONSchema = &jsonSchemaParam + } else { + jsonObjectParam := shared.NewResponseFormatJSONObjectParam() + format.OfJSONObject = &jsonObjectParam + } + case "text": + textParam := shared.NewResponseFormatTextParam() + format.OfText = &textParam + } + + return format +} + // concatenateContent concatenates text content into a single string func (g *ModelGenerator) concatenateContent(parts []*ai.Part) string { content := "" diff --git a/go/plugins/compat_oai/generate_live_test.go b/go/plugins/compat_oai/generate_live_test.go index 872344fe33..5182865fa9 100644 --- a/go/plugins/compat_oai/generate_live_test.go +++ b/go/plugins/compat_oai/generate_live_test.go @@ -266,3 +266,112 @@ func TestWithConfig(t *testing.T) { }) } } + +func TestResponseFormat(t *testing.T) { + tests := []struct { + name string + output *ai.ModelOutputConfig + prompt string + validate func(*testing.T, *openai.ChatCompletionNewParams) + }{ + { + name: "json_schema", + output: &ai.ModelOutputConfig{ + Format: "json", + Schema: map[string]any{ + "type": "object", + "properties": map[string]any{ + "joke": map[string]any{ + "type": "string", + "description": "A funny joke", + }, + }, + "required": []string{"joke"}, + "additionalProperties": false, + }, + }, + prompt: "Tell me a joke", + validate: func(t *testing.T, request *openai.ChatCompletionNewParams) { + if request.ResponseFormat.OfJSONSchema == nil { + t.Error("Expected ResponseFormat.OfJSONSchema to be set") + } + if request.ResponseFormat.OfJSONObject != nil { + t.Error("Expected ResponseFormat.OfJSONObject to be nil for json_schema mode") + } + if request.ResponseFormat.OfText != nil { + t.Error("Expected ResponseFormat.OfText to be nil for json_schema mode") + } + }, + }, + { + name: "json_object", + output: &ai.ModelOutputConfig{ + Format: "json", + }, + prompt: "Generate a JSON object with a joke", + validate: func(t *testing.T, request *openai.ChatCompletionNewParams) { + if request.ResponseFormat.OfJSONObject == nil { + t.Error("Expected ResponseFormat.OfJSONObject to be set") + } + if request.ResponseFormat.OfJSONSchema != nil { + t.Error("Expected ResponseFormat.OfJSONSchema to be nil for json_object mode") + } + if request.ResponseFormat.OfText != nil { + t.Error("Expected ResponseFormat.OfText to be nil for json_object mode") + } + }, + }, + { + name: "text", + output: &ai.ModelOutputConfig{ + Format: "text", + }, + prompt: "Tell me a joke", + validate: func(t *testing.T, request *openai.ChatCompletionNewParams) { + if request.ResponseFormat.OfText == nil { + t.Error("Expected ResponseFormat.OfText to be set") + } + if request.ResponseFormat.OfJSONObject != nil { + t.Error("Expected ResponseFormat.OfJSONObject to be nil for text mode") + } + if request.ResponseFormat.OfJSONSchema != nil { + t.Error("Expected ResponseFormat.OfJSONSchema to be nil for text mode") + } + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := setupTestClient(t) + + messages := []*ai.Message{ + { + Role: ai.RoleUser, + Content: []*ai.Part{ + ai.NewTextPart(tt.prompt), + }, + }, + } + + req := &ai.ModelRequest{ + Messages: messages, + Output: tt.output, + } + + resp, err := g.WithMessages(messages).Generate(context.Background(), req, nil) + if err != nil { + t.Fatalf("Generate failed: %v", err) + } + + if len(resp.Message.Content) == 0 { + t.Fatal("Expected response content, got empty") + } + + // Validate the request output was configured correctly + if tt.validate != nil { + tt.validate(t, g.GetRequest()) + } + }) + } +} From 5f2e2ddf2a558cdddfe16fa81dc1c7028882c271 Mon Sep 17 00:00:00 2001 From: ifielker Date: Wed, 18 Feb 2026 15:46:32 -0500 Subject: [PATCH 06/16] chore(js/plugins/google-genai): model updates for vertexai (#4770) --- js/plugins/google-genai/src/vertexai/imagen.ts | 13 +++++-------- js/plugins/google-genai/src/vertexai/veo.ts | 2 -- .../google-genai/tests/vertexai/imagen_test.ts | 2 +- js/testapps/basic-gemini/src/index-vertexai.ts | 4 ++-- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/js/plugins/google-genai/src/vertexai/imagen.ts b/js/plugins/google-genai/src/vertexai/imagen.ts index e333fce298..05f8b89e73 100644 --- a/js/plugins/google-genai/src/vertexai/imagen.ts +++ b/js/plugins/google-genai/src/vertexai/imagen.ts @@ -252,14 +252,11 @@ export const KNOWN_MODELS = { 'imagen-3.0-generate-001': commonRef('imagen-3.0-generate-001'), 'imagen-3.0-capability-001': commonRef('imagen-3.0-capability-001'), 'imagen-3.0-fast-generate-001': commonRef('imagen-3.0-fast-generate-001'), - 'imagen-4.0-generate-preview-06-06': commonRef( - 'imagen-4.0-generate-preview-06-06' - ), - 'imagen-4.0-ultra-generate-preview-06-06': commonRef( - 'imagen-4.0-ultra-generate-preview-06-06' - ), - 'virtual-try-on-preview-08-04': commonRef( - 'virtual-try-on-preview-08-04', + 'imagen-4.0-fast-generate-001': commonRef('imagen-4.0-fast-generate-001'), + 'imagen-4.0-generate-001': commonRef('imagen-4.0-generate-001'), + 'imagen-4.0-ultra-generate-001': commonRef('imagen-4.0-ultra-generate-001'), + 'virtual-try-on-001': commonRef( + 'virtual-try-on-001', { supports: { media: true, diff --git a/js/plugins/google-genai/src/vertexai/veo.ts b/js/plugins/google-genai/src/vertexai/veo.ts index 1147f9bd0b..969da00c69 100644 --- a/js/plugins/google-genai/src/vertexai/veo.ts +++ b/js/plugins/google-genai/src/vertexai/veo.ts @@ -151,9 +151,7 @@ const KNOWN_MODELS = { 'veo-3.0-generate-001': commonRef('veo-3.0-generate-001'), 'veo-3.0-fast-generate-001': commonRef('veo-3.0-fast-generate-001'), 'veo-3.1-fast-generate-001': commonRef('veo-3.1-fast-generate-001'), - 'veo-3.1-fast-generate-preview': commonRef('veo-3.1-fast-generate-preview'), 'veo-3.1-generate-001': commonRef('veo-3.1-generate-001'), - 'veo-3.1-generate-preview': commonRef('veo-3.1-generate-preview'), } as const; export type KnownModels = keyof typeof KNOWN_MODELS; // For autocomplete export type VeoModelName = `veo-${string}`; diff --git a/js/plugins/google-genai/tests/vertexai/imagen_test.ts b/js/plugins/google-genai/tests/vertexai/imagen_test.ts index 47d58cbf61..d8a2d7bcb2 100644 --- a/js/plugins/google-genai/tests/vertexai/imagen_test.ts +++ b/js/plugins/google-genai/tests/vertexai/imagen_test.ts @@ -91,7 +91,7 @@ describe('Vertex AI Imagen', () => { }); it('should return a ModelReference with TryOn schema', () => { - const modelName = 'virtual-try-on-preview-08-04'; + const modelName = 'virtual-try-on-001'; const ref = model(modelName); assert.strictEqual(ref.name, `vertexai/${modelName}`); assert.strictEqual(ref.configSchema, ImagenTryOnConfigSchema); diff --git a/js/testapps/basic-gemini/src/index-vertexai.ts b/js/testapps/basic-gemini/src/index-vertexai.ts index 4cb089cf09..d9ffd03b8f 100644 --- a/js/testapps/basic-gemini/src/index-vertexai.ts +++ b/js/testapps/basic-gemini/src/index-vertexai.ts @@ -507,7 +507,7 @@ ai.defineFlow('imagen-try-on', async (_) => { }); const { media } = await ai.generate({ - model: vertexAI.model('virtual-try-on-preview-08-04'), + model: vertexAI.model('virtual-try-on-001'), prompt: [ { media: { @@ -604,7 +604,7 @@ ai.defineFlow('veo-reference-images', async (_, { sendChunk }) => { const palmImage = fs.readFileSync('palm_tree.png', { encoding: 'base64' }); let { operation } = await ai.generate({ - model: vertexAI.model('veo-3.1-generate-preview'), + model: vertexAI.model('veo-3.1-generate-001'), config: { location: 'us-central1' }, prompt: [ { From dd468e0cef75e60eccc26163a88cc592b9c570a7 Mon Sep 17 00:00:00 2001 From: ifielker Date: Thu, 19 Feb 2026 12:30:22 -0500 Subject: [PATCH 07/16] feat(js/plugins/google-genai): Updates: Gemini 3.1 and new embedder task types (#4776) --- js/plugins/google-genai/src/common/types.ts | 3 + .../google-genai/src/vertexai/gemini.ts | 1 + .../basic-gemini/src/index-vertexai.ts | 60 ++++++++++++++----- js/testapps/basic-gemini/src/index.ts | 30 +++++----- 4 files changed, 66 insertions(+), 28 deletions(-) diff --git a/js/plugins/google-genai/src/common/types.ts b/js/plugins/google-genai/src/common/types.ts index 5205dec706..6fa68901dc 100644 --- a/js/plugins/google-genai/src/common/types.ts +++ b/js/plugins/google-genai/src/common/types.ts @@ -484,6 +484,9 @@ export const TaskTypeSchema = z.enum([ 'SEMANTIC_SIMILARITY', 'CLASSIFICATION', 'CLUSTERING', + 'CODE_RETRIEVAL_QUERY', + 'QUESTION_ANSWERING', + 'FACT_VERIFICATION', ]); export type TaskType = z.infer; diff --git a/js/plugins/google-genai/src/vertexai/gemini.ts b/js/plugins/google-genai/src/vertexai/gemini.ts index 1715bd973d..78e7732aa3 100644 --- a/js/plugins/google-genai/src/vertexai/gemini.ts +++ b/js/plugins/google-genai/src/vertexai/gemini.ts @@ -422,6 +422,7 @@ const GENERIC_IMAGE_MODEL = commonRef( ); export const KNOWN_GEMINI_MODELS = { + 'gemini-3.1-pro-preview': commonRef('gemini-3.1-pro-preview'), 'gemini-3-flash-preview': commonRef('gemini-3-flash-preview'), 'gemini-3-pro-preview': commonRef('gemini-3-pro-preview'), 'gemini-2.5-flash-lite': commonRef('gemini-2.5-flash-lite'), diff --git a/js/testapps/basic-gemini/src/index-vertexai.ts b/js/testapps/basic-gemini/src/index-vertexai.ts index d9ffd03b8f..87479e09aa 100644 --- a/js/testapps/basic-gemini/src/index-vertexai.ts +++ b/js/testapps/basic-gemini/src/index-vertexai.ts @@ -47,14 +47,45 @@ ai.defineFlow( async (level) => { const { text } = await ai.generate({ model: vertexAI.model('gemini-3-pro-preview'), - prompt: - 'Alice, Bob, and Carol each live in a different house on the ' + - 'same street: red, green, and blue. The person who lives in the red house ' + - 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ' + - 'green house is to the left of the red house. Alice does not own a cat. ' + - 'The person in the blue house owns a fish. ' + - 'Who lives in each house, and what pet do they own? Provide your ' + + prompt: [ + 'Alice, Bob, and Carol each live in a different house on the ', + 'same street: red, green, and blue. The person who lives in the red house ', + 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ', + 'green house is to the left of the red house. Alice does not own a cat. ', + 'The person in the blue house owns a fish. ', + 'Who lives in each house, and what pet do they own? Provide your ', 'step-by-step reasoning.', + ].join(''), + config: { + location: 'global', + thinkingConfig: { + thinkingLevel: level, + }, + }, + }); + return text; + } +); + +// Gemini 3.1 thinkingLevel config +ai.defineFlow( + { + name: 'thinking-level-3.1-pro', + inputSchema: z.enum(['LOW', 'MEDIUM', 'HIGH']), + outputSchema: z.any(), + }, + async (level) => { + const { text } = await ai.generate({ + model: vertexAI.model('gemini-3.1-pro-preview'), + prompt: [ + 'Alice, Bob, and Carol each live in a different house on the ', + 'same street: red, green, and blue. The person who lives in the red house ', + 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ', + 'green house is to the left of the red house. Alice does not own a cat. ', + 'The person in the blue house owns a fish. ', + 'Who lives in each house, and what pet do they own? Provide your ', + 'step-by-step reasoning.', + ].join(''), config: { location: 'global', thinkingConfig: { @@ -75,14 +106,15 @@ ai.defineFlow( async (level) => { const { text } = await ai.generate({ model: vertexAI.model('gemini-3-flash-preview'), - prompt: - 'Alice, Bob, and Carol each live in a different house on the ' + - 'same street: red, green, and blue. The person who lives in the red house ' + - 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ' + - 'green house is to the left of the red house. Alice does not own a cat. ' + - 'The person in the blue house owns a fish. ' + - 'Who lives in each house, and what pet do they own? Provide your ' + + prompt: [ + 'Alice, Bob, and Carol each live in a different house on the ', + 'same street: red, green, and blue. The person who lives in the red house ', + 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ', + 'green house is to the left of the red house. Alice does not own a cat. ', + 'The person in the blue house owns a fish. ', + 'Who lives in each house, and what pet do they own? Provide your ', 'step-by-step reasoning.', + ].join(''), config: { location: 'global', thinkingConfig: { diff --git a/js/testapps/basic-gemini/src/index.ts b/js/testapps/basic-gemini/src/index.ts index 1c5e8fb8da..3be39cfd20 100644 --- a/js/testapps/basic-gemini/src/index.ts +++ b/js/testapps/basic-gemini/src/index.ts @@ -89,14 +89,15 @@ ai.defineFlow( async (level) => { const { text } = await ai.generate({ model: googleAI.model('gemini-3-pro-preview'), - prompt: - 'Alice, Bob, and Carol each live in a different house on the ' + - 'same street: red, green, and blue. The person who lives in the red house ' + - 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ' + - 'green house is to the left of the red house. Alice does not own a cat. ' + - 'The person in the blue house owns a fish. ' + - 'Who lives in each house, and what pet do they own? Provide your ' + + prompt: [ + 'Alice, Bob, and Carol each live in a different house on the ', + 'same street: red, green, and blue. The person who lives in the red house ', + 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ', + 'green house is to the left of the red house. Alice does not own a cat. ', + 'The person in the blue house owns a fish. ', + 'Who lives in each house, and what pet do they own? Provide your ', 'step-by-step reasoning.', + ].join(''), config: { thinkingConfig: { thinkingLevel: level, @@ -116,14 +117,15 @@ ai.defineFlow( async (level) => { const { text } = await ai.generate({ model: googleAI.model('gemini-3-flash-preview'), - prompt: - 'Alice, Bob, and Carol each live in a different house on the ' + - 'same street: red, green, and blue. The person who lives in the red house ' + - 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ' + - 'green house is to the left of the red house. Alice does not own a cat. ' + - 'The person in the blue house owns a fish. ' + - 'Who lives in each house, and what pet do they own? Provide your ' + + prompt: [ + 'Alice, Bob, and Carol each live in a different house on the ', + 'same street: red, green, and blue. The person who lives in the red house ', + 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ', + 'green house is to the left of the red house. Alice does not own a cat. ', + 'The person in the blue house owns a fish. ', + 'Who lives in each house, and what pet do they own? Provide your ', 'step-by-step reasoning.', + ].join(''), config: { thinkingConfig: { thinkingLevel: level, From 410b406a2a0c0b21e13ba6e3c73fe7742a7a17be Mon Sep 17 00:00:00 2001 From: ifielker Date: Thu, 19 Feb 2026 12:38:07 -0500 Subject: [PATCH 08/16] feat(js/plugins/google-genai): Added parameters for Veo 3.1 (#4727) Co-authored-by: Ingrid Fielker --- js/plugins/google-genai/src/googleai/types.ts | 2 ++ js/plugins/google-genai/src/googleai/veo.ts | 13 +++++++++++-- js/plugins/google-genai/tests/googleai/veo_test.ts | 6 ++++++ js/testapps/basic-gemini/src/index.ts | 4 +++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/js/plugins/google-genai/src/googleai/types.ts b/js/plugins/google-genai/src/googleai/types.ts index e1ff57e3d1..5279d8769a 100644 --- a/js/plugins/google-genai/src/googleai/types.ts +++ b/js/plugins/google-genai/src/googleai/types.ts @@ -193,6 +193,8 @@ export declare interface VeoParameters { personGeneration?: string; durationSeconds?: number; enhancePrompt?: boolean; + resolution?: string; + seed?: number; } export declare interface VeoInstance { diff --git a/js/plugins/google-genai/src/googleai/veo.ts b/js/plugins/google-genai/src/googleai/veo.ts index 8771181cb0..80f81cb3cc 100644 --- a/js/plugins/google-genai/src/googleai/veo.ts +++ b/js/plugins/google-genai/src/googleai/veo.ts @@ -69,9 +69,18 @@ export const VeoConfigSchema = z durationSeconds: z .number() .step(1) - .min(5) + .min(4) // Veo 3.1 supports 4s for some resolutions. .max(8) - .describe('Length of each output video in seconds, between 5 and 8.') + .describe('Length of each output video in seconds.') + .optional(), + resolution: z + .enum(['720p', '1080p', '4k']) + .describe('Resolution of the output video.') + .optional(), + seed: z + .number() + .int() + .describe('Random seed for the video generation.') .optional(), enhancePrompt: z .boolean() diff --git a/js/plugins/google-genai/tests/googleai/veo_test.ts b/js/plugins/google-genai/tests/googleai/veo_test.ts index ffcbe066de..32748b4e60 100644 --- a/js/plugins/google-genai/tests/googleai/veo_test.ts +++ b/js/plugins/google-genai/tests/googleai/veo_test.ts @@ -106,12 +106,16 @@ describe('Google AI Veo', () => { aspectRatio: '16:9', personGeneration: 'allow_adult', durationSeconds: 7, + resolution: '4k', + seed: 42, }, }; const result = toVeoParameters(request); assert.strictEqual(result.aspectRatio, '16:9'); assert.strictEqual(result.personGeneration, 'allow_adult'); assert.strictEqual(result.durationSeconds, 7); + assert.strictEqual(result.resolution, '4k'); + assert.strictEqual(result.seed, 42); }); it('should omit null but keep false config parameters', () => { @@ -247,6 +251,8 @@ describe('Google AI Veo', () => { messages: [{ role: 'user', content: [{ text: prompt }] }], config: { aspectRatio: '16:9', + resolution: '4k', + seed: 123, }, }; diff --git a/js/testapps/basic-gemini/src/index.ts b/js/testapps/basic-gemini/src/index.ts index 3be39cfd20..def56ea978 100644 --- a/js/testapps/basic-gemini/src/index.ts +++ b/js/testapps/basic-gemini/src/index.ts @@ -582,7 +582,7 @@ ai.defineFlow('photo-move-veo', async (_, { sendChunk }) => { const startingImage = fs.readFileSync('photo.jpg', { encoding: 'base64' }); let { operation } = await ai.generate({ - model: googleAI.model('veo-3.0-generate-001'), + model: googleAI.model('veo-3.1-fast-generate-preview'), prompt: [ { text: 'make the subject in the photo move', @@ -595,9 +595,11 @@ ai.defineFlow('photo-move-veo', async (_, { sendChunk }) => { }, ], config: { + resolution: '4k', durationSeconds: 8, aspectRatio: '9:16', personGeneration: 'allow_adult', + seed: 42, }, }); From 9238a8bdc5ab988f295811c1dc95a15afdddf9e2 Mon Sep 17 00:00:00 2001 From: Alex Pascal Date: Thu, 19 Feb 2026 09:49:05 -0800 Subject: [PATCH 09/16] fix(go): added nil check for config in `ModelRef` (#4775) --- go/ai/generate.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/go/ai/generate.go b/go/ai/generate.go index 003eb0b653..de1cc1276b 100644 --- a/go/ai/generate.go +++ b/go/ai/generate.go @@ -484,7 +484,9 @@ func Generate(ctx context.Context, r api.Registry, opts ...GenerateOption) (*Mod } if modelRef, ok := genOpts.Model.(ModelRef); ok && genOpts.Config == nil { - genOpts.Config = modelRef.Config() + if cfg := modelRef.Config(); !base.IsNil(cfg) { + genOpts.Config = cfg + } } respondParts := []*toolResponsePart{} From 1a93dc86771949f01290c7eb0bdb83c9dbec1eba Mon Sep 17 00:00:00 2001 From: ifielker Date: Thu, 19 Feb 2026 13:36:12 -0500 Subject: [PATCH 10/16] feat(js/plugins/google-genai): Added Gemini 3.1 & custom tools models (#4778) --- .../google-genai/src/googleai/gemini.ts | 4 +++ js/testapps/basic-gemini/src/index.ts | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/js/plugins/google-genai/src/googleai/gemini.ts b/js/plugins/google-genai/src/googleai/gemini.ts index 38d5bf7d7a..57f367de59 100644 --- a/js/plugins/google-genai/src/googleai/gemini.ts +++ b/js/plugins/google-genai/src/googleai/gemini.ts @@ -421,6 +421,10 @@ const GENERIC_GEMMA_MODEL = commonRef( ); const KNOWN_GEMINI_MODELS = { + 'gemini-3.1-pro-preview-customtools': commonRef( + 'gemini-3.1-pro-preview-customtools' + ), + 'gemini-3.1-pro-preview': commonRef('gemini-3.1-pro-preview'), 'gemini-3-flash-preview': commonRef('gemini-3-flash-preview'), 'gemini-3-pro-preview': commonRef('gemini-3-pro-preview'), 'gemini-2.5-pro': commonRef('gemini-2.5-pro'), diff --git a/js/testapps/basic-gemini/src/index.ts b/js/testapps/basic-gemini/src/index.ts index def56ea978..e0d51b30e7 100644 --- a/js/testapps/basic-gemini/src/index.ts +++ b/js/testapps/basic-gemini/src/index.ts @@ -783,3 +783,33 @@ ai.defineFlow('external-url-gemini-3.0', async () => { }); return text; }); + +// Gemini 3.1 thinkingLevel config +ai.defineFlow( + { + name: 'thinking-level-3.1-pro', + inputSchema: z.enum(['LOW', 'MEDIUM', 'HIGH']), + outputSchema: z.any(), + }, + async (level) => { + const { text } = await ai.generate({ + model: googleAI.model('gemini-3.1-pro-preview'), + prompt: [ + 'Alice, Bob, and Carol each live in a different house on the ', + 'same street: red, green, and blue. The person who lives in the red house ', + 'owns a cat. Bob does not live in the green house. Carol owns a dog. The ', + 'green house is to the left of the red house. Alice does not own a cat. ', + 'The person in the blue house owns a fish. ', + 'Who lives in each house, and what pet do they own? Provide your ', + 'step-by-step reasoning.', + ].join(''), + config: { + thinkingConfig: { + thinkingLevel: level, + includeThoughts: true, + }, + }, + }); + return text; + } +); From e2abb96ace1fcb0c462023fbe08bde7099e9af97 Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Thu, 19 Feb 2026 14:00:27 -0500 Subject: [PATCH 11/16] feat(cli): Add configurable CORS origin support to the telemetry server. (#4777) Co-authored-by: Samuel Bushi <66321939+ssbushi@users.noreply.github.com> --- .../cli/src/commands/dev-test-model.ts | 2 +- .../cli/src/commands/server-harness.ts | 5 ++- genkit-tools/cli/src/commands/start.ts | 16 +++++++-- genkit-tools/cli/src/mcp/utils.ts | 5 ++- genkit-tools/cli/src/utils/manager-utils.ts | 36 +++++++++++-------- genkit-tools/cli/tests/commands/start_test.ts | 6 +++- genkit-tools/pnpm-lock.yaml | 15 ++++++++ genkit-tools/telemetry-server/package.json | 4 ++- genkit-tools/telemetry-server/src/index.ts | 11 ++++++ 9 files changed, 79 insertions(+), 21 deletions(-) diff --git a/genkit-tools/cli/src/commands/dev-test-model.ts b/genkit-tools/cli/src/commands/dev-test-model.ts index 07633d36c9..3e071708cd 100644 --- a/genkit-tools/cli/src/commands/dev-test-model.ts +++ b/genkit-tools/cli/src/commands/dev-test-model.ts @@ -675,7 +675,7 @@ export const devTestModel = new Command('dev:test-model') ); manager = result.manager; } else { - manager = await startManager(projectRoot, false); + manager = await startManager({ projectRoot, manageHealth: false }); } await waitForRuntime(manager); diff --git a/genkit-tools/cli/src/commands/server-harness.ts b/genkit-tools/cli/src/commands/server-harness.ts index f03a4ce570..cbb7b883a8 100644 --- a/genkit-tools/cli/src/commands/server-harness.ts +++ b/genkit-tools/cli/src/commands/server-harness.ts @@ -52,6 +52,9 @@ export const serverHarness = new Command('__server-harness') }); const portNum = Number.parseInt(port) || 4100; - const manager = await startManager(await findProjectRoot(), true); + const manager = await startManager({ + projectRoot: await findProjectRoot(), + manageHealth: true, + }); await startServer(manager, portNum); }); diff --git a/genkit-tools/cli/src/commands/start.ts b/genkit-tools/cli/src/commands/start.ts index 151f468f93..074d36c46d 100644 --- a/genkit-tools/cli/src/commands/start.ts +++ b/genkit-tools/cli/src/commands/start.ts @@ -27,6 +27,7 @@ interface RunOptions { port?: string; open?: boolean; disableRealtimeTelemetry?: boolean; + corsOrigin?: string; } /** Command to run code in dev mode and/or the Dev UI. */ @@ -39,6 +40,10 @@ export const start = new Command('start') '--disable-realtime-telemetry', 'Disable real-time telemetry streaming' ) + .option( + '--cors-origin ', + 'specify the allowed origin for CORS requests' + ) .action(async (options: RunOptions) => { const projectRoot = await findProjectRoot(); if (projectRoot.includes('/.Trash/')) { @@ -55,12 +60,19 @@ export const start = new Command('start') projectRoot, start.args[0], start.args.slice(1), - { disableRealtimeTelemetry: options.disableRealtimeTelemetry } + { + disableRealtimeTelemetry: options.disableRealtimeTelemetry, + corsOrigin: options.corsOrigin, + } ); manager = result.manager; processPromise = result.processPromise; } else { - manager = await startManager(projectRoot, true); + manager = await startManager({ + projectRoot, + manageHealth: true, + corsOrigin: options.corsOrigin, + }); processPromise = new Promise(() => {}); } if (!options.noui) { diff --git a/genkit-tools/cli/src/mcp/utils.ts b/genkit-tools/cli/src/mcp/utils.ts index 91b1d494b1..2a97c24f5d 100644 --- a/genkit-tools/cli/src/mcp/utils.ts +++ b/genkit-tools/cli/src/mcp/utils.ts @@ -72,7 +72,10 @@ export class McpRuntimeManager { if (this.manager) { await this.manager.stop(); } - this.manager = await startManager(projectRoot, true /* manageHealth */); + this.manager = await startManager({ + projectRoot, + manageHealth: true, + }); this.currentProjectRoot = projectRoot; return this.manager; } diff --git a/genkit-tools/cli/src/utils/manager-utils.ts b/genkit-tools/cli/src/utils/manager-utils.ts index a961f6835c..a4b2efa98e 100644 --- a/genkit-tools/cli/src/utils/manager-utils.ts +++ b/genkit-tools/cli/src/utils/manager-utils.ts @@ -33,9 +33,10 @@ import getPort, { makeRange } from 'get-port'; * * This function is not idempotent. Typically you want to make sure it's called only once per cli instance. */ -export async function resolveTelemetryServer( - projectRoot: string -): Promise { +export async function resolveTelemetryServer(options: { + projectRoot: string; + corsOrigin?: string; +}): Promise { let telemetryServerUrl = process.env.GENKIT_TELEMETRY_SERVER; if (!telemetryServerUrl) { const telemetryPort = await getPort({ port: makeRange(4033, 4999) }); @@ -43,9 +44,10 @@ export async function resolveTelemetryServer( await startTelemetryServer({ port: telemetryPort, traceStore: new LocalFileTraceStore({ - storeRoot: projectRoot, - indexRoot: projectRoot, + storeRoot: options.projectRoot, + indexRoot: options.projectRoot, }), + corsOrigin: options.corsOrigin, }); } return telemetryServerUrl; @@ -54,15 +56,16 @@ export async function resolveTelemetryServer( /** * Starts the runtime manager and its dependencies. */ -export async function startManager( - projectRoot: string, - manageHealth?: boolean -): Promise { - const telemetryServerUrl = await resolveTelemetryServer(projectRoot); +export async function startManager(options: { + projectRoot: string; + manageHealth?: boolean; + corsOrigin?: string; +}): Promise { + const telemetryServerUrl = await resolveTelemetryServer(options); const manager = RuntimeManager.create({ telemetryServerUrl, - manageHealth, - projectRoot, + manageHealth: options.manageHealth, + projectRoot: options.projectRoot, }); return manager; } @@ -73,6 +76,7 @@ export interface DevProcessManagerOptions { healthCheck?: boolean; timeout?: number; cwd?: string; + corsOrigin?: string; } export async function startDevProcessManager( @@ -81,7 +85,10 @@ export async function startDevProcessManager( args: string[], options?: DevProcessManagerOptions ): Promise<{ manager: RuntimeManager; processPromise: Promise }> { - const telemetryServerUrl = await resolveTelemetryServer(projectRoot); + const telemetryServerUrl = await resolveTelemetryServer({ + projectRoot, + corsOrigin: options?.corsOrigin, + }); const disableRealtimeTelemetry = options?.disableRealtimeTelemetry ?? false; const envVars: Record = { GENKIT_TELEMETRY_SERVER: telemetryServerUrl, @@ -90,6 +97,7 @@ export async function startDevProcessManager( if (!disableRealtimeTelemetry) { envVars.GENKIT_ENABLE_REALTIME_TELEMETRY = 'true'; } + const processManager = new ProcessManager(command, args, envVars); const manager = await RuntimeManager.create({ telemetryServerUrl, @@ -169,7 +177,7 @@ export async function runWithManager( ) { let manager: RuntimeManager; try { - manager = await startManager(projectRoot, false); // Don't manage health in this case. + manager = await startManager({ projectRoot, manageHealth: false }); // Don't manage health in this case. } catch (e) { process.exit(1); } diff --git a/genkit-tools/cli/tests/commands/start_test.ts b/genkit-tools/cli/tests/commands/start_test.ts index 76c90e0833..4890596a86 100644 --- a/genkit-tools/cli/tests/commands/start_test.ts +++ b/genkit-tools/cli/tests/commands/start_test.ts @@ -92,7 +92,11 @@ describe('start command', () => { await serverStartedPromise; - expect(startManagerSpy).toHaveBeenCalledWith('/mock/root', true); + expect(startManagerSpy).toHaveBeenCalledWith({ + projectRoot: '/mock/root', + manageHealth: true, + corsOrigin: undefined, + }); expect(startDevProcessManagerSpy).not.toHaveBeenCalled(); expect(startServerSpy).toHaveBeenCalled(); }); diff --git a/genkit-tools/pnpm-lock.yaml b/genkit-tools/pnpm-lock.yaml index ea1b78beac..8928abdb16 100644 --- a/genkit-tools/pnpm-lock.yaml +++ b/genkit-tools/pnpm-lock.yaml @@ -280,6 +280,9 @@ importers: async-mutex: specifier: ^0.5.0 version: 0.5.0 + cors: + specifier: ^2.8.6 + version: 2.8.6 express: specifier: ^4.21.0 version: 4.21.2 @@ -290,6 +293,9 @@ importers: specifier: ^3.22.4 version: 3.25.67 devDependencies: + '@types/cors': + specifier: ^2.8.19 + version: 2.8.19 '@types/express': specifier: ~4.17.21 version: 4.17.23 @@ -1574,6 +1580,10 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4951,6 +4961,11 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + create-jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): dependencies: '@jest/types': 29.6.3 diff --git a/genkit-tools/telemetry-server/package.json b/genkit-tools/telemetry-server/package.json index 6edbf39d42..c83ca80a7c 100644 --- a/genkit-tools/telemetry-server/package.json +++ b/genkit-tools/telemetry-server/package.json @@ -37,12 +37,14 @@ "async-mutex": "^0.5.0", "express": "^4.21.0", "lockfile": "^1.0.4", - "zod": "^3.22.4" + "zod": "^3.22.4", + "cors": "^2.8.6" }, "devDependencies": { "@types/express": "~4.17.21", "@types/lockfile": "^1.0.4", "@types/node": "^20.11.30", + "@types/cors": "^2.8.19", "get-port": "^7.1.0", "npm-run-all": "^4.1.5", "rimraf": "^6.0.1", diff --git a/genkit-tools/telemetry-server/src/index.ts b/genkit-tools/telemetry-server/src/index.ts index c24536f794..682a34c4ae 100644 --- a/genkit-tools/telemetry-server/src/index.ts +++ b/genkit-tools/telemetry-server/src/index.ts @@ -20,6 +20,7 @@ import { type SpanData, } from '@genkit-ai/tools-common'; import { logger } from '@genkit-ai/tools-common/utils'; +import cors from 'cors'; import express from 'express'; import type * as http from 'http'; import { BroadcastManager } from './broadcast-manager.js'; @@ -46,9 +47,19 @@ export async function startTelemetryServer(params: { * Defaults to '5mb'. */ maxRequestBodySize?: string | number; + corsOrigin?: string | RegExp; }) { await params.traceStore.init(); const api = express(); + // Allow all origins and expose trace ID header + api.use( + cors({ + // By default, allow connections from localhost on any port. + origin: params.corsOrigin || /^http:\/\/localhost:\d+$/, + allowedHeaders: ['Content-Type'], + exposedHeaders: ['X-Genkit-Trace-Id'], + }) + ); api.use(express.json({ limit: params.maxRequestBodySize ?? '100mb' })); From 4a158a0f20da909b6fd04236880db7bd2fd74594 Mon Sep 17 00:00:00 2001 From: Zereker <25904387+Zereker@users.noreply.github.com> Date: Fri, 20 Feb 2026 03:38:47 +0800 Subject: [PATCH 12/16] fix(go): preserve error chain in GenkitError via Unwrap (#4527) --- go/core/error.go | 46 +++++++++++++++++++++-------- go/core/error_test.go | 69 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 101 insertions(+), 14 deletions(-) diff --git a/go/core/error.go b/go/core/error.go index ba70d7f76e..4482fc21fd 100644 --- a/go/core/error.go +++ b/go/core/error.go @@ -37,11 +37,12 @@ type ReflectionError struct { // GenkitError is the base error type for Genkit errors. type GenkitError struct { - Message string `json:"message"` // Exclude from default JSON if embedded elsewhere - Status StatusName `json:"status"` - HTTPCode int `json:"-"` // Exclude from default JSON - Details map[string]any `json:"details"` // Use map for arbitrary details - Source *string `json:"source,omitempty"` // Pointer for optional + Message string `json:"message"` // Exclude from default JSON if embedded elsewhere + Status StatusName `json:"status"` + HTTPCode int `json:"-"` // Exclude from default JSON + Details map[string]any `json:"details"` // Use map for arbitrary details + Source *string `json:"source,omitempty"` // Pointer for optional + originalError error // The wrapped error, if any } // UserFacingError is the base error type for user facing errors. @@ -70,7 +71,6 @@ func (e *UserFacingError) Error() string { // NewError creates a new GenkitError with a stack trace. func NewError(status StatusName, message string, args ...any) *GenkitError { - // Prevents a compile-time warning about non-constant message. msg := message ge := &GenkitError{ @@ -78,6 +78,14 @@ func NewError(status StatusName, message string, args ...any) *GenkitError { Message: fmt.Sprintf(msg, args...), } + // scan args for the last error to wrap it (Iterate backwards) + for i := len(args) - 1; i >= 0; i-- { + if err, ok := args[i].(error); ok { + ge.originalError = err + break + } + } + errStack := string(debug.Stack()) if errStack != "" { ge.Details = make(map[string]any) @@ -91,14 +99,28 @@ func (e *GenkitError) Error() string { return e.Message } +// Unwrap implements the standard error unwrapping interface. +// This allows errors.Is and errors.As to work with GenkitError. +func (e *GenkitError) Unwrap() error { + return e.originalError +} + // ToReflectionError returns a JSON-serializable representation for reflection API responses. func (e *GenkitError) ToReflectionError() ReflectionError { - errDetails := &ReflectionErrorDetails{} - if stackVal, ok := e.Details["stack"].(string); ok { - errDetails.Stack = &stackVal - } - if traceVal, ok := e.Details["traceId"].(string); ok { - errDetails.TraceID = &traceVal + var errDetails *ReflectionErrorDetails + if e.Details != nil { + stackVal, stackOk := e.Details["stack"].(string) + traceVal, traceOk := e.Details["traceId"].(string) + + if stackOk || traceOk { + errDetails = &ReflectionErrorDetails{} + if stackOk { + errDetails.Stack = &stackVal + } + if traceOk { + errDetails.TraceID = &traceVal + } + } } return ReflectionError{ Details: errDetails, diff --git a/go/core/error_test.go b/go/core/error_test.go index 60ff503bdc..a2e26a25a8 100644 --- a/go/core/error_test.go +++ b/go/core/error_test.go @@ -157,8 +157,73 @@ func TestGenkitErrorToReflectionError(t *testing.T) { if re.Message != "success" { t.Errorf("Message = %q, want %q", re.Message, "success") } - if re.Details.Stack != nil { - t.Error("expected nil stack") + if re.Details != nil { + t.Error("expected nil details") + } + }) +} + +// testCustomError is a helper type for the errors.As subtest. +type testCustomError struct { + code int +} + +func (e *testCustomError) Error() string { + return fmt.Sprintf("custom error %d", e.code) +} + +func TestGenkitErrorUnwrap(t *testing.T) { + t.Run("errors.Is matches original cause", func(t *testing.T) { + original := errors.New("original failure") + gErr := NewError(INTERNAL, "something happened: %v", original) + + if !errors.Is(gErr, original) { + t.Errorf("expected errors.Is to return true, but got false") + } + if gErr.Unwrap() != original { + t.Errorf("Unwrap() returned wrong error") + } + }) + + t.Run("errors.As extracts typed cause", func(t *testing.T) { + cause := &testCustomError{code: 42} + ge := NewError(INTERNAL, "failed: %v", cause) + + var target *testCustomError + if !errors.As(ge, &target) { + t.Fatal("errors.As failed to find *testCustomError") + } + if target.code != 42 { + t.Errorf("target.code = %d, want 42", target.code) + } + }) + + t.Run("no args returns nil", func(t *testing.T) { + ge := NewError(INTERNAL, "no args error") + + if ge.Unwrap() != nil { + t.Errorf("Unwrap() = %v, want nil", ge.Unwrap()) + } + }) + + t.Run("multiple errors preserves the last one", func(t *testing.T) { + first := errors.New("first") + second := errors.New("second") + ge := NewError(INTERNAL, "two errors: %v %v", first, second) + + if ge.Unwrap() != second { + t.Errorf("Unwrap() = %v, want %v (last error)", ge.Unwrap(), second) + } + if !errors.Is(ge, second) { + t.Error("errors.Is(ge, second) = false, want true") + } + }) + + t.Run("non-error args returns nil", func(t *testing.T) { + ge := NewError(INTERNAL, "value is %d and %s", 42, "hello") + + if ge.Unwrap() != nil { + t.Errorf("Unwrap() = %v, want nil", ge.Unwrap()) } }) } From fe63d7bae396940fa684c660e84a6e3ba684b46b Mon Sep 17 00:00:00 2001 From: ifielker Date: Thu, 19 Feb 2026 14:45:50 -0500 Subject: [PATCH 13/16] chore(js/plugins/googleai): Remove all references to googleai plugin (#4773) --- js/doc-snippets/package.json | 2 +- js/doc-snippets/src/dotprompt/minimal.ts | 2 +- js/doc-snippets/src/flows/index.ts | 2 +- js/doc-snippets/src/index.ts | 2 +- js/doc-snippets/src/models/index.ts | 2 +- js/doc-snippets/src/models/minimal.ts | 2 +- js/doc-snippets/src/multi-agent/simple.ts | 4 +- js/genkit/README.md | 4 +- js/plugins/mcp/examples/client/index.js | 4 +- js/plugins/mcp/examples/client/package.json | 2 +- js/pnpm-lock.yaml | 132 +- js/scripts/bump_and_tag_js.sh | 1 - js/testapps/context-caching/.gitignore | 1 - js/testapps/context-caching/README.md | 103 - js/testapps/context-caching/package.json | 27 - js/testapps/context-caching/src/index.ts | 127 - js/testapps/context-caching/tsconfig.json | 14 - js/testapps/context-caching2/.gitignore | 1 - js/testapps/context-caching2/README.md | 105 - js/testapps/context-caching2/package.json | 26 - js/testapps/context-caching2/src/index.ts | 100 - js/testapps/context-caching2/tsconfig.json | 14 - js/testapps/esm/package.json | 1 - js/testapps/esm/src/index.ts | 2 +- js/testapps/evals/package.json | 2 +- js/testapps/evals/src/genkit.ts | 2 +- js/testapps/evals/src/pdf-rag.ts | 2 +- js/testapps/mcp/package.json | 2 +- js/testapps/mcp/src/index.ts | 2 +- js/testapps/mcp/src/server.ts | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- releasekit.toml | 1 - samples/js-prompts/package-lock.json | 3539 +++++++++++++++-- samples/js-prompts/package.json | 2 +- samples/js-prompts/src/index.ts | 2 +- samples/js-schoolAgent/package-lock.json | 3528 ++++++++++++++-- samples/js-schoolAgent/package.json | 2 +- samples/js-schoolAgent/src/genkit.ts | 4 +- scripts/release_main.sh | 4 - 41 files changed, 6387 insertions(+), 1393 deletions(-) delete mode 100644 js/testapps/context-caching/.gitignore delete mode 100644 js/testapps/context-caching/README.md delete mode 100644 js/testapps/context-caching/package.json delete mode 100644 js/testapps/context-caching/src/index.ts delete mode 100644 js/testapps/context-caching/tsconfig.json delete mode 100644 js/testapps/context-caching2/.gitignore delete mode 100644 js/testapps/context-caching2/README.md delete mode 100644 js/testapps/context-caching2/package.json delete mode 100644 js/testapps/context-caching2/src/index.ts delete mode 100644 js/testapps/context-caching2/tsconfig.json diff --git a/js/doc-snippets/package.json b/js/doc-snippets/package.json index 66574a6437..07691c7dd3 100644 --- a/js/doc-snippets/package.json +++ b/js/doc-snippets/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@genkit-ai/express": "workspace:*", - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "@genkit-ai/vertexai": "workspace:*", "data-urls": "^5.0.0", "firebase-functions": "^6.3.1", diff --git a/js/doc-snippets/src/dotprompt/minimal.ts b/js/doc-snippets/src/dotprompt/minimal.ts index eb30135df9..f7e22a9b34 100644 --- a/js/doc-snippets/src/dotprompt/minimal.ts +++ b/js/doc-snippets/src/dotprompt/minimal.ts @@ -18,7 +18,7 @@ import { genkit } from 'genkit'; // Import the model plugins you want to use. -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; const ai = genkit({ // Initialize and configure the model plugins. diff --git a/js/doc-snippets/src/flows/index.ts b/js/doc-snippets/src/flows/index.ts index 0f9a476fa2..9bd164df45 100644 --- a/js/doc-snippets/src/flows/index.ts +++ b/js/doc-snippets/src/flows/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { genkit } from 'genkit/beta'; diff --git a/js/doc-snippets/src/index.ts b/js/doc-snippets/src/index.ts index a24913d9c0..3e3ed4e8fd 100644 --- a/js/doc-snippets/src/index.ts +++ b/js/doc-snippets/src/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit'; const ai = genkit({ diff --git a/js/doc-snippets/src/models/index.ts b/js/doc-snippets/src/models/index.ts index c812614a87..816f6aab63 100644 --- a/js/doc-snippets/src/models/index.ts +++ b/js/doc-snippets/src/models/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit'; const ai = genkit({ diff --git a/js/doc-snippets/src/models/minimal.ts b/js/doc-snippets/src/models/minimal.ts index 20984739e8..7bc4905fc6 100644 --- a/js/doc-snippets/src/models/minimal.ts +++ b/js/doc-snippets/src/models/minimal.ts @@ -15,7 +15,7 @@ */ // [START minimal] -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit'; const ai = genkit({ diff --git a/js/doc-snippets/src/multi-agent/simple.ts b/js/doc-snippets/src/multi-agent/simple.ts index 588b1b4f91..6639f6699d 100644 --- a/js/doc-snippets/src/multi-agent/simple.ts +++ b/js/doc-snippets/src/multi-agent/simple.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Pro } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { genkit } from 'genkit/beta'; @@ -64,7 +64,7 @@ const reservationTool = ai.defineTool( // [START chat] const chat = ai.chat({ - model: gemini15Pro, + model: googleAI.model('gemini-2.5-pro'), system: "You are an AI customer service agent for Pavel's Cafe. Use the tools " + 'available to you to help the customer. If you cannot help the ' + diff --git a/js/genkit/README.md b/js/genkit/README.md index b251533c3e..44f15b265d 100644 --- a/js/genkit/README.md +++ b/js/genkit/README.md @@ -7,10 +7,10 @@ Genkit is a framework for building AI-powered applications. It provides open sou Install the following Genkit dependencies to use Genkit in your project: - `genkit` provides Genkit core capabilities. -- `@genkit-ai/googleai` provides access to the Google AI Gemini models. Check out other plugins: https://www.npmjs.com/search?q=keywords:genkit-plugin +- `@genkit-ai/google-genai` provides access to the Google AI Gemini models. Check out other plugins: https://www.npmjs.com/search?q=keywords:genkit-plugin ```posix-terminal -npm install genkit @genkit-ai/googleai +npm install genkit @genkit-ai/google-genai ``` ## Make your first request diff --git a/js/plugins/mcp/examples/client/index.js b/js/plugins/mcp/examples/client/index.js index 61eaa702f5..709ceec247 100644 --- a/js/plugins/mcp/examples/client/index.js +++ b/js/plugins/mcp/examples/client/index.js @@ -14,7 +14,7 @@ * limitations under the License. */ -import { gemini15Pro, googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { createMcpClient } from '@genkit-ai/mcp'; import { genkit } from 'genkit'; import { logger } from 'genkit/logging'; @@ -32,5 +32,5 @@ const everythingClient = createMcpClient({ const ai = genkit({ plugins: [googleAI(), everythingClient], - model: gemini15Pro, + model: googleAI.model('gemini-2.5-pro'), }); diff --git a/js/plugins/mcp/examples/client/package.json b/js/plugins/mcp/examples/client/package.json index bd9e05302c..e647a2919b 100644 --- a/js/plugins/mcp/examples/client/package.json +++ b/js/plugins/mcp/examples/client/package.json @@ -12,7 +12,7 @@ "author": "", "license": "ISC", "dependencies": { - "@genkit-ai/googleai": "file:../../../googleai", + "@genkit-ai/google-genai": "file:../../../google-genai", "@modelcontextprotocol/server-filesystem": "^0.5.1", "@modelcontextprotocol/server-github": "^0.5.1", "genkit": "file:../../../../genkit", diff --git a/js/pnpm-lock.yaml b/js/pnpm-lock.yaml index 8b4034bd80..0542ba7797 100644 --- a/js/pnpm-lock.yaml +++ b/js/pnpm-lock.yaml @@ -181,16 +181,16 @@ importers: version: 4.1.1 '@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.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) doc-snippets: dependencies: '@genkit-ai/express': specifier: workspace:* version: link:../plugins/express - '@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 @@ -1091,7 +1091,7 @@ importers: version: link:../../plugins/compat-oai '@genkit-ai/express': specifier: ^1.1.0 - version: 1.12.0(@genkit-ai/core@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(express@5.1.0)(genkit@genkit) genkit: specifier: workspace:* version: link:../../genkit @@ -1115,47 +1115,6 @@ importers: specifier: ^5.6.2 version: 5.8.3 - testapps/context-caching: - dependencies: - '@genkit-ai/googleai': - specifier: workspace:* - version: link:../../plugins/googleai - '@genkit-ai/vertexai': - specifier: workspace:* - version: link:../../plugins/vertexai - '@google/generative-ai': - specifier: ^0.21.0 - version: 0.21.0 - genkit: - specifier: workspace:* - version: link:../../genkit - devDependencies: - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - typescript: - specifier: ^5.6.2 - version: 5.8.3 - - testapps/context-caching2: - dependencies: - '@genkit-ai/googleai': - specifier: workspace:* - version: link:../../plugins/googleai - '@google/generative-ai': - specifier: ^0.21.0 - version: 0.21.0 - genkit: - specifier: workspace:* - version: link:../../genkit - devDependencies: - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - typescript: - specifier: ^5.6.2 - version: 5.8.3 - testapps/custom-evaluators: dependencies: '@genkit-ai/google-genai': @@ -1343,9 +1302,6 @@ importers: '@genkit-ai/google-genai': specifier: workspace:* version: link:../../plugins/google-genai - '@genkit-ai/googleai': - specifier: workspace:* - version: link:../../plugins/googleai '@genkit-ai/mcp': specifier: workspace:* version: link:../../plugins/mcp @@ -1401,9 +1357,9 @@ importers: '@genkit-ai/evaluator': specifier: workspace:* version: link:../../plugins/evaluators - '@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 @@ -1583,9 +1539,9 @@ importers: '@genkit-ai/evaluator': specifier: workspace:* version: link:../../plugins/evaluators - '@genkit-ai/googleai': + '@genkit-ai/google-genai': specifier: workspace:* - version: link:../../plugins/googleai + version: link:../../plugins/google-genai '@genkit-ai/mcp': specifier: workspace:* version: link:../../plugins/mcp @@ -1708,7 +1664,7 @@ importers: version: link:../../plugins/ollama genkitx-openai: specifier: ^0.10.1 - version: 0.10.1(@genkit-ai/ai@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(@genkit-ai/core@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(encoding@0.1.13)(ws@8.18.3) + version: 0.10.1(@genkit-ai/ai@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(@genkit-ai/core@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(encoding@0.1.13)(ws@8.18.3) devDependencies: rimraf: specifier: ^6.0.1 @@ -2003,9 +1959,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 @@ -2052,9 +2008,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 @@ -2101,9 +2057,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 @@ -2763,11 +2719,11 @@ packages: '@firebase/webchannel-wrapper@1.0.3': resolution: {integrity: sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==} - '@genkit-ai/ai@1.28.0': - resolution: {integrity: sha512-hP2w/ZSRSy3qCk1eIKhsouVzvApNowaq2fpK/rIGRNAp4U6NzaYFRgof5yGGJZ9/ez5ScahhoM0m78e48EdxVg==} + '@genkit-ai/ai@1.29.0-rc.0': + resolution: {integrity: sha512-sXeU30DY5sCBJ+X6XUbYRpueA/GkaAI/4BwpopLaNtEN54JZ7TMAqTwY8lu8J3xTo6p+QihXVp3stb4me4/jMg==} - '@genkit-ai/core@1.28.0': - resolution: {integrity: sha512-/0/1FErF4BgrI5VOKQS4gQq2gd/KxuSPDKz/I31KEbtzyhP829BMTEBq3hQaxFxUsjNPpvQoxjZp4yYF5KG5fQ==} + '@genkit-ai/core@1.29.0-rc.0': + resolution: {integrity: sha512-hvsOjKyyCmV9u8zutF/2PhZaprP32ClTos8bNf2N88ASs1EUD3RcOS5qRweyVqEPdh2cGAU07xI3Tn5omKtsnA==} '@genkit-ai/express@1.12.0': resolution: {integrity: sha512-QAxSS07dX5ovSfsUB4s90KaDnv4zg1wnoxCZCa+jBsYUyv9NvCCTsOk25xAQgGxc7xi3+MD+3AsPier5oZILIg==} @@ -2902,10 +2858,6 @@ packages: resolution: {integrity: sha512-zs37judcTYFJf1U7tnuqnh7gdzF6dcWj9pNRxjA5JTONRoiQ0htrRdbefRFiewOIfXwhun5t9hbd2ray7812eQ==} engines: {node: '>=18.0.0'} - '@google/generative-ai@0.21.0': - resolution: {integrity: sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg==} - engines: {node: '>=18.0.0'} - '@google/generative-ai@0.24.1': resolution: {integrity: sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==} engines: {node: '>=18.0.0'} @@ -5841,8 +5793,8 @@ packages: resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} engines: {node: '>=18'} - genkit@1.28.0: - resolution: {integrity: sha512-vrPr17lbkgrigKuRZDTy4zwlcYxAZoumlvUSONXAZsEg0NzpoB3G5Mh+LMW639rVohRtW+wEP8AELyUDFYT/UQ==} + genkit@1.29.0-rc.0: + resolution: {integrity: sha512-mjqPq9gYsXrZN6WYdzF7UuCoYYyEigfGfLur1NAVGVXos3pBFBOW4yivslMxslCZhWYMDX4koJYtMEMPJApSQg==} genkitx-openai@0.10.1: resolution: {integrity: sha512-E9/DzyQcBUSTy81xT2pvEmdnn9Q/cKoojEt6lD/EdOeinhqE9oa59d/kuXTokCMekTrj3Rk7LtNBQIDjnyjNOA==} @@ -9773,9 +9725,9 @@ snapshots: '@firebase/webchannel-wrapper@1.0.3': {} - '@genkit-ai/ai@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1))': + '@genkit-ai/ai@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1))': dependencies: - '@genkit-ai/core': 1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/core': 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) '@opentelemetry/api': 1.9.0 '@types/node': 20.19.1 colorette: 2.0.20 @@ -9794,9 +9746,9 @@ snapshots: - supports-color optional: true - '@genkit-ai/ai@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit)': + '@genkit-ai/ai@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit)': dependencies: - '@genkit-ai/core': 1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) + '@genkit-ai/core': 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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 @@ -9814,7 +9766,7 @@ snapshots: - genkit - supports-color - '@genkit-ai/core@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1))': + '@genkit-ai/core@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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) @@ -9836,7 +9788,7 @@ snapshots: zod-to-json-schema: 3.24.5(zod@3.25.67) optionalDependencies: '@cfworker/json-schema': 4.1.1 - '@genkit-ai/firebase': 1.16.1(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) transitivePeerDependencies: - '@google-cloud/firestore' - encoding @@ -9846,7 +9798,7 @@ snapshots: - supports-color optional: true - '@genkit-ai/core@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit)': + '@genkit-ai/core@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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) @@ -9877,9 +9829,9 @@ snapshots: - genkit - supports-color - '@genkit-ai/express@1.12.0(@genkit-ai/core@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(express@5.1.0)(genkit@genkit)': dependencies: - '@genkit-ai/core': 1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) + '@genkit-ai/core': 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) body-parser: 1.20.3 cors: 2.8.5 express: 5.1.0 @@ -9887,12 +9839,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.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1))': dependencies: - '@genkit-ai/google-cloud': 1.16.1(encoding@0.1.13)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/google-cloud': 1.16.1(encoding@0.1.13)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) '@google-cloud/firestore': 7.11.1(encoding@0.1.13) firebase-admin: 13.6.0(encoding@0.1.13) - genkit: 1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1) + genkit: 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1) optionalDependencies: firebase: 11.9.1 transitivePeerDependencies: @@ -9913,7 +9865,7 @@ snapshots: - supports-color optional: true - '@genkit-ai/google-cloud@1.16.1(encoding@0.1.13)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1))': + '@genkit-ai/google-cloud@1.16.1(encoding@0.1.13)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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) @@ -9929,7 +9881,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.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1) + genkit: 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.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 @@ -10193,8 +10145,6 @@ snapshots: '@google/generative-ai@0.15.0': {} - '@google/generative-ai@0.21.0': {} - '@google/generative-ai@0.24.1': {} '@googleapis/checks@4.2.0(encoding@0.1.13)': @@ -13572,10 +13522,10 @@ snapshots: transitivePeerDependencies: - supports-color - genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1): + genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1): dependencies: - '@genkit-ai/ai': 1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) - '@genkit-ai/core': 1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/ai': 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) + '@genkit-ai/core': 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)) uuid: 10.0.0 transitivePeerDependencies: - '@google-cloud/firestore' @@ -13585,10 +13535,10 @@ snapshots: - supports-color optional: true - genkitx-openai@0.10.1(@genkit-ai/ai@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(@genkit-ai/core@1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(encoding@0.1.13)(ws@8.18.3): + genkitx-openai@0.10.1(@genkit-ai/ai@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(@genkit-ai/core@1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit))(encoding@0.1.13)(ws@8.18.3): dependencies: - '@genkit-ai/ai': 1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) - '@genkit-ai/core': 1.28.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) + '@genkit-ai/ai': 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) + '@genkit-ai/core': 1.29.0-rc.0(@google-cloud/firestore@7.11.1(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.6.0(encoding@0.1.13))(firebase@11.9.1)(genkit@genkit) openai: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.67) zod: 3.25.67 transitivePeerDependencies: diff --git a/js/scripts/bump_and_tag_js.sh b/js/scripts/bump_and_tag_js.sh index 100c2a9e48..b85d6b1ee3 100755 --- a/js/scripts/bump_and_tag_js.sh +++ b/js/scripts/bump_and_tag_js.sh @@ -47,7 +47,6 @@ bump_version js/plugins/dev-local-vectorstore @genkit-ai/dev-local-vectorstore d bump_version js/plugins/evaluators @genkit-ai/evaluator evaluator-v bump_version js/plugins/firebase @genkit-ai/firebase firebase-v bump_version js/plugins/google-cloud @genkit-ai/google-cloud google-cloud-v -bump_version js/plugins/googleai @genkit-ai/googleai googleai-v bump_version js/plugins/langchain genkitx-langchain bump_version js/plugins/next @genkit-ai/next next-v bump_version js/plugins/ollama genkitx-ollama diff --git a/js/testapps/context-caching/.gitignore b/js/testapps/context-caching/.gitignore deleted file mode 100644 index 6320cd248d..0000000000 --- a/js/testapps/context-caching/.gitignore +++ /dev/null @@ -1 +0,0 @@ -data \ No newline at end of file diff --git a/js/testapps/context-caching/README.md b/js/testapps/context-caching/README.md deleted file mode 100644 index 97ff99292a..0000000000 --- a/js/testapps/context-caching/README.md +++ /dev/null @@ -1,103 +0,0 @@ -# Context Caching Test Application - -This is a sample application demonstrating the use of **context caching** with Google's Gemini models via the Google Generative AI plugin in Genkit. The application highlights how to efficiently reuse context in large language model interactions. - -## Features - -- **Context Caching**: Efficiently reuse cached content to improve performance and reduce costs. -- **Supports Large Texts**: Works seamlessly with large texts, such as _War and Peace_ and _Lord of the Rings_. -- **Flexible Model Configuration**: Easily switch between supported Gemini models. - -## Installation - -To run this application, ensure you have the necessary dependencies installed. - -### Prerequisites - -- **Node.js** version 20 or higher -- **npm** or **pnpm** for package management - -### Install Dependencies - -```bash -npm install -``` - -or - -```bash -pnpm install -``` - -## Scripts - -The following scripts are available: - -- **`build`**: Compile TypeScript files. -- **`build:watch`**: Watch for changes and recompile TypeScript files. -- **`start`**: Run the compiled application. -- **`dev`**: Start the application in development mode with environment variable setup. -- **`genkit:dev`**: Run the application with `GENKIT_ENV=dev`. - -## Configuration - -This application uses the Google Generative AI plugin for Genkit. Ensure you have a valid API key for the Gemini API. - -### API Key Setup - -You can configure the API key in two ways: - -1. **Environment Variable**: - - ```bash - export GEMINI_API_KEY=your_api_key_here - ``` - -2. **Inline Configuration** (for testing only, not recommended for production): - ```ts - googleAI({ apiKey: yourKey }); - ``` - -## Usage - -### Running the Application - -To start the application: - -```bash -npm run dev -``` - -or - -```bash -pnpm dev -``` - -### Sample Flow - -The application defines a `lotrFlow` for analyzing _Lord of the Rings_ text. Modify the input file path in the `lotrFlow` definition to test different texts: - -```ts -const defaultQuery = - "Describe Gandalf's relationship with Frodo, referencing Gandalf quotes from the text."; -``` - -### Output - -The output will be generated by the model based on the provided context and query. - -## Dependencies - -- **@genkit-ai/googleai**: Provides the interface for Google Gemini models. -- **genkit**: Framework for integrating generative models. -- **typescript**: TypeScript support for the application. -- **cross-env**: Cross-platform environment variable setup. - -## License - -This project is licensed under the ISC License. - ---- - -**Note**: Ensure your API key is managed securely in production environments. Avoid embedding sensitive information directly in your codebase. diff --git a/js/testapps/context-caching/package.json b/js/testapps/context-caching/package.json deleted file mode 100644 index 61c564ed24..0000000000 --- a/js/testapps/context-caching/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "context-cashing", - "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", - "genkit:dev": "cross-env GENKIT_ENV=dev npm run dev", - "dev": "export GENKIT_RUNTIME_ID=$(openssl rand -hex 8) && node lib/index.js 2>&1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@genkit-ai/googleai": "workspace:*", - "@genkit-ai/vertexai": "workspace:*", - "@google/generative-ai": "^0.21.0", - "genkit": "workspace:*" - }, - "devDependencies": { - "cross-env": "^7.0.3", - "typescript": "^5.6.2" - } -} diff --git a/js/testapps/context-caching/src/index.ts b/js/testapps/context-caching/src/index.ts deleted file mode 100644 index 8c54c378a4..0000000000 --- a/js/testapps/context-caching/src/index.ts +++ /dev/null @@ -1,127 +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 as gemini15FlashGoogleAI, - googleAI, -} from '@genkit-ai/googleai'; -import { gemini15Flash, vertexAI } from '@genkit-ai/vertexai'; // Import specific AI plugins/models -import * as fs from 'fs/promises'; // Import fs module to handle file operations asynchronously -import { genkit, z } from 'genkit'; // Import Genkit framework and Zod for schema validation -import { logger } from 'genkit/logging'; // Import logging utility from Genkit - -const ai = genkit({ - plugins: [ - vertexAI({ experimental_debugTraces: true, location: 'us-central1' }), - googleAI({ experimental_debugTraces: true }), - ], // Initialize Genkit with the Google AI plugin -}); - -logger.setLogLevel('debug'); // Set the logging level to debug for detailed output - -export const lotrFlowVertex = ai.defineFlow( - { - name: 'lotrFlowVertex', // Define a unique name for this flow - inputSchema: z.object({ - query: z.string().optional(), // Define a query input, which is optional - textFilePath: z.string(), // Add the file path to input schema - }), - outputSchema: z.string(), // Define the expected output as a string - }, - async ({ query, textFilePath }, { sendChunk }) => { - const defaultQuery = 'What is the text i provided you with?'; // Default query to use if none is provided - - // Read the content from the file if the path is provided - const textContent = await fs.readFile(textFilePath, 'utf-8'); // Read the file as UTF-8 encoded text - - const llmResponse = await ai.generate({ - messages: [ - { - role: 'user', // Represents the user's input or query - content: [{ text: textContent }], // Use the loaded file content here - }, - { - role: 'model', // Represents the model's response - content: [ - { - text: 'This is the first few chapters of Lord of the Rings. Can I help in any way?', // Example model response - }, - ], - metadata: { - cache: { - ttlSeconds: 300, // Set the cache time-to-live for this message to 300 seconds - }, // this message is the last one to be cached. - }, - }, - ], - config: { - version: 'gemini-1.5-flash-001', // Specify the version of the model to be used - }, - model: gemini15Flash, // Specify the model (gemini15Flash) to use for generation - prompt: query || defaultQuery, // Use the provided query or fall back to the default query - onChunk: sendChunk, - }); - - return llmResponse.text; // Return the generated text from the model - } -); - -export const lotrFlowGoogleAI = ai.defineFlow( - { - name: 'lotrFlowGoogleAI', // Define a unique name for this flow - inputSchema: z.object({ - query: z.string().optional(), // Define a query input, which is optional - textFilePath: z.string(), // Add the file path to input schema - }), - outputSchema: z.string(), // Define the expected output as a string - }, - async ({ query, textFilePath }, { sendChunk }) => { - const defaultQuery = 'What is the text i provided you with?'; // Default query to use if none is provided - - // Read the content from the file if the path is provided - const textContent = await fs.readFile(textFilePath, 'utf-8'); // Read the file as UTF-8 encoded text - - const llmResponse = await ai.generate({ - messages: [ - { - role: 'user', // Represents the user's input or query - content: [{ text: textContent }], // Use the loaded file content here - }, - { - role: 'model', // Represents the model's response - content: [ - { - text: 'This is the first few chapters of Lord of the Rings. Can I help in any way?', // Example model response - }, - ], - metadata: { - cache: { - ttlSeconds: 300, // Set the cache time-to-live for this message to 300 seconds - }, // this message is the last one to be cached. - }, - }, - ], - config: { - version: 'gemini-1.5-flash-001', // Specify the version of the model to be used - }, - model: gemini15FlashGoogleAI, // Specify the model (gemini15Flash) to use for generation - prompt: query || defaultQuery, // Use the provided query or fall back to the default query - onChunk: sendChunk, - }); - - return llmResponse.text; // Return the generated text from the model - } -); diff --git a/js/testapps/context-caching/tsconfig.json b/js/testapps/context-caching/tsconfig.json deleted file mode 100644 index efbb566bf7..0000000000 --- a/js/testapps/context-caching/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/context-caching2/.gitignore b/js/testapps/context-caching2/.gitignore deleted file mode 100644 index 6320cd248d..0000000000 --- a/js/testapps/context-caching2/.gitignore +++ /dev/null @@ -1 +0,0 @@ -data \ No newline at end of file diff --git a/js/testapps/context-caching2/README.md b/js/testapps/context-caching2/README.md deleted file mode 100644 index fa267950f0..0000000000 --- a/js/testapps/context-caching2/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# War and Peace Context Caching Test Application - -This sample application demonstrates the use of **context caching** with Google's Gemini models via the Google Generative AI plugin in Genkit. The focus is on analyzing content from large texts like _War and Peace_. - -## Features - -- **Dynamic Content Loading**: Supports loading text from files or fetching default content online. -- **Context Caching**: Reuses previously cached content to optimize performance. -- **Flexible Query Handling**: Allows default and user-defined queries. - -## Installation - -Ensure you have the necessary dependencies installed. - -### Prerequisites - -- **Node.js** version 20 or higher -- **npm** or **pnpm** for package management - -### Install Dependencies - -```bash -npm install -``` - -or - -```bash -pnpm install -``` - -## Scripts - -The following scripts are available: - -- **`build`**: Compile TypeScript files. -- **`build:watch`**: Watch for changes and recompile TypeScript files. -- **`start`**: Run the compiled application. -- **`dev`**: Start the application in development mode with environment variable setup. -- **`genkit:dev`**: Run the application with `GENKIT_ENV=dev`. - -## Configuration - -This application uses the Google Generative AI plugin for Genkit. Ensure you have a valid API key for the Gemini API. - -### API Key Setup - -You can configure the API key in two ways: - -1. **Environment Variable**: - - ```bash - export GEMINI_API_KEY=your_api_key_here - ``` - -2. **Inline Configuration** (for testing only, not recommended for production): - ```ts - googleAI({ apiKey: yourKey }); - ``` - -## Usage - -### Running the Application - -To start the application: - -```bash -npm run dev -``` - -or - -```bash -pnpm dev -``` - -### Sample Flow - -The application defines a `warAndPeaceFlow` for analyzing _War and Peace_. You can either provide a local text file path or use the default content fetched online. - -Example: - -```ts -const defaultQuery = - "Describe Pierre Bezukhov's transformation throughout the novel."; -``` - -### Output - -The output will be generated by the model based on the provided context and query. - -## Dependencies - -- **@genkit-ai/googleai**: Provides the interface for Google Gemini models. -- **genkit**: Framework for integrating generative models. -- **typescript**: TypeScript support for the application. -- **cross-env**: Cross-platform environment variable setup. - -## License - -This project is licensed under the ISC License. - ---- - -**Note**: Ensure your API key is managed securely in production environments. Avoid embedding sensitive information directly in your codebase. diff --git a/js/testapps/context-caching2/package.json b/js/testapps/context-caching2/package.json deleted file mode 100644 index d827a07ff4..0000000000 --- a/js/testapps/context-caching2/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "context-cashing2", - "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", - "genkit:dev": "cross-env GENKIT_ENV=dev npm run dev", - "dev": "export GENKIT_RUNTIME_ID=$(openssl rand -hex 8) && node lib/index.js 2>&1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "@genkit-ai/googleai": "workspace:*", - "@google/generative-ai": "^0.21.0", - "genkit": "workspace:*" - }, - "devDependencies": { - "cross-env": "^7.0.3", - "typescript": "^5.6.2" - } -} diff --git a/js/testapps/context-caching2/src/index.ts b/js/testapps/context-caching2/src/index.ts deleted file mode 100644 index 4cb0e75e8c..0000000000 --- a/js/testapps/context-caching2/src/index.ts +++ /dev/null @@ -1,100 +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, googleAI } from '@genkit-ai/googleai'; // Import specific plugins/models for generative AI -import * as fs from 'fs/promises'; // Import file system promises for reading files -import { genkit, z } from 'genkit'; // Import Genkit framework and Zod schema validation -import { logger } from 'genkit/logging'; // Import logger for debugging and logging - -// If using Node.js <18: -// import fetch from 'node-fetch'; // Install this if `fetch` is not natively available. - -const ai = genkit({ - plugins: [googleAI()], // Initialize Genkit with Google AI plugin -}); - -logger.setLogLevel('debug'); // Set logging level to debug for detailed logs - -export const warAndPeaceFlow = ai.defineFlow( - { - name: 'warAndPeaceFlow', // Define a unique name for this flow - inputSchema: z.object({ - query: z.string().optional(), // Define user input schema for query, optional string - textFilePath: z.string().optional(), // Define schema for the text file path, optional string - }), - outputSchema: z.string(), // Define the expected output schema, a string - }, - async ({ query, textFilePath }) => { - const defaultQuery = - "Describe Pierre Bezukhov's transformation throughout the novel."; // Default query if the user doesn't provide one - - let textContent; - - if (textFilePath) { - // Read the content from the provided file path - textContent = await fs.readFile(textFilePath, 'utf-8'); - } else { - // Fetch the default content from the provided link - const response = await fetch( - 'https://www.gutenberg.org/cache/epub/2600/pg2600.txt' - ); - if (!response.ok) { - const errMsg = (await response.json()).error?.message || ''; - throw new Error( - `Failed to fetch default text content: ${response.statusText}. ${errMsg}` - ); - } - textContent = await response.text(); - } - - // Generate a response using AI with the following parameters - const llmResponse = await ai.generate({ - messages: [ - { - role: 'user', // User message providing context or query - content: [{ text: textContent }], // Include the loaded text content as an array of parts - }, - { - role: 'model', // Model's response to the user's query - content: [ - { - text: 'Here is some analysis based on the text provided.', - }, - ], - metadata: { - cache: { - ttlSeconds: 300, // Cache TTL for this specific response - }, - }, - }, - ], - config: { - version: 'gemini-1.5-flash-001', // Specify the model version - temperature: 0.7, // Control randomness in the output - maxOutputTokens: 1000, // Limit the maximum number of tokens for the response - topK: 50, // Limit token selection to top K probabilities - topP: 0.9, // Apply nucleus sampling with 0.9 threshold - stopSequences: ['END'], // Define custom sequences to stop the generation - }, - tools: [], // No tools used in this request - model: gemini15Flash, // Specify the generative model to use - prompt: query || defaultQuery, // Use user's query or default query for the main task - returnToolRequests: false, // Prevent tool requests from being returned automatically - }); - - return llmResponse.text; // Return the generated response text - } -); diff --git a/js/testapps/context-caching2/tsconfig.json b/js/testapps/context-caching2/tsconfig.json deleted file mode 100644 index efbb566bf7..0000000000 --- a/js/testapps/context-caching2/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/esm/package.json b/js/testapps/esm/package.json index ad037c6347..8ebe7707dd 100644 --- a/js/testapps/esm/package.json +++ b/js/testapps/esm/package.json @@ -25,7 +25,6 @@ "@genkit-ai/firebase": "workspace:*", "@genkit-ai/google-cloud": "workspace:*", "@genkit-ai/google-genai": "workspace:*", - "@genkit-ai/googleai": "workspace:*", "@genkit-ai/mcp": "workspace:*", "@genkit-ai/next": "workspace:^", "@genkit-ai/vertexai": "workspace:*", diff --git a/js/testapps/esm/src/index.ts b/js/testapps/esm/src/index.ts index 2704580d63..f62d40323a 100644 --- a/js/testapps/esm/src/index.ts +++ b/js/testapps/esm/src/index.ts @@ -26,10 +26,10 @@ import { enableFirebaseTelemetry } from '@genkit-ai/firebase'; import { firebaseContext } from '@genkit-ai/firebase/context'; import { enableGoogleCloudTelemetry } from '@genkit-ai/google-cloud'; import { + googleAI, googleAI as newGoogleAI, vertexAI as newVertexAI, } from '@genkit-ai/google-genai'; -import { googleAI } from '@genkit-ai/googleai'; import { createMcpClient, createMcpHost, diff --git a/js/testapps/evals/package.json b/js/testapps/evals/package.json index b0d002c162..9b0c2b9c34 100644 --- a/js/testapps/evals/package.json +++ b/js/testapps/evals/package.json @@ -18,7 +18,7 @@ "dependencies": { "@genkit-ai/dev-local-vectorstore": "workspace:*", "@genkit-ai/evaluator": "workspace:*", - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "@genkit-ai/vertexai": "workspace:*", "genkit": "workspace:*", "genkitx-langchain": "workspace:*", diff --git a/js/testapps/evals/src/genkit.ts b/js/testapps/evals/src/genkit.ts index b24efd7a9c..c2d17a7724 100644 --- a/js/testapps/evals/src/genkit.ts +++ b/js/testapps/evals/src/genkit.ts @@ -16,7 +16,7 @@ import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore'; import { GenkitMetric, genkitEval } from '@genkit-ai/evaluator'; -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit'; import { langchain } from 'genkitx-langchain'; diff --git a/js/testapps/evals/src/pdf-rag.ts b/js/testapps/evals/src/pdf-rag.ts index 59ac6d3629..e2aeb45666 100644 --- a/js/testapps/evals/src/pdf-rag.ts +++ b/js/testapps/evals/src/pdf-rag.ts @@ -18,7 +18,7 @@ import { devLocalIndexerRef, devLocalRetrieverRef, } from '@genkit-ai/dev-local-vectorstore'; -import googleAI from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { z } from 'genkit'; import { EvalStatusEnum, type BaseEvalDataPoint } from 'genkit/evaluator'; import { Document } from 'genkit/retriever'; diff --git a/js/testapps/mcp/package.json b/js/testapps/mcp/package.json index 4fa6651c2b..0b1bd95d09 100644 --- a/js/testapps/mcp/package.json +++ b/js/testapps/mcp/package.json @@ -18,7 +18,7 @@ "dependencies": { "@genkit-ai/dev-local-vectorstore": "workspace:*", "@genkit-ai/evaluator": "workspace:*", - "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/google-genai": "workspace:*", "@genkit-ai/mcp": "workspace:*", "@genkit-ai/vertexai": "workspace:*", "@modelcontextprotocol/sdk": "^1.13.0", diff --git a/js/testapps/mcp/src/index.ts b/js/testapps/mcp/src/index.ts index e4d19223c8..8bf2f4c99a 100644 --- a/js/testapps/mcp/src/index.ts +++ b/js/testapps/mcp/src/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { defineMcpHost } from '@genkit-ai/mcp'; import { genkit, z } from 'genkit'; import { logger } from 'genkit/logging'; diff --git a/js/testapps/mcp/src/server.ts b/js/testapps/mcp/src/server.ts index 5789927b2e..320eaaad3e 100644 --- a/js/testapps/mcp/src/server.ts +++ b/js/testapps/mcp/src/server.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { createMcpServer } from '@genkit-ai/mcp'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { genkit, z } from 'genkit/beta'; diff --git a/js/testapps/vertexai-vector-search-bigquery/package.json b/js/testapps/vertexai-vector-search-bigquery/package.json index df4840d54e..2cf9df464b 100644 --- a/js/testapps/vertexai-vector-search-bigquery/package.json +++ b/js/testapps/vertexai-vector-search-bigquery/package.json @@ -18,7 +18,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/bigquery": "^7.8.0", "dotenv": "^16.4.5", diff --git a/js/testapps/vertexai-vector-search-custom/package.json b/js/testapps/vertexai-vector-search-custom/package.json index 1fe559eb7f..504919e8f7 100644 --- a/js/testapps/vertexai-vector-search-custom/package.json +++ b/js/testapps/vertexai-vector-search-custom/package.json @@ -18,7 +18,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/bigquery": "^7.8.0", "dotenv": "^16.4.5", diff --git a/js/testapps/vertexai-vector-search-firestore/package.json b/js/testapps/vertexai-vector-search-firestore/package.json index ad00d5b30c..702fe37a81 100644 --- a/js/testapps/vertexai-vector-search-firestore/package.json +++ b/js/testapps/vertexai-vector-search-firestore/package.json @@ -20,7 +20,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:*", "dotenv": "^16.4.5", "express": "^4.21.0", diff --git a/releasekit.toml b/releasekit.toml index c15fc32091..ba09684153 100644 --- a/releasekit.toml +++ b/releasekit.toml @@ -308,7 +308,6 @@ unreleased_plugins = [ # "@genkit-ai/firebase", # "@genkit-ai/google-cloud", # "@genkit-ai/google-genai", -# "@genkit-ai/googleai", # "@genkit-ai/vertexai", # ] # community_plugins = [ diff --git a/samples/js-prompts/package-lock.json b/samples/js-prompts/package-lock.json index 758243d248..876258e084 100644 --- a/samples/js-prompts/package-lock.json +++ b/samples/js-prompts/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "@genkit-ai/express": "^1.0.4", - "@genkit-ai/googleai": "^1.0.4", + "@genkit-ai/google-genai": "^1.0.4", "express": "^4.21.0", "genkit": "^1.0.4", "zod": "^3.23.8" @@ -32,11 +32,18 @@ "zod": "^3.20.2" } }, + "node_modules/@cfworker/json-schema": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.1.tgz", + "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==", + "license": "MIT", + "optional": true + }, "node_modules/@colors/colors": { "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" } @@ -45,7 +52,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", @@ -436,26 +443,272 @@ "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.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.28.0.tgz", + "integrity": "sha512-hP2w/ZSRSy3qCk1eIKhsouVzvApNowaq2fpK/rIGRNAp4U6NzaYFRgof5yGGJZ9/ez5ScahhoM0m78e48EdxVg==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/core": "1.0.4", + "@genkit-ai/core": "1.28.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/@genkit-ai/core": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.28.0.tgz", + "integrity": "sha512-/0/1FErF4BgrI5VOKQS4gQq2gd/KxuSPDKz/I31KEbtzyhP829BMTEBq3hQaxFxUsjNPpvQoxjZp4yYF5KG5fQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.9.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", + "@types/json-schema": "^7.0.15", + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "async-mutex": "^0.5.0", + "cors": "^2.8.5", + "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": { + "@cfworker/json-schema": "^4.1.1", + "@genkit-ai/firebase": "^1.16.1" + } + }, + "node_modules/@genkit-ai/ai/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/ai/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/ai/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/ai/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/ai/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/ai/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/core": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.0.4.tgz", "integrity": "sha512-O4ASgeXLkjc8qyhgUhY9TV//V0W6tvhv7YV0LEdeQ6Vum7CvdBNB1w8moUQADeyMPE00VuqURcGKpejVshY3OQ==", + "peer": true, "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.25.0", @@ -491,17 +744,147 @@ "genkit": "^1.0.4" } }, - "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/firebase": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/firebase/-/firebase-1.28.0.tgz", + "integrity": "sha512-C6AHoVUw2qMp+peHNOjq+/nVMUPJl+eRhGWdsqti8+KaVOGvswfk9gBZqaG6lUK410UsCzQ7RUn0pmEoxnXG8A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@genkit-ai/google-cloud": "^1.28.0" + }, + "peerDependencies": { + "@google-cloud/firestore": "^7.11.0", + "firebase": ">=11.5.0", + "firebase-admin": ">=12.2", + "genkit": "^1.28.0" + }, + "peerDependenciesMeta": { + "firebase": { + "optional": true + } + } + }, + "node_modules/@genkit-ai/google-cloud": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.28.0.tgz", + "integrity": "sha512-tbtAaYoE6pD4IFpPHNlCeU1usvba2jlXz4DOJo0CYdXp04AFytYT/L17bDUGFka42moWAY+DlMgcw9OpDueRyA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@google/generative-ai": "^0.21.0", + "@google-cloud/logging-winston": "^6.0.0", + "@google-cloud/modelarmor": "^0.4.1", + "@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.28.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.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-genai/-/google-genai-1.28.0.tgz", + "integrity": "sha512-B61BvCGyVsJHKwouTC/oj9HjzG8qVcKJzq7Qajo9xSsuckSwWIWQVQknbSK254k7cl8jxkisp8juH9oY3568ww==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.2", + "jsonpath-plus": "^10.3.0" + }, + "peerDependencies": { + "genkit": "^1.28.0" } }, "node_modules/@genkit-ai/telemetry-server": { @@ -570,11 +953,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", @@ -586,12 +990,453 @@ "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/@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/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/modelarmor": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@google-cloud/modelarmor/-/modelarmor-0.4.1.tgz", + "integrity": "sha512-CT9TpQF443aatjhRRvazrYNOvUot26HnFP3hhgmV89QYygNPB6owWvGFFOTsKK4zSvTDfkeeb+E6diVXxn9t4g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "google-gax": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@google-cloud/modelarmor/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, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/google-auth-library": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/google-gax": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-5.0.6.tgz", + "integrity": "sha512-1kGbqVQBZPAAu4+/R1XxPQKP0ydbNYoLAr4l0ZO2bMV0kLyLW4I1gAk++qBLWt7DPORTzmWRMsCZe86gDjShJA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.12.6", + "@grpc/proto-loader": "^0.8.0", + "duplexify": "^4.1.3", + "google-auth-library": "^10.1.0", + "google-logging-utils": "^1.1.1", + "node-fetch": "^3.3.2", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^3.0.0", + "protobufjs": "^7.5.3", + "retry-request": "^8.0.0", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "optional": true, + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/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 + }, + "node_modules/@google-cloud/modelarmor/node_modules/proto3-json-serializer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-3.0.4.tgz", + "integrity": "sha512-E1sbAYg3aEbXrq0n1ojJkRHQJGE1kaE/O6GLA94y8rnJBfgvOPTOd1b9hOceQK1FFZI9qMh1vBERCyO2ifubcw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "protobufjs": "^7.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/retry-request": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-8.0.2.tgz", + "integrity": "sha512-JzFPAfklk1kjR1w76f0QOIhoDkNkSqW8wYKT08n9yysTmZfB+RQ2QoXoTAeOi1HD9ZipTyTAZg3c4pM/jeqgSw==", + "license": "MIT", + "optional": true, + "dependencies": { + "extend": "^3.0.2", + "teeny-request": "^10.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/teeny-request": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-10.1.0.tgz", + "integrity": "sha512-3ZnLvgWF29jikg1sAQ1g0o+lr5JX6sVgYvfUJazn7ZjJroDBUTWp44/+cFVX0bULjv4vci+rBD+oGVAkWqhUbw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^3.3.2", + "stream-events": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/teeny-request/node_modules/https-proxy-agent": { + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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.19.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.19.0.tgz", + "integrity": "sha512-n2FjE7NAOYyshogdc7KQOl/VZb4sneqPjWouSyia9CMDdMhRX5+RIbqalNmC7LOLzuLAN89VlF2HvG8na9G+zQ==", + "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": "^5.3.4", + "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": { @@ -627,7 +1472,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, + "devOptional": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -644,7 +1489,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12" }, @@ -656,7 +1501,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12" }, @@ -668,13 +1513,13 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "devOptional": 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==", - "dev": true, + "devOptional": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -691,110 +1536,811 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, + "devOptional": true, + "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==", + "devOptional": true, + "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": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@jsep-plugin/assignment": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", + "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@jsep-plugin/regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", + "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.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==", + "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==", + "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.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", + "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.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==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@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", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "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-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==", + "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-grpc/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-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==", + "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-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==", + "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==", + "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-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": { - "ansi-regex": "^6.0.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "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, + "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": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "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": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "peerDependencies": { + "@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-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": ">=8.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/api-logs": { + "node_modules/@opentelemetry/instrumentation-grpc": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", - "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "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/api": "^1.0.0" + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1" }, "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-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" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.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-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/semantic-conventions": "1.28.0" + "@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/instrumentation-http": { "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==", + "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": { - "@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.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" }, "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": { + "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" }, @@ -805,268 +2351,396 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/instrumentation-http/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-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/semantic-conventions": "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 <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-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/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@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-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==", + "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/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-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/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.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-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-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/semantic-conventions": "1.25.1" + "@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-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-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/semantic-conventions": "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 <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-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/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@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-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-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.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/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-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/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.22.0", + "@types/mysql": "2.15.22" }, "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-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/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-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-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/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.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-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/resources": "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.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-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/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-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.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" @@ -1240,6 +2914,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", @@ -1312,6 +3012,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", @@ -1597,6 +3398,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", @@ -1665,7 +3482,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" } @@ -1679,19 +3496,37 @@ "https://trpc.io/sponsor" ] }, + "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/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==", - "dev": true + "devOptional": true }, - "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/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": { - "handlebars": "*" + "@types/node": "*" } }, "node_modules/@types/json-schema": { @@ -1699,11 +3534,51 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, + "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/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.16", @@ -1713,11 +3588,33 @@ "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/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": "*", @@ -1729,7 +3626,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", @@ -1745,17 +3642,27 @@ "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", @@ -1771,7 +3678,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" }, @@ -1858,6 +3765,12 @@ } } }, + "node_modules/ansi-color": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.2.tgz", + "integrity": "sha512-qPx7iZZDHITYrrfzaUFXQpIcF2xYifcQHQflP1pFz8yY3lfU6GgCHb0+hJD7nimYKO7f2iaYYwBpZ+GaNcAhcA==", + "license": "BSD License" + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1919,11 +3832,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", @@ -1933,11 +3856,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", @@ -1954,7 +3888,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "devOptional": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -2033,7 +3967,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -2086,7 +4020,22 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "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", @@ -2249,7 +4198,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" @@ -2275,7 +4224,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" @@ -2285,7 +4234,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" } @@ -2294,7 +4243,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", @@ -2305,7 +4254,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" @@ -2315,7 +4264,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" }, @@ -2397,7 +4346,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "devOptional": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2457,7 +4406,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" } @@ -2501,13 +4450,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": { @@ -2533,7 +4482,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", @@ -2545,7 +4494,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "devOptional": true }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", @@ -2569,7 +4518,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", @@ -2583,11 +4532,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", @@ -2703,11 +4661,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", @@ -2815,6 +4796,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", @@ -2835,6 +4827,40 @@ } ] }, + "node_modules/fast-xml-parser": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz", + "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "strnum": "^2.1.2" + }, + "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", @@ -2848,7 +4874,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", @@ -2916,11 +4942,73 @@ "node": ">= 0.8" } }, + "node_modules/firebase-admin": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.6.1.tgz", + "integrity": "sha512-Zgc6yPtmPxAZo+FoK6LMG6zpSEsoSK8ifIR+IqF4oWuC3uWZU40OjxgfLTSFcsRlj/k/wD66zNv2UiTRreCNSw==", + "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.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", + "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", + "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", @@ -2946,7 +5034,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, + "devOptional": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -3031,7 +5119,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", @@ -3092,12 +5180,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.28.0", + "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.28.0.tgz", + "integrity": "sha512-vrPr17lbkgrigKuRZDTy4zwlcYxAZoumlvUSONXAZsEg0NzpoB3G5Mh+LMW639rVohRtW+wEP8AELyUDFYT/UQ==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/ai": "1.0.4", - "@genkit-ai/core": "1.0.4", + "@genkit-ai/ai": "1.28.0", + "@genkit-ai/core": "1.28.0", "uuid": "^10.0.0" } }, @@ -3122,6 +5211,122 @@ "genkit": "dist/bin/genkit.js" } }, + "node_modules/genkit/node_modules/@genkit-ai/core": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.28.0.tgz", + "integrity": "sha512-/0/1FErF4BgrI5VOKQS4gQq2gd/KxuSPDKz/I31KEbtzyhP829BMTEBq3hQaxFxUsjNPpvQoxjZp4yYF5KG5fQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.9.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", + "@types/json-schema": "^7.0.15", + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "async-mutex": "^0.5.0", + "cors": "^2.8.5", + "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": { + "@cfworker/json-schema": "^4.1.1", + "@genkit-ai/firebase": "^1.16.1" + } + }, + "node_modules/genkit/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/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/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/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/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/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/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3207,7 +5412,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, + "devOptional": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3255,7 +5460,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", @@ -3278,7 +5483,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" }, @@ -3298,11 +5503,67 @@ "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" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "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" } @@ -3340,6 +5601,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", @@ -3387,6 +5649,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", @@ -3402,11 +5698,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", @@ -3420,7 +5724,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" }, @@ -3432,7 +5736,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" }, @@ -3449,7 +5753,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", @@ -3578,7 +5882,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", @@ -3657,7 +5961,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" } @@ -3704,13 +6008,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "devOptional": true }, "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, + "devOptional": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -3721,6 +6025,42 @@ "@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": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -3733,6 +6073,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsep": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", + "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/json-2-csv": { "version": "5.5.8", "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.8.tgz", @@ -3764,33 +6113,131 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonpath-plus": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.4.0.tgz", + "integrity": "sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==", + "license": "MIT", + "dependencies": { + "@jsep-plugin/assignment": "^1.3.0", + "@jsep-plugin/regex": "^1.0.4", + "jsep": "^1.4.0" + }, + "bin": { + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "jws": "^4.0.1", + "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/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.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwks-rsa": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.2.2.tgz", + "integrity": "sha512-BqTyEDV+lS8F2trk3A+qJnxV5Q9EqKCBJOPti3W97r7qTympCZjb7h2X6f2kc+0K3rsSTY1/6YG2eaXKoj497w==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/jsonwebtoken": "^9.0.4", + "debug": "^4.3.4", + "jose": "^4.15.4", + "limiter": "^1.1.5", + "lru-memoizer": "^2.2.0" }, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "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": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "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", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", "dependencies": { - "jwa": "^2.0.0", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -3798,7 +6245,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", @@ -3811,11 +6265,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", @@ -3836,7 +6361,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", @@ -3853,7 +6378,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", @@ -3864,7 +6389,33 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "devOptional": 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", @@ -3971,7 +6522,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3986,6 +6537,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" } @@ -3994,7 +6546,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -4026,7 +6578,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", @@ -4063,6 +6616,23 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "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", @@ -4084,7 +6654,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" } @@ -4115,7 +6685,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" } @@ -4124,7 +6694,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" } @@ -4165,6 +6735,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", @@ -4197,11 +6776,28 @@ "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", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "devOptional": true }, "node_modules/parseurl": { "version": "1.3.3", @@ -4214,13 +6810,14 @@ "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", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -4234,7 +6831,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, + "devOptional": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -4266,6 +6863,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.11.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", + "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", + "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", @@ -4278,11 +6909,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.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "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" }, @@ -4291,10 +6973,11 @@ } }, "node_modules/protobufjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -4350,12 +7033,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", @@ -4396,7 +7091,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", @@ -4515,11 +7210,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", @@ -4529,6 +7235,22 @@ "node": ">=14" } }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -4570,7 +7292,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" } @@ -4650,7 +7372,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "devOptional": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4662,7 +7384,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -4744,7 +7466,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14" }, @@ -4756,7 +7478,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" } @@ -4765,6 +7487,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" } @@ -4785,7 +7508,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": "*" } @@ -4811,7 +7534,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" } @@ -4820,17 +7543,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", @@ -4849,7 +7577,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "devOptional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4875,7 +7603,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4883,11 +7611,25 @@ "node": ">=8" } }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "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", @@ -4916,7 +7658,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", @@ -4932,7 +7674,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" }, @@ -4944,7 +7686,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" }, @@ -4961,7 +7703,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" @@ -4974,13 +7716,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" }, @@ -5000,7 +7742,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" @@ -5025,7 +7767,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", @@ -5074,7 +7841,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" } @@ -5153,6 +7920,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" @@ -5186,11 +7954,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", @@ -5208,6 +7989,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -5242,6 +8024,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", @@ -5255,7 +8064,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "dependencies": { "isexe": "^2.0.0" }, @@ -5270,7 +8079,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", @@ -5292,7 +8101,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", @@ -5305,7 +8114,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", @@ -5326,7 +8136,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5343,7 +8153,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", @@ -5372,6 +8182,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", @@ -5380,15 +8205,27 @@ "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.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { @@ -5426,6 +8263,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-prompts/package.json b/samples/js-prompts/package.json index e8cb275c4f..b529614bda 100644 --- a/samples/js-prompts/package.json +++ b/samples/js-prompts/package.json @@ -15,7 +15,7 @@ "license": "ISC", "dependencies": { "genkit": "^1.0.4", - "@genkit-ai/googleai": "^1.0.4", + "@genkit-ai/google-genai": "^1.0.4", "@genkit-ai/express": "^1.0.4", "express": "^4.21.0", "zod": "^3.23.8" diff --git a/samples/js-prompts/src/index.ts b/samples/js-prompts/src/index.ts index b1f2210ecb..1194298ff7 100644 --- a/samples/js-prompts/src/index.ts +++ b/samples/js-prompts/src/index.ts @@ -16,7 +16,7 @@ // Import the Genkit core libraries and plugins. import { startFlowServer } from '@genkit-ai/express'; -import { googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit, z } from 'genkit'; const ai = genkit({ diff --git a/samples/js-schoolAgent/package-lock.json b/samples/js-schoolAgent/package-lock.json index 472e97e10a..d2207bdcb7 100644 --- a/samples/js-schoolAgent/package-lock.json +++ b/samples/js-schoolAgent/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.1", "license": "ISC", "dependencies": { - "@genkit-ai/googleai": "^1.0.4", + "@genkit-ai/google-genai": "^1.0.4", "genkit": "^1.0.4", "google-auth-library": "^9.6.3", "llm-chunk": "^0.0.1", @@ -36,11 +36,18 @@ "zod": "^3.20.2" } }, + "node_modules/@cfworker/json-schema": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.1.tgz", + "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==", + "license": "MIT", + "optional": true + }, "node_modules/@colors/colors": { "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" } @@ -49,7 +56,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", @@ -440,58 +447,408 @@ "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.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.28.0.tgz", + "integrity": "sha512-hP2w/ZSRSy3qCk1eIKhsouVzvApNowaq2fpK/rIGRNAp4U6NzaYFRgof5yGGJZ9/ez5ScahhoM0m78e48EdxVg==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/core": "1.0.4", + "@genkit-ai/core": "1.28.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.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.28.0.tgz", + "integrity": "sha512-/0/1FErF4BgrI5VOKQS4gQq2gd/KxuSPDKz/I31KEbtzyhP829BMTEBq3hQaxFxUsjNPpvQoxjZp4yYF5KG5fQ==", + "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": { + "@cfworker/json-schema": "^4.1.1", + "@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.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/firebase/-/firebase-1.28.0.tgz", + "integrity": "sha512-C6AHoVUw2qMp+peHNOjq+/nVMUPJl+eRhGWdsqti8+KaVOGvswfk9gBZqaG6lUK410UsCzQ7RUn0pmEoxnXG8A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@genkit-ai/google-cloud": "^1.28.0" + }, + "peerDependencies": { + "@google-cloud/firestore": "^7.11.0", + "firebase": ">=11.5.0", + "firebase-admin": ">=12.2", + "genkit": "^1.28.0" + }, + "peerDependenciesMeta": { + "firebase": { + "optional": true + } + } + }, + "node_modules/@genkit-ai/google-cloud": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.28.0.tgz", + "integrity": "sha512-tbtAaYoE6pD4IFpPHNlCeU1usvba2jlXz4DOJo0CYdXp04AFytYT/L17bDUGFka42moWAY+DlMgcw9OpDueRyA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@google/generative-ai": "^0.21.0", + "@google-cloud/logging-winston": "^6.0.0", + "@google-cloud/modelarmor": "^0.4.1", + "@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.28.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.28.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-genai/-/google-genai-1.28.0.tgz", + "integrity": "sha512-B61BvCGyVsJHKwouTC/oj9HjzG8qVcKJzq7Qajo9xSsuckSwWIWQVQknbSK254k7cl8jxkisp8juH9oY3568ww==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.2", + "jsonpath-plus": "^10.3.0" }, "peerDependencies": { - "genkit": "^1.0.4" + "genkit": "^1.28.0" } }, "node_modules/@genkit-ai/telemetry-server": { @@ -560,11 +917,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", @@ -576,215 +954,1384 @@ "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", + "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/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/modelarmor": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@google-cloud/modelarmor/-/modelarmor-0.4.1.tgz", + "integrity": "sha512-CT9TpQF443aatjhRRvazrYNOvUot26HnFP3hhgmV89QYygNPB6owWvGFFOTsKK4zSvTDfkeeb+E6diVXxn9t4g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "google-gax": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@google-cloud/modelarmor/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, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/google-auth-library": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/google-gax": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-5.0.6.tgz", + "integrity": "sha512-1kGbqVQBZPAAu4+/R1XxPQKP0ydbNYoLAr4l0ZO2bMV0kLyLW4I1gAk++qBLWt7DPORTzmWRMsCZe86gDjShJA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.12.6", + "@grpc/proto-loader": "^0.8.0", + "duplexify": "^4.1.3", + "google-auth-library": "^10.1.0", + "google-logging-utils": "^1.1.1", + "node-fetch": "^3.3.2", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^3.0.0", + "protobufjs": "^7.5.3", + "retry-request": "^8.0.0", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "optional": true, + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/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 + }, + "node_modules/@google-cloud/modelarmor/node_modules/proto3-json-serializer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-3.0.4.tgz", + "integrity": "sha512-E1sbAYg3aEbXrq0n1ojJkRHQJGE1kaE/O6GLA94y8rnJBfgvOPTOd1b9hOceQK1FFZI9qMh1vBERCyO2ifubcw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "protobufjs": "^7.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/retry-request": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-8.0.2.tgz", + "integrity": "sha512-JzFPAfklk1kjR1w76f0QOIhoDkNkSqW8wYKT08n9yysTmZfB+RQ2QoXoTAeOi1HD9ZipTyTAZg3c4pM/jeqgSw==", + "license": "MIT", + "optional": true, + "dependencies": { + "extend": "^3.0.2", + "teeny-request": "^10.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/teeny-request": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-10.1.0.tgz", + "integrity": "sha512-3ZnLvgWF29jikg1sAQ1g0o+lr5JX6sVgYvfUJazn7ZjJroDBUTWp44/+cFVX0bULjv4vci+rBD+oGVAkWqhUbw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^3.3.2", + "stream-events": "^1.0.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@google-cloud/modelarmor/node_modules/teeny-request/node_modules/https-proxy-agent": { + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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.19.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.19.0.tgz", + "integrity": "sha512-n2FjE7NAOYyshogdc7KQOl/VZb4sneqPjWouSyia9CMDdMhRX5+RIbqalNmC7LOLzuLAN89VlF2HvG8na9G+zQ==", + "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": "^5.3.4", + "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" + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "devOptional": true, + "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.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "devOptional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "devOptional": true, + "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==", + "devOptional": 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==", + "devOptional": true, + "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.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "devOptional": true, + "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==", + "devOptional": true, + "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": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@jsep-plugin/assignment": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", + "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@jsep-plugin/regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", + "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.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==", + "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==", + "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.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" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.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==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@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", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "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-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==", + "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-grpc/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-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==", + "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-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==", + "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==", + "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-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": ">=12.10.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "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": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagation-utils": "^0.30.10", + "@opentelemetry/semantic-conventions": "^1.22.0" }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "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": ">=6" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "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, + "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": { - "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" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { - "node": ">=12" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "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==", - "dev": true, + "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": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "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==", - "dev": true, + "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": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "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/@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/@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, + "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": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@opentelemetry/instrumentation": "^0.52.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "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==", - "dev": true, + "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": { - "ansi-regex": "^6.0.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "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, + "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": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "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": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "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/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-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": ">=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-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/api": "^1.0.0" + "@opentelemetry/instrumentation": "^0.52.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-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/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-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/semantic-conventions": "1.28.0" + "@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/instrumentation-http": { "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==", + "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": { - "@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.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" }, "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": { + "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" }, @@ -795,268 +2342,396 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/instrumentation-http/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-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.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-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/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@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/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-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/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-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/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/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" @@ -1230,6 +2905,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", @@ -1302,6 +3003,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", @@ -1374,6 +3176,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" @@ -1587,6 +3390,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", @@ -1655,7 +3474,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" } @@ -1669,31 +3488,90 @@ "https://trpc.io/sponsor" ] }, + "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/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==", - "dev": true + "devOptional": true }, - "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/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": { - "handlebars": "*" + "@types/node": "*" } }, "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/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.16", @@ -1709,11 +3587,33 @@ "integrity": "sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg==", "dev": true }, + "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/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": "*", @@ -1725,7 +3625,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", @@ -1741,17 +3641,27 @@ "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", @@ -1767,7 +3677,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" }, @@ -1854,6 +3764,12 @@ } } }, + "node_modules/ansi-color": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.2.tgz", + "integrity": "sha512-qPx7iZZDHITYrrfzaUFXQpIcF2xYifcQHQflP1pFz8yY3lfU6GgCHb0+hJD7nimYKO7f2iaYYwBpZ+GaNcAhcA==", + "license": "BSD License" + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1915,11 +3831,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", @@ -1929,11 +3855,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", @@ -1950,7 +3887,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "devOptional": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -2029,7 +3966,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -2082,7 +4019,22 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "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", @@ -2245,7 +4197,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" @@ -2271,7 +4223,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" @@ -2281,7 +4233,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" } @@ -2290,7 +4242,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", @@ -2301,7 +4253,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" @@ -2311,7 +4263,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" }, @@ -2378,15 +4330,20 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cross-env": { @@ -2411,7 +4368,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "devOptional": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2471,7 +4428,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" } @@ -2515,13 +4472,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": { @@ -2547,7 +4504,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", @@ -2559,7 +4516,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "devOptional": true }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", @@ -2583,7 +4540,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", @@ -2597,11 +4554,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", @@ -2717,11 +4683,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", @@ -2829,6 +4818,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", @@ -2849,6 +4849,40 @@ } ] }, + "node_modules/fast-xml-parser": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz", + "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "strnum": "^2.1.2" + }, + "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", @@ -2862,7 +4896,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", @@ -2930,11 +4964,73 @@ "node": ">= 0.8" } }, + "node_modules/firebase-admin": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.6.1.tgz", + "integrity": "sha512-Zgc6yPtmPxAZo+FoK6LMG6zpSEsoSK8ifIR+IqF4oWuC3uWZU40OjxgfLTSFcsRlj/k/wD66zNv2UiTRreCNSw==", + "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.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz", + "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==", + "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", @@ -2960,7 +5056,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, + "devOptional": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -3045,7 +5141,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", @@ -3107,12 +5203,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.28.0", + "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.28.0.tgz", + "integrity": "sha512-vrPr17lbkgrigKuRZDTy4zwlcYxAZoumlvUSONXAZsEg0NzpoB3G5Mh+LMW639rVohRtW+wEP8AELyUDFYT/UQ==", + "license": "Apache-2.0", "dependencies": { - "@genkit-ai/ai": "1.0.4", - "@genkit-ai/core": "1.0.4", + "@genkit-ai/ai": "1.28.0", + "@genkit-ai/core": "1.28.0", "uuid": "^10.0.0" } }, @@ -3222,7 +5319,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, + "devOptional": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3270,7 +5367,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", @@ -3293,7 +5390,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" }, @@ -3313,7 +5410,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" @@ -3330,6 +5427,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", @@ -3363,6 +5506,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", @@ -3410,6 +5554,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", @@ -3425,11 +5603,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", @@ -3443,7 +5629,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" }, @@ -3455,7 +5641,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" }, @@ -3472,7 +5658,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", @@ -3601,7 +5787,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", @@ -3680,7 +5866,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" } @@ -3727,13 +5913,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "devOptional": true }, "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, + "devOptional": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -3744,6 +5930,42 @@ "@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": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -3756,6 +5978,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsep": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", + "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/json-2-csv": { "version": "5.5.8", "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.8.tgz", @@ -3791,29 +6022,127 @@ "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" }, "engines": { - "node": ">=6" + "node": ">=6" + } + }, + "node_modules/jsonpath-plus": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.4.0.tgz", + "integrity": "sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==", + "license": "MIT", + "dependencies": { + "@jsep-plugin/assignment": "^1.3.0", + "@jsep-plugin/regex": "^1.0.4", + "jsep": "^1.4.0" + }, + "bin": { + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "jws": "^4.0.1", + "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/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", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "1.0.1", + "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, + "node_modules/jwks-rsa": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.2.2.tgz", + "integrity": "sha512-BqTyEDV+lS8F2trk3A+qJnxV5Q9EqKCBJOPti3W97r7qTympCZjb7h2X6f2kc+0K3rsSTY1/6YG2eaXKoj497w==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@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", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", "dependencies": { - "jwa": "^2.0.0", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -3821,7 +6150,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/llm-chunk": { "version": "0.0.1", @@ -3839,11 +6175,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", @@ -3864,7 +6271,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", @@ -3881,7 +6288,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", @@ -3892,7 +6299,33 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "devOptional": 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", @@ -3999,7 +6432,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4014,6 +6447,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" } @@ -4022,7 +6456,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -4054,7 +6488,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", @@ -4096,6 +6531,23 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "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", @@ -4109,6 +6561,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" } @@ -4117,7 +6570,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" } @@ -4148,7 +6601,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" } @@ -4157,7 +6610,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" } @@ -4198,6 +6651,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", @@ -4230,11 +6692,28 @@ "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", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "devOptional": true }, "node_modules/parseurl": { "version": "1.3.3", @@ -4247,13 +6726,14 @@ "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", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -4267,7 +6747,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, + "devOptional": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -4324,6 +6804,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.11.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", + "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", + "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", @@ -4336,11 +6850,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.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "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" }, @@ -4349,10 +6914,11 @@ } }, "node_modules/protobufjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -4408,12 +6974,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", @@ -4454,7 +7032,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", @@ -4573,11 +7151,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", @@ -4725,7 +7314,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" } @@ -4805,7 +7394,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "devOptional": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4817,7 +7406,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -4899,7 +7488,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14" }, @@ -4911,7 +7500,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" } @@ -4920,6 +7509,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" } @@ -4940,7 +7530,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": "*" } @@ -4966,7 +7556,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" } @@ -4975,17 +7565,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", @@ -5004,7 +7599,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "devOptional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5030,7 +7625,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5038,11 +7633,25 @@ "node": ">=8" } }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "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", @@ -5071,7 +7680,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", @@ -5087,7 +7696,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" }, @@ -5099,7 +7708,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" }, @@ -5116,7 +7725,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" @@ -5129,13 +7738,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" }, @@ -5155,7 +7764,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" @@ -5180,7 +7789,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", @@ -5229,7 +7863,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" } @@ -5308,6 +7942,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" @@ -5341,11 +7976,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", @@ -5363,6 +8011,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -5397,6 +8046,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", @@ -5410,7 +8086,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "dependencies": { "isexe": "^2.0.0" }, @@ -5425,7 +8101,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", @@ -5447,7 +8123,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", @@ -5460,7 +8136,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", @@ -5481,7 +8158,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5498,7 +8175,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", @@ -5527,6 +8204,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", @@ -5535,15 +8227,27 @@ "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.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { @@ -5581,6 +8285,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-schoolAgent/package.json b/samples/js-schoolAgent/package.json index f1a5d35e02..2f56221eed 100644 --- a/samples/js-schoolAgent/package.json +++ b/samples/js-schoolAgent/package.json @@ -17,7 +17,7 @@ "license": "ISC", "dependencies": { "genkit": "^1.0.4", - "@genkit-ai/googleai": "^1.0.4", + "@genkit-ai/google-genai": "^1.0.4", "google-auth-library": "^9.6.3", "llm-chunk": "^0.0.1", "pdf-parse": "^1.1.1" diff --git a/samples/js-schoolAgent/src/genkit.ts b/samples/js-schoolAgent/src/genkit.ts index 88ec1f4c24..e6a128b85b 100644 --- a/samples/js-schoolAgent/src/genkit.ts +++ b/samples/js-schoolAgent/src/genkit.ts @@ -14,13 +14,13 @@ * limitations under the License. */ -import { gemini15Pro, googleAI } from '@genkit-ai/googleai'; +import { googleAI } from '@genkit-ai/google-genai'; import { genkit } from 'genkit/beta'; import type { AgentState } from './types'; export const ai = genkit({ plugins: [googleAI()], - model: gemini15Pro, + model: googleAI.model('gemini-2.5-pro'), }); ai.defineHelper( diff --git a/scripts/release_main.sh b/scripts/release_main.sh index 37b4ab1004..3f6f54b391 100755 --- a/scripts/release_main.sh +++ b/scripts/release_main.sh @@ -69,10 +69,6 @@ cd js/plugins/google-cloud pnpm publish --provenance=false --tag $RELEASE_TAG --publish-branch $RELEASE_BRANCH --registry https://wombat-dressing-room.appspot.com cd $CURRENT -cd js/plugins/googleai -pnpm publish --provenance=false --tag $RELEASE_TAG --publish-branch $RELEASE_BRANCH --registry https://wombat-dressing-room.appspot.com -cd $CURRENT - cd js/plugins/ollama pnpm publish --provenance=false --tag $RELEASE_TAG --publish-branch $RELEASE_BRANCH --registry https://wombat-dressing-room.appspot.com cd $CURRENT From 3963bc102d277f2abe03644dae0ce893b3d618fb Mon Sep 17 00:00:00 2001 From: ifielker Date: Thu, 19 Feb 2026 15:04:05 -0500 Subject: [PATCH 14/16] chore(js/testapps, samples): Remove deprecated model from testapps / samples (#4742) --- js/ai/src/model-types.ts | 2 +- js/core/src/registry.ts | 4 ++-- .../google-genai/src/googleai/gemini.ts | 7 +------ .../google-genai/src/vertexai/gemini.ts | 4 ---- .../tests/googleai/gemini_test.ts | 18 +++++++++--------- .../google-genai/tests/googleai/index_test.ts | 2 +- .../tests/vertexai/gemini_test.ts | 4 ++-- .../google-genai/tests/vertexai/index_test.ts | 2 +- .../basic-gemini/src/index-vertexai.ts | 2 +- js/testapps/basic-gemini/src/index.ts | 19 +------------------ samples/js-gemini/src/index.ts | 2 +- 11 files changed, 20 insertions(+), 46 deletions(-) diff --git a/js/ai/src/model-types.ts b/js/ai/src/model-types.ts index cf20755ac8..d76a555c9a 100644 --- a/js/ai/src/model-types.ts +++ b/js/ai/src/model-types.ts @@ -174,7 +174,7 @@ export const GenerationCommonConfigSchema = z version: z .string() .describe( - 'A specific version of a model family, e.g. `gemini-2.0-flash` ' + + 'A specific version of a model family, e.g. `gemini-2.5-flash` ' + 'for the `googleai` family.' ) .optional(), diff --git a/js/core/src/registry.ts b/js/core/src/registry.ts index 5caa0eed5b..7bc2f478ed 100644 --- a/js/core/src/registry.ts +++ b/js/core/src/registry.ts @@ -89,7 +89,7 @@ interface ParsedRegistryKey { /** * Parses the registry key into key parts as per the key format convention. Ex: * - mcp-host:tool/my-tool - * - /model/googleai/gemini-2.0-flash + * - /model/googleai/gemini-2.5-flash * - /prompt/my-plugin/folder/my-prompt * - /util/generate */ @@ -125,7 +125,7 @@ export function parseRegistryKey( // Invalid key format return undefined; } - // ex: /model/googleai/gemini-2.0-flash or /prompt/my-plugin/folder/my-prompt + // ex: /model/googleai/gemini-2.5-flash or /prompt/my-plugin/folder/my-prompt if (tokens.length >= 4) { return { actionType: tokens[1] as ActionType, diff --git a/js/plugins/google-genai/src/googleai/gemini.ts b/js/plugins/google-genai/src/googleai/gemini.ts index 57f367de59..65024d1a4d 100644 --- a/js/plugins/google-genai/src/googleai/gemini.ts +++ b/js/plugins/google-genai/src/googleai/gemini.ts @@ -193,10 +193,7 @@ export const GeminiConfigSchema = GenerationCommonConfigSchema.extend({ .optional(), responseModalities: z .array(z.enum(['TEXT', 'IMAGE', 'AUDIO'])) - .describe( - 'The modalities to be used in response. Only supported for ' + - "'gemini-2.0-flash-exp' model at present." - ) + .describe('The modalities to be used in response.') .optional(), googleSearchRetrieval: z .union([z.boolean(), z.object({}).passthrough()]) @@ -430,8 +427,6 @@ const KNOWN_GEMINI_MODELS = { 'gemini-2.5-pro': commonRef('gemini-2.5-pro'), 'gemini-2.5-flash': commonRef('gemini-2.5-flash'), 'gemini-2.5-flash-lite': commonRef('gemini-2.5-flash-lite'), - 'gemini-2.0-flash': commonRef('gemini-2.0-flash'), - 'gemini-2.0-flash-lite': commonRef('gemini-2.0-flash-lite'), }; export type KnownGeminiModels = keyof typeof KNOWN_GEMINI_MODELS; export type GeminiModelName = `gemini-${string}`; diff --git a/js/plugins/google-genai/src/vertexai/gemini.ts b/js/plugins/google-genai/src/vertexai/gemini.ts index 78e7732aa3..a90708a226 100644 --- a/js/plugins/google-genai/src/vertexai/gemini.ts +++ b/js/plugins/google-genai/src/vertexai/gemini.ts @@ -428,10 +428,6 @@ export const KNOWN_GEMINI_MODELS = { 'gemini-2.5-flash-lite': commonRef('gemini-2.5-flash-lite'), 'gemini-2.5-pro': commonRef('gemini-2.5-pro'), 'gemini-2.5-flash': commonRef('gemini-2.5-flash'), - 'gemini-2.0-flash-001': commonRef('gemini-2.0-flash-001'), - 'gemini-2.0-flash': commonRef('gemini-2.0-flash'), - 'gemini-2.0-flash-lite': commonRef('gemini-2.0-flash-lite'), - 'gemini-2.0-flash-lite-001': commonRef('gemini-2.0-flash-lite-001'), } as const; export type KnownGeminiModels = keyof typeof KNOWN_GEMINI_MODELS; export type GeminiModelName = `gemini-${string}`; diff --git a/js/plugins/google-genai/tests/googleai/gemini_test.ts b/js/plugins/google-genai/tests/googleai/gemini_test.ts index bae64a681a..68d24f3789 100644 --- a/js/plugins/google-genai/tests/googleai/gemini_test.ts +++ b/js/plugins/google-genai/tests/googleai/gemini_test.ts @@ -109,12 +109,12 @@ describe('Google AI Gemini', () => { describe('API Key Handling', () => { it('throws if no API key is provided', () => { assert.throws(() => { - defineModel('gemini-2.0-flash'); + defineModel('gemini-2.5-flash'); }, MISSING_API_KEY_ERROR); }); it('uses API key from pluginOptions', async () => { - const model = defineModel('gemini-2.0-flash', { + const model = defineModel('gemini-2.5-flash', { apiKey: 'plugin-key', }); mockFetchResponse(defaultApiResponse); @@ -129,7 +129,7 @@ describe('Google AI Gemini', () => { it('uses API key from GEMINI_API_KEY env var', async () => { process.env.GEMINI_API_KEY = 'gemini-key'; - const model = defineModel('gemini-2.0-flash'); + const model = defineModel('gemini-2.5-flash'); mockFetchResponse(defaultApiResponse); await model.run(minimalRequest); const fetchOptions = fetchStub.lastCall.args[1]; @@ -141,13 +141,13 @@ describe('Google AI Gemini', () => { it('works if apiKey is false and not in call config', async () => { mockFetchResponse(defaultApiResponse); - const model = defineModel('gemini-2.0-flash', { apiKey: false }); + const model = defineModel('gemini-2.5-flash', { apiKey: false }); assert.ok(await model.run(minimalRequest)); sinon.assert.calledOnce(fetchStub); }); it('uses API key from call config if apiKey is false', async () => { - const model = defineModel('gemini-2.0-flash', { apiKey: false }); + const model = defineModel('gemini-2.5-flash', { apiKey: false }); mockFetchResponse(defaultApiResponse); const request: GenerateRequest = { ...minimalRequest, @@ -430,7 +430,7 @@ describe('Google AI Gemini', () => { describe('Error Handling', () => { it('throws if no candidates are returned', async () => { - const model = defineModel('gemini-2.0-flash', defaultPluginOptions); + const model = defineModel('gemini-2.5-flash', defaultPluginOptions); mockFetchResponse({ candidates: [] }); await assert.rejects( model.run(minimalRequest), @@ -439,7 +439,7 @@ describe('Google AI Gemini', () => { }); it('throws on fetch error', async () => { - const model = defineModel('gemini-2.0-flash', defaultPluginOptions); + const model = defineModel('gemini-2.5-flash', defaultPluginOptions); fetchStub.rejects(new Error('Network error')); await assert.rejects(model.run(minimalRequest), /Failed to fetch/); }); @@ -458,7 +458,7 @@ describe('Google AI Gemini', () => { }); it('API call works with debugTraces: false', async () => { - const model = defineModel('gemini-2.0-flash', { + const model = defineModel('gemini-2.5-flash', { ...defaultPluginOptions, experimental_debugTraces: false, }); @@ -472,7 +472,7 @@ describe('Google AI Gemini', () => { describe('gemini() function', () => { it('returns a ModelReference for a known model string', () => { - const name = 'gemini-2.0-flash'; + const name = 'gemini-2.5-flash'; const modelRef = model(name); assert.strictEqual(modelRef.name, `googleai/${name}`); assert.strictEqual(modelRef.info?.supports?.multiturn, true); diff --git a/js/plugins/google-genai/tests/googleai/index_test.ts b/js/plugins/google-genai/tests/googleai/index_test.ts index 16831e8a22..72c22092ab 100644 --- a/js/plugins/google-genai/tests/googleai/index_test.ts +++ b/js/plugins/google-genai/tests/googleai/index_test.ts @@ -214,7 +214,7 @@ describe('GoogleAI Plugin', () => { describe('googleAI.model', () => { it('should return a gemini ModelReference with correct schema', () => { - const modelName = 'gemini-2.0-flash'; + const modelName = 'gemini-2.5-flash'; const modelRef = googleAI.model(modelName); assert.strictEqual( modelRef.name, diff --git a/js/plugins/google-genai/tests/vertexai/gemini_test.ts b/js/plugins/google-genai/tests/vertexai/gemini_test.ts index 290bafab75..b23e4a87e2 100644 --- a/js/plugins/google-genai/tests/vertexai/gemini_test.ts +++ b/js/plugins/google-genai/tests/vertexai/gemini_test.ts @@ -125,7 +125,7 @@ describe('Vertex AI Gemini', () => { describe('model() function', () => { it('returns a ModelReference for a known model string', () => { - const name = 'gemini-2.0-flash'; + const name = 'gemini-2.5-flash'; const modelRef: ModelReference = model(name); assert.strictEqual(modelRef.name, `vertexai/${name}`); assert.ok(modelRef.info?.supports?.multiturn); @@ -159,7 +159,7 @@ describe('Vertex AI Gemini', () => { it('applies options to the ModelReference', () => { const options = { temperature: 0.9, topK: 20 }; const modelRef: ModelReference = model( - 'gemini-2.0-flash', + 'gemini-2.5-flash', options ); assert.deepStrictEqual(modelRef.config, options); diff --git a/js/plugins/google-genai/tests/vertexai/index_test.ts b/js/plugins/google-genai/tests/vertexai/index_test.ts index bb1d62be78..5385b6f3f4 100644 --- a/js/plugins/google-genai/tests/vertexai/index_test.ts +++ b/js/plugins/google-genai/tests/vertexai/index_test.ts @@ -196,7 +196,7 @@ describe('VertexAI Plugin', () => { describe('Helper Functions', () => { it('vertexAI.model should return a ModelReference for Gemini with correct schema', () => { - const modelName = 'gemini-2.0-flash'; + const modelName = 'gemini-2.5-flash'; const modelRef = vertexAI.model(modelName); assert.strictEqual( modelRef.name, diff --git a/js/testapps/basic-gemini/src/index-vertexai.ts b/js/testapps/basic-gemini/src/index-vertexai.ts index 87479e09aa..1e5c156767 100644 --- a/js/testapps/basic-gemini/src/index-vertexai.ts +++ b/js/testapps/basic-gemini/src/index-vertexai.ts @@ -466,7 +466,7 @@ ai.defineFlow('gemini-image-editing', async (_) => { const room = fs.readFileSync('my_room.png', { encoding: 'base64' }); const { media } = await ai.generate({ - model: vertexAI.model('gemini-2.5-flash-image-preview'), + model: vertexAI.model('gemini-2.5-flash-image'), prompt: [ { text: 'add the plant to my room' }, { media: { url: `data:image/png;base64,${plant}` } }, diff --git a/js/testapps/basic-gemini/src/index.ts b/js/testapps/basic-gemini/src/index.ts index e0d51b30e7..8e23a433fe 100644 --- a/js/testapps/basic-gemini/src/index.ts +++ b/js/testapps/basic-gemini/src/index.ts @@ -467,7 +467,7 @@ ai.defineFlow('gemini-image-editing', async (_) => { const room = fs.readFileSync('my_room.png', { encoding: 'base64' }); const { media } = await ai.generate({ - model: googleAI.model('gemini-2.5-flash-image-preview'), + model: googleAI.model('gemini-2.5-flash-image'), prompt: [ { text: 'add the plant to my room' }, { media: { url: `data:image/png;base64,${plant}` } }, @@ -750,23 +750,6 @@ async function downloadVideo(video: MediaPart, path: string) { Readable.from(videoDownloadResponse.body).pipe(fs.createWriteStream(path)); } -// Test external URL with Gemini 2.0 (should download and inline) -ai.defineFlow('external-url-gemini-2.0', async () => { - const { text } = await ai.generate({ - model: googleAI.model('gemini-2.0-flash'), - prompt: [ - { text: 'Describe this image.' }, - { - media: { - url: 'https://storage.googleapis.com/generativeai-downloads/images/scones.jpg', - contentType: 'image/jpeg', - }, - }, - ], - }); - return text; -}); - // Test external URL with Gemini 3.0 (should pass as fileUri) ai.defineFlow('external-url-gemini-3.0', async () => { const { text } = await ai.generate({ diff --git a/samples/js-gemini/src/index.ts b/samples/js-gemini/src/index.ts index 9093f01ea0..36369afa89 100644 --- a/samples/js-gemini/src/index.ts +++ b/samples/js-gemini/src/index.ts @@ -238,7 +238,7 @@ ai.defineFlow('gemini-image-editing', async (_) => { const room = fs.readFileSync('my_room.png', { encoding: 'base64' }); const { media } = await ai.generate({ - model: googleAI.model('gemini-2.5-flash-image-preview'), + model: googleAI.model('gemini-2.5-flash-image'), prompt: [ { text: 'add the plant to my room' }, { media: { url: `data:image/png;base64,${plant}` } }, From cbc42e8ab08e9c2a0e529bfc7014c65595c0ad98 Mon Sep 17 00:00:00 2001 From: Ingrid Fielker Date: Wed, 14 Jan 2026 13:12:11 -0500 Subject: [PATCH 15/16] feat(js/plugins/google-genai): Added deep-research for googleai --- js/ai/src/model-types.ts | 1 + .../src/common/interaction-converters.ts | 400 ++++++++++++++++ .../src/common/interaction-types.ts | 382 +++++++++++++++ .../google-genai/src/googleai/client.ts | 109 +++++ .../src/googleai/deep-research.ts | 313 +++++++++++++ js/plugins/google-genai/src/googleai/index.ts | 19 +- js/plugins/google-genai/src/googleai/types.ts | 6 + .../common/interaction-converters_test.ts | 408 ++++++++++++++++ .../tests/googleai/deep-research_test.ts | 435 ++++++++++++++++++ js/testapps/basic-gemini/src/index.ts | 131 ++++++ 10 files changed, 2203 insertions(+), 1 deletion(-) create mode 100644 js/plugins/google-genai/src/common/interaction-converters.ts create mode 100644 js/plugins/google-genai/src/common/interaction-types.ts create mode 100644 js/plugins/google-genai/src/googleai/deep-research.ts create mode 100644 js/plugins/google-genai/tests/common/interaction-converters_test.ts create mode 100644 js/plugins/google-genai/tests/googleai/deep-research_test.ts diff --git a/js/ai/src/model-types.ts b/js/ai/src/model-types.ts index d76a555c9a..2d2391554f 100644 --- a/js/ai/src/model-types.ts +++ b/js/ai/src/model-types.ts @@ -297,6 +297,7 @@ export const FinishReasonSchema = z.enum([ 'stop', 'length', 'blocked', + 'aborted', 'interrupted', 'other', 'unknown', diff --git a/js/plugins/google-genai/src/common/interaction-converters.ts b/js/plugins/google-genai/src/common/interaction-converters.ts new file mode 100644 index 0000000000..64bb5f39fc --- /dev/null +++ b/js/plugins/google-genai/src/common/interaction-converters.ts @@ -0,0 +1,400 @@ +/** + * Copyright 2026 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 { GenerateResponseData, MessageData, Operation, Part } from 'genkit'; +import { ToolDefinition } from 'genkit/model'; +import { + AudioContent, + Content, + DocumentContent, + FunctionCallContent, + FunctionResultContent, + GeminiInteraction, + ImageContent, + InteractionFunctionTool, + InteractionTool, + TextContent, + ThoughtContent, + Turn, + VideoContent, +} from './interaction-types.js'; +import { cleanSchema } from './utils.js'; + +/** + * Ensures that all tool requests and responses in a list of messages have unique reference IDs. + * + * This function performs two passes: + * 1. Assigns generated IDs to tool requests that lack a `ref`. + * 2. Assigns matching IDs to tool responses that lack a `ref`, assuming they correspond + * sequentially to the requests. If a response has no matching request, it gets an orphaned ID. + * + * @param messages - The list of messages to process. + * @returns A deep copy of the messages with tool IDs ensured. + */ +export function ensureToolIds(messages: MessageData[]): MessageData[] { + const generatedIds: string[] = []; + let nextIdCounter = 0; + + // Deep copy to avoid mutating original request messages + const newMessages = structuredClone(messages) as MessageData[]; + + // First pass: find ToolRequests without ref + for (const message of newMessages) { + for (const part of message.content) { + if (part.toolRequest && !part.toolRequest.ref) { + const newId = `genkit-auto-id-${nextIdCounter++}`; + part.toolRequest.ref = newId; + generatedIds.push(newId); + } + } + } + + // Second pass: find ToolResponses without ref and assign from queue + // Note: This assumes responses are in the same order as requests. + for (const message of newMessages) { + for (const part of message.content) { + if (part.toolResponse && !part.toolResponse.ref) { + const id = generatedIds.shift(); + if (id) { + part.toolResponse.ref = id; + } else { + // No matching request found (or queue empty). + // Generate unique one to avoid empty string rejection. + part.toolResponse.ref = `genkit-orphan-id-${nextIdCounter++}`; + } + } + } + } + + return newMessages; +} + +/** + * Converts a Genkit ToolDefinition to an InteractionTool format. + * + * Maps the name, description, and input schema (cleaned) to the interaction tool structure. + * + * @param tool - The Genkit tool definition. + * @returns The converted InteractionTool. + */ +export function toInteractionTool(tool: ToolDefinition): InteractionTool { + const func: InteractionFunctionTool = { + type: 'function', + name: tool.name, + description: tool.description, + }; + if (tool.inputSchema) { + func.parameters = cleanSchema(tool.inputSchema); + } + return func; +} + +/** + * Converts a Genkit Part to an Interaction Content object. + * + * Handles various part types including text, media, tool requests (mapped to function calls), + * and tool responses (mapped to function results). + * + * @param part - The Genkit message part. + * @returns The corresponding Interaction Content object. + * @throws Error if the part type is unsupported. + */ +export function toInteractionContent(part: Part): Content { + if (part.text !== undefined) { + return { type: 'text', text: part.text }; + } + if (part.media) { + return toInteractionMedia(part); + } + if (part.toolRequest) { + return { + type: 'function_call', + name: part.toolRequest.name, + arguments: part.toolRequest.input as Record, + id: part.toolRequest.ref || '', + }; + } + if (part.toolResponse) { + let output = part.toolResponse.output; + if ( + typeof output !== 'object' && + typeof output !== 'string' && + output !== undefined + ) { + output = { result: output }; + } + return { + type: 'function_result', + name: part.toolResponse.name, + result: output as Record | string, + call_id: part.toolResponse.ref || '', + }; + } + throw new Error('Unsupported part type for Interaction input'); +} + +function toInteractionMedia(part: Part): Content { + if (!part.media) throw new Error('Media part missing media'); + const { url, contentType } = part.media; + if (!contentType) throw new Error('Media part missing contentType'); + + let data: string | undefined; + let uri: string | undefined; + + if (url.startsWith('data:')) { + data = url.substring(url.indexOf(',') + 1); + } else { + uri = url; + } + + const out: Partial = { mime_type: contentType }; + if (data) out.data = data; + if (uri) out.uri = uri; + + if (contentType.startsWith('image/')) { + out.type = 'image'; + return out as ImageContent; + } + if (contentType.startsWith('audio/')) { + out.type = 'audio'; + return out as AudioContent; + } + if (contentType.startsWith('video/')) { + out.type = 'video'; + return out as VideoContent; + } + if (contentType === 'application/pdf') { + out.type = 'document'; + return out as DocumentContent; + } + + throw new Error(`Unsupported media type: ${contentType}`); +} + +/** + * Maps a Genkit message role to the corresponding Interaction API role. + * + * - 'user' -> 'user' + * - 'model' -> 'model' + * - 'tool' -> 'user' (Tool outputs are treated as user turns in this context) + * + * @param role - The Genkit message role. + * @returns The mapped Interaction role string. + * @throws Error if the role is 'system', as system instructions are handled separately. + */ +export function toInteractionRole(role: MessageData['role']): string { + switch (role) { + case 'user': + return 'user'; + case 'model': + return 'model'; + case 'tool': + return 'user'; + case 'system': + throw new Error( + `System role should be handled as system_instruction, not part of turns.` + ); + default: + return 'user'; + } +} + +/** + * Converts a Genkit MessageData object into an Interaction Turn. + * + * Maps the role using `toInteractionRole` and converts all content parts using `toInteractionContent`. + * + * @param message - The Genkit message data. + * @returns The converted Interaction Turn. + */ +export function toInteractionTurn(message: MessageData): Turn { + return { + role: toInteractionRole(message.role), + content: message.content.map(toInteractionContent), + }; +} + +/** + * Converts an Interaction Content object back into a Genkit Part. + * + * Supports text, image, thought, function calls, and function results. + * + * @param content - The Interaction Content object. + * @returns The corresponding Genkit Part. + * @throws Error if the content type is unsupported. + */ +export function fromInteractionContent(content: Content): Part { + switch (content.type) { + case 'text': + return fromTextContent(content); + case 'image': + return fromImageContent(content); + case 'thought': + return fromThoughtContent(content); + case 'function_call': + return fromFunctionCallContent(content); + case 'function_result': + return fromFunctionResultContent(content); + default: + throw new Error(`Unsupported content type: ${content.type}`); + } +} + +function fromTextContent(content: TextContent): Part { + return { + text: content.text || '', + metadata: { + annotations: content.annotations, + }, + }; +} + +function fromImageContent(content: ImageContent): Part { + let url = content.uri; + if (content.data && content.mime_type) { + url = `data:${content.mime_type};base64,${content.data}`; + } + return { + media: { + url: url || '', + contentType: content.mime_type, + }, + metadata: { + resolution: content.resolution, + }, + }; +} + +function fromThoughtContent(content: ThoughtContent): Part { + let reasoning = ''; + if (content.summary) { + reasoning = content.summary + .map((c) => { + if (c.type === 'text') return c.text; + return '[Image]'; + }) + .join('\n'); + } + + return { + reasoning, + metadata: { + thoughtSignature: content.signature, + }, + custom: { + thought: content, + }, + }; +} + +function fromFunctionCallContent(content: FunctionCallContent): Part { + return { + toolRequest: { + name: content.name, + input: content.arguments, + ref: content.id, + }, + }; +} + +function fromFunctionResultContent(content: FunctionResultContent): Part { + return { + toolResponse: { + name: content.name, + output: content.result, + ref: content.call_id, + }, + }; +} + +export function fromInteraction( + interaction: GeminiInteraction, + clientOptions?: T +): Operation { + const op = { id: interaction.id } as Operation; + if (clientOptions) { + op.metadata = { clientOptions }; + } + if (interaction.status === 'in_progress') { + op.done = false; + } else if (interaction.status === 'cancelled') { + op.done = true; + op.output = { + finishReason: 'aborted', + finishMessage: 'Operation cancelled', + message: { + role: 'model', + content: [{ text: 'Operation cancelled.' }], + }, + }; + } else if (interaction.status === 'completed') { + op.done = true; + const outputs = interaction.outputs; + if (outputs?.length) { + const content = outputs.map(fromInteractionContent); + op.output = { + finishReason: 'stop', + message: { + role: 'model', + content, + }, + custom: interaction, + }; + if (interaction.usage) { + op.output.usage = { + inputTokens: interaction.usage.total_input_tokens, + outputTokens: interaction.usage.total_output_tokens, + totalTokens: interaction.usage.total_tokens, + cachedContentTokens: interaction.usage.total_cached_tokens, + thoughtsTokens: interaction.usage.total_thought_tokens, + }; + if (interaction.usage.input_tokens_by_modality) { + for (const modalityToken of interaction.usage + .input_tokens_by_modality) { + switch (modalityToken.modality) { + case 'text': + op.output.usage.inputCharacters = modalityToken.tokens; + break; + case 'image': + op.output.usage.inputImages = modalityToken.tokens; + break; + case 'audio': + op.output.usage.inputAudioFiles = modalityToken.tokens; + break; + } + } + } + if (interaction.usage.output_tokens_by_modality) { + for (const modalityToken of interaction.usage + .output_tokens_by_modality) { + switch (modalityToken.modality) { + case 'text': + op.output.usage.outputCharacters = modalityToken.tokens; + break; + case 'image': + op.output.usage.outputImages = modalityToken.tokens; + break; + case 'audio': + op.output.usage.outputAudioFiles = modalityToken.tokens; + break; + } + } + } + } + } + } + return op; +} diff --git a/js/plugins/google-genai/src/common/interaction-types.ts b/js/plugins/google-genai/src/common/interaction-types.ts new file mode 100644 index 0000000000..8d1676276f --- /dev/null +++ b/js/plugins/google-genai/src/common/interaction-types.ts @@ -0,0 +1,382 @@ +/** + * Copyright 2026 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 { ToolChoice } from 'genkit'; +import { FunctionDeclaration, ToolConfig } from './types'; + +/** + * A tool that can be used by the model. + * See {@link https://ai.google.dev/gemini-api/docs/function-calling} + */ +export declare interface InteractionFunctionTool extends FunctionDeclaration { + type: 'function'; +} + +/** + * A tool that can be used by the model to search Google. + * See {@link https://ai.google.dev/gemini-api/docs/grounding} + */ +export declare interface InteractionGoogleSearchTool { + type: 'google_search'; +} + +/** + * A tool that can be used by the model to execute code. + * See {@link https://ai.google.dev/gemini-api/docs/code-execution} + */ +export declare interface InteractionCodeExecutionTool { + type: 'code_execution'; +} + +/** + * A tool that can be used by the model. + */ +export declare type InteractionTool = + | InteractionFunctionTool + | InteractionGoogleSearchTool + | InteractionCodeExecutionTool; + +/** + * Citation information for model-generated content. + */ +declare interface TextAnnotation { + /** Start of segment of the response that is attributed to this source. */ + start_index?: number; + /** End of the attributed segment, exclusive. */ + end_index?: number; + /** Source attributed for a portion of the text. Could be a URL, title, or other identifier. */ + source?: string; +} + +/** + * A text content block. + */ +export declare interface TextContent { + type: 'text'; + /** The text content. */ + text?: string; + /** Citation information for model-generated content. */ + annotations?: TextAnnotation[]; +} + +/** + * The resolution of the media. + */ +export declare type MediaResolution = 'low' | 'medium' | 'high' | 'ultra_high'; + +/** + * An image content block. + */ +export declare interface ImageContent { + type: 'image'; + /** The image content. */ + data?: string; + /** The URI of the image. */ + uri?: string; + /** The mime type of the image. */ + mime_type?: string; + /** The resolution of the media. */ + resolution?: MediaResolution; +} + +/** + * An audio content block. + */ +export declare interface AudioContent { + type: 'audio'; + /** The audio content. */ + data?: string; + /** The URI of the audio. */ + uri?: string; + /** The mime type of the audio. */ + mime_type?: string; +} + +/** + * A document content block. + */ +export declare interface DocumentContent { + type: 'document'; + /** The document content. */ + data?: string; + /** The URI of the document. */ + uri?: string; + /** The mime type of the document. */ + mime_type?: string; +} + +/** + * A video content block. + */ +export declare interface VideoContent { + type: 'video'; + /** The video content. */ + data?: string; + /** The URI of the video. */ + uri?: string; + /** The mime type of the video. */ + mime_type?: string; + /** The resolution of the media. */ + resolution?: MediaResolution; +} + +/** + * A thought content block. + */ +export declare interface ThoughtContent { + type: 'thought'; + /** Signature to match the backend source to be part of the generation. */ + signature?: string; + /** A summary of the thought. */ + summary?: (TextContent | ImageContent)[]; +} + +/** + * A function tool call content block. + */ +export declare interface FunctionCallContent { + type: 'function_call'; + /** The name of the tool to call. */ + name: string; + /** The arguments to pass to the function. */ + arguments?: Record; + /** A unique ID for this specific tool call. */ + id: string; +} + +/** + * A function tool result content block. + */ +export declare interface FunctionResultContent { + type: 'function_result'; + /** The name of the tool that was called. */ + name: string; + /** Whether the tool call resulted in an error. */ + is_error?: boolean; + /** The result of the tool call. */ + result?: Record | string; + /** ID to match the ID from the function call block. */ + call_id: string; +} + +/** + * The content of the response. + */ +export type Content = + | TextContent + | ImageContent + | AudioContent + | DocumentContent + | VideoContent + | ThoughtContent + | FunctionCallContent + | FunctionResultContent; + +/** + * A turn in a conversation. + */ +export declare interface Turn { + /** The originator of this turn. Must be user for input or model for model output. */ + role: string; + /** The content of the turn. */ + content: string | Content[]; +} + +/** + * The token count for a single response modality. + */ +export declare interface ModalityTokens { + /** The modality associated with the token count. */ + modality?: ResponseModality; + /** Number of tokens for the modality. */ + tokens?: number; +} + +/** + * Statistics on the interaction request's token usage. + */ +// These match what comes back from the REST API +// Unfortunately they are forced snake case at the API level. +export declare interface Usage { + /** Number of tokens in the prompt (context). */ + total_input_tokens?: number; + /** A breakdown of input token usage by modality. */ + input_tokens_by_modality?: ModalityTokens[]; + /** Number of tokens in the cached part of the prompt (the cached content). */ + total_cached_tokens?: number; + /** A breakdown of cached token usage by modality. */ + cached_tokens_by_modality?: ModalityTokens[]; + /** Total number of tokens across all the generated responses. */ + total_output_tokens?: number; + /** A breakdown of output token usage by modality. */ + output_tokens_by_modality?: ModalityTokens[]; + /** Number of tokens present in tool-use prompt(s). */ + total_tool_use_tokens?: number; + /** A breakdown of tool-use token usage by modality. */ + tool_use_by_modality?: ModalityTokens[]; + /** Number of tokens of thoughts for thinking models. */ + total_thought_tokens?: number; + /** Total token count for the interaction request (prompt + responses + other internal tokens). */ + total_tokens?: number; +} + +/** + * The configuration for speech interaction. + */ +export declare interface SpeechConfig { + /** The voice of the speaker. */ + voice?: string; + /** The language of the speech. */ + language?: string; + /** The speaker's name, it should match the speaker name given in the prompt. */ + speaker?: string; +} + +/** + * The configuration for image interaction. + */ +export declare interface ImageConfig { + /** The aspect ratio of the image. */ + aspect_ratio?: string; + /** The size of the image. */ + image_size?: string; +} + +/** + * Configuration parameters for model interactions. + */ +export declare interface ModelGenerationConfig { + /** Controls the randomness of the output. */ + temperature?: number; + /** The maximum cumulative probability of tokens to consider when sampling. */ + top_p?: number; + /** Seed used in decoding for reproducibility. */ + seed?: number; + /** A list of character sequences that will stop output interaction. */ + stop_sequences?: string[]; + /** The tool choice for the interaction. */ + tool_choice?: ToolChoice | ToolConfig; + /** The level of thought tokens that the model should generate. */ + thinking_level?: 'minimal' | 'low' | 'medium' | 'high'; + /** Whether to include thought summaries in the response. */ + thinking_summaries?: 'auto' | 'none'; + /** The maximum number of tokens to include in the response. */ + max_output_tokens?: number; + /** Configuration for speech interaction. */ + speech_config?: SpeechConfig; + /** Configuration for image interaction. */ + image_config?: ImageConfig; +} + +/** + * Configuration for dynamic agents. + */ +export declare interface DynamicAgentConfig { + type: 'dynamic'; +} + +/** + * Configuration for the Deep Research agent. + */ +export declare interface DeepResearchAgentConfig { + type: 'deep-research'; + /** Whether to include thought summaries in the response. */ + thinking_summaries?: 'auto' | 'none'; +} + +/** + * Configuration for the agent. + */ +export type InteractionsAgentConfig = + | DynamicAgentConfig + | DeepResearchAgentConfig; + +/** + * Indicates the model should return text, images, or audio. + */ +export declare type ResponseModality = 'text' | 'image' | 'audio'; + +/** + * Parameters for creating interactions. + */ +export declare interface CreateInteractionRequest { + /** The ID of the previous interaction, if any. */ + previous_interaction_id?: string; + + /** The model to use for this request (mutually exclusive with agent) */ + model?: string; + /** The agent to use for this request (mutually exclusive with model) */ + agent?: string; + + /** The inputs for the interaction. */ + input: string | Content[] | Turn[] | Content; + + /** System instruction for the interaction. */ + system_instruction?: string; + + /** A list of tool declarations the model may call during interaction. */ + tools?: InteractionTool[]; + + /** Enforces that the generated response is a JSON object that complies with the JSON schema specified in this field */ + response_format?: any; // TODO(ifielker): this is a JSON format + /** Required if responseFormat is set. */ + response_mime_type?: string; + + /** The requested modalities of the response (TEXT, IMAGE, AUDIO). */ + response_modalities?: ResponseModality[]; + + /** Whether the interaction will be streamed. */ + stream?: boolean; + /** Whether to store the response and request for later retrieval. */ + store?: boolean; + /** Whether to run the model interaction in the background. */ + background?: boolean; + + /** Configuration parameters for the model interaction. */ + generation_config?: ModelGenerationConfig; + /** Configuration for the agent. */ + agent_config?: InteractionsAgentConfig; +} + +/** + * Response from creating an interaction. + */ +export declare interface GeminiInteraction { + /** The name of the Model used for generating the interaction. */ + model?: string; + /** The name of the Agent used for generating the interaction. */ + agent?: string; + /** The unique identifier for the interaction completion. */ + id?: string; // The interactionId to be used in subsequent interactions + /** The ID of the previous interaction, if any. */ + previous_interaction_id?: string; + /** The status of the interaction. */ + status?: + | 'in_progress' + | 'requires_action' + | 'completed' + | 'failed' + | 'cancelled'; + /** The time at which the response was created in ISO 8601 format. */ + created?: string; + /** The time at which the response was last updated in ISO 8601 format. */ + updated?: string; + /** The role of the interaction. */ + role?: string; + /** Responses from the model. */ + outputs?: Content[]; + /** Statistics on the interaction request's token usage. */ + usage?: Usage; +} diff --git a/js/plugins/google-genai/src/googleai/client.ts b/js/plugins/google-genai/src/googleai/client.ts index 6e55cfdcf9..d2d26f93b5 100644 --- a/js/plugins/google-genai/src/googleai/client.ts +++ b/js/plugins/google-genai/src/googleai/client.ts @@ -23,8 +23,10 @@ import { } from '../common/utils.js'; import { ClientOptions, + CreateInteractionRequest, EmbedContentRequest, EmbedContentResponse, + GeminiInteraction, GenerateContentRequest, GenerateContentResponse, GenerateContentStreamResult, @@ -36,6 +38,107 @@ import { VeoPredictRequest, } from './types.js'; +/** + * Creates an interaction using the Google AI API. + * + * @param apiKey The API key to authenticate the request. + * @param createInteractionRequest The request object containing the interaction parameters. + * @param clientOptions Optional options to customize the request + * @returns A promise that resolves to the interaction response. + */ +export async function createInteraction( + apiKey: string | undefined, + createInteractionRequest: CreateInteractionRequest, + clientOptions?: ClientOptions +): Promise { + const url = getGoogleAIUrl({ + resourcePath: 'interactions', + clientOptions, + }); + const fetchOptions = getFetchOptions({ + method: 'POST', + apiKey, + clientOptions, + body: JSON.stringify(createInteractionRequest), + }); + + const response = await makeRequest(url, fetchOptions); + + return await response.json(); +} + +/** + * Gets an interaction using the Google AI API. + * + * @param apiKey The API key to authenticate the request. + * @param interactionId The ID of the interaction to retrieve. + * @param clientOptions Optional options to customize the request + * @returns A promise that resolves to the interaction response. + */ +export async function getInteraction( + apiKey: string | undefined, + interactionId: string, + clientOptions?: ClientOptions +): Promise { + const url = getGoogleAIUrl({ + resourcePath: `interactions/${interactionId}`, + clientOptions, + }); + const fetchOptions = getFetchOptions({ + method: 'GET', + apiKey, + clientOptions, + }); + + const response = await makeRequest(url, fetchOptions); + + return await response.json(); +} + +/** + * Cancels an interaction using the Google AI API. + * + * @param apiKey The API key to authenticate the request. + * @param interactionId The ID of the interaction to cancel. + * @param clientOptions Optional options to customize the request + * @returns A promise that resolves to the interaction response. + */ +export async function cancelInteraction( + apiKey: string | undefined, + interactionId: string, + clientOptions?: ClientOptions +): Promise { + const url = getGoogleAIUrl({ + resourcePath: `interactions/${interactionId}/cancel`, + clientOptions, + }); + const fetchOptions = getFetchOptions({ + method: 'POST', + apiKey, + clientOptions, + }); + + try { + await makeRequest(url, fetchOptions); + // A successful cancellation will actually throw a + // CANCELLED error. If we instead get a 200 OK here, then + // it can mean a no-op cancellation (e.g. race condition between finish and cancelled) + // We throw an error here so the exit logic is the same for both cases. + throw new GenkitError({ + status: 'CANCELLED', + message: 'successfully cancelled', + }); + } catch (e: any) { + if (e instanceof GenkitError && e.status === 'CANCELLED') { + return { + id: interactionId, + status: 'cancelled', + } as GeminiInteraction; + } + throw e; + } +} + /** * Lists available models. * @@ -349,8 +452,10 @@ async function makeRequest( if (!response.ok) { let errorText = await response.text(); let errorMessage = errorText; + let errorDetail: any; try { const json = JSON.parse(errorText); + errorDetail = json; if (json.error && json.error.message) { errorMessage = json.error.message; } @@ -365,6 +470,9 @@ async function makeRequest( case 400: status = 'INVALID_ARGUMENT'; break; + case 499: + status = 'CANCELLED'; + break; case 500: status = 'INTERNAL'; break; @@ -375,6 +483,7 @@ async function makeRequest( throw new GenkitError({ status, message: `Error fetching from ${url}: [${response.status} ${response.statusText}] ${errorMessage}`, + detail: errorDetail, }); } return response; diff --git a/js/plugins/google-genai/src/googleai/deep-research.ts b/js/plugins/google-genai/src/googleai/deep-research.ts new file mode 100644 index 0000000000..5cbc0e0149 --- /dev/null +++ b/js/plugins/google-genai/src/googleai/deep-research.ts @@ -0,0 +1,313 @@ +/** + * Copyright 2025 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 { ActionMetadata, modelActionMetadata, z } from 'genkit'; +import { + BackgroundModelAction, + ModelInfo, + ModelReference, + modelRef, +} from 'genkit/model'; +import { backgroundModel as pluginBackgroundModel } from 'genkit/plugin'; +import { + ensureToolIds, + fromInteraction, + toInteractionTool, + toInteractionTurn, +} from '../common/interaction-converters.js'; +import { + InteractionTool, + ResponseModality, +} from '../common/interaction-types.js'; +import { cleanSchema } from '../common/utils.js'; +import { + cancelInteraction, + createInteraction, + getInteraction, +} from './client.js'; +import { + ClientOptions, + CreateInteractionRequest, + GoogleAIPluginOptions, + Model, +} from './types.js'; +import { + calculateApiKey, + checkApiKey, + checkModelName, + extractVersion, + modelName, +} from './utils.js'; + +export const DeepResearchConfigSchema = z + .object({ + apiKey: z + .string() + .describe('Override the API key provided at plugin initialization.') + .optional(), + baseUrl: z + .string() + .describe( + 'Overrides the plugin-configured or default baseUrl, if specified.' + ) + .optional(), + apiVersion: z + .string() + .describe( + 'Overrides the plugin-configured or default apiVersion, if specified.' + ) + .optional(), + thinkingSummaries: z + .enum(['AUTO', 'NONE']) + .describe('Whether to include thought summaries in the response.') + .optional(), + previousInteractionId: z + .string() + .describe('The ID of the previous interaction, if any.') + .optional(), + store: z + .boolean() + .describe( + 'Whether to store the response and request for later retrieval.' + ) + .optional(), + responseModalities: z + .array(z.enum(['TEXT', 'IMAGE', 'AUDIO'])) + .describe('The modalities to be used in response.') + .optional(), + }) + .passthrough(); +export type DeepResearchConfigSchemaType = typeof DeepResearchConfigSchema; +export type DeepResearchConfig = z.infer; + +// This contains all the DeepResearch config schema types +type ConfigSchemaType = DeepResearchConfigSchemaType; + +function commonRef( + name: string, + info?: ModelInfo, + configSchema: ConfigSchemaType = DeepResearchConfigSchema +): ModelReference { + return modelRef({ + name: `googleai/${name}`, + configSchema, + info: + info ?? + ({ + supports: { + multiturn: true, + media: false, + tools: false, + toolChoice: false, + systemRole: false, + output: ['text'], + longRunning: true, + }, + } as ModelInfo), + }); +} + +const GENERIC_MODEL = commonRef('deep-research'); + +const KNOWN_MODELS = { + 'deep-research-pro-preview-12-2025': commonRef( + 'deep-research-pro-preview-12-2025' + ), +} as const; +export type KnownModels = keyof typeof KNOWN_MODELS; // For autocomplete + +export type DeepResearchModelName = `deep-research-${string}`; +export function isDeepResearchModelName( + value?: string +): value is DeepResearchModelName { + return !!value?.startsWith('deep-research-'); +} + +export function model( + version: string, + config: DeepResearchConfig = {} +): ModelReference { + const name = checkModelName(version); + if (KNOWN_MODELS[name]) { + return KNOWN_MODELS[name].withConfig(config); + } + return modelRef({ + name: `googleai/${name}`, + config, + configSchema: DeepResearchConfigSchema, + info: { ...GENERIC_MODEL.info }, + }); +} + +export function listActions(models: Model[]): ActionMetadata[] { + return ( + models + .filter((m) => isDeepResearchModelName(modelName(m.name))) + // Filter out deprecated + .filter((m) => !m.description || !m.description.includes('deprecated')) + .map((m) => { + const ref = model(m.name); + return modelActionMetadata({ + name: ref.name, + info: ref.info, + configSchema: ref.configSchema, + }); + }) + ); +} + +export function listKnownModels(options?: GoogleAIPluginOptions) { + return Object.keys(KNOWN_MODELS).map((name: string) => + defineModel(name, options) + ); +} + +export function defineModel( + name: string, + pluginOptions?: GoogleAIPluginOptions +): BackgroundModelAction { + checkApiKey(pluginOptions?.apiKey); + const ref = model(name); + const clientOptions: ClientOptions = { + apiVersion: pluginOptions?.apiVersion, + baseUrl: pluginOptions?.baseUrl, + customHeaders: pluginOptions?.customHeaders, + }; + + return pluginBackgroundModel({ + name: ref.name, + ...ref.info, + configSchema: ref.configSchema, + async start(request) { + const { + apiKey: apiKeyConfig, + baseUrl, + apiVersion, + thinkingSummaries, + previousInteractionId, + store, + responseModalities, + ...rest + } = request.config || {}; + const apiKey = calculateApiKey(pluginOptions?.apiKey, apiKeyConfig); + const newClientOptions: ClientOptions = { + ...clientOptions, + apiKey, + baseUrl: baseUrl || clientOptions.baseUrl, + apiVersion: apiVersion || clientOptions.apiVersion, + }; + + const messages = [...request.messages]; + // Deep Research does not support system instructions, so we map them to + // user messages. + for (const message of messages) { + if (message.role === 'system') { + message.role = 'user'; + } + } + + const tools: InteractionTool[] = []; + if (request.tools?.length) { + for (const tool of request.tools) { + tools.push(toInteractionTool(tool)); + } + } + + let responseMimeType = request.output?.contentType; + let responseFormat: any = undefined; + if ( + request.output?.format === 'json' || + request.output?.contentType === 'application/json' + ) { + responseMimeType = 'application/json'; + if (request.output.schema) { + responseFormat = cleanSchema(request.output.schema); + } + } + + let responseModalitiesConverted: ResponseModality[] | undefined; + if (responseModalities) { + responseModalitiesConverted = responseModalities.map( + (m) => m.toLowerCase() as ResponseModality + ); + } + + const req: CreateInteractionRequest = { + agent: extractVersion(ref), + input: ensureToolIds(messages).map(toInteractionTurn), + background: true, + agent_config: { + type: 'deep-research', + thinking_summaries: thinkingSummaries?.toLowerCase() as + | 'auto' + | 'none' + | undefined, + }, + previous_interaction_id: previousInteractionId, + store, + tools: tools.length ? tools : undefined, + response_mime_type: responseMimeType, + response_format: responseFormat, + response_modalities: responseModalitiesConverted, + ...rest, + }; + + const response = await createInteraction(apiKey, req, newClientOptions); + + return fromInteraction(response, newClientOptions); + }, + async check(operation) { + const storedOptions = operation.metadata?.clientOptions as + | ClientOptions + | undefined; + const apiKey = + storedOptions?.apiKey || + calculateApiKey(pluginOptions?.apiKey, undefined); + + const checkOptions: ClientOptions = { + ...clientOptions, + ...storedOptions, + }; + + const response = await getInteraction(apiKey, operation.id, checkOptions); + + return fromInteraction(response, checkOptions); + }, + async cancel(operation) { + const storedOptions = operation.metadata?.clientOptions as + | ClientOptions + | undefined; + const apiKey = + storedOptions?.apiKey || + calculateApiKey(pluginOptions?.apiKey, undefined); + + const cancelOptions: ClientOptions = { + ...clientOptions, + ...storedOptions, + }; + + const response = await cancelInteraction( + apiKey, + operation.id, + cancelOptions + ); + + return fromInteraction(response, cancelOptions); + }, + }); +} + +export const TEST_ONLY = { KNOWN_MODELS }; diff --git a/js/plugins/google-genai/src/googleai/index.ts b/js/plugins/google-genai/src/googleai/index.ts index 27dd7dde30..99a67a6025 100644 --- a/js/plugins/google-genai/src/googleai/index.ts +++ b/js/plugins/google-genai/src/googleai/index.ts @@ -30,11 +30,13 @@ import { calculateApiKey } from './utils.js'; // These are namespaced because they all intentionally have // functions of the same name with the same arguments. // (All exports from these files are used here) +import * as deepResearch from './deep-research.js'; import * as embedder from './embedder.js'; import * as gemini from './gemini.js'; import * as imagen from './imagen.js'; import * as veo from './veo.js'; +export { type DeepResearchConfig } from './deep-research.js'; export { type EmbeddingConfig } from './embedder.js'; export { type GeminiConfig, type GeminiTtsConfig } from './gemini.js'; export { type ImagenConfig } from './imagen.js'; @@ -46,6 +48,7 @@ async function initializer(options?: GoogleAIPluginOptions) { ...gemini.listKnownModels(options), ...embedder.listKnownModels(options), ...veo.listKnownModels(options), + ...deepResearch.listKnownModels(options), ]; } @@ -56,7 +59,11 @@ async function resolver( ): Promise { switch (actionType) { case 'model': - if (veo.isVeoModelName(actionName)) { + if ( + veo.isVeoModelName(actionName) || + deepResearch.isDeepResearchModelName(actionName) + ) { + // These are background models. Do not define them here. return undefined; } else if (imagen.isImagenModelName(actionName)) { return await imagen.defineModel(actionName, options); @@ -68,6 +75,8 @@ async function resolver( case 'background-model': if (veo.isVeoModelName(actionName)) { return await veo.defineModel(actionName, options); + } else if (deepResearch.isDeepResearchModelName(actionName)) { + return await deepResearch.defineModel(actionName, options); } break; case 'embedder': @@ -95,6 +104,7 @@ async function listActions( ...gemini.listActions(allModels), ...imagen.listActions(allModels), ...veo.listActions(allModels), + ...deepResearch.listActions(allModels), ...embedder.listActions(allModels), ]; } catch (e: unknown) { @@ -149,6 +159,10 @@ export type GoogleAIPlugin = { name: veo.KnownModels | (veo.VeoModelName & {}), config?: veo.VeoConfig ): ModelReference; + model( + name: deepResearch.KnownModels | (deepResearch.DeepResearchModelName & {}), + config?: deepResearch.DeepResearchConfig + ): ModelReference; model(name: string, config?: any): ModelReference; embedder( @@ -168,6 +182,9 @@ export const googleAI = googleAIPlugin as GoogleAIPlugin; if (veo.isVeoModelName(name)) { return veo.model(name, config); } + if (deepResearch.isDeepResearchModelName(name)) { + return deepResearch.model(name, config); + } if (imagen.isImagenModelName(name)) { return imagen.model(name, config); } diff --git a/js/plugins/google-genai/src/googleai/types.ts b/js/plugins/google-genai/src/googleai/types.ts index 5279d8769a..26d2dc8336 100644 --- a/js/plugins/google-genai/src/googleai/types.ts +++ b/js/plugins/google-genai/src/googleai/types.ts @@ -14,6 +14,10 @@ * limitations under the License. */ +import { + CreateInteractionRequest, + GeminiInteraction, +} from '../common/interaction-types.js'; import { Content, FinishReason, @@ -46,6 +50,8 @@ export { HarmCategory, TaskTypeSchema, type Content, + type CreateInteractionRequest, + type GeminiInteraction, type GenerateContentCandidate, type GenerateContentRequest, type GenerateContentResponse, diff --git a/js/plugins/google-genai/tests/common/interaction-converters_test.ts b/js/plugins/google-genai/tests/common/interaction-converters_test.ts new file mode 100644 index 0000000000..10ea856e6d --- /dev/null +++ b/js/plugins/google-genai/tests/common/interaction-converters_test.ts @@ -0,0 +1,408 @@ +/** + * Copyright 2026 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 * as assert from 'assert'; +import { MessageData, Part } from 'genkit'; +import { ToolDefinition } from 'genkit/model'; +import { describe, it } from 'node:test'; +import { + ensureToolIds, + fromInteraction, + fromInteractionContent, + toInteractionContent, + toInteractionRole, + toInteractionTool, +} from '../../src/common/interaction-converters.js'; +import { + Content, + GeminiInteraction, +} from '../../src/common/interaction-types.js'; + +describe('Interaction Converters', () => { + describe('ensureToolIds', () => { + it('should assign IDs to tool requests without refs', () => { + const messages: MessageData[] = [ + { + role: 'model', + content: [ + { toolRequest: { name: 'tool1', input: {} } }, + { toolRequest: { name: 'tool2', input: {} } }, + ], + }, + ]; + const result = ensureToolIds(messages); + const req1 = result[0].content[0].toolRequest!; + const req2 = result[0].content[1].toolRequest!; + assert.ok(req1.ref && req1.ref.startsWith('genkit-auto-id-')); + assert.ok(req2.ref && req2.ref.startsWith('genkit-auto-id-')); + assert.notStrictEqual(req1.ref, req2.ref); + }); + + it('should assign matching IDs to tool responses without refs based on order', () => { + const messages: MessageData[] = [ + { + role: 'model', + content: [ + { toolRequest: { name: 'tool1', input: {} } }, + { toolRequest: { name: 'tool2', input: {} } }, + ], + }, + { + role: 'tool', + content: [ + { toolResponse: { name: 'tool1', output: {} } }, + { toolResponse: { name: 'tool2', output: {} } }, + ], + }, + ]; + const result = ensureToolIds(messages); + const req1 = result[0].content[0].toolRequest!; + const req2 = result[0].content[1].toolRequest!; + const res1 = result[1].content[0].toolResponse!; + const res2 = result[1].content[1].toolResponse!; + + assert.ok(req1.ref); + assert.strictEqual(req1.ref, res1.ref); + assert.ok(req2.ref); + assert.strictEqual(req2.ref, res2.ref); + }); + + it('should assign orphan ID to tool response if no matching request', () => { + const messages: MessageData[] = [ + { + role: 'tool', + content: [{ toolResponse: { name: 'tool1', output: {} } }], + }, + ]; + const result = ensureToolIds(messages); + const res1 = result[0].content[0].toolResponse!; + assert.ok(res1.ref && res1.ref.startsWith('genkit-orphan-id-')); + }); + + it('should preserve existing refs', () => { + const messages: MessageData[] = [ + { + role: 'model', + content: [ + { toolRequest: { name: 'tool1', input: {}, ref: 'existing-id' } }, + ], + }, + ]; + const result = ensureToolIds(messages); + const req1 = result[0].content[0].toolRequest!; + assert.strictEqual(req1.ref, 'existing-id'); + }); + }); + + describe('toInteractionRole', () => { + it('should convert user role', () => { + assert.strictEqual(toInteractionRole('user'), 'user'); + }); + it('should convert model role', () => { + assert.strictEqual(toInteractionRole('model'), 'model'); + }); + it('should convert tool role to user', () => { + assert.strictEqual(toInteractionRole('tool'), 'user'); + }); + it('should throw for system role', () => { + assert.throws( + () => toInteractionRole('system'), + /System role should be handled as system_instruction/ + ); + }); + }); + + describe('toInteractionTool', () => { + it('should convert ToolDefinition to InteractionTool', () => { + const tool: ToolDefinition = { + name: 'myFunc', + description: 'desc', + inputSchema: { + type: 'object', + properties: { arg: { type: 'string' } }, + }, + }; + const result = toInteractionTool(tool); + assert.deepStrictEqual(result, { + type: 'function', + name: 'myFunc', + description: 'desc', + parameters: { + type: 'object', + properties: { arg: { type: 'string' } }, + }, + }); + }); + }); + + describe('toInteractionContent', () => { + it('should convert TextPart', () => { + const part: Part = { text: 'Hello' }; + const result = toInteractionContent(part); + assert.deepStrictEqual(result, { type: 'text', text: 'Hello' }); + }); + + it('should convert MediaPart (image data)', () => { + const part: Part = { + media: { + url: 'data:image/png;base64,DATA', + contentType: 'image/png', + }, + }; + const result = toInteractionContent(part); + assert.deepStrictEqual(result, { + type: 'image', + data: 'DATA', + mime_type: 'image/png', + }); + }); + + it('should convert MediaPart (image uri)', () => { + const part: Part = { + media: { + url: 'gs://bucket/image.png', + contentType: 'image/png', + }, + }; + const result = toInteractionContent(part); + assert.deepStrictEqual(result, { + type: 'image', + uri: 'gs://bucket/image.png', + mime_type: 'image/png', + }); + }); + + it('should convert MediaPart (audio)', () => { + const part: Part = { + media: { + url: 'data:audio/mp3;base64,DATA', + contentType: 'audio/mp3', + }, + }; + const result = toInteractionContent(part); + assert.deepStrictEqual(result, { + type: 'audio', + data: 'DATA', + mime_type: 'audio/mp3', + }); + }); + + it('should convert MediaPart (document)', () => { + const part: Part = { + media: { + url: 'gs://bucket/doc.pdf', + contentType: 'application/pdf', + }, + }; + const result = toInteractionContent(part); + assert.deepStrictEqual(result, { + type: 'document', + uri: 'gs://bucket/doc.pdf', + mime_type: 'application/pdf', + }); + }); + + it('should convert ToolRequestPart', () => { + const part: Part = { + toolRequest: { + name: 'func', + input: { a: 1 }, + ref: 'ref1', + }, + }; + const result = toInteractionContent(part); + assert.deepStrictEqual(result, { + type: 'function_call', + name: 'func', + arguments: { a: 1 }, + id: 'ref1', + }); + }); + + it('should convert ToolResponsePart', () => { + const part: Part = { + toolResponse: { + name: 'func', + output: { result: 'ok' }, + ref: 'ref1', + }, + }; + const result = toInteractionContent(part); + assert.deepStrictEqual(result, { + type: 'function_result', + name: 'func', + result: { result: 'ok' }, + call_id: 'ref1', + }); + }); + }); + + describe('fromInteractionContent', () => { + it('should convert TextContent', () => { + const content: Content = { + type: 'text', + text: 'Hello world', + annotations: [{ start_index: 0, end_index: 5, source: 'source' }], + }; + const result = fromInteractionContent(content); + assert.deepStrictEqual(result, { + text: 'Hello world', + metadata: { + annotations: [{ start_index: 0, end_index: 5, source: 'source' }], + }, + }); + }); + + it('should convert ImageContent with data', () => { + const content: Content = { + type: 'image', + data: 'BASE64DATA', + mime_type: 'image/png', + }; + const result = fromInteractionContent(content); + assert.deepStrictEqual(result, { + media: { + url: 'data:image/png;base64,BASE64DATA', + contentType: 'image/png', + }, + metadata: { resolution: undefined }, + }); + }); + + it('should convert ImageContent with uri', () => { + const content: Content = { + type: 'image', + uri: 'gs://bucket/image.png', + mime_type: 'image/png', + }; + const result = fromInteractionContent(content); + assert.deepStrictEqual(result, { + media: { + url: 'gs://bucket/image.png', + contentType: 'image/png', + }, + metadata: { resolution: undefined }, + }); + }); + + it('should convert ImageContent with resolution', () => { + const content: Content = { + type: 'image', + uri: 'gs://bucket/image.png', + mime_type: 'image/png', + resolution: 'high', + }; + const result = fromInteractionContent(content); + assert.deepStrictEqual(result, { + media: { + url: 'gs://bucket/image.png', + contentType: 'image/png', + }, + metadata: { resolution: 'high' }, + }); + }); + + it('should convert ThoughtContent', () => { + const content: Content = { + type: 'thought', + signature: 'SIG', + summary: [{ type: 'text', text: 'Thinking...' }], + }; + const result = fromInteractionContent(content); + assert.deepStrictEqual(result, { + reasoning: 'Thinking...', + metadata: { + thoughtSignature: 'SIG', + }, + custom: { + thought: content, + }, + }); + }); + + it('should convert ThoughtContent with mixed summary', () => { + const content: Content = { + type: 'thought', + signature: 'SIG', + summary: [ + { type: 'text', text: 'Thinking about...' }, + { type: 'image', uri: 'gs://image.png' }, + { type: 'text', text: '...this image.' }, + ], + }; + const result = fromInteractionContent(content); + assert.deepStrictEqual(result, { + reasoning: 'Thinking about...\n[Image]\n...this image.', + metadata: { + thoughtSignature: 'SIG', + }, + custom: { + thought: content, + }, + }); + }); + + it('should convert FunctionCallContent', () => { + const content: Content = { + type: 'function_call', + name: 'get_weather', + arguments: { location: 'Paris' }, + id: 'call_123', + }; + const result = fromInteractionContent(content); + assert.deepStrictEqual(result, { + toolRequest: { + name: 'get_weather', + input: { location: 'Paris' }, + ref: 'call_123', + }, + }); + }); + + it('should convert FunctionResultContent', () => { + const content: Content = { + type: 'function_result', + name: 'get_weather', + result: { temperature: 20 }, + call_id: 'call_123', + }; + const result = fromInteractionContent(content); + assert.deepStrictEqual(result, { + toolResponse: { + name: 'get_weather', + output: { temperature: 20 }, + ref: 'call_123', + }, + }); + }); + }); + + describe('fromInteraction', () => { + it('should convert cancelled interaction', () => { + const interaction: GeminiInteraction = { + id: '123', + status: 'cancelled', + }; + const result = fromInteraction(interaction); + assert.strictEqual(result.done, true); + assert.strictEqual(result.output?.finishReason, 'aborted'); + assert.strictEqual(result.output?.finishMessage, 'Operation cancelled'); + assert.deepStrictEqual(result.output?.message?.content, [ + { text: 'Operation cancelled.' }, + ]); + }); + }); +}); diff --git a/js/plugins/google-genai/tests/googleai/deep-research_test.ts b/js/plugins/google-genai/tests/googleai/deep-research_test.ts new file mode 100644 index 0000000000..ac3984ae68 --- /dev/null +++ b/js/plugins/google-genai/tests/googleai/deep-research_test.ts @@ -0,0 +1,435 @@ +/** + * Copyright 2026 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 * as assert from 'assert'; +import { GenerateRequest } from 'genkit/model'; +import { afterEach, beforeEach, describe, it } from 'node:test'; +import * as sinon from 'sinon'; +import { GeminiInteraction } from '../../src/common/interaction-types.js'; +import { + DeepResearchConfigSchema, + defineModel, +} from '../../src/googleai/deep-research.js'; +import { GoogleAIPluginOptions } from '../../src/googleai/types.js'; + +describe('Deep Research', () => { + const ORIGINAL_ENV = { ...process.env }; + let fetchStub: sinon.SinonStub; + + beforeEach(() => { + process.env = { ...ORIGINAL_ENV }; + delete process.env.GEMINI_API_KEY; + delete process.env.GOOGLE_API_KEY; + delete process.env.GOOGLE_GENAI_API_KEY; + + fetchStub = sinon.stub(global, 'fetch'); + }); + + afterEach(() => { + sinon.restore(); + process.env = { ...ORIGINAL_ENV }; + }); + + function mockFetchResponse(body: any, status = 200) { + fetchStub.callsFake(() => { + return Promise.resolve( + new Response(JSON.stringify(body), { + status: status, + statusText: status === 200 ? 'OK' : 'Error', + headers: { 'Content-Type': 'application/json' }, + }) + ); + }); + } + + const defaultPluginOptions: GoogleAIPluginOptions = { + apiKey: 'test-api-key-plugin', + }; + + const minimalRequest: GenerateRequest = { + messages: [ + { role: 'user', content: [{ text: 'Research quantum computing' }] }, + ], + }; + + const mockInteractionResponse: GeminiInteraction = { + id: 'interaction-123', + status: 'completed', + outputs: [{ type: 'text', text: 'Here is the report...' }], + }; + + describe('defineModel', () => { + it('passes responseModalities to the API', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); + + const request: GenerateRequest = { + ...minimalRequest, + config: { + responseModalities: ['TEXT', 'IMAGE'], + }, + }; + + await model.start(request); + + sinon.assert.calledOnce(fetchStub); + const fetchArgs = fetchStub.lastCall.args; + const options = fetchArgs[1]; + const body = JSON.parse(options.body); + + assert.deepStrictEqual(body.response_modalities, ['text', 'image']); + }); + + it('passes thinkingSummaries to the API', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); + + const request: GenerateRequest = { + ...minimalRequest, + config: { + thinkingSummaries: 'AUTO', + }, + }; + + await model.start(request); + + sinon.assert.calledOnce(fetchStub); + const options = fetchStub.lastCall.args[1]; + const body = JSON.parse(options.body); + + assert.deepStrictEqual(body.agent_config, { + type: 'deep-research', + thinking_summaries: 'auto', + }); + }); + + it('passes previousInteractionId and store to the API', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); + + const request: GenerateRequest = { + ...minimalRequest, + config: { + previousInteractionId: 'prev-123', + store: true, + }, + }; + + await model.start(request); + + sinon.assert.calledOnce(fetchStub); + const options = fetchStub.lastCall.args[1]; + const body = JSON.parse(options.body); + + assert.strictEqual(body.previous_interaction_id, 'prev-123'); + assert.strictEqual(body.store, true); + }); + + it('converts system instructions to user role', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); + + const request: GenerateRequest = { + messages: [ + { role: 'system', content: [{ text: 'Be concise' }] }, + { role: 'user', content: [{ text: 'Hello' }] }, + ], + }; + + await model.start(request); + + sinon.assert.calledOnce(fetchStub); + const options = fetchStub.lastCall.args[1]; + const body = JSON.parse(options.body); + + assert.strictEqual(body.system_instruction, undefined); + assert.deepStrictEqual(body.input, [ + { + role: 'user', + content: [ + { + type: 'text', + text: 'Be concise', + }, + ], + }, + { + role: 'user', + content: [ + { + type: 'text', + text: 'Hello', + }, + ], + }, + ]); + }); + + it('handles JSON output format', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); + + const request: GenerateRequest = { + ...minimalRequest, + output: { + format: 'json', + schema: { type: 'object', properties: { foo: { type: 'string' } } }, + }, + }; + + await model.start(request); + + sinon.assert.calledOnce(fetchStub); + const options = fetchStub.lastCall.args[1]; + const body = JSON.parse(options.body); + + assert.strictEqual(body.response_mime_type, 'application/json'); + assert.deepStrictEqual(body.response_format, { + type: 'object', + properties: { foo: { type: 'string' } }, + }); + }); + + it('handles tools', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); + + const request: GenerateRequest = { + ...minimalRequest, + tools: [ + { + name: 'myFunc', + description: 'desc', + inputSchema: { + type: 'object', + properties: { arg: { type: 'string' } }, + }, + }, + ], + }; + + await model.start(request); + + sinon.assert.calledOnce(fetchStub); + const options = fetchStub.lastCall.args[1]; + const body = JSON.parse(options.body); + + assert.strictEqual(body.tools.length, 1); + assert.strictEqual(body.tools[0].type, 'function'); + assert.strictEqual(body.tools[0].name, 'myFunc'); + }); + + it('persists client options to metadata', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); + + const request: GenerateRequest = { + ...minimalRequest, + config: { + apiKey: 'request-api-key', + baseUrl: 'https://custom.url', + }, + }; + + const operation = await model.start(request); + + assert.deepStrictEqual(operation.metadata?.clientOptions, { + apiVersion: undefined, + apiKey: 'request-api-key', + baseUrl: 'https://custom.url', + customHeaders: undefined, + }); + }); + + it('uses persisted options in check', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); // For start + mockFetchResponse(mockInteractionResponse); // For check + + const request: GenerateRequest = { + ...minimalRequest, + config: { + apiKey: 'request-api-key', + baseUrl: 'https://custom.url', + }, + }; + + const operation = await model.start(request); + + // Now call check with the operation that has metadata + await model.check!(operation); + + // fetchStub should be called twice: once for start, once for check + sinon.assert.calledTwice(fetchStub); + + const checkCall = fetchStub.getCall(1); + const url = checkCall.args[0] as string; + const options = checkCall.args[1]; + + // Check URL uses custom base URL + assert.ok(url.startsWith('https://custom.url')); + + // Check API Key header + // The client usually adds it to x-goog-api-key or key query param. + // We need to know how `client.ts` implements `getInteraction`. + // Assuming it adds it to headers or query params. + // Based on googleai/client.ts (which I haven't read, but assuming standard behavior): + // The `fetch` mock args[1] contains headers. + const headers = options.headers as any; + if (headers['x-goog-api-key']) { + assert.strictEqual(headers['x-goog-api-key'], 'request-api-key'); + } else { + // Check query param if not in header (though likely in header) + assert.ok(url.includes('key=request-api-key')); + } + }); + + it('maps usage statistics', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + const usageResponse: GeminiInteraction = { + ...mockInteractionResponse, + usage: { + total_input_tokens: 100, + total_output_tokens: 200, + total_tokens: 300, + total_cached_tokens: 60, + total_thought_tokens: 10, + input_tokens_by_modality: [ + { modality: 'text', tokens: 80 }, + { modality: 'image', tokens: 20 }, + ], + output_tokens_by_modality: [ + { modality: 'text', tokens: 150 }, + { modality: 'audio', tokens: 50 }, + ], + }, + }; + mockFetchResponse(usageResponse); + + const operation = await model.start(minimalRequest); + + assert.deepStrictEqual(operation.output?.usage, { + inputTokens: 100, + outputTokens: 200, + totalTokens: 300, + cachedContentTokens: 60, + thoughtsTokens: 10, + inputCharacters: 80, + inputImages: 20, + outputCharacters: 150, + outputAudioFiles: 50, + }); + }); + + it('passes through arbitrary config like fileSearch', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + mockFetchResponse(mockInteractionResponse); + + const request: GenerateRequest = { + ...minimalRequest, + config: { + fileSearch: { + fileSearchStoreNames: ['stores/123'], + metadataFilter: 'foo=bar', + }, + } as any, + }; + + await model.start(request); + + sinon.assert.calledOnce(fetchStub); + const options = fetchStub.lastCall.args[1]; + const body = JSON.parse(options.body); + + assert.deepStrictEqual(body.fileSearch, { + fileSearchStoreNames: ['stores/123'], + metadataFilter: 'foo=bar', + }); + }); + + it('handles 200 response for cancellation request', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + // Mock 200 OK response + mockFetchResponse({}); + + const operation = await model.cancel!({ + id: '123', + action: 'foo', + }); + + assert.strictEqual(operation.done, true); + assert.strictEqual(operation.output?.finishReason, 'aborted'); + assert.strictEqual( + operation.output?.finishMessage, + 'Operation cancelled' + ); + }); + + it('handles 499 response for cancellation request', async () => { + const model = defineModel( + 'deep-research-pro-preview-12-2025', + defaultPluginOptions + ); + // Mock 499 response + mockFetchResponse({ error: { message: 'Operation cancelled.' } }, 499); + + const operation = await model.cancel!({ + id: '123', + action: 'foo', + }); + + assert.strictEqual(operation.done, true); + assert.strictEqual(operation.output?.finishReason, 'aborted'); + assert.strictEqual( + operation.output?.finishMessage, + 'Operation cancelled' + ); + }); + }); +}); diff --git a/js/testapps/basic-gemini/src/index.ts b/js/testapps/basic-gemini/src/index.ts index 8e23a433fe..7568e7d2e8 100644 --- a/js/testapps/basic-gemini/src/index.ts +++ b/js/testapps/basic-gemini/src/index.ts @@ -101,6 +101,7 @@ ai.defineFlow( config: { thinkingConfig: { thinkingLevel: level, + includeThoughts: true, }, }, }); @@ -129,6 +130,7 @@ ai.defineFlow( config: { thinkingConfig: { thinkingLevel: level, + includeThoughts: true, }, }, }); @@ -796,3 +798,132 @@ ai.defineFlow( return text; } ); + +// Deep research example +ai.defineFlow('deep-research', async (_, { sendChunk }) => { + let { operation } = await ai.generate({ + model: googleAI.model('deep-research-pro-preview-12-2025'), + prompt: + 'Compare the differences between TCP and UDP protocols. Provide the answer in a markdown table focusing on reliability, connection type, and speed.', + }); + + if (!operation) { + throw new Error('Expected the model to return an operation'); + } + + while (!operation.done) { + sendChunk('check status of operation ' + operation.id); + operation = await ai.checkOperation(operation); + await new Promise((resolve) => setTimeout(resolve, 30000)); + } + + if (operation.error) { + sendChunk('Error: ' + operation.error.message); + throw new Error('failed to deep research: ' + operation.error.message); + } + + return operation.output?.message?.content.find((p) => !!p.text)?.text; +}); + +ai.defineFlow('deep-research-multi-turn', async (_, { sendChunk }) => { + // 1. First turn: Initial comparison with specific requirements + sendChunk('--- Turn 1: Initial Research ---'); + let { operation } = await ai.generate({ + model: googleAI.model('deep-research-pro-preview-12-2025'), + messages: [ + { + role: 'system', + content: [{ text: 'You are a technical research assistant.' }], + }, + { + role: 'user', + content: [ + { + text: 'Compare TCP vs UDP.', + }, + ], + }, + ], + config: { + thinkingSummaries: 'AUTO', + responseModalities: ['TEXT'], + store: true, + }, + }); + + if (!operation) throw new Error('No operation returned'); + + while (!operation.done) { + sendChunk('Turn 1 status: ' + operation.id); + operation = await ai.checkOperation(operation); + await new Promise((resolve) => setTimeout(resolve, 30000)); + } + + if (operation.error) { + throw new Error('Turn 1 failed: ' + operation.error.message); + } + + const response1 = operation.output?.message?.content.find( + (p) => !!p.text + )?.text; + sendChunk('Turn 1 Response: ' + response1); + + // 2. Second turn: Follow up using the previous interaction ID + sendChunk('\n--- Turn 2: Follow up ---'); + const interactionId = operation.id; + + let { operation: op2 } = await ai.generate({ + model: googleAI.model('deep-research-pro-preview-12-2025'), + messages: [ + { + role: 'user', + content: [ + { text: 'Which one is better for video streaming? Explain why.' }, + ], + }, + ], + config: { + thinkingSummaries: 'AUTO', + responseModalities: ['TEXT'], + previousInteractionId: interactionId, + }, + }); + + if (!op2) throw new Error('No operation returned for turn 2'); + + while (!op2.done) { + sendChunk('Turn 2 status: ' + op2.id); + op2 = await ai.checkOperation(op2); + await new Promise((resolve) => setTimeout(resolve, 30000)); + } + + if (op2.error) { + throw new Error('Turn 2 failed: ' + op2.error.message); + } + + return op2.output?.message?.content.find((p) => !!p.text)?.text; +}); + +// Deep research cancel example +ai.defineFlow('deep-research-cancel', async (_, { sendChunk }) => { + let { operation } = await ai.generate({ + model: googleAI.model('deep-research-pro-preview-12-2025'), + prompt: + 'Compare the differences between TCP and UDP protocols. Provide the answer in a markdown table focusing on reliability, connection type, and speed.', + }); + + if (!operation) { + throw new Error('Expected the model to return an operation'); + } + + sendChunk('Started operation: ' + operation.id); + // Wait a bit before cancelling + await new Promise((resolve) => setTimeout(resolve, 5000)); + + sendChunk('Cancelling operation: ' + operation.id); + + const canceledOp = await ai.cancelOperation(operation); + sendChunk('Operation cancelled'); + + return JSON.stringify(canceledOp, null, 2); +}); From 4d53fd7e004f99cddd765859773b02b7b8a39679 Mon Sep 17 00:00:00 2001 From: Ingrid Fielker Date: Thu, 19 Feb 2026 15:36:38 -0500 Subject: [PATCH 16/16] chore: force GitHub PR sync