From 6205377767693737e5c4e9dd2e4bab750f37d6a2 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 20 May 2026 19:48:59 +0000 Subject: [PATCH 1/4] refactor: lift Runtime and run helpers into the base package Move Runtime and run() from @effect-firebase/admin into the effect-firebase base package so packages other than admin can share the same runtime contract without depending on firebase-admin. The helpers were only used internally by admin's on-* function modules, so this is a non-breaking move: admin's public surface is unchanged. --- packages/admin/package.json | 8 +++--- packages/admin/src/lib/functions/on-call.ts | 2 +- .../src/lib/functions/on-document-created.ts | 2 +- .../src/lib/functions/on-document-deleted.ts | 2 +- .../src/lib/functions/on-document-updated.ts | 2 +- .../src/lib/functions/on-document-written.ts | 2 +- .../src/lib/functions/on-message-published.ts | 2 +- .../admin/src/lib/functions/on-request.ts | 2 +- .../src/lib/functions/on-task-dispatched.ts | 2 +- packages/effect-firebase/src/index.ts | 2 ++ .../src/lib/runtime.ts} | 0 pnpm-lock.yaml | 25 ++++++++++++++----- 12 files changed, 33 insertions(+), 18 deletions(-) rename packages/{admin/src/lib/functions/run.ts => effect-firebase/src/lib/runtime.ts} (100%) diff --git a/packages/admin/package.json b/packages/admin/package.json index d4f93f4..b2b6a26 100644 --- a/packages/admin/package.json +++ b/packages/admin/package.json @@ -31,17 +31,17 @@ "devDependencies": { "effect": "^4.0.0-beta.43", "effect-firebase": "workspace:*", + "express": "4.21.2", "firebase": "^12.10.0", "firebase-admin": "^13.7.0", - "firebase-functions": "^7.1.0", - "express": "4.21.2" + "firebase-functions": "^7.1.0" }, "peerDependencies": { "effect": "^4.0.0-beta.43", "effect-firebase": "workspace:*", + "express": "^4.0.0", "firebase-admin": "^13.0.0", - "firebase-functions": "^7.0.0", - "express": "^4.0.0" + "firebase-functions": "^7.0.0" }, "publishConfig": { "access": "public", diff --git a/packages/admin/src/lib/functions/on-call.ts b/packages/admin/src/lib/functions/on-call.ts index b1c5ae0..cf557dc 100644 --- a/packages/admin/src/lib/functions/on-call.ts +++ b/packages/admin/src/lib/functions/on-call.ts @@ -6,7 +6,7 @@ import { CallableRequest, CallableResponse, } from 'firebase-functions/https'; -import { run, Runtime } from './run.js'; +import { run, Runtime } from 'effect-firebase'; import { logger } from 'firebase-functions'; import { CallableContext, diff --git a/packages/admin/src/lib/functions/on-document-created.ts b/packages/admin/src/lib/functions/on-document-created.ts index 46f398a..2a89391 100644 --- a/packages/admin/src/lib/functions/on-document-created.ts +++ b/packages/admin/src/lib/functions/on-document-created.ts @@ -9,7 +9,7 @@ import { } from 'firebase-functions/v2/firestore'; import { CloudFunction } from 'firebase-functions/v2'; import { ParamsOf } from 'firebase-functions'; -import { run, Runtime } from './run.js'; +import { run, Runtime } from 'effect-firebase'; import { logger } from 'firebase-functions'; import { decodeDocumentData } from './decode-document-data.js'; diff --git a/packages/admin/src/lib/functions/on-document-deleted.ts b/packages/admin/src/lib/functions/on-document-deleted.ts index 7eb9547..cab1cf4 100644 --- a/packages/admin/src/lib/functions/on-document-deleted.ts +++ b/packages/admin/src/lib/functions/on-document-deleted.ts @@ -9,7 +9,7 @@ import { } from 'firebase-functions/v2/firestore'; import { CloudFunction } from 'firebase-functions/v2'; import { ParamsOf } from 'firebase-functions'; -import { run, Runtime } from './run.js'; +import { run, Runtime } from 'effect-firebase'; import { logger } from 'firebase-functions'; import { decodeDocumentData } from './decode-document-data.js'; diff --git a/packages/admin/src/lib/functions/on-document-updated.ts b/packages/admin/src/lib/functions/on-document-updated.ts index 1be2b58..3dc9d8e 100644 --- a/packages/admin/src/lib/functions/on-document-updated.ts +++ b/packages/admin/src/lib/functions/on-document-updated.ts @@ -10,7 +10,7 @@ import { } from 'firebase-functions/v2/firestore'; import { CloudFunction } from 'firebase-functions/v2'; import { ParamsOf } from 'firebase-functions'; -import { run, Runtime } from './run.js'; +import { run, Runtime } from 'effect-firebase'; import { logger } from 'firebase-functions'; import { decodeDocumentData } from './decode-document-data.js'; diff --git a/packages/admin/src/lib/functions/on-document-written.ts b/packages/admin/src/lib/functions/on-document-written.ts index 4d8515f..b3f484a 100644 --- a/packages/admin/src/lib/functions/on-document-written.ts +++ b/packages/admin/src/lib/functions/on-document-written.ts @@ -10,7 +10,7 @@ import { } from 'firebase-functions/v2/firestore'; import { CloudFunction } from 'firebase-functions/v2'; import { ParamsOf } from 'firebase-functions'; -import { run, Runtime } from './run.js'; +import { run, Runtime } from 'effect-firebase'; import { logger } from 'firebase-functions'; import { decodeDocumentData } from './decode-document-data.js'; diff --git a/packages/admin/src/lib/functions/on-message-published.ts b/packages/admin/src/lib/functions/on-message-published.ts index 3a7c369..7883a7e 100644 --- a/packages/admin/src/lib/functions/on-message-published.ts +++ b/packages/admin/src/lib/functions/on-message-published.ts @@ -5,7 +5,7 @@ import { MessagePublishedData, } from 'firebase-functions/v2/pubsub'; import { CloudEvent, CloudFunction } from 'firebase-functions/v2'; -import { run, Runtime } from './run.js'; +import { run, Runtime } from 'effect-firebase'; import { logger } from 'firebase-functions'; interface MessagePublishedEffectOptions extends PubSubOptions { diff --git a/packages/admin/src/lib/functions/on-request.ts b/packages/admin/src/lib/functions/on-request.ts index ce2e4c9..cc93f5c 100644 --- a/packages/admin/src/lib/functions/on-request.ts +++ b/packages/admin/src/lib/functions/on-request.ts @@ -6,7 +6,7 @@ import { Request, } from 'firebase-functions/https'; import { type Response } from 'express'; -import { run, Runtime } from './run.js'; +import { run, Runtime } from 'effect-firebase'; import { logger } from 'firebase-functions'; import { parseBody, sendJson } from './on-request-helpers.js'; diff --git a/packages/admin/src/lib/functions/on-task-dispatched.ts b/packages/admin/src/lib/functions/on-task-dispatched.ts index f7d0f4c..d4dddad 100644 --- a/packages/admin/src/lib/functions/on-task-dispatched.ts +++ b/packages/admin/src/lib/functions/on-task-dispatched.ts @@ -6,7 +6,7 @@ import { TaskQueueOptions, } from 'firebase-functions/v2/tasks'; import { logger } from 'firebase-functions'; -import { run, Runtime } from './run.js'; +import { run, Runtime } from 'effect-firebase'; interface TaskDispatchedEffectOptions extends TaskQueueOptions { runtime: Runtime; diff --git a/packages/effect-firebase/src/index.ts b/packages/effect-firebase/src/index.ts index ff5ca89..43cd29c 100644 --- a/packages/effect-firebase/src/index.ts +++ b/packages/effect-firebase/src/index.ts @@ -1,3 +1,5 @@ +export * from './lib/runtime.js'; + export * as FirestoreSchema from './lib/firestore/schema/schema.js'; export * as Firestore from './lib/firestore/firestore.js'; export * from './lib/firestore/firestore-service.js'; diff --git a/packages/admin/src/lib/functions/run.ts b/packages/effect-firebase/src/lib/runtime.ts similarity index 100% rename from packages/admin/src/lib/functions/run.ts rename to packages/effect-firebase/src/lib/runtime.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4090dd7..62a2861 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -146,7 +146,7 @@ importers: version: 5.0.0(eslint@9.28.0(jiti@2.4.2)) firebase-tools: specifier: ^15.5.1 - version: 15.5.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(encoding@0.1.13)(typescript@5.9.3) + version: 15.5.1(@cfworker/json-schema@4.1.1)(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(encoding@0.1.13)(typescript@5.9.3) jiti: specifier: 2.4.2 version: 2.4.2 @@ -977,6 +977,9 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@cfworker/json-schema@4.1.1': + resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -4194,6 +4197,7 @@ packages: basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} + deprecated: Security vulnerability fixed in 5.2.1, please upgrade bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} @@ -5672,6 +5676,7 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@10.5.0: @@ -8702,10 +8707,12 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-compile-cache-lib@3.0.1: @@ -8885,6 +8892,7 @@ packages: whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} @@ -9897,6 +9905,9 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@cfworker/json-schema@4.1.1': + optional: true + '@colors/colors@1.5.0': optional: true @@ -11435,7 +11446,7 @@ snapshots: '@microsoft/tsdoc@0.15.1': {} - '@modelcontextprotocol/sdk@1.26.0(zod@3.25.76)': + '@modelcontextprotocol/sdk@1.26.0(@cfworker/json-schema@4.1.1)(zod@3.25.76)': dependencies: '@hono/node-server': 1.19.9(hono@4.11.9) ajv: 8.17.1 @@ -11454,6 +11465,8 @@ snapshots: raw-body: 3.0.0 zod: 3.25.76 zod-to-json-schema: 3.25.1(zod@3.25.76) + optionalDependencies: + '@cfworker/json-schema': 4.1.1 transitivePeerDependencies: - supports-color @@ -13766,7 +13779,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.9(@types/node@22.17.0)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + vitest: 4.0.9(@types/node@20.19.9)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) '@vitest/utils@4.0.9': dependencies: @@ -15969,7 +15982,7 @@ snapshots: transitivePeerDependencies: - supports-color - firebase-tools@15.5.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(encoding@0.1.13)(typescript@5.9.3): + firebase-tools@15.5.1(@cfworker/json-schema@4.1.1)(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(encoding@0.1.13)(typescript@5.9.3): dependencies: '@apphosting/build': 0.1.7(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(typescript@5.9.3) '@apphosting/common': 0.0.8 @@ -15978,7 +15991,7 @@ snapshots: '@google-cloud/cloud-sql-connector': 1.8.2 '@google-cloud/pubsub': 5.2.3 '@inquirer/prompts': 7.10.1(@types/node@20.19.9) - '@modelcontextprotocol/sdk': 1.26.0(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.26.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) abort-controller: 3.0.0 ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -17927,7 +17940,7 @@ snapshots: tree-kill: 1.2.2 tsconfig-paths: 4.2.0 tslib: 2.8.1 - yaml: 2.8.0 + yaml: 2.8.3 yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: From b18cabef7ed722c742f6cb335b63f86c3a359e57 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 20 May 2026 20:03:32 +0000 Subject: [PATCH 2/4] feat(genkit): add @effect-firebase/genkit package Bridge Effect's Tool primitive and Effect-based handlers into Genkit and firebase-functions' onCallGenkit. - makeTool: convert an Effect Tool (with Schema parameters/success/failure) into a Genkit ToolAction. Parameters and success are converted to JSON Schema; typed failures are encoded through failureSchema and surfaced as a GenkitError with the encoded payload on detail. - onCallGenkitEffect: schema-driven callable backed by a Genkit flow, mirroring onCallEffect's overload pattern. Effect Schema handles input decoding and output encoding inside the flow handler since FlowConfig does not accept JSON Schema. Includes unit tests for tool registration, runtime handler invocation, typed-failure mapping, defect handling, and the flow decode/encode pipeline. --- README.md | 2 + packages/genkit/README.md | 71 + packages/genkit/eslint.config.mjs | 9 + packages/genkit/package.json | 52 + packages/genkit/src/index.ts | 2 + packages/genkit/src/lib/on-call.spec.ts | 77 + packages/genkit/src/lib/on-call.ts | 148 ++ packages/genkit/src/lib/tool.spec.ts | 99 ++ packages/genkit/src/lib/tool.ts | 94 ++ packages/genkit/tsconfig.json | 13 + packages/genkit/tsconfig.lib.json | 32 + packages/genkit/tsconfig.spec.json | 28 + packages/genkit/vitest.config.mts | 18 + pnpm-lock.yaml | 1827 +++++++++++++++++++++-- tsconfig.json | 3 + 15 files changed, 2348 insertions(+), 127 deletions(-) create mode 100644 packages/genkit/README.md create mode 100644 packages/genkit/eslint.config.mjs create mode 100644 packages/genkit/package.json create mode 100644 packages/genkit/src/index.ts create mode 100644 packages/genkit/src/lib/on-call.spec.ts create mode 100644 packages/genkit/src/lib/on-call.ts create mode 100644 packages/genkit/src/lib/tool.spec.ts create mode 100644 packages/genkit/src/lib/tool.ts create mode 100644 packages/genkit/tsconfig.json create mode 100644 packages/genkit/tsconfig.lib.json create mode 100644 packages/genkit/tsconfig.spec.json create mode 100644 packages/genkit/vitest.config.mts diff --git a/README.md b/README.md index 1e2b39d..0738881 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ Firebase integration for [Effect](https://effect.website). Provides schemas, mod | [effect-firebase](./packages/effect-firebase) | Core schemas, models, and query builder | | [@effect-firebase/admin](./packages/admin) | Firebase Admin SDK + Cloud Functions | | [@effect-firebase/client](./packages/client) | Firebase Client SDK | +| [@effect-firebase/genkit](./packages/genkit) | Genkit + `onCallGenkit` bridge | | [@effect-firebase/mock](./packages/mock) | In-memory mock for testing | ## Installation @@ -25,6 +26,7 @@ npm install effect-firebase effect # Pick one or more SDK packages: npm install @effect-firebase/admin firebase-admin firebase-functions npm install @effect-firebase/client firebase +npm install @effect-firebase/genkit genkit firebase-functions npm install --save-dev @effect-firebase/mock ``` diff --git a/packages/genkit/README.md b/packages/genkit/README.md new file mode 100644 index 0000000..2373911 --- /dev/null +++ b/packages/genkit/README.md @@ -0,0 +1,71 @@ +# @effect-firebase/genkit + +Bridge [Effect](https://effect.website) into [Genkit](https://genkit.dev) and Firebase Cloud Functions' `onCallGenkit`. + +> [!WARNING] +> Under heavy development. APIs may change. + +## Install + +```bash +npm install @effect-firebase/genkit effect effect-firebase genkit firebase-functions +``` + +## What this gives you + +- **`makeTool`** — convert an Effect `Tool` (with `Schema` parameters / success / failure) into a Genkit `ToolAction`. Effect schemas are converted to JSON Schema for the model. +- **`onCallGenkitEffect`** — schema-driven callable backed by a Genkit flow, mirroring `onCallEffect` from `@effect-firebase/admin`. Typed Effect handlers, optional input/output decoding via `Schema`, tools wired in via Genkit. + +## Quickstart + +```ts +import { genkit } from 'genkit'; +import { googleAI } from '@genkit-ai/googleai'; +import { Schema, Effect, Tool } from 'effect'; +import { FunctionsRuntime } from '@effect-firebase/admin'; +import { makeTool, onCallGenkitEffect } from '@effect-firebase/genkit'; + +const ai = genkit({ plugins: [googleAI()] }); +const runtime = FunctionsRuntime.Default(); + +const GetWeather = Tool.make('getWeather', { + description: 'Get current weather for a city', + parameters: Schema.Struct({ city: Schema.String }), + success: Schema.Struct({ tempC: Schema.Number }), + failure: Schema.Struct({ reason: Schema.Literal('city_not_found') }), +}); + +const getWeather = makeTool(ai, GetWeather, + ({ city }) => Effect.succeed({ tempC: 21 }), + { runtime } +); + +export const summarize = onCallGenkitEffect(ai, { + name: 'summarize', + region: 'europe-north1', + runtime, + tools: [getWeather], + inputSchema: Schema.Struct({ text: Schema.String }), + outputSchema: Schema.Struct({ summary: Schema.String }), +}, ({ text }) => Effect.gen(function* () { + const { text: summary } = yield* Effect.promise(() => + ai.generate({ prompt: `Summarize: ${text}`, tools: [getWeather] }) + ); + return { summary }; +})); +``` + +## Failure handling + +If your Effect `Tool` declares a `failureSchema`, typed failures from the +handler are encoded through that schema and thrown as a `GenkitError` with +`status: 'FAILED_PRECONDITION'` and the encoded payload on `detail`. Defects +(unexpected errors) surface as `GenkitError` with `status: 'INTERNAL'`. + +## Notes + +- Genkit's `FlowConfig` does not accept JSON Schema (only Zod). Input and + output validation for `onCallGenkitEffect` runs through Effect's `Schema` + inside the handler — the flow itself is registered without a Zod schema. +- `firebase-functions` is an optional peer dependency. Skip installing it if + you only need `makeTool` and not the callable wrapper. diff --git a/packages/genkit/eslint.config.mjs b/packages/genkit/eslint.config.mjs new file mode 100644 index 0000000..3e8bde5 --- /dev/null +++ b/packages/genkit/eslint.config.mjs @@ -0,0 +1,9 @@ +import baseConfig from '../../eslint.config.mjs'; + +export default [ + ...baseConfig, + { + files: ['**/*.ts', '**/*.js'], + rules: {}, + } +]; diff --git a/packages/genkit/package.json b/packages/genkit/package.json new file mode 100644 index 0000000..bf6f840 --- /dev/null +++ b/packages/genkit/package.json @@ -0,0 +1,52 @@ +{ + "name": "@effect-firebase/genkit", + "version": "0.11.0", + "private": false, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/fwal/effect-firebase", + "directory": "packages/genkit" + }, + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "@effect-firebase/source": "./src/index.ts", + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "default": "./dist/index.js" + } + }, + "files": [ + "dist", + "!**/*.tsbuildinfo" + ], + "dependencies": { + "tslib": "^2.3.0" + }, + "devDependencies": { + "effect": "^4.0.0-beta.43", + "effect-firebase": "workspace:*", + "firebase-functions": "^7.1.0", + "genkit": "^1.34.0" + }, + "peerDependencies": { + "effect": "^4.0.0-beta.43", + "effect-firebase": "workspace:*", + "firebase-functions": "^7.0.0", + "genkit": "^1.0.0" + }, + "peerDependenciesMeta": { + "firebase-functions": { + "optional": true + } + }, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/packages/genkit/src/index.ts b/packages/genkit/src/index.ts new file mode 100644 index 0000000..2dd6154 --- /dev/null +++ b/packages/genkit/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/tool.js'; +export * from './lib/on-call.js'; diff --git a/packages/genkit/src/lib/on-call.spec.ts b/packages/genkit/src/lib/on-call.spec.ts new file mode 100644 index 0000000..5214709 --- /dev/null +++ b/packages/genkit/src/lib/on-call.spec.ts @@ -0,0 +1,77 @@ +import { describe, expect, it } from 'vitest'; +import { Effect, Layer, ManagedRuntime, Schema } from 'effect'; +import { genkit } from 'genkit'; +import { onCallGenkitEffect } from './on-call.js'; + +const runtime = () => ManagedRuntime.make(Layer.empty); + +const findFlow = (ai: ReturnType, name: string) => { + const flow = ai.flows.find((f) => f.__action.name === name); + if (!flow) throw new Error(`Flow '${name}' was not registered`); + return flow; +}; + +describe('onCallGenkitEffect', () => { + it('registers a flow on the Genkit instance', () => { + const ai = genkit({}); + onCallGenkitEffect( + ai, + { + name: 'echo', + runtime: runtime(), + inputSchema: Schema.Struct({ text: Schema.String }), + outputSchema: Schema.Struct({ echoed: Schema.String }), + }, + ({ text }) => Effect.succeed({ echoed: text }) + ); + + expect(ai.flows.some((f) => f.__action.name === 'echo')).toBe(true); + }); + + it('decodes input, runs the handler, and encodes output', async () => { + const ai = genkit({}); + onCallGenkitEffect( + ai, + { + name: 'upper', + runtime: runtime(), + inputSchema: Schema.Struct({ text: Schema.String }), + outputSchema: Schema.Struct({ text: Schema.String }), + }, + ({ text }) => Effect.succeed({ text: text.toUpperCase() }) + ); + + const result = await findFlow(ai, 'upper')({ text: 'hello' }); + expect(result).toEqual({ text: 'HELLO' }); + }); + + it('rejects with a SchemaError when input does not decode', async () => { + const ai = genkit({}); + onCallGenkitEffect( + ai, + { + name: 'strict', + runtime: runtime(), + inputSchema: Schema.Struct({ n: Schema.Number }), + outputSchema: Schema.Struct({ n: Schema.Number }), + }, + ({ n }) => Effect.succeed({ n: n + 1 }) + ); + + await expect( + findFlow(ai, 'strict')({ n: 'not-a-number' }) + ).rejects.toThrow(); + }); + + it('accepts a handler with no schemas (raw input pass-through)', async () => { + const ai = genkit({}); + onCallGenkitEffect( + ai, + { name: 'raw', runtime: runtime() }, + (input) => Effect.succeed({ received: input }) + ); + + const result = await findFlow(ai, 'raw')({ anything: true }); + expect(result).toEqual({ received: { anything: true } }); + }); +}); diff --git a/packages/genkit/src/lib/on-call.ts b/packages/genkit/src/lib/on-call.ts new file mode 100644 index 0000000..9c91e4b --- /dev/null +++ b/packages/genkit/src/lib/on-call.ts @@ -0,0 +1,148 @@ +import { Effect, pipe, Schema } from 'effect'; +import { + onCallGenkit, + type CallableFunction, + type CallableOptions, +} from 'firebase-functions/https'; +import { run, type Runtime } from 'effect-firebase'; +import { logger } from 'firebase-functions'; +import { z, type Genkit, type ToolArgument } from 'genkit'; + +interface CallGenkitEffectOptions extends CallableOptions { + name: string; + runtime: Runtime; + description?: string; + tools?: ToolArgument[]; + metadata?: Record; +} + +interface CallGenkitEffectOptionsWithInput + extends CallGenkitEffectOptions { + inputSchema: I; +} + +interface CallGenkitEffectOptionsWithOutput + extends CallGenkitEffectOptions { + outputSchema: O; +} + +interface CallGenkitEffectOptionsWithBoth< + R, + I extends Schema.Top, + O extends Schema.Top +> extends CallGenkitEffectOptions { + inputSchema: I; + outputSchema: O; +} + +/** + * Create a Firebase Functions callable trigger backed by a Genkit flow that + * runs an Effect handler. + * + * Validation is performed by Effect's `Schema` (not Genkit's Zod), since + * Genkit's `FlowConfig` does not accept JSON Schema. Tools registered via + * `tools` are wired into Genkit's tool resolution so the handler can call + * `ai.generate({ tools })` against them. + * + * @example + * ```ts + * import { Schema, Effect } from 'effect'; + * import { FunctionsRuntime } from '@effect-firebase/admin'; + * import { onCallGenkitEffect } from '@effect-firebase/genkit'; + * + * export const summarize = onCallGenkitEffect(ai, { + * name: 'summarize', + * region: 'europe-north1', + * runtime: FunctionsRuntime.Default(), + * inputSchema: Schema.Struct({ text: Schema.String }), + * outputSchema: Schema.Struct({ summary: Schema.String }), + * }, ({ text }) => Effect.gen(function* () { + * const { text: summary } = yield* Effect.promise(() => + * ai.generate({ prompt: `Summarize: ${text}` }) + * ); + * return { summary }; + * })); + * ``` + */ +export function onCallGenkitEffect< + R, + I extends Schema.Top, + O extends Schema.Top, + E +>( + ai: Genkit, + options: CallGenkitEffectOptionsWithBoth, + handler: ( + input: Schema.Schema.Type + ) => Effect.Effect, E, R> +): CallableFunction, Promise>>; + +export function onCallGenkitEffect( + ai: Genkit, + options: CallGenkitEffectOptionsWithInput, + handler: (input: Schema.Schema.Type) => Effect.Effect +): CallableFunction, Promise>; + +export function onCallGenkitEffect( + ai: Genkit, + options: CallGenkitEffectOptionsWithOutput, + handler: (input: unknown) => Effect.Effect, E, R> +): CallableFunction>>; + +export function onCallGenkitEffect( + ai: Genkit, + options: CallGenkitEffectOptions, + handler: (input: unknown) => Effect.Effect +): CallableFunction>; + +export function onCallGenkitEffect( + ai: Genkit, + options: CallGenkitEffectOptions & { + inputSchema?: Schema.Top; + outputSchema?: Schema.Top; + }, + handler: (input: unknown) => Effect.Effect +): CallableFunction> { + const { inputSchema, outputSchema, name, description, tools, metadata } = + options; + + const flow = ai.defineFlow( + { + name, + inputSchema: z.any(), + outputSchema: z.any(), + ...(description !== undefined && { description }), + ...(tools !== undefined && { tools }), + ...(metadata !== undefined && { metadata }), + }, + async (input) => { + const effect = pipe( + inputSchema + ? Schema.decodeUnknownEffect(inputSchema)(input) + : Effect.succeed(input), + Effect.andThen((decoded) => handler(decoded)), + Effect.andThen((output) => + outputSchema + ? Schema.encodeUnknownEffect(outputSchema)(output) + : Effect.succeed(output) + ) + ).pipe(Effect.withSpan('onCallGenkitEffect')); + + return await run( + options.runtime, + effect as Effect.Effect + ).catch((error) => { + logger.error('Defect in onCallGenkitEffect', { + inner: error, + stack: error instanceof Error ? error.stack : undefined, + }); + throw error; + }); + } + ); + + return onCallGenkit(options, flow) as CallableFunction< + unknown, + Promise + >; +} diff --git a/packages/genkit/src/lib/tool.spec.ts b/packages/genkit/src/lib/tool.spec.ts new file mode 100644 index 0000000..c52ff20 --- /dev/null +++ b/packages/genkit/src/lib/tool.spec.ts @@ -0,0 +1,99 @@ +import { describe, expect, it } from 'vitest'; +import { Effect, ManagedRuntime, Layer, Schema } from 'effect'; +import { Tool } from 'effect/unstable/ai'; +import { GenkitError, genkit } from 'genkit'; +import { makeTool } from './tool.js'; + +const runtime = () => ManagedRuntime.make(Layer.empty); + +describe('makeTool', () => { + it('registers a Genkit tool with JSON schemas derived from the Effect schemas', () => { + const ai = genkit({}); + const GetWeather = Tool.make('getWeather', { + description: 'Get current weather for a city', + parameters: Schema.Struct({ city: Schema.String }), + success: Schema.Struct({ tempC: Schema.Number }), + }); + + const tool = makeTool( + ai, + GetWeather, + () => Effect.succeed({ tempC: 21 }), + { runtime: runtime() } + ); + + expect(tool.__action.name).toBe('getWeather'); + expect(tool.__action.description).toBe('Get current weather for a city'); + expect(tool.__action.inputJsonSchema).toMatchObject({ + type: 'object', + properties: { city: { type: 'string' } }, + required: ['city'], + }); + expect(tool.__action.outputJsonSchema).toMatchObject({ + type: 'object', + required: ['tempC'], + }); + }); + + it('runs the Effect handler through the supplied runtime and returns its value', async () => { + const ai = genkit({}); + const Echo = Tool.make('echo', { + parameters: Schema.Struct({ message: Schema.String }), + success: Schema.Struct({ message: Schema.String }), + }); + + const tool = makeTool( + ai, + Echo, + ({ message }) => Effect.succeed({ message: message.toUpperCase() }), + { runtime: runtime() } + ); + + const result = await tool({ message: 'hello' }); + expect(result).toEqual({ message: 'HELLO' }); + }); + + it('encodes typed failures through failureSchema and throws as GenkitError', async () => { + const ai = genkit({}); + const Lookup = Tool.make('lookup', { + parameters: Schema.Struct({ id: Schema.String }), + success: Schema.Struct({ value: Schema.String }), + failure: Schema.Struct({ + reason: Schema.Literal('not_found'), + id: Schema.String, + }), + }); + + const tool = makeTool( + ai, + Lookup, + ({ id }) => Effect.fail({ reason: 'not_found' as const, id }), + { runtime: runtime() } + ); + + await expect(tool({ id: 'missing' })).rejects.toMatchObject({ + name: 'GenkitError', + status: 'FAILED_PRECONDITION', + detail: { reason: 'not_found', id: 'missing' }, + }); + }); + + it('reports defects as INTERNAL GenkitError', async () => { + const ai = genkit({}); + const Broken = Tool.make('broken', { + parameters: Schema.Struct({ x: Schema.Number }), + success: Schema.Struct({ y: Schema.Number }), + }); + + const tool = makeTool( + ai, + Broken, + () => Effect.die(new Error('boom')), + { runtime: runtime() } + ); + + const rejection = await tool({ x: 1 }).catch((e: unknown) => e); + expect(rejection).toBeInstanceOf(GenkitError); + expect((rejection as GenkitError).status).toBe('INTERNAL'); + }); +}); diff --git a/packages/genkit/src/lib/tool.ts b/packages/genkit/src/lib/tool.ts new file mode 100644 index 0000000..af42dd7 --- /dev/null +++ b/packages/genkit/src/lib/tool.ts @@ -0,0 +1,94 @@ +import { Cause, Effect, Exit, Option, Schema } from 'effect'; +import { Tool } from 'effect/unstable/ai'; +import { isRuntime, type Runtime } from 'effect-firebase'; +import { GenkitError, type Genkit, type ToolAction } from 'genkit'; + +interface MakeToolOptions { + runtime: Runtime; +} + +/** + * Bridge an Effect `Tool` into a Genkit tool action. + * + * Converts the tool's Effect schemas to JSON Schema (`inputJsonSchema` / + * `outputJsonSchema`), runs the Effect handler through the supplied managed + * runtime, and surfaces typed failures (`failureSchema`) as a {@link GenkitError} + * whose `detail` carries the encoded failure value. + * + * @example + * ```ts + * import { Schema, Effect, Tool } from 'effect'; + * import { FunctionsRuntime } from '@effect-firebase/admin'; + * import { makeTool } from '@effect-firebase/genkit'; + * + * const GetWeather = Tool.make('getWeather', { + * description: 'Get current weather for a city', + * parameters: Schema.Struct({ city: Schema.String }), + * success: Schema.Struct({ tempC: Schema.Number }), + * }); + * + * const tool = makeTool(ai, GetWeather, + * ({ city }) => Effect.succeed({ tempC: 21 }), + * { runtime: FunctionsRuntime.Default() } + * ); + * ``` + */ +export function makeTool( + ai: Genkit, + tool: T, + handler: ( + params: Tool.Parameters + ) => Effect.Effect, E, R>, + options: MakeToolOptions +): ToolAction { + return ai.defineTool( + { + name: tool.name, + description: tool.description ?? '', + inputJsonSchema: Tool.getJsonSchema(tool), + outputJsonSchema: Tool.getJsonSchemaFromSchema(tool.successSchema), + }, + async (input) => { + const runner = isRuntime(options.runtime) + ? options.runtime + : options.runtime(); + const exit = await runner.runPromiseExit(handler(input as Tool.Parameters)); + if (Exit.isSuccess(exit)) { + return exit.value as never; + } + throw await toGenkitError(runner, tool, exit.cause); + } + ); +} + +const toGenkitError = async ( + runner: { readonly runPromiseExit: (effect: Effect.Effect) => Promise> }, + tool: T, + cause: Cause.Cause +): Promise => { + const failure = Cause.findErrorOption(cause); + if (Option.isNone(failure)) { + return new GenkitError({ + status: 'INTERNAL', + message: `Tool '${tool.name}' failed with a defect`, + detail: Cause.squash(cause), + }); + } + const encoded = await runner.runPromiseExit( + Schema.encodeUnknownEffect(tool.failureSchema)( + failure.value + ) as Effect.Effect + ); + if (Exit.isSuccess(encoded)) { + return new GenkitError({ + status: 'FAILED_PRECONDITION', + message: `Tool '${tool.name}' failed`, + detail: encoded.value, + }); + } + return new GenkitError({ + status: 'FAILED_PRECONDITION', + message: `Tool '${tool.name}' failed`, + detail: failure.value, + }); +}; diff --git a/packages/genkit/tsconfig.json b/packages/genkit/tsconfig.json new file mode 100644 index 0000000..62ebbd9 --- /dev/null +++ b/packages/genkit/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/genkit/tsconfig.lib.json b/packages/genkit/tsconfig.lib.json new file mode 100644 index 0000000..64a0b36 --- /dev/null +++ b/packages/genkit/tsconfig.lib.json @@ -0,0 +1,32 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src", + "outDir": "dist", + "tsBuildInfoFile": "dist/tsconfig.lib.tsbuildinfo", + "emitDeclarationOnly": false, + "forceConsistentCasingInFileNames": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": [ + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx" + ], + "references": [ + { + "path": "../effect-firebase/tsconfig.lib.json" + } + ] +} diff --git a/packages/genkit/tsconfig.spec.json b/packages/genkit/tsconfig.spec.json new file mode 100644 index 0000000..fbd68ed --- /dev/null +++ b/packages/genkit/tsconfig.spec.json @@ -0,0 +1,28 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./out-tsc/vitest", + "types": [ + "vitest/globals", + "vitest/importMeta", + "vite/client", + "node", + "vitest" + ] + }, + "include": [ + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ] +} diff --git a/packages/genkit/vitest.config.mts b/packages/genkit/vitest.config.mts new file mode 100644 index 0000000..96cbf70 --- /dev/null +++ b/packages/genkit/vitest.config.mts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig(() => ({ + root: __dirname, + cacheDir: '../../node_modules/.vite/packages/genkit', + test: { + name: '@effect-firebase/genkit', + watch: false, + globals: true, + environment: 'node', + include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + coverage: { + reportsDirectory: './test-output/vitest/coverage', + provider: 'v8' as const, + }, + }, +})); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62a2861..2064203 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -336,6 +336,25 @@ importers: specifier: ^4.0.0-beta.43 version: 4.0.0-beta.46 + packages/genkit: + dependencies: + tslib: + specifier: ^2.3.0 + version: 2.8.1 + devDependencies: + effect: + specifier: ^4.0.0-beta.43 + version: 4.0.0-beta.46 + effect-firebase: + specifier: workspace:* + version: link:../effect-firebase + firebase-functions: + specifier: ^7.1.0 + version: 7.1.0(firebase-admin@13.7.0(encoding@0.1.13)) + genkit: + specifier: ^1.34.0 + version: 1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0) + packages/mock: dependencies: tslib: @@ -1755,10 +1774,36 @@ packages: '@firebase/webchannel-wrapper@1.0.5': resolution: {integrity: sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==} + '@genkit-ai/ai@1.34.0': + resolution: {integrity: sha512-mXffVQ/N9Af0LLFhuM3pEciyTg6Q2zhsZ0ibekutFqDW6SOLcag9fvvaJohGUoS/d81SuneeGkkiIz+2LLa+cw==} + + '@genkit-ai/core@1.34.0': + resolution: {integrity: sha512-VgOPpUGohLsJqn+c7YJJNdPt8P5Z11FUhI874wq3kPIXCmJNd3hSInLJzwAfvAB64XJnZiGsMOZsdIzmd9xeHw==} + + '@genkit-ai/firebase@1.34.0': + resolution: {integrity: sha512-8aeneieHMzLDQ2Ns/8MGTNmgPqkrkbIP0ZL/M3gk88xQkYc6QLmGl4SAOsnbhoPebthPKzIHYOlMUMQjZ+qD5w==} + peerDependencies: + '@google-cloud/firestore': ^7.11.0 + firebase: '>=11.5.0' + firebase-admin: '>=12.2' + genkit: ^1.34.0 + peerDependenciesMeta: + firebase: + optional: true + + '@genkit-ai/google-cloud@1.34.0': + resolution: {integrity: sha512-TNoszCOoUAUY81E2AewlgaFDjwtwsSvmBusDikTXK8ogGZWzD+xtBV8iU+RmT17pik2EpFFILH4LH1mhg66/jw==} + peerDependencies: + genkit: ^1.34.0 + '@google-cloud/cloud-sql-connector@1.8.2': resolution: {integrity: sha512-B9LEMYIO3nJxZ2RsHM9ArYP5cElZf+EZHYZHeqx2tSCucA05s+w33nw9jibIvbs8agB/YubGbVfAiYKBAUh3DQ==} engines: {node: '>=18'} + '@google-cloud/common@5.0.2': + resolution: {integrity: sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==} + engines: {node: '>=14.0.0'} + '@google-cloud/firestore@7.11.3': resolution: {integrity: sha512-qsM3/WHpawF07SRVvEJJVRwhYzM7o9qtuksyuqnrMig6fxIrwWnsezECWsG/D5TyYru51Fv5c/RTqNDQ2yU+4w==} engines: {node: '>=14.0.0'} @@ -1773,6 +1818,44 @@ packages: engines: {node: '>=10.0.0'} hasBin: true + '@google-cloud/logging-winston@6.0.1': + resolution: {integrity: sha512-tgA/qe/aGZITMrJ/5Tuykv234pLb/Qo6iDZ8SDkjbsiIy69mLQmbphrUd/IqnE17BSDfrwDUckvWdghiy8b+Qg==} + engines: {node: '>=14.0.0'} + peerDependencies: + winston: '>=3.2.1' + + '@google-cloud/logging@11.2.1': + resolution: {integrity: sha512-2h9HBJG3OAsvzXmb81qXmaTPfXYU7KJTQUxunoOKFGnY293YQ/eCkW1Y5mHLocwpEqeqQYT/Qvl6Tk+Q7PfStw==} + engines: {node: '>=14.0.0'} + + '@google-cloud/modelarmor@0.4.1': + resolution: {integrity: sha512-CT9TpQF443aatjhRRvazrYNOvUot26HnFP3hhgmV89QYygNPB6owWvGFFOTsKK4zSvTDfkeeb+E6diVXxn9t4g==} + engines: {node: '>=14.0.0'} + + '@google-cloud/opentelemetry-cloud-monitoring-exporter@0.19.0': + resolution: {integrity: sha512-5SOPXwC6RET4ZvXxw5D97dp8fWpqWEunHrzrUUGXhG4UAeedQe1KvYV8CK+fnaAbN2l2ha6QDYspT6z40TVY0g==} + 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 + + '@google-cloud/opentelemetry-cloud-trace-exporter@2.4.1': + resolution: {integrity: sha512-Dq2IyAyA9PCjbjLOn86i2byjkYPC59b5ic8k/L4q5bBWH0Jro8lzMs8C0G5pJfqh2druj8HF+oAIAlSdWQ+Z9Q==} + 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 + + '@google-cloud/opentelemetry-resource-util@2.4.0': + resolution: {integrity: sha512-/7ujlMoKtDtrbQlJihCjQnm31n2s2RTlvJqcSbt2jV3OkCzPAdo3u31Q13HNugqtIRUSk7bUoLx6AzhURkhW4w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/resources': ^1.0.0 + '@google-cloud/paginator@5.0.2': resolution: {integrity: sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==} engines: {node: '>=14.0.0'} @@ -1781,6 +1864,10 @@ packages: resolution: {integrity: sha512-g5nmMnzC+94kBxOKkLGpK1ikvolTFCC3s2qtE4F+1EuArcJ7HHC23RDQVt3Ra3CqpUYZ+oXNKZ8n5Cn5yug8DA==} engines: {node: '>=18'} + '@google-cloud/precise-date@4.0.0': + resolution: {integrity: sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==} + engines: {node: '>=14.0.0'} + '@google-cloud/precise-date@5.0.0': resolution: {integrity: sha512-9h0Gvw92EvPdE8AK8AgZPbMnH5ftDyPtKm7/KUfcJVaPEPjwGDsJd1QV0H8esBDV4II41R/2lDWH1epBqIoKUw==} engines: {node: '>=18'} @@ -2576,16 +2663,418 @@ packages: '@nx/workspace@22.5.4': resolution: {integrity: sha512-TZeuCDy+VN/5zqMYxHw15HKe2Ppcb9WBOebz4bmXE206c8Aop3S9QeLfys00Uobt9ZaYh9QUeN0iFsZm7TNv0w==} + '@opentelemetry/api-logs@0.52.1': + resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==} + engines: {node: '>=14'} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@opentelemetry/auto-instrumentations-node@0.49.2': + resolution: {integrity: sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.4.1 + + '@opentelemetry/context-async-hooks@1.25.1': + resolution: {integrity: sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.25.1': + resolution: {integrity: sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@1.30.1': resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/exporter-trace-otlp-grpc@0.52.1': + resolution: {integrity: sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/exporter-trace-otlp-http@0.52.1': + resolution: {integrity: sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.52.1': + resolution: {integrity: sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/exporter-zipkin@1.25.1': + resolution: {integrity: sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation-amqplib@0.41.0': + resolution: {integrity: sha512-00Oi6N20BxJVcqETjgNzCmVKN+I5bJH/61IlHiIWd00snj1FdgiIKlpE4hYVacTB2sjIBB3nTbHskttdZEE2eg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-lambda@0.43.0': + resolution: {integrity: sha512-pSxcWlsE/pCWQRIw92sV2C+LmKXelYkjkA7C5s39iPUi4pZ2lA1nIiw+1R/y2pDEhUHcaKkNyljQr3cx9ZpVlQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-sdk@0.43.1': + resolution: {integrity: sha512-qLT2cCniJ5W+6PFzKbksnoIQuq9pS83nmgaExfUwXVvlwi0ILc50dea0tWBHZMkdIDa/zZdcuFrJ7+fUcSnRow==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-bunyan@0.40.0': + resolution: {integrity: sha512-aZ4cXaGWwj79ZXSYrgFVsrDlE4mmf2wfvP9bViwRc0j75A6eN6GaHYHqufFGMTCqASQn5pIjjP+Bx+PWTGiofw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cassandra-driver@0.40.0': + resolution: {integrity: sha512-JxbM39JU7HxE9MTKKwi6y5Z3mokjZB2BjwfqYi4B3Y29YO3I42Z7eopG6qq06yWZc+nQli386UDQe0d9xKmw0A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-connect@0.38.0': + resolution: {integrity: sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cucumber@0.8.0': + resolution: {integrity: sha512-ieTm4RBIlZt2brPwtX5aEZYtYnkyqhAVXJI9RIohiBVMe5DxiwCwt+2Exep/nDVqGPX8zRBZUl4AEw423OxJig==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation-dataloader@0.11.0': + resolution: {integrity: sha512-27urJmwkH4KDaMJtEv1uy2S7Apk4XbN4AgWMdfMJbi7DnOduJmeuA+DpJCwXB72tEWXo89z5T3hUVJIDiSNmNw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dns@0.38.0': + resolution: {integrity: sha512-Um07I0TQXDWa+ZbEAKDFUxFH40dLtejtExDOMLNJ1CL8VmOmA71qx93Qi/QG4tGkiI1XWqr7gF/oiMCJ4m8buQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-express@0.41.1': + resolution: {integrity: sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fastify@0.38.0': + resolution: {integrity: sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fs@0.14.0': + resolution: {integrity: sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-generic-pool@0.38.1': + resolution: {integrity: sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-graphql@0.42.0': + resolution: {integrity: sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-grpc@0.52.1': + resolution: {integrity: sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-hapi@0.40.0': + resolution: {integrity: sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.52.1': + resolution: {integrity: sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-ioredis@0.42.0': + resolution: {integrity: sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.2.0': + resolution: {integrity: sha512-uKKmhEFd0zR280tJovuiBG7cfnNZT4kvVTvqtHPxQP7nOmRbJstCYHFH13YzjVcKjkmoArmxiSulmZmF7SLIlg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-knex@0.39.0': + resolution: {integrity: sha512-lRwTqIKQecPWDkH1KEcAUcFhCaNssbKSpxf4sxRTAROCwrCEnYkjOuqJHV+q1/CApjMTaKu0Er4LBv/6bDpoxA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-koa@0.42.0': + resolution: {integrity: sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-lru-memoizer@0.39.0': + resolution: {integrity: sha512-eU1Wx1RRTR/2wYXFzH9gcpB8EPmhYlNDIUHzUXjyUE0CAXEJhBLkYNlzdaVCoQDw2neDqS+Woshiia6+emWK9A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-memcached@0.38.0': + resolution: {integrity: sha512-tPmyqQEZNyrvg6G+iItdlguQEcGzfE+bJkpQifmBXmWBnoS5oU3UxqtyYuXGL2zI9qQM5yMBHH4nRXWALzy7WA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongodb@0.46.0': + resolution: {integrity: sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongoose@0.41.0': + resolution: {integrity: sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql2@0.40.0': + resolution: {integrity: sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql@0.40.0': + resolution: {integrity: sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-nestjs-core@0.39.0': + resolution: {integrity: sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-net@0.38.0': + resolution: {integrity: sha512-stjow1PijcmUquSmRD/fSihm/H61DbjPlJuJhWUe7P22LFPjFhsrSeiB5vGj3vn+QGceNAs+kioUTzMGPbNxtg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pg@0.43.0': + resolution: {integrity: sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pino@0.41.0': + resolution: {integrity: sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis-4@0.41.1': + resolution: {integrity: sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis@0.41.0': + resolution: {integrity: sha512-RJ1pwI3btykp67ts+5qZbaFSAAzacucwBet5/5EsKYtWBpHbWwV/qbGN/kIBzXg5WEZBhXLrR/RUq0EpEUpL3A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-restify@0.40.0': + resolution: {integrity: sha512-sm/rH/GysY/KOEvZqYBZSLYFeXlBkHCgqPDgWc07tz+bHCN6mPs9P3otGOSTe7o3KAIM8Nc6ncCO59vL+jb2cA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-router@0.39.0': + resolution: {integrity: sha512-LaXnVmD69WPC4hNeLzKexCCS19hRLrUw3xicneAMkzJSzNJvPyk7G6I7lz7VjQh1cooObPBt9gNyd3hhTCUrag==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-socket.io@0.41.0': + resolution: {integrity: sha512-7fzDe9/FpO6NFizC/wnzXXX7bF9oRchsD//wFqy5g5hVEgXZCQ70IhxjrKdBvgjyIejR9T9zTvfQ6PfVKfkCAw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-tedious@0.13.0': + resolution: {integrity: sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-undici@0.5.0': + resolution: {integrity: sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation-winston@0.39.0': + resolution: {integrity: sha512-v/1xziLJ9CyB3YDjBSBzbB70Qd0JwWTo36EqWK5m3AR0CzsyMQQmf3ZIZM6sgx7hXMcRQ0pnEYhg6nhrUQPm9A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.52.1': + resolution: {integrity: sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.52.1': + resolution: {integrity: sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.52.1': + resolution: {integrity: sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-transformer@0.52.1': + resolution: {integrity: sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/propagation-utils@0.30.16': + resolution: {integrity: sha512-ZVQ3Z/PQ+2GQlrBfbMMMT0U7MzvYZLCPP800+ooyaBqm4hMvuQHfP028gB9/db0mwkmyEAMad9houukUVxhwcw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/propagator-aws-xray@1.26.2': + resolution: {integrity: sha512-k43wxTjKYvwfce9L4eT8fFYy/ATmCfPHZPZsyT/6ABimf2KE1HafoOsIcxLOtmNSZt6dCvBIYCrXaOWta20xJg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-b3@1.25.1': + resolution: {integrity: sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@1.25.1': + resolution: {integrity: sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/redis-common@0.36.2': + resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} + engines: {node: '>=14'} + + '@opentelemetry/resource-detector-alibaba-cloud@0.29.7': + resolution: {integrity: sha512-PExUl/R+reSQI6Y/eNtgAsk6RHk1ElYSzOa8/FHfdc/nLmx9sqMasBEpLMkETkzDP7t27ORuXe4F9vwkV2uwwg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-aws@1.12.0': + resolution: {integrity: sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-azure@0.2.12': + resolution: {integrity: sha512-iIarQu6MiCjEEp8dOzmBvCSlRITPFTinFB2oNKAjU6xhx8d7eUcjNOKhBGQTvuCriZrxrEvDaEEY9NfrPQ6uYQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-container@0.4.4': + resolution: {integrity: sha512-ZEN2mq7lIjQWJ8NTt1umtr6oT/Kb89856BOmESLSvgSHbIwOFYs7cSfSRH5bfiVw6dXTQAVbZA/wLgCHKrebJA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-gcp@0.29.13': + resolution: {integrity: sha512-vdotx+l3Q+89PeyXMgKEGnZ/CwzwMtuMi/ddgD9/5tKZ08DfDGB2Npz9m2oXPHRCjc4Ro6ifMqFlRyzIvgOjhg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resources@1.25.1': + resolution: {integrity: sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.52.1': + resolution: {integrity: sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.25.1': + resolution: {integrity: sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-node@0.52.1': + resolution: {integrity: sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.25.1': + resolution: {integrity: sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@1.25.1': + resolution: {integrity: sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.25.1': + resolution: {integrity: sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==} + engines: {node: '>=14'} + '@opentelemetry/semantic-conventions@1.28.0': resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} @@ -2594,6 +3083,12 @@ packages: resolution: {integrity: sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==} engines: {node: '>=14'} + '@opentelemetry/sql-common@0.40.1': + resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@oxc-resolver/binding-android-arm-eabi@11.19.1': resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} cpu: [arm] @@ -3036,9 +3531,6 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -3382,6 +3874,9 @@ packages: '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/aws-lambda@8.10.122': + resolution: {integrity: sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -3397,12 +3892,18 @@ packages: '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + '@types/bunyan@1.8.9': + resolution: {integrity: sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==} + '@types/caseless@0.12.5': resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/connect@3.4.36': + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -3460,12 +3961,18 @@ packages: '@types/long@4.0.2': resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + '@types/memcached@2.2.10': + resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==} + '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/mysql@2.15.22': + resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==} + '@types/node@20.19.9': resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} @@ -3478,6 +3985,12 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/pg-pool@2.0.4': + resolution: {integrity: sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==} + + '@types/pg@8.6.1': + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -3508,6 +4021,12 @@ packages: '@types/serve-static@2.2.0': resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + + '@types/tedious@4.0.14': + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} + '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} @@ -3852,6 +4371,11 @@ packages: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn-import-phases@1.0.4: resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} engines: {node: '>=10.13.0'} @@ -4087,6 +4611,9 @@ packages: async-lock@1.4.1: resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} + async-mutex@0.5.0: + resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} @@ -4375,6 +4902,9 @@ packages: ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + cjson@0.3.3: resolution: {integrity: sha512-yKNcXi/Mvi5kb1uK0sahubYiyfUO2EUgOp4NcY9+8NX5Xmc+4yeNogZuLFkpLBBj7/QI9MjRUIuXrV9XOw5kVg==} engines: {node: '>= 0.3.0'} @@ -4909,6 +5439,10 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} + dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + dotenv-expand@11.0.7: resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} engines: {node: '>=12'} @@ -4917,6 +5451,9 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} + dotprompt@1.1.2: + resolution: {integrity: sha512-24EU+eORQbPywBicIP44BiqykzEXFwZq1ZQKO5TEr9KrrENyDA7I1NzqhtmmEdQVfAXka0DEbSLPN5nerCqJ8A==} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -5218,6 +5755,10 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventid@2.0.1: + resolution: {integrity: sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==} + engines: {node: '>=10'} + events-listener@1.1.0: resolution: {integrity: sha512-Kd3EgYfODHueq6GzVfs/VUolh2EgJsS8hkO3KpnDrxVjU3eq63eXM2ujXkhPP+OkeUOhL8CxdfZbQXzryb5C4g==} @@ -5623,6 +6164,9 @@ packages: generic-names@4.0.0: resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + genkit@1.34.0: + resolution: {integrity: sha512-SNppX9kw9CKivT3LJyEfHcbyX1ZqrMLYKjthHn3Dwu5TN2/Cvmz5UM3OKJWnXQfNj/hFBGV1EMd105zgjTzZHg==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -5635,6 +6179,10 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -5758,10 +6306,18 @@ packages: resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} engines: {node: '>=14'} + googleapis-common@7.2.0: + resolution: {integrity: sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==} + engines: {node: '>=14.0.0'} + googleapis-common@8.0.2-rc.0: resolution: {integrity: sha512-JTcxRvmFa9Ec1uyfMEimEMeeKq1sHNZX3vn2qmoUMtnvixXXvcqTcbDZvEZXkEWpGlPlOf4joyep6/qs0BrLyg==} engines: {node: '>=18.0.0'} + googleapis@137.1.0: + resolution: {integrity: sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==} + engines: {node: '>=14.0.0'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5965,6 +6521,9 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-in-the-middle@1.15.0: + resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + import-lazy@2.1.0: resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} engines: {node: '>=4'} @@ -6872,6 +7431,9 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + moo@0.5.2: resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} @@ -7256,6 +7818,9 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + partial-json@0.1.7: + resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -7589,9 +8154,15 @@ packages: pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + pumpify@1.5.1: resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + pumpify@2.0.1: + resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -7768,6 +8339,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-in-the-middle@7.5.2: + resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} + engines: {node: '>=8.6.0'} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -8003,6 +8578,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -8670,6 +9248,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-templates@0.2.0: + resolution: {integrity: sha512-EWkjYEN0L6KOfEoOH6Wj4ghQqU7eBZMJqRHQnxQAq+dSEzRPClkWjf8557HkWQXF6BrAUoLSAyy9i3RVTliaNg==} + url-join@0.0.1: resolution: {integrity: sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==} @@ -8697,6 +9278,11 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + hasBin: true + uuid@11.1.0: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true @@ -11026,6 +11612,103 @@ snapshots: '@firebase/webchannel-wrapper@1.0.5': {} + '@genkit-ai/ai@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0))': + dependencies: + '@genkit-ai/core': 1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)) + '@opentelemetry/api': 1.9.0 + '@types/node': 20.19.9 + colorette: 2.0.20 + dotprompt: 1.1.2 + handlebars: 4.7.8 + json5: 2.2.3 + node-fetch: 3.3.2 + partial-json: 0.1.7 + uri-templates: 0.2.0 + uuid: 10.0.0 + transitivePeerDependencies: + - '@google-cloud/firestore' + - bufferutil + - encoding + - firebase + - firebase-admin + - genkit + - supports-color + - utf-8-validate + + '@genkit-ai/core@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0))': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.52.1(@opentelemetry/api@1.9.0) + '@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) + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + async-mutex: 0.5.0 + cors: 2.8.5 + dotprompt: 1.1.2 + express: 4.21.2 + get-port: 5.1.1 + json-schema: 0.4.0 + ws: 8.18.0 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + optionalDependencies: + '@cfworker/json-schema': 4.1.1 + '@genkit-ai/firebase': 1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)) + transitivePeerDependencies: + - '@google-cloud/firestore' + - bufferutil + - encoding + - firebase + - firebase-admin + - genkit + - supports-color + - utf-8-validate + + '@genkit-ai/firebase@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0))': + dependencies: + '@genkit-ai/google-cloud': 1.34.0(encoding@0.1.13)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)) + '@google-cloud/firestore': 7.11.3(encoding@0.1.13) + firebase-admin: 13.7.0(encoding@0.1.13) + genkit: 1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0) + optionalDependencies: + firebase: 12.10.0 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@genkit-ai/google-cloud@1.34.0(encoding@0.1.13)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0))': + dependencies: + '@google-cloud/logging-winston': 6.0.1(encoding@0.1.13)(winston@3.17.0) + '@google-cloud/modelarmor': 0.4.1 + '@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) + '@google-cloud/opentelemetry-cloud-trace-exporter': 2.4.1(@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-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@google-cloud/opentelemetry-resource-util': 2.4.0(@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/auto-instrumentations-node': 0.49.2(@opentelemetry/api@1.9.0)(encoding@0.1.13) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pino': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-winston': 0.39.0(@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) + '@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.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0) + google-auth-library: 9.15.1(encoding@0.1.13) + node-fetch: 3.3.2 + winston: 3.17.0 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + '@google-cloud/cloud-sql-connector@1.8.2': dependencies: '@googleapis/sqladmin': 31.1.0 @@ -11035,6 +11718,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@google-cloud/common@5.0.2(encoding@0.1.13)': + dependencies: + '@google-cloud/projectify': 4.0.0 + '@google-cloud/promisify': 4.0.0 + arrify: 2.0.1 + duplexify: 4.1.3 + extend: 3.0.2 + google-auth-library: 9.15.1(encoding@0.1.13) + html-entities: 2.6.0 + retry-request: 7.0.2(encoding@0.1.13) + teeny-request: 9.0.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + optional: true + '@google-cloud/firestore@7.11.3(encoding@0.1.13)': dependencies: '@opentelemetry/api': 1.9.0 @@ -11072,6 +11771,88 @@ snapshots: transitivePeerDependencies: - supports-color + '@google-cloud/logging-winston@6.0.1(encoding@0.1.13)(winston@3.17.0)': + dependencies: + '@google-cloud/logging': 11.2.1(encoding@0.1.13) + google-auth-library: 9.15.1(encoding@0.1.13) + lodash.mapvalues: 4.6.0 + winston: 3.17.0 + winston-transport: 4.9.0 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@google-cloud/logging@11.2.1(encoding@0.1.13)': + dependencies: + '@google-cloud/common': 5.0.2(encoding@0.1.13) + '@google-cloud/paginator': 5.0.2 + '@google-cloud/projectify': 4.0.0 + '@google-cloud/promisify': 4.0.0 + '@opentelemetry/api': 1.9.0 + arrify: 2.0.1 + dot-prop: 6.0.1 + eventid: 2.0.1 + extend: 3.0.2 + gcp-metadata: 6.1.1(encoding@0.1.13) + google-auth-library: 9.15.1(encoding@0.1.13) + google-gax: 4.6.1(encoding@0.1.13) + on-finished: 2.4.1 + pumpify: 2.0.1 + stream-events: 1.0.5 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@google-cloud/modelarmor@0.4.1': + dependencies: + google-gax: 5.0.6 + transitivePeerDependencies: + - supports-color + optional: true + + '@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)': + dependencies: + '@google-cloud/opentelemetry-resource-util': 2.4.0(@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@google-cloud/precise-date': 4.0.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) + google-auth-library: 9.15.1(encoding@0.1.13) + googleapis: 137.1.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@google-cloud/opentelemetry-cloud-trace-exporter@2.4.1(@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-trace-base@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + dependencies: + '@google-cloud/opentelemetry-resource-util': 2.4.0(@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@grpc/grpc-js': 1.13.4 + '@grpc/proto-loader': 0.7.15 + '@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-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + google-auth-library: 9.15.1(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@google-cloud/opentelemetry-resource-util@2.4.0(@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + dependencies: + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + gcp-metadata: 6.1.1(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + optional: true + '@google-cloud/paginator@5.0.2': dependencies: arrify: 2.0.1 @@ -11082,6 +11863,9 @@ snapshots: dependencies: extend: 3.0.2 + '@google-cloud/precise-date@4.0.0': + optional: true + '@google-cloud/precise-date@5.0.0': {} '@google-cloud/projectify@4.0.0': @@ -12330,144 +13114,792 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.4.5(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3))(vitest@4.0.9)': + '@nx/vitest@22.4.5(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3))(vitest@4.0.9)': + dependencies: + '@nx/devkit': 22.4.5(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@nx/js': 22.4.5(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) + '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) + semver: 7.7.2 + tslib: 2.8.1 + optionalDependencies: + vite: 7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + vitest: 4.0.9(@types/node@22.17.0)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - debug + - nx + - supports-color + - typescript + - verdaccio + optional: true + + '@nx/vitest@22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.1.8(@types/node@20.19.9)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3))(vitest@4.0.9)': + dependencies: + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@nx/js': 22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) + '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) + semver: 7.7.2 + tslib: 2.8.1 + optionalDependencies: + vite: 7.1.8(@types/node@20.19.9)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + vitest: 4.0.9(@types/node@20.19.9)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - debug + - nx + - supports-color + - typescript + - verdaccio + + '@nx/vitest@22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3))(vitest@4.0.9)': + dependencies: + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@nx/js': 22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) + '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) + semver: 7.7.2 + tslib: 2.8.1 + optionalDependencies: + vite: 7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + vitest: 4.0.9(@types/node@22.17.0)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - debug + - nx + - supports-color + - typescript + - verdaccio + + '@nx/web@22.4.5(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))': + dependencies: + '@nx/devkit': 22.4.5(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@nx/js': 22.4.5(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) + detect-port: 1.6.1 + http-server: 14.1.1 + picocolors: 1.1.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - debug + - nx + - supports-color + - verdaccio + + '@nx/web@22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))': + dependencies: + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@nx/js': 22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) + detect-port: 1.6.1 + http-server: 14.1.1 + picocolors: 1.1.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - debug + - nx + - supports-color + - verdaccio + + '@nx/workspace@22.4.5(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))': + dependencies: + '@nx/devkit': 22.4.5(nx@22.4.5(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@zkochan/js-yaml': 0.0.7 + chalk: 4.1.2 + enquirer: 2.3.6 + nx: 22.4.5(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)) + picomatch: 4.0.2 + semver: 7.7.2 + tslib: 2.8.1 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - debug + + '@nx/workspace@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))': + dependencies: + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) + '@zkochan/js-yaml': 0.0.7 + chalk: 4.1.2 + enquirer: 2.3.6 + nx: 22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)) + picomatch: 4.0.2 + semver: 7.7.2 + tslib: 2.8.1 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - debug + + '@opentelemetry/api-logs@0.52.1': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/auto-instrumentations-node@0.49.2(@opentelemetry/api@1.9.0)(encoding@0.1.13)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-lambda': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-sdk': 0.43.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-bunyan': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.38.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cucumber': 0.8.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.11.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dns': 0.38.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.41.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.38.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.14.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.38.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-memcached': 0.38.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-net': 0.38.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pino': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.41.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-restify': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-router': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-socket.io': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-winston': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.29.7(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-aws': 1.12.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-azure': 0.2.12(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-container': 0.4.4(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp': 0.29.13(@opentelemetry/api@1.9.0)(encoding@0.1.13) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@opentelemetry/context-async-hooks@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.25.1 + + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-http@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-proto@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-zipkin@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@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-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + + '@opentelemetry/instrumentation-amqplib@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-aws-lambda@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-aws-xray': 1.26.2(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/aws-lambda': 8.10.122 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-aws-sdk@0.43.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagation-utils': 0.30.16(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-bunyan@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@types/bunyan': 1.8.9 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-cassandra-driver@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-connect@0.38.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/connect': 3.4.36 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-cucumber@0.8.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-dataloader@0.11.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-dns@0.38.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-express@0.41.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-fastify@0.38.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-fs@0.14.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-generic-pool@0.38.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-graphql@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-grpc@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-hapi@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-http@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-ioredis@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-kafkajs@0.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-knex@0.39.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-koa@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-lru-memoizer@0.39.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-memcached@0.38.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/memcached': 2.2.10 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-mongodb@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-mongoose@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-mysql2@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-mysql@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/mysql': 2.15.22 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-nestjs-core@0.39.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-net@0.38.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-pg@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.4 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-pino@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-redis-4@0.41.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-redis@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-restify@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-router@0.39.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-socket.io@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-tedious@0.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-undici@0.5.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation-winston@0.39.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + optional: true + + '@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.5.2 + semver: 7.7.2 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/otlp-exporter-base@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-grpc-exporter-base@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-transformer@0.52.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + protobufjs: 7.5.3 + + '@opentelemetry/propagation-utils@0.30.16(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + optional: true + + '@opentelemetry/propagator-aws-xray@1.26.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + optional: true + + '@opentelemetry/propagator-b3@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-jaeger@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/redis-common@0.36.2': + optional: true + + '@opentelemetry/resource-detector-alibaba-cloud@0.29.7(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + optional: true + + '@opentelemetry/resource-detector-aws@1.12.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + optional: true + + '@opentelemetry/resource-detector-azure@0.2.12(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + optional: true + + '@opentelemetry/resource-detector-container@0.4.4(@opentelemetry/api@1.9.0)': dependencies: - '@nx/devkit': 22.4.5(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@nx/js': 22.4.5(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) - '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) - semver: 7.7.2 - tslib: 2.8.1 - optionalDependencies: - vite: 7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) - vitest: 4.0.9(@types/node@22.17.0)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) - transitivePeerDependencies: - - '@babel/traverse' - - '@swc-node/register' - - '@swc/core' - - debug - - nx - - supports-color - - typescript - - verdaccio + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 optional: true - '@nx/vitest@22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.1.8(@types/node@20.19.9)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3))(vitest@4.0.9)': + '@opentelemetry/resource-detector-gcp@0.29.13(@opentelemetry/api@1.9.0)(encoding@0.1.13)': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@nx/js': 22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) - '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) - semver: 7.7.2 - tslib: 2.8.1 - optionalDependencies: - vite: 7.1.8(@types/node@20.19.9)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) - vitest: 4.0.9(@types/node@20.19.9)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + gcp-metadata: 6.1.1(encoding@0.1.13) transitivePeerDependencies: - - '@babel/traverse' - - '@swc-node/register' - - '@swc/core' - - debug - - nx + - encoding - supports-color - - typescript - - verdaccio + optional: true - '@nx/vitest@22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(typescript@5.9.3)(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))(vite@7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3))(vitest@4.0.9)': + '@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0)': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@nx/js': 22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) - '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) - semver: 7.7.2 - tslib: 2.8.1 - optionalDependencies: - vite: 7.1.8(@types/node@22.17.0)(jiti@2.4.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) - vitest: 4.0.9(@types/node@22.17.0)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) - transitivePeerDependencies: - - '@babel/traverse' - - '@swc-node/register' - - '@swc/core' - - debug - - nx - - supports-color - - typescript - - verdaccio + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 - '@nx/web@22.4.5(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))': + '@opentelemetry/sdk-logs@0.52.1(@opentelemetry/api@1.9.0)': dependencies: - '@nx/devkit': 22.4.5(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@nx/js': 22.4.5(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) - detect-port: 1.6.1 - http-server: 14.1.1 - picocolors: 1.1.1 - tslib: 2.8.1 - transitivePeerDependencies: - - '@babel/traverse' - - '@swc-node/register' - - '@swc/core' - - debug - - nx - - supports-color - - verdaccio + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) - '@nx/web@22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0))': + '@opentelemetry/sdk-metrics@1.25.1(@opentelemetry/api@1.9.0)': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@nx/js': 22.5.4(@babel/traverse@7.28.0)(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)))(verdaccio@6.1.2(encoding@0.1.13)(typanion@3.14.0)) - detect-port: 1.6.1 - http-server: 14.1.1 - picocolors: 1.1.1 - tslib: 2.8.1 - transitivePeerDependencies: - - '@babel/traverse' - - '@swc-node/register' - - '@swc/core' - - debug - - nx - - supports-color - - verdaccio + '@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) + lodash.merge: 4.6.2 - '@nx/workspace@22.4.5(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))': + '@opentelemetry/sdk-node@0.52.1(@opentelemetry/api@1.9.0)': dependencies: - '@nx/devkit': 22.4.5(nx@22.4.5(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@zkochan/js-yaml': 0.0.7 - chalk: 4.1.2 - enquirer: 2.3.6 - nx: 22.4.5(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)) - picomatch: 4.0.2 - semver: 7.7.2 - tslib: 2.8.1 - yargs-parser: 21.1.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 transitivePeerDependencies: - - '@swc-node/register' - - '@swc/core' - - debug + - supports-color - '@nx/workspace@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))': + '@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0)': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19))) - '@zkochan/js-yaml': 0.0.7 - chalk: 4.1.2 - enquirer: 2.3.6 - nx: 22.5.4(@swc-node/register@1.11.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.8(@swc/helpers@0.5.19)) - picomatch: 4.0.2 - semver: 7.7.2 - tslib: 2.8.1 - yargs-parser: 21.1.1 - transitivePeerDependencies: - - '@swc-node/register' - - '@swc/core' - - debug - - '@opentelemetry/api@1.9.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/semantic-conventions': 1.25.1 - '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-node@1.25.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + semver: 7.7.2 + + '@opentelemetry/semantic-conventions@1.25.1': {} '@opentelemetry/semantic-conventions@1.28.0': {} '@opentelemetry/semantic-conventions@1.34.0': {} + '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + optional: true + '@oxc-resolver/binding-android-arm-eabi@11.19.1': optional: true @@ -12808,8 +14240,6 @@ snapshots: '@sindresorhus/is@5.6.0': {} - '@standard-schema/spec@1.0.0': {} - '@standard-schema/spec@1.1.0': {} '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.0)': @@ -13277,6 +14707,9 @@ snapshots: '@types/aria-query@5.0.4': {} + '@types/aws-lambda@8.10.122': + optional: true + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.27.4 @@ -13303,6 +14736,11 @@ snapshots: '@types/connect': 3.4.38 '@types/node': 20.19.9 + '@types/bunyan@1.8.9': + dependencies: + '@types/node': 20.19.9 + optional: true + '@types/caseless@0.12.5': optional: true @@ -13311,6 +14749,11 @@ snapshots: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 + '@types/connect@3.4.36': + dependencies: + '@types/node': 20.19.9 + optional: true + '@types/connect@3.4.38': dependencies: '@types/node': 20.19.9 @@ -13386,10 +14829,20 @@ snapshots: '@types/long@4.0.2': optional: true + '@types/memcached@2.2.10': + dependencies: + '@types/node': 20.19.9 + optional: true + '@types/mime@1.3.5': {} '@types/ms@2.1.0': {} + '@types/mysql@2.15.22': + dependencies: + '@types/node': 20.19.9 + optional: true + '@types/node@20.19.9': dependencies: undici-types: 6.21.0 @@ -13402,6 +14855,18 @@ snapshots: '@types/parse-json@4.0.2': {} + '@types/pg-pool@2.0.4': + dependencies: + '@types/pg': 8.6.1 + optional: true + + '@types/pg@8.6.1': + dependencies: + '@types/node': 20.19.9 + pg-protocol: 1.10.3 + pg-types: 2.2.0 + optional: true + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} @@ -13442,6 +14907,13 @@ snapshots: '@types/http-errors': 2.0.5 '@types/node': 20.19.9 + '@types/shimmer@1.2.0': {} + + '@types/tedious@4.0.14': + dependencies: + '@types/node': 20.19.9 + optional: true + '@types/tough-cookie@4.0.5': optional: true @@ -13730,7 +15202,7 @@ snapshots: '@vitest/expect@4.0.9': dependencies: - '@standard-schema/spec': 1.0.0 + '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 '@vitest/spy': 4.0.9 '@vitest/utils': 4.0.9 @@ -13779,7 +15251,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.9(@types/node@20.19.9)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) + vitest: 4.0.9(@types/node@22.17.0)(@vitest/ui@4.0.9)(jiti@2.4.2)(jsdom@22.1.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.3) '@vitest/utils@4.0.9': dependencies: @@ -14029,6 +15501,10 @@ snapshots: mime-types: 3.0.1 negotiator: 1.0.0 + acorn-import-attributes@1.9.5(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-import-phases@1.0.4(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -14280,6 +15756,10 @@ snapshots: async-lock@1.4.1: {} + async-mutex@0.5.0: + dependencies: + tslib: 2.8.1 + async-retry@1.3.3: dependencies: retry: 0.13.1 @@ -14630,6 +16110,8 @@ snapshots: ci-info@2.0.0: {} + cjs-module-lexer@1.4.3: {} + cjson@0.3.3: dependencies: json-parse-helpfulerror: 1.0.3 @@ -15115,12 +16597,22 @@ snapshots: dependencies: is-obj: 2.0.0 + dot-prop@6.0.1: + dependencies: + is-obj: 2.0.0 + optional: true + dotenv-expand@11.0.7: dependencies: dotenv: 16.4.7 dotenv@16.4.7: {} + dotprompt@1.1.2: + dependencies: + handlebars: 4.7.8 + yaml: 2.8.3 + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -15590,6 +17082,11 @@ snapshots: eventemitter3@4.0.7: {} + eventid@2.0.1: + dependencies: + uuid: 8.3.2 + optional: true + events-listener@1.1.0: {} events@3.3.0: {} @@ -16333,7 +17830,7 @@ snapshots: gcp-metadata@7.0.1: dependencies: - gaxios: 7.1.1 + gaxios: 7.1.3 google-logging-utils: 1.1.1 json-bigint: 1.0.0 transitivePeerDependencies: @@ -16351,6 +17848,20 @@ snapshots: dependencies: loader-utils: 3.3.1 + genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0): + dependencies: + '@genkit-ai/ai': 1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)) + '@genkit-ai/core': 1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)(genkit@1.34.0(@google-cloud/firestore@7.11.3(encoding@0.1.13))(encoding@0.1.13)(firebase-admin@13.7.0(encoding@0.1.13))(firebase@12.10.0)) + uuid: 10.0.0 + transitivePeerDependencies: + - '@google-cloud/firestore' + - bufferutil + - encoding + - firebase + - firebase-admin + - supports-color + - utf-8-validate + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -16368,6 +17879,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-port@5.1.1: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -16545,7 +18058,7 @@ snapshots: '@grpc/grpc-js': 1.13.4 '@grpc/proto-loader': 0.8.0 duplexify: 4.1.3 - google-auth-library: 10.5.0 + google-auth-library: 10.6.1 google-logging-utils: 1.1.1 node-fetch: 3.3.2 object-hash: 3.0.0 @@ -16562,16 +18075,38 @@ snapshots: google-logging-utils@1.1.3: {} + googleapis-common@7.2.0(encoding@0.1.13): + dependencies: + extend: 3.0.2 + gaxios: 6.7.1(encoding@0.1.13) + google-auth-library: 9.15.1(encoding@0.1.13) + qs: 6.14.2 + url-template: 2.0.8 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + googleapis-common@8.0.2-rc.0: dependencies: extend: 3.0.2 - gaxios: 7.1.1 - google-auth-library: 10.5.0 + gaxios: 7.1.3 + google-auth-library: 10.6.1 qs: 6.14.2 url-template: 2.0.8 transitivePeerDependencies: - supports-color + googleapis@137.1.0(encoding@0.1.13): + dependencies: + google-auth-library: 9.15.1(encoding@0.1.13) + googleapis-common: 7.2.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + optional: true + gopd@1.2.0: {} got@13.0.0: @@ -16604,7 +18139,7 @@ snapshots: gtoken@8.0.0: dependencies: - gaxios: 7.1.1 + gaxios: 7.1.3 jws: 4.0.0 transitivePeerDependencies: - supports-color @@ -16822,6 +18357,13 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@1.15.0: + dependencies: + acorn: 8.15.0 + acorn-import-attributes: 1.9.5(acorn@8.15.0) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.4 + import-lazy@2.1.0: {} import-lazy@4.0.0: {} @@ -17722,6 +19264,8 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 + module-details-from-path@1.0.4: {} + moo@0.5.2: {} morgan@1.10.1: @@ -18095,7 +19639,7 @@ snapshots: openapi3-ts@3.2.0: dependencies: - yaml: 2.8.0 + yaml: 2.8.3 opener@1.5.2: {} @@ -18242,6 +19786,8 @@ snapshots: parseurl@1.3.3: {} + partial-json@0.1.7: {} + path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -18401,7 +19947,7 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(typescript@5.9.3)): dependencies: lilconfig: 3.1.3 - yaml: 2.8.0 + yaml: 2.8.3 optionalDependencies: postcss: 8.4.38 ts-node: 10.9.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(typescript@5.9.3) @@ -18580,12 +20126,25 @@ snapshots: end-of-stream: 1.4.4 once: 1.4.0 + pump@3.0.4: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + optional: true + pumpify@1.5.1: dependencies: duplexify: 3.7.1 inherits: 2.0.4 pump: 2.0.1 + pumpify@2.0.1: + dependencies: + duplexify: 4.1.3 + inherits: 2.0.4 + pump: 3.0.4 + optional: true + punycode@2.3.1: {} pupa@2.1.1: @@ -18796,6 +20355,14 @@ snapshots: require-from-string@2.0.2: {} + require-in-the-middle@7.5.2: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + requires-port@1.0.0: {} resolve-alpn@1.2.1: {} @@ -19090,6 +20657,8 @@ snapshots: shebang-regex@3.0.0: {} + shimmer@1.2.1: {} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -19895,6 +21464,8 @@ snapshots: dependencies: punycode: 2.3.1 + uri-templates@0.2.0: {} + url-join@0.0.1: {} url-join@4.0.1: {} @@ -19922,6 +21493,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@10.0.0: {} + uuid@11.1.0: {} uuid@13.0.0: {} diff --git a/tsconfig.json b/tsconfig.json index 9ce785e..a5a9775 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,6 +23,9 @@ }, { "path": "./example/app" + }, + { + "path": "./packages/genkit" } ] } From 53830d64c725b7c8084532e2aa427f9a6f0629bc Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 22 May 2026 12:02:10 +0000 Subject: [PATCH 3/4] chore(genkit): bump effect peer to ^4.0.0-beta.70 Match the workspace-wide bump performed on next so the new genkit package stays aligned with the rest of the workspace. --- packages/genkit/package.json | 4 ++-- pnpm-lock.yaml | 19 ++++++------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/genkit/package.json b/packages/genkit/package.json index bf6f840..822b1dc 100644 --- a/packages/genkit/package.json +++ b/packages/genkit/package.json @@ -29,13 +29,13 @@ "tslib": "^2.3.0" }, "devDependencies": { - "effect": "^4.0.0-beta.43", + "effect": "^4.0.0-beta.70", "effect-firebase": "workspace:*", "firebase-functions": "^7.1.0", "genkit": "^1.34.0" }, "peerDependencies": { - "effect": "^4.0.0-beta.43", + "effect": "^4.0.0-beta.70", "effect-firebase": "workspace:*", "firebase-functions": "^7.0.0", "genkit": "^1.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a5e16e..fa15f77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -343,8 +343,8 @@ importers: version: 2.8.1 devDependencies: effect: - specifier: ^4.0.0-beta.43 - version: 4.0.0-beta.46 + specifier: ^4.0.0-beta.70 + version: 4.0.0-beta.70 effect-firebase: specifier: workspace:* version: link:../effect-firebase @@ -9629,11 +9629,6 @@ packages: engines: {node: '>= 14.6'} hasBin: true - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} - engines: {node: '>= 14.6'} - hasBin: true - yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} @@ -16617,7 +16612,7 @@ snapshots: dotprompt@1.1.2: dependencies: handlebars: 4.7.8 - yaml: 2.8.3 + yaml: 2.9.0 dunder-proto@1.0.1: dependencies: @@ -19490,7 +19485,7 @@ snapshots: tree-kill: 1.2.2 tsconfig-paths: 4.2.0 tslib: 2.8.1 - yaml: 2.8.3 + yaml: 2.9.0 yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: @@ -19645,7 +19640,7 @@ snapshots: openapi3-ts@3.2.0: dependencies: - yaml: 2.8.3 + yaml: 2.9.0 opener@1.5.2: {} @@ -19953,7 +19948,7 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(typescript@5.9.3)): dependencies: lilconfig: 3.1.3 - yaml: 2.8.3 + yaml: 2.9.0 optionalDependencies: postcss: 8.4.38 ts-node: 10.9.1(@swc/core@1.15.8(@swc/helpers@0.5.19))(@types/node@20.19.9)(typescript@5.9.3) @@ -21948,8 +21943,6 @@ snapshots: yaml@2.8.0: {} - yaml@2.8.3: {} - yaml@2.9.0: {} yargs-parser@20.2.9: {} From f5ad9a26a9c288221fa73cb9ac3f6a7f6dfc6ee9 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 22 May 2026 12:59:22 +0000 Subject: [PATCH 4/4] feat(genkit): pass GenkitError-shaped failures through unwrapped Previously a user-thrown GenkitError or UserFacingError lost its protocol mapping because runPromise wrapped it in a FiberFailure, and makeTool always rebuilt the error as a fresh FAILED_PRECONDITION GenkitError. - Add runOrThrow helper: runPromiseExit + Cause.squash, so framework code sees the actual error instance. - onCallGenkitEffect now uses runOrThrow; a handler-thrown GenkitError reaches Genkit with its status, message, detail, and source intact. - makeTool checks instanceof GenkitError first and passes the error through; only typed failures matching the tool's failureSchema get wrapped in a new FAILED_PRECONDITION GenkitError. Defects that are already Error instances are thrown as-is. --- packages/genkit/src/lib/on-call.spec.ts | 26 ++++++++- packages/genkit/src/lib/on-call.ts | 19 +++---- packages/genkit/src/lib/run.ts | 22 ++++++++ packages/genkit/src/lib/tool.spec.ts | 51 +++++++++++++++-- packages/genkit/src/lib/tool.ts | 73 ++++++++++++++++--------- 5 files changed, 147 insertions(+), 44 deletions(-) create mode 100644 packages/genkit/src/lib/run.ts diff --git a/packages/genkit/src/lib/on-call.spec.ts b/packages/genkit/src/lib/on-call.spec.ts index 5214709..8aa96b1 100644 --- a/packages/genkit/src/lib/on-call.spec.ts +++ b/packages/genkit/src/lib/on-call.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; import { Effect, Layer, ManagedRuntime, Schema } from 'effect'; -import { genkit } from 'genkit'; +import { genkit, GenkitError } from 'genkit'; import { onCallGenkitEffect } from './on-call.js'; const runtime = () => ManagedRuntime.make(Layer.empty); @@ -63,6 +63,30 @@ describe('onCallGenkitEffect', () => { ).rejects.toThrow(); }); + it('passes a user-thrown GenkitError through unchanged (no FiberFailure wrapper)', async () => { + const ai = genkit({}); + const userError = new GenkitError({ + status: 'PERMISSION_DENIED', + message: 'not allowed', + }); + onCallGenkitEffect( + ai, + { + name: 'denied', + runtime: runtime(), + inputSchema: Schema.Struct({ x: Schema.Number }), + outputSchema: Schema.Struct({ x: Schema.Number }), + }, + () => Effect.fail(userError) + ); + + const rejection = await findFlow(ai, 'denied')({ x: 1 }).catch( + (e: unknown) => e + ); + expect(rejection).toBe(userError); + expect((rejection as GenkitError).status).toBe('PERMISSION_DENIED'); + }); + it('accepts a handler with no schemas (raw input pass-through)', async () => { const ai = genkit({}); onCallGenkitEffect( diff --git a/packages/genkit/src/lib/on-call.ts b/packages/genkit/src/lib/on-call.ts index 9c91e4b..01aa531 100644 --- a/packages/genkit/src/lib/on-call.ts +++ b/packages/genkit/src/lib/on-call.ts @@ -4,9 +4,9 @@ import { type CallableFunction, type CallableOptions, } from 'firebase-functions/https'; -import { run, type Runtime } from 'effect-firebase'; -import { logger } from 'firebase-functions'; +import { type Runtime } from 'effect-firebase'; import { z, type Genkit, type ToolArgument } from 'genkit'; +import { runOrThrow } from './run.js'; interface CallGenkitEffectOptions extends CallableOptions { name: string; @@ -125,19 +125,16 @@ export function onCallGenkitEffect( outputSchema ? Schema.encodeUnknownEffect(outputSchema)(output) : Effect.succeed(output) + ), + Effect.tapCause((cause) => + Effect.logError(`Error in flow '${name}'`, cause) ) ).pipe(Effect.withSpan('onCallGenkitEffect')); - return await run( + return await runOrThrow( options.runtime, - effect as Effect.Effect - ).catch((error) => { - logger.error('Defect in onCallGenkitEffect', { - inner: error, - stack: error instanceof Error ? error.stack : undefined, - }); - throw error; - }); + effect as Effect.Effect + ); } ); diff --git a/packages/genkit/src/lib/run.ts b/packages/genkit/src/lib/run.ts new file mode 100644 index 0000000..46778c5 --- /dev/null +++ b/packages/genkit/src/lib/run.ts @@ -0,0 +1,22 @@ +import { Cause, type Effect, Exit } from 'effect'; +import { isRuntime, type Runtime } from 'effect-firebase'; + +/** + * Run an Effect on the supplied runtime and resolve with its value, or + * throw the original error on failure. + * + * Unlike `runPromise`, which rejects with a `FiberFailure` wrapper, this + * helper unwraps the cause via `Cause.squash` so framework code (Genkit, + * Firebase Functions) sees the actual error instance — e.g. a + * {@link import('genkit').GenkitError} or `UserFacingError` — and can map it + * to its own protocol. + */ +export const runOrThrow = async ( + runtime: Runtime, + effect: Effect.Effect +): Promise => { + const runner = isRuntime(runtime) ? runtime : runtime(); + const exit = await runner.runPromiseExit(effect); + if (Exit.isSuccess(exit)) return exit.value; + throw Cause.squash(exit.cause); +}; diff --git a/packages/genkit/src/lib/tool.spec.ts b/packages/genkit/src/lib/tool.spec.ts index c52ff20..31e4189 100644 --- a/packages/genkit/src/lib/tool.spec.ts +++ b/packages/genkit/src/lib/tool.spec.ts @@ -78,22 +78,61 @@ describe('makeTool', () => { }); }); - it('reports defects as INTERNAL GenkitError', async () => { + it('passes a user-thrown GenkitError through unchanged', async () => { const ai = genkit({}); - const Broken = Tool.make('broken', { - parameters: Schema.Struct({ x: Schema.Number }), - success: Schema.Struct({ y: Schema.Number }), + const Lookup = Tool.make('lookup', { + parameters: Schema.Struct({ id: Schema.String }), + success: Schema.Struct({ value: Schema.String }), + }); + + const userError = new GenkitError({ + status: 'NOT_FOUND', + message: 'no such id', + detail: { id: 'missing' }, }); const tool = makeTool( ai, - Broken, - () => Effect.die(new Error('boom')), + Lookup, + () => Effect.fail(userError), { runtime: runtime() } ); + const rejection = await tool({ id: 'missing' }).catch((e: unknown) => e); + expect(rejection).toBe(userError); + expect((rejection as GenkitError).status).toBe('NOT_FOUND'); + }); + + it('throws the original Error for a defect, unwrapped from FiberFailure', async () => { + const ai = genkit({}); + const Broken = Tool.make('broken', { + parameters: Schema.Struct({ x: Schema.Number }), + success: Schema.Struct({ y: Schema.Number }), + }); + + const boom = new Error('boom'); + const tool = makeTool(ai, Broken, () => Effect.die(boom), { + runtime: runtime(), + }); + + const rejection = await tool({ x: 1 }).catch((e: unknown) => e); + expect(rejection).toBe(boom); + }); + + it('wraps non-Error defects in an INTERNAL GenkitError', async () => { + const ai = genkit({}); + const Broken = Tool.make('broken', { + parameters: Schema.Struct({ x: Schema.Number }), + success: Schema.Struct({ y: Schema.Number }), + }); + + const tool = makeTool(ai, Broken, () => Effect.die('string defect'), { + runtime: runtime(), + }); + const rejection = await tool({ x: 1 }).catch((e: unknown) => e); expect(rejection).toBeInstanceOf(GenkitError); expect((rejection as GenkitError).status).toBe('INTERNAL'); + expect((rejection as GenkitError).detail).toBe('string defect'); }); }); diff --git a/packages/genkit/src/lib/tool.ts b/packages/genkit/src/lib/tool.ts index af42dd7..b54627f 100644 --- a/packages/genkit/src/lib/tool.ts +++ b/packages/genkit/src/lib/tool.ts @@ -1,4 +1,4 @@ -import { Cause, Effect, Exit, Option, Schema } from 'effect'; +import { Cause, type Effect, Exit, Option, Schema } from 'effect'; import { Tool } from 'effect/unstable/ai'; import { isRuntime, type Runtime } from 'effect-firebase'; import { GenkitError, type Genkit, type ToolAction } from 'genkit'; @@ -11,9 +11,18 @@ interface MakeToolOptions { * Bridge an Effect `Tool` into a Genkit tool action. * * Converts the tool's Effect schemas to JSON Schema (`inputJsonSchema` / - * `outputJsonSchema`), runs the Effect handler through the supplied managed - * runtime, and surfaces typed failures (`failureSchema`) as a {@link GenkitError} - * whose `detail` carries the encoded failure value. + * `outputJsonSchema`) and runs the Effect handler through the supplied + * managed runtime. + * + * Failure handling, in order: + * 1. If the handler fails with (or dies with) a {@link GenkitError} or + * `UserFacingError`, that error is thrown as-is — preserving its status, + * detail, and source for Genkit's protocol mapping. + * 2. Otherwise, if the tool declares a `failureSchema`, the typed failure + * is encoded through it and thrown as a fresh `GenkitError` with + * `status: 'FAILED_PRECONDITION'` and the encoded payload on `detail`. + * 3. Otherwise, the original value is thrown directly (Error subclass) or + * wrapped in an `INTERNAL` `GenkitError`. * * @example * ```ts @@ -52,7 +61,9 @@ export function makeTool( const runner = isRuntime(options.runtime) ? options.runtime : options.runtime(); - const exit = await runner.runPromiseExit(handler(input as Tool.Parameters)); + const exit = await runner.runPromiseExit( + handler(input as Tool.Parameters) + ); if (Exit.isSuccess(exit)) { return exit.value as never; } @@ -62,33 +73,43 @@ export function makeTool( } const toGenkitError = async ( - runner: { readonly runPromiseExit: (effect: Effect.Effect) => Promise> }, + runner: { + readonly runPromiseExit: ( + effect: Effect.Effect + ) => Promise>; + }, tool: T, cause: Cause.Cause -): Promise => { +): Promise => { + const squashed = Cause.squash(cause); + + if (squashed instanceof GenkitError) { + return squashed; + } + const failure = Cause.findErrorOption(cause); - if (Option.isNone(failure)) { - return new GenkitError({ - status: 'INTERNAL', - message: `Tool '${tool.name}' failed with a defect`, - detail: Cause.squash(cause), - }); + if (Option.isSome(failure)) { + const encoded = await runner.runPromiseExit( + Schema.encodeUnknownEffect(tool.failureSchema)( + failure.value + ) as Effect.Effect + ); + if (Exit.isSuccess(encoded)) { + return new GenkitError({ + status: 'FAILED_PRECONDITION', + message: `Tool '${tool.name}' failed`, + detail: encoded.value, + }); + } } - const encoded = await runner.runPromiseExit( - Schema.encodeUnknownEffect(tool.failureSchema)( - failure.value - ) as Effect.Effect - ); - if (Exit.isSuccess(encoded)) { - return new GenkitError({ - status: 'FAILED_PRECONDITION', - message: `Tool '${tool.name}' failed`, - detail: encoded.value, - }); + + if (squashed instanceof Error) { + return squashed; } + return new GenkitError({ - status: 'FAILED_PRECONDITION', + status: 'INTERNAL', message: `Tool '${tool.name}' failed`, - detail: failure.value, + detail: squashed, }); };