From 10a58873acde8734f05dfda455fe7b366861676b Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Thu, 27 Mar 2025 09:55:36 +0100 Subject: [PATCH 01/60] feat(opentelemetry): correct span parenting + fix batching support --- .changeset/pink-sloths-mate.md | 142 +++ .../cloudflare-workers.e2e.ts | 8 +- e2e/cloudflare-workers/src/index.ts | 34 +- e2e/opentelemetry/gateway.config.ts | 4 + e2e/opentelemetry/opentelemetry.e2e.ts | 184 +++- package.json | 2 +- .../fusion-runtime/src/unifiedGraphManager.ts | 2 +- packages/fusion-runtime/src/utils.ts | 23 +- .../hmac-upstream-signature/src/index.ts | 12 +- packages/plugins/opentelemetry/package.json | 4 +- packages/plugins/opentelemetry/src/context.ts | 73 ++ packages/plugins/opentelemetry/src/index.ts | 17 +- .../plugins/opentelemetry/src/plugin-utils.ts | 160 ++++ packages/plugins/opentelemetry/src/plugin.ts | 904 ++++++++++++------ packages/plugins/opentelemetry/src/spans.ts | 457 +++++---- packages/plugins/opentelemetry/src/utils.ts | 35 + .../tests/useOpenTelemetry.spec.ts | 440 ++++++++- packages/plugins/opentelemetry/tests/utils.ts | 208 ++++ packages/runtime/src/index.ts | 6 +- .../runtime/src/plugins/useUpstreamRetry.ts | 59 +- .../runtime/src/plugins/useUpstreamTimeout.ts | 7 +- yarn.lock | 60 +- 22 files changed, 2281 insertions(+), 560 deletions(-) create mode 100644 .changeset/pink-sloths-mate.md create mode 100644 packages/plugins/opentelemetry/src/context.ts create mode 100644 packages/plugins/opentelemetry/src/plugin-utils.ts create mode 100644 packages/plugins/opentelemetry/src/utils.ts create mode 100644 packages/plugins/opentelemetry/tests/utils.ts diff --git a/.changeset/pink-sloths-mate.md b/.changeset/pink-sloths-mate.md new file mode 100644 index 000000000..415d7ec40 --- /dev/null +++ b/.changeset/pink-sloths-mate.md @@ -0,0 +1,142 @@ +--- +'@graphql-mesh/plugin-opentelemetry': major +--- + +The OpenTelemetry integration have been entirely overhauled. + +**This Release contains breaking changes, please read [Breaking Changes](#breaking-changes) section below** + +## Improvements + +### Span parenting + +The spans of the different phases of the request handling have been fixed. + +Now, spans are parented as expected, and Hive Gateway is now compatible with Grafana's "critical path" feature. + +#### Context Manager + +By default, if `initializeNodeSDK` is `true` (default), the plugin will try to install an `AsyncLocalStorage` based Context Manager. + +You can configure an alternative context manager (or entirely disable it) with `contextManager` new option. + +#### Extended span coverage + +Spans also now covers the entire duration of each phases, including the plugin hooks execution. + +### Custom spans and standard instrumentation support + +We are now fully compatible with OpenTelemetry Context, meaning you can now create custom spans +inside your plugins, or enable standard OTEL instrumentation like Node SDK. + +The custom spans will be parented correctly thanks to OTEL Context. + +```ts +const useMyPlugin = () => { + const tracer = otel.trace.getTracer('hive-gateway'); + return { + async onExecute() { + await otel.startActiveSpan('my-custom-span', async () => { + // do something + }); + }, + }; +}; +``` + +You can also enable Node SDK standard instrumentations (or instrumentation specific to your runtime). +They will also be parented correctly: + +```ts +// otel-setup.ts +import otel from '@opentelemetry/api'; +import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; +import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { NodeSDK } from '@opentelemetry/sdk-node'; +import './setup.js'; +import { defineConfig } from '@graphql-hive/gateway'; + +const sdk = new NodeSDK({ + traceExporter: new OTLPTraceExporter({ + url: 'http://localhost:4318/v1/traces', + }), + // Enable Node standard instrumentations + instrumentations: [getNodeAutoInstrumentations()], + serviceName: 'hive-gateway', +}); + +sdk.start(); + +// This is required for the OTEL context to be properly propagated and spans correlated with Hive's integration. +otel.context.setGlobalContextManager(new AsyncLocalStorageContextManager()); + +// gateway.config.ts +import { defineConfig } from '@graphql-hive/gateway'; + +export const gatewayConfig = defineConfig({ + opentelemetry: { + initializeNodeSDK: false, + }, +}); +``` + +### New `graphql.operation` span with Batched Queries support + +The plugin now exports a new span `graphql.operation ` which represent the handling of a graphql operation. + +This enables the support of Batched queries. If enabled the root `POST /graphql` span will contain +one `graphql.operation ` span for each graphql operation contained in the HTTP request. + +### Support of Upstream Retry + +The plugin now support standard OTEL attribute for request retry (`http.request.resend_count`). + +If enabled, you will see one `http.fetch` span for each try under `subgraph.execute ()` spans. + +### Support of custom attributes + +Thanks to OTEL Context, you can now add custom attributes to the current span: + +```ts +import otel from '@opentelemetry/api' + +const useMyPlugin = () => ({ + async onRequestParse({ request }) => ({ + const userId = await getUserIdForRequest(request); + otel.trace.getSpan()?.setAttribute('user_id', userId); + }) +}) +``` + +## Breaking Changes + +### Spans Parenting + +Spans are now parented correctly, which can break your Grafana (or other visualization and alerting tools) setup. +Please carefully review your span queries to check if they rely on span parent. + +### Spans configuration + +Spans can be skipped based on the result of a predicate function. The parameter of those functions have been narrowed down, and contains less data. + +If your configuration contains skip functions, please review the types to adapt to the new API. + +### Async Local Storage Context Manager + +When `initializeNodeSDK` is set to `true` (the default), the plugin tries to enable an Async Local Storage based Context Manager. +This is needed to ensure correct correlation of spans created outside of the plugin. + +While this should not break anything, the usage of `AsyncLocalStorage` can slightly reduce performances of the Gateway. + +If you don't need to correlate with any OTEL official instrumentations or don't need OTEL context for custom spans, you can disable it by setting the `contextManager` option: + +```ts +import { defineConfig } from '@graphql-hive/gateway'; + +export const gatewayConfig = defineConfig({ + opentelemetry: { + contextManager: false, + }, +}); +``` diff --git a/e2e/cloudflare-workers/cloudflare-workers.e2e.ts b/e2e/cloudflare-workers/cloudflare-workers.e2e.ts index 3b99bc2a9..1a1b3a59a 100644 --- a/e2e/cloudflare-workers/cloudflare-workers.e2e.ts +++ b/e2e/cloudflare-workers/cloudflare-workers.e2e.ts @@ -58,7 +58,7 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( const url = `http://0.0.0.0:${jaeger.additionalPorts[16686]}/api/traces?service=${service}`; let res!: JaegerTracesApiResponse; - const signal = AbortSignal.timeout(2000); + const signal = AbortSignal.timeout(2_000); while (!signal.aborted) { try { res = await fetch(url).then((r) => r.json()); @@ -137,14 +137,14 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( `); const traces = await getJaegerTraces(serviceName, 2); - expect(traces.data.length).toBe(2); + expect(traces.data.length).toBe(3); const relevantTraces = traces.data.filter((trace) => trace.spans.some((span) => span.operationName === 'POST /graphql'), ); expect(relevantTraces.length).toBe(1); const relevantTrace = relevantTraces[0]; expect(relevantTrace).toBeDefined(); - expect(relevantTrace?.spans.length).toBe(5); + expect(relevantTrace?.spans.length).toBe(8); expect(relevantTrace?.spans).toContainEqual( expect.objectContaining({ operationName: 'POST /graphql' }), @@ -236,7 +236,7 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( ); const traces = await getJaegerTraces(serviceName, 3); - expect(traces.data.length).toBe(3); + expect(traces.data.length).toBe(4); const relevantTraces = traces.data.filter((trace) => trace.spans.some((span) => span.operationName === 'POST /graphql'), diff --git a/e2e/cloudflare-workers/src/index.ts b/e2e/cloudflare-workers/src/index.ts index ae9acc629..a01458833 100644 --- a/e2e/cloudflare-workers/src/index.ts +++ b/e2e/cloudflare-workers/src/index.ts @@ -1,7 +1,6 @@ import { ExportedHandler, Response } from '@cloudflare/workers-types'; import { createGatewayRuntime, - DisposableSymbols, GatewayPlugin, } from '@graphql-hive/gateway-runtime'; import { @@ -9,7 +8,6 @@ import { useOpenTelemetry, } from '@graphql-mesh/plugin-opentelemetry'; import http from '@graphql-mesh/transport-http'; -import { fakePromise } from '@graphql-tools/utils'; interface Env { OTLP_EXPORTER_URL: string; @@ -37,27 +35,21 @@ const useOnFetchTracer = (): GatewayPlugin => { }; }; -export default { - async fetch(req, env, ctx) { - const runtime = createGatewayRuntime({ - proxy: { - endpoint: 'https://countries.trevorblades.com', - }, - transports: { - http, - }, +let runtime: ReturnType; +function getRuntime(env: Env) { + if (!runtime) { + console.log(env); + runtime = createGatewayRuntime({ + proxy: { endpoint: 'https://countries.trevorblades.com' }, + transports: { http }, plugins: (ctx) => [ useOpenTelemetry({ ...ctx, exporters: [ createOtlpHttpExporter( - { - url: env['OTLP_EXPORTER_URL'], - }, + { url: env['OTLP_EXPORTER_URL'] }, // Batching config is set in order to make it easier to test. - { - scheduledDelayMillis: 1, - }, + false, ), ], serviceName: env['OTLP_SERVICE_NAME'], @@ -65,8 +57,12 @@ export default { useOnFetchTracer(), ], }); - const res = await runtime(req, env, ctx); - ctx.waitUntil(fakePromise(runtime[DisposableSymbols.asyncDispose]())); + } + return runtime; +} +export default { + async fetch(req, env, ctx) { + const res = await getRuntime(env)(req, env, ctx); return res as unknown as Response; }, } satisfies ExportedHandler; diff --git a/e2e/opentelemetry/gateway.config.ts b/e2e/opentelemetry/gateway.config.ts index 071b4fd24..be15f07ed 100644 --- a/e2e/opentelemetry/gateway.config.ts +++ b/e2e/opentelemetry/gateway.config.ts @@ -3,6 +3,7 @@ import { createOtlpHttpExporter, defineConfig, GatewayPlugin, + OpenTelemetryDiagLogLevel, } from '@graphql-hive/gateway'; import type { MeshFetchRequestInit } from '@graphql-mesh/types'; @@ -28,6 +29,7 @@ const useOnFetchTracer = (): GatewayPlugin => { export const gatewayConfig = defineConfig({ openTelemetry: { + diagLevel: OpenTelemetryDiagLogLevel.INFO, exporters: [ process.env['OTLP_EXPORTER_TYPE'] === 'grpc' ? createOtlpGrpcExporter( @@ -36,6 +38,7 @@ export const gatewayConfig = defineConfig({ }, // Batching config is set in order to make it easier to test. { + maxExportBatchSize: 1, scheduledDelayMillis: 1, }, ) @@ -45,6 +48,7 @@ export const gatewayConfig = defineConfig({ }, // Batching config is set in order to make it easier to test. { + maxExportBatchSize: 1, scheduledDelayMillis: 1, }, ), diff --git a/e2e/opentelemetry/opentelemetry.e2e.ts b/e2e/opentelemetry/opentelemetry.e2e.ts index 1a386084e..90b9bb8ea 100644 --- a/e2e/opentelemetry/opentelemetry.e2e.ts +++ b/e2e/opentelemetry/opentelemetry.e2e.ts @@ -24,15 +24,18 @@ beforeAll(async () => { type JaegerTracesApiResponse = { data: Array<{ traceID: string; - spans: Array<{ - traceID: string; - spanID: string; - operationName: string; - tags: Array<{ key: string; value: string; type: string }>; - }>; + spans: JaegerTraceSpan[]; }>; }; +type JaegerTraceSpan = { + traceID: string; + spanID: string; + operationName: string; + tags: Array<{ key: string; value: string; type: string }>; + references: Array<{ refType: string; spanID: string; traceID: string }>; +}; + describe('OpenTelemetry', () => { (['grpc', 'http'] as const).forEach((OTLP_EXPORTER_TYPE) => { describe(`exporter > ${OTLP_EXPORTER_TYPE}`, () => { @@ -64,19 +67,56 @@ describe('OpenTelemetry', () => { async function expectJaegerTraces( service: string, - checkFn: (res: JaegerTracesApiResponse) => void | PromiseLike, + checkFn: ( + res: JaegerTracesApiResponse, + abort: AbortController, + ) => void | PromiseLike, ): Promise { const url = `http://0.0.0.0:${jaeger.additionalPorts[16686]}/api/traces?service=${service}`; let res!: JaegerTracesApiResponse; let err: any; - const signal = AbortSignal.timeout(15_000); + const timeout = AbortSignal.timeout(15_000); + const abort = new AbortController(); + const signal = AbortSignal.any([timeout, abort.signal]); while (!signal.aborted) { try { res = await fetch(url, { signal }).then((r) => r.json()); - await checkFn(res); + await checkFn(res, abort); return; } catch (e) { + if (signal.aborted) { + const relevantTrace = res.data.find((trace) => + trace.spans.some( + (span) => span.operationName === 'POST /graphql', + ), + ); + const actualError = timeout.aborted ? err : e; + console.error( + actualError, + '\nTraces was:', + Object.fromEntries( + res.data.map(({ traceID, spans }) => [ + traceID, + spans.map((s) => s.operationName), + ]), + ), + '\nSpan tree was:', + relevantTrace + ? '\n' + + printSpanTree( + buildSpanTree(relevantTrace.spans, 'POST /graphql'), + ) + : 'no trace containing "POST /graphql" span found', + ); + throw actualError; + } + if (abort.signal.aborted) { + throw e; + } + if (timeout.aborted) { + throw err; + } err = e; } } @@ -552,47 +592,62 @@ describe('OpenTelemetry', () => { }, }); await expectJaegerTraces(serviceName, (traces) => { - expect(traces.data.length).toBe(2); const relevantTraces = traces.data.filter((trace) => trace.spans.some((span) => span.operationName === 'POST /graphql'), ); expect(relevantTraces.length).toBe(1); const relevantTrace = relevantTraces[0]; expect(relevantTrace).toBeDefined(); - expect(relevantTrace?.spans.length).toBe(11); + expect(relevantTrace!.spans.length).toBe(20); - expect(relevantTrace?.spans).toContainEqual( - expect.objectContaining({ operationName: 'POST /graphql' }), - ); - expect(relevantTrace?.spans).toContainEqual( - expect.objectContaining({ operationName: 'graphql.parse' }), - ); - expect(relevantTrace?.spans).toContainEqual( - expect.objectContaining({ operationName: 'graphql.validate' }), - ); - expect(relevantTrace?.spans).toContainEqual( - expect.objectContaining({ operationName: 'graphql.execute' }), + const spanTree = buildSpanTree(relevantTrace!.spans, 'POST /graphql'); + expect(spanTree).toBeDefined(); + + expect(spanTree!.children).toHaveLength(1); + + const operationSpan = spanTree!.children[0]; + const expectedOperationChildren = [ + 'graphql.parse', + 'graphql.validate', + 'graphql.context', + 'graphql.execute', + ]; + expect(operationSpan!.children).toHaveLength(4); + for (const operationName of expectedOperationChildren) { + expect(operationSpan?.children).toContainEqual( + expect.objectContaining({ + span: expect.objectContaining({ operationName }), + }), + ); + } + + const executeSpan = operationSpan!.children.find( + ({ span }) => span.operationName === 'graphql.execute', ); - expect( - relevantTrace?.spans.filter( - (r) => r.operationName === 'subgraph.execute (accounts)', - ).length, - ).toBe(2); - expect( - relevantTrace?.spans.filter( - (r) => r.operationName === 'subgraph.execute (products)', - ).length, - ).toBe(2); - expect( - relevantTrace?.spans.filter( - (r) => r.operationName === 'subgraph.execute (inventory)', - ).length, - ).toBe(1); - expect( - relevantTrace?.spans.filter( - (r) => r.operationName === 'subgraph.execute (reviews)', - ).length, - ).toBe(2); + + const expectedExecuteChildren = [ + ['subgraph.execute (accounts)', 2], + ['subgraph.execute (products)', 2], + ['subgraph.execute (inventory)', 1], + ['subgraph.execute (reviews)', 2], + ] as const; + + for (const [operationName, count] of expectedExecuteChildren) { + const matchingChildren = executeSpan!.children.filter( + ({ span }) => span.operationName === operationName, + ); + expect(matchingChildren).toHaveLength(count); + for (const child of matchingChildren) { + expect(child.children).toHaveLength(1); + expect(child.children).toContainEqual( + expect.objectContaining({ + span: expect.objectContaining({ + operationName: 'http.fetch', + }), + }), + ); + } + } }); }); @@ -627,12 +682,11 @@ describe('OpenTelemetry', () => { } `); await expectJaegerTraces(serviceName, (traces) => { - expect(traces.data.length).toBe(2); const relevantTrace = traces.data.find((trace) => trace.spans.some((span) => span.operationName === 'POST /graphql'), ); expect(relevantTrace).toBeDefined(); - expect(relevantTrace?.spans.length).toBe(2); + expect(relevantTrace?.spans.length).toBe(3); expect(relevantTrace?.spans).toContainEqual( expect.objectContaining({ operationName: 'POST /graphql' }), @@ -702,12 +756,11 @@ describe('OpenTelemetry', () => { } `); await expectJaegerTraces(serviceName, (traces) => { - expect(traces.data.length).toBe(2); const relevantTrace = traces.data.find((trace) => trace.spans.some((span) => span.operationName === 'POST /graphql'), ); expect(relevantTrace).toBeDefined(); - expect(relevantTrace?.spans.length).toBe(3); + expect(relevantTrace?.spans.length).toBe(4); expect(relevantTrace?.spans).toContainEqual( expect.objectContaining({ operationName: 'POST /graphql' }), @@ -763,7 +816,6 @@ describe('OpenTelemetry', () => { const path = '/non-existing'; await fetch(`http://0.0.0.0:${port}${path}`).catch(() => {}); await expectJaegerTraces(serviceName, (traces) => { - expect(traces.data.length).toBe(2); const relevantTrace = traces.data.find((trace) => trace.spans.some((span) => span.operationName === 'GET ' + path), ); @@ -1281,8 +1333,6 @@ describe('OpenTelemetry', () => { ); await expectJaegerTraces(serviceName, (traces) => { - expect(traces.data.length).toBe(3); - const relevantTraces = traces.data.filter((trace) => trace.spans.some((span) => span.operationName === 'POST /graphql'), ); @@ -1309,3 +1359,39 @@ describe('OpenTelemetry', () => { }); }); }); + +type TraceTreeNode = { + span: JaegerTraceSpan; + children: TraceTreeNode[]; +}; +function buildSpanTree( + spans: JaegerTraceSpan[], + rootName: string, +): TraceTreeNode | undefined { + function buildNode(root: JaegerTraceSpan): TraceTreeNode { + return { + span: root, + children: spans + .filter((span) => + span.references.find( + (ref) => ref.refType === 'CHILD_OF' && ref.spanID === root.spanID, + ), + ) + .map(buildNode), + }; + } + + const root = spans.find((span) => span.operationName === rootName); + return root && buildNode(root); +} + +function printSpanTree(node: TraceTreeNode | undefined, prefix = ''): string { + if (!node) { + return ''; + } + const childrenSting = node.children + .map((c): string => printSpanTree(c, prefix + ' |')) + .join(''); + + return `${prefix}-- ${node.span.operationName}\n${childrenSting}`; +} diff --git a/package.json b/package.json index ef951dbbb..7e2cf90ff 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "format": "yarn check:format --write", "test": "vitest --project unit", "test:bun": "bun test --bail", - "test:e2e": "vitest --project e2e", + "test:e2e": "vitest --project e2e --slowTestThreshold 1000", "test:leaks": "cross-env \"LEAK_TEST=1\" jest --detectOpenHandles --detectLeaks", "test:mem": "vitest --project memtest" }, diff --git a/packages/fusion-runtime/src/unifiedGraphManager.ts b/packages/fusion-runtime/src/unifiedGraphManager.ts index c8f5b3379..4244781de 100644 --- a/packages/fusion-runtime/src/unifiedGraphManager.ts +++ b/packages/fusion-runtime/src/unifiedGraphManager.ts @@ -114,7 +114,7 @@ export type Instrumentation = { * Wrap each subgraph execution request. This can happen multiple time for the same graphql operation. */ subgraphExecute?: ( - payload: { executionRequest: ExecutionRequest }, + payload: { executionRequest: ExecutionRequest; subgraphName: string }, wrapped: () => MaybePromise, ) => MaybePromise; }; diff --git a/packages/fusion-runtime/src/utils.ts b/packages/fusion-runtime/src/utils.ts index c580c60e5..c43645cae 100644 --- a/packages/fusion-runtime/src/utils.ts +++ b/packages/fusion-runtime/src/utils.ts @@ -256,6 +256,7 @@ export function getOnSubgraphExecute({ transportEntryMap, transportContext, getSubgraphSchema, + instrumentation, }); // Caches the executor for future use subgraphExecutorMap.set(subgraphName, executor); @@ -266,20 +267,14 @@ export function getOnSubgraphExecute({ // Caches the lazy executor to prevent race conditions subgraphExecutorMap.set(subgraphName, executor); } + if (batch) { executor = getBatchingExecutor( executionRequest.context || subgraphExecutorMap, executor, ); } - const originalExecutor = executor; - executor = (executionRequest) => { - const subgraphInstrumentation = instrumentation()?.subgraphExecute; - return getInstrumented({ executionRequest }).asyncFn( - subgraphInstrumentation, - originalExecutor, - )(executionRequest); - }; + return executor(executionRequest); }; } @@ -291,6 +286,7 @@ export interface WrapExecuteWithHooksOptions { transportEntryMap?: Record; getSubgraphSchema: (subgraphName: string) => GraphQLSchema; transportContext?: TransportContext; + instrumentation: () => Instrumentation | undefined; } declare module 'graphql' { @@ -310,8 +306,9 @@ export function wrapExecutorWithHooks({ transportEntryMap, getSubgraphSchema, transportContext, + instrumentation, }: WrapExecuteWithHooksOptions): Executor { - return function executorWithHooks(baseExecutionRequest: ExecutionRequest) { + function executorWithHooks(baseExecutionRequest: ExecutionRequest) { baseExecutionRequest.info = baseExecutionRequest.info || ({} as GraphQLResolveInfo); baseExecutionRequest.info.executionRequest = baseExecutionRequest; @@ -447,6 +444,14 @@ export function wrapExecutorWithHooks({ ); }, ); + } + + return function instrumentedExecutor(executionRequest: ExecutionRequest) { + const subgraphInstrument = instrumentation()?.subgraphExecute; + return getInstrumented({ executionRequest, subgraphName }).asyncFn( + subgraphInstrument, + executorWithHooks, + )(executionRequest); }; } diff --git a/packages/plugins/hmac-upstream-signature/src/index.ts b/packages/plugins/hmac-upstream-signature/src/index.ts index 3bc4088b5..3682c43c5 100644 --- a/packages/plugins/hmac-upstream-signature/src/index.ts +++ b/packages/plugins/hmac-upstream-signature/src/index.ts @@ -98,7 +98,6 @@ export function useHmacUpstreamSignature( subgraphName, subgraph, executionRequest, - setExecutionRequest, logger = yogaLogger, }) { logger?.debug(`running shouldSign for subgraph ${subgraphName}`); @@ -133,13 +132,10 @@ export function useHmacUpstreamSignature( `produced hmac signature for subgraph ${subgraphName}, signature: ${extensionValue}, signed payload: ${serializedExecutionRequest}`, ); - setExecutionRequest({ - ...executionRequest, - extensions: { - ...executionRequest.extensions, - [extensionName]: extensionValue, - }, - }); + if (!executionRequest.extensions) { + executionRequest.extensions = {}; + } + executionRequest.extensions[extensionName] = extensionValue; }, ); }, diff --git a/packages/plugins/opentelemetry/package.json b/packages/plugins/opentelemetry/package.json index 9ce7d75b3..3c2958286 100644 --- a/packages/plugins/opentelemetry/package.json +++ b/packages/plugins/opentelemetry/package.json @@ -50,6 +50,7 @@ "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/utils": "^10.8.1", "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.30.0", "@opentelemetry/core": "^1.30.0", "@opentelemetry/exporter-trace-otlp-grpc": "^0.57.0", "@opentelemetry/exporter-trace-otlp-http": "^0.57.0", @@ -59,10 +60,11 @@ "@opentelemetry/sdk-trace-base": "^1.29.0", "@opentelemetry/sdk-trace-web": "^1.29.0", "@opentelemetry/semantic-conventions": "^1.28.0", - "@whatwg-node/promise-helpers": "^1.3.0", + "@whatwg-node/promise-helpers": "1.3.0", "tslib": "^2.8.1" }, "devDependencies": { + "@whatwg-node/server": "^0.10.0", "graphql": "^16.9.0", "graphql-yoga": "^5.15.1", "pkgroll": "2.14.3" diff --git a/packages/plugins/opentelemetry/src/context.ts b/packages/plugins/opentelemetry/src/context.ts new file mode 100644 index 000000000..3192f8ff8 --- /dev/null +++ b/packages/plugins/opentelemetry/src/context.ts @@ -0,0 +1,73 @@ +import { trace, type Context, type ContextManager } from '@opentelemetry/api'; +import { fakePromise } from '@whatwg-node/promise-helpers'; + +type Node = { + ctx: Context; + previous?: Node; +}; + +export class OtelContextStack { + #root: Node; + #current: Node; + + constructor(root: Context) { + this.#root = { ctx: root }; + this.#current = this.#root; + } + + get current(): Context { + return this.#current.ctx; + } + + get root(): Context { + return this.#root.ctx; + } + + push = (ctx: Context) => { + this.#current = { ctx, previous: this.#current }; + }; + + pop = () => { + this.#current = this.#current.previous ?? this.#root; + }; + + toString() { + let node: Node | undefined = this.#current; + const names = []; + while (node != undefined) { + names.push((trace.getSpan(node.ctx) as unknown as { name: string }).name); + node = node.previous; + } + return names.join(' -> '); + } +} + +export function getContextManager( + contextManager?: boolean | ContextManager, +): Promise { + if (contextManager === false) { + return fakePromise(undefined); + } + + if (contextManager === true || contextManager == undefined) { + const doNotBundleThisModule = '@opentelemetry'; + return import(`${doNotBundleThisModule}/context-async-hooks`) + .then((module) => new module.AsyncLocalStorageContextManager()) + .catch((err) => { + console.dir('module error', err); + // If `async_hooks` is not available, we want to error only if the context manager is + // explicitly enabled. + if (contextManager === true) { + throw new Error( + "[OTEL] 'node:async_hooks' module is not available: can't initialize context manager. Possible solutions:\n" + + '\t- disable context manager usage by providing `contextManager: false`\n' + + '\t- provide a custom context manager in the `contextManager` option' + + 'Learn more about OTEL configuration here: https://the-guild.dev/graphql/hive/docs/gateway/monitoring-tracing#opentelemetry-traces', + { cause: err }, + ); + } + }); + } + + return fakePromise(contextManager); +} diff --git a/packages/plugins/opentelemetry/src/index.ts b/packages/plugins/opentelemetry/src/index.ts index 04669571b..d806dd369 100644 --- a/packages/plugins/opentelemetry/src/index.ts +++ b/packages/plugins/opentelemetry/src/index.ts @@ -1,5 +1,18 @@ +import { DiagLogLevel } from '@opentelemetry/api'; +import { + useOpenTelemetry, + type OpenTelemetryGatewayPluginOptions, + type OpenTelemetryPlugin, +} from './plugin'; + export * from './processors'; + +export type OpenTelemetryMeshPluginOptions = OpenTelemetryGatewayPluginOptions; + +export const OpenTelemetryDiagLogLevel = DiagLogLevel; + export { useOpenTelemetry, - type OpenTelemetryGatewayPluginOptions as OpenTelemetryMeshPluginOptions, -} from './plugin'; + OpenTelemetryPlugin, + OpenTelemetryGatewayPluginOptions, +}; diff --git a/packages/plugins/opentelemetry/src/plugin-utils.ts b/packages/plugins/opentelemetry/src/plugin-utils.ts new file mode 100644 index 000000000..a6dd4f74f --- /dev/null +++ b/packages/plugins/opentelemetry/src/plugin-utils.ts @@ -0,0 +1,160 @@ +import type { ExecutionRequest } from '@graphql-tools/utils'; +import { GenericInstrumentation } from 'graphql-yoga'; + +export function withState< + P extends { instrumentation?: GenericInstrumentation }, + HttpState = object, + GraphqlState = object, + SubExecState = object, +>( + pluginFactory: ( + getState: ( + payload: SP, + ) => PayloadWithState['state'], + ) => PluginWithState, +): P { + const states: { + forRequest?: WeakMap>; + forOperation?: WeakMap>; + forSubgraphExecution?: WeakMap>; + } = {}; + + function getProp(scope: keyof typeof states, key: any): PropertyDescriptor { + return { + get() { + if (!states[scope]) states[scope] = new WeakMap(); + let value = states[scope].get(key as any); + if (!value) states[scope].set(key, (value = {})); + return value; + }, + enumerable: true, + }; + } + + function getState(payload: Payload) { + let { executionRequest, context, request } = payload; + const state = {}; + const defineState = (scope: keyof typeof states, key: any) => + Object.defineProperty(state, scope, getProp(scope, key)); + + if (executionRequest) { + defineState('forSubgraphExecution', executionRequest); + // ExecutionRequest can happen outside of any Graphql Operation for Gateway internal usage like Introspection queries. + // We check for `params` to be prensent, which means it's actually a GraphQL context. + if (executionRequest.context?.params) context = executionRequest.context; + } + if (context) { + defineState('forOperation', context); + if (context.request) request = context.request; + } + if (request) { + defineState('forRequest', request); + } + return state; + } + + function addStateGetters(src: any) { + const result: any = {}; + for (const [hookName, hook] of Object.entries(src) as any) { + result[hookName] = + typeof hook !== 'function' + ? hook + : (payload: any, ...args: any[]) => + hook( + { + ...payload, + get state() { + return getState(payload); + }, + }, + ...args, + ); + } + return result; + } + + const { instrumentation, ...hooks } = pluginFactory(getState as any); + + const pluginWithState = addStateGetters(hooks); + pluginWithState.instrumentation = addStateGetters(instrumentation); + + return pluginWithState as P; +} + +export type HttpState = { + forRequest: Partial; +}; + +export type GraphQLState = { + forOperation: Partial; +}; + +export type GatewayState = { + forSubgraphExecution: Partial; +}; + +export function getMostSpecificState( + state: Partial & GraphQLState & GatewayState> = {}, +): Partial | undefined { + const { forOperation, forRequest, forSubgraphExecution } = state; + return forSubgraphExecution ?? forOperation ?? forRequest; +} + +type Payload = { + request?: Request; + context?: any; + executionRequest?: ExecutionRequest; +}; + +// Brace yourself! TS Wizardry is coming! + +type PayloadWithState = T extends { + executionRequest: any; +} + ? T & { + state: Partial & GraphQLState> & + GatewayState; + } + : T extends { + executionRequest?: any; + } + ? T & { + state: Partial< + HttpState & GraphQLState & GatewayState + >; + } + : T extends { context: any } + ? T & { state: HttpState & GraphQLState } + : T extends { request: any } + ? T & { state: HttpState } + : T extends { request?: any } + ? T & { state: Partial> } + : T; + +export type PluginWithState< + P, + Http = object, + GraphQL = object, + Gateway = object, +> = { + [K in keyof P]: K extends 'instrumentation' + ? P[K] extends infer Instrumentation | undefined + ? { + [I in keyof Instrumentation]: Instrumentation[I] extends + | ((payload: infer IP, ...args: infer Args) => infer IR) + | undefined + ? + | (( + payload: PayloadWithState, + ...args: Args + ) => IR) + | undefined + : Instrumentation[I]; + } + : P[K] + : P[K] extends ((payload: infer T) => infer R) | undefined + ? + | ((payload: PayloadWithState) => R) + | undefined + : P[K]; +}; diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 1149ad7ca..6e4f3a366 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -1,15 +1,15 @@ import { - type OnExecuteEventPayload, - type OnParseEventPayload, - type OnValidateEventPayload, -} from '@envelop/types'; -import { type GatewayPlugin } from '@graphql-hive/gateway-runtime'; -import type { OnSubgraphExecutePayload } from '@graphql-mesh/fusion-runtime'; -import type { Logger, OnFetchHookPayload } from '@graphql-mesh/types'; + GatewayConfigContext, + getRetryInfo, + isRetryExecutionRequest, + type GatewayPlugin, +} from '@graphql-hive/gateway-runtime'; import { getHeadersObj } from '@graphql-mesh/utils'; import { + createDeferred, + ExecutionRequest, fakePromise, - isAsyncIterable, + isPromise, MaybePromise, } from '@graphql-tools/utils'; import { @@ -17,8 +17,10 @@ import { diag, DiagLogLevel, propagation, + ROOT_CONTEXT, trace, type Context, + type ContextManager, type TextMapGetter, type Tracer, } from '@opentelemetry/api'; @@ -26,28 +28,59 @@ import { setGlobalErrorHandler } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import { type SpanProcessor } from '@opentelemetry/sdk-trace-base'; import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; -import { handleMaybePromise } from '@whatwg-node/promise-helpers'; -import type { OnRequestEventPayload } from '@whatwg-node/server'; +import { unfakePromise } from '@whatwg-node/promise-helpers'; import { ATTR_SERVICE_VERSION, SEMRESATTRS_SERVICE_NAME } from './attributes'; +import { getContextManager, OtelContextStack } from './context'; import { - completeHttpSpan, + getMostSpecificState, + withState, + type GatewayState, + type GraphQLState, + type HttpState, +} from './plugin-utils'; +import { + createGraphqlContextBuildingSpan, createGraphQLExecuteSpan, createGraphQLParseSpan, + createGraphQLSpan, createGraphQLValidateSpan, createHttpSpan, - createSubgraphExecuteFetchSpan, + startSubgraphExecuteFetchSpan as createSubgraphExecuteFetchSpan, createUpstreamHttpFetchSpan, + registerException, + setExecutionAttributesOnOperationSpan, + setGraphQLExecutionAttributes, + setGraphQLExecutionResultAttributes, + setGraphQLParseAttributes, + setGraphQLValidateAttributes, + setParamsAttributes, + setResponseAttributes, + setUpstreamFetchAttributes, + setUpstreamFetchResponseAttributes, } from './spans'; +import { tryContextManagerSetup } from './utils'; -type PrimitiveOrEvaluated = - | TExpectedResult - | ((input: TInput) => TExpectedResult); +type BooleanOrPredicate = + | boolean + | ((input: TInput) => boolean); interface OpenTelemetryGatewayPluginOptionsWithoutInit { /** * Whether to initialize the OpenTelemetry SDK (default: true). */ initializeNodeSDK: false; + /** + * Whether to rely on OTEL context api for span correlation. + * - `true`: the plugin will rely on OTEL context manager for span parenting. + * - `false`: the plugin will rely on request context for span parenting, + * which implies that parenting with user defined may be broken. + * + * By default, it is enabled if the registered Context Manager is compatible with async calls, + * or if it is possible to register an `AsyncLocalStorageContextManager`. + * + * Note: If `true`, an error is thrown if it fails to obtain an async calls compatible Context Manager. + */ + contextManager?: boolean; } interface OpenTelemetryGatewayPluginOptionsWithInit { @@ -68,6 +101,16 @@ interface OpenTelemetryGatewayPluginOptionsWithInit { * Does not apply when `initializeNodeSDK` is `false`. */ serviceName?: string; + /** + * Whether to rely on OTEL context api for span correlation. + * - `undefined` (default): the plugin will try to enable context manager if possible. + * - `false`: the plugin will rely on request context for span parenting, + * which implies that any user defined context and spans will be ignored. + * - `true`: the plugin will rely on AsyncLocalStorage based context manager. + * Note that `async_hooks` module must be available, otherwise provide a custom `ContextManager` instance. + * - `ContextManager`: rely on this provided `ContextManger` instance. + */ + contextManager?: ContextManager | boolean; } type OpenTelemetryGatewayPluginOptionsInit = @@ -96,6 +139,11 @@ export type OpenTelemetryGatewayPluginOptions = * See https://opentelemetry.io/docs/languages/js/propagation/ */ propagateContext?: boolean; + /** + * The level of verbosity of OTEL diagnostic logs. + * @default Verbose + */ + diagLevel?: DiagLogLevel; /** * Options to control which spans to create. * By default, all spans are enabled. @@ -103,41 +151,56 @@ export type OpenTelemetryGatewayPluginOptions = * You may specify a boolean value to enable/disable all spans, or a function to dynamically enable/disable spans based on the input. */ spans?: { + /** + * Enable/disable Spans of internal introspection queries in proxy mode (default: true). + */ + introspection?: BooleanOrPredicate<{ + executionRequest: ExecutionRequest; + subgraphName: string; + }>; /** * Enable/disable HTTP request spans (default: true). * * Disabling the HTTP span will also disable all other child spans. */ - http?: PrimitiveOrEvaluated>; + http?: BooleanOrPredicate<{ request: Request }>; + /** + * Enable/disable GraphQL operation spans (default: true). + * + * Disabling the GraphQL operation spa will also disable all other child spans. + */ + graphql?: BooleanOrPredicate; // FIXME: better type for graphql context + /** + * Enable/disable GraphQL context building phase (default: true). + */ + graphqlContextBuilding?: BooleanOrPredicate; // FIXME: better type for graphql context /** * Enable/disable GraphQL parse spans (default: true). */ - graphqlParse?: PrimitiveOrEvaluated>; + graphqlParse?: BooleanOrPredicate; // FIXME: better type for graphql context /** * Enable/disable GraphQL validate spans (default: true). */ - graphqlValidate?: PrimitiveOrEvaluated< - boolean, - OnValidateEventPayload - >; + graphqlValidate?: BooleanOrPredicate; /** * Enable/disable GraphQL execute spans (default: true). + * + * Disabling the GraphQL execute spans will also disable all other child spans. */ - graphqlExecute?: PrimitiveOrEvaluated< - boolean, - OnExecuteEventPayload - >; + graphqlExecute?: BooleanOrPredicate; /** * Enable/disable subgraph execute spans (default: true). + * + * Disabling the subgraph execute spans will also disable all other child spans. */ - subgraphExecute?: PrimitiveOrEvaluated< - boolean, - OnSubgraphExecutePayload - >; + subgraphExecute?: BooleanOrPredicate<{ + executionRequest: ExecutionRequest; + subgraphName: string; + }>; /** * Enable/disable upstream HTTP fetch calls spans (default: true). */ - upstreamFetch?: PrimitiveOrEvaluated>; + upstreamFetch?: BooleanOrPredicate; }; }; @@ -150,297 +213,602 @@ const HeadersTextMapGetter: TextMapGetter = { }, }; -export function useOpenTelemetry( - options: OpenTelemetryGatewayPluginOptions & { logger: Logger }, -): GatewayPlugin<{ +export type OpenTelemetryContextExtension = { opentelemetry: { tracer: Tracer; activeContext: () => Context; }; -}> { +}; + +type OtelState = { + otel: OtelContextStack; +}; + +type State = Partial< + HttpState & GraphQLState & GatewayState +>; + +export type OpenTelemetryPlugin = + GatewayPlugin & { + getOtelContext: (payload: { + request?: Request; + context?: any; + executionRequest?: ExecutionRequest; + }) => Context; + getTracer(): Tracer; + }; + +export function useOpenTelemetry( + options: OpenTelemetryGatewayPluginOptions & { + logger: GatewayConfigContext['logger']; + }, +): OpenTelemetryPlugin { const inheritContext = options.inheritContext ?? true; const propagateContext = options.propagateContext ?? true; + let useContextManager: boolean; - const requestContextMapping = new WeakMap(); - const contextMapping = new WeakMap(); - function getOTELContext( - context: any, - request?: Request, - ): Context | undefined { - let otelContext: Context | undefined; - if (request) { - otelContext = requestContextMapping.get(request); - } - if (!otelContext && context?.request) { - otelContext = requestContextMapping.get(context.request); - } - if (!otelContext && context) { - otelContext = contextMapping.get(context); - } - return otelContext; - } let tracer: Tracer; let spanProcessors: SpanProcessor[]; - let serviceName: string = 'Gateway'; let provider: WebTracerProvider; - let preparation$: Promise | undefined; + const { promise: asyncAttributes, resolve: resolveAsyncAttributes } = + createDeferred<{ [ATTR_SERVICE_VERSION]: string }>(); - return { - onYogaInit({ yoga }) { - preparation$ = fakePromise(undefined).then(async () => { + function isParentEnabled(state: State): boolean { + const parentState = getMostSpecificState(state); + return !parentState || !!parentState.otel; + } + + function getContext(state?: State): Context { + return useContextManager + ? context.active() + : (getMostSpecificState(state)?.otel?.current ?? ROOT_CONTEXT); + } + + const pluginLogger = options.logger.child({ plugin: 'OpenTelemetry' }); + + function init(): Promise { + if ('initializeNodeSDK' in options && options.initializeNodeSDK === false) { + if (options.contextManager === false) { + return fakePromise(false); + } + + if ( + options.contextManager === true || + options.contextManager == undefined + ) { + return tryContextManagerSetup(options.contextManager); + } + + if (context.setGlobalContextManager(options.contextManager)) { + return fakePromise(true); + } else { + throw new Error( + '[OTEL] The provided context manager failed to register, a context manger is already registered.', + ); + } + } + + const exporters$ = fakePromise( + containsOnlyValues(options.exporters) + ? options.exporters + : Promise.all(options.exporters), + ); + + const resource = new Resource( + { [SEMRESATTRS_SERVICE_NAME]: options.serviceName || 'Gateway' }, + asyncAttributes, + ); + + let contextManager$ = getContextManager(options.contextManager); + + setGlobalErrorHandler((err) => { + diag.error('Uncaught Error', err); + }); + + return exporters$ + .then((exporters) => { + spanProcessors = exporters; + provider = new WebTracerProvider({ resource, spanProcessors }); + return contextManager$; + }) + .then((contextManager) => { + provider.register({ contextManager }); + return !!useContextManager; + }); + } + + let preparation$: Promise; + preparation$ = init().then((contextManager) => { + const diaLogger = pluginLogger.child('otel-diag'); + diag.setLogger( + { + error: (message, ...args) => diaLogger.error(message, ...args), + warn: (message, ...args) => diaLogger.warn(message, ...args), + info: (message, ...args) => diaLogger.info(message, ...args), + debug: (message, ...args) => diaLogger.debug(message, ...args), + verbose: (message, ...args) => diaLogger.debug(message, ...args), + }, + options.diagLevel ?? DiagLogLevel.VERBOSE, + ); + useContextManager = contextManager; + tracer = options.tracer || trace.getTracer('gateway'); + preparation$ = fakePromise(); + }); + + return withState< + OpenTelemetryPlugin, + OtelState, + OtelState & { skipExecuteSpan?: true }, + OtelState + >((getState) => ({ + getTracer: () => tracer, + getOtelContext: ({ state }) => getContext(state), + instrumentation: { + request({ state: { forRequest }, request }, wrapped) { + if (!shouldTrace(options.spans?.http, { request })) { + return wrapped(); + } + + const url = getURL(request); + + return unfakePromise( + preparation$ + .then(() => { + const ctx = inheritContext + ? propagation.extract( + context.active(), + request.headers, + HeadersTextMapGetter, + ) + : context.active(); + + forRequest.otel = new OtelContextStack( + createHttpSpan({ ctx, request, tracer, url }).ctx, + ); + + if (useContextManager) { + wrapped = context.bind(forRequest.otel.current, wrapped); + } + + return wrapped(); + }) + .catch((error) => { + registerException(forRequest.otel?.current, error); + throw error; + }) + .finally(() => { + const ctx = forRequest.otel?.root; + ctx && trace.getSpan(ctx)?.end(); + }), + ); + }, + + operation( + { context: gqlCtx, state: { forOperation, ...parentState } }, + wrapped, + ) { if ( - !( - 'initializeNodeSDK' in options && - options.initializeNodeSDK === false - ) + !isParentEnabled(parentState) || + !shouldTrace(options.spans?.graphql, gqlCtx) + ) { + return wrapped(); + } + + const ctx = getContext(parentState); + forOperation.otel = new OtelContextStack( + createGraphQLSpan({ tracer, ctx }), + ); + + if (useContextManager) { + wrapped = context.bind(forOperation.otel.current, wrapped); + } + + return unfakePromise( + fakePromise() + .then(wrapped) + .catch((err) => { + registerException(forOperation.otel?.current, err); + throw err; + }) + .finally(() => trace.getSpan(forOperation.otel!.current)?.end()), + ); + }, + + context({ state, context: gqlCtx }, wrapped) { + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.graphqlContextBuilding, gqlCtx) ) { - if (options.serviceName) { - serviceName = options.serviceName; - } - if (options.exporters) { - spanProcessors = await Promise.all(options.exporters); - } - const webProvider = new WebTracerProvider({ - resource: new Resource({ - [SEMRESATTRS_SERVICE_NAME]: serviceName, - [ATTR_SERVICE_VERSION]: yoga.version, + return wrapped(); + } + + const { forOperation } = state; + const ctx = getContext(state); + forOperation.otel!.push( + createGraphqlContextBuildingSpan({ ctx, tracer }), + ); + + if (useContextManager) { + wrapped = context.bind(forOperation.otel!.current, wrapped); + } + + try { + wrapped(); + } catch (err) { + registerException(forOperation.otel?.current, err); + throw err; + } finally { + trace.getSpan(forOperation.otel!.current)?.end(); + forOperation.otel!.pop(); + } + }, + + parse({ state, context: gqlCtx }, wrapped) { + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.graphqlParse, gqlCtx) + ) { + return wrapped(); + } + + const ctx = getContext(state); + const { forOperation } = state; + forOperation.otel!.push(createGraphQLParseSpan({ ctx, tracer })); + + if (useContextManager) { + wrapped = context.bind(forOperation.otel!.current, wrapped); + } + + try { + wrapped(); + } catch (err) { + registerException(forOperation.otel!.current, err); + throw err; + } finally { + trace.getSpan(forOperation.otel!.current)?.end(); + forOperation.otel!.pop(); + } + }, + + validate({ state, context: gqlCtx }, wrapped) { + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.graphqlValidate, gqlCtx) + ) { + return wrapped(); + } + + const { forOperation } = state; + forOperation.otel!.push( + createGraphQLValidateSpan({ + ctx: getContext(state), + tracer, + query: gqlCtx.params.query?.trim(), + operationName: gqlCtx.params.operationName, + }), + ); + + if (useContextManager) { + wrapped = context.bind(forOperation.otel!.current, wrapped); + } + + try { + wrapped(); + } catch (err) { + registerException(forOperation.otel?.current, err); + throw err; + } finally { + trace.getSpan(forOperation.otel!.current)?.end(); + forOperation.otel!.pop(); + } + }, + + execute({ state, context: gqlCtx }, wrapped) { + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.graphqlExecute, gqlCtx) + ) { + // Other parenting skipping are marked by the fact that `otel` is undefined in the state + // For execute, there is no specific state, so we keep track of it here. + state.forOperation.skipExecuteSpan = true; + return wrapped(); + } + + const ctx = getContext(state); + const { forOperation } = state; + forOperation.otel?.push(createGraphQLExecuteSpan({ ctx, tracer })); + + if (useContextManager) { + wrapped = context.bind(forOperation.otel!.current, wrapped); + } + + return unfakePromise( + fakePromise() + .then(wrapped) + .catch((err) => { + registerException(forOperation.otel!.current, err); + throw err; + }) + .finally(() => { + trace.getSpan(forOperation.otel!.current)?.end(); + forOperation.otel!.pop(); }), - spanProcessors, - }); - webProvider.register(); - provider = webProvider; + ); + }, + + subgraphExecute( + { + state: { forSubgraphExecution, ...parentState }, + executionRequest, + subgraphName, + }, + wrapped, + ) { + const isIntrospection = !executionRequest.context.params; + + if ( + !isParentEnabled(parentState) || + parentState.forOperation?.skipExecuteSpan || + !shouldTrace( + isIntrospection + ? options.spans?.introspection + : options.spans?.subgraphExecute, + { + subgraphName, + executionRequest, + }, + ) + ) { + return wrapped(); } - const pluginLogger = options.logger.child({ plugin: 'OpenTelemetry' }); - const diagLogger = pluginLogger.child('OtelDiag'); - diag.setLogger( - { - error: (message, ...args) => diagLogger.error(message, ...args), - warn: (message, ...args) => diagLogger.warn(message, ...args), - info: (message, ...args) => diagLogger.info(message, ...args), - debug: (message, ...args) => diagLogger.debug(message, ...args), - verbose: (message, ...args) => diagLogger.debug(message, ...args), - }, - DiagLogLevel.VERBOSE, + + // If a subgraph execution request doesn't belong to a graphql operation + // (such as Introspection requests in proxy mode), we don't want to use the active context, + // we want the span to be in it's own trace. + const parentContext = isIntrospection + ? ROOT_CONTEXT + : getContext(parentState); + + forSubgraphExecution.otel = new OtelContextStack( + createSubgraphExecuteFetchSpan({ + ctx: parentContext, + tracer, + executionRequest, + subgraphName, + }), ); - setGlobalErrorHandler((err) => - diagLogger.error('Uncaught OTEL internal error', err), + + if (useContextManager) { + wrapped = context.bind(forSubgraphExecution.otel!.current, wrapped); + } + + return unfakePromise( + fakePromise() + .then(wrapped) + .catch((err) => { + registerException(forSubgraphExecution.otel!.current, err); + throw err; + }) + .finally(() => { + trace.getSpan(forSubgraphExecution.otel!.current)?.end(); + forSubgraphExecution.otel!.pop(); + }), ); - tracer = options.tracer || trace.getTracer('gateway'); - preparation$ = undefined; - }); + }, + + fetch({ state, executionRequest }, wrapped) { + if (isRetryExecutionRequest(executionRequest)) { + // Retry plugin overrides the executionRequest, by "forking" it so that multiple attempts + // of the same execution request can be made. + // We need to attach the fetch span to the original execution request, because attempt + // execution requests doesn't create a new `subgraph.execute` span. + state = getState(getRetryInfo(executionRequest)); + } + + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.upstreamFetch, executionRequest) + ) { + return wrapped(); + } + + const { forSubgraphExecution } = state; + const ctx = createUpstreamHttpFetchSpan({ + ctx: getContext(state), + tracer, + }); + + forSubgraphExecution?.otel!.push(ctx); + + if (useContextManager) { + wrapped = context.bind(ctx, wrapped); + } + + return unfakePromise( + fakePromise() + .then(wrapped) + .catch((err) => { + registerException(ctx, err); + throw err; + }) + .finally(() => { + trace.getSpan(ctx)?.end(); + forSubgraphExecution?.otel!.pop(); + }), + ); + }, + }, + + onYogaInit({ yoga }) { + resolveAsyncAttributes({ [ATTR_SERVICE_VERSION]: yoga.version }); }, - onContextBuilding({ extendContext, context }) { + + onEnveloped({ state, extendContext }) { extendContext({ opentelemetry: { tracer, - activeContext: () => - getOTELContext(context, context.request) ?? context['active'](), + activeContext: () => getContext(state), }, }); }, - onRequest(onRequestPayload) { - return handleMaybePromise( - () => preparation$, - () => { - const shouldTraceHttp = - typeof options.spans?.http === 'function' - ? options.spans.http(onRequestPayload) - : (options.spans?.http ?? true); - - if (shouldTraceHttp) { - const { request, url } = onRequestPayload; - const otelContext = inheritContext - ? propagation.extract( - context.active(), - request.headers, - HeadersTextMapGetter, - ) - : context.active(); - - const httpSpan = createHttpSpan({ - request, - url, - tracer, - otelContext, - }); - - const otelContextToSet = trace.setSpan(otelContext, httpSpan); - requestContextMapping.set(request, otelContextToSet); - contextMapping.set( - onRequestPayload.serverContext, - otelContextToSet, - ); - } - }, - ); - }, - onValidate(onValidatePayload) { - const shouldTraceValidate = - typeof options.spans?.graphqlValidate === 'function' - ? options.spans.graphqlValidate(onValidatePayload) - : (options.spans?.graphqlValidate ?? true); - - const { context } = onValidatePayload; - const otelContext = getOTELContext(context, context.request); - - if (shouldTraceValidate && otelContext) { - const { done } = createGraphQLValidateSpan({ - otelContext, - tracer, - query: context.params.query, - operationName: context.params.operationName, - }); - return ({ result }) => done(result); + onResponse({ response, state }) { + try { + state.forRequest.otel && + setResponseAttributes(state.forRequest.otel.root, response); + } catch (error) { + pluginLogger.error('Failed to end http span', { error }); } - return void 0; }, - onParse(onParsePayload) { - const shouldTracePrase = - typeof options.spans?.graphqlParse === 'function' - ? options.spans.graphqlParse(onParsePayload) - : (options.spans?.graphqlParse ?? true); - - const { context } = onParsePayload; - const otelContext = getOTELContext(context, context.request); - - if (shouldTracePrase && otelContext) { - const { done } = createGraphQLParseSpan({ - otelContext, - tracer, - query: context.params.query, - operationName: context.params.operationName, - }); - return ({ result }) => done(result); + onParams({ state, context: gqlCtx, params }) { + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.graphql, gqlCtx) + ) { + return; } - return void 0; + + const ctx = getContext(state); + setParamsAttributes({ ctx, params }); }, - onExecute(onExecuteArgs) { - const shouldTraceExecute = - typeof options.spans?.graphqlExecute === 'function' - ? options.spans.graphqlExecute(onExecuteArgs) - : (options.spans?.graphqlExecute ?? true); - - const { args } = onExecuteArgs; - const otelContext = getOTELContext( - args.contextValue, - args.contextValue?.request, - ); - if (shouldTraceExecute && otelContext) { - const { done } = createGraphQLExecuteSpan({ - args, - otelContext, - tracer, + onParse({ state, context: gqlCtx }) { + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.graphqlParse, gqlCtx) + ) { + return; + } + + return ({ result }) => { + setGraphQLParseAttributes({ + ctx: getContext(state), + operationName: gqlCtx.params.operationName, + query: gqlCtx.params.query?.trim(), + result, }); + }; + }, - return { - onExecuteDone: ({ result }) => { - if (!isAsyncIterable(result)) { - done(result); - } - }, - }; + onValidate({ state, context: gqlCtx }) { + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.graphqlValidate, gqlCtx) + ) { + return; } - return void 0; + + return ({ result }) => { + setGraphQLValidateAttributes({ ctx: getContext(state), result }); + }; }, - onSubgraphExecute(onSubgraphPayload) { - const shouldTraceSubgraphExecute = - typeof options.spans?.subgraphExecute === 'function' - ? options.spans.subgraphExecute(onSubgraphPayload) - : (options.spans?.subgraphExecute ?? true); - - const otelContext = getOTELContext( - onSubgraphPayload.executionRequest?.context, - onSubgraphPayload.executionRequest?.context?.request, - ); - if (shouldTraceSubgraphExecute && otelContext) { - const { subgraphName, executionRequest } = onSubgraphPayload; - const { done } = createSubgraphExecuteFetchSpan({ - otelContext, - tracer, - executionRequest, - subgraphName, - }); + onExecute({ state, args }) { + if (!isParentEnabled(state)) { + return; + } + + setExecutionAttributesOnOperationSpan( + state.forOperation.otel!.root, + args, + ); - return done; + if (state.forOperation.skipExecuteSpan) { + return; } - return void 0; + + const ctx = getContext(state); + setGraphQLExecutionAttributes({ ctx, args }); + + return { + onExecuteDone({ result }) { + setGraphQLExecutionResultAttributes({ ctx, result }); + }, + }; }, - onFetch(onFetchPayload) { - const shouldTraceFetch = - typeof options.spans?.upstreamFetch === 'function' - ? options.spans.upstreamFetch(onFetchPayload) - : (options.spans?.upstreamFetch ?? true); - - const { - context, - options: fetchOptions, - url, - setOptions, - executionRequest, - } = onFetchPayload; - - const otelContext = getOTELContext(context, context?.request); - if (shouldTraceFetch && otelContext) { - if (propagateContext) { - const reqHeaders = getHeadersObj(fetchOptions.headers || {}); - propagation.inject(otelContext, reqHeaders); - - setOptions({ - ...fetchOptions, - headers: reqHeaders, - }); - } - const { done } = createUpstreamHttpFetchSpan({ - otelContext, - tracer, - url, - fetchOptions, - executionRequest, - }); + onFetch(payload) { + const { url, setFetchFn, fetchFn, executionRequest } = payload; + let { state } = payload; - return (fetchDonePayload) => done(fetchDonePayload.response); + if (executionRequest && isRetryExecutionRequest(executionRequest)) { + // Retry plugin overrides the executionRequest, by "forking" it so that multiple attempts + // of the same execution request can be made. + // We need to attach the fetch span to the original execution request, because attempt + // execution requests doesn't create a new `subgraph.execute` span. + state = getState(getRetryInfo(executionRequest)); } - return void 0; - }, - onResponse({ request, response, serverContext }) { - const otelContext = getOTELContext(serverContext, request); - if (!otelContext) { + + // We want to always propagate context, even if we are not tracing the fetch phase. + if (propagateContext) { + setFetchFn((url, options, ...args) => { + const reqHeaders = getHeadersObj(options?.headers || {}); + propagation.inject(getContext(state), reqHeaders); + return fetchFn(url, { ...options, headers: reqHeaders }, ...args); + }); + } + + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.upstreamFetch, executionRequest) + ) { return; } - const rootSpan = trace.getSpan(otelContext); + const ctx = getContext(state); - if (rootSpan) { - completeHttpSpan(rootSpan, response); - } + setUpstreamFetchAttributes({ + ctx, + url, + options: payload.options, + executionRequest, + }); - requestContextMapping.delete(request); + return ({ response }) => { + setUpstreamFetchResponseAttributes({ ctx, response }); + }; }, async onDispose() { - if (spanProcessors) { - await Promise.all( - spanProcessors.map((processor) => processor.forceFlush()), - ); + if (options.initializeNodeSDK) { + await provider?.forceFlush?.(); + await provider?.shutdown?.(); + + diag.disable(); + trace.disable(); + context.disable(); + propagation.disable(); } - await provider?.forceFlush?.(); + }, + })); +} - if (spanProcessors) { - spanProcessors.forEach((processor) => processor.shutdown()); - } +function containsOnlyValues( + maybePromises: MaybePromise[], +): maybePromises is T[] { + return !maybePromises.some(isPromise); +} - await provider?.shutdown?.(); +function shouldTrace( + value: BooleanOrPredicate | null | undefined, + args: Args, +): boolean { + if (value == null) { + return true; + } + if (typeof value === 'function') { + return value(args); + } + return value; +} - diag.disable(); - trace.disable(); - context.disable(); - propagation.disable(); - }, - }; +function getURL(request: Request) { + if ('parsedUrl' in request) { + // It is a `whatwg-node/fetch` request which already contains a parsed URL object + return request.parsedUrl as URL; + } + + return new URL(request.url, 'http://localhost'); // to be iso with whatwg-node/server behavior } diff --git a/packages/plugins/opentelemetry/src/spans.ts b/packages/plugins/opentelemetry/src/spans.ts index 11fc2afad..2aa776502 100644 --- a/packages/plugins/opentelemetry/src/spans.ts +++ b/packages/plugins/opentelemetry/src/spans.ts @@ -1,17 +1,23 @@ import { defaultPrintFn } from '@graphql-mesh/transport-common'; import { getOperationASTFromDocument, + isAsyncIterable, type ExecutionRequest, type ExecutionResult, } from '@graphql-tools/utils'; import { SpanKind, SpanStatusCode, + trace, type Context, - type Span, type Tracer, } from '@opentelemetry/api'; import type { ExecutionArgs } from 'graphql'; +import type { GraphQLParams } from 'graphql-yoga'; +import { + getRetryInfo, + isRetryExecutionRequest, +} from '../../../runtime/src/plugins/useUpstreamRetry'; import { SEMATTRS_GATEWAY_UPSTREAM_SUBGRAPH_NAME, SEMATTRS_GRAPHQL_DOCUMENT, @@ -30,90 +36,161 @@ import { } from './attributes'; export function createHttpSpan(input: { + ctx: Context; tracer: Tracer; request: Request; url: URL; - otelContext: Context; -}): Span { - const { url, request, tracer, otelContext } = input; - const path = url.pathname; - const userAgent = request.headers.get('user-agent'); - const ips = request.headers.get('x-forwarded-for'); - const method = request.method || 'GET'; - const host = url.host || request.headers.get('host'); - const hostname = url.hostname || host || 'localhost'; - const rootSpanName = `${method} ${path}`; - - return tracer.startSpan( - rootSpanName, +}): { ctx: Context } { + const { url, request, tracer } = input; + + const span = tracer.startSpan( + `${request.method || 'GET'} ${url.pathname}`, { attributes: { - [SEMATTRS_HTTP_METHOD]: method, + [SEMATTRS_HTTP_METHOD]: request.method || 'GET', [SEMATTRS_HTTP_URL]: request.url, - [SEMATTRS_HTTP_ROUTE]: path, + [SEMATTRS_HTTP_ROUTE]: url.pathname, [SEMATTRS_HTTP_SCHEME]: url.protocol, - [SEMATTRS_NET_HOST_NAME]: hostname, - [SEMATTRS_HTTP_HOST]: host || undefined, - [SEMATTRS_HTTP_CLIENT_IP]: ips?.split(',')[0], - [SEMATTRS_HTTP_USER_AGENT]: userAgent || undefined, + [SEMATTRS_NET_HOST_NAME]: + url.hostname || + url.host || + request.headers.get('host') || + 'localhost', + [SEMATTRS_HTTP_HOST]: + url.host || request.headers.get('host') || undefined, + [SEMATTRS_HTTP_CLIENT_IP]: request.headers + .get('x-forwarded-for') + ?.split(',')[0], + [SEMATTRS_HTTP_USER_AGENT]: + request.headers.get('user-agent') || undefined, }, kind: SpanKind.SERVER, }, - otelContext, + input.ctx, ); + + return { + ctx: trace.setSpan(input.ctx, span), + }; } -export function completeHttpSpan(span: Span, response: Response) { - span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, response.status); - span.setStatus({ - code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR, - message: response.ok ? undefined : response.statusText, - }); - span.end(); +export function setResponseAttributes(ctx: Context, response: Response) { + const span = trace.getSpan(ctx); + if (span) { + span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, response.status); + span.setStatus({ + code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR, + message: response.ok ? undefined : response.statusText, + }); + } } -export function createGraphQLParseSpan(input: { - otelContext: Context; +export function createGraphQLSpan(input: { + ctx: Context; tracer: Tracer; - query?: string; - operationName?: string; +}): Context { + const span = input.tracer.startSpan( + `graphql.operation`, + { kind: SpanKind.INTERNAL }, + input.ctx, + ); + + return trace.setSpan(input.ctx, span); +} + +export function setParamsAttributes(input: { + ctx: Context; + params: GraphQLParams; }) { - const parseSpan = input.tracer.startSpan( + const { ctx, params } = input; + const span = trace.getSpan(ctx); + if (!span) { + return; + } + + span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, params.query ?? ''); + span.setAttribute( + SEMATTRS_GRAPHQL_OPERATION_NAME, + params.operationName ?? 'Anonymous', + ); +} + +export function setExecutionAttributesOnOperationSpan( + ctx: Context, + args: ExecutionArgs, +) { + const span = trace.getSpan(ctx); + if (span) { + const operation = getOperationASTFromDocument( + args.document, + args.operationName || undefined, + ); + const operationName = operation.name?.value ?? 'Anonymous'; + const document = defaultPrintFn(args.document); + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_TYPE, operation.operation); + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_NAME, operationName); + span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, document); + span.updateName(`graphql.operation ${operationName}`); + } +} + +export function createGraphqlContextBuildingSpan(input: { + ctx: Context; + tracer: Tracer; +}): Context { + const span = input.tracer.startSpan( + 'graphql.context', + { kind: SpanKind.INTERNAL }, + input.ctx, + ); + + return trace.setSpan(input.ctx, span); +} + +export function createGraphQLParseSpan(input: { + ctx: Context; + tracer: Tracer; +}): Context { + const span = input.tracer.startSpan( 'graphql.parse', { - attributes: { - [SEMATTRS_GRAPHQL_DOCUMENT]: input.query, - [SEMATTRS_GRAPHQL_OPERATION_NAME]: input.operationName, - }, kind: SpanKind.INTERNAL, }, - input.otelContext, + input.ctx, ); - return { - parseSpan, - done: (result: any | Error | null) => { - if (result instanceof Error) { - parseSpan.setAttribute(SEMATTRS_GRAPHQL_ERROR_COUNT, 1); - parseSpan.recordException(result); - parseSpan.setStatus({ - code: SpanStatusCode.ERROR, - message: result.message, - }); - } - - parseSpan.end(); - }, - }; + return trace.setSpan(input.ctx, span); +} + +export function setGraphQLParseAttributes(input: { + ctx: Context; + query?: string; + operationName?: string; + result: unknown; +}) { + const span = trace.getSpan(input.ctx); + if (!span) { + return; + } + + span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, input.query ?? ''); + span.setAttribute( + SEMATTRS_GRAPHQL_OPERATION_NAME, + input.operationName ?? 'Anonymous', + ); + + if (input.result instanceof Error) { + span.setAttribute(SEMATTRS_GRAPHQL_ERROR_COUNT, 1); + } } export function createGraphQLValidateSpan(input: { - otelContext: Context; + ctx: Context; tracer: Tracer; query?: string; operationName?: string; -}) { - const validateSpan = input.tracer.startSpan( +}): Context { + const span = input.tracer.startSpan( 'graphql.validate', { attributes: { @@ -122,89 +199,107 @@ export function createGraphQLValidateSpan(input: { }, kind: SpanKind.INTERNAL, }, - input.otelContext, + input.ctx, ); + return trace.setSpan(input.ctx, span); +} - return { - validateSpan, - done: (result: any[] | readonly Error[]) => { - if (result instanceof Error) { - validateSpan.setStatus({ - code: SpanStatusCode.ERROR, - message: result.message, - }); - } else if (Array.isArray(result) && result.length > 0) { - validateSpan.setAttribute(SEMATTRS_GRAPHQL_ERROR_COUNT, result.length); - validateSpan.setStatus({ - code: SpanStatusCode.ERROR, - message: result.map((e) => e.message).join(', '), - }); - - for (const error in result) { - validateSpan.recordException(error); - } - } - - validateSpan.end(); - }, - }; +export function setGraphQLValidateAttributes(input: { + ctx: Context; + result: any[] | readonly Error[]; +}) { + const { result, ctx } = input; + const span = trace.getSpan(ctx); + if (!span) { + return; + } + + if (result instanceof Error) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: result.message, + }); + } else if (Array.isArray(result) && result.length > 0) { + span.setAttribute(SEMATTRS_GRAPHQL_ERROR_COUNT, result.length); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: result.map((e) => e.message).join(', '), + }); + + for (const error in result) { + span.recordException(error); + } + } } export function createGraphQLExecuteSpan(input: { - args: ExecutionArgs; - otelContext: Context; + ctx: Context; tracer: Tracer; -}) { - const operation = getOperationASTFromDocument( - input.args.document, - input.args.operationName || undefined, - ); - const executeSpan = input.tracer.startSpan( +}): Context { + const span = input.tracer.startSpan( 'graphql.execute', - { - attributes: { - [SEMATTRS_GRAPHQL_OPERATION_TYPE]: operation.operation, - [SEMATTRS_GRAPHQL_OPERATION_NAME]: - input.args.operationName || undefined, - [SEMATTRS_GRAPHQL_DOCUMENT]: defaultPrintFn(input.args.document), - }, - kind: SpanKind.INTERNAL, - }, - input.otelContext, + { kind: SpanKind.INTERNAL }, + input.ctx, ); - return { - executeSpan, - done: (result: ExecutionResult) => { - if (result.errors && result.errors.length > 0) { - executeSpan.setAttribute( - SEMATTRS_GRAPHQL_ERROR_COUNT, - result.errors.length, - ); - executeSpan.setStatus({ - code: SpanStatusCode.ERROR, - message: result.errors.map((e) => e.message).join(', '), - }); - - for (const error in result.errors) { - executeSpan.recordException(error); - } - } - - executeSpan.end(); - }, - }; + return trace.setSpan(input.ctx, span); } -export const subgraphExecReqSpanMap = new WeakMap(); +export function setGraphQLExecutionAttributes(input: { + ctx: Context; + args: ExecutionArgs; +}) { + const { ctx, args } = input; + const span = trace.getSpan(ctx); + if (!span) { + return; + } -export function createSubgraphExecuteFetchSpan(input: { - otelContext: Context; + const operation = getOperationASTFromDocument( + args.document, + args.operationName || undefined, + ); + const operationName = operation.name?.value ?? 'Anonymous'; + const document = defaultPrintFn(input.args.document); + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_TYPE, operation.operation); + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_NAME, operationName); + span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, document); +} + +export function setGraphQLExecutionResultAttributes(input: { + ctx: Context; + result: ExecutionResult | AsyncIterableIterator; +}) { + const { ctx, result } = input; + const span = trace.getSpan(ctx); + if (!span) { + return; + } + + if ( + !isAsyncIterable(result) && // FIXME: Handle async iterable too + result.errors && + result.errors.length > 0 + ) { + span.setAttribute(SEMATTRS_GRAPHQL_ERROR_COUNT, result.errors.length); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: result.errors.map((e) => e.message).join(', '), + }); + + for (const error of result.errors) { + span.recordException(error); + } + } +} + +export function startSubgraphExecuteFetchSpan(input: { + ctx: Context; tracer: Tracer; executionRequest: ExecutionRequest; subgraphName: string; -}) { - const subgraphExecuteSpan = input.tracer.startSpan( +}): Context { + const span = input.tracer.startSpan( `subgraph.execute (${input.subgraphName})`, { attributes: { @@ -220,69 +315,83 @@ export function createSubgraphExecuteFetchSpan(input: { }, kind: SpanKind.CLIENT, }, - input.otelContext, + input.ctx, ); - subgraphExecReqSpanMap.set(input.executionRequest, subgraphExecuteSpan); - - return { - done() { - subgraphExecuteSpan.end(); - }, - }; + return trace.setSpan(input.ctx, span); } export function createUpstreamHttpFetchSpan(input: { - otelContext: Context; + ctx: Context; tracer: Tracer; +}): Context { + const span = input.tracer.startSpan( + 'http.fetch', + { + attributes: {}, + kind: SpanKind.CLIENT, + }, + input.ctx, + ); + return trace.setSpan(input.ctx, span); +} + +export function setUpstreamFetchAttributes(input: { + ctx: Context; url: string; - fetchOptions: RequestInit; + options: RequestInit; executionRequest?: ExecutionRequest; }) { - const urlObj = new URL(input.url); - - const attributes = { - [SEMATTRS_HTTP_METHOD]: input.fetchOptions.method, - [SEMATTRS_HTTP_URL]: input.url, - [SEMATTRS_NET_HOST_NAME]: urlObj.hostname, - [SEMATTRS_HTTP_HOST]: urlObj.host, - [SEMATTRS_HTTP_ROUTE]: urlObj.pathname, - [SEMATTRS_HTTP_SCHEME]: urlObj.protocol, - }; - - let fetchSpan: Span | undefined; - let isOrigSpan: boolean; + const { ctx, url, options: fetchOptions } = input; + const span = trace.getSpan(ctx); + if (!span) { + return; + } - if (input.executionRequest) { - fetchSpan = subgraphExecReqSpanMap.get(input.executionRequest); - if (fetchSpan) { - isOrigSpan = false; - fetchSpan.setAttributes(attributes); + const urlObj = new URL(input.url); + span.setAttribute(SEMATTRS_HTTP_METHOD, fetchOptions.method ?? 'GET'); + span.setAttribute(SEMATTRS_HTTP_URL, url); + span.setAttribute(SEMATTRS_NET_HOST_NAME, urlObj.hostname); + span.setAttribute(SEMATTRS_HTTP_HOST, urlObj.host); + span.setAttribute(SEMATTRS_HTTP_ROUTE, urlObj.pathname); + span.setAttribute(SEMATTRS_HTTP_SCHEME, urlObj.protocol); + if ( + input.executionRequest && + isRetryExecutionRequest(input.executionRequest) + ) { + const { attempt } = getRetryInfo(input.executionRequest); + if (attempt > 0) { + // The resend attribute should only be present on second and subsequent retry attempt + // https://opentelemetry.io/docs/specs/semconv/http/http-spans/#http-request-retries-and-redirects + span.setAttribute('http.request.resend_count', attempt); } } +} + +export function setUpstreamFetchResponseAttributes(input: { + ctx: Context; + response: Response; +}) { + const { ctx, response } = input; + const span = trace.getSpan(ctx); + if (!span) { + return; + } - if (!fetchSpan) { - fetchSpan = input.tracer.startSpan( - 'http.fetch', - { - attributes, - kind: SpanKind.CLIENT, - }, - input.otelContext, - ); - isOrigSpan = true; + span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, response.status); + span.setStatus({ + code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR, + message: response.ok ? undefined : response.statusText, + }); +} + +export function registerException(ctx: Context | undefined, error: any) { + const span = ctx && trace.getSpan(ctx); + if (!span) { + return; } - return { - done: (response: Response) => { - fetchSpan.setAttribute(SEMATTRS_HTTP_STATUS_CODE, response.status); - fetchSpan.setStatus({ - code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR, - message: response.ok ? undefined : response.statusText, - }); - if (isOrigSpan) { - fetchSpan.end(); - } - }, - }; + const message = error?.message?.toString() ?? error?.toString(); + span.setStatus({ code: SpanStatusCode.ERROR, message }); + span.recordException(error); } diff --git a/packages/plugins/opentelemetry/src/utils.ts b/packages/plugins/opentelemetry/src/utils.ts new file mode 100644 index 000000000..bd2b8233e --- /dev/null +++ b/packages/plugins/opentelemetry/src/utils.ts @@ -0,0 +1,35 @@ +import { context } from '@opentelemetry/api'; +import { getContextManager } from './context'; + +export async function tryContextManagerSetup( + useContextManager: true | undefined, +): Promise { + if (await isContextManagerCompatibleWithAsync()) { + return true; + } + + const contextManager = await getContextManager(useContextManager); + + if (!contextManager) { + return false; + } + + if (!context.setGlobalContextManager(contextManager)) { + if (useContextManager) { + throw new Error( + '[OTEL] A Context Manager is already registered, but is not compatible with async calls.' + + ' Please use another context manager, such as `AsyncLocalStorageContextManager`.', + ); + } + } + + return true; +} + +export function isContextManagerCompatibleWithAsync(): Promise { + const symbol = Symbol(); + const root = context.active(); + return context.with(root.setValue(symbol, true), async () => { + return (context.active().getValue(symbol) as boolean) || false; + }); +} diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index afe32f5a5..c1409bbd7 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -1,25 +1,53 @@ +import { SpanStatusCode } from '@opentelemetry/api'; +import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; +import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; +import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { createSchema, createYoga } from 'graphql-yoga'; -import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'; +import { + afterAll, + beforeAll, + beforeEach, + describe, + expect, + it, + vi, +} from 'vitest'; +import type { OpenTelemetryContextExtension } from '../src/plugin'; +import { buildTestGateway, MockSpanExporter } from './utils'; let mockModule = vi.mock; if (globalThis.Bun) { mockModule = require('bun:test').mock.module; } const mockRegisterProvider = vi.fn(); +let gw: typeof import('../../../runtime/src'); describe('useOpenTelemetry', () => { + // WORKAROUND: Bun does replace already imported modules instances. We make a copy to have the real implementation + const TracerProvider = WebTracerProvider; mockModule('@opentelemetry/sdk-trace-web', () => ({ WebTracerProvider: vi.fn(() => ({ register: mockRegisterProvider })), })); - let gw: typeof import('../../../runtime/src'); + let traceProvider: WebTracerProvider; + const spanExporter = new MockSpanExporter(); beforeAll(async () => { gw = await import('../../../runtime/src'); + traceProvider = new TracerProvider({ + spanProcessors: [new SimpleSpanProcessor(spanExporter)], + }); + traceProvider.register({ + contextManager: new AsyncLocalStorageContextManager(), + }); + }); + afterAll(async () => { + traceProvider.shutdown?.(); }); beforeEach(() => { vi.clearAllMocks(); + spanExporter.reset(); }); - describe('when not passing a custom provider', () => { - it('initializes and starts a new provider', async () => { + describe('initialization', () => { + it('initializes and starts a new provider by default', async () => { const { useOpenTelemetry } = await import('../src'); await using upstream = createYoga({ schema: createSchema({ @@ -73,9 +101,7 @@ describe('useOpenTelemetry', () => { expect(body.data?.hello).toBe('World'); expect(mockRegisterProvider).toHaveBeenCalledTimes(1); }); - }); - describe('when passing a custom provider', () => { it('does not initialize a new provider and does not start the provided provider instance', async () => { const { useOpenTelemetry } = await import('../src'); await using upstream = createYoga({ @@ -128,4 +154,406 @@ describe('useOpenTelemetry', () => { expect(mockRegisterProvider).not.toHaveBeenCalled(); }); }); + + describe('tracing', () => { + describe.each([ + { name: 'with context manager', contextManager: undefined }, + { name: 'without context manager', contextManager: false as const }, + ])('$name', ({ contextManager }) => { + const buildTestGatewayForCtx: typeof buildTestGateway = (options) => + buildTestGateway({ + ...options, + options: { contextManager, ...options?.options }, + }); + + const expected = { + http: { + root: 'POST /graphql', + children: ['graphql.operation Anonymous'], + }, + graphql: { + root: 'graphql.operation Anonymous', + children: [ + 'graphql.parse', + 'graphql.validate', + 'graphql.context', + 'graphql.execute', + ], + }, + execute: { + root: 'graphql.execute', + children: ['subgraph.execute (upstream)'], + }, + subgraphExecute: { + root: 'subgraph.execute (upstream)', + children: ['http.fetch'], + }, + }; + + const allExpectedSpans: string[] = [ + expected.http.root, + ...Object.values(expected).flatMap(({ children }) => children), + ]; + + describe('span parenting', () => { + it('should register a complete span tree $name', async () => { + await using gateway = await buildTestGatewayForCtx(); + await gateway.query(); + + for (const { root, children } of Object.values(expected)) { + const spanTree = spanExporter.assertRoot(root); + children.forEach(spanTree.expectChild); + } + }); + + it('should allow to report custom spans', async () => { + const expectedCustomSpans = { + http: { root: 'POST /graphql', children: ['custom.request'] }, + graphql: { + root: 'graphql.operation Anonymous', + children: ['custom.operation'], + }, + parse: { root: 'graphql.parse', children: ['custom.parse'] }, + validate: { + root: 'graphql.validate', + children: ['custom.validate'], + }, + context: { root: 'graphql.context', children: ['custom.context'] }, + execute: { root: 'graphql.execute', children: ['custom.execute'] }, + subgraphExecute: { + root: 'subgraph.execute (upstream)', + children: ['custom.subgraph'], + }, + fetch: { root: 'http.fetch', children: ['custom.fetch'] }, + }; + + await using gateway = await buildTestGatewayForCtx({ + plugins: (otelPlugin) => { + const createSpan = + (name: string) => + ( + matcher: Parameters<(typeof otelPlugin)['getOtelContext']>[0], + ) => + otelPlugin + .getTracer() + .startSpan(name, {}, otelPlugin.getOtelContext(matcher)) + .end(); + + return [ + { + onRequest: createSpan('custom.request'), + onParams: createSpan('custom.operation'), + onParse: createSpan('custom.parse'), + onValidate: createSpan('custom.validate'), + onContextBuilding: createSpan('custom.context'), + onExecute: createSpan('custom.execute'), + onSubgraphExecute: createSpan('custom.subgraph'), + onFetch: createSpan('custom.fetch'), + }, + ]; + }, + }); + await gateway.query(); + + for (const { root, children } of Object.values(expectedCustomSpans)) { + const spanTree = spanExporter.assertRoot(root); + children.forEach(spanTree.expectChild); + } + }); + it('should allow to report custom spans using graphql context', async () => { + const expectedCustomSpans = { + parse: { root: 'graphql.parse', children: ['custom.parse'] }, + validate: { + root: 'graphql.validate', + children: ['custom.validate'], + }, + context: { root: 'graphql.context', children: ['custom.context'] }, + execute: { root: 'graphql.execute', children: ['custom.execute'] }, + }; + + await using gateway = await buildTestGatewayForCtx({ + plugins: () => { + const createSpan = + (name: string) => + ({ context: gqlCtx, executionRequest }: any) => { + const ctx: OpenTelemetryContextExtension = + gqlCtx ?? executionRequest?.context; + return ctx.opentelemetry.tracer + .startSpan(name, {}, ctx.opentelemetry.activeContext()) + .end(); + }; + + return [ + { + onParse: createSpan('custom.parse'), + onValidate: createSpan('custom.validate'), + onContextBuilding: createSpan('custom.context'), + onExecute: createSpan('custom.execute'), + }, + ]; + }, + }); + await gateway.query(); + + for (const { root, children } of Object.values(expectedCustomSpans)) { + const spanTree = spanExporter.assertRoot(root); + children.forEach(spanTree.expectChild); + } + }); + + it('should report retries of execution requests', async () => { + let attempts = 0; + await using gateway = await buildTestGatewayForCtx({ + gatewayOptions: { + logging: true, + upstreamRetry: { + maxRetries: 2, + retryDelay: 1, + retryDelayFactor: 1, + }, + }, + fetch: + (upstreamFetch) => + (...args) => { + attempts = (attempts + 1) % 3; + return attempts === 0 + ? upstreamFetch(...args) + : new Response('', { status: 500 }); + }, + }); + await gateway.query(); + const rootSpan = spanExporter.assertRoot('POST /graphql'); + const subgraphSpan = rootSpan + .expectChild('graphql.operation Anonymous') + .expectChild('graphql.execute') + .expectChild('subgraph.execute (upstream)'); + + for (let i = 0; i < 3; i++) { + const span = subgraphSpan.children[i]?.span; + expect(span).toBeDefined(); + expect(span!.name).toBe('http.fetch'); + if (i > 0) { + expect(span!.attributes).toMatchObject({ + 'http.request.resend_count': i, + }); + } + expect(span?.status.code).toBe( + i < 2 ? SpanStatusCode.ERROR : SpanStatusCode.OK, + ); + } + }); + }); + + describe('span configuration', () => { + it('should not trace http requests if disabled', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { + spans: { http: false, introspection: false }, + }, + }); + await gateway.query(); + + allExpectedSpans.forEach(spanExporter.assertNoSpanWithName); + }); + + it('should not trace graphql operation if disable', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { + spans: { graphql: false, introspection: false }, + }, + }); + await gateway.query(); + + const httpSpan = spanExporter.assertRoot(expected.http.root); + expected.http.children + .filter((name) => name != expected.graphql.root) + .forEach(httpSpan.expectChild); + + [ + expected.graphql.root, + ...expected.graphql.children, + ...expected.execute.children, + ...expected.subgraphExecute.children, + ].forEach(spanExporter.assertNoSpanWithName); + }); + + it('should not trace parse if disable', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { + spans: { graphqlParse: false }, + }, + }); + await gateway.query(); + + spanExporter.assertNoSpanWithName('graphql.parse'); + + allExpectedSpans + .filter((name) => name != 'graphql.parse') + .forEach(spanExporter.assertSpanWithName); + }); + + it('should not trace validate if disabled', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { + spans: { graphqlValidate: false }, + }, + }); + await gateway.query(); + + spanExporter.assertNoSpanWithName('graphql.validate'); + + allExpectedSpans + .filter((name) => name != 'graphql.validate') + .forEach(spanExporter.assertSpanWithName); + }); + + it('should not trace context building if disabled', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { + spans: { graphqlContextBuilding: false }, + }, + }); + await gateway.query(); + + spanExporter.assertNoSpanWithName('graphql.context'); + + allExpectedSpans + .filter((name) => name != 'graphql.context') + .forEach(spanExporter.assertSpanWithName); + }); + + it('should not trace execute if disabled', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { + spans: { graphqlExecute: false, introspection: false }, + }, + }); + await gateway.query(); + + [ + expected.execute.root, + ...expected.execute.children, + ...expected.subgraphExecute.children, + ].forEach(spanExporter.assertNoSpanWithName); + + [ + expected.http.root, + ...expected.http.children, + ...expected.graphql.children, + ] + .filter((name) => name != 'graphql.execute') + .forEach(spanExporter.assertSpanWithName); + }); + + it('should not trace subgraph execute if disabled', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { + spans: { subgraphExecute: false, introspection: false }, + }, + }); + await gateway.query(); + + [ + expected.subgraphExecute.root, + ...expected.subgraphExecute.children, + ].forEach(spanExporter.assertNoSpanWithName); + + [ + expected.http.root, + ...expected.http.children, + ...expected.graphql.children, + ...expected.execute.children, + ] + .filter((name) => name !== 'subgraph.execute (upstream)') + .forEach(spanExporter.assertSpanWithName); + }); + + it('should not trace fetch if disabled', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { + spans: { upstreamFetch: false }, + }, + }); + await gateway.query(); + + spanExporter.assertNoSpanWithName('http.fetch'); + + allExpectedSpans + .filter((name) => name !== 'http.fetch') + .forEach(spanExporter.assertSpanWithName); + }); + + it('should trace introspection query', async () => { + await using gateway = await buildTestGatewayForCtx({ + options: { spans: { http: false, introspection: true } }, + }); + await gateway.query(); + + const introspectionSpan = spanExporter.assertRoot( + expected.subgraphExecute.root, + ); + expected.subgraphExecute.children.forEach( + introspectionSpan.expectChild, + ); + expect( + ( + introspectionSpan.span.attributes['graphql.document'] as string + ).includes('Introspection'), + ); + + const introspectionSpans = introspectionSpan.descendants; + expect( + spanExporter.spans.filter((s) => !introspectionSpans.includes(s)), + ).toHaveLength(0); + }); + }); + }); + it('should allow to create custom spans without explicit context passing', async () => { + const expectedCustomSpans = { + http: { root: 'POST /graphql', children: ['custom.request'] }, + graphql: { + root: 'graphql.operation Anonymous', + children: ['custom.operation'], + }, + parse: { root: 'graphql.parse', children: ['custom.parse'] }, + validate: { + root: 'graphql.validate', + children: ['custom.validate'], + }, + context: { root: 'graphql.context', children: ['custom.context'] }, + execute: { root: 'graphql.execute', children: ['custom.execute'] }, + subgraphExecute: { + root: 'subgraph.execute (upstream)', + children: ['custom.subgraph'], + }, + fetch: { root: 'http.fetch', children: ['custom.fetch'] }, + }; + + await using gateway = await buildTestGateway({ + plugins: (otelPlugin) => { + const createSpan = (name: string) => () => + otelPlugin.getTracer().startSpan(name).end(); + + return [ + { + onRequest: createSpan('custom.request'), + onParams: createSpan('custom.operation'), + onParse: createSpan('custom.parse'), + onValidate: createSpan('custom.validate'), + onContextBuilding: createSpan('custom.context'), + onExecute: createSpan('custom.execute'), + onSubgraphExecute: createSpan('custom.subgraph'), + onFetch: createSpan('custom.fetch'), + }, + ]; + }, + }); + await gateway.query(); + + for (const { root, children } of Object.values(expectedCustomSpans)) { + const spanTree = spanExporter.assertRoot(root); + children.forEach(spanTree.expectChild); + } + }); + }); }); diff --git a/packages/plugins/opentelemetry/tests/utils.ts b/packages/plugins/opentelemetry/tests/utils.ts new file mode 100644 index 000000000..4c9e4ed70 --- /dev/null +++ b/packages/plugins/opentelemetry/tests/utils.ts @@ -0,0 +1,208 @@ +import { GatewayConfigProxy, GatewayPlugin } from '@graphql-hive/gateway'; +import { MeshFetch } from '@graphql-mesh/types'; +import { diag, TraceState } from '@opentelemetry/api'; +import { ExportResultCode, type ExportResult } from '@opentelemetry/core'; +import { + type ReadableSpan, + type SpanExporter, +} from '@opentelemetry/sdk-trace-base'; +import { AsyncDisposableStack } from '@whatwg-node/disposablestack'; +import { createSchema, createYoga, type GraphQLParams } from 'graphql-yoga'; +import { expect } from 'vitest'; +import type { + OpenTelemetryGatewayPluginOptions, + OpenTelemetryPlugin, +} from '../src/plugin'; + +export async function buildTestGateway( + options: { + gatewayOptions?: Omit; + options?: Partial< + Extract + >; + plugins?: ( + otelPlugin: OpenTelemetryPlugin, + ) => GatewayPlugin[]; + fetch?: (upstreamFetch: MeshFetch) => MeshFetch; + } = {}, +) { + const gw = await import('../../../runtime/src'); + const { useOpenTelemetry } = await import('../src'); + const stack = new AsyncDisposableStack(); + + const upstream = stack.use( + createYoga({ + schema: createSchema({ + typeDefs: /* GraphQL */ ` + type Query { + hello: String + } + `, + resolvers: { + Query: { + hello: () => 'World', + }, + }, + }), + logging: false, + }), + ); + + let otelPlugin: ReturnType; + + const gateway = stack.use( + gw.createGatewayRuntime({ + proxy: { + endpoint: 'https://example.com/graphql', + }, + maskedErrors: false, + plugins: (ctx) => { + otelPlugin = useOpenTelemetry({ + initializeNodeSDK: false, + ...ctx, + ...options.options, + }); + return [ + gw.useCustomFetch( + // @ts-expect-error TODO: MeshFetch is not compatible with @whatwg-node/server fetch + options.fetch ? options.fetch(upstream.fetch) : upstream.fetch, + ), + otelPlugin, + ...(options.plugins?.(otelPlugin) ?? []), + ]; + }, + logging: false, + ...options.gatewayOptions, + }), + ); + + return { + otelPlugin: otelPlugin!, + query: async ( + body: GraphQLParams = { + query: /* GraphQL */ ` + query { + hello + } + `, + }, + ) => { + const response = await gateway.fetch('http://localhost:4000/graphql', { + method: 'POST', + headers: { + 'content-type': 'application/json', + }, + body: JSON.stringify(body), + }); + return response.json(); + }, + [Symbol.asyncDispose]: () => { + diag.disable(); + return stack.disposeAsync(); + }, + }; +} + +export class MockSpanExporter implements SpanExporter { + spans: Span[]; + + constructor() { + this.spans = []; + } + + export( + spans: ReadableSpan[], + resultCallback: (result: ExportResult) => void, + ): void { + this.spans.push( + ...spans.map((span) => ({ + ...span, + traceId: span.spanContext().traceId, + traceState: span.spanContext().traceState, + id: span.spanContext().spanId, + })), + ); + setTimeout(() => resultCallback({ code: ExportResultCode.SUCCESS }), 0); + } + shutdown() { + this.reset(); + return Promise.resolve(); + } + forceFlush() { + this.reset(); + return Promise.resolve(); + } + reset() { + this.spans = []; + } + + buildSpanNode = (span: Span): TraceTreeNode => + new TraceTreeNode( + span, + this.spans + .filter(({ parentSpanId }) => parentSpanId === span.id) + .map(this.buildSpanNode), + ); + + assertRoot(rootName: string): TraceTreeNode { + const root = this.spans.find(({ name }) => name === rootName); + if (!root) { + console.error( + `failed to find "${rootName}". Spans are: `, + this.toString(), + ); + throw new Error( + `No root span found with name '${rootName}'. Span names are: ${this.toString()}`, + ); + } + return this.buildSpanNode(root); + } + + assertNoSpanWithName = (name: string) => { + expect(this.spans.map(({ name }) => name)).not.toContain(name); + }; + + assertSpanWithName = (name: string) => { + expect(this.spans.map(({ name }) => name)).toContain(name); + }; + + toString() { + return this.spans.map((span) => span.name); + } +} + +export class TraceTreeNode { + constructor( + public span: Span, + public children: TraceTreeNode[], + ) {} + + expectChild = (name: string): TraceTreeNode => { + const child = this.children.find((child) => child.span.name === name); + if (!child) { + console.error(`No child span with name "${name}" in:\n`, this.toString()); + throw new Error( + `No child span found with name '${name}'. Children names are: ${this.children.map((child) => `\n\t- ${child.span.name}`)}`, + ); + } + return child; + }; + + get length() { + return this.children.length; + } + + get descendants(): Span[] { + return [this.span, ...this.children.flatMap((c) => c.descendants)]; + } + + toString(prefix = '') { + return `${prefix}-- ${this.span.name}\n${this.children.map((c): string => c.toString(prefix + ' |')).join('')}`; + } +} + +export type Span = ReadableSpan & { + traceId: string; + traceState?: TraceState; + id: string; +}; diff --git a/packages/runtime/src/index.ts b/packages/runtime/src/index.ts index 9f2425e07..b110fa61a 100644 --- a/packages/runtime/src/index.ts +++ b/packages/runtime/src/index.ts @@ -13,7 +13,11 @@ export { getSdkRequesterForUnifiedGraph, getExecutorForUnifiedGraph, } from '@graphql-mesh/fusion-runtime'; -export { useUpstreamRetry } from './plugins/useUpstreamRetry'; +export { + useUpstreamRetry, + getRetryInfo, + isRetryExecutionRequest, +} from './plugins/useUpstreamRetry'; export { useUpstreamTimeout } from './plugins/useUpstreamTimeout'; export { getGraphQLWSOptions } from './getGraphQLWSOptions'; export * from './getDefaultLogger'; diff --git a/packages/runtime/src/plugins/useUpstreamRetry.ts b/packages/runtime/src/plugins/useUpstreamRetry.ts index b6f91aa3d..d64183063 100644 --- a/packages/runtime/src/plugins/useUpstreamRetry.ts +++ b/packages/runtime/src/plugins/useUpstreamRetry.ts @@ -6,8 +6,20 @@ import { MaybeAsyncIterable, } from '@graphql-tools/utils'; import { handleMaybePromise, MaybePromise } from '@whatwg-node/promise-helpers'; +import { GraphQLResolveInfo } from 'graphql'; import { GatewayPlugin } from '../types'; +export const RETRY_SYMBOL = Symbol.for('@hive-gateway/runtime/upstreamRetry'); + +type RetryExecutionRequest = ExecutionRequest & { + [RETRY_SYMBOL]: RetryInfo; +}; + +type RetryInfo = { + attempt: number; + executionRequest: ExecutionRequest; +}; + export interface UpstreamRetryOptions { /** * The maximum number of retries to attempt. @@ -57,11 +69,14 @@ export function useUpstreamRetry>( return { onSubgraphExecute({ subgraphName, - executionRequest, + executionRequest: subgraphExecutionRequest, executor, setExecutor, }) { - const optsForReq = retryOptions({ subgraphName, executionRequest }); + const optsForReq = retryOptions({ + subgraphName, + executionRequest: subgraphExecutionRequest, + }); if (optsForReq) { const { maxRetries, @@ -91,7 +106,7 @@ export function useUpstreamRetry>( }, } = optsForReq; if (maxRetries > 0) { - setExecutor(function (executionRequest: ExecutionRequest) { + setExecutor(function (executorExecutionRequest: ExecutionRequest) { let attemptsLeft = maxRetries + 1; let executionResult: MaybeAsyncIterable; let currRetryDelay = retryDelay; @@ -104,15 +119,31 @@ export function useUpstreamRetry>( } const requestTime = Date.now(); attemptsLeft--; + + const attemptExecutionRequest: RetryExecutionRequest = { + ...executorExecutionRequest, + [RETRY_SYMBOL]: { + attempt: maxRetries - attemptsLeft, + executionRequest: executorExecutionRequest, + }, + }; + attemptExecutionRequest.info = { + ...executorExecutionRequest.info, + executionRequest: attemptExecutionRequest, + } as GraphQLResolveInfo; + return handleMaybePromise( - () => executor(executionRequest), + () => { + return executor(attemptExecutionRequest); + }, (currRes) => { executionResult = currRes; let retryAfterSecondsFromHeader: number | undefined; - const response = - executionRequestResponseMap.get(executionRequest); + const response = executionRequestResponseMap.get( + attemptExecutionRequest, + ); // Remove the response from the map after used so we don't see it again - executionRequestResponseMap.delete(executionRequest); + executionRequestResponseMap.delete(attemptExecutionRequest); const retryAfterHeader = response?.headers.get('Retry-After'); if (retryAfterHeader) { @@ -130,7 +161,7 @@ export function useUpstreamRetry>( currRetryDelay * retryDelayFactor; if ( shouldRetry({ - executionRequest, + executionRequest: attemptExecutionRequest, executionResult, response, }) @@ -184,3 +215,15 @@ export function useUpstreamRetry>( }, }; } + +export function isRetryExecutionRequest( + executionRequest?: ExecutionRequest, +): executionRequest is RetryExecutionRequest { + return !!(executionRequest as any)?.[RETRY_SYMBOL]; +} + +export function getRetryInfo( + executionRequest: RetryExecutionRequest, +): RetryInfo { + return executionRequest[RETRY_SYMBOL]; +} diff --git a/packages/runtime/src/plugins/useUpstreamTimeout.ts b/packages/runtime/src/plugins/useUpstreamTimeout.ts index 9d42727d8..708c646ee 100644 --- a/packages/runtime/src/plugins/useUpstreamTimeout.ts +++ b/packages/runtime/src/plugins/useUpstreamTimeout.ts @@ -66,11 +66,8 @@ export function useUpstreamTimeout>( timeoutSignal.addEventListener('abort', rejectDeferred, { once: true, }); - const combinedSignal = abortSignalAny(signals); - const res$ = executor({ - ...executionRequest, - signal: combinedSignal, - }); + executionRequest.signal = abortSignalAny(signals); + const res$ = executor(executionRequest); if (!isPromise(res$)) { return res$; } diff --git a/yarn.lock b/yarn.lock index 053eaf902..a6fde72a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2610,7 +2610,17 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.10, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.10, @babel/types@npm:^7.27.1, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.27.1 + resolution: "@babel/types@npm:7.27.1" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 + languageName: node + linkType: hard + +"@babel/types@npm:^7.27.3": version: 7.27.3 resolution: "@babel/types@npm:7.27.3" dependencies: @@ -4788,6 +4798,7 @@ __metadata: "@graphql-mesh/utils": "npm:^0.104.5" "@graphql-tools/utils": "npm:^10.8.1" "@opentelemetry/api": "npm:^1.9.0" + "@opentelemetry/context-async-hooks": "npm:^1.30.0" "@opentelemetry/core": "npm:^1.30.0" "@opentelemetry/exporter-trace-otlp-grpc": "npm:^0.57.0" "@opentelemetry/exporter-trace-otlp-http": "npm:^0.57.0" @@ -4797,7 +4808,8 @@ __metadata: "@opentelemetry/sdk-trace-base": "npm:^1.29.0" "@opentelemetry/sdk-trace-web": "npm:^1.29.0" "@opentelemetry/semantic-conventions": "npm:^1.28.0" - "@whatwg-node/promise-helpers": "npm:^1.3.0" + "@whatwg-node/promise-helpers": "npm:1.3.0" + "@whatwg-node/server": "npm:^0.10.0" graphql: "npm:^16.9.0" graphql-yoga: "npm:^5.15.1" pkgroll: "npm:2.14.3" @@ -6881,6 +6893,15 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/context-async-hooks@npm:^1.30.0": + version: 1.30.1 + resolution: "@opentelemetry/context-async-hooks@npm:1.30.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/3e8114d360060a5225226d2fcd8df08cd542246003790a7f011c0774bc60b8a931f46f4c6673f3977a7d9bba717de6ee028cae51b752c2567053d7f46ed3eba3 + languageName: node + linkType: hard + "@opentelemetry/core@npm:1.29.0": version: 1.29.0 resolution: "@opentelemetry/core@npm:1.29.0" @@ -9467,6 +9488,15 @@ __metadata: languageName: node linkType: hard +"@whatwg-node/promise-helpers@npm:1.3.0": + version: 1.3.0 + resolution: "@whatwg-node/promise-helpers@npm:1.3.0" + dependencies: + tslib: "npm:^2.6.3" + checksum: 10c0/79b3d4fd264a7ce82fe977690191bade5c6da50f085c63bf1b548c2066c7bb9ccb9088ad064fbb0ff8da9bea7b336a527973556d8475642bac639e75bedec7ea + languageName: node + linkType: hard + "@whatwg-node/promise-helpers@npm:^1.0.0, @whatwg-node/promise-helpers@npm:^1.2.0, @whatwg-node/promise-helpers@npm:^1.2.1, @whatwg-node/promise-helpers@npm:^1.2.4, @whatwg-node/promise-helpers@npm:^1.2.5, @whatwg-node/promise-helpers@npm:^1.3.0, @whatwg-node/promise-helpers@npm:^1.3.1, @whatwg-node/promise-helpers@npm:^1.3.2": version: 1.3.2 resolution: "@whatwg-node/promise-helpers@npm:1.3.2" @@ -9487,7 +9517,20 @@ __metadata: languageName: node linkType: hard -"@whatwg-node/server@npm:^0.10.0, @whatwg-node/server@npm:^0.10.10, @whatwg-node/server@npm:^0.10.5": +"@whatwg-node/server@npm:^0.10.0, @whatwg-node/server@npm:^0.10.5": + version: 0.10.9 + resolution: "@whatwg-node/server@npm:0.10.9" + dependencies: + "@envelop/instrumentation": "npm:^1.0.0" + "@whatwg-node/disposablestack": "npm:^0.0.6" + "@whatwg-node/fetch": "npm:^0.10.8" + "@whatwg-node/promise-helpers": "npm:^1.3.2" + tslib: "npm:^2.6.3" + checksum: 10c0/aac2a59d7b96904d5b78b888d9bea706b7b38ba8ed30b62e8ffb8dea65454c0baaf3f8a52c768fbfe3b8a2bab803e136bbf0248f31308ee195e0f4aba2f5a2e7 + languageName: node + linkType: hard + +"@whatwg-node/server@npm:^0.10.10": version: 0.10.10 resolution: "@whatwg-node/server@npm:0.10.10" dependencies: @@ -14221,7 +14264,7 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.10.1, get-tsconfig@npm:^4.7.5, get-tsconfig@npm:^4.7.6, get-tsconfig@npm:^4.8.1": +"get-tsconfig@npm:^4.10.1": version: 4.10.1 resolution: "get-tsconfig@npm:4.10.1" dependencies: @@ -14230,6 +14273,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.7.5, get-tsconfig@npm:^4.7.6, get-tsconfig@npm:^4.8.1": + version: 4.10.0 + resolution: "get-tsconfig@npm:4.10.0" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/c9b5572c5118923c491c04285c73bd55b19e214992af957c502a3be0fc0043bb421386ffd45ca3433c0a7fba81221ca300479e8393960acf15d0ed4563f38a86 + languageName: node + linkType: hard + "get-uri@npm:^6.0.1": version: 6.0.4 resolution: "get-uri@npm:6.0.4" From ceb07a61f6f1c7ca345df2c23860950e5152288e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 27 Mar 2025 13:25:20 +0000 Subject: [PATCH 02/60] chore(dependencies): updated changesets for modified dependencies --- ...@graphql-mesh_plugin-opentelemetry-956-dependencies.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md new file mode 100644 index 000000000..1debfaea6 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md @@ -0,0 +1,8 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +dependencies updates: + +- Updated dependency [`@whatwg-node/promise-helpers@1.3.0` ↗︎](https://www.npmjs.com/package/@whatwg-node/promise-helpers/v/1.3.0) (from `^1.3.0`, in `dependencies`) +- Added dependency [`@opentelemetry/context-async-hooks@^1.30.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/1.30.0) (to `dependencies`) From 732c6f5c82fdf6b730109fbc7c05c69da8ce6fb4 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Thu, 27 Mar 2025 17:08:54 +0100 Subject: [PATCH 03/60] feat(opentelemetry): remove Azure exporter (#957) Co-authored-by: github-actions[bot] --- ...h_plugin-opentelemetry-957-dependencies.md | 7 + .changeset/tiny-monkeys-bake.md | 5 + packages/plugins/opentelemetry/package.json | 1 - .../plugins/opentelemetry/src/processors.ts | 21 --- yarn.lock | 126 +----------------- 5 files changed, 19 insertions(+), 141 deletions(-) create mode 100644 .changeset/@graphql-mesh_plugin-opentelemetry-957-dependencies.md create mode 100644 .changeset/tiny-monkeys-bake.md diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-957-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-957-dependencies.md new file mode 100644 index 000000000..042730193 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-957-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +dependencies updates: + +- Removed dependency [`@azure/monitor-opentelemetry-exporter@^1.0.0-beta.27` ↗︎](https://www.npmjs.com/package/@azure/monitor-opentelemetry-exporter/v/1.0.0) (from `dependencies`) diff --git a/.changeset/tiny-monkeys-bake.md b/.changeset/tiny-monkeys-bake.md new file mode 100644 index 000000000..fc169f671 --- /dev/null +++ b/.changeset/tiny-monkeys-bake.md @@ -0,0 +1,5 @@ +--- +'@graphql-mesh/plugin-opentelemetry': major +--- + +**Breaking Change**: Removal of the Azure exporter (`createAzureMonitorExporter`). Please use `@azure/monitor-opentelemetry-exporter` directly instead. diff --git a/packages/plugins/opentelemetry/package.json b/packages/plugins/opentelemetry/package.json index 3c2958286..3aa83e019 100644 --- a/packages/plugins/opentelemetry/package.json +++ b/packages/plugins/opentelemetry/package.json @@ -42,7 +42,6 @@ "graphql": "^15.9.0 || ^16.9.0" }, "dependencies": { - "@azure/monitor-opentelemetry-exporter": "^1.0.0-beta.27", "@graphql-hive/gateway-runtime": "workspace:^", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/transport-common": "workspace:^", diff --git a/packages/plugins/opentelemetry/src/processors.ts b/packages/plugins/opentelemetry/src/processors.ts index b98c96874..ce548603b 100644 --- a/packages/plugins/opentelemetry/src/processors.ts +++ b/packages/plugins/opentelemetry/src/processors.ts @@ -1,4 +1,3 @@ -import type { AzureMonitorExporterOptions } from '@azure/monitor-opentelemetry-exporter'; import { OTLPTraceExporter as OtlpHttpExporter } from '@opentelemetry/exporter-trace-otlp-http'; import { ZipkinExporter, @@ -105,23 +104,3 @@ export function createOtlpGrpcExporter( }, ); } - -export function createAzureMonitorExporter( - config: AzureMonitorExporterOptions, - batchingConfig?: BatchingConfig, -): MaybePromise { - return handleMaybePromise( - () => - loadExporterLazily( - 'Azure Monitor', - '@azure/monitor-opentelemetry-exporter', - 'AzureMonitorTraceExporter', - ), - (AzureMonitorTraceExporter) => { - return resolveBatchingConfig( - new AzureMonitorTraceExporter(config), - batchingConfig, - ); - }, - ); -} diff --git a/yarn.lock b/yarn.lock index a6fde72a8..28f0ab36d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1023,106 +1023,6 @@ __metadata: languageName: node linkType: hard -"@azure/abort-controller@npm:^2.0.0": - version: 2.1.2 - resolution: "@azure/abort-controller@npm:2.1.2" - dependencies: - tslib: "npm:^2.6.2" - checksum: 10c0/3771b6820e33ebb56e79c7c68e2288296b8c2529556fbd29cf4cf2fbff7776e7ce1120072972d8df9f1bf50e2c3224d71a7565362b589595563f710b8c3d7b79 - languageName: node - linkType: hard - -"@azure/core-auth@npm:^1.4.0, @azure/core-auth@npm:^1.8.0, @azure/core-auth@npm:^1.9.0": - version: 1.9.0 - resolution: "@azure/core-auth@npm:1.9.0" - dependencies: - "@azure/abort-controller": "npm:^2.0.0" - "@azure/core-util": "npm:^1.11.0" - tslib: "npm:^2.6.2" - checksum: 10c0/b7d8f33b81a8c9a76531acacc7af63d888429f0d763bb1ab8e28e91ddbf1626fc19cf8ca74f79c39b0a3e5acb315bdc4c4276fb979816f315712ea1bd611273d - languageName: node - linkType: hard - -"@azure/core-client@npm:^1.9.2": - version: 1.9.4 - resolution: "@azure/core-client@npm:1.9.4" - dependencies: - "@azure/abort-controller": "npm:^2.0.0" - "@azure/core-auth": "npm:^1.4.0" - "@azure/core-rest-pipeline": "npm:^1.20.0" - "@azure/core-tracing": "npm:^1.0.0" - "@azure/core-util": "npm:^1.6.1" - "@azure/logger": "npm:^1.0.0" - tslib: "npm:^2.6.2" - checksum: 10c0/c38c494c0bf085a89720d97c5bfc098cd1a2bbc5b9c41f8c32ecf2f3b81b476af1afe2f0d996d7e23900581415306e59280d507410bf0aa80804e0e411b8a2be - languageName: node - linkType: hard - -"@azure/core-rest-pipeline@npm:^1.19.0, @azure/core-rest-pipeline@npm:^1.20.0": - version: 1.20.0 - resolution: "@azure/core-rest-pipeline@npm:1.20.0" - dependencies: - "@azure/abort-controller": "npm:^2.0.0" - "@azure/core-auth": "npm:^1.8.0" - "@azure/core-tracing": "npm:^1.0.1" - "@azure/core-util": "npm:^1.11.0" - "@azure/logger": "npm:^1.0.0" - "@typespec/ts-http-runtime": "npm:^0.2.2" - tslib: "npm:^2.6.2" - checksum: 10c0/d82094805fad3ef7b5c2646c21e3fc62ff9534806bfc9840a9439244800cdb3ea7e539f40f5077e7c4db2656f882d8a56ea736e81167ee39dd9f426919fe72f2 - languageName: node - linkType: hard - -"@azure/core-tracing@npm:^1.0.0, @azure/core-tracing@npm:^1.0.1": - version: 1.2.0 - resolution: "@azure/core-tracing@npm:1.2.0" - dependencies: - tslib: "npm:^2.6.2" - checksum: 10c0/7cd114b3c11730a1b8b71d89b64f9d033dfe0710f2364ef65645683381e2701173c08ff8625a0b0bc65bb3c3e0de46c80fdb2735e37652425489b65a283f043d - languageName: node - linkType: hard - -"@azure/core-util@npm:^1.11.0, @azure/core-util@npm:^1.6.1": - version: 1.12.0 - resolution: "@azure/core-util@npm:1.12.0" - dependencies: - "@azure/abort-controller": "npm:^2.0.0" - "@typespec/ts-http-runtime": "npm:^0.2.2" - tslib: "npm:^2.6.2" - checksum: 10c0/9335e619078781a14c616840125deaaaef89198d9c99e6c9cd4452e9b18d4f95823246da4b8277ba186647e05ebcd88b419372616d1acad020c0172340ae02e5 - languageName: node - linkType: hard - -"@azure/logger@npm:^1.0.0": - version: 1.2.0 - resolution: "@azure/logger@npm:1.2.0" - dependencies: - "@typespec/ts-http-runtime": "npm:^0.2.2" - tslib: "npm:^2.6.2" - checksum: 10c0/a04693423143204d25e82bde1c57ddb53456fd00be0dbd91d1b078b0e17a1d564ababfd92467d9e51e201a0a756c6611918d7207b17bc4feb417885b80770ecd - languageName: node - linkType: hard - -"@azure/monitor-opentelemetry-exporter@npm:^1.0.0-beta.27": - version: 1.0.0-beta.31 - resolution: "@azure/monitor-opentelemetry-exporter@npm:1.0.0-beta.31" - dependencies: - "@azure/core-auth": "npm:^1.9.0" - "@azure/core-client": "npm:^1.9.2" - "@azure/core-rest-pipeline": "npm:^1.19.0" - "@opentelemetry/api": "npm:^1.9.0" - "@opentelemetry/api-logs": "npm:^0.57.2" - "@opentelemetry/core": "npm:^1.30.1" - "@opentelemetry/resources": "npm:^1.30.1" - "@opentelemetry/sdk-logs": "npm:^0.57.2" - "@opentelemetry/sdk-metrics": "npm:^1.30.1" - "@opentelemetry/sdk-trace-base": "npm:^1.30.1" - "@opentelemetry/semantic-conventions": "npm:^1.30.0" - tslib: "npm:^2.8.1" - checksum: 10c0/8c00d851518d57f695e78e42542a2f1c971015d2e6a05045742d83c1c806119179d2b44ee05bdd12e1e36be016064e00f728a1c3ddb11a18408b2f18be177064 - languageName: node - linkType: hard - "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.27.1": version: 7.27.1 resolution: "@babel/code-frame@npm:7.27.1" @@ -4790,7 +4690,6 @@ __metadata: version: 0.0.0-use.local resolution: "@graphql-mesh/plugin-opentelemetry@workspace:packages/plugins/opentelemetry" dependencies: - "@azure/monitor-opentelemetry-exporter": "npm:^1.0.0-beta.27" "@graphql-hive/gateway-runtime": "workspace:^" "@graphql-mesh/cross-helpers": "npm:^0.4.10" "@graphql-mesh/transport-common": "workspace:^" @@ -6877,7 +6776,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api-logs@npm:0.57.2, @opentelemetry/api-logs@npm:^0.57.2": +"@opentelemetry/api-logs@npm:0.57.2": version: 0.57.2 resolution: "@opentelemetry/api-logs@npm:0.57.2" dependencies: @@ -6913,7 +6812,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/core@npm:1.30.1, @opentelemetry/core@npm:^1.30.0, @opentelemetry/core@npm:^1.30.1": +"@opentelemetry/core@npm:1.30.1, @opentelemetry/core@npm:^1.30.0": version: 1.30.1 resolution: "@opentelemetry/core@npm:1.30.1" dependencies: @@ -7110,7 +7009,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-logs@npm:0.57.2, @opentelemetry/sdk-logs@npm:^0.57.2": +"@opentelemetry/sdk-logs@npm:0.57.2": version: 0.57.2 resolution: "@opentelemetry/sdk-logs@npm:0.57.2" dependencies: @@ -7135,7 +7034,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:1.30.1, @opentelemetry/sdk-metrics@npm:^1.30.1": +"@opentelemetry/sdk-metrics@npm:1.30.1": version: 1.30.1 resolution: "@opentelemetry/sdk-metrics@npm:1.30.1" dependencies: @@ -7160,7 +7059,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-trace-base@npm:1.30.1, @opentelemetry/sdk-trace-base@npm:^1.29.0, @opentelemetry/sdk-trace-base@npm:^1.30.1": +"@opentelemetry/sdk-trace-base@npm:1.30.1, @opentelemetry/sdk-trace-base@npm:^1.29.0": version: 1.30.1 resolution: "@opentelemetry/sdk-trace-base@npm:1.30.1" dependencies: @@ -7193,7 +7092,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:^1.28.0, @opentelemetry/semantic-conventions@npm:^1.30.0": +"@opentelemetry/semantic-conventions@npm:^1.28.0": version: 1.34.0 resolution: "@opentelemetry/semantic-conventions@npm:1.34.0" checksum: 10c0/a51a32a5cf5c803bd2125a680d0abacbff632f3b255d0fe52379dac191114a0e8d72a34f9c46c5483ccfe91c4061c309f3cf61a19d11347e2a69779e82cfefd0 @@ -9314,17 +9213,6 @@ __metadata: languageName: node linkType: hard -"@typespec/ts-http-runtime@npm:^0.2.2": - version: 0.2.2 - resolution: "@typespec/ts-http-runtime@npm:0.2.2" - dependencies: - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.0" - tslib: "npm:^2.6.2" - checksum: 10c0/0f7d633f9885bd7fb065b205887eb6a85639c37ef2d4b50a1b55cee3ef7ad270dcf4757db0882a39157624e8888c6f1f29aaf4c163403c91e75a4b646d362c49 - languageName: node - linkType: hard - "@upstash/redis@npm:^1.34.3": version: 1.34.9 resolution: "@upstash/redis@npm:1.34.9" @@ -14899,7 +14787,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.0, https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": version: 7.0.6 resolution: "https-proxy-agent@npm:7.0.6" dependencies: From 8ee49756dc6b4183587c83e6c51f2b0db32d92ad Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 27 Mar 2025 16:09:22 +0000 Subject: [PATCH 04/60] chore(dependencies): updated changesets for modified dependencies --- .../@graphql-mesh_plugin-opentelemetry-956-dependencies.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md index 1debfaea6..939f89ba4 100644 --- a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md @@ -6,3 +6,4 @@ dependencies updates: - Updated dependency [`@whatwg-node/promise-helpers@1.3.0` ↗︎](https://www.npmjs.com/package/@whatwg-node/promise-helpers/v/1.3.0) (from `^1.3.0`, in `dependencies`) - Added dependency [`@opentelemetry/context-async-hooks@^1.30.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/1.30.0) (to `dependencies`) +- Removed dependency [`@azure/monitor-opentelemetry-exporter@^1.0.0-beta.27` ↗︎](https://www.npmjs.com/package/@azure/monitor-opentelemetry-exporter/v/1.0.0) (from `dependencies`) From dfe6f58209afd27953676c5b51b8b9f07fc99671 Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Thu, 27 Mar 2025 22:27:05 +0300 Subject: [PATCH 05/60] Update OpenTelemetry to v2 (#875) Co-authored-by: github-actions[bot] Co-authored-by: Valentin Cocaud --- ...h_plugin-opentelemetry-875-dependencies.md | 14 + ...ce-otlp-http-npm-0.200.0-80a44c64cd.patch} | 4 +- ...exporter-base-npm-0.200.0-6fb25211c7.patch | 62 +++ ...-exporter-base-npm-0.56.0-ba3dc5f5c5.patch | 136 ------- ...etry-resources-npm-1.29.0-112f89f0c5.patch | 178 --------- ...metry-resources-npm-2.0.0-f20376a5f9.patch | 124 ++++++ DEPS_RESOLUTIONS_NOTES.md | 14 + package.json | 6 +- packages/plugins/opentelemetry/package.json | 18 +- packages/plugins/opentelemetry/src/plugin.ts | 24 +- packages/plugins/opentelemetry/tests/utils.ts | 4 +- yarn.lock | 356 +++++++----------- 12 files changed, 376 insertions(+), 564 deletions(-) create mode 100644 .changeset/@graphql-mesh_plugin-opentelemetry-875-dependencies.md rename .yarn/patches/{@opentelemetry-exporter-trace-otlp-http-npm-0.56.0-dddd282e41.patch => @opentelemetry-exporter-trace-otlp-http-npm-0.200.0-80a44c64cd.patch} (87%) create mode 100644 .yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch delete mode 100644 .yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.56.0-ba3dc5f5c5.patch delete mode 100644 .yarn/patches/@opentelemetry-resources-npm-1.29.0-112f89f0c5.patch create mode 100644 .yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-875-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-875-dependencies.md new file mode 100644 index 000000000..6d39fd729 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-875-dependencies.md @@ -0,0 +1,14 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +dependencies updates: + +- Updated dependency [`@opentelemetry/context-async-hooks@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.0) (from `^1.30.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-grpc@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-grpc/v/0.200.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-http@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.200.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-zipkin@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/2.0.0) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/instrumentation@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/instrumentation/v/0.200.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/resources@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.0.0) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/sdk-trace-base@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.0) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/sdk-trace-web@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-web/v/2.0.0) (from `^1.29.0`, in `dependencies`) diff --git a/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.56.0-dddd282e41.patch b/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.200.0-80a44c64cd.patch similarity index 87% rename from .yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.56.0-dddd282e41.patch rename to .yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.200.0-80a44c64cd.patch index 83fe88107..5807f045d 100644 --- a/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.56.0-dddd282e41.patch +++ b/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.200.0-80a44c64cd.patch @@ -1,9 +1,9 @@ diff --git a/package.json b/package.json -index 8494583b1604d739d2120da81dee9c6f5e053eeb..d1edafb9303aa18a5e617321ae81e237c3a6118e 100644 +index d90fb5e21da07efdc8c645cae1327495235910d2..869ab86b744a36da0192da14b638208451d7c147 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,13 @@ - "version": "0.56.0", + "version": "0.200.0", "description": "OpenTelemetry Collector Trace Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", - "module": "build/esm/index.js", diff --git a/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch b/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch new file mode 100644 index 000000000..b585e1fbc --- /dev/null +++ b/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch @@ -0,0 +1,62 @@ +diff --git a/build/esnext/transport/http-exporter-transport.js b/build/esnext/transport/http-exporter-transport.js +index 7977489487a2236fbd0e4c2273ef53fd3c7b93a8..edec72e84b575cb07ea3e4710f9bcb61f3915805 100644 +--- a/build/esnext/transport/http-exporter-transport.js ++++ b/build/esnext/transport/http-exporter-transport.js +@@ -20,7 +20,7 @@ class HttpExporterTransport { + this._parameters = _parameters; + } + async send(data, timeoutMillis) { +- const { agent, send } = this._loadUtils(); ++ const { agent, send } = await this._loadUtils(); + return new Promise(resolve => { + send(this._parameters, agent, data, result => { + resolve(result); +@@ -30,13 +30,11 @@ class HttpExporterTransport { + shutdown() { + // intentionally left empty, nothing to do. + } +- _loadUtils() { ++ async _loadUtils() { + let utils = this._utils; + if (utils === null) { + // Lazy require to ensure that http/https is not required before instrumentations can wrap it. +- const { sendWithHttp, createHttpAgent, +- // eslint-disable-next-line @typescript-eslint/no-var-requires +- } = require('./http-transport-utils'); ++ const { sendWithHttp, createHttpAgent } = await import('./http-transport-utils'); + utils = this._utils = { + agent: createHttpAgent(this._parameters.url, this._parameters.agentOptions), + send: sendWithHttp, +diff --git a/package.json b/package.json +index d00689f7f0eb517923fe6f6f9e8b6b624d5936ca..c60c871496c8823ee1c3d0ba62a11553eb35822b 100644 +--- a/package.json ++++ b/package.json +@@ -3,24 +3,24 @@ + "version": "0.200.0", + "description": "OpenTelemetry OTLP Exporter base (for internal use only)", + "main": "build/src/index.js", +- "module": "build/esm/index.js", ++ "module": "build/esnext/index.js", + "esnext": "build/esnext/index.js", + "types": "build/src/index.d.ts", + "exports": { + ".": { +- "module": "./build/esm/index.js", ++ "module": "./build/esnext/index.js", + "esnext": "./build/esnext/index.js", + "types": "./build/src/index.d.ts", + "default": "./build/src/index.js" + }, + "./node-http": { +- "module": "./build/esm/index-node-http.js", ++ "module": "./build/esnext/index-node-http.js", + "esnext": "./build/esnext/index-node-http.js", + "types": "./build/src/index-node-http.d.ts", + "default": "./build/src/index-node-http.js" + }, + "./browser-http": { +- "module": "./build/esm/index-browser-http.js", ++ "module": "./build/esnext/index-browser-http.js", + "esnext": "./build/esnext/index-browser-http.js", + "types": "./build/src/index-browser-http.d.ts", + "default": "./build/src/index-browser-http.js" diff --git a/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.56.0-ba3dc5f5c5.patch b/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.56.0-ba3dc5f5c5.patch deleted file mode 100644 index 74a89b4c2..000000000 --- a/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.56.0-ba3dc5f5c5.patch +++ /dev/null @@ -1,136 +0,0 @@ -diff --git a/build/esm/transport/http-exporter-transport.js b/build/esm/transport/http-exporter-transport.js -index ef266685d979dc9112b3d5aa4c39b580be0cf1aa..47f7cfaa2f347f22c284fdae61250fe413aba5fc 100644 ---- a/build/esm/transport/http-exporter-transport.js -+++ b/build/esm/transport/http-exporter-transport.js -@@ -13,75 +13,49 @@ - * See the License for the specific language governing permissions and - * limitations under the License. - */ --var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { -- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } -- return new (P || (P = Promise))(function (resolve, reject) { -- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } -- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } -- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } -- step((generator = generator.apply(thisArg, _arguments || [])).next()); -- }); --}; --var __generator = (this && this.__generator) || function (thisArg, body) { -- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; -- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; -- function verb(n) { return function (v) { return step([n, v]); }; } -- function step(op) { -- if (f) throw new TypeError("Generator is already executing."); -- while (_) try { -- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; -- if (y = 0, t) op = [op[0] & 2, t.value]; -- switch (op[0]) { -- case 0: case 1: t = op; break; -- case 4: _.label++; return { value: op[1], done: false }; -- case 5: _.label++; y = op[1]; op = [0]; continue; -- case 7: op = _.ops.pop(); _.trys.pop(); continue; -- default: -- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } -- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } -- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } -- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } -- if (t[2]) _.ops.pop(); -- _.trys.pop(); continue; -- } -- op = body.call(thisArg, _); -- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } -- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; -- } --}; --var HttpExporterTransport = /** @class */ (function () { -- function HttpExporterTransport(_parameters) { -- this._parameters = _parameters; -- this._send = null; -- this._agent = null; -+class HttpExporterTransport { -+ constructor(_parameters) { -+ this._parameters = _parameters; -+ this._send = null; -+ this._agent = null; -+ } -+ async send(data, timeoutMillis) { -+ if (this._send == null) { -+ // Lazy require to ensure that http/https is not required before instrumentations can wrap it. -+ const { -+ sendWithHttp, -+ createHttpAgent, -+ // eslint-disable-next-line @typescript-eslint/no-var-requires -+ } = await import("./http-transport-utils"); -+ this._agent = createHttpAgent( -+ this._parameters.url, -+ this._parameters.agentOptions -+ ); -+ this._send = sendWithHttp; - } -- HttpExporterTransport.prototype.send = function (data, timeoutMillis) { -- return __awaiter(this, void 0, void 0, function () { -- var _a, sendWithHttp, createHttpAgent; -- var _this = this; -- return __generator(this, function (_b) { -- if (this._send == null) { -- _a = require('./http-transport-utils'), sendWithHttp = _a.sendWithHttp, createHttpAgent = _a.createHttpAgent; -- this._agent = createHttpAgent(this._parameters.url, this._parameters.agentOptions); -- this._send = sendWithHttp; -- } -- return [2 /*return*/, new Promise(function (resolve) { -- var _a; -- // this will always be defined -- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- (_a = _this._send) === null || _a === void 0 ? void 0 : _a.call(_this, _this._parameters, _this._agent, data, function (result) { -- resolve(result); -- }, timeoutMillis); -- })]; -- }); -- }); -- }; -- HttpExporterTransport.prototype.shutdown = function () { -- // intentionally left empty, nothing to do. -- }; -- return HttpExporterTransport; --}()); -+ return new Promise((resolve) => { -+ var _a; -+ // this will always be defined -+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -+ (_a = this._send) === null || _a === void 0 -+ ? void 0 -+ : _a.call( -+ this, -+ this._parameters, -+ this._agent, -+ data, -+ (result) => { -+ resolve(result); -+ }, -+ timeoutMillis -+ ); -+ }); -+ } -+ shutdown() { -+ // intentionally left empty, nothing to do. -+ } -+} - export function createHttpExporterTransport(parameters) { -- return new HttpExporterTransport(parameters); -+ return new HttpExporterTransport(parameters); - } - //# sourceMappingURL=http-exporter-transport.js.map -\ No newline at end of file -diff --git a/build/esnext/transport/http-exporter-transport.js b/build/esnext/transport/http-exporter-transport.js -index e6b76f301baeb19f507b6072c0598e1d98ceebbb..32a62444cf4ef7ab2346df5b0ac2fb079c6b4268 100644 ---- a/build/esnext/transport/http-exporter-transport.js -+++ b/build/esnext/transport/http-exporter-transport.js -@@ -24,7 +24,7 @@ class HttpExporterTransport { - // Lazy require to ensure that http/https is not required before instrumentations can wrap it. - const { sendWithHttp, createHttpAgent, - // eslint-disable-next-line @typescript-eslint/no-var-requires -- } = require('./http-transport-utils'); -+ } = await import('./http-transport-utils'); - this._agent = createHttpAgent(this._parameters.url, this._parameters.agentOptions); - this._send = sendWithHttp; - } diff --git a/.yarn/patches/@opentelemetry-resources-npm-1.29.0-112f89f0c5.patch b/.yarn/patches/@opentelemetry-resources-npm-1.29.0-112f89f0c5.patch deleted file mode 100644 index cb6e20634..000000000 --- a/.yarn/patches/@opentelemetry-resources-npm-1.29.0-112f89f0c5.patch +++ /dev/null @@ -1,178 +0,0 @@ -diff --git a/build/esm/detectors/platform/node/machine-id/getMachineId.js b/build/esm/detectors/platform/node/machine-id/getMachineId.js -index 267f4af2d1a33a3e17ef1009da5669d3683694f6..61a6e8a77417c039c298bf12ec85daa20ea669fc 100644 ---- a/build/esm/detectors/platform/node/machine-id/getMachineId.js -+++ b/build/esm/detectors/platform/node/machine-id/getMachineId.js -@@ -13,23 +13,34 @@ - * See the License for the specific language governing permissions and - * limitations under the License. - */ --import * as process from 'process'; --var getMachineId; --switch (process.platform) { -- case 'darwin': -- (getMachineId = require('./getMachineId-darwin').getMachineId); -- break; -- case 'linux': -- (getMachineId = require('./getMachineId-linux').getMachineId); -- break; -- case 'freebsd': -- (getMachineId = require('./getMachineId-bsd').getMachineId); -- break; -- case 'win32': -- (getMachineId = require('./getMachineId-win').getMachineId); -- break; -+function getMachineId() { -+ switch (process.platform) { -+ case "darwin": -+ return import("./getMachineId-darwin").then(m => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "linux": -+ return import("./getMachineId-linux").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "freebsd": -+ return import("./getMachineId-bsd").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "win32": -+ return import("./getMachineId-win").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); - default: -- (getMachineId = require('./getMachineId-unsupported').getMachineId); -+ return import("./getMachineId-unsupported").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ } - } -+ - export { getMachineId }; -\ No newline at end of file --//# sourceMappingURL=getMachineId.js.map -\ No newline at end of file -diff --git a/build/esnext/detectors/platform/node/machine-id/getMachineId.js b/build/esnext/detectors/platform/node/machine-id/getMachineId.js -index 6600fb658cb3330dde569141fafd51c9b2f215e1..e3ec2a33ba6de54910acc571794d791f8a413172 100644 ---- a/build/esnext/detectors/platform/node/machine-id/getMachineId.js -+++ b/build/esnext/detectors/platform/node/machine-id/getMachineId.js -@@ -13,23 +13,34 @@ - * See the License for the specific language governing permissions and - * limitations under the License. - */ --import * as process from 'process'; --let getMachineId; --switch (process.platform) { -- case 'darwin': -- ({ getMachineId } = require('./getMachineId-darwin')); -- break; -- case 'linux': -- ({ getMachineId } = require('./getMachineId-linux')); -- break; -- case 'freebsd': -- ({ getMachineId } = require('./getMachineId-bsd')); -- break; -- case 'win32': -- ({ getMachineId } = require('./getMachineId-win')); -- break; -+function getMachineId() { -+ switch (process.platform) { -+ case "darwin": -+ return import("./getMachineId-darwin").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "linux": -+ return import("./getMachineId-linux").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "freebsd": -+ return import("./getMachineId-bsd").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "win32": -+ return import("./getMachineId-win").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); - default: -- ({ getMachineId } = require('./getMachineId-unsupported')); -+ return import("./getMachineId-unsupported").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ } - } - export { getMachineId }; - //# sourceMappingURL=getMachineId.js.map -\ No newline at end of file -diff --git a/build/src/detectors/platform/node/machine-id/getMachineId.js b/build/src/detectors/platform/node/machine-id/getMachineId.js -index 9c1877c31fda380b7c6e64491400972fb8dc297c..b9f75f108d4e9ec3b1abce02184fe5dbd6964f2d 100644 ---- a/build/src/detectors/platform/node/machine-id/getMachineId.js -+++ b/build/src/detectors/platform/node/machine-id/getMachineId.js -@@ -1,6 +1,5 @@ - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); --exports.getMachineId = void 0; - /* - * Copyright The OpenTelemetry Authors - * -@@ -16,23 +15,33 @@ exports.getMachineId = void 0; - * See the License for the specific language governing permissions and - * limitations under the License. - */ --const process = require("process"); --let getMachineId; --exports.getMachineId = getMachineId; --switch (process.platform) { -- case 'darwin': -- (exports.getMachineId = getMachineId = require('./getMachineId-darwin').getMachineId); -- break; -- case 'linux': -- (exports.getMachineId = getMachineId = require('./getMachineId-linux').getMachineId); -- break; -- case 'freebsd': -- (exports.getMachineId = getMachineId = require('./getMachineId-bsd').getMachineId); -- break; -- case 'win32': -- (exports.getMachineId = getMachineId = require('./getMachineId-win').getMachineId); -- break; -+exports.getMachineId = function getMachineId() { -+ switch (process.platform) { -+ case "darwin": -+ return import("./getMachineId-darwin").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "linux": -+ return import("./getMachineId-linux").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "freebsd": -+ return import("./getMachineId-bsd").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ case "win32": -+ return import("./getMachineId-win").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); - default: -- (exports.getMachineId = getMachineId = require('./getMachineId-unsupported').getMachineId); -+ return import("./getMachineId-unsupported").then((m) => { -+ const getMachineId = m.default?.getMachineId || m.getMachineId; -+ return getMachineId(); -+ }); -+ } - } --//# sourceMappingURL=getMachineId.js.map -\ No newline at end of file -+ diff --git a/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch b/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch new file mode 100644 index 000000000..6aaec9091 --- /dev/null +++ b/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch @@ -0,0 +1,124 @@ +diff --git a/build/esnext/detectors/platform/node/machine-id/getMachineId.js b/build/esnext/detectors/platform/node/machine-id/getMachineId.js +index 6600fb658cb3330dde569141fafd51c9b2f215e1..fc6d07470edcdd36e2895bfd6f20ecb94275a799 100644 +--- a/build/esnext/detectors/platform/node/machine-id/getMachineId.js ++++ b/build/esnext/detectors/platform/node/machine-id/getMachineId.js +@@ -13,23 +13,28 @@ + * See the License for the specific language governing permissions and + * limitations under the License. + */ +-import * as process from 'process'; +-let getMachineId; +-switch (process.platform) { +- case 'darwin': +- ({ getMachineId } = require('./getMachineId-darwin')); +- break; +- case 'linux': +- ({ getMachineId } = require('./getMachineId-linux')); +- break; +- case 'freebsd': +- ({ getMachineId } = require('./getMachineId-bsd')); +- break; +- case 'win32': +- ({ getMachineId } = require('./getMachineId-win')); +- break; ++export function getMachineId(...args) { ++ switch (process.platform) { ++ case "darwin": ++ return import("./getMachineId-darwin").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); ++ case "linux": ++ return import("./getMachineId-linux").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); ++ case "freebsd": ++ return import("./getMachineId-bsd").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); ++ case "win32": ++ return import("./getMachineId-win").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); + default: +- ({ getMachineId } = require('./getMachineId-unsupported')); ++ return import("./getMachineId-unsupported").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); ++ } + } +-export { getMachineId }; + //# sourceMappingURL=getMachineId.js.map +diff --git a/build/src/detectors/platform/node/machine-id/getMachineId.js b/build/src/detectors/platform/node/machine-id/getMachineId.js +index 9c1877c31fda380b7c6e64491400972fb8dc297c..8ddfff3c832abd65bde91f09c4ef93016b738219 100644 +--- a/build/src/detectors/platform/node/machine-id/getMachineId.js ++++ b/build/src/detectors/platform/node/machine-id/getMachineId.js +@@ -16,23 +16,28 @@ exports.getMachineId = void 0; + * See the License for the specific language governing permissions and + * limitations under the License. + */ +-const process = require("process"); +-let getMachineId; +-exports.getMachineId = getMachineId; +-switch (process.platform) { +- case 'darwin': +- (exports.getMachineId = getMachineId = require('./getMachineId-darwin').getMachineId); +- break; +- case 'linux': +- (exports.getMachineId = getMachineId = require('./getMachineId-linux').getMachineId); +- break; +- case 'freebsd': +- (exports.getMachineId = getMachineId = require('./getMachineId-bsd').getMachineId); +- break; +- case 'win32': +- (exports.getMachineId = getMachineId = require('./getMachineId-win').getMachineId); +- break; ++exports.getMachineId = function getMachineId(...args) { ++ switch (process.platform) { ++ case "darwin": ++ return import("./getMachineId-darwin").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); ++ case "linux": ++ return import("./getMachineId-linux").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); ++ case "freebsd": ++ return import("./getMachineId-bsd").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); ++ case "win32": ++ return import("./getMachineId-win").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); + default: +- (exports.getMachineId = getMachineId = require('./getMachineId-unsupported').getMachineId); ++ return import("./getMachineId-unsupported").then(({ getMachineId }) => ++ getMachineId(...args) ++ ); ++ } + } + //# sourceMappingURL=getMachineId.js.map +\ No newline at end of file +diff --git a/package.json b/package.json +index 6a4170da17a23b3d4969fc12412f26d6f7df83ef..b856e274838fbbd67d7a4f6b31346072f737b026 100644 +--- a/package.json ++++ b/package.json +@@ -3,15 +3,15 @@ + "version": "2.0.0", + "description": "OpenTelemetry SDK resources", + "main": "build/src/index.js", +- "module": "build/esm/index.js", ++ "module": "build/esnext/index.js", + "esnext": "build/esnext/index.js", + "browser": { + "./src/platform/index.ts": "./src/platform/browser/index.ts", +- "./build/esm/platform/index.js": "./build/esm/platform/browser/index.js", ++ "./build/esm/platform/index.js": "./build/esnext/platform/browser/index.js", + "./build/esnext/platform/index.js": "./build/esnext/platform/browser/index.js", + "./build/src/platform/index.js": "./build/src/platform/browser/index.js", + "./src/detectors/platform/index.ts": "./src/detectors/platform/browser/index.ts", +- "./build/esm/detectors/platform/index.js": "./build/esm/detectors/platform/browser/index.js", ++ "./build/esm/detectors/platform/index.js": "./build/esnext/detectors/platform/browser/index.js", + "./build/esnext/detectors/platform/index.js": "./build/esnext/detectors/platform/browser/index.js", + "./build/src/detectors/platform/index.js": "./build/src/detectors/platform/browser/index.js" + }, diff --git a/DEPS_RESOLUTIONS_NOTES.md b/DEPS_RESOLUTIONS_NOTES.md index 3d46565a5..8f775b2d1 100644 --- a/DEPS_RESOLUTIONS_NOTES.md +++ b/DEPS_RESOLUTIONS_NOTES.md @@ -19,3 +19,17 @@ Here we collect reasons and write explanations about why some resolutions or pat 1. Define package.json#export for `@memlab/core/Types` 1. Define package.json#export for `@memlab/core/Utils` + +### @opentelemetry/exporter-trace-otlp-http + +1. Point to esnext instead of esm for ES Module support + +### @opentelemetry/otlp-exporter-base + +1. Point to esnext instead of esm for ES Module support +1. Use `import` instead of `require` for dynamic resolution in ES Module + +### @opentelemetry/resources + +1. Point to esnext instead of esm for ES Module support +1. Use `import` instead of `require` for dynamic resolution in ES Module diff --git a/package.json b/package.json index 7e2cf90ff..fb486ad34 100644 --- a/package.json +++ b/package.json @@ -64,9 +64,9 @@ "@graphql-mesh/types": "0.104.6", "@graphql-mesh/utils": "0.104.6", "@graphql-tools/delegate": "workspace:^", - "@opentelemetry/exporter-trace-otlp-http": "patch:@opentelemetry/exporter-trace-otlp-http@npm:0.56.0#~/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.56.0-dddd282e41.patch", - "@opentelemetry/otlp-exporter-base": "patch:@opentelemetry/otlp-exporter-base@npm:0.56.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.56.0-ba3dc5f5c5.patch", - "@opentelemetry/resources": "patch:@opentelemetry/resources@npm:1.29.0#~/.yarn/patches/@opentelemetry-resources-npm-1.29.0-112f89f0c5.patch", + "@opentelemetry/exporter-trace-otlp-http@npm:0.200.0": "patch:@opentelemetry/exporter-trace-otlp-http@npm%3A0.200.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch", + "@opentelemetry/otlp-exporter-base@npm:0.200.0": "patch:@opentelemetry/otlp-exporter-base@npm%3A0.200.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch", + "@opentelemetry/resources@npm:2.0.0": "patch:@opentelemetry/resources@npm%3A2.0.0#~/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch", "@vitest/snapshot": "patch:@vitest/snapshot@npm:3.1.2#~/.yarn/patches/@vitest-snapshot-npm-3.1.1-4d18cf86dc.patch", "cookie": "^1.0.0", "cross-spawn": "7.0.6", diff --git a/packages/plugins/opentelemetry/package.json b/packages/plugins/opentelemetry/package.json index 3aa83e019..bb8008381 100644 --- a/packages/plugins/opentelemetry/package.json +++ b/packages/plugins/opentelemetry/package.json @@ -49,15 +49,15 @@ "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/utils": "^10.8.1", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.30.0", - "@opentelemetry/core": "^1.30.0", - "@opentelemetry/exporter-trace-otlp-grpc": "^0.57.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.57.0", - "@opentelemetry/exporter-zipkin": "^1.29.0", - "@opentelemetry/instrumentation": "^0.57.0", - "@opentelemetry/resources": "^1.29.0", - "@opentelemetry/sdk-trace-base": "^1.29.0", - "@opentelemetry/sdk-trace-web": "^1.29.0", + "@opentelemetry/context-async-hooks": "^2.0.0", + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.200.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.200.0", + "@opentelemetry/exporter-zipkin": "^2.0.0", + "@opentelemetry/instrumentation": "^0.200.0", + "@opentelemetry/resources": "^2.0.0", + "@opentelemetry/sdk-trace-base": "^2.0.0", + "@opentelemetry/sdk-trace-web": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.28.0", "@whatwg-node/promise-helpers": "1.3.0", "tslib": "^2.8.1" diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 6e4f3a366..fefd200a9 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -25,7 +25,10 @@ import { type Tracer, } from '@opentelemetry/api'; import { setGlobalErrorHandler } from '@opentelemetry/core'; -import { Resource } from '@opentelemetry/resources'; +import { + detectResources, + resourceFromAttributes, +} from '@opentelemetry/resources'; import { type SpanProcessor } from '@opentelemetry/sdk-trace-base'; import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { unfakePromise } from '@whatwg-node/promise-helpers'; @@ -252,8 +255,7 @@ export function useOpenTelemetry( let spanProcessors: SpanProcessor[]; let provider: WebTracerProvider; - const { promise: asyncAttributes, resolve: resolveAsyncAttributes } = - createDeferred<{ [ATTR_SERVICE_VERSION]: string }>(); + const yogaVersion = createDeferred(); function isParentEnabled(state: State): boolean { const parentState = getMostSpecificState(state); @@ -271,6 +273,7 @@ export function useOpenTelemetry( function init(): Promise { if ('initializeNodeSDK' in options && options.initializeNodeSDK === false) { if (options.contextManager === false) { + pluginLogger.debug('context manager disabled by user.'); return fakePromise(false); } @@ -296,9 +299,11 @@ export function useOpenTelemetry( : Promise.all(options.exporters), ); - const resource = new Resource( - { [SEMRESATTRS_SERVICE_NAME]: options.serviceName || 'Gateway' }, - asyncAttributes, + const resource = detectResources().merge( + resourceFromAttributes({ + [SEMRESATTRS_SERVICE_NAME]: options.serviceName ?? 'Gateway', + [ATTR_SERVICE_VERSION]: yogaVersion.promise, + }), ); let contextManager$ = getContextManager(options.contextManager); @@ -315,7 +320,7 @@ export function useOpenTelemetry( }) .then((contextManager) => { provider.register({ contextManager }); - return !!useContextManager; + return !!contextManager; }); } @@ -333,6 +338,9 @@ export function useOpenTelemetry( options.diagLevel ?? DiagLogLevel.VERBOSE, ); useContextManager = contextManager; + pluginLogger.debug( + `context manager is ${useContextManager ? 'enabled' : 'disabled'}`, + ); tracer = options.tracer || trace.getTracer('gateway'); preparation$ = fakePromise(); }); @@ -642,7 +650,7 @@ export function useOpenTelemetry( }, onYogaInit({ yoga }) { - resolveAsyncAttributes({ [ATTR_SERVICE_VERSION]: yoga.version }); + yogaVersion.resolve(yoga.version); }, onEnveloped({ state, extendContext }) { diff --git a/packages/plugins/opentelemetry/tests/utils.ts b/packages/plugins/opentelemetry/tests/utils.ts index 4c9e4ed70..266fa3e13 100644 --- a/packages/plugins/opentelemetry/tests/utils.ts +++ b/packages/plugins/opentelemetry/tests/utils.ts @@ -140,7 +140,9 @@ export class MockSpanExporter implements SpanExporter { new TraceTreeNode( span, this.spans - .filter(({ parentSpanId }) => parentSpanId === span.id) + .filter( + ({ parentSpanContext }) => parentSpanContext?.spanId === span.id, + ) .map(this.buildSpanNode), ); diff --git a/yarn.lock b/yarn.lock index 28f0ab36d..33c60f9ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4697,15 +4697,15 @@ __metadata: "@graphql-mesh/utils": "npm:^0.104.5" "@graphql-tools/utils": "npm:^10.8.1" "@opentelemetry/api": "npm:^1.9.0" - "@opentelemetry/context-async-hooks": "npm:^1.30.0" - "@opentelemetry/core": "npm:^1.30.0" - "@opentelemetry/exporter-trace-otlp-grpc": "npm:^0.57.0" - "@opentelemetry/exporter-trace-otlp-http": "npm:^0.57.0" - "@opentelemetry/exporter-zipkin": "npm:^1.29.0" - "@opentelemetry/instrumentation": "npm:^0.57.0" - "@opentelemetry/resources": "npm:^1.29.0" - "@opentelemetry/sdk-trace-base": "npm:^1.29.0" - "@opentelemetry/sdk-trace-web": "npm:^1.29.0" + "@opentelemetry/context-async-hooks": "npm:^2.0.0" + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/exporter-trace-otlp-grpc": "npm:^0.200.0" + "@opentelemetry/exporter-trace-otlp-http": "npm:^0.200.0" + "@opentelemetry/exporter-zipkin": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.200.0" + "@opentelemetry/resources": "npm:^2.0.0" + "@opentelemetry/sdk-trace-base": "npm:^2.0.0" + "@opentelemetry/sdk-trace-web": "npm:^2.0.0" "@opentelemetry/semantic-conventions": "npm:^1.28.0" "@whatwg-node/promise-helpers": "npm:1.3.0" "@whatwg-node/server": "npm:^0.10.0" @@ -6767,21 +6767,12 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api-logs@npm:0.56.0": - version: 0.56.0 - resolution: "@opentelemetry/api-logs@npm:0.56.0" +"@opentelemetry/api-logs@npm:0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/api-logs@npm:0.200.0" dependencies: "@opentelemetry/api": "npm:^1.3.0" - checksum: 10c0/af78b5534fd8f93edc23811349c88acf9e7cc2c7d94f58a2b58f70016f97aaa80878096c46283fdb53fb7375df83f1a048ac8d5f52b3dc1c98a2184c3a5d50ff - languageName: node - linkType: hard - -"@opentelemetry/api-logs@npm:0.57.2": - version: 0.57.2 - resolution: "@opentelemetry/api-logs@npm:0.57.2" - dependencies: - "@opentelemetry/api": "npm:^1.3.0" - checksum: 10c0/1e514d3fd4ca68e7e8b008794a95ee0562a5d9e1d3ebb02647b245afaa6c2d72cc14e99e3ea47a1d1007f8a965c62bfb6170e1aa26756230bea063cfde2898bf + checksum: 10c0/c6bc3cfba35c69411f294519d93d0ff9f603517030d1162839ee42ac22ed1b0235edaf71d00cabc40125f813d8b4dc830d14315afcebcef138c1df560eaa5c91 languageName: node linkType: hard @@ -6792,310 +6783,221 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/context-async-hooks@npm:^1.30.0": - version: 1.30.1 - resolution: "@opentelemetry/context-async-hooks@npm:1.30.1" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/3e8114d360060a5225226d2fcd8df08cd542246003790a7f011c0774bc60b8a931f46f4c6673f3977a7d9bba717de6ee028cae51b752c2567053d7f46ed3eba3 - languageName: node - linkType: hard - -"@opentelemetry/core@npm:1.29.0": - version: 1.29.0 - resolution: "@opentelemetry/core@npm:1.29.0" - dependencies: - "@opentelemetry/semantic-conventions": "npm:1.28.0" +"@opentelemetry/context-async-hooks@npm:^2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/context-async-hooks@npm:2.0.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/393fa276262ecc0e7bd7db5f507a2118df0725afab0cea1cb071b8d0ec879c08d9d163a83bb13f77a6bd0ad0cb66094856eb19caf225da32d3b1767156105d26 + checksum: 10c0/65c7c0cd3daa382143dc90772a07fb8a9baf12ffe42bd9506fd6aabdcad9e3e4d967b82de9e4c2a1cee401514c9aab3c603bc8bbcdfb1f9d3614ba3aa571f1b1 languageName: node linkType: hard -"@opentelemetry/core@npm:1.30.1, @opentelemetry/core@npm:^1.30.0": - version: 1.30.1 - resolution: "@opentelemetry/core@npm:1.30.1" +"@opentelemetry/core@npm:2.0.0, @opentelemetry/core@npm:^2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/core@npm:2.0.0" dependencies: - "@opentelemetry/semantic-conventions": "npm:1.28.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/4c25ba50a6137c2ba9ca563fb269378f3c9ca6fd1b3f15dbb6eff78eebf5656f281997cbb7be8e51c01649fd6ad091083fcd8a42dd9b5dfac907dc06d7cfa092 + checksum: 10c0/d2cc6d8a955305b9de15cc36135e5d5b0f0405fead8bbd4de51433f2d05369af0a3bcb2c6fe7fe6d9e61b0db782511bcadc5d93ed906027d4c00d5c2e3575a24 languageName: node linkType: hard -"@opentelemetry/exporter-trace-otlp-grpc@npm:^0.57.0": - version: 0.57.2 - resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.57.2" +"@opentelemetry/exporter-trace-otlp-grpc@npm:^0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.200.0" dependencies: "@grpc/grpc-js": "npm:^1.7.1" - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/otlp-exporter-base": "npm:0.57.2" - "@opentelemetry/otlp-grpc-exporter-base": "npm:0.57.2" - "@opentelemetry/otlp-transformer": "npm:0.57.2" - "@opentelemetry/resources": "npm:1.30.1" - "@opentelemetry/sdk-trace-base": "npm:1.30.1" - peerDependencies: - "@opentelemetry/api": ^1.3.0 - checksum: 10c0/ac88a7978f231db1d327af0c26807f01230807d4f80a04119cc487aaafed287b9383e0511895d438b76ec35d66e0243ed5ad3eecdcf797caab5f2624c4e28bb4 - languageName: node - linkType: hard - -"@opentelemetry/exporter-trace-otlp-http@npm:0.56.0": - version: 0.56.0 - resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.56.0" - dependencies: - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/otlp-exporter-base": "npm:0.56.0" - "@opentelemetry/otlp-transformer": "npm:0.56.0" - "@opentelemetry/resources": "npm:1.29.0" - "@opentelemetry/sdk-trace-base": "npm:1.29.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/otlp-exporter-base": "npm:0.200.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.200.0" + "@opentelemetry/otlp-transformer": "npm:0.200.0" + "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/sdk-trace-base": "npm:2.0.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/2e606f25312d435e48a3e221cb26ac791f789ba68fa441dae83c0f8dd4bda22964a5cf75d39b548ae482a641f552332948010f782dfc6fe1641157a8b4ef02b0 + checksum: 10c0/e38c1ff8c98ecb56f81b4400f6baca5763dbde6f717da4b1467fa47cf6681e2586a7f46f1a428b7a59013a8f382bc7bd75ecc7abb1b27f805ce18c0bdc435c0c languageName: node linkType: hard -"@opentelemetry/exporter-trace-otlp-http@patch:@opentelemetry/exporter-trace-otlp-http@npm:0.56.0#~/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.56.0-dddd282e41.patch": - version: 0.56.0 - resolution: "@opentelemetry/exporter-trace-otlp-http@patch:@opentelemetry/exporter-trace-otlp-http@npm%3A0.56.0#~/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.56.0-dddd282e41.patch::version=0.56.0&hash=fcdbb1" +"@opentelemetry/exporter-trace-otlp-http@npm:^0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.200.0" dependencies: - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/otlp-exporter-base": "npm:0.56.0" - "@opentelemetry/otlp-transformer": "npm:0.56.0" - "@opentelemetry/resources": "npm:1.29.0" - "@opentelemetry/sdk-trace-base": "npm:1.29.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/otlp-exporter-base": "npm:0.200.0" + "@opentelemetry/otlp-transformer": "npm:0.200.0" + "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/sdk-trace-base": "npm:2.0.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/53dc519e923bc738273a61a352988b0bfc3dee2b8138be1d0521401556fb47791e1d5eb2a90f5e94567399d1e7f484839772b7be4212b840aa014172bb9c0d1e + checksum: 10c0/9cc914570cca1bd411e467f0a03146d3397c7940c8f9f5f876a28f9c8345f1b0d433651df8c8a0006d13c8b62f0d04ef44a7f7419d2765fcd061f1cbd585b6c5 languageName: node linkType: hard -"@opentelemetry/exporter-zipkin@npm:^1.29.0": - version: 1.30.1 - resolution: "@opentelemetry/exporter-zipkin@npm:1.30.1" +"@opentelemetry/exporter-zipkin@npm:^2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/exporter-zipkin@npm:2.0.0" dependencies: - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/resources": "npm:1.30.1" - "@opentelemetry/sdk-trace-base": "npm:1.30.1" - "@opentelemetry/semantic-conventions": "npm:1.28.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/sdk-trace-base": "npm:2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ^1.0.0 - checksum: 10c0/e2918387c0ddc1835779f5551f5f04b3c1331643f05e3cf6019abf169de035c55be8112a30d5ee0dfef6938cbe260e84c426d5a46bce6f9eb6b2c9b916a425f6 + checksum: 10c0/48505b1e5d5ae84abf06101011cd0da7e9931210e34dd1439673d1a9389ebe956a6076c36313e0e0d5d82cbd3239242ace8fb8cc54c77716de112981f4eae4d9 languageName: node linkType: hard -"@opentelemetry/instrumentation@npm:^0.57.0": - version: 0.57.2 - resolution: "@opentelemetry/instrumentation@npm:0.57.2" +"@opentelemetry/instrumentation@npm:^0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/instrumentation@npm:0.200.0" dependencies: - "@opentelemetry/api-logs": "npm:0.57.2" + "@opentelemetry/api-logs": "npm:0.200.0" "@types/shimmer": "npm:^1.2.0" import-in-the-middle: "npm:^1.8.1" require-in-the-middle: "npm:^7.1.1" - semver: "npm:^7.5.2" shimmer: "npm:^1.2.1" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/79ca65b66357665d19f89da7027da25ea1c6b55ecdacb0a99534923743c80deb9282870db563de8ae284b13e7e0aab8413efa1937f199deeaef069e07c7e4875 + checksum: 10c0/b7e6e0382231e7d0b113a2916511f5da24f80795e6904e32c2386a1e0856a0ad8592fb46bf8c3846447396a51aeed8c1664572af8728323a3266aecc3a33edd8 languageName: node linkType: hard -"@opentelemetry/otlp-exporter-base@npm:0.56.0": - version: 0.56.0 - resolution: "@opentelemetry/otlp-exporter-base@npm:0.56.0" +"@opentelemetry/otlp-exporter-base@npm:0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.200.0" dependencies: - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/otlp-transformer": "npm:0.56.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/otlp-transformer": "npm:0.200.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/1c7062bf9edf2a012826341a41fe7bd03b03835a3dc5be5a43a85f5d5ad5d474a3f9241e12906cf9454df6e10f8039d97b21645afdc5f1fb3f55b371a1ed9bd6 + checksum: 10c0/3283c12bffc3156a41d9c16c097966e8418781a1d779250334f3d5b4f864be1aeac69fecfdf489abc95578dc36098dc0e026e5a48eb19ee170d72ef89b94f0e9 languageName: node linkType: hard -"@opentelemetry/otlp-exporter-base@patch:@opentelemetry/otlp-exporter-base@npm:0.56.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.56.0-ba3dc5f5c5.patch": - version: 0.56.0 - resolution: "@opentelemetry/otlp-exporter-base@patch:@opentelemetry/otlp-exporter-base@npm%3A0.56.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.56.0-ba3dc5f5c5.patch::version=0.56.0&hash=5c9582" +"@opentelemetry/otlp-exporter-base@patch:@opentelemetry/otlp-exporter-base@npm%3A0.200.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch": + version: 0.200.0 + resolution: "@opentelemetry/otlp-exporter-base@patch:@opentelemetry/otlp-exporter-base@npm%3A0.200.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch::version=0.200.0&hash=9541a9" dependencies: - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/otlp-transformer": "npm:0.56.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/otlp-transformer": "npm:0.200.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/2c388896ad67fab82944ffd42f4349fb488e6065a2168270a06efd469359bcc775e87e2c2448e45fa4ecfd45d8bd7bc15ee272684308d76c63483dd5c90a945f + checksum: 10c0/5c18a4c3b33dfdac62175e06004b8a72138ea8ed6f8c987959795d58f68f7eb2eb50e484b399bcd321914a5613fbefe7d97c2ac811c193f519955acf2cf4fa47 languageName: node linkType: hard -"@opentelemetry/otlp-grpc-exporter-base@npm:0.57.2": - version: 0.57.2 - resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.57.2" +"@opentelemetry/otlp-grpc-exporter-base@npm:0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.200.0" dependencies: "@grpc/grpc-js": "npm:^1.7.1" - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/otlp-exporter-base": "npm:0.57.2" - "@opentelemetry/otlp-transformer": "npm:0.57.2" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/otlp-exporter-base": "npm:0.200.0" + "@opentelemetry/otlp-transformer": "npm:0.200.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/4a5ced2720061a6833b8210e0c606211393da98e0701087dc803c333e04a186550224408c7d82960c6cc07c96b1ab9c16b918cafdc9b77c27bc2f3781b6de6b1 + checksum: 10c0/257efcd22f98a2f9189e37aad65c33a00b4c38e75bd3c815a4420a6f5515bc85a7002a7594c0a7d4985c4cf4af22471e28e8be8cdb47acfe7a2e28f0cc1b2fad languageName: node linkType: hard -"@opentelemetry/otlp-transformer@npm:0.56.0": - version: 0.56.0 - resolution: "@opentelemetry/otlp-transformer@npm:0.56.0" +"@opentelemetry/otlp-transformer@npm:0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/otlp-transformer@npm:0.200.0" dependencies: - "@opentelemetry/api-logs": "npm:0.56.0" - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/resources": "npm:1.29.0" - "@opentelemetry/sdk-logs": "npm:0.56.0" - "@opentelemetry/sdk-metrics": "npm:1.29.0" - "@opentelemetry/sdk-trace-base": "npm:1.29.0" + "@opentelemetry/api-logs": "npm:0.200.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/sdk-logs": "npm:0.200.0" + "@opentelemetry/sdk-metrics": "npm:2.0.0" + "@opentelemetry/sdk-trace-base": "npm:2.0.0" protobufjs: "npm:^7.3.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/898bae14a8f84a2f5a8d3a3b89966a5d3af1102b273dac748e404651ad113876b095faf1528055fce65de99dc33bc764cd650f21019ada0f85926f7606dc377e + checksum: 10c0/4f5383fad48c62e17824df91f6944b0376cb17f7b132b11d62fa5cf46747f224c980960209c85669b6e341a131f94586c6ad52bc1a6d2fb8d5295e23b460600c languageName: node linkType: hard -"@opentelemetry/otlp-transformer@npm:0.57.2": - version: 0.57.2 - resolution: "@opentelemetry/otlp-transformer@npm:0.57.2" - dependencies: - "@opentelemetry/api-logs": "npm:0.57.2" - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/resources": "npm:1.30.1" - "@opentelemetry/sdk-logs": "npm:0.57.2" - "@opentelemetry/sdk-metrics": "npm:1.30.1" - "@opentelemetry/sdk-trace-base": "npm:1.30.1" - protobufjs: "npm:^7.3.0" - peerDependencies: - "@opentelemetry/api": ^1.3.0 - checksum: 10c0/094979421768c5ac0672d1ce62bbc710a8cc836eb24e1cdfe5fb2c5c55908d19cf35fd6810cd266e7444d5677087846d5a8959df5886dfe1774199a3ae1d50a4 - languageName: node - linkType: hard - -"@opentelemetry/resources@npm:1.29.0": - version: 1.29.0 - resolution: "@opentelemetry/resources@npm:1.29.0" - dependencies: - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/semantic-conventions": "npm:1.28.0" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/10a91597b2ae92eeeeee9645c8147056b930739023bde4f18190317f7e8a05acd9e440b29d04be3580f7af4ffe5ff629d970264278f86574c429685f4804a006 - languageName: node - linkType: hard - -"@opentelemetry/resources@patch:@opentelemetry/resources@npm:1.29.0#~/.yarn/patches/@opentelemetry-resources-npm-1.29.0-112f89f0c5.patch": - version: 1.29.0 - resolution: "@opentelemetry/resources@patch:@opentelemetry/resources@npm%3A1.29.0#~/.yarn/patches/@opentelemetry-resources-npm-1.29.0-112f89f0c5.patch::version=1.29.0&hash=7be975" +"@opentelemetry/resources@npm:2.0.0, @opentelemetry/resources@npm:^2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/resources@npm:2.0.0" dependencies: - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/semantic-conventions": "npm:1.28.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/d691090002ca32813eb99ba0748ea1d5ef1957283326a874ee298ad634eee2bb8bb4ec26fa72605d70a4aa972e35389d5ca6b12851d8bef492574fa08c6ce147 + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10c0/2f331ff8268ef7168e8f24312fd7505900693c0ea302f6025937e94c157b8173ee54f5d5a737c06b956da721aa63443ac520f530cade880ef3cd40a2a25c702c languageName: node linkType: hard -"@opentelemetry/sdk-logs@npm:0.56.0": - version: 0.56.0 - resolution: "@opentelemetry/sdk-logs@npm:0.56.0" +"@opentelemetry/resources@patch:@opentelemetry/resources@npm%3A2.0.0#~/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch": + version: 2.0.0 + resolution: "@opentelemetry/resources@patch:@opentelemetry/resources@npm%3A2.0.0#~/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch::version=2.0.0&hash=81587a" dependencies: - "@opentelemetry/api-logs": "npm:0.56.0" - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/resources": "npm:1.29.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: - "@opentelemetry/api": ">=1.4.0 <1.10.0" - checksum: 10c0/abd5584c8d98a71bfefdca4b864f69714d0e638c5ad9fe4819744b938aea362c9602b884da1da24ae394bccbe044246463a208e775b3ac4718eadaff7fac295d + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10c0/ba0e2ef51bcfeab51c9ff85bfc2a7d8a1c1c284de9af9e7ef549cc95c2b16e7b3c21c529bc7537f95ec64b822244c7975bcd0dba4b748af425a7b3530eeb3e0d languageName: node linkType: hard -"@opentelemetry/sdk-logs@npm:0.57.2": - version: 0.57.2 - resolution: "@opentelemetry/sdk-logs@npm:0.57.2" +"@opentelemetry/sdk-logs@npm:0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/sdk-logs@npm:0.200.0" dependencies: - "@opentelemetry/api-logs": "npm:0.57.2" - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/resources": "npm:1.30.1" + "@opentelemetry/api-logs": "npm:0.200.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" peerDependencies: "@opentelemetry/api": ">=1.4.0 <1.10.0" - checksum: 10c0/dda61cf656a93d2f5ef1ca0495db59bfa33efc8ca7ee11018850a9ff78ee0459fb0393e70be7ae5d3cd084e0652d36fbf5778c7b3e9028c6668f9bf0d6c9473e + checksum: 10c0/031dc40dd012fad102e5c8c0c9bdbbce051dbc7fcc2e05e003f959aeb34d252dc3595b353ea2a9f900ff40f45d19cb4c8f7ab95a9faa01391f6b415c7780c786 languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:1.29.0": - version: 1.29.0 - resolution: "@opentelemetry/sdk-metrics@npm:1.29.0" +"@opentelemetry/sdk-metrics@npm:2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/sdk-metrics@npm:2.0.0" dependencies: - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/resources": "npm:1.29.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 10c0/4fca3b43fc9e9d139e87e18abf91069ba09c110bd4aa093e97ae02cd9af2cc82560f38dd4e3a6c76b054e1f8cbe5801faada2d24d7673a0ab15bf69923d6202c + "@opentelemetry/api": ">=1.9.0 <1.10.0" + checksum: 10c0/9a3c87738671f29a496a39d65b3ab0829b52d0f31c0be662ea575a8f77bc5444044fd01513c891abdff6bf6344a08730e18f79253a85e68962669f3e1fa12e72 languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:1.30.1": - version: 1.30.1 - resolution: "@opentelemetry/sdk-metrics@npm:1.30.1" +"@opentelemetry/sdk-trace-base@npm:2.0.0, @opentelemetry/sdk-trace-base@npm:^2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/sdk-trace-base@npm:2.0.0" dependencies: - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/resources": "npm:1.30.1" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 10c0/7e60178e61eaf49db5d74f6c3701706762d71d370044253c72bb5668dba3a435030ed6847605ee55d0e1b8908ad123a2517b5f00415a2fb3d98468a0a318e3c0 + checksum: 10c0/c63cc052741e4cc01d084c883e24a1c0792f081a242e14e5cf526d5a3d96bac5974006fa0d8f902bd04f34ed9ce95a0d0f01b7fdb37fcc813cea9f818f2b8f43 languageName: node linkType: hard -"@opentelemetry/sdk-trace-base@npm:1.29.0": - version: 1.29.0 - resolution: "@opentelemetry/sdk-trace-base@npm:1.29.0" - dependencies: - "@opentelemetry/core": "npm:1.29.0" - "@opentelemetry/resources": "npm:1.29.0" - "@opentelemetry/semantic-conventions": "npm:1.28.0" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/870f29d3d72f4d6cbcaada328b544aa111527d72f0818f89bc5661b0427a37618db939cc65e834c8c73bad744665f9ac6dc0ec48276b113b5d4a0913c2b8fece - languageName: node - linkType: hard - -"@opentelemetry/sdk-trace-base@npm:1.30.1, @opentelemetry/sdk-trace-base@npm:^1.29.0": - version: 1.30.1 - resolution: "@opentelemetry/sdk-trace-base@npm:1.30.1" - dependencies: - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/resources": "npm:1.30.1" - "@opentelemetry/semantic-conventions": "npm:1.28.0" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/77019dc3efaeceb41b4c54dd83b92f0ccd81ecceca544cbbe8e0aee4b2c8727724bdb9dcecfe00622c16d60946ae4beb69a5c0e7d85c4bc7ef425bd84f8b970c - languageName: node - linkType: hard - -"@opentelemetry/sdk-trace-web@npm:^1.29.0": - version: 1.30.1 - resolution: "@opentelemetry/sdk-trace-web@npm:1.30.1" +"@opentelemetry/sdk-trace-web@npm:^2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/sdk-trace-web@npm:2.0.0" dependencies: - "@opentelemetry/core": "npm:1.30.1" - "@opentelemetry/sdk-trace-base": "npm:1.30.1" - "@opentelemetry/semantic-conventions": "npm:1.28.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/sdk-trace-base": "npm:2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/8dd2901b5eef68a5896da0ad11f04c8990ce4ef2dcbec27bbc02d7e193097c270ba5f4c9ca363ea10fb53ca7cc515f18d9dc383a69a17720cd0590474c0ffdaf - languageName: node - linkType: hard - -"@opentelemetry/semantic-conventions@npm:1.28.0": - version: 1.28.0 - resolution: "@opentelemetry/semantic-conventions@npm:1.28.0" - checksum: 10c0/deb8a0f744198071e70fea27143cf7c9f7ecb7e4d7b619488c917834ea09b31543c1c2bcea4ec5f3cf68797f0ef3549609c14e859013d9376400ac1499c2b9cb + checksum: 10c0/72af264a404a8cc6ba35235434f519bcb8825e2e9163e0ebe554074cbe51f543fbc4c5cc55b21dce221647af0ee6a0acab0442dc3d6ca1c32ff43f347ad95ad8 languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:^1.28.0": - version: 1.34.0 - resolution: "@opentelemetry/semantic-conventions@npm:1.34.0" - checksum: 10c0/a51a32a5cf5c803bd2125a680d0abacbff632f3b255d0fe52379dac191114a0e8d72a34f9c46c5483ccfe91c4061c309f3cf61a19d11347e2a69779e82cfefd0 +"@opentelemetry/semantic-conventions@npm:^1.28.0, @opentelemetry/semantic-conventions@npm:^1.29.0": + version: 1.30.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.30.0" + checksum: 10c0/0bf99552e3b4b7e8b7eb504b678d52f59c6f259df88e740a2011a0d858e523d36fee86047ae1b7f45849c77f00f970c3059ba58e0a06a7d47d6f01dbe8c455bd languageName: node linkType: hard From e6ca2c56ad02e81932ab8d7b3e40ffbfd7cf73c7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 27 Mar 2025 19:27:34 +0000 Subject: [PATCH 06/60] chore(dependencies): updated changesets for modified dependencies --- ...graphql-mesh_plugin-opentelemetry-956-dependencies.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md index 939f89ba4..6f1fccd60 100644 --- a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md @@ -4,6 +4,13 @@ dependencies updates: +- Updated dependency [`@opentelemetry/exporter-trace-otlp-grpc@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-grpc/v/0.200.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-http@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.200.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-zipkin@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/2.0.0) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/instrumentation@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/instrumentation/v/0.200.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/resources@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.0.0) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/sdk-trace-base@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.0) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/sdk-trace-web@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-web/v/2.0.0) (from `^1.29.0`, in `dependencies`) - Updated dependency [`@whatwg-node/promise-helpers@1.3.0` ↗︎](https://www.npmjs.com/package/@whatwg-node/promise-helpers/v/1.3.0) (from `^1.3.0`, in `dependencies`) -- Added dependency [`@opentelemetry/context-async-hooks@^1.30.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/1.30.0) (to `dependencies`) +- Added dependency [`@opentelemetry/context-async-hooks@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.0) (to `dependencies`) - Removed dependency [`@azure/monitor-opentelemetry-exporter@^1.0.0-beta.27` ↗︎](https://www.npmjs.com/package/@azure/monitor-opentelemetry-exporter/v/1.0.0) (from `dependencies`) From 44eaaccc6c60ac58d2b88a68a2dbeb790805d19a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 27 Mar 2025 19:40:28 +0000 Subject: [PATCH 07/60] chore(dependencies): updated changesets for modified dependencies --- .../@graphql-mesh_plugin-opentelemetry-956-dependencies.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md index 6f1fccd60..e4c85675d 100644 --- a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md @@ -4,6 +4,7 @@ dependencies updates: +- Updated dependency [`@opentelemetry/core@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.0) (from `^1.30.0`, in `dependencies`) - Updated dependency [`@opentelemetry/exporter-trace-otlp-grpc@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-grpc/v/0.200.0) (from `^0.57.0`, in `dependencies`) - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.200.0) (from `^0.57.0`, in `dependencies`) - Updated dependency [`@opentelemetry/exporter-zipkin@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/2.0.0) (from `^1.29.0`, in `dependencies`) From 2a56e5fd5a07f6784e8c2d0ad767d8c55710ada4 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Fri, 18 Apr 2025 20:31:20 +0200 Subject: [PATCH 08/60] feat(opentelemetry): Allow to use the plugin in Yoga (#965) --- .changeset/real-zoos-relate.md | 5 + packages/plugins/opentelemetry/src/plugin.ts | 53 +++--- .../tests/useOpenTelemetry.spec.ts | 29 +--- packages/plugins/opentelemetry/tests/utils.ts | 11 ++ .../plugins/opentelemetry/tests/yoga.spec.ts | 151 ++++++++++++++++++ 5 files changed, 204 insertions(+), 45 deletions(-) create mode 100644 .changeset/real-zoos-relate.md create mode 100644 packages/plugins/opentelemetry/tests/yoga.spec.ts diff --git a/.changeset/real-zoos-relate.md b/.changeset/real-zoos-relate.md new file mode 100644 index 000000000..99892d586 --- /dev/null +++ b/.changeset/real-zoos-relate.md @@ -0,0 +1,5 @@ +--- +'@graphql-mesh/plugin-opentelemetry': minor +--- + +Add support of Yoga. This plugin is now usable in Yoga too, which allows for better opentelemetry traces in subgraphs. diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index fefd200a9..08cdac9da 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -1,7 +1,7 @@ import { - GatewayConfigContext, getRetryInfo, isRetryExecutionRequest, + type GatewayConfigContext, type GatewayPlugin, } from '@graphql-hive/gateway-runtime'; import { getHeadersObj } from '@graphql-mesh/utils'; @@ -32,6 +32,7 @@ import { import { type SpanProcessor } from '@opentelemetry/sdk-trace-base'; import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { unfakePromise } from '@whatwg-node/promise-helpers'; +import { YogaLogger } from 'graphql-yoga'; import { ATTR_SERVICE_VERSION, SEMRESATTRS_SERVICE_NAME } from './attributes'; import { getContextManager, OtelContextStack } from './context'; import { @@ -243,7 +244,7 @@ export type OpenTelemetryPlugin = export function useOpenTelemetry( options: OpenTelemetryGatewayPluginOptions & { - logger: GatewayConfigContext['logger']; + logger?: GatewayConfigContext['logger']; }, ): OpenTelemetryPlugin { const inheritContext = options.inheritContext ?? true; @@ -268,12 +269,18 @@ export function useOpenTelemetry( : (getMostSpecificState(state)?.otel?.current ?? ROOT_CONTEXT); } - const pluginLogger = options.logger.child({ plugin: 'OpenTelemetry' }); + const yogaLogger = createDeferred(); + let pluginLogger = options.logger + ? fakePromise( + options.logger.child({ + plugin: 'OpenTelemetry', + }), + ) + : yogaLogger.promise; function init(): Promise { if ('initializeNodeSDK' in options && options.initializeNodeSDK === false) { if (options.contextManager === false) { - pluginLogger.debug('context manager disabled by user.'); return fakePromise(false); } @@ -326,23 +333,30 @@ export function useOpenTelemetry( let preparation$: Promise; preparation$ = init().then((contextManager) => { - const diaLogger = pluginLogger.child('otel-diag'); - diag.setLogger( - { - error: (message, ...args) => diaLogger.error(message, ...args), - warn: (message, ...args) => diaLogger.warn(message, ...args), - info: (message, ...args) => diaLogger.info(message, ...args), - debug: (message, ...args) => diaLogger.debug(message, ...args), - verbose: (message, ...args) => diaLogger.debug(message, ...args), - }, - options.diagLevel ?? DiagLogLevel.VERBOSE, - ); useContextManager = contextManager; - pluginLogger.debug( - `context manager is ${useContextManager ? 'enabled' : 'disabled'}`, - ); tracer = options.tracer || trace.getTracer('gateway'); preparation$ = fakePromise(); + return pluginLogger.then((logger) => { + pluginLogger = fakePromise(logger); + logger.debug( + `context manager is ${useContextManager ? 'enabled' : 'disabled'}`, + ); + diag.setLogger( + { + error: (message, ...args) => + logger.error('[otel-diag] ' + message, ...args), + warn: (message, ...args) => + logger.warn('[otel-diag] ' + message, ...args), + info: (message, ...args) => + logger.info('[otel-diag] ' + message, ...args), + debug: (message, ...args) => + logger.debug('[otel-diag] ' + message, ...args), + verbose: (message, ...args) => + logger.debug('[otel-diag] ' + message, ...args), + }, + options.diagLevel ?? DiagLogLevel.VERBOSE, + ); + }); }); return withState< @@ -651,6 +665,7 @@ export function useOpenTelemetry( onYogaInit({ yoga }) { yogaVersion.resolve(yoga.version); + yogaLogger.resolve(yoga.logger); }, onEnveloped({ state, extendContext }) { @@ -667,7 +682,7 @@ export function useOpenTelemetry( state.forRequest.otel && setResponseAttributes(state.forRequest.otel.root, response); } catch (error) { - pluginLogger.error('Failed to end http span', { error }); + pluginLogger.then((l) => l.error('Failed to end http span', { error })); } }, diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index c1409bbd7..a869c65ad 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -1,19 +1,8 @@ import { SpanStatusCode } from '@opentelemetry/api'; -import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; -import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { createSchema, createYoga } from 'graphql-yoga'; -import { - afterAll, - beforeAll, - beforeEach, - describe, - expect, - it, - vi, -} from 'vitest'; +import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'; import type { OpenTelemetryContextExtension } from '../src/plugin'; -import { buildTestGateway, MockSpanExporter } from './utils'; +import { buildTestGateway, spanExporter } from './utils'; let mockModule = vi.mock; if (globalThis.Bun) { @@ -22,26 +11,14 @@ if (globalThis.Bun) { const mockRegisterProvider = vi.fn(); let gw: typeof import('../../../runtime/src'); describe('useOpenTelemetry', () => { - // WORKAROUND: Bun does replace already imported modules instances. We make a copy to have the real implementation - const TracerProvider = WebTracerProvider; mockModule('@opentelemetry/sdk-trace-web', () => ({ WebTracerProvider: vi.fn(() => ({ register: mockRegisterProvider })), })); - let traceProvider: WebTracerProvider; - const spanExporter = new MockSpanExporter(); beforeAll(async () => { gw = await import('../../../runtime/src'); - traceProvider = new TracerProvider({ - spanProcessors: [new SimpleSpanProcessor(spanExporter)], - }); - traceProvider.register({ - contextManager: new AsyncLocalStorageContextManager(), - }); - }); - afterAll(async () => { - traceProvider.shutdown?.(); }); + beforeEach(() => { vi.clearAllMocks(); spanExporter.reset(); diff --git a/packages/plugins/opentelemetry/tests/utils.ts b/packages/plugins/opentelemetry/tests/utils.ts index 266fa3e13..4d92b9f91 100644 --- a/packages/plugins/opentelemetry/tests/utils.ts +++ b/packages/plugins/opentelemetry/tests/utils.ts @@ -1,11 +1,14 @@ import { GatewayConfigProxy, GatewayPlugin } from '@graphql-hive/gateway'; import { MeshFetch } from '@graphql-mesh/types'; import { diag, TraceState } from '@opentelemetry/api'; +import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; import { ExportResultCode, type ExportResult } from '@opentelemetry/core'; import { + SimpleSpanProcessor, type ReadableSpan, type SpanExporter, } from '@opentelemetry/sdk-trace-base'; +import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { AsyncDisposableStack } from '@whatwg-node/disposablestack'; import { createSchema, createYoga, type GraphQLParams } from 'graphql-yoga'; import { expect } from 'vitest'; @@ -208,3 +211,11 @@ export type Span = ReadableSpan & { traceState?: TraceState; id: string; }; + +export const spanExporter = new MockSpanExporter(); +const traceProvider = new WebTracerProvider({ + spanProcessors: [new SimpleSpanProcessor(spanExporter)], +}); +traceProvider.register({ + contextManager: new AsyncLocalStorageContextManager(), +}); diff --git a/packages/plugins/opentelemetry/tests/yoga.spec.ts b/packages/plugins/opentelemetry/tests/yoga.spec.ts new file mode 100644 index 000000000..8e17c5c15 --- /dev/null +++ b/packages/plugins/opentelemetry/tests/yoga.spec.ts @@ -0,0 +1,151 @@ +import { useOpenTelemetry } from '@graphql-mesh/plugin-opentelemetry'; +import { createSchema, createYoga, Plugin as YogaPlugin } from 'graphql-yoga'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { spanExporter } from './utils'; + +let mockModule = vi.mock; +if (globalThis.Bun) { + mockModule = require('bun:test').mock.module; +} +const mockRegisterProvider = vi.fn(); + +describe('useOpenTelemetry', () => { + mockModule('@opentelemetry/sdk-trace-web', () => ({ + WebTracerProvider: vi.fn(() => ({ register: mockRegisterProvider })), + })); + + beforeEach(() => { + vi.clearAllMocks(); + spanExporter.reset(); + }); + + describe('usage with Yoga', () => { + describe.each([ + { name: 'with context manager', contextManager: undefined }, + { name: 'without context manager', contextManager: false as const }, + ])('$name', ({ contextManager }) => { + function buildTest( + options: { + plugins?: ( + otelPlugin: ReturnType, + ) => YogaPlugin[]; + } = {}, + ) { + const otelPlugin = useOpenTelemetry({ + initializeNodeSDK: false, + contextManager, + }); + + const yoga = createYoga({ + schema: createSchema({ + typeDefs: /* GraphQL */ ` + type Query { + hello: String + } + `, + resolvers: { + Query: { + hello: () => 'World', + }, + }, + }), + logging: false, + maskedErrors: false, + plugins: [otelPlugin, ...(options.plugins?.(otelPlugin) ?? [])], + }); + + return { + query: async () => { + const response = await yoga.fetch('http://yoga/graphql', { + method: 'POST', + headers: { + 'content-type': 'application/json', + }, + body: JSON.stringify({ query: '{ hello }' }), + }); + expect(response.status).toBe(200); + }, + [Symbol.asyncDispose]: async () => { + await yoga.dispose(); + }, + }; + } + + const expected = { + http: { + root: 'POST /graphql', + children: ['graphql.operation Anonymous'], + }, + graphql: { + root: 'graphql.operation Anonymous', + children: [ + 'graphql.parse', + 'graphql.validate', + 'graphql.context', + 'graphql.execute', + ], + }, + }; + + describe('span parenting', () => { + it('should register a complete span tree $name', async () => { + await using gateway = buildTest(); + await gateway.query(); + + for (const { root, children } of Object.values(expected)) { + const spanTree = spanExporter.assertRoot(root); + children.forEach(spanTree.expectChild); + } + }); + + it('should allow to report custom spans', async () => { + const expectedCustomSpans = { + http: { root: 'POST /graphql', children: ['custom.request'] }, + graphql: { + root: 'graphql.operation Anonymous', + children: ['custom.operation'], + }, + parse: { root: 'graphql.parse', children: ['custom.parse'] }, + validate: { + root: 'graphql.validate', + children: ['custom.validate'], + }, + context: { root: 'graphql.context', children: ['custom.context'] }, + execute: { root: 'graphql.execute', children: ['custom.execute'] }, + }; + + await using yoga = buildTest({ + plugins: (otelPlugin) => { + const createSpan = + (name: string) => + ( + matcher: Parameters<(typeof otelPlugin)['getOtelContext']>[0], + ) => + otelPlugin + .getTracer() + .startSpan(name, {}, otelPlugin.getOtelContext(matcher)) + .end(); + + return [ + { + onRequest: createSpan('custom.request'), + onParams: createSpan('custom.operation'), + onParse: createSpan('custom.parse'), + onValidate: createSpan('custom.validate'), + onContextBuilding: createSpan('custom.context'), + onExecute: createSpan('custom.execute'), + }, + ]; + }, + }); + await yoga.query(); + + for (const { root, children } of Object.values(expectedCustomSpans)) { + const spanTree = spanExporter.assertRoot(root); + children.forEach(spanTree.expectChild); + } + }); + }); + }); + }); +}); From eb8bc32649b1eb4375bf989e399040b55e1a7641 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Fri, 18 Apr 2025 20:32:18 +0200 Subject: [PATCH 09/60] feat(opentelemetry): add cache events and attributes (#993) --- .../plugins/opentelemetry/src/plugin-utils.ts | 28 +++++----- packages/plugins/opentelemetry/src/plugin.ts | 43 ++++++++++++++- packages/plugins/opentelemetry/src/spans.ts | 50 +++++++++++++++++ .../tests/useOpenTelemetry.spec.ts | 54 +++++++++++++++++++ packages/plugins/opentelemetry/tests/utils.ts | 23 ++++++-- 5 files changed, 181 insertions(+), 17 deletions(-) diff --git a/packages/plugins/opentelemetry/src/plugin-utils.ts b/packages/plugins/opentelemetry/src/plugin-utils.ts index a6dd4f74f..77817b544 100644 --- a/packages/plugins/opentelemetry/src/plugin-utils.ts +++ b/packages/plugins/opentelemetry/src/plugin-utils.ts @@ -56,19 +56,23 @@ export function withState< function addStateGetters(src: any) { const result: any = {}; for (const [hookName, hook] of Object.entries(src) as any) { - result[hookName] = - typeof hook !== 'function' - ? hook - : (payload: any, ...args: any[]) => - hook( - { - ...payload, - get state() { - return getState(payload); - }, + if (typeof hook !== 'function') { + result[hookName] = hook; + } else { + result[hookName] = { + [hook.name](payload: any, ...args: any[]) { + return hook( + { + ...payload, + get state() { + return getState(payload); }, - ...args, - ); + }, + ...args, + ); + }, + }[hook.name]; + } } return result; } diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 08cdac9da..eeb62d554 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -51,8 +51,11 @@ import { createHttpSpan, startSubgraphExecuteFetchSpan as createSubgraphExecuteFetchSpan, createUpstreamHttpFetchSpan, + recordCacheError, + recordCacheEvent, registerException, setExecutionAttributesOnOperationSpan, + setExecutionResultAttributes, setGraphQLExecutionAttributes, setGraphQLExecutionResultAttributes, setGraphQLParseAttributes, @@ -205,6 +208,10 @@ export type OpenTelemetryGatewayPluginOptions = * Enable/disable upstream HTTP fetch calls spans (default: true). */ upstreamFetch?: BooleanOrPredicate; + /** + * Enable/Disable cache related span events (default: true). + */ + cache?: BooleanOrPredicate<{ key: string; action: 'read' | 'write' }>; }; }; @@ -677,6 +684,25 @@ export function useOpenTelemetry( }); }, + onCacheGet: (payload) => + shouldTrace(options.spans?.cache, { key: payload.key, action: 'read' }) + ? { + onCacheMiss: () => recordCacheEvent('miss', payload), + onCacheHit: () => recordCacheEvent('hit', payload), + onCacheGetError: ({ error }) => + recordCacheError('read', error, payload), + } + : undefined, + + onCacheSet: (payload) => + shouldTrace(options.spans?.cache, { key: payload.key, action: 'write' }) + ? { + onCacheSetDone: () => recordCacheEvent('write', payload), + onCacheSetError: ({ error }) => + recordCacheError('write', error, payload), + } + : undefined, + onResponse({ response, state }) { try { state.forRequest.otel && @@ -686,7 +712,7 @@ export function useOpenTelemetry( } }, - onParams({ state, context: gqlCtx, params }) { + onParams: function onParamsOTEL({ state, context: gqlCtx, params }) { if ( !isParentEnabled(state) || !shouldTrace(options.spans?.graphql, gqlCtx) @@ -698,6 +724,21 @@ export function useOpenTelemetry( setParamsAttributes({ ctx, params }); }, + onExecutionResult: function onExeResOTEL({ + result, + context: gqlCtx, + state, + }) { + if ( + !isParentEnabled(state) || + !shouldTrace(options.spans?.graphql, gqlCtx) + ) { + return; + } + + setExecutionResultAttributes({ ctx: getContext(state), result }); + }, + onParse({ state, context: gqlCtx }) { if ( !isParentEnabled(state) || diff --git a/packages/plugins/opentelemetry/src/spans.ts b/packages/plugins/opentelemetry/src/spans.ts index 2aa776502..8aa3a5f83 100644 --- a/packages/plugins/opentelemetry/src/spans.ts +++ b/packages/plugins/opentelemetry/src/spans.ts @@ -1,3 +1,4 @@ +import { OnCacheGetHookEventPayload } from '@graphql-hive/gateway-runtime'; import { defaultPrintFn } from '@graphql-mesh/transport-common'; import { getOperationASTFromDocument, @@ -12,6 +13,11 @@ import { type Context, type Tracer, } from '@opentelemetry/api'; +import { + SEMATTRS_EXCEPTION_MESSAGE, + SEMATTRS_EXCEPTION_STACKTRACE, + SEMATTRS_EXCEPTION_TYPE, +} from '@opentelemetry/semantic-conventions'; import type { ExecutionArgs } from 'graphql'; import type { GraphQLParams } from 'graphql-yoga'; import { @@ -78,6 +84,10 @@ export function setResponseAttributes(ctx: Context, response: Response) { const span = trace.getSpan(ctx); if (span) { span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, response.status); + span.setAttribute( + 'gateway.cache.response_cache', + response.status === 304 && response.headers.get('ETag') ? 'hit' : 'miss', + ); span.setStatus({ code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR, message: response.ok ? undefined : response.statusText, @@ -385,6 +395,46 @@ export function setUpstreamFetchResponseAttributes(input: { }); } +export function recordCacheEvent( + event: string, + payload: OnCacheGetHookEventPayload, +) { + trace.getActiveSpan()?.addEvent('gateway.cache.' + event, { + 'gateway.cache.key': payload.key, + 'gateway.cache.ttl': payload.ttl, + }); +} + +export function recordCacheError( + action: 'read' | 'write', + error: Error, + payload: OnCacheGetHookEventPayload, +) { + trace.getActiveSpan()?.addEvent('gateway.cache.error', { + 'gateway.cache.key': payload.key, + 'gateway.cache.ttl': payload.ttl, + 'gateway.cache.action': action, + [SEMATTRS_EXCEPTION_TYPE]: + 'code' in error ? (error.code as string) : error.message, + [SEMATTRS_EXCEPTION_MESSAGE]: error.message, + [SEMATTRS_EXCEPTION_STACKTRACE]: error.stack, + }); +} + +const responseCacheSymbol = Symbol.for('servedFromResponseCache'); +export function setExecutionResultAttributes(input: { + ctx: Context; + result?: any; // We don't need a proper type here because we rely on Symbol mark from response cache plugin +}) { + const span = trace.getSpan(input.ctx); + if (input.result && span) { + span.setAttribute( + 'gateway.cache.response_cache', + input.result[responseCacheSymbol] ? 'hit' : 'miss', + ); + } +} + export function registerException(ctx: Context | undefined, error: any) { const span = ctx && trace.getSpan(ctx); if (!span) { diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index a869c65ad..0c0c5dba0 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -532,5 +532,59 @@ describe('useOpenTelemetry', () => { children.forEach(spanTree.expectChild); } }); + + it('should have a response cache attribute', async () => { + function checkCacheAttributes(attrs: { + http: 'hit' | 'miss'; + operation?: 'hit' | 'miss'; + }) { + const { span: httpSpan } = spanExporter.assertRoot('POST /graphql'); + const operationSpan = spanExporter.spans.find(({ name }) => + name.startsWith('graphql.operation'), + ); + + expect(httpSpan.attributes['gateway.cache.response_cache']).toBe( + attrs.http, + ); + if (attrs.operation) { + expect(operationSpan).toBeDefined(); + expect( + operationSpan!.attributes['gateway.cache.response_cache'], + ).toBe(attrs.operation); + } + } + await using gateway = await buildTestGateway({ + gatewayOptions: { + cache: await import('@graphql-mesh/cache-localforage').then( + ({ default: Cache }) => new Cache(), + ), + responseCaching: { + session: () => '1', + }, + }, + }); + await gateway.query(); + + checkCacheAttributes({ http: 'miss', operation: 'miss' }); + + spanExporter.reset(); + await gateway.query(); + + checkCacheAttributes({ http: 'miss', operation: 'hit' }); + + spanExporter.reset(); + const response = await gateway.fetch('http://gateway/graphql', { + method: 'POST', + headers: { + 'content-type': 'application/json', + 'If-None-Match': + 'c2f6fb105ef60ccc99dd6725b55939742e69437d4f85d52bf4664af3799c49fa', + 'If-Modified-Since': new Date(), + }, + }); + expect(response.status).toBe(304); + + checkCacheAttributes({ http: 'hit' }); // There is no graphql operation span when cached by HTTP + }); }); }); diff --git a/packages/plugins/opentelemetry/tests/utils.ts b/packages/plugins/opentelemetry/tests/utils.ts index 4d92b9f91..19b643509 100644 --- a/packages/plugins/opentelemetry/tests/utils.ts +++ b/packages/plugins/opentelemetry/tests/utils.ts @@ -81,15 +81,19 @@ export async function buildTestGateway( return { otelPlugin: otelPlugin!, - query: async ( - body: GraphQLParams = { + query: async ({ + shouldReturnErrors, + body = { query: /* GraphQL */ ` query { hello } `, }, - ) => { + }: { + body?: GraphQLParams; + shouldReturnErrors?: boolean; + } = {}) => { const response = await gateway.fetch('http://localhost:4000/graphql', { method: 'POST', headers: { @@ -97,8 +101,19 @@ export async function buildTestGateway( }, body: JSON.stringify(body), }); - return response.json(); + + const result = await response.json(); + if (shouldReturnErrors) { + expect(result.errors).toBeDefined(); + } else { + if (result.errors) { + console.error(result.errors); + } + expect(result.errors).not.toBeDefined(); + } + return result; }, + fetch: gateway.fetch, [Symbol.asyncDispose]: () => { diag.disable(); return stack.disposeAsync(); From 9ecaec9b9e4d5157abc02b1d8db6f5bfc5684765 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Fri, 18 Apr 2025 20:32:33 +0200 Subject: [PATCH 10/60] feat(opentelemetry): Use env variables for resource attributes (#1036) Co-authored-by: github-actions[bot] --- packages/plugins/opentelemetry/src/plugin.ts | 18 ++++++++++++++---- packages/plugins/opentelemetry/src/utils.ts | 6 ++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index eeb62d554..f63e06205 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -65,7 +65,7 @@ import { setUpstreamFetchAttributes, setUpstreamFetchResponseAttributes, } from './spans'; -import { tryContextManagerSetup } from './utils'; +import { getEnvVar, tryContextManagerSetup } from './utils'; type BooleanOrPredicate = | boolean @@ -103,11 +103,18 @@ interface OpenTelemetryGatewayPluginOptionsWithInit { */ exporters: MaybePromise[]; /** - * Service name to use for OpenTelemetry NodeSDK resource option (default: 'Gateway'). + * Service name to use for OpenTelemetry Resource option (default: 'Gateway'). * * Does not apply when `initializeNodeSDK` is `false`. */ serviceName?: string; + /** + * Service version to use for OpenTelemetry Resource option (default: Hive Gateway version). + * + * Note: This can also be set by using `OTEL_SERVICE_VERSION` environment variable. + */ + serviceVersion?: string; + /** * Whether to rely on OTEL context api for span correlation. * - `undefined` (default): the plugin will try to enable context manager if possible. @@ -315,8 +322,11 @@ export function useOpenTelemetry( const resource = detectResources().merge( resourceFromAttributes({ - [SEMRESATTRS_SERVICE_NAME]: options.serviceName ?? 'Gateway', - [ATTR_SERVICE_VERSION]: yogaVersion.promise, + [SEMRESATTRS_SERVICE_NAME]: + options.serviceName ?? getEnvVar('OTEL_SERVICE_NAME', 'Gateway'), + [ATTR_SERVICE_VERSION]: + options.serviceVersion ?? + getEnvVar('OTEL_SERVICE_VERSION', yogaVersion.promise), }), ); diff --git a/packages/plugins/opentelemetry/src/utils.ts b/packages/plugins/opentelemetry/src/utils.ts index bd2b8233e..9e1b5e4d1 100644 --- a/packages/plugins/opentelemetry/src/utils.ts +++ b/packages/plugins/opentelemetry/src/utils.ts @@ -33,3 +33,9 @@ export function isContextManagerCompatibleWithAsync(): Promise { return (context.active().getValue(symbol) as boolean) || false; }); } + +export const getEnvVar = + 'process' in globalThis + ? (name: string, defaultValue: T): string | T => + process.env[name] || defaultValue + : (_name: string, defaultValue: T): string | T => defaultValue; From f0527092e4942b4c97cb3272266f93f3200fac98 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Fri, 18 Apr 2025 20:46:30 +0200 Subject: [PATCH 11/60] feat(opentelemetry): Exporters config is optional (#966) --- .changeset/nervous-carrots-allow.md | 5 +++++ packages/plugins/opentelemetry/src/processors.ts | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/nervous-carrots-allow.md diff --git a/.changeset/nervous-carrots-allow.md b/.changeset/nervous-carrots-allow.md new file mode 100644 index 000000000..78b884f7f --- /dev/null +++ b/.changeset/nervous-carrots-allow.md @@ -0,0 +1,5 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +Fix the types exporters factories, the configuration is actually optional. All parameters can be determined from environement variables. diff --git a/packages/plugins/opentelemetry/src/processors.ts b/packages/plugins/opentelemetry/src/processors.ts index ce548603b..587773afb 100644 --- a/packages/plugins/opentelemetry/src/processors.ts +++ b/packages/plugins/opentelemetry/src/processors.ts @@ -39,14 +39,14 @@ export function createStdoutExporter( } export function createZipkinExporter( - config: ZipkinExporterConfig, + config?: ZipkinExporterConfig, batchingConfig?: BatchingConfig, ): SpanProcessor { return resolveBatchingConfig(new ZipkinExporter(config), batchingConfig); } export function createOtlpHttpExporter( - config: OTLPExporterNodeConfigBase, + config?: OTLPExporterNodeConfigBase, batchingConfig?: BatchingConfig, ): SpanProcessor { return resolveBatchingConfig(new OtlpHttpExporter(config), batchingConfig); @@ -86,7 +86,7 @@ function loadExporterLazily< } export function createOtlpGrpcExporter( - config: OTLPGRPCExporterConfigNode, + config?: OTLPGRPCExporterConfigNode, batchingConfig?: BatchingConfig, ): MaybePromise { return handleMaybePromise( From 9bee8e9ff165c43591c0b20637b6d1f2a2cb9cc2 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Fri, 18 Apr 2025 20:47:28 +0200 Subject: [PATCH 12/60] feat(opentelemetry): add sampling rate (#968) Co-authored-by: github-actions[bot] --- .changeset/nine-pears-peel.md | 5 +++++ packages/plugins/opentelemetry/src/plugin.ts | 22 +++++++++++++++++-- .../tests/useOpenTelemetry.spec.ts | 1 + 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 .changeset/nine-pears-peel.md diff --git a/.changeset/nine-pears-peel.md b/.changeset/nine-pears-peel.md new file mode 100644 index 000000000..51da34732 --- /dev/null +++ b/.changeset/nine-pears-peel.md @@ -0,0 +1,5 @@ +--- +'@graphql-mesh/plugin-opentelemetry': minor +--- + +Add a configurable sampling rate. The sampling strategy relies on a determenistic probability sampler with a parent priority, meaning that if a span is sampled, all its children spans will also be sampled. diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index f63e06205..8344cc873 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -30,7 +30,12 @@ import { resourceFromAttributes, } from '@opentelemetry/resources'; import { type SpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; +import { + AlwaysOnSampler, + ParentBasedSampler, + TraceIdRatioBasedSampler, + WebTracerProvider, +} from '@opentelemetry/sdk-trace-web'; import { unfakePromise } from '@whatwg-node/promise-helpers'; import { YogaLogger } from 'graphql-yoga'; import { ATTR_SERVICE_VERSION, SEMRESATTRS_SERVICE_NAME } from './attributes'; @@ -125,6 +130,13 @@ interface OpenTelemetryGatewayPluginOptionsWithInit { * - `ContextManager`: rely on this provided `ContextManger` instance. */ contextManager?: ContextManager | boolean; + /** + * Sampling rate of spans. The value should be between 0 and 1. + * By default, all spans are recorded and exported, which correspond to a sampling rate of 1. + * + * Note: The sampling strategy used is parent based, meaning spans will be always sampled if a sampled parent span is found in the OTEL context. + */ + samplingRate?: number; } type OpenTelemetryGatewayPluginOptionsInit = @@ -332,6 +344,12 @@ export function useOpenTelemetry( let contextManager$ = getContextManager(options.contextManager); + const sampler = options.samplingRate + ? new ParentBasedSampler({ + root: new TraceIdRatioBasedSampler(options.samplingRate), + }) + : new AlwaysOnSampler(); + setGlobalErrorHandler((err) => { diag.error('Uncaught Error', err); }); @@ -339,7 +357,7 @@ export function useOpenTelemetry( return exporters$ .then((exporters) => { spanProcessors = exporters; - provider = new WebTracerProvider({ resource, spanProcessors }); + provider = new WebTracerProvider({ resource, spanProcessors, sampler }); return contextManager$; }) .then((contextManager) => { diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index 0c0c5dba0..cd744d949 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -13,6 +13,7 @@ let gw: typeof import('../../../runtime/src'); describe('useOpenTelemetry', () => { mockModule('@opentelemetry/sdk-trace-web', () => ({ WebTracerProvider: vi.fn(() => ({ register: mockRegisterProvider })), + AlwaysOnSampler: vi.fn(), })); beforeAll(async () => { From 279cc097e081c08ec3215a0dae3226ba1c0b777b Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Mon, 12 May 2025 16:23:33 +0200 Subject: [PATCH 13/60] mutate execution request because we strict compare --- .../runtime/src/plugins/useUpstreamRetry.ts | 37 ++++++------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/packages/runtime/src/plugins/useUpstreamRetry.ts b/packages/runtime/src/plugins/useUpstreamRetry.ts index d64183063..ee0043c84 100644 --- a/packages/runtime/src/plugins/useUpstreamRetry.ts +++ b/packages/runtime/src/plugins/useUpstreamRetry.ts @@ -6,7 +6,6 @@ import { MaybeAsyncIterable, } from '@graphql-tools/utils'; import { handleMaybePromise, MaybePromise } from '@whatwg-node/promise-helpers'; -import { GraphQLResolveInfo } from 'graphql'; import { GatewayPlugin } from '../types'; export const RETRY_SYMBOL = Symbol.for('@hive-gateway/runtime/upstreamRetry'); @@ -69,14 +68,11 @@ export function useUpstreamRetry>( return { onSubgraphExecute({ subgraphName, - executionRequest: subgraphExecutionRequest, + executionRequest, executor, setExecutor, }) { - const optsForReq = retryOptions({ - subgraphName, - executionRequest: subgraphExecutionRequest, - }); + const optsForReq = retryOptions({ subgraphName, executionRequest }); if (optsForReq) { const { maxRetries, @@ -106,7 +102,7 @@ export function useUpstreamRetry>( }, } = optsForReq; if (maxRetries > 0) { - setExecutor(function (executorExecutionRequest: ExecutionRequest) { + setExecutor(function (executionRequest: ExecutionRequest) { let attemptsLeft = maxRetries + 1; let executionResult: MaybeAsyncIterable; let currRetryDelay = retryDelay; @@ -120,30 +116,21 @@ export function useUpstreamRetry>( const requestTime = Date.now(); attemptsLeft--; - const attemptExecutionRequest: RetryExecutionRequest = { - ...executorExecutionRequest, - [RETRY_SYMBOL]: { - attempt: maxRetries - attemptsLeft, - executionRequest: executorExecutionRequest, - }, + // @ts-expect-error we rather mutatate the executionRequest because we strict compare it + executionRequest[RETRY_SYMBOL] = { + attempt: maxRetries - attemptsLeft, + executionRequest, }; - attemptExecutionRequest.info = { - ...executorExecutionRequest.info, - executionRequest: attemptExecutionRequest, - } as GraphQLResolveInfo; return handleMaybePromise( - () => { - return executor(attemptExecutionRequest); - }, + () => executor(executionRequest), (currRes) => { executionResult = currRes; let retryAfterSecondsFromHeader: number | undefined; - const response = executionRequestResponseMap.get( - attemptExecutionRequest, - ); + const response = + executionRequestResponseMap.get(executionRequest); // Remove the response from the map after used so we don't see it again - executionRequestResponseMap.delete(attemptExecutionRequest); + executionRequestResponseMap.delete(executionRequest); const retryAfterHeader = response?.headers.get('Retry-After'); if (retryAfterHeader) { @@ -161,7 +148,7 @@ export function useUpstreamRetry>( currRetryDelay * retryDelayFactor; if ( shouldRetry({ - executionRequest: attemptExecutionRequest, + executionRequest, executionResult, response, }) From 762881c7a440988782ca6a64479c91e67c748154 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Mon, 12 May 2025 16:59:59 +0200 Subject: [PATCH 14/60] upstreamtimeout needs to change executionrequest instance --- .../runtime/src/plugins/useUpstreamTimeout.ts | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/packages/runtime/src/plugins/useUpstreamTimeout.ts b/packages/runtime/src/plugins/useUpstreamTimeout.ts index 708c646ee..476152e72 100644 --- a/packages/runtime/src/plugins/useUpstreamTimeout.ts +++ b/packages/runtime/src/plugins/useUpstreamTimeout.ts @@ -3,10 +3,8 @@ import { subgraphNameByExecutionRequest } from '@graphql-mesh/fusion-runtime'; import { UpstreamErrorExtensions } from '@graphql-mesh/transport-common'; import { getHeadersObj } from '@graphql-mesh/utils'; import { - createDeferred, createGraphQLError, ExecutionRequest, - ExecutionResult, isAsyncIterable, isPromise, } from '@graphql-tools/utils'; @@ -59,19 +57,29 @@ export function useUpstreamTimeout>( if (executionRequest.signal) { signals.push(executionRequest.signal); } - const timeoutDeferred = createDeferred(); - function rejectDeferred() { - timeoutDeferred.reject(timeoutSignal?.reason); - } - timeoutSignal.addEventListener('abort', rejectDeferred, { - once: true, + // we want to create a new executionrequest and not mutate the existing one becaus, when using + // this with useUpstreamRetry, the same executionRequest will be used for each retry and we need + // to timeoutSignalsByExecutionRequest.set(...) again above + const res$ = executor({ + ...executionRequest, + signal: abortSignalAny(signals), }); - executionRequest.signal = abortSignalAny(signals); - const res$ = executor(executionRequest); if (!isPromise(res$)) { return res$; } - return Promise.race([timeoutDeferred.promise, res$]) + return Promise.race([ + new Promise((_, reject) => { + if (timeoutSignal.aborted) { + return reject(timeoutSignal.reason); + } + timeoutSignal.addEventListener( + 'abort', + () => reject(timeoutSignal.reason), + { once: true }, + ); + }), + res$, + ]) .then((result) => { if (isAsyncIterable(result)) { return { @@ -111,8 +119,6 @@ export function useUpstreamTimeout>( throw e; }) .finally(() => { - timeoutDeferred.resolve(undefined as any); - timeoutSignal.removeEventListener('abort', rejectDeferred); // Remove from the map after used so we don't see it again errorExtensionsByExecRequest.delete(executionRequest); timeoutSignalsByExecutionRequest.delete(executionRequest); From 68d7bd7d69bac7f898142baa5bc8d174400fbeb9 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Mon, 12 May 2025 18:02:25 +0200 Subject: [PATCH 15/60] use timeout deferred making sure promise is not hanging --- .../runtime/src/plugins/useUpstreamTimeout.ts | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/runtime/src/plugins/useUpstreamTimeout.ts b/packages/runtime/src/plugins/useUpstreamTimeout.ts index 476152e72..3eb286818 100644 --- a/packages/runtime/src/plugins/useUpstreamTimeout.ts +++ b/packages/runtime/src/plugins/useUpstreamTimeout.ts @@ -3,8 +3,10 @@ import { subgraphNameByExecutionRequest } from '@graphql-mesh/fusion-runtime'; import { UpstreamErrorExtensions } from '@graphql-mesh/transport-common'; import { getHeadersObj } from '@graphql-mesh/utils'; import { + createDeferred, createGraphQLError, ExecutionRequest, + ExecutionResult, isAsyncIterable, isPromise, } from '@graphql-tools/utils'; @@ -52,6 +54,13 @@ export function useUpstreamTimeout>( timeoutSignal, ); } + const timeoutDeferred = createDeferred(); + function rejectDeferred() { + timeoutDeferred.reject(timeoutSignal?.reason); + } + timeoutSignal.addEventListener('abort', rejectDeferred, { + once: true, + }); const signals: AbortSignal[] = []; signals.push(timeoutSignal); if (executionRequest.signal) { @@ -67,19 +76,7 @@ export function useUpstreamTimeout>( if (!isPromise(res$)) { return res$; } - return Promise.race([ - new Promise((_, reject) => { - if (timeoutSignal.aborted) { - return reject(timeoutSignal.reason); - } - timeoutSignal.addEventListener( - 'abort', - () => reject(timeoutSignal.reason), - { once: true }, - ); - }), - res$, - ]) + return Promise.race([timeoutDeferred.promise, res$]) .then((result) => { if (isAsyncIterable(result)) { return { @@ -119,6 +116,8 @@ export function useUpstreamTimeout>( throw e; }) .finally(() => { + timeoutDeferred.resolve(undefined as any); + timeoutSignal.removeEventListener('abort', rejectDeferred); // Remove from the map after used so we don't see it again errorExtensionsByExecRequest.delete(executionRequest); timeoutSignalsByExecutionRequest.delete(executionRequest); From e791ca9af665ab9b27bd425b0b5dd42ef2d7122f Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Thu, 22 May 2025 14:56:37 +0200 Subject: [PATCH 16/60] feat(opentelemetry): add background spans (schema + init) (#1071) --- .../cloudflare-workers.e2e.ts | 4 +- .../fusion-runtime/src/unifiedGraphManager.ts | 9 + packages/plugins/opentelemetry/src/plugin.ts | 160 +++++++++++++----- packages/plugins/opentelemetry/src/spans.ts | 21 ++- .../tests/useOpenTelemetry.spec.ts | 57 ++++--- packages/plugins/opentelemetry/tests/utils.ts | 9 +- packages/runtime/src/createGatewayRuntime.ts | 21 ++- 7 files changed, 206 insertions(+), 75 deletions(-) diff --git a/e2e/cloudflare-workers/cloudflare-workers.e2e.ts b/e2e/cloudflare-workers/cloudflare-workers.e2e.ts index 1a1b3a59a..aab459035 100644 --- a/e2e/cloudflare-workers/cloudflare-workers.e2e.ts +++ b/e2e/cloudflare-workers/cloudflare-workers.e2e.ts @@ -137,7 +137,7 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( `); const traces = await getJaegerTraces(serviceName, 2); - expect(traces.data.length).toBe(3); + expect(traces.data.length).toBe(2); const relevantTraces = traces.data.filter((trace) => trace.spans.some((span) => span.operationName === 'POST /graphql'), ); @@ -236,7 +236,7 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( ); const traces = await getJaegerTraces(serviceName, 3); - expect(traces.data.length).toBe(4); + expect(traces.data.length).toBe(3); const relevantTraces = traces.data.filter((trace) => trace.spans.some((span) => span.operationName === 'POST /graphql'), diff --git a/packages/fusion-runtime/src/unifiedGraphManager.ts b/packages/fusion-runtime/src/unifiedGraphManager.ts index 4244781de..26f03a5e7 100644 --- a/packages/fusion-runtime/src/unifiedGraphManager.ts +++ b/packages/fusion-runtime/src/unifiedGraphManager.ts @@ -117,6 +117,15 @@ export type Instrumentation = { payload: { executionRequest: ExecutionRequest; subgraphName: string }, wrapped: () => MaybePromise, ) => MaybePromise; + /** + * Wrap each supergraph schema loading. + * + * Note: this span is only available when an Async compatible context manager is available + */ + schema?: ( + payload: null, + wrapped: () => MaybePromise, + ) => MaybePromise; }; const UNIFIEDGRAPH_CACHE_KEY = 'hive-gateway:supergraph'; diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 8344cc873..799883c3f 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -54,6 +54,7 @@ import { createGraphQLSpan, createGraphQLValidateSpan, createHttpSpan, + createSchemaLoadingSpan, startSubgraphExecuteFetchSpan as createSubgraphExecuteFetchSpan, createUpstreamHttpFetchSpan, recordCacheError, @@ -67,11 +68,15 @@ import { setGraphQLValidateAttributes, setParamsAttributes, setResponseAttributes, + setSchemaAttributes, setUpstreamFetchAttributes, setUpstreamFetchResponseAttributes, } from './spans'; import { getEnvVar, tryContextManagerSetup } from './utils'; +const initializationTime = + 'performance' in globalThis ? performance.now() : undefined; + type BooleanOrPredicate = | boolean | ((input: TInput) => boolean); @@ -177,13 +182,6 @@ export type OpenTelemetryGatewayPluginOptions = * You may specify a boolean value to enable/disable all spans, or a function to dynamically enable/disable spans based on the input. */ spans?: { - /** - * Enable/disable Spans of internal introspection queries in proxy mode (default: true). - */ - introspection?: BooleanOrPredicate<{ - executionRequest: ExecutionRequest; - subgraphName: string; - }>; /** * Enable/disable HTTP request spans (default: true). * @@ -231,6 +229,16 @@ export type OpenTelemetryGatewayPluginOptions = * Enable/Disable cache related span events (default: true). */ cache?: BooleanOrPredicate<{ key: string; action: 'read' | 'write' }>; + /** + * Enable/disable schema loading spans (default: true if context manager available). + * + * Note: This span requires an Async compatible context manager + */ + schema?: boolean; + /** + * Enable/disable initialization span (default: true). + */ + initialization?: boolean; }; }; @@ -283,6 +291,7 @@ export function useOpenTelemetry( let provider: WebTracerProvider; const yogaVersion = createDeferred(); + let initSpan: Context | null; function isParentEnabled(state: State): boolean { const parentState = getMostSpecificState(state); @@ -290,9 +299,17 @@ export function useOpenTelemetry( } function getContext(state?: State): Context { - return useContextManager - ? context.active() - : (getMostSpecificState(state)?.otel?.current ?? ROOT_CONTEXT); + const specificState = getMostSpecificState(state)?.otel; + + if (initSpan && !specificState) { + return initSpan; + } + + if (useContextManager) { + return context.active(); + } + + return specificState?.current ?? ROOT_CONTEXT; } const yogaLogger = createDeferred(); @@ -370,12 +387,27 @@ export function useOpenTelemetry( preparation$ = init().then((contextManager) => { useContextManager = contextManager; tracer = options.tracer || trace.getTracer('gateway'); + initSpan = trace.setSpan( + context.active(), + tracer.startSpan('gateway.initialization', { + startTime: initializationTime, + }), + ); preparation$ = fakePromise(); return pluginLogger.then((logger) => { pluginLogger = fakePromise(logger); logger.debug( `context manager is ${useContextManager ? 'enabled' : 'disabled'}`, ); + if (!useContextManager) { + if (options.spans?.schema) { + logger.warn( + 'Schema loading spans are disabled because no context manager is available', + ); + } + options.spans = options.spans ?? {}; + options.spans.schema = false; + } diag.setLogger( { error: (message, ...args) => @@ -453,23 +485,25 @@ export function useOpenTelemetry( return wrapped(); } - const ctx = getContext(parentState); - forOperation.otel = new OtelContextStack( - createGraphQLSpan({ tracer, ctx }), - ); - - if (useContextManager) { - wrapped = context.bind(forOperation.otel.current, wrapped); - } - return unfakePromise( - fakePromise() - .then(wrapped) - .catch((err) => { - registerException(forOperation.otel?.current, err); - throw err; - }) - .finally(() => trace.getSpan(forOperation.otel!.current)?.end()), + preparation$.then(() => { + const ctx = getContext(parentState); + forOperation.otel = new OtelContextStack( + createGraphQLSpan({ tracer, ctx }), + ); + + if (useContextManager) { + wrapped = context.bind(forOperation.otel.current, wrapped); + } + + return fakePromise() + .then(wrapped) + .catch((err) => { + registerException(forOperation.otel?.current, err); + throw err; + }) + .finally(() => trace.getSpan(forOperation.otel!.current)?.end()); + }), ); }, @@ -610,7 +644,7 @@ export function useOpenTelemetry( parentState.forOperation?.skipExecuteSpan || !shouldTrace( isIntrospection - ? options.spans?.introspection + ? options.spans?.schema : options.spans?.subgraphExecute, { subgraphName, @@ -625,7 +659,7 @@ export function useOpenTelemetry( // (such as Introspection requests in proxy mode), we don't want to use the active context, // we want the span to be in it's own trace. const parentContext = isIntrospection - ? ROOT_CONTEXT + ? context.active() : getContext(parentState); forSubgraphExecution.otel = new OtelContextStack( @@ -671,29 +705,51 @@ export function useOpenTelemetry( return wrapped(); } - const { forSubgraphExecution } = state; - const ctx = createUpstreamHttpFetchSpan({ - ctx: getContext(state), - tracer, - }); - - forSubgraphExecution?.otel!.push(ctx); + return unfakePromise( + preparation$.then(() => { + const { forSubgraphExecution } = state; + const ctx = createUpstreamHttpFetchSpan({ + ctx: getContext(state), + tracer, + }); + + forSubgraphExecution?.otel!.push(ctx); + + if (useContextManager) { + wrapped = context.bind(ctx, wrapped); + } + + return fakePromise() + .then(wrapped) + .catch((err) => { + registerException(ctx, err); + throw err; + }) + .finally(() => { + trace.getSpan(ctx)?.end(); + forSubgraphExecution?.otel!.pop(); + }); + }), + ); + }, - if (useContextManager) { - wrapped = context.bind(ctx, wrapped); + schema(_, wrapped) { + if (!shouldTrace(options.spans?.schema, null)) { + return wrapped(); } return unfakePromise( - fakePromise() - .then(wrapped) - .catch((err) => { - registerException(ctx, err); - throw err; - }) - .finally(() => { - trace.getSpan(ctx)?.end(); - forSubgraphExecution?.otel!.pop(); - }), + preparation$.then(() => { + const ctx = createSchemaLoadingSpan({ tracer }); + return fakePromise() + .then(() => context.with(ctx, wrapped)) + .catch((err) => { + trace.getSpan(ctx)?.recordException(err); + }) + .finally(() => { + trace.getSpan(ctx)?.end(); + }); + }), ); }, }, @@ -863,6 +919,16 @@ export function useOpenTelemetry( setUpstreamFetchResponseAttributes({ ctx, response }); }; }, + + onSchemaChange(payload) { + setSchemaAttributes(payload); + + if (initSpan) { + trace.getSpan(initSpan)?.end(); + initSpan = null; + } + }, + async onDispose() { if (options.initializeNodeSDK) { await provider?.forceFlush?.(); diff --git a/packages/plugins/opentelemetry/src/spans.ts b/packages/plugins/opentelemetry/src/spans.ts index 8aa3a5f83..1de17baf9 100644 --- a/packages/plugins/opentelemetry/src/spans.ts +++ b/packages/plugins/opentelemetry/src/spans.ts @@ -7,6 +7,7 @@ import { type ExecutionResult, } from '@graphql-tools/utils'; import { + ROOT_CONTEXT, SpanKind, SpanStatusCode, trace, @@ -18,7 +19,7 @@ import { SEMATTRS_EXCEPTION_STACKTRACE, SEMATTRS_EXCEPTION_TYPE, } from '@opentelemetry/semantic-conventions'; -import type { ExecutionArgs } from 'graphql'; +import { printSchema, type ExecutionArgs, type GraphQLSchema } from 'graphql'; import type { GraphQLParams } from 'graphql-yoga'; import { getRetryInfo, @@ -435,6 +436,24 @@ export function setExecutionResultAttributes(input: { } } +export function createSchemaLoadingSpan(inputs: { tracer: Tracer }) { + const span = inputs.tracer.startSpan( + 'gateway.schema', + { attributes: { 'gateway.schema.changed': false } }, + ROOT_CONTEXT, + ); + return trace.setSpan(ROOT_CONTEXT, span); +} + +export function setSchemaAttributes(inputs: { schema: GraphQLSchema }) { + const span = trace.getActiveSpan(); + if (!span) { + return; + } + span.setAttribute('gateway.schema.changed', true); + span.setAttribute('graphql.schema', printSchema(inputs.schema)); +} + export function registerException(ctx: Context | undefined, error: any) { const span = ctx && trace.getSpan(ctx); if (!span) { diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index cd744d949..bdbe26c07 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -326,7 +326,7 @@ describe('useOpenTelemetry', () => { it('should not trace http requests if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { http: false, introspection: false }, + spans: { http: false, schema: false }, }, }); await gateway.query(); @@ -337,7 +337,7 @@ describe('useOpenTelemetry', () => { it('should not trace graphql operation if disable', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { graphql: false, introspection: false }, + spans: { graphql: false, schema: false }, }, }); await gateway.query(); @@ -403,7 +403,7 @@ describe('useOpenTelemetry', () => { it('should not trace execute if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { graphqlExecute: false, introspection: false }, + spans: { graphqlExecute: false, schema: false }, }, }); await gateway.query(); @@ -426,7 +426,7 @@ describe('useOpenTelemetry', () => { it('should not trace subgraph execute if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { subgraphExecute: false, introspection: false }, + spans: { subgraphExecute: false, schema: false }, }, }); await gateway.query(); @@ -461,28 +461,22 @@ describe('useOpenTelemetry', () => { .forEach(spanExporter.assertSpanWithName); }); - it('should trace introspection query', async () => { + it('should not trace fetch if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ - options: { spans: { http: false, introspection: true } }, + plugins: (_, { fetch }) => { + return [ + { + onPluginInit() { + fetch('http://foo.bar', {}); + }, + }, + ]; + }, }); await gateway.query(); - const introspectionSpan = spanExporter.assertRoot( - expected.subgraphExecute.root, - ); - expected.subgraphExecute.children.forEach( - introspectionSpan.expectChild, - ); - expect( - ( - introspectionSpan.span.attributes['graphql.document'] as string - ).includes('Introspection'), - ); - - const introspectionSpans = introspectionSpan.descendants; - expect( - spanExporter.spans.filter((s) => !introspectionSpans.includes(s)), - ).toHaveLength(0); + const initSpan = spanExporter.assertRoot('gateway.initialization'); + initSpan.expectChild('http.fetch'); }); }); }); @@ -587,5 +581,24 @@ describe('useOpenTelemetry', () => { checkCacheAttributes({ http: 'hit' }); // There is no graphql operation span when cached by HTTP }); + + it('should register schema loading span', async () => { + await using gateway = await buildTestGateway({ + options: { spans: { http: false, schema: true } }, + }); + await gateway.query(); + + const schemaSpan = spanExporter.assertRoot('gateway.schema'); + + const descendants = schemaSpan.descendants.map(({ name }) => name); + + console.log(spanExporter.toString()); + + expect(descendants).toEqual([ + 'gateway.schema', + 'subgraph.execute (upstream)', + 'http.fetch', + ]); + }); }); }); diff --git a/packages/plugins/opentelemetry/tests/utils.ts b/packages/plugins/opentelemetry/tests/utils.ts index 19b643509..4d8d1a093 100644 --- a/packages/plugins/opentelemetry/tests/utils.ts +++ b/packages/plugins/opentelemetry/tests/utils.ts @@ -1,4 +1,8 @@ -import { GatewayConfigProxy, GatewayPlugin } from '@graphql-hive/gateway'; +import { + GatewayConfigContext, + GatewayConfigProxy, + GatewayPlugin, +} from '@graphql-hive/gateway'; import { MeshFetch } from '@graphql-mesh/types'; import { diag, TraceState } from '@opentelemetry/api'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; @@ -25,6 +29,7 @@ export async function buildTestGateway( >; plugins?: ( otelPlugin: OpenTelemetryPlugin, + ctx: GatewayConfigContext, ) => GatewayPlugin[]; fetch?: (upstreamFetch: MeshFetch) => MeshFetch; } = {}, @@ -71,7 +76,7 @@ export async function buildTestGateway( options.fetch ? options.fetch(upstream.fetch) : upstream.fetch, ), otelPlugin, - ...(options.plugins?.(otelPlugin) ?? []), + ...(options.plugins?.(otelPlugin, ctx) ?? []), ]; }, logging: false, diff --git a/packages/runtime/src/createGatewayRuntime.ts b/packages/runtime/src/createGatewayRuntime.ts index 8937a5f65..be449f2c8 100644 --- a/packages/runtime/src/createGatewayRuntime.ts +++ b/packages/runtime/src/createGatewayRuntime.ts @@ -1,4 +1,8 @@ -import { OnExecuteEventPayload, OnSubscribeEventPayload } from '@envelop/core'; +import { + getInstrumented, + OnExecuteEventPayload, + OnSubscribeEventPayload, +} from '@envelop/core'; import { useDisableIntrospection } from '@envelop/disable-introspection'; import { useGenericAuth } from '@envelop/generic-auth'; import { @@ -343,6 +347,14 @@ export function createGatewayRuntime< ); }; } + + const instrumentedFetcher = schemaFetcher; + schemaFetcher = (...args) => + getInstrumented(null).asyncFn( + instrumentation?.schema, + instrumentedFetcher, + )(...args); + getSchema = () => { if (unifiedGraph != null) { return unifiedGraph; @@ -704,6 +716,13 @@ export function createGatewayRuntime< } } + const instrumentedGraphFetcher = unifiedGraphFetcher; + unifiedGraphFetcher = (...args) => + getInstrumented(null).asyncFn( + instrumentation?.schema, + instrumentedGraphFetcher, + )(...args); + const unifiedGraphManager = new UnifiedGraphManager({ getUnifiedGraph: unifiedGraphFetcher, onUnifiedGraphChange(newUnifiedGraph: GraphQLSchema) { From 5a2d609d0c223691f421d8105c8e931c60dc9f70 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Thu, 5 Jun 2025 14:49:54 +0200 Subject: [PATCH 17/60] usecontentencoding inherits ctx --- packages/runtime/src/plugins/useContentEncoding.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/runtime/src/plugins/useContentEncoding.ts b/packages/runtime/src/plugins/useContentEncoding.ts index b8bd8689c..bf21fc7e3 100644 --- a/packages/runtime/src/plugins/useContentEncoding.ts +++ b/packages/runtime/src/plugins/useContentEncoding.ts @@ -11,7 +11,6 @@ export function useContentEncoding>({ subgraphs, }: UseContentEncodingOpts = {}): GatewayPlugin { if (!subgraphs?.length) { - // @ts-expect-error - Return types are not compatible return useOrigContentEncoding(); } const compressionAlgorithm: CompressionFormat = 'gzip'; @@ -22,10 +21,7 @@ export function useContentEncoding>({ fetchAPI = yoga.fetchAPI; }, onPluginInit({ addPlugin }) { - addPlugin( - // @ts-expect-error - Plugin types do not match - useOrigContentEncoding(), - ); + addPlugin(useOrigContentEncoding()); }, onSubgraphExecute({ subgraphName, executionRequest }) { if (subgraphs.includes(subgraphName) || subgraphs.includes('*')) { From 95484c2ca0cea1cd732df4bfe8ce45032ec31d42 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Thu, 5 Jun 2025 16:05:58 +0200 Subject: [PATCH 18/60] Hive Logger (#1030) Co-authored-by: github-actions[bot] Co-authored-by: theguild-bot --- ...@graphql-hive_gateway-1030-dependencies.md | 7 + ...-hive_gateway-runtime-1030-dependencies.md | 9 + ...l-mesh_fusion-runtime-1030-dependencies.md | 7 + ...esh_plugin-prometheus-1030-dependencies.md | 7 + ...mesh_transport-common-1030-dependencies.md | 7 + .changeset/itchy-ways-cross.md | 19 + .changeset/tough-elephants-shop.md | 7 + babel.config.cjs | 1 + .../config-syntax-error.e2e.ts | 4 +- .../services/gateway-fastify.ts | 7 +- e2e/hmac-auth-https/package.json | 1 + e2e/hmac-auth-https/services/users/index.ts | 2 + e2e/retry-timeout/gateway.config.ts | 6 +- .../supergraph-file-watcher.e2e.ts | 2 +- examples/hmac-auth-https/package-lock.json | 907 +++++++----------- examples/hmac-auth-https/package.json | 5 +- .../hmac-auth-https/services/users/index.ts | 2 + package.json | 1 + .../delegate/src/finalizeGatewayRequest.ts | 3 - packages/fusion-runtime/package.json | 1 + packages/fusion-runtime/src/executor.ts | 8 +- .../src/federation/supergraph.ts | 22 +- .../fusion-runtime/src/unifiedGraphManager.ts | 68 +- packages/fusion-runtime/src/utils.ts | 107 +-- packages/fusion-runtime/tests/polling.test.ts | 14 +- packages/fusion-runtime/tests/runtime.test.ts | 3 +- packages/fusion-runtime/tests/utils.ts | 6 + packages/gateway/package.json | 1 + packages/gateway/src/bin.ts | 4 +- packages/gateway/src/cli.ts | 8 +- packages/gateway/src/commands/handleFork.ts | 18 +- .../src/commands/handleLoggingOption.ts | 18 - .../src/commands/handleReportingConfig.ts | 14 +- packages/gateway/src/commands/proxy.ts | 14 +- packages/gateway/src/commands/subgraph.ts | 11 +- packages/gateway/src/commands/supergraph.ts | 67 +- packages/gateway/src/config.ts | 18 +- packages/gateway/src/index.ts | 2 +- packages/gateway/src/servers/nodeHttp.ts | 8 +- .../src/servers/startServerForRuntime.ts | 2 +- packages/gateway/src/servers/types.ts | 2 +- packages/logger-json/CHANGELOG.md | 52 - packages/logger-json/package.json | 56 -- packages/logger-json/src/index.ts | 185 ---- packages/logger-pino/CHANGELOG.md | 37 - packages/logger-pino/package.json | 58 -- packages/logger-pino/src/index.ts | 125 --- packages/logger-pino/tests/pino.spec.ts | 148 --- packages/logger-winston/CHANGELOG.md | 55 -- packages/logger-winston/package.json | 57 -- packages/logger-winston/src/index.ts | 102 -- packages/logger-winston/tests/winston.spec.ts | 147 --- packages/logger/README.md | 733 ++++++++++++++ packages/logger/package.json | 93 ++ packages/logger/src/index.ts | 4 + packages/logger/src/legacyLogger.ts | 98 ++ packages/logger/src/logger.ts | 297 ++++++ packages/logger/src/request.ts | 20 + packages/logger/src/utils.ts | 229 +++++ packages/logger/src/writers/common.ts | 14 + packages/logger/src/writers/console.ts | 124 +++ packages/logger/src/writers/index.ts | 4 + packages/logger/src/writers/json.ts | 23 + packages/logger/src/writers/memory.ts | 18 + packages/logger/src/writers/pino.ts | 18 + packages/logger/src/writers/winston.ts | 22 + .../tests/__snapshots__/writers.test.ts.snap | 22 + packages/logger/tests/legacyLogger.test.ts | 94 ++ packages/logger/tests/logger.bench.ts | 58 ++ packages/logger/tests/logger.test.ts | 811 ++++++++++++++++ packages/logger/tests/utils.ts | 20 + packages/logger/tests/writers.test.ts | 71 ++ packages/nestjs/src/index.ts | 140 +-- .../hmac-upstream-signature/src/index.ts | 46 +- .../tests/hmac-upstream-signature.spec.ts | 3 + packages/plugins/jwt-auth/src/index.ts | 8 +- packages/plugins/opentelemetry/src/plugin.ts | 37 +- .../plugins/opentelemetry/tests/yoga.spec.ts | 2 + packages/plugins/prometheus/package.json | 1 + packages/plugins/prometheus/src/index.ts | 14 +- packages/runtime/package.json | 3 +- packages/runtime/src/createGatewayRuntime.ts | 86 +- .../runtime/src/createLoggerFromLogging.ts | 13 + packages/runtime/src/fetchers/graphos.ts | 12 +- packages/runtime/src/getDefaultLogger.ts | 67 -- packages/runtime/src/getProxyExecutor.ts | 6 +- packages/runtime/src/getReportingPlugin.ts | 2 +- .../runtime/src/handleUnifiedGraphConfig.ts | 3 +- packages/runtime/src/index.ts | 5 +- packages/runtime/src/plugins/useCacheDebug.ts | 40 +- .../runtime/src/plugins/useCustomAgent.ts | 7 +- .../src/plugins/useDelegationPlanDebug.ts | 56 +- .../runtime/src/plugins/useDemandControl.ts | 14 +- packages/runtime/src/plugins/useFetchDebug.ts | 44 +- .../runtime/src/plugins/useHiveConsole.ts | 6 +- .../src/plugins/usePropagateHeaders.ts | 8 +- packages/runtime/src/plugins/useRequestId.ts | 31 +- .../src/plugins/useRetryOnSchemaReload.ts | 41 +- .../src/plugins/useSubgraphExecuteDebug.ts | 41 +- .../runtime/src/plugins/useUpstreamCancel.ts | 2 +- .../runtime/src/plugins/useUpstreamRetry.ts | 5 +- packages/runtime/src/plugins/useWebhooks.ts | 20 +- packages/runtime/src/types.ts | 52 +- packages/runtime/src/wrapFetchWithHooks.ts | 105 ++ .../runtime/tests/contentEncoding.test.ts | 7 +- packages/runtime/tests/graphos.test.ts | 52 +- .../runtime/tests/wrapFetchWithHooks.test.ts | 39 + packages/transports/common/package.json | 1 + packages/transports/common/src/types.ts | 15 +- .../transports/http-callback/src/index.ts | 19 +- packages/transports/ws/src/index.ts | 22 +- packages/transports/ws/tests/ws.spec.ts | 4 +- tsconfig.json | 11 +- vitest.projects.ts | 62 ++ yarn.lock | 95 +- 115 files changed, 4117 insertions(+), 2345 deletions(-) create mode 100644 .changeset/@graphql-hive_gateway-1030-dependencies.md create mode 100644 .changeset/@graphql-hive_gateway-runtime-1030-dependencies.md create mode 100644 .changeset/@graphql-mesh_fusion-runtime-1030-dependencies.md create mode 100644 .changeset/@graphql-mesh_plugin-prometheus-1030-dependencies.md create mode 100644 .changeset/@graphql-mesh_transport-common-1030-dependencies.md create mode 100644 .changeset/itchy-ways-cross.md create mode 100644 .changeset/tough-elephants-shop.md delete mode 100644 packages/gateway/src/commands/handleLoggingOption.ts delete mode 100644 packages/logger-json/CHANGELOG.md delete mode 100644 packages/logger-json/package.json delete mode 100644 packages/logger-json/src/index.ts delete mode 100644 packages/logger-pino/CHANGELOG.md delete mode 100644 packages/logger-pino/package.json delete mode 100644 packages/logger-pino/src/index.ts delete mode 100644 packages/logger-pino/tests/pino.spec.ts delete mode 100644 packages/logger-winston/CHANGELOG.md delete mode 100644 packages/logger-winston/package.json delete mode 100644 packages/logger-winston/src/index.ts delete mode 100644 packages/logger-winston/tests/winston.spec.ts create mode 100644 packages/logger/README.md create mode 100644 packages/logger/package.json create mode 100644 packages/logger/src/index.ts create mode 100644 packages/logger/src/legacyLogger.ts create mode 100644 packages/logger/src/logger.ts create mode 100644 packages/logger/src/request.ts create mode 100644 packages/logger/src/utils.ts create mode 100644 packages/logger/src/writers/common.ts create mode 100644 packages/logger/src/writers/console.ts create mode 100644 packages/logger/src/writers/index.ts create mode 100644 packages/logger/src/writers/json.ts create mode 100644 packages/logger/src/writers/memory.ts create mode 100644 packages/logger/src/writers/pino.ts create mode 100644 packages/logger/src/writers/winston.ts create mode 100644 packages/logger/tests/__snapshots__/writers.test.ts.snap create mode 100644 packages/logger/tests/legacyLogger.test.ts create mode 100644 packages/logger/tests/logger.bench.ts create mode 100644 packages/logger/tests/logger.test.ts create mode 100644 packages/logger/tests/utils.ts create mode 100644 packages/logger/tests/writers.test.ts create mode 100644 packages/runtime/src/createLoggerFromLogging.ts delete mode 100644 packages/runtime/src/getDefaultLogger.ts create mode 100644 packages/runtime/src/wrapFetchWithHooks.ts create mode 100644 packages/runtime/tests/wrapFetchWithHooks.test.ts create mode 100644 vitest.projects.ts diff --git a/.changeset/@graphql-hive_gateway-1030-dependencies.md b/.changeset/@graphql-hive_gateway-1030-dependencies.md new file mode 100644 index 000000000..fc6e6bbec --- /dev/null +++ b/.changeset/@graphql-hive_gateway-1030-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/gateway': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-hive_gateway-runtime-1030-dependencies.md b/.changeset/@graphql-hive_gateway-runtime-1030-dependencies.md new file mode 100644 index 000000000..102b3e27b --- /dev/null +++ b/.changeset/@graphql-hive_gateway-runtime-1030-dependencies.md @@ -0,0 +1,9 @@ +--- +'@graphql-hive/gateway-runtime': patch +--- + +dependencies updates: + +- Added dependency [`@envelop/instrumentation@^1.0.0` ↗︎](https://www.npmjs.com/package/@envelop/instrumentation/v/1.0.0) (to `dependencies`) +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Removed dependency [`@graphql-hive/logger-json@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger-json/v/workspace:^) (from `dependencies`) diff --git a/.changeset/@graphql-mesh_fusion-runtime-1030-dependencies.md b/.changeset/@graphql-mesh_fusion-runtime-1030-dependencies.md new file mode 100644 index 000000000..d381bdd14 --- /dev/null +++ b/.changeset/@graphql-mesh_fusion-runtime-1030-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/fusion-runtime': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-prometheus-1030-dependencies.md b/.changeset/@graphql-mesh_plugin-prometheus-1030-dependencies.md new file mode 100644 index 000000000..02e9f8bf5 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-prometheus-1030-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/plugin-prometheus': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_transport-common-1030-dependencies.md b/.changeset/@graphql-mesh_transport-common-1030-dependencies.md new file mode 100644 index 000000000..2096b7a2b --- /dev/null +++ b/.changeset/@graphql-mesh_transport-common-1030-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/transport-common': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/itchy-ways-cross.md b/.changeset/itchy-ways-cross.md new file mode 100644 index 000000000..331529560 --- /dev/null +++ b/.changeset/itchy-ways-cross.md @@ -0,0 +1,19 @@ +--- +'@graphql-mesh/hmac-upstream-signature': major +'@graphql-mesh/transport-http-callback': major +'@graphql-mesh/plugin-opentelemetry': major +'@graphql-mesh/plugin-prometheus': major +'@graphql-mesh/transport-common': major +'@graphql-mesh/plugin-jwt-auth': major +'@graphql-mesh/fusion-runtime': major +'@graphql-mesh/transport-ws': major +'@graphql-hive/gateway': major +'@graphql-hive/gateway-runtime': major +'@graphql-hive/nestjs': major +--- + +Introduce and use the new Hive Logger + +- [Read more about it on the Hive Logger documentation here.](https://the-guild.dev/graphql/hive/docs/logger) + +- If coming from Hive Gateway v1, [read the migration guide here.](https://the-guild.dev/graphql/hive/docs/migration-guides/gateway-v1-v2) diff --git a/.changeset/tough-elephants-shop.md b/.changeset/tough-elephants-shop.md new file mode 100644 index 000000000..2c628b131 --- /dev/null +++ b/.changeset/tough-elephants-shop.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/logger': major +--- + +Introducing Hive Logger + +[Read more about it on the Hive Logger documentation website.](https://the-guild.dev/graphql/hive/docs/logger) diff --git a/babel.config.cjs b/babel.config.cjs index b5586a0c4..3bb0a78f3 100644 --- a/babel.config.cjs +++ b/babel.config.cjs @@ -11,5 +11,6 @@ module.exports = { ['@babel/plugin-proposal-decorators', { version: '2023-11' }], '@babel/plugin-transform-class-properties', '@babel/plugin-proposal-explicit-resource-management', + '@babel/plugin-transform-private-methods', ], }; diff --git a/e2e/config-syntax-error/config-syntax-error.e2e.ts b/e2e/config-syntax-error/config-syntax-error.e2e.ts index d168008eb..433d0cb74 100644 --- a/e2e/config-syntax-error/config-syntax-error.e2e.ts +++ b/e2e/config-syntax-error/config-syntax-error.e2e.ts @@ -31,8 +31,8 @@ it.skipIf( }), ).rejects.toThrowError( gatewayRunner === 'bun' || gatewayRunner === 'bun-docker' - ? /error: Expected "{" but found "hello"(.|\n)*\/custom-resolvers.ts:8:11/ - : /SyntaxError \[Error\]: Error transforming .*(\/|\\)custom-resolvers.ts: Unexpected token, expected "{" \(8:11\)/, + ? /Expected \\"{\\" but found \\"hello\\"(.|\n)*\/custom-resolvers.ts/ + : /Error transforming .*(\/|\\)custom-resolvers.ts: Unexpected token, expected \\"{\\" \(8:11\)/, ); }, ); diff --git a/e2e/graphos-polling/services/gateway-fastify.ts b/e2e/graphos-polling/services/gateway-fastify.ts index 2e038bab7..77dc1b9b7 100644 --- a/e2e/graphos-polling/services/gateway-fastify.ts +++ b/e2e/graphos-polling/services/gateway-fastify.ts @@ -1,5 +1,5 @@ -import { createGatewayRuntime } from '@graphql-hive/gateway-runtime'; -import { createLoggerFromPino } from '@graphql-hive/logger-pino'; +import { createGatewayRuntime, Logger } from '@graphql-hive/gateway-runtime'; +import { PinoLogWriter } from '@graphql-hive/logger/writers/pino'; import { createOtlpHttpExporter, useOpenTelemetry, @@ -43,8 +43,7 @@ export interface FastifyContext { } const gw = createGatewayRuntime({ - // Integrate Fastify's logger / Pino with the gateway logger - logging: createLoggerFromPino(app.log), + logging: new Logger({ writers: [new PinoLogWriter(app.log)] }), // Align with Fastify requestId: { // Use the same header name as Fastify diff --git a/e2e/hmac-auth-https/package.json b/e2e/hmac-auth-https/package.json index 46b343942..58afde843 100644 --- a/e2e/hmac-auth-https/package.json +++ b/e2e/hmac-auth-https/package.json @@ -9,6 +9,7 @@ "@apollo/server": "^4.12.2", "@apollo/subgraph": "^2.11.2", "@graphql-hive/gateway": "workspace:^", + "@graphql-hive/logger": "workspace:^", "@graphql-mesh/compose-cli": "^1.4.10", "@graphql-mesh/hmac-upstream-signature": "workspace:^", "@graphql-mesh/plugin-jwt-auth": "workspace:^", diff --git a/e2e/hmac-auth-https/services/users/index.ts b/e2e/hmac-auth-https/services/users/index.ts index c77a92e52..a3d375c0c 100644 --- a/e2e/hmac-auth-https/services/users/index.ts +++ b/e2e/hmac-auth-https/services/users/index.ts @@ -2,6 +2,7 @@ import { readFileSync } from 'fs'; import { createServer } from 'https'; import { join } from 'path'; import { buildSubgraphSchema } from '@apollo/subgraph'; +import { Logger } from '@graphql-hive/logger'; import { useHmacSignatureValidation } from '@graphql-mesh/hmac-upstream-signature'; import { JWTExtendContextFields, @@ -20,6 +21,7 @@ const yoga = createYoga({ logging: true, plugins: [ useHmacSignatureValidation({ + log: new Logger({ level: 'debug' }), secret: 'HMAC_SIGNING_SECRET', }), useForwardedJWT({}), diff --git a/e2e/retry-timeout/gateway.config.ts b/e2e/retry-timeout/gateway.config.ts index 0d4e508f8..a929fb4ba 100644 --- a/e2e/retry-timeout/gateway.config.ts +++ b/e2e/retry-timeout/gateway.config.ts @@ -6,13 +6,13 @@ export const gatewayConfig = defineConfig({ maxRetries: 4, }, upstreamTimeout: 300, - plugins(ctx) { + plugins() { return [ ...(process.env['DEDUPLICATE_REQUEST'] ? [useDeduplicateRequest()] : []), { - onFetch() { + onFetch({ context }) { i++; - ctx.logger.info(`[FETCHING] #${i}`); + context.log.info(`[FETCHING] #${i}`); }, }, ]; diff --git a/e2e/supergraph-file-watcher/supergraph-file-watcher.e2e.ts b/e2e/supergraph-file-watcher/supergraph-file-watcher.e2e.ts index 5e1fba2f1..38634cfd1 100644 --- a/e2e/supergraph-file-watcher/supergraph-file-watcher.e2e.ts +++ b/e2e/supergraph-file-watcher/supergraph-file-watcher.e2e.ts @@ -45,7 +45,7 @@ it('should detect supergraph file change and reload schema', async () => { for (;;) { timeout.throwIfAborted(); await setTimeout(100); - if (gw.getStd('both').match(/invalidating supergraph/i)) { + if (gw.getStd('both').match(/supergraph changed/i)) { break; } } diff --git a/examples/hmac-auth-https/package-lock.json b/examples/hmac-auth-https/package-lock.json index 9bf8159a0..cb7793878 100644 --- a/examples/hmac-auth-https/package-lock.json +++ b/examples/hmac-auth-https/package-lock.json @@ -11,6 +11,7 @@ "@apollo/server": "^4.12.2", "@apollo/subgraph": "^2.11.2", "@graphql-hive/gateway": "^1.15.4", + "@graphql-hive/logger": "^0.0.0", "@graphql-mesh/compose-cli": "^1.4.10", "@graphql-mesh/hmac-upstream-signature": "^1.2.28", "@graphql-mesh/plugin-jwt-auth": "^1.5.6", @@ -475,7 +476,7 @@ "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.6", + "@smithy/util-retry": "^4.0.5", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -525,7 +526,7 @@ "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.6", + "@smithy/util-retry": "^4.0.5", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -540,7 +541,6 @@ "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.840.0", - "@aws-sdk/xml-builder": "3.821.0", "@smithy/core": "^3.6.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", @@ -548,10 +548,7 @@ "@smithy/signature-v4": "^5.1.2", "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-utf8": "^4.0.0", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, @@ -799,7 +796,7 @@ "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.6", + "@smithy/util-retry": "^4.0.5", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -918,19 +915,6 @@ } } }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.821.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", - "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@azure/abort-controller": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", @@ -976,9 +960,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.21.0.tgz", - "integrity": "sha512-a4MBwe/5WKbq9MIxikzgxLBbruC5qlkFYlBdI7Ev50Y7ib5Vo/Jvt5jnJo7NaWeJ908LCHL0S1Us4UMf1VoTfg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.20.0.tgz", + "integrity": "sha512-ASoP8uqZBS3H/8N8at/XwFr6vYrRP3syTK0EUjDXQy0Y1/AUS+QeIRThKmTNJO2RggvBBxaXDPM7YoIwDGeA0g==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -986,7 +970,7 @@ "@azure/core-tracing": "^1.0.1", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", - "@typespec/ts-http-runtime": "^0.2.3", + "@typespec/ts-http-runtime": "^0.2.2", "tslib": "^2.6.2" }, "engines": { @@ -1033,76 +1017,28 @@ } }, "node_modules/@azure/monitor-opentelemetry-exporter": { - "version": "1.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@azure/monitor-opentelemetry-exporter/-/monitor-opentelemetry-exporter-1.0.0-beta.32.tgz", - "integrity": "sha512-Tk5Tv8KwHhKCQlXET/7ZLtjBv1Zi4lmPTadKTQ9KCURRJWdt+6hu5ze52Tlp2pVeg3mg+MRQ9vhWvVNXMZAp/A==", + "version": "1.0.0-beta.31", + "resolved": "https://registry.npmjs.org/@azure/monitor-opentelemetry-exporter/-/monitor-opentelemetry-exporter-1.0.0-beta.31.tgz", + "integrity": "sha512-fH/vFMWOHwN/qdJ1SxVtsJ9zWIGWJdy/tZiVVPsFbpbR4NT49J5Im72iCcTyvABRPfIkMz/zsD58Yilf0yiEZw==", "license": "MIT", "dependencies": { "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", "@azure/core-rest-pipeline": "^1.19.0", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.200.0", - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/resources": "^2.0.0", - "@opentelemetry/sdk-logs": "^0.200.0", - "@opentelemetry/sdk-metrics": "^2.0.0", - "@opentelemetry/sdk-trace-base": "^2.0.0", - "@opentelemetry/semantic-conventions": "^1.32.0", + "@opentelemetry/api-logs": "^0.57.2", + "@opentelemetry/core": "^1.30.1", + "@opentelemetry/resources": "^1.30.1", + "@opentelemetry/sdk-logs": "^0.57.2", + "@opentelemetry/sdk-metrics": "^1.30.1", + "@opentelemetry/sdk-trace-base": "^1.30.1", + "@opentelemetry/semantic-conventions": "^1.30.0", "tslib": "^2.8.1" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@azure/monitor-opentelemetry-exporter/node_modules/@opentelemetry/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", - "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@azure/monitor-opentelemetry-exporter/node_modules/@opentelemetry/resources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", - "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@azure/monitor-opentelemetry-exporter/node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", - "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -1554,9 +1490,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", "cpu": [ "ppc64" ], @@ -1571,9 +1507,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", "cpu": [ "arm" ], @@ -1588,9 +1524,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", "cpu": [ "arm64" ], @@ -1605,9 +1541,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", "cpu": [ "x64" ], @@ -1622,9 +1558,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ "arm64" ], @@ -1639,9 +1575,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", "cpu": [ "x64" ], @@ -1656,9 +1592,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", "cpu": [ "arm64" ], @@ -1673,9 +1609,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", "cpu": [ "x64" ], @@ -1690,9 +1626,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", "cpu": [ "arm" ], @@ -1707,9 +1643,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", "cpu": [ "arm64" ], @@ -1724,9 +1660,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", "cpu": [ "ia32" ], @@ -1741,9 +1677,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", "cpu": [ "loong64" ], @@ -1758,9 +1694,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", "cpu": [ "mips64el" ], @@ -1775,9 +1711,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", "cpu": [ "ppc64" ], @@ -1792,9 +1728,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", "cpu": [ "riscv64" ], @@ -1809,9 +1745,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", "cpu": [ "s390x" ], @@ -1826,9 +1762,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], @@ -1843,9 +1779,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", "cpu": [ "arm64" ], @@ -1860,9 +1796,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", "cpu": [ "x64" ], @@ -1877,9 +1813,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", "cpu": [ "arm64" ], @@ -1894,9 +1830,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", "cpu": [ "x64" ], @@ -1911,9 +1847,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", "cpu": [ "x64" ], @@ -1928,9 +1864,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", "cpu": [ "arm64" ], @@ -1945,9 +1881,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", "cpu": [ "ia32" ], @@ -1962,9 +1898,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", "cpu": [ "x64" ], @@ -2083,27 +2019,27 @@ "@graphql-hive/gateway-runtime": "^1.9.4", "@graphql-hive/importer": "^1.1.0", "@graphql-hive/plugin-aws-sigv4": "^1.0.15", - "@graphql-hive/plugin-deduplicate-request": "^1.0.1", + "@graphql-hive/plugin-deduplicate-request": "^1.0.0", "@graphql-hive/pubsub": "^1.0.0", - "@graphql-mesh/cache-cfw-kv": "^0.105.5", - "@graphql-mesh/cache-localforage": "^0.105.6", - "@graphql-mesh/cache-redis": "^0.104.5", - "@graphql-mesh/cache-upstash-redis": "^0.1.5", + "@graphql-mesh/cache-cfw-kv": "^0.105.0", + "@graphql-mesh/cache-localforage": "^0.105.3", + "@graphql-mesh/cache-redis": "^0.104.0", + "@graphql-mesh/cache-upstash-redis": "^0.1.0", "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/hmac-upstream-signature": "^1.2.28", - "@graphql-mesh/plugin-http-cache": "^0.105.6", - "@graphql-mesh/plugin-jit": "^0.2.5", - "@graphql-mesh/plugin-jwt-auth": "^1.5.6", - "@graphql-mesh/plugin-mock": "^0.105.6", + "@graphql-mesh/hmac-upstream-signature": "^1.2.27", + "@graphql-mesh/plugin-http-cache": "^0.105.2", + "@graphql-mesh/plugin-jit": "^0.2.0", + "@graphql-mesh/plugin-jwt-auth": "^1.5.5", + "@graphql-mesh/plugin-mock": "^0.105.0", "@graphql-mesh/plugin-opentelemetry": "^1.3.62", "@graphql-mesh/plugin-prometheus": "^1.3.50", - "@graphql-mesh/plugin-rate-limit": "^0.104.5", - "@graphql-mesh/plugin-snapshot": "^0.104.5", - "@graphql-mesh/transport-http": "^0.6.43", - "@graphql-mesh/transport-http-callback": "^0.6.2", - "@graphql-mesh/transport-ws": "^1.0.10", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/plugin-rate-limit": "^0.104.0", + "@graphql-mesh/plugin-snapshot": "^0.104.0", + "@graphql-mesh/transport-http": "^0.6.42", + "@graphql-mesh/transport-http-callback": "^0.6.1", + "@graphql-mesh/transport-ws": "^1.0.9", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", "@graphql-tools/code-file-loader": "^8.1.15", "@graphql-tools/graphql-file-loader": "^8.0.20", "@graphql-tools/load": "^8.0.14", @@ -2136,21 +2072,21 @@ "@envelop/disable-introspection": "^7.0.0", "@envelop/generic-auth": "^9.0.0", "@graphql-hive/core": "^0.12.0", - "@graphql-hive/logger-json": "^0.0.5", + "@graphql-hive/logger-json": "^0.0.4", "@graphql-hive/pubsub": "^1.0.0", "@graphql-hive/signal": "^1.0.0", "@graphql-hive/yoga": "^0.42.1", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/fusion-runtime": "^0.11.17", - "@graphql-mesh/hmac-upstream-signature": "^1.2.28", - "@graphql-mesh/plugin-response-cache": "^0.104.6", - "@graphql-mesh/transport-common": "^0.7.35", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/hmac-upstream-signature": "^1.2.27", + "@graphql-mesh/plugin-response-cache": "^0.104.0", + "@graphql-mesh/transport-common": "^0.7.34", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", "@graphql-tools/batch-delegate": "^9.0.39", "@graphql-tools/delegate": "^10.2.21", "@graphql-tools/executor-common": "^0.0.4", - "@graphql-tools/executor-http": "^2.0.3", + "@graphql-tools/executor-http": "^2.0.2", "@graphql-tools/federation": "^3.2.6", "@graphql-tools/stitch": "^9.4.26", "@graphql-tools/utils": "^10.8.1", @@ -2159,7 +2095,7 @@ "@graphql-yoga/plugin-csrf-prevention": "^3.13.5", "@graphql-yoga/plugin-defer-stream": "^3.13.5", "@graphql-yoga/plugin-persisted-operations": "^3.13.6", - "@types/node": "^22.15.30", + "@types/node": "^22.15.27", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/promise-helpers": "^1.3.0", "@whatwg-node/server": "^0.10.10", @@ -2184,15 +2120,24 @@ "node": ">=18.0.0" } }, + "node_modules/@graphql-hive/logger": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@graphql-hive/logger/-/logger-0.0.0.tgz", + "integrity": "sha512-OYT33fYvSvPcbqfjZ4uniKQe+525oAuk2k3MKVwIBMjA7oFIjgCoUH0AlKyRjbXuFlmKDeidn+3bzY3S5nNqFw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@graphql-hive/logger-json": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@graphql-hive/logger-json/-/logger-json-0.0.5.tgz", - "integrity": "sha512-k5/bGLKlHe+yl0r64tMZFPhXAWp6QR702ar1ZpJhmxmDJmfuSGJSEK3qVxam8WsmmJmFJhYjzwOoGd7pI6XqRw==", + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@graphql-hive/logger-json/-/logger-json-0.0.4.tgz", + "integrity": "sha512-oKPgvJ2zVQNiYEN7Fz0wTlyR000uUY6mn4U8uQphFpd6XcuNhA0THoTwWUJnn20mqj8HgpKUoW47sAJ9twkcEg==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", "cross-inspect": "^1.0.1", "tslib": "^2.8.1" }, @@ -2209,7 +2154,7 @@ "integrity": "sha512-BSSq55DnuSHURHQA1Wo08NifA/uEmOcLVS/8vSpj8F293otYwEVE+XMRBPKpVQzjm70mHasoBZnv+32KxnFmpA==", "license": "MIT", "dependencies": { - "@aws-sdk/client-sts": "^3.828.0", + "@aws-sdk/client-sts": "^3.817.0", "@graphql-mesh/fusion-runtime": "^0.11.17", "@whatwg-node/promise-helpers": "^1.3.0", "aws4": "1.13.2", @@ -2223,12 +2168,12 @@ } }, "node_modules/@graphql-hive/plugin-deduplicate-request": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@graphql-hive/plugin-deduplicate-request/-/plugin-deduplicate-request-1.0.1.tgz", - "integrity": "sha512-mHsawnqgUAM+kqoJBhoH77oF0hsmvjOIrKpgLKWvJ4/DjtCglw+nnjOTEb8OTVP18lC2dSdzkVDICAindjOpuQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@graphql-hive/plugin-deduplicate-request/-/plugin-deduplicate-request-1.0.0.tgz", + "integrity": "sha512-dqrkZQmZHS4/2GOaUP3RBgtVKEvxHe4oHT+yP3QNU5qTn9jeCGFsgqOIowEYM5fVltmHUHJEJasiuBVHJ92VnQ==", "license": "MIT", "dependencies": { - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/utils": "^0.104.3", "@graphql-tools/utils": "^10.8.6", "@whatwg-node/promise-helpers": "^1.3.1" }, @@ -2302,13 +2247,13 @@ "license": "0BSD" }, "node_modules/@graphql-mesh/cache-cfw-kv": { - "version": "0.105.6", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-cfw-kv/-/cache-cfw-kv-0.105.6.tgz", - "integrity": "sha512-5RFsZq9wW1GBmZdpnAUzjsWaJx2B6tePMqC0r3JYYlBPImiEF2/qcLuzQoWWDzvlclMs7jBOJJMcZuXimuFHiw==", + "version": "0.105.3", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-cfw-kv/-/cache-cfw-kv-0.105.3.tgz", + "integrity": "sha512-FbmB/k8Lff5+SXH4NKN8wX0VrlHG6ocAQRzO+rEcTmyBDn1uCWiYqYrIuR3Ps85Ylzp+niYjZkmAMqGctqHiCQ==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.6", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/utils": "^0.104.3", "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.4.0" }, @@ -2320,13 +2265,13 @@ } }, "node_modules/@graphql-mesh/cache-inmemory-lru": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-inmemory-lru/-/cache-inmemory-lru-0.8.7.tgz", - "integrity": "sha512-KoxgtbAARab0pu0B6/0H46RteQgXxgztVO1o8EWzQMSARhf3taF4W7FI3JuhyicjaFr6Vien2+hdfsx8/iPMrQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-inmemory-lru/-/cache-inmemory-lru-0.8.4.tgz", + "integrity": "sha512-WdK1ld3n2UlNWPHIA44FaUGTTb0uN+kUr7Gh7EvYDfZJnOt5ZC4Myu0qT8qxXwQOTggO9Wf8GTRYA+hW8PhA8A==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.6", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/utils": "^0.104.3", "@whatwg-node/disposablestack": "^0.0.6", "tslib": "^2.4.0" }, @@ -2338,14 +2283,14 @@ } }, "node_modules/@graphql-mesh/cache-localforage": { - "version": "0.105.7", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-localforage/-/cache-localforage-0.105.7.tgz", - "integrity": "sha512-Z+q8kGwGi3YRwY0S2zX2YKYy074D/026wbQmtzg3uG5BpnO3gTbMWCFL/PgG63viGR/GafBYekqXIdSLS3ml5A==", + "version": "0.105.4", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-localforage/-/cache-localforage-0.105.4.tgz", + "integrity": "sha512-y8YLsaqEQv5fRNh5y1T7XLeR9QuWQ5LIxS9w9CV1zyg5P5uHCDzk63J+aiK4qLSt9ulyTno5/CkmW7mF4QxDgg==", "license": "MIT", "dependencies": { - "@graphql-mesh/cache-inmemory-lru": "^0.8.7", - "@graphql-mesh/types": "^0.104.6", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/cache-inmemory-lru": "^0.8.4", + "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/utils": "^0.104.3", "localforage": "1.10.0", "tslib": "^2.4.0" }, @@ -2357,14 +2302,14 @@ } }, "node_modules/@graphql-mesh/cache-redis": { - "version": "0.104.6", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-redis/-/cache-redis-0.104.6.tgz", - "integrity": "sha512-Vd+z83Gp+m3jpUI6jWG46dbaoL9A6D/o3lcJKaKSxm2A7gM4Qu5z1NlJpDZrgoVB+t99FurHrOusxOVobEF8dg==", + "version": "0.104.3", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-redis/-/cache-redis-0.104.3.tgz", + "integrity": "sha512-1ZCCbaLZDvKevawxGQdhfpslkYvIyr2DY6CYJeo2dY/AHA6DUu31WXXQcBD+ElKLl+daL6HYeEJhPp6M6ARWWA==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", "@whatwg-node/disposablestack": "^0.0.6", "ioredis": "^5.3.2", "ioredis-mock": "^8.8.3", @@ -2378,13 +2323,13 @@ } }, "node_modules/@graphql-mesh/cache-upstash-redis": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-upstash-redis/-/cache-upstash-redis-0.1.6.tgz", - "integrity": "sha512-Y22kchj/AiBIn64r+SHImaUldXPTjA4tiod5yPwKzjjS26qBJkXqCTrNKuEXIYzvygq5tqrNRX80Z2MoSBTEeQ==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-upstash-redis/-/cache-upstash-redis-0.1.3.tgz", + "integrity": "sha512-096cnwTUegzqTzs8SG/IS7vxyPpdKkEsm9GA9XLqy5TlqgkgFqYI6qmEJK3Und7/LhSdno7Ws92DdSh7ue9mMw==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.9", - "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", "@upstash/redis": "^1.34.3", "@whatwg-node/disposablestack": "^0.0.6", "tslib": "^2.4.0" @@ -2397,17 +2342,17 @@ } }, "node_modules/@graphql-mesh/compose-cli": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@graphql-mesh/compose-cli/-/compose-cli-1.4.10.tgz", - "integrity": "sha512-i15PRiAXhUDt0ebEBRv+jgTJZQlvFXvSCZNVmiSWvH42dpEZcdhS+UWjZeIt7ScU7ZqwuZC2EvLijkHe3DdQNA==", + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@graphql-mesh/compose-cli/-/compose-cli-1.4.11.tgz", + "integrity": "sha512-mT6Q/VIzkuFAe19i6CjJSWH+piQDL7oCtjSr5FXSQBxUDjYzSTLI4vz72oN4vVwoNU9pIjIE1QwpvY+hlPBo7g==", "license": "MIT", "dependencies": { "@commander-js/extra-typings": "^13.0.0", - "@graphql-mesh/fusion-composition": "^0.8.9", - "@graphql-mesh/include": "^0.3.5", + "@graphql-mesh/fusion-composition": "^0.8.10", + "@graphql-mesh/include": "^0.3.6", "@graphql-mesh/string-interpolation": "^0.5.8", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "@graphql-tools/code-file-loader": "^8.1.7", "@graphql-tools/graphql-file-loader": "^8.0.5", "@graphql-tools/load": "^8.0.1", @@ -2462,12 +2407,12 @@ } }, "node_modules/@graphql-mesh/fusion-composition": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@graphql-mesh/fusion-composition/-/fusion-composition-0.8.9.tgz", - "integrity": "sha512-O8qyhcGD8MK5W/KeKDnhXKZ1/7nQl6OSDvMfHItJpAn3UpDensJeHrSpv2tGVmygJyLZdJEp6rhDQOqraJRxAg==", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@graphql-mesh/fusion-composition/-/fusion-composition-0.8.10.tgz", + "integrity": "sha512-5ry9YNOa8rBCCs1V3YFWTzZi+BJ0is8QknEmJE34EuKHZgYEfNdYbWYkcyt7dKcDKHcjA89FQ0Lyd6yfjAooqA==", "license": "MIT", "dependencies": { - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/utils": "^0.104.6", "@graphql-tools/schema": "^10.0.5", "@graphql-tools/stitching-directives": "^3.1.9", "@graphql-tools/utils": "^10.8.0", @@ -2512,9 +2457,9 @@ "@envelop/core": "^5.2.3", "@envelop/instrumentation": "^1.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/transport-common": "^0.7.35", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/transport-common": "^0.7.34", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", "@graphql-tools/batch-execute": "^9.0.17", "@graphql-tools/delegate": "^10.2.21", "@graphql-tools/executor": "^1.4.7", @@ -2559,12 +2504,12 @@ } }, "node_modules/@graphql-mesh/include": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@graphql-mesh/include/-/include-0.3.5.tgz", - "integrity": "sha512-mHN67/M++JVy2POiZDNHIS0ffD0NQYEeyojDuSTl0lqjOw9srpni7TGX4x5OSO+5IcoBrrORySNj33JumSApEw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/include/-/include-0.3.6.tgz", + "integrity": "sha512-fEnrpxLeFVk1eslhIXhRsEpeqMa2AfJTZMZyDveOFiCMrQuxyhvKS2lDHkFYriGcsWPZzk14bylAeNbTyCOG7w==", "license": "MIT", "dependencies": { - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/utils": "^0.104.6", "dotenv": "^16.3.1", "get-tsconfig": "^4.7.6", "jiti": "^2.0.0", @@ -2578,13 +2523,13 @@ } }, "node_modules/@graphql-mesh/plugin-http-cache": { - "version": "0.105.7", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-http-cache/-/plugin-http-cache-0.105.7.tgz", - "integrity": "sha512-1Wlu77ntfHIh+9ujFTFAcTfZz2X1Sg+r4iM+3HHi9kda28MwpPAlgX6+0vk1ir08vM66NSSB5RkZ2faXqI6mBA==", + "version": "0.105.4", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-http-cache/-/plugin-http-cache-0.105.4.tgz", + "integrity": "sha512-XS4iRF9Kij991MfWtVi810LZe5ABnkl5BeZf+7XQU7ULesvNxcR5bbEU+5occKOq3pRN5KZg3n3XTkZ2ilYxZA==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.6", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/utils": "^0.104.3", "@whatwg-node/fetch": "^0.10.6", "@whatwg-node/promise-helpers": "^1.0.0", "http-cache-semantics": "^4.1.1", @@ -2598,13 +2543,13 @@ } }, "node_modules/@graphql-mesh/plugin-jit": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-jit/-/plugin-jit-0.2.6.tgz", - "integrity": "sha512-iSYKc+hhhohRoyABMURsJ8XN/IoIXFEH4TmAcPO+RLu8nEnvkTweNIoz7F3JhcrSIOCyMKqk+LjUqJo2rbmQIg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-jit/-/plugin-jit-0.2.3.tgz", + "integrity": "sha512-ir/CEq3wGZeFV2NC406n/SrEssdUQ2F3fG/s6D4LVDXYEodcA4mdud0Ko5I2ACsvxYfRxba7q1x2dG5BlvGPGQ==", "license": "MIT", "dependencies": { "@envelop/core": "^5.1.0", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/utils": "^0.104.3", "@graphql-tools/utils": "^10.8.0", "graphql-jit": "^0.8.7", "tslib": "^2.4.0" @@ -2635,15 +2580,15 @@ } }, "node_modules/@graphql-mesh/plugin-mock": { - "version": "0.105.7", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-mock/-/plugin-mock-0.105.7.tgz", - "integrity": "sha512-tLy5sRZ3C5JPJkndMBiikG5HjS4NsM2iWO4A9tgz08n0f36Q2kHvJOglDzRR4sn3Nj1ILqhTknnFw4Q1PJ2y3A==", + "version": "0.105.4", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-mock/-/plugin-mock-0.105.4.tgz", + "integrity": "sha512-yhgU0aDfzQIuCbYkqfQTYdPP6Sxn7ucG8PQdbPLkhHYrMvcqdrnFXuzWhio13pbD5/geprxmEkdncJjaY2tDlA==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.8", - "@graphql-mesh/types": "^0.104.6", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/utils": "^0.104.3", "@graphql-tools/mock": "^9.0.3", "@graphql-tools/schema": "^10.0.5", "@graphql-tools/utils": "^10.8.0", @@ -2684,9 +2629,9 @@ "@azure/monitor-opentelemetry-exporter": "^1.0.0-beta.27", "@graphql-hive/gateway-runtime": "^1.9.4", "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/transport-common": "^0.7.35", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/transport-common": "^0.7.34", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", "@graphql-tools/utils": "^10.8.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^1.30.0", @@ -2716,8 +2661,8 @@ "dependencies": { "@graphql-hive/gateway-runtime": "^1.9.4", "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", "@graphql-tools/utils": "^10.8.1", "@graphql-yoga/plugin-prometheus": "^6.8.5", "prom-client": "^15.0.0", @@ -2732,16 +2677,16 @@ } }, "node_modules/@graphql-mesh/plugin-rate-limit": { - "version": "0.104.6", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-rate-limit/-/plugin-rate-limit-0.104.6.tgz", - "integrity": "sha512-PinCHbkcAnOiEoTSJrW7ilkyOZQtwXLs1BrFwYKSk/KT2cjtShRJriRJqI3fcvrb9N4raeW7O6kb5AnMDj/jrg==", + "version": "0.104.3", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-rate-limit/-/plugin-rate-limit-0.104.3.tgz", + "integrity": "sha512-f5mfZX/z/iXm9TbZSZuow6P0o+8svrO7wsCZb/kAoQ2wFLUDQqcmCfDpFVCqxPVTkV+GSkI4g5jr1S899RJ6MQ==", "license": "MIT", "dependencies": { "@envelop/rate-limiter": "^7.0.1", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.6", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/utils": "^0.104.3", "@graphql-tools/utils": "^10.8.0", "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.4.0" @@ -2754,17 +2699,17 @@ } }, "node_modules/@graphql-mesh/plugin-response-cache": { - "version": "0.104.7", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-response-cache/-/plugin-response-cache-0.104.7.tgz", - "integrity": "sha512-DbCVHtcnjph00RMofMXm8Bbsrcz2d7rSiG5Q487BfX/HLUFN05dAujuf7x6uKHrXfRuaohoHlhum5SWxNwzPgQ==", + "version": "0.104.4", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-response-cache/-/plugin-response-cache-0.104.4.tgz", + "integrity": "sha512-qy+z/rlvRNeuWyPwtr0hfIo8cfYK6ToAs4qTOrVpj5+iq2sN5V4aOCjYUpZPBGdleM7pH4rr8DjZt+WBTl2jRQ==", "license": "MIT", "dependencies": { "@envelop/core": "^5.1.0", "@envelop/response-cache": "^7.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.6", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/utils": "^0.104.3", "@graphql-tools/utils": "^10.6.2", "@graphql-yoga/plugin-response-cache": "^3.13.1", "@whatwg-node/promise-helpers": "^1.0.0", @@ -2780,15 +2725,15 @@ } }, "node_modules/@graphql-mesh/plugin-snapshot": { - "version": "0.104.6", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-snapshot/-/plugin-snapshot-0.104.6.tgz", - "integrity": "sha512-RrxlseP2A/wFaT7Cxhr4YUK4lb2NfZJR2fAI6s6OH7ybEFj9nYgKyGv8h+ga3T2Mx2ybpybXoZQXjqfsail76g==", + "version": "0.104.3", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-snapshot/-/plugin-snapshot-0.104.3.tgz", + "integrity": "sha512-q39dgck3D8m4qpRCuP+WOt59xZMMzgYiFhV6pJ/s6tzXeujA7doJb/p4ILxlG+erSTK3gp9nBbi4rQiBVEHF/g==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.6", - "@graphql-mesh/utils": "^0.104.6", + "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/utils": "^0.104.3", "@whatwg-node/fetch": "^0.10.6", "minimatch": "10.0.1", "tslib": "^2.4.0" @@ -2839,15 +2784,15 @@ } }, "node_modules/@graphql-mesh/transport-common": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-common/-/transport-common-0.7.35.tgz", - "integrity": "sha512-11IMzYfFaa+oWubEv1BE5y2m0vp4AQpiN0TpvvOf4Ez61IQRi555DTteYasYlIB1TjC1+2NNE8GPOa+K4uoSWA==", + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-common/-/transport-common-0.7.34.tgz", + "integrity": "sha512-Wush6n3gm1ytUpoZYfDO4jaAUi6Ty3s0sgepASbUD0Fki2ONawq+8i/LywZw85eGlBLm5Ky2jrHwi8TKaNUdTg==", "license": "MIT", "dependencies": { "@envelop/core": "^5.2.3", "@graphql-hive/pubsub": "^1.0.0", "@graphql-hive/signal": "^1.0.0", - "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/types": "^0.104.0", "@graphql-tools/executor": "^1.4.7", "@graphql-tools/executor-common": "^0.0.4", "@graphql-tools/utils": "^10.8.1", @@ -2861,17 +2806,17 @@ } }, "node_modules/@graphql-mesh/transport-http": { - "version": "0.6.43", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-http/-/transport-http-0.6.43.tgz", - "integrity": "sha512-9Zc/eQmrEsQWDg26vise13WdwHk6hmp+sE+7WJLFj6l7aoHKYoH5LSSW+ciU2ah7C4lCOMUOWoeoHgSVbcD2Lg==", + "version": "0.6.42", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-http/-/transport-http-0.6.42.tgz", + "integrity": "sha512-P+cneKWodQCiBljTCau6EzpYEoQWdbKHi8LIROsbOlQi4Jn6rV22WQTkLQ0ZoIrsXXDdejO/CZkY9JapSeFwkA==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.6", - "@graphql-mesh/transport-common": "^0.7.35", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", - "@graphql-tools/executor-http": "^2.0.3", + "@graphql-mesh/transport-common": "^0.7.34", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", + "@graphql-tools/executor-http": "^2.0.2", "@graphql-tools/utils": "^10.8.1", "@whatwg-node/promise-helpers": "^1.3.0", "graphql": "^16.9.0", @@ -2885,17 +2830,17 @@ } }, "node_modules/@graphql-mesh/transport-http-callback": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-http-callback/-/transport-http-callback-0.6.2.tgz", - "integrity": "sha512-F1mfygfBPcsLj41oYR1WaprEkqeb9OOD5lNCOPdgIK/k8FmqUL40lfWKDqMQCwxhZ9HoZF29MvlozQ9s1X+xyQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-http-callback/-/transport-http-callback-0.6.1.tgz", + "integrity": "sha512-P8lJygBuz8vEPCdRcg6U9XSz5VhP2iePFjmteU+ttRPXYe7qLD5Gf6gdn7yXgjW2HohOiNhUj+346MTVUBvaQg==", "license": "MIT", "dependencies": { "@graphql-hive/signal": "^1.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.6", - "@graphql-mesh/transport-common": "^0.7.35", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/transport-common": "^0.7.34", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", "@graphql-tools/executor-common": "^0.0.4", "@graphql-tools/utils": "^10.8.1", "@repeaterjs/repeater": "^3.0.6", @@ -2911,16 +2856,16 @@ } }, "node_modules/@graphql-mesh/transport-ws": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-ws/-/transport-ws-1.0.10.tgz", - "integrity": "sha512-vOR/PYfH1AT2e/nP3HE65tmxnTYgc4VFuXK8jmK/9cDzfEefLqVRPUfeMGjjKCrHeqOSCmxUD7RjeBoz2zbvSQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-ws/-/transport-ws-1.0.9.tgz", + "integrity": "sha512-OjFFFX2GUVOcBcbd5ViTTaA6ComIV6XSDwMFB0KFOOqKVg7qaQK09OG00NXxJN7oTMhKMlPdzeaJXniHfq0m4g==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.6", - "@graphql-mesh/transport-common": "^0.7.35", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/transport-common": "^0.7.34", + "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/utils": "^0.104.2", "@graphql-tools/executor-graphql-ws": "^2.0.5", "@graphql-tools/utils": "^10.8.1", "graphql-ws": "^6.0.3", @@ -3148,9 +3093,9 @@ } }, "node_modules/@graphql-tools/executor-http": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-2.0.3.tgz", - "integrity": "sha512-zlBu3ka3yQF/SHr3BfafM734RlUG8YifjBcGDpP9aL46yonGEGwIfvcwDU+0V1KviSnXOGiyYaL2ZcG6u8GTSA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-2.0.2.tgz", + "integrity": "sha512-EZXhyGhAi2ZPv0Mp+OxKe8tP8xAAzVduhMxwYCOMwlW18ItPr8p6Dta9O+ysXQPAQZZBJJaGKObmYi7a0UUbHg==", "license": "MIT", "dependencies": { "@graphql-hive/signal": "^1.0.0", @@ -3160,7 +3105,7 @@ "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/fetch": "^0.10.8", "@whatwg-node/promise-helpers": "^1.3.0", - "meros": "^1.3.1", + "meros": "^1.2.1", "tslib": "^2.8.1" }, "engines": { @@ -3178,7 +3123,7 @@ "dependencies": { "@graphql-tools/delegate": "^10.2.21", "@graphql-tools/executor": "^1.4.7", - "@graphql-tools/executor-http": "^2.0.3", + "@graphql-tools/executor-http": "^2.0.2", "@graphql-tools/merge": "^9.0.12", "@graphql-tools/schema": "^10.0.11", "@graphql-tools/stitch": "^9.4.26", @@ -3324,9 +3269,9 @@ } }, "node_modules/@graphql-tools/mock": { - "version": "9.0.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-9.0.23.tgz", - "integrity": "sha512-l6z5OdMAvMybqG/8aIhSJyhyc4/ryEYWY4CmpkH9KbLFe0tLOMCCbBR0+K/ANMzs2ZdGy/9yknDHGvDH46fwZw==", + "version": "9.0.22", + "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-9.0.22.tgz", + "integrity": "sha512-5hU5Kx18dBTGZiCGjHgz/nUs2Eoh7t0ul8uhqUeYVUBrrle3y9rGgMsFOyx4v7hgyIbxFmzU30+8n8SC3cAcEg==", "license": "MIT", "dependencies": { "@graphql-tools/schema": "^10.0.23", @@ -3920,15 +3865,15 @@ } }, "node_modules/@opentelemetry/api-logs": { - "version": "0.200.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.200.0.tgz", - "integrity": "sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", + "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=14" } }, "node_modules/@opentelemetry/core": { @@ -4042,18 +3987,6 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation/node_modules/@opentelemetry/api-logs": { - "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", - "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/@opentelemetry/instrumentation/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -4121,51 +4054,6 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/api-logs": { - "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", - "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-logs": { - "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz", - "integrity": "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.57.2", - "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-metrics": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", - "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, "node_modules/@opentelemetry/resources": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", @@ -4192,95 +4080,33 @@ } }, "node_modules/@opentelemetry/sdk-logs": { - "version": "0.200.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.200.0.tgz", - "integrity": "sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA==", + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz", + "integrity": "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.200.0", - "@opentelemetry/core": "2.0.0", - "@opentelemetry/resources": "2.0.0" + "@opentelemetry/api-logs": "0.57.2", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1" }, "engines": { - "node": "^18.19.0 || >=20.6.0" + "node": ">=14" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", - "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz", - "integrity": "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, "node_modules/@opentelemetry/sdk-metrics": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", - "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.9.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", - "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", - "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", + "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/semantic-conventions": "^1.29.0" + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1" }, "engines": { - "node": "^18.19.0 || >=20.6.0" + "node": ">=14" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" @@ -4457,9 +4283,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.6.0.tgz", - "integrity": "sha512-Pgvfb+TQ4wUNLyHzvgCP4aYZMh16y7GcfF59oirRHcgGgkH1e/s9C0nv/v3WP+Quymyr5je71HeFQCwh+44XLg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.7.0.tgz", + "integrity": "sha512-7ov8hu/4j0uPZv8b27oeOFtIBtlFmM3ibrPv/Omx1uUdoXvcpJ00U+H/OWWC/keAguLlcqwtyL2/jTlSnApgNQ==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^4.0.8", @@ -4468,7 +4294,7 @@ "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-stream": "^4.2.2", + "@smithy/util-stream": "^4.2.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -4493,9 +4319,9 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.4.tgz", - "integrity": "sha512-AMtBR5pHppYMVD7z7G+OlHHAcgAN7v0kVKEpHuTO4Gb199Gowh0taYi9oDStFeUhetkeP55JLSVlTW1n9rFtUw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz", + "integrity": "sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.1.2", @@ -4563,12 +4389,12 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.13.tgz", - "integrity": "sha512-xg3EHV/Q5ZdAO5b0UiIMj3RIOCobuS40pBBODguUDVdko6YK6QIzCVRrHTogVuEKglBWqWenRnZ71iZnLL3ZAQ==", + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.14.tgz", + "integrity": "sha512-+BGLpK5D93gCcSEceaaYhUD/+OCGXM1IDaq/jKUQ+ujB0PTWlWN85noodKw/IPFZhIKFCNEe19PGd/reUMeLSQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.6.0", + "@smithy/core": "^3.7.0", "@smithy/middleware-serde": "^4.0.8", "@smithy/node-config-provider": "^4.1.3", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -4582,15 +4408,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.1.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.14.tgz", - "integrity": "sha512-eoXaLlDGpKvdmvt+YBfRXE7HmIEtFF+DJCbTPwuLunP0YUnrydl+C4tS+vEM0+nyxXrX3PSUFqC+lP1+EHB1Tw==", + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.15.tgz", + "integrity": "sha512-iKYUJpiyTQ33U2KlOZeUb0GwtzWR3C0soYcKuCnTmJrvt6XwTPQZhMfsjJZNw7PpQ3TU4Ati1qLSrkSJxnnSMQ==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/protocol-http": "^5.1.2", "@smithy/service-error-classification": "^4.0.6", - "@smithy/smithy-client": "^4.4.5", + "@smithy/smithy-client": "^4.4.6", "@smithy/types": "^4.3.1", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -4644,9 +4470,9 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", - "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz", + "integrity": "sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.0.4", @@ -4757,17 +4583,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.5.tgz", - "integrity": "sha512-+lynZjGuUFJaMdDYSTMnP/uPBBXXukVfrJlP+1U/Dp5SFTEI++w6NMga8DjOENxecOF71V9Z2DllaVDYRnGlkg==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.6.tgz", + "integrity": "sha512-3wfhywdzB/CFszP6moa5L3lf5/zSfQoH0kvVSdkyK2az5qZet0sn2PAHjcTDiq296Y4RP5yxF7B6S6+3oeBUCQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.6.0", - "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/core": "^3.7.0", + "@smithy/middleware-endpoint": "^4.1.14", "@smithy/middleware-stack": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", - "@smithy/util-stream": "^4.2.2", + "@smithy/util-stream": "^4.2.3", "tslib": "^2.6.2" }, "engines": { @@ -4864,13 +4690,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.21", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.21.tgz", - "integrity": "sha512-wM0jhTytgXu3wzJoIqpbBAG5U6BwiubZ6QKzSbP7/VbmF1v96xlAbX2Am/mz0Zep0NLvLh84JT0tuZnk3wmYQA==", + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.22.tgz", + "integrity": "sha512-hjElSW18Wq3fUAWVk6nbk7pGrV7ZT14DL1IUobmqhV3lxcsIenr5FUsDe2jlTVaS8OYBI3x+Og9URv5YcKb5QA==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.0.4", - "@smithy/smithy-client": "^4.4.5", + "@smithy/smithy-client": "^4.4.6", "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" @@ -4880,16 +4706,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.21", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.21.tgz", - "integrity": "sha512-/F34zkoU0GzpUgLJydHY8Rxu9lBn8xQC/s/0M0U9lLBkYbA1htaAFjWYJzpzsbXPuri5D1H8gjp2jBum05qBrA==", + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.22.tgz", + "integrity": "sha512-7B8mfQBtwwr2aNRRmU39k/bsRtv9B6/1mTMrGmmdJFKmLAH+KgIiOuhaqfKOBGh9sZ/VkZxbvm94rI4MMYpFjQ==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.1.4", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", - "@smithy/smithy-client": "^4.4.5", + "@smithy/smithy-client": "^4.4.6", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -4951,13 +4777,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.2.tgz", - "integrity": "sha512-aI+GLi7MJoVxg24/3J1ipwLoYzgkB4kUfogZfnslcYlynj3xsQ0e7vk4TnTro9hhsS5PvX1mwmkRqqHQjwcU7w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz", + "integrity": "sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.0.4", - "@smithy/node-http-handler": "^4.0.6", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/node-http-handler": "^4.1.0", "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", @@ -4995,13 +4821,13 @@ } }, "node_modules/@theguild/federation-composition": { - "version": "0.18.4", - "resolved": "https://registry.npmjs.org/@theguild/federation-composition/-/federation-composition-0.18.4.tgz", - "integrity": "sha512-2hdoeVSVTxp4TkZAy9HJnGWmKMyjoTx20tsWKz8eZ+B6pMA6XqCGLahrr8NPyj1jx+1vyczKAdGNopgvzuDHWw==", + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/@theguild/federation-composition/-/federation-composition-0.18.5.tgz", + "integrity": "sha512-3tL689XKObclVOXgLHrAwkDOlo3gTGxhJhV19xb4AHZx5xWLON4RFMtOnphUeOqcfF1IoIu2x1scDH0NEVE5bw==", "license": "MIT", "dependencies": { "constant-case": "^3.0.4", - "debug": "4.4.0", + "debug": "4.4.1", "json5": "^2.2.3", "lodash.sortby": "^4.7.0" }, @@ -5012,23 +4838,6 @@ "graphql": "^16.0.0" } }, - "node_modules/@theguild/federation-composition/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -5089,9 +4898,9 @@ } }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", - "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", "license": "MIT", "dependencies": { "@types/ms": "*", @@ -5117,9 +4926,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.32", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.32.tgz", - "integrity": "sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==", + "version": "22.15.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz", + "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -5181,9 +4990,9 @@ "license": "MIT" }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.3.tgz", - "integrity": "sha512-oRhjSzcVjX8ExyaF8hC0zzTqxlVuRlgMHL/Bh4w3xB9+wjbm0FpXylVU/lBrn+kgphwYTrOk3tp+AVShGmlYCg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.2.tgz", + "integrity": "sha512-Gz/Sm64+Sq/vklJu1tt9t+4R2lvnud8NbTD/ZfpZtMiUX7YeVpCA8j6NSW8ptwcoLL+NmYANwqP8DV0q/bwl2w==", "license": "MIT", "dependencies": { "http-proxy-agent": "^7.0.0", @@ -5195,12 +5004,12 @@ } }, "node_modules/@upstash/redis": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.35.0.tgz", - "integrity": "sha512-WUm0Jz1xN4DBDGeJIi2Y0kVsolWRB2tsVds4SExaiLg4wBdHFMB+8IfZtBWr+BP0FvhuBr5G1/VLrJ9xzIWHsg==", + "version": "1.34.9", + "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.34.9.tgz", + "integrity": "sha512-7qzzF2FQP5VxR2YUNjemWs+hl/8VzJJ6fOkT7O7kt9Ct8olEVzb1g6/ik6B8Pb8W7ZmYv81SdlVV9F6O8bh/gw==", "license": "MIT", "dependencies": { - "uncrypto": "^0.1.3" + "crypto-js": "^4.2.0" } }, "node_modules/@whatwg-node/cookie-store": { @@ -5334,9 +5143,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5960,6 +5769,12 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, "node_modules/dataloader": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.3.tgz", @@ -6197,9 +6012,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -6210,31 +6025,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" } }, "node_modules/escalade": { @@ -6983,9 +6798,9 @@ "license": "MIT" }, "node_modules/import-in-the-middle": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", - "integrity": "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.0.tgz", + "integrity": "sha512-g5zLT0HaztRJWysayWYiUq/7E5H825QIiecMD2pI5QO7Wzr847l6GDvPvmZaDIdrDtS2w7qRczywxiK6SL5vRw==", "license": "Apache-2.0", "dependencies": { "acorn": "^8.14.0", @@ -7588,9 +7403,9 @@ } }, "node_modules/meros": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.1.tgz", - "integrity": "sha512-eV7dRObfTrckdmAz4/n7pT1njIsIJXRIZkgCiX43xEsPNy4gjXQzOYYxmGcolAMtF7HyfqRuDBh3Lgs4hmhVEw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", + "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", "license": "MIT", "engines": { "node": ">=13" @@ -8873,12 +8688,6 @@ "node": ">= 0.6" } }, - "node_modules/uncrypto": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", - "license": "MIT" - }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", diff --git a/examples/hmac-auth-https/package.json b/examples/hmac-auth-https/package.json index 491089d07..96ba78cc5 100644 --- a/examples/hmac-auth-https/package.json +++ b/examples/hmac-auth-https/package.json @@ -16,6 +16,7 @@ "@graphql-mesh/compose-cli": "^1.4.10", "@graphql-mesh/hmac-upstream-signature": "^1.2.28", "@graphql-mesh/plugin-jwt-auth": "^1.5.6", + "@graphql-hive/logger": "^0.0.0", "graphql": "^16.10.0", "graphql-yoga": "^5.15.1" }, @@ -23,6 +24,6 @@ "tsx": "^4.20.3" }, "overrides": { - "esbuild": "^0.25.5" + "esbuild": "^0.25.4" } -} \ No newline at end of file +} diff --git a/examples/hmac-auth-https/services/users/index.ts b/examples/hmac-auth-https/services/users/index.ts index 22429fd51..c03522fb5 100644 --- a/examples/hmac-auth-https/services/users/index.ts +++ b/examples/hmac-auth-https/services/users/index.ts @@ -2,6 +2,7 @@ import { readFileSync } from 'fs'; import { createServer } from 'https'; import { join } from 'path'; import { buildSubgraphSchema } from '@apollo/subgraph'; +import { Logger } from '@graphql-hive/logger'; import { useHmacSignatureValidation } from '@graphql-mesh/hmac-upstream-signature'; import { JWTExtendContextFields, @@ -19,6 +20,7 @@ const yoga = createYoga({ logging: true, plugins: [ useHmacSignatureValidation({ + log: new Logger({ level: 'debug' }), secret: 'HMAC_SIGNING_SECRET', }), useForwardedJWT({}), diff --git a/package.json b/package.json index fb486ad34..783f9ba9b 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@babel/plugin-proposal-explicit-resource-management": "7.27.4", "@babel/plugin-transform-class-properties": "7.27.1", "@babel/plugin-transform-class-static-block": "7.27.1", + "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/preset-env": "7.28.0", "@babel/preset-typescript": "7.27.1", "@changesets/changelog-github": "^0.5.0", diff --git a/packages/delegate/src/finalizeGatewayRequest.ts b/packages/delegate/src/finalizeGatewayRequest.ts index e9cb37e5f..b637061ab 100644 --- a/packages/delegate/src/finalizeGatewayRequest.ts +++ b/packages/delegate/src/finalizeGatewayRequest.ts @@ -666,9 +666,6 @@ function filterSelectionSet( leave: (node) => { const type = typeInfo.getType(); if (type == null) { - // console.warn( - // `Invalid type for node: ${typeInfo.getParentType()?.name}.${node.name.value}`, - // ); return null; } const namedType = getNamedType(type); diff --git a/packages/fusion-runtime/package.json b/packages/fusion-runtime/package.json index 730f8f23c..47b43e164 100644 --- a/packages/fusion-runtime/package.json +++ b/packages/fusion-runtime/package.json @@ -45,6 +45,7 @@ "dependencies": { "@envelop/core": "^5.3.0", "@envelop/instrumentation": "^1.0.0", + "@graphql-hive/logger": "workspace:^", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/transport-common": "workspace:^", "@graphql-mesh/types": "^0.104.5", diff --git a/packages/fusion-runtime/src/executor.ts b/packages/fusion-runtime/src/executor.ts index 2746160de..094aca8a4 100644 --- a/packages/fusion-runtime/src/executor.ts +++ b/packages/fusion-runtime/src/executor.ts @@ -34,7 +34,7 @@ export function getExecutorForUnifiedGraph( () => unifiedGraphManager.getContext(execReq.context), (context) => { function handleExecutor(executor: Executor) { - opts?.transportContext?.logger?.debug( + opts?.transportContext?.log.debug( 'Executing request on unified graph', () => print(execReq.document), ); @@ -50,7 +50,7 @@ export function getExecutorForUnifiedGraph( return handleMaybePromise( () => unifiedGraphManager.getUnifiedGraph(), (unifiedGraph) => { - opts?.transportContext?.logger?.debug( + opts?.transportContext?.log.debug( 'Executing request on unified graph', () => print(execReq.document), ); @@ -70,9 +70,7 @@ export function getExecutorForUnifiedGraph( enumerable: true, get() { return function unifiedGraphExecutorDispose() { - opts?.transportContext?.logger?.debug( - 'Disposing unified graph executor', - ); + opts?.transportContext?.log.debug('Disposing unified graph executor'); return unifiedGraphManager[DisposableSymbols.asyncDispose](); }; }, diff --git a/packages/fusion-runtime/src/federation/supergraph.ts b/packages/fusion-runtime/src/federation/supergraph.ts index 7589136dd..ec33091e9 100644 --- a/packages/fusion-runtime/src/federation/supergraph.ts +++ b/packages/fusion-runtime/src/federation/supergraph.ts @@ -1,7 +1,7 @@ +import { LegacyLogger, Logger } from '@graphql-hive/logger'; import type { YamlConfig } from '@graphql-mesh/types'; import { getInContextSDK, - requestIdByRequest, resolveAdditionalResolversWithoutImport, } from '@graphql-mesh/utils'; import type { @@ -158,7 +158,8 @@ export const handleFederationSupergraph: UnifiedGraphHandler = function ({ onDelegateHooks, additionalTypeDefs: additionalTypeDefsFromConfig = [], additionalResolvers: additionalResolversFromConfig = [], - logger, + // no logger was provided, use a muted logger for consistency across plugin hooks + log: rootLog = new Logger({ level: false }), }: UnifiedGraphHandlerOpts): UnifiedGraphHandlerResult { const additionalTypeDefs = [...asArray(additionalTypeDefsFromConfig)]; const additionalResolvers = [...asArray(additionalResolversFromConfig)]; @@ -230,7 +231,7 @@ export const handleFederationSupergraph: UnifiedGraphHandler = function ({ originalResolver, typeName, onDelegationStageExecuteHooks, - logger, + rootLog, ); } } @@ -278,7 +279,7 @@ export const handleFederationSupergraph: UnifiedGraphHandler = function ({ executableUnifiedGraph, // @ts-expect-error Legacy Mesh RawSource is not compatible with new Mesh subschemas, - logger, + LegacyLogger.from(rootLog), onDelegateHooks || [], ); const stitchingInfo = executableUnifiedGraph.extensions?.[ @@ -306,16 +307,9 @@ export const handleFederationSupergraph: UnifiedGraphHandler = function ({ delegationPlanBuilder = newDelegationPlanBuilder; } const onDelegationPlanDoneHooks: OnDelegationPlanDoneHook[] = []; - let currentLogger = logger; - let requestId: string | undefined; - if (context?.request) { - requestId = requestIdByRequest.get(context.request); - if (requestId) { - currentLogger = currentLogger?.child({ requestId }); - } - } + let log = context.log as Logger; if (sourceSubschema.name) { - currentLogger = currentLogger?.child({ + log = log.child({ subgraph: sourceSubschema.name, }); } @@ -328,7 +322,7 @@ export const handleFederationSupergraph: UnifiedGraphHandler = function ({ variables, fragments, fieldNodes, - logger: currentLogger, + log, context, info, delegationPlanBuilder, diff --git a/packages/fusion-runtime/src/unifiedGraphManager.ts b/packages/fusion-runtime/src/unifiedGraphManager.ts index 26f03a5e7..7330a18ef 100644 --- a/packages/fusion-runtime/src/unifiedGraphManager.ts +++ b/packages/fusion-runtime/src/unifiedGraphManager.ts @@ -1,8 +1,9 @@ +import type { Logger } from '@graphql-hive/logger'; import type { TransportContext, TransportEntry, } from '@graphql-mesh/transport-common'; -import type { Logger, OnDelegateHook } from '@graphql-mesh/types'; +import type { OnDelegateHook } from '@graphql-mesh/types'; import { dispose, isDisposable } from '@graphql-mesh/utils'; import { CRITICAL_ERROR } from '@graphql-tools/executor'; import type { @@ -68,8 +69,7 @@ export interface UnifiedGraphHandlerOpts { onDelegationPlanHooks?: OnDelegationPlanHook[]; onDelegationStageExecuteHooks?: OnDelegationStageExecuteHook[]; onDelegateHooks?: OnDelegateHook[]; - - logger?: Logger; + log?: Logger; } export interface UnifiedGraphHandlerResult { @@ -81,7 +81,7 @@ export interface UnifiedGraphHandlerResult { export interface UnifiedGraphManagerOptions { getUnifiedGraph( - ctx: TransportContext, + ctx: TransportContext | undefined, ): MaybePromise; // Handle the unified graph by any specification handleUnifiedGraph?: UnifiedGraphHandler; @@ -105,7 +105,6 @@ export interface UnifiedGraphManagerOptions { */ batch?: boolean; instrumentation?: () => Instrumentation | undefined; - onUnifiedGraphChange?(newUnifiedGraph: GraphQLSchema): void; } @@ -157,7 +156,7 @@ export class UnifiedGraphManager implements AsyncDisposable { this.onDelegationStageExecuteHooks = opts?.onDelegationStageExecuteHooks || []; if (opts.pollingInterval != null) { - opts.transportContext?.logger?.debug( + opts.transportContext?.log.debug( `Starting polling to Supergraph with interval ${millisecondsToStr(opts.pollingInterval)}`, ); } @@ -170,16 +169,16 @@ export class UnifiedGraphManager implements AsyncDisposable { this.lastLoadTime != null && Date.now() - this.lastLoadTime >= this.opts.pollingInterval ) { - this.opts?.transportContext?.logger?.debug(`Polling Supergraph`); + this.opts?.transportContext?.log.debug(`Polling Supergraph`); this.polling$ = handleMaybePromise( () => this.getAndSetUnifiedGraph(), () => { this.polling$ = undefined; }, (err) => { - this.opts.transportContext?.logger?.error( - 'Failed to poll Supergraph', + this.opts.transportContext?.log.error( err, + 'Failed to poll Supergraph', ); this.polling$ = undefined; }, @@ -187,19 +186,21 @@ export class UnifiedGraphManager implements AsyncDisposable { } if (!this.unifiedGraph) { if (!this.initialUnifiedGraph$) { - this.opts?.transportContext?.logger?.debug( + this.opts?.transportContext?.log.debug( 'Fetching the initial Supergraph', ); if (this.opts.transportContext?.cache) { - this.opts.transportContext?.logger?.debug( - `Searching for Supergraph in cache under key "${UNIFIEDGRAPH_CACHE_KEY}"...`, + this.opts.transportContext?.log.debug( + { key: UNIFIEDGRAPH_CACHE_KEY }, + 'Searching for Supergraph in cache...', ); this.initialUnifiedGraph$ = handleMaybePromise( () => this.opts.transportContext?.cache?.get(UNIFIEDGRAPH_CACHE_KEY), (cachedUnifiedGraph) => { if (cachedUnifiedGraph) { - this.opts.transportContext?.logger?.debug( + this.opts.transportContext?.log.debug( + { key: UNIFIEDGRAPH_CACHE_KEY }, 'Found Supergraph in cache', ); return this.handleLoadedUnifiedGraph(cachedUnifiedGraph, true); @@ -217,7 +218,8 @@ export class UnifiedGraphManager implements AsyncDisposable { () => this.initialUnifiedGraph$!, (v) => { this.initialUnifiedGraph$ = undefined; - this.opts.transportContext?.logger?.debug( + this.opts.transportContext?.log.debug( + { key: UNIFIEDGRAPH_CACHE_KEY }, 'Initial Supergraph fetched', ); return v; @@ -240,7 +242,7 @@ export class UnifiedGraphManager implements AsyncDisposable { this.lastLoadedUnifiedGraph != null && compareSchemas(loadedUnifiedGraph, this.lastLoadedUnifiedGraph) ) { - this.opts.transportContext?.logger?.debug( + this.opts.transportContext?.log.debug( 'Supergraph has not been changed, skipping...', ); this.lastLoadTime = Date.now(); @@ -267,17 +269,18 @@ export class UnifiedGraphManager implements AsyncDisposable { // 60 seconds making sure the unifiedgraph is not kept forever // NOTE: we default to 60s because Cloudflare KV TTL does not accept anything less 60; - this.opts.transportContext.logger?.debug( - `Caching Supergraph with TTL ${ttl}s`, + this.opts.transportContext?.log.debug( + { ttl, key: UNIFIEDGRAPH_CACHE_KEY }, + 'Caching Supergraph', ); - const logCacheSetError = (e: unknown) => { - this.opts.transportContext?.logger?.debug( - `Unable to store Supergraph in cache under key "${UNIFIEDGRAPH_CACHE_KEY}" with TTL ${ttl}s`, - e, + const logCacheSetError = (err: unknown) => { + this.opts.transportContext?.log.debug( + { err, ttl, key: UNIFIEDGRAPH_CACHE_KEY }, + 'Unable to cache Supergraph', ); }; try { - const cacheSet$ = this.opts.transportContext.cache.set( + const cacheSet$ = this.opts.transportContext?.cache.set( UNIFIEDGRAPH_CACHE_KEY, serializedUnifiedGraph, { ttl }, @@ -289,10 +292,10 @@ export class UnifiedGraphManager implements AsyncDisposable { } catch (e) { logCacheSetError(e); } - } catch (e) { - this.opts.transportContext.logger?.error( + } catch (err: any) { + this.opts.transportContext?.log.error( + err, 'Failed to initiate caching of Supergraph', - e, ); } } @@ -318,7 +321,7 @@ export class UnifiedGraphManager implements AsyncDisposable { onDelegationPlanHooks: this.onDelegationPlanHooks, onDelegationStageExecuteHooks: this.onDelegationStageExecuteHooks, onDelegateHooks: this.opts.onDelegateHooks, - logger: this.opts.transportContext?.logger, + log: this.opts.transportContext?.log, }); const transportExecutorStack = new AsyncDisposableStack(); const onSubgraphExecute = getOnSubgraphExecute({ @@ -360,7 +363,7 @@ export class UnifiedGraphManager implements AsyncDisposable { }, }, ); - this.opts.transportContext?.logger?.debug( + this.opts.transportContext?.log.debug( 'Supergraph has been changed, updating...', ); } @@ -372,9 +375,9 @@ export class UnifiedGraphManager implements AsyncDisposable { }, (err) => { this.disposeReason = undefined; - this.opts.transportContext?.logger?.error( - 'Failed to dispose the existing transports and executors', + this.opts.transportContext?.log.error( err, + 'Failed to dispose the existing transports and executors', ); return this.unifiedGraph!; }, @@ -392,14 +395,11 @@ export class UnifiedGraphManager implements AsyncDisposable { private getAndSetUnifiedGraph(): MaybePromise { return handleMaybePromise( - () => this.opts.getUnifiedGraph(this.opts.transportContext || {}), + () => this.opts.getUnifiedGraph(this.opts.transportContext), (loadedUnifiedGraph: string | GraphQLSchema | DocumentNode) => this.handleLoadedUnifiedGraph(loadedUnifiedGraph), (err) => { - this.opts.transportContext?.logger?.error( - 'Failed to load Supergraph', - err, - ); + this.opts.transportContext?.log.error(err, 'Failed to load Supergraph'); this.lastLoadTime = Date.now(); this.disposeReason = undefined; this.polling$ = undefined; diff --git a/packages/fusion-runtime/src/utils.ts b/packages/fusion-runtime/src/utils.ts index c43645cae..73fc867ce 100644 --- a/packages/fusion-runtime/src/utils.ts +++ b/packages/fusion-runtime/src/utils.ts @@ -1,4 +1,6 @@ import { getInstrumented } from '@envelop/instrumentation'; +import { LegacyLogger, Logger } from '@graphql-hive/logger'; +import { loggerForRequest } from '@graphql-hive/logger/request'; import { defaultPrintFn, type Transport, @@ -7,13 +9,7 @@ import { type TransportGetSubgraphExecutor, type TransportGetSubgraphExecutorOptions, } from '@graphql-mesh/transport-common'; -import type { Logger } from '@graphql-mesh/types'; -import { - isDisposable, - iterateAsync, - loggerForExecutionRequest, - requestIdByRequest, -} from '@graphql-mesh/utils'; +import { isDisposable, iterateAsync } from '@graphql-mesh/utils'; import { getBatchingExecutor } from '@graphql-tools/batch-execute'; import { DelegationPlanBuilder, @@ -112,22 +108,15 @@ function getTransportExecutor({ transports = defaultTransportsGetter, getDisposeReason, }: { - transportContext: TransportContext; + transportContext: TransportContext | undefined; transportEntry: TransportEntry; subgraphName?: string; subgraph: GraphQLSchema; transports?: Transports; getDisposeReason?: () => GraphQLError | undefined; }): MaybePromise { - // TODO const kind = transportEntry?.kind || ''; - let logger = transportContext?.logger; - if (logger) { - if (subgraphName) { - logger = logger.child({ subgraph: subgraphName }); - } - logger?.debug(`Loading transport "${kind}"`); - } + transportContext?.log.debug(`Loading transport "${kind}"`); return handleMaybePromise( () => typeof transports === 'function' ? transports(kind) : transports[kind], @@ -154,6 +143,11 @@ function getTransportExecutor({ `Transport "${kind}" "getSubgraphExecutor" is not a function`, ); } + const log = + transportContext?.log || + // if the logger is not provided by the context, create a new silent one just for consistency in the hooks + new Logger({ level: false }); + const logger = transportContext?.logger || LegacyLogger.from(log); return getSubgraphExecutor({ subgraphName, subgraph, @@ -170,6 +164,8 @@ function getTransportExecutor({ }, getDisposeReason, ...transportContext, + log, + logger, }); }, ); @@ -186,7 +182,7 @@ export const subgraphNameByExecutionRequest = new WeakMap< */ export function getOnSubgraphExecute({ onSubgraphExecuteHooks, - transportContext = {}, + transportContext, transportEntryMap, getSubgraphSchema, transportExecutorStack, @@ -214,18 +210,19 @@ export function getOnSubgraphExecute({ let executor: Executor | undefined = subgraphExecutorMap.get(subgraphName); // If the executor is not initialized yet, initialize it if (executor == null) { - let logger = transportContext?.logger; - if (logger) { - const requestId = requestIdByRequest.get( - executionRequest.context?.request, - ); - if (requestId) { - logger = logger.child({ requestId }); - } + if (transportContext) { + let log = executionRequest.context?.request + ? loggerForRequest( + transportContext.log, + executionRequest.context.request, + ) + : transportContext.log; if (subgraphName) { - logger = logger.child({ subgraph: subgraphName }); + log = log.child({ subgraph: subgraphName }); } - logger.debug(`Initializing executor`); + // overwrite the log in the transport context because now it contains more details + transportContext.log = log; + log.debug('Initializing executor'); } // Lazy executor that loads transport executor on demand executor = function lazyExecutor(subgraphExecReq: ExecutionRequest) { @@ -312,23 +309,14 @@ export function wrapExecutorWithHooks({ baseExecutionRequest.info = baseExecutionRequest.info || ({} as GraphQLResolveInfo); baseExecutionRequest.info.executionRequest = baseExecutionRequest; - // TODO: Fix this in onFetch hook handler of @graphql-mesh/utils + // this rootValue will be set in the info value for field.resolvers in non-graphql requests // TODO: Also consider if a subgraph can ever rely on the gateway's rootValue? baseExecutionRequest.rootValue = { executionRequest: baseExecutionRequest, }; - - const requestId = - baseExecutionRequest.context?.request && - requestIdByRequest.get(baseExecutionRequest.context.request); - let execReqLogger = transportContext?.logger; - if (execReqLogger) { - if (requestId) { - execReqLogger = execReqLogger.child({ requestId }); - } - loggerForExecutionRequest.set(baseExecutionRequest, execReqLogger); - } - execReqLogger = execReqLogger?.child?.({ subgraph: subgraphName }); + const log = + transportContext?.log.child({ subgraph: subgraphName }) || + new Logger({ attrs: { subgraph: subgraphName } }); if (onSubgraphExecuteHooks.length === 0) { return baseExecutor(baseExecutionRequest); } @@ -354,11 +342,10 @@ export function wrapExecutorWithHooks({ }, executor, setExecutor(newExecutor) { - execReqLogger?.debug('executor has been updated'); + log.debug('executor has been updated'); executor = newExecutor; }, - requestId, - logger: execReqLogger, + log: log, }), onSubgraphExecuteDoneHooks, ), @@ -378,10 +365,7 @@ export function wrapExecutorWithHooks({ onSubgraphExecuteDoneHook({ result: currentResult, setResult(newResult: ExecutionResult) { - execReqLogger?.debug( - 'overriding result with: ', - newResult, - ); + log.debug('overriding result with: ', newResult); currentResult = newResult; }, }), @@ -421,10 +405,7 @@ export function wrapExecutorWithHooks({ onNext({ result: currentResult, setResult: (res) => { - execReqLogger?.debug( - 'overriding result with: ', - res, - ); + log.debug('overriding result with: ', res); currentResult = res; }, @@ -473,8 +454,7 @@ export interface OnSubgraphExecutePayload { setExecutionRequest(executionRequest: ExecutionRequest): void; executor: Executor; setExecutor(executor: Executor): void; - requestId?: string; - logger?: Logger; + log: Logger; } export interface OnSubgraphExecuteDonePayload { @@ -515,8 +495,7 @@ export interface OnDelegationPlanHookPayload { fragments: Record; fieldNodes: SelectionNode[]; context: TContext; - requestId?: string; - logger?: Logger; + log: Logger; info?: GraphQLResolveInfo; delegationPlanBuilder: DelegationPlanBuilder; setDelegationPlanBuilder(delegationPlanBuilder: DelegationPlanBuilder): void; @@ -552,8 +531,7 @@ export interface OnDelegationStageExecutePayload { typeName: string; - requestId?: string; - logger?: Logger; + log: Logger; } export type OnDelegationStageExecuteDoneHook = ( @@ -600,19 +578,11 @@ export function wrapMergedTypeResolver>( originalResolver: MergedTypeResolver, typeName: string, onDelegationStageExecuteHooks: OnDelegationStageExecuteHook[], - baseLogger?: Logger, + log: Logger, ): MergedTypeResolver { return (object, context, info, subschema, selectionSet, key, type) => { - let logger = baseLogger; - let requestId: string | undefined; - if (logger && context['request']) { - requestId = requestIdByRequest.get(context['request']); - if (requestId) { - logger = logger.child({ requestId }); - } - } if (subschema.name) { - logger = logger?.child({ subgraph: subschema.name }); + log = log.child({ subgraph: subschema.name }); } let resolver = originalResolver as MergedTypeResolver; function setResolver(newResolver: MergedTypeResolver) { @@ -631,8 +601,7 @@ export function wrapMergedTypeResolver>( key, typeName, type, - requestId, - logger, + log, resolver, setResolver, }); diff --git a/packages/fusion-runtime/tests/polling.test.ts b/packages/fusion-runtime/tests/polling.test.ts index b8e9829ea..cb7f7ab43 100644 --- a/packages/fusion-runtime/tests/polling.test.ts +++ b/packages/fusion-runtime/tests/polling.test.ts @@ -1,4 +1,5 @@ import { setTimeout } from 'timers/promises'; +import { LegacyLogger, Logger } from '@graphql-hive/logger'; import { getUnifiedGraphGracefully } from '@graphql-mesh/fusion-composition'; import { getExecutorForUnifiedGraph } from '@graphql-mesh/fusion-runtime'; import { @@ -21,7 +22,6 @@ import { import { ExecutionResult, GraphQLSchema, parse } from 'graphql'; import { createSchema } from 'graphql-yoga'; import { describe, expect, it, vi } from 'vitest'; -import { getDefaultLogger } from '../../runtime/src/getDefaultLogger'; import { UnifiedGraphManager } from '../src/unifiedGraphManager'; describe('Polling', () => { @@ -374,20 +374,18 @@ describe('Polling', () => { const unifiedGraphFetcher = vi.fn(() => { return graphDeferred ? graphDeferred.promise : unifiedGraph; }); - const logger = getDefaultLogger(); + const log = new Logger(); await using executor = getExecutorForUnifiedGraph({ getUnifiedGraph: unifiedGraphFetcher, pollingInterval: 10_000, - transportContext: { - logger, - }, + transportContext: { log, logger: LegacyLogger.from(log) }, transports() { - logger.debug('transports'); + log.debug('transports'); return { getSubgraphExecutor() { - logger.debug('getSubgraphExecutor'); + log.debug('getSubgraphExecutor'); return function dynamicExecutor(...args) { - logger.debug('dynamicExecutor'); + log.debug('dynamicExecutor'); return createDefaultExecutor(schema)(...args); }; }, diff --git a/packages/fusion-runtime/tests/runtime.test.ts b/packages/fusion-runtime/tests/runtime.test.ts index ab2171a66..0224582b2 100644 --- a/packages/fusion-runtime/tests/runtime.test.ts +++ b/packages/fusion-runtime/tests/runtime.test.ts @@ -1,4 +1,5 @@ import { buildSubgraphSchema } from '@apollo/subgraph'; +import { Logger } from '@graphql-hive/logger'; import { OnDelegationPlanDoneHook, OnDelegationPlanHook, @@ -264,7 +265,7 @@ describe('onDelegationPlanHook', () => { context, delegationPlanBuilder: expect.any(Function), setDelegationPlanBuilder: expect.any(Function), - logger: undefined, + log: expect.any(Logger), info: expect.any(Object), }); expect( diff --git a/packages/fusion-runtime/tests/utils.ts b/packages/fusion-runtime/tests/utils.ts index c723bf360..36eed7d76 100644 --- a/packages/fusion-runtime/tests/utils.ts +++ b/packages/fusion-runtime/tests/utils.ts @@ -1,3 +1,4 @@ +import { LegacyLogger, Logger } from '@graphql-hive/logger'; import { getUnifiedGraphGracefully, type SubgraphConfig, @@ -44,8 +45,13 @@ export function composeAndGetExecutor( subgraphs: SubgraphConfig[], opts?: Partial>, ) { + const log = new Logger({ level: false }); const manager = new UnifiedGraphManager({ getUnifiedGraph: () => getUnifiedGraphGracefully(subgraphs), + transportContext: { + log, + logger: LegacyLogger.from(log), + }, transports() { return { getSubgraphExecutor({ subgraphName }) { diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 6f6d4638c..a0d4b3d0a 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -55,6 +55,7 @@ "@escape.tech/graphql-armor-max-tokens": "^2.5.0", "@graphql-hive/gateway-runtime": "workspace:^", "@graphql-hive/importer": "workspace:^", + "@graphql-hive/logger": "workspace:^", "@graphql-hive/plugin-aws-sigv4": "workspace:^", "@graphql-hive/plugin-deduplicate-request": "workspace:^", "@graphql-hive/pubsub": "workspace:^", diff --git a/packages/gateway/src/bin.ts b/packages/gateway/src/bin.ts index 5fce1be5e..42edd5dc7 100644 --- a/packages/gateway/src/bin.ts +++ b/packages/gateway/src/bin.ts @@ -3,7 +3,7 @@ import 'dotenv/config'; // inject dotenv options to process.env import module from 'node:module'; import type { InitializeData } from '@graphql-hive/importer/hooks'; -import { getDefaultLogger } from '../../runtime/src/getDefaultLogger'; +import { Logger } from '@graphql-hive/logger'; import { enableModuleCachingIfPossible, handleNodeWarnings, run } from './cli'; // @inject-version globalThis.__VERSION__ here @@ -20,7 +20,7 @@ module.register('@graphql-hive/importer/hooks', { enableModuleCachingIfPossible(); handleNodeWarnings(); -const log = getDefaultLogger(); +const log = new Logger(); run({ log }).catch((err) => { log.error(err); diff --git a/packages/gateway/src/cli.ts b/packages/gateway/src/cli.ts index 45e8f1b88..2c9e4258b 100644 --- a/packages/gateway/src/cli.ts +++ b/packages/gateway/src/cli.ts @@ -15,16 +15,16 @@ import { type GatewayGraphOSReportingOptions, type GatewayHiveReportingOptions, } from '@graphql-hive/gateway-runtime'; +import { Logger } from '@graphql-hive/logger'; import type { AWSSignv4PluginOptions } from '@graphql-hive/plugin-aws-sigv4'; import { HivePubSub } from '@graphql-hive/pubsub'; import type UpstashRedisCache from '@graphql-mesh/cache-upstash-redis'; import type { JWTAuthPluginOptions } from '@graphql-mesh/plugin-jwt-auth'; import type { OpenTelemetryMeshPluginOptions } from '@graphql-mesh/plugin-opentelemetry'; import type { PrometheusPluginOptions } from '@graphql-mesh/plugin-prometheus'; -import type { KeyValueCache, Logger, YamlConfig } from '@graphql-mesh/types'; +import type { KeyValueCache, YamlConfig } from '@graphql-mesh/types'; import { renderGraphiQL } from '@graphql-yoga/render-graphiql'; import parseDuration from 'parse-duration'; -import { getDefaultLogger } from '../../runtime/src/getDefaultLogger'; import { addCommands } from './commands/index'; import { createDefaultConfigPaths } from './config'; import { getMaxConcurrency } from './getMaxConcurrency'; @@ -105,7 +105,7 @@ export interface GatewayCLIProxyConfig } export type KeyValueCacheFactoryFn = (ctx: { - logger: Logger; + log: Logger; pubsub: HivePubSub; cwd: string; }) => KeyValueCache; @@ -400,7 +400,7 @@ let cli = new Command() export async function run(userCtx: Partial) { const ctx: CLIContext = { - log: userCtx.log || getDefaultLogger(), + log: userCtx.log || new Logger(), productName: 'Hive Gateway', productDescription: 'Federated GraphQL Gateway', productPackageName: '@graphql-hive/gateway', diff --git a/packages/gateway/src/commands/handleFork.ts b/packages/gateway/src/commands/handleFork.ts index c093a90f8..a5c56091b 100644 --- a/packages/gateway/src/commands/handleFork.ts +++ b/packages/gateway/src/commands/handleFork.ts @@ -1,5 +1,5 @@ import cluster, { type Worker } from 'node:cluster'; -import type { Logger } from '@graphql-mesh/types'; +import type { Logger } from '@graphql-hive/logger'; import { registerTerminateHandler } from '@graphql-mesh/utils'; /** @@ -22,25 +22,23 @@ export function handleFork(log: Logger, config: { fork?: number }): boolean { logData['code'] = code; } if (expectedToExit) { - workerLogger.debug('exited', logData); + workerLogger.debug(logData, 'exited'); } else { workerLogger.error( - 'exited unexpectedly. A restart is recommended to ensure the stability of the service', logData, + 'Exited unexpectedly. A restart is recommended to ensure the stability of the service', ); } workers.delete(worker); if (!expectedToExit && workers.size === 0) { - log.error(`All workers exited unexpectedly. Exiting`, logData); + log.error(logData, 'All workers exited unexpectedly. Exiting...'); process.exit(1); } }); workers.add(worker); } registerTerminateHandler((signal) => { - log.info('Killing workers', { - signal, - }); + log.info(`Killing workers on ${signal}`); expectedToExit = true; workers.forEach((w) => { w.kill(signal); @@ -49,7 +47,11 @@ export function handleFork(log: Logger, config: { fork?: number }): boolean { return true; } } catch (e) { - log.error(`Error while forking workers: `, e); + log.error( + // @ts-expect-error very likely an instanceof error + e, + 'Error while forking workers', + ); } return false; } diff --git a/packages/gateway/src/commands/handleLoggingOption.ts b/packages/gateway/src/commands/handleLoggingOption.ts deleted file mode 100644 index 4b9c213b6..000000000 --- a/packages/gateway/src/commands/handleLoggingOption.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { - handleLoggingConfig as handleLoggingConfigRuntime, - LogLevel, -} from '@graphql-hive/gateway-runtime'; -import { Logger } from '@graphql-mesh/types'; -import { CLIContext } from '..'; - -export function handleLoggingConfig( - loggingConfig: - | boolean - | Logger - | LogLevel - | keyof typeof LogLevel - | undefined, - ctx: CLIContext, -) { - ctx.log = handleLoggingConfigRuntime(loggingConfig, ctx.log); -} diff --git a/packages/gateway/src/commands/handleReportingConfig.ts b/packages/gateway/src/commands/handleReportingConfig.ts index f6bea3354..3434d5da3 100644 --- a/packages/gateway/src/commands/handleReportingConfig.ts +++ b/packages/gateway/src/commands/handleReportingConfig.ts @@ -37,28 +37,28 @@ export function handleReportingConfig( if (cliOpts.hiveRegistryToken && cliOpts.hiveUsageAccessToken) { ctx.log.error( - `Cannot use "--hive-registry-token" with "--hive-usage-access-token". Please use "--hive-usage-target" and "--hive-usage-access-token" or the config instead.`, + 'Cannot use "--hive-registry-token" with "--hive-usage-access-token". Please use "--hive-usage-target" and "--hive-usage-access-token" or the config instead.', ); process.exit(1); } if (cliOpts.hiveRegistryToken && opts.hiveUsageTarget) { ctx.log.error( - `Cannot use "--hive-registry-token" with a target. Please use "--hive-usage-target" and "--hive-usage-access-token" or the config instead.`, + 'Cannot use "--hive-registry-token" with a target. Please use "--hive-usage-target" and "--hive-usage-access-token" or the config instead.', ); process.exit(1); } if (opts.hiveUsageTarget && !opts.hiveUsageAccessToken) { ctx.log.error( - `Hive usage target needs an access token. Please provide it through the "--hive-usage-access-token " option or the config.`, + 'Hive usage target needs an access token. Please provide it through the "--hive-usage-access-token " option or the config.', ); process.exit(1); } if (opts.hiveUsageAccessToken && !opts.hiveUsageTarget) { ctx.log.error( - `Hive usage access token needs a target. Please provide it through the "--hive-usage-target " option or the config.`, + 'Hive usage access token needs a target. Please provide it through the "--hive-usage-target " option or the config.', ); process.exit(1); } @@ -68,9 +68,9 @@ export function handleReportingConfig( if (hiveUsageAccessToken) { // different logs w and w/o the target to disambiguate if (opts.hiveUsageTarget) { - ctx.log.info(`Configuring Hive usage reporting`); + ctx.log.info('Configuring Hive usage reporting'); } else { - ctx.log.info(`Configuring Hive registry reporting`); + ctx.log.info('Configuring Hive registry reporting'); } return { ...loadedConfig.reporting, @@ -81,7 +81,7 @@ export function handleReportingConfig( } if (opts.apolloKey) { - ctx.log.info(`Configuring Apollo GraphOS registry reporting`); + ctx.log.info('Configuring Apollo GraphOS registry reporting'); if (!opts.apolloGraphRef?.includes('@')) { ctx.log.error( `Apollo GraphOS requires a graph ref in the format @. Please provide a valid graph ref ${opts.apolloGraphRef ? `not ${opts.apolloGraphRef}` : ''}.`, diff --git a/packages/gateway/src/commands/proxy.ts b/packages/gateway/src/commands/proxy.ts index 14bf10688..781308617 100644 --- a/packages/gateway/src/commands/proxy.ts +++ b/packages/gateway/src/commands/proxy.ts @@ -1,6 +1,7 @@ import cluster from 'node:cluster'; import { createGatewayRuntime, + createLoggerFromLogging, type GatewayConfigProxy, } from '@graphql-hive/gateway-runtime'; import { PubSub } from '@graphql-hive/pubsub'; @@ -18,7 +19,6 @@ import { } from '../config'; import { startServerForRuntime } from '../servers/startServerForRuntime'; import { handleFork } from './handleFork'; -import { handleLoggingConfig } from './handleLoggingOption'; import { handleReportingConfig } from './handleReportingConfig'; export const addCommand: AddCommand = (ctx, cli) => @@ -44,6 +44,9 @@ export const addCommand: AddCommand = (ctx, cli) => hivePersistedDocumentsToken, ...opts } = this.optsWithGlobals(); + + ctx.log.info(`Starting ${ctx.productName} ${ctx.version} in proxy mode`); + const loadedConfig = await loadConfig({ log: ctx.log, configPath: opts.configPath, @@ -69,11 +72,10 @@ export const addCommand: AddCommand = (ctx, cli) => const hiveCdnEndpointOpt = // TODO: take schema from optsWithGlobals once https://github.com/commander-js/extra-typings/pull/76 is merged this.opts().schema || hiveCdnEndpoint; - const hiveCdnLogger = ctx.log.child({ source: 'Hive CDN' }); if (hiveCdnEndpointOpt) { if (hiveCdnKey) { if (!isUrl(hiveCdnEndpointOpt)) { - hiveCdnLogger.error( + ctx.log.error( 'Endpoint must be a URL when providing --hive-cdn-key but got ' + hiveCdnEndpointOpt, ); @@ -115,11 +117,11 @@ export const addCommand: AddCommand = (ctx, cli) => const pubsub = loadedConfig.pubsub || new PubSub(); const cwd = loadedConfig.cwd || process.cwd(); if (loadedConfig.logging != null) { - handleLoggingConfig(loadedConfig.logging, ctx); + ctx.log = createLoggerFromLogging(loadedConfig.logging); } const cache = await getCacheInstanceFromConfig(loadedConfig, { pubsub, - logger: ctx.log, + log: ctx.log, cwd, }); const builtinPlugins = await getBuiltinPluginsFromConfig( @@ -128,7 +130,7 @@ export const addCommand: AddCommand = (ctx, cli) => ...opts, }, { - logger: ctx.log, + log: ctx.log, cache, pubsub, cwd, diff --git a/packages/gateway/src/commands/subgraph.ts b/packages/gateway/src/commands/subgraph.ts index 64b5cdf1c..b76b82e50 100644 --- a/packages/gateway/src/commands/subgraph.ts +++ b/packages/gateway/src/commands/subgraph.ts @@ -3,6 +3,7 @@ import { lstat } from 'node:fs/promises'; import { isAbsolute, resolve } from 'node:path'; import { createGatewayRuntime, + createLoggerFromLogging, type GatewayConfigSubgraph, type UnifiedGraphConfig, } from '@graphql-hive/gateway-runtime'; @@ -22,7 +23,6 @@ import { } from '../config'; import { startServerForRuntime } from '../servers/startServerForRuntime'; import { handleFork } from './handleFork'; -import { handleLoggingConfig } from './handleLoggingOption'; import { handleReportingConfig } from './handleReportingConfig'; export const addCommand: AddCommand = (ctx, cli) => @@ -45,6 +45,9 @@ export const addCommand: AddCommand = (ctx, cli) => hivePersistedDocumentsToken, ...opts } = this.optsWithGlobals(); + + ctx.log.info(`Starting ${ctx.productName} ${ctx.version} as subgraph`); + const loadedConfig = await loadConfig({ log: ctx.log, configPath: opts.configPath, @@ -75,11 +78,11 @@ export const addCommand: AddCommand = (ctx, cli) => const pubsub = loadedConfig.pubsub || new PubSub(); const cwd = loadedConfig.cwd || process.cwd(); if (loadedConfig.logging != null) { - handleLoggingConfig(loadedConfig.logging, ctx); + ctx.log = createLoggerFromLogging(loadedConfig.logging); } const cache = await getCacheInstanceFromConfig(loadedConfig, { pubsub, - logger: ctx.log, + log: ctx.log, cwd, }); const builtinPlugins = await getBuiltinPluginsFromConfig( @@ -88,7 +91,7 @@ export const addCommand: AddCommand = (ctx, cli) => ...opts, }, { - logger: ctx.log, + log: ctx.log, cache, pubsub, cwd, diff --git a/packages/gateway/src/commands/supergraph.ts b/packages/gateway/src/commands/supergraph.ts index 6c17f1364..be111668b 100644 --- a/packages/gateway/src/commands/supergraph.ts +++ b/packages/gateway/src/commands/supergraph.ts @@ -4,6 +4,7 @@ import { isAbsolute, resolve } from 'node:path'; import { Option } from '@commander-js/extra-typings'; import { createGatewayRuntime, + createLoggerFromLogging, type GatewayConfigSupergraph, type GatewayGraphOSManagedFederationOptions, type GatewayHiveCDNOptions, @@ -28,7 +29,6 @@ import { } from '../config'; import { startServerForRuntime } from '../servers/startServerForRuntime'; import { handleFork } from './handleFork'; -import { handleLoggingConfig } from './handleLoggingOption'; import { handleReportingConfig } from './handleReportingConfig'; export const addCommand: AddCommand = (ctx, cli) => @@ -65,6 +65,10 @@ export const addCommand: AddCommand = (ctx, cli) => // TODO: move to optsWithGlobals once https://github.com/commander-js/extra-typings/pull/76 is merged const { apolloUplink } = this.opts(); + ctx.log.info( + `Starting ${ctx.productName} ${ctx.version} with supergraph`, + ); + const loadedConfig = await loadConfig({ log: ctx.log, configPath: opts.configPath, @@ -75,15 +79,14 @@ export const addCommand: AddCommand = (ctx, cli) => let supergraph: | UnifiedGraphConfig | GatewayHiveCDNOptions - | GatewayGraphOSManagedFederationOptions = 'supergraph.graphql'; + | GatewayGraphOSManagedFederationOptions = './supergraph.graphql'; if (schemaPathOrUrl) { ctx.log.info(`Supergraph will be loaded from ${schemaPathOrUrl}`); if (hiveCdnKey) { - ctx.log.info(`Using Hive CDN key`); + ctx.log.info('Using Hive CDN key'); if (!isUrl(schemaPathOrUrl)) { ctx.log.error( - 'Hive CDN endpoint must be a URL when providing --hive-cdn-key but got ' + - schemaPathOrUrl, + `Hive CDN endpoint must be a URL when providing --hive-cdn-key but got ${schemaPathOrUrl}`, ); process.exit(1); } @@ -93,7 +96,7 @@ export const addCommand: AddCommand = (ctx, cli) => key: hiveCdnKey, }; } else if (apolloKey) { - ctx.log.info(`Using GraphOS API key`); + ctx.log.info('Using GraphOS API key'); if (!schemaPathOrUrl.includes('@')) { ctx.log.error( `Apollo GraphOS requires a graph ref in the format @ when providing --apollo-key. Please provide a valid graph ref not ${schemaPathOrUrl}.`, @@ -123,7 +126,7 @@ export const addCommand: AddCommand = (ctx, cli) => ); process.exit(1); } - ctx.log.info(`Using Hive CDN endpoint: ${hiveCdnEndpoint}`); + ctx.log.info(`Using Hive CDN endpoint ${hiveCdnEndpoint}`); supergraph = { type: 'hive', endpoint: hiveCdnEndpoint, @@ -138,11 +141,11 @@ export const addCommand: AddCommand = (ctx, cli) => } if (!apolloKey) { ctx.log.error( - `Apollo GraphOS requires an API key. Please provide an API key using the --apollo-key option.`, + 'Apollo GraphOS requires an API key. Please provide an API key using the --apollo-key option.', ); process.exit(1); } - ctx.log.info(`Using Apollo Graph Ref: ${apolloGraphRef}`); + ctx.log.info(`Using Apollo Graph Ref ${apolloGraphRef}`); supergraph = { type: 'graphos', apiKey: apolloKey, @@ -153,7 +156,7 @@ export const addCommand: AddCommand = (ctx, cli) => supergraph = loadedConfig.supergraph!; // TODO: assertion wont be necessary when exactOptionalPropertyTypes // TODO: how to provide hive-cdn-key? } else { - ctx.log.info(`Using default supergraph location: ${supergraph}`); + ctx.log.info(`Using default supergraph location "${supergraph}"`); } const registryConfig: Pick = {}; @@ -171,11 +174,11 @@ export const addCommand: AddCommand = (ctx, cli) => const pubsub = loadedConfig.pubsub || new PubSub(); const cwd = loadedConfig.cwd || process.cwd(); if (loadedConfig.logging != null) { - handleLoggingConfig(loadedConfig.logging, ctx); + ctx.log = createLoggerFromLogging(loadedConfig.logging); } const cache = await getCacheInstanceFromConfig(loadedConfig, { pubsub, - logger: ctx.log, + log: ctx.log, cwd, }); const builtinPlugins = await getBuiltinPluginsFromConfig( @@ -184,7 +187,7 @@ export const addCommand: AddCommand = (ctx, cli) => ...opts, }, { - logger: ctx.log, + log: ctx.log, cache, pubsub, cwd, @@ -224,7 +227,7 @@ export const addCommand: AddCommand = (ctx, cli) => loadedConfig.persistedDocuments.token); if (!token) { ctx.log.error( - `Hive persisted documents needs a CDN token. Please provide it through the "--hive-persisted-documents-token " option or the config.`, + 'Hive persisted documents needs a CDN token. Please provide it through the "--hive-persisted-documents-token " option or the config.', ); process.exit(1); } @@ -270,12 +273,13 @@ export async function runSupergraph( absSchemaPath = isAbsolute(supergraphPath) ? String(supergraphPath) : resolve(process.cwd(), supergraphPath); - log.info(`Reading supergraph from ${absSchemaPath}`); + log.info({ path: absSchemaPath }, 'Reading supergraph'); try { await lstat(absSchemaPath); - } catch { + } catch (err) { log.error( - `Could not read supergraph from ${absSchemaPath}. Make sure the file exists.`, + { path: absSchemaPath, err }, + 'Could not read supergraph. Make sure the file exists.', ); process.exit(1); } @@ -285,11 +289,14 @@ export async function runSupergraph( // Polling should not be enabled when watching the file delete config.pollingInterval; if (cluster.isPrimary) { - log.info(`Watching ${absSchemaPath} for changes`); + log.info({ path: absSchemaPath }, 'Watching supergraph for changes'); const ctrl = new AbortController(); registerTerminateHandler((signal) => { - log.info(`Closing watcher for ${absSchemaPath} on ${signal}`); + log.info( + { path: absSchemaPath }, + `Closing watcher for supergraph on ${signal}`, + ); return ctrl.abort(`Process terminated on ${signal}`); }); @@ -301,7 +308,10 @@ export async function runSupergraph( // TODO: or should we just ignore? throw new Error(`Supergraph file was renamed to "${f.filename}"`); } - log.info(`${absSchemaPath} changed. Invalidating supergraph...`); + log.info( + { path: absSchemaPath }, + 'Supergraph changed. Invalidating...', + ); if (config.fork && config.fork > 1) { for (const workerId in cluster.workers) { cluster.workers[workerId]!.send('invalidateUnifiedGraph'); @@ -314,10 +324,16 @@ export async function runSupergraph( })() .catch((e) => { if (e.name === 'AbortError') return; - log.error(`Watcher for ${absSchemaPath} closed with an error`, e); + log.error( + { path: absSchemaPath, err: e }, + 'Supergraph watcher closed with an error', + ); }) .then(() => { - log.info(`Watcher for ${absSchemaPath} successfuly closed`); + log.info( + { path: absSchemaPath }, + 'Supergraph watcher successfuly closed', + ); }); } } @@ -352,16 +368,17 @@ export async function runSupergraph( const runtime = createGatewayRuntime(config); if (absSchemaPath) { - log.info(`Serving local supergraph from ${absSchemaPath}`); + log.info({ path: absSchemaPath }, 'Serving local supergraph'); } else if (isUrl(String(config.supergraph))) { - log.info(`Serving remote supergraph from ${config.supergraph}`); + log.info({ url: config.supergraph }, 'Serving remote supergraph'); } else if ( typeof config.supergraph === 'object' && 'type' in config.supergraph && config.supergraph.type === 'hive' ) { log.info( - `Serving supergraph from Hive CDN at ${config.supergraph.endpoint}`, + { endpoint: config.supergraph.endpoint }, + 'Serving supergraph from Hive CDN', ); } else { log.info('Serving supergraph from config'); diff --git a/packages/gateway/src/config.ts b/packages/gateway/src/config.ts index 9de1b580c..fcbda7647 100644 --- a/packages/gateway/src/config.ts +++ b/packages/gateway/src/config.ts @@ -5,8 +5,9 @@ import type { GatewayConfig, GatewayPlugin, } from '@graphql-hive/gateway-runtime'; +import { LegacyLogger, type Logger } from '@graphql-hive/logger'; import { HivePubSub } from '@graphql-hive/pubsub'; -import type { KeyValueCache, Logger } from '@graphql-mesh/types'; +import type { KeyValueCache } from '@graphql-mesh/types'; import type { GatewayCLIBuiltinPluginConfig } from './cli'; import type { ServerConfig } from './servers/types'; @@ -105,7 +106,7 @@ export async function getBuiltinPluginsFromConfig( config: GatewayCLIBuiltinPluginConfig, ctx: { cache: KeyValueCache; - logger: Logger; + log: Logger; pubsub: HivePubSub; cwd: string; }, @@ -125,12 +126,7 @@ export async function getBuiltinPluginsFromConfig( const { useOpenTelemetry } = await import( '@graphql-mesh/plugin-opentelemetry' ); - plugins.push( - useOpenTelemetry({ - logger: ctx.logger, - ...config.openTelemetry, - }), - ); + plugins.push(useOpenTelemetry({ ...config.openTelemetry, log: ctx.log })); } if (config.rateLimiting) { @@ -204,7 +200,7 @@ export async function getBuiltinPluginsFromConfig( */ export async function getCacheInstanceFromConfig( config: GatewayCLIBuiltinPluginConfig, - ctx: { logger: Logger; pubsub: HivePubSub; cwd: string }, + ctx: { log: Logger; pubsub: HivePubSub; cwd: string }, ): Promise { if (typeof config.cache === 'function') { return config.cache(ctx); @@ -219,6 +215,8 @@ export async function getCacheInstanceFromConfig( return new RedisCache({ ...ctx, ...config.cache, + // TODO: use new logger + logger: LegacyLogger.from(ctx.log), }) as KeyValueCache; } case 'cfw-kv': { @@ -241,7 +239,7 @@ export async function getCacheInstanceFromConfig( } } if (config.cache.type !== 'localforage') { - ctx.logger.warn( + ctx.log.warn( 'Unknown cache type, falling back to localforage', config.cache, ); diff --git a/packages/gateway/src/index.ts b/packages/gateway/src/index.ts index 5a01d9d6d..f294a5326 100644 --- a/packages/gateway/src/index.ts +++ b/packages/gateway/src/index.ts @@ -1,6 +1,6 @@ export * from './cli'; +export * from '@graphql-hive/logger'; export * from '@graphql-hive/gateway-runtime'; -export { LogLevel, DefaultLogger } from '@graphql-mesh/utils'; export { PubSub } from '@graphql-hive/pubsub'; export * from '@graphql-mesh/plugin-jwt-auth'; export * from '@graphql-mesh/plugin-opentelemetry'; diff --git a/packages/gateway/src/servers/nodeHttp.ts b/packages/gateway/src/servers/nodeHttp.ts index ad6b7e48c..978c916cb 100644 --- a/packages/gateway/src/servers/nodeHttp.ts +++ b/packages/gateway/src/servers/nodeHttp.ts @@ -98,12 +98,12 @@ export async function startNodeHttpServer>( gwRuntime.disposableStack.defer( () => new Promise((resolve, reject) => { - log.info(`Stopping the WebSocket server`); + log.info('Stopping the WebSocket server'); wsServer.close((err) => { if (err) { return reject(err); } - log.info(`Stopped the WebSocket server successfully`); + log.info('Stopped the WebSocket server successfully'); return resolve(); }); }), @@ -117,10 +117,10 @@ export async function startNodeHttpServer>( () => new Promise((resolve) => { process.stderr.write('\n'); - log.info(`Stopping the server`); + log.info('Stopping the server'); server.closeAllConnections(); server.close(() => { - log.info(`Stopped the server successfully`); + log.info('Stopped the server successfully'); return resolve(); }); }), diff --git a/packages/gateway/src/servers/startServerForRuntime.ts b/packages/gateway/src/servers/startServerForRuntime.ts index 6cd4e14a8..0826a0851 100644 --- a/packages/gateway/src/servers/startServerForRuntime.ts +++ b/packages/gateway/src/servers/startServerForRuntime.ts @@ -20,7 +20,7 @@ export function startServerForRuntime< ): MaybePromise { process.on('message', (message) => { if (message === 'invalidateUnifiedGraph') { - log.info(`Invalidating Supergraph`); + log.info('Invalidating Supergraph'); runtime.invalidateUnifiedGraph(); } }); diff --git a/packages/gateway/src/servers/types.ts b/packages/gateway/src/servers/types.ts index e29222e46..950901a53 100644 --- a/packages/gateway/src/servers/types.ts +++ b/packages/gateway/src/servers/types.ts @@ -1,4 +1,4 @@ -import { Logger } from '@graphql-mesh/types'; +import type { Logger } from '@graphql-hive/logger'; export interface ServerConfig { /** diff --git a/packages/logger-json/CHANGELOG.md b/packages/logger-json/CHANGELOG.md deleted file mode 100644 index f20b3a230..000000000 --- a/packages/logger-json/CHANGELOG.md +++ /dev/null @@ -1,52 +0,0 @@ -# @graphql-hive/logger-json - -## 0.0.5 - -### Patch Changes - -- [#1245](https://github.com/graphql-hive/gateway/pull/1245) [`29f537f`](https://github.com/graphql-hive/gateway/commit/29f537f7dfcf17f3911efd5845d7af1e532d2e85) Thanks [@enisdenjo](https://github.com/enisdenjo)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/utils@^0.104.5` ↗︎](https://www.npmjs.com/package/@graphql-mesh/utils/v/0.104.5) (from `^0.104.2`, in `dependencies`) - -- [#1258](https://github.com/graphql-hive/gateway/pull/1258) [`3d24beb`](https://github.com/graphql-hive/gateway/commit/3d24beb7b15fd8109f86bbb3dfd514f6b8202741) Thanks [@dependabot](https://github.com/apps/dependabot)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/types@^0.104.5` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.104.5) (from `^0.104.0`, in `dependencies`) - -## 0.0.4 - -### Patch Changes - -- [#946](https://github.com/graphql-hive/gateway/pull/946) [`7d771d8`](https://github.com/graphql-hive/gateway/commit/7d771d89ff6d731b1025acfc5eb197541a6d5d35) Thanks [@ardatan](https://github.com/ardatan)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/utils@^0.104.2` ↗︎](https://www.npmjs.com/package/@graphql-mesh/utils/v/0.104.2) (from `^0.104.1`, in `dependencies`) - -## 0.0.3 - -### Patch Changes - -- [#706](https://github.com/graphql-hive/gateway/pull/706) [`e393337`](https://github.com/graphql-hive/gateway/commit/e393337ecb40beffb79748b19b5aa8f2fd9197b7) Thanks [@EmrysMyrddin](https://github.com/EmrysMyrddin)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/utils@^0.104.1` ↗︎](https://www.npmjs.com/package/@graphql-mesh/utils/v/0.104.1) (from `^0.104.0`, in `dependencies`) - -- [#775](https://github.com/graphql-hive/gateway/pull/775) [`33f7dfd`](https://github.com/graphql-hive/gateway/commit/33f7dfdb10eef2a1e7f6dffe0ce6e4bb3cc7c2c6) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/types@^0.104.0` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.104.0) (from `^0.103.18`, in `dependencies`) - - Updated dependency [`@graphql-mesh/utils@^0.104.0` ↗︎](https://www.npmjs.com/package/@graphql-mesh/utils/v/0.104.0) (from `^0.103.18`, in `dependencies`) - -## 0.0.2 - -### Patch Changes - -- [#697](https://github.com/graphql-hive/gateway/pull/697) [`6cc87c6`](https://github.com/graphql-hive/gateway/commit/6cc87c6e9aa0cbb9eff517eeec92d57b9c96d39e) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/types@^0.103.18` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.103.18) (from `^0.103.16`, in `dependencies`) - - Updated dependency [`@graphql-mesh/utils@^0.103.18` ↗︎](https://www.npmjs.com/package/@graphql-mesh/utils/v/0.103.18) (from `^0.103.16`, in `dependencies`) - -## 0.0.1 - -### Patch Changes - -- [#642](https://github.com/graphql-hive/gateway/pull/642) [`30e41a6`](https://github.com/graphql-hive/gateway/commit/30e41a6f5b97c42ae548564bce3f6e4a92b1225f) Thanks [@ardatan](https://github.com/ardatan)! - New JSON-based logger - - By default, it prints pretty still to the console unless NODE_ENV is production. - For JSON output, set the `LOG_FORMAT` environment variable to `json`. diff --git a/packages/logger-json/package.json b/packages/logger-json/package.json deleted file mode 100644 index 69713d53d..000000000 --- a/packages/logger-json/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "@graphql-hive/logger-json", - "version": "0.0.5", - "type": "module", - "repository": { - "type": "git", - "url": "git+https://github.com/graphql-hive/gateway.git", - "directory": "packages/logger-json" - }, - "author": { - "email": "contact@the-guild.dev", - "name": "The Guild", - "url": "https://the-guild.dev" - }, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - }, - "import": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - } - }, - "./package.json": "./package.json" - }, - "files": [ - "dist" - ], - "scripts": { - "build": "pkgroll --clean-dist", - "prepack": "yarn build" - }, - "peerDependencies": { - "graphql": "^15.9.0 || ^16.9.0" - }, - "dependencies": { - "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", - "cross-inspect": "^1.0.1", - "tslib": "^2.8.1" - }, - "devDependencies": { - "graphql": "^16.9.0", - "pkgroll": "2.14.3" - }, - "sideEffects": false -} diff --git a/packages/logger-json/src/index.ts b/packages/logger-json/src/index.ts deleted file mode 100644 index 712d7d7e1..000000000 --- a/packages/logger-json/src/index.ts +++ /dev/null @@ -1,185 +0,0 @@ -import { process } from '@graphql-mesh/cross-helpers'; -import type { LazyLoggerMessage, Logger } from '@graphql-mesh/types'; -import { LogLevel } from '@graphql-mesh/utils'; -import { inspect } from 'cross-inspect'; - -export interface JSONLoggerOptions { - name?: string; - meta?: Record; - level?: LogLevel; - console?: Console; -} -function truthy(val: unknown) { - return ( - val === true || - val === 1 || - ['1', 't', 'true', 'y', 'yes'].includes(String(val)) - ); -} - -declare global { - var DEBUG: string; -} - -export class JSONLogger implements Logger { - name?: string; - meta: Record; - logLevel: LogLevel; - console: Console; - constructor(opts?: JSONLoggerOptions) { - this.name = opts?.name; - this.console = opts?.console || console; - this.meta = opts?.meta || {}; - const debugStrs = [process.env['DEBUG'], globalThis.DEBUG]; - if (opts?.level != null) { - this.logLevel = opts.level; - } else { - this.logLevel = LogLevel.info; - for (const debugStr of debugStrs) { - if (debugStr) { - if (truthy(debugStr)) { - this.logLevel = LogLevel.debug; - break; - } - if (opts?.name) { - if (debugStr?.toString()?.includes(opts.name)) { - this.logLevel = LogLevel.debug; - break; - } - } - } - } - } - } - - log(...messageArgs: LazyLoggerMessage[]) { - if (this.logLevel > LogLevel.info) { - return; - } - const finalMessage = this.prepareFinalMessage('info', messageArgs); - this.console.log(finalMessage); - } - - warn(...messageArgs: LazyLoggerMessage[]) { - if (this.logLevel > LogLevel.warn) { - return; - } - const finalMessage = this.prepareFinalMessage('warn', messageArgs); - this.console.warn(finalMessage); - } - - info(...messageArgs: LazyLoggerMessage[]) { - if (this.logLevel > LogLevel.info) { - return; - } - const finalMessage = this.prepareFinalMessage('info', messageArgs); - this.console.info(finalMessage); - } - - error(...messageArgs: LazyLoggerMessage[]) { - if (this.logLevel > LogLevel.error) { - return; - } - const finalMessage = this.prepareFinalMessage('error', messageArgs); - this.console.error(finalMessage); - } - - debug(...messageArgs: LazyLoggerMessage[]) { - if (this.logLevel > LogLevel.debug) { - return; - } - const finalMessage = this.prepareFinalMessage('debug', messageArgs); - this.console.debug(finalMessage); - } - - child(nameOrMeta: string | Record) { - let newName: string | undefined; - let newMeta: Record; - if (typeof nameOrMeta === 'string') { - newName = this.name ? `${this.name}, ${nameOrMeta}` : nameOrMeta; - newMeta = this.meta; - } else if (typeof nameOrMeta === 'object') { - newName = this.name; - newMeta = { ...this.meta, ...nameOrMeta }; - } else { - throw new Error('Invalid argument type'); - } - return new JSONLogger({ - name: newName, - meta: newMeta, - level: this.logLevel, - console: this.console, - }); - } - - addPrefix(prefix: string | Record) { - if (typeof prefix === 'string') { - this.name = this.name ? `${this.name}, ${prefix}` : prefix; - } else if (typeof prefix === 'object') { - this.meta = { ...this.meta, ...prefix }; - } - return this; - } - - private prepareFinalMessage(level: string, messageArgs: LazyLoggerMessage[]) { - const flattenedMessageArgs = messageArgs - .flat(Infinity) - .flatMap((messageArg) => { - if (typeof messageArg === 'function') { - messageArg = messageArg(); - } - if (messageArg?.toJSON) { - messageArg = messageArg.toJSON(); - } - if (messageArg instanceof AggregateError) { - return messageArg.errors; - } - return messageArg; - }); - const finalMessage: Record = { - ...this.meta, - level, - time: new Date().toISOString(), - }; - if (this.name) { - finalMessage['name'] = this.name; - } - const extras: any[] = []; - for (let messageArg of flattenedMessageArgs) { - if (messageArg == null) { - continue; - } - const typeofMessageArg = typeof messageArg; - if ( - typeofMessageArg === 'string' || - typeofMessageArg === 'number' || - typeofMessageArg === 'boolean' - ) { - finalMessage['msg'] = finalMessage['msg'] - ? finalMessage['msg'] + ', ' + messageArg - : messageArg; - } else if (typeofMessageArg === 'object') { - if (messageArg instanceof Error) { - finalMessage['msg'] = finalMessage['msg'] - ? finalMessage['msg'] + ', ' + messageArg.message - : messageArg.message; - finalMessage['stack'] = messageArg.stack; - } else if ( - Object.prototype.toString.call(messageArg).startsWith('[object') - ) { - Object.assign(finalMessage, messageArg); - } else { - extras.push(messageArg); - } - } - } - if (extras.length) { - if (extras.length === 1) { - finalMessage['extras'] = inspect(extras[0]); - } else { - finalMessage['extras'] = extras.map((extra) => inspect(extra)); - } - } - return JSON.stringify(finalMessage); - } -} diff --git a/packages/logger-pino/CHANGELOG.md b/packages/logger-pino/CHANGELOG.md deleted file mode 100644 index 88ecb90e6..000000000 --- a/packages/logger-pino/CHANGELOG.md +++ /dev/null @@ -1,37 +0,0 @@ -# @graphql-hive/logger-pino - -## 1.0.2 - -### Patch Changes - -- [#1245](https://github.com/graphql-hive/gateway/pull/1245) [`29f537f`](https://github.com/graphql-hive/gateway/commit/29f537f7dfcf17f3911efd5845d7af1e532d2e85) Thanks [@enisdenjo](https://github.com/enisdenjo)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/utils@^0.104.5` ↗︎](https://www.npmjs.com/package/@graphql-mesh/utils/v/0.104.5) (from `^0.104.2`, in `dependencies`) - -- [#1258](https://github.com/graphql-hive/gateway/pull/1258) [`3d24beb`](https://github.com/graphql-hive/gateway/commit/3d24beb7b15fd8109f86bbb3dfd514f6b8202741) Thanks [@dependabot](https://github.com/apps/dependabot)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/types@^0.104.5` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.104.5) (from `^0.104.0`, in `dependencies`) - -## 1.0.1 - -### Patch Changes - -- [#1156](https://github.com/graphql-hive/gateway/pull/1156) [`fb74009`](https://github.com/graphql-hive/gateway/commit/fb740098652dba2e9107981d1f4e362143478451) Thanks [@dependabot](https://github.com/apps/dependabot)! - dependencies updates: - - - Updated dependency [`pino@^9.7.0` ↗︎](https://www.npmjs.com/package/pino/v/9.7.0) (from `^9.6.0`, in `peerDependencies`) - -## 1.0.0 - -### Major Changes - -- [#946](https://github.com/graphql-hive/gateway/pull/946) [`7d771d8`](https://github.com/graphql-hive/gateway/commit/7d771d89ff6d731b1025acfc5eb197541a6d5d35) Thanks [@ardatan](https://github.com/ardatan)! - New Pino integration (also helpful for Fastify integration); - - ```ts - import { defineConfig } from '@graphql-hive/gateway'; - import { createLoggerFromPino } from '@graphql-hive/logger-pino'; - import pino from 'pino'; - - export const gatewayConfig = defineConfig({ - logging: createLoggerFromPino(pino({ level: 'info' })), - }); - ``` diff --git a/packages/logger-pino/package.json b/packages/logger-pino/package.json deleted file mode 100644 index 8a8ec7461..000000000 --- a/packages/logger-pino/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "@graphql-hive/logger-pino", - "version": "1.0.2", - "type": "module", - "repository": { - "type": "git", - "url": "git+https://github.com/graphql-hive/gateway.git", - "directory": "packages/logger-pino" - }, - "homepage": "https://the-guild.dev/graphql/hive/docs/gateway", - "author": { - "email": "contact@the-guild.dev", - "name": "The Guild", - "url": "https://the-guild.dev" - }, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - }, - "import": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - } - }, - "./package.json": "./package.json" - }, - "files": [ - "dist" - ], - "scripts": { - "build": "pkgroll --clean-dist", - "prepack": "yarn build" - }, - "peerDependencies": { - "graphql": "^15.9.0 || ^16.9.0", - "pino": "^9.7.0" - }, - "dependencies": { - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", - "@whatwg-node/disposablestack": "^0.0.6", - "tslib": "^2.8.1" - }, - "devDependencies": { - "graphql": "16.11.0", - "pino": "^9.7.0", - "pkgroll": "2.14.3" - }, - "sideEffects": false -} diff --git a/packages/logger-pino/src/index.ts b/packages/logger-pino/src/index.ts deleted file mode 100644 index bd48c9a3a..000000000 --- a/packages/logger-pino/src/index.ts +++ /dev/null @@ -1,125 +0,0 @@ -import type { - LazyLoggerMessage, - Logger as MeshLogger, -} from '@graphql-mesh/types'; -import { LogLevel } from '@graphql-mesh/utils'; -import type pino from 'pino'; - -type PinoWithChild = pino.BaseLogger & { - child: (meta: any) => PinoWithChild; -}; - -function prepareArgs(messageArgs: LazyLoggerMessage[]): Parameters { - const flattenedMessageArgs = messageArgs - .flat(Infinity) - .flatMap((messageArg) => { - if (typeof messageArg === 'function') { - messageArg = messageArg(); - } - if (messageArg?.toJSON) { - messageArg = messageArg.toJSON(); - } - if (messageArg instanceof AggregateError) { - return messageArg.errors; - } - return messageArg; - }); - let message: string = ''; - const extras: any[] = []; - for (let messageArg of flattenedMessageArgs) { - if (messageArg == null) { - continue; - } - const typeofMessageArg = typeof messageArg; - if ( - typeofMessageArg === 'string' || - typeofMessageArg === 'number' || - typeofMessageArg === 'boolean' - ) { - message = message ? message + ', ' + messageArg : messageArg; - } else if (typeofMessageArg === 'object') { - extras.push(messageArg); - } - } - if (extras.length > 0) { - return [Object.assign({}, ...extras), message]; - } - return [message]; -} - -class PinoLoggerAdapter implements MeshLogger { - public name?: string; - constructor( - private pinoLogger: PinoWithChild, - private meta: Record = {}, - ) { - if (meta['name']) { - this.name = meta['name']; - } - } - - get level(): LogLevel { - if (this.pinoLogger.level) { - return LogLevel[this.pinoLogger.level as keyof typeof LogLevel]; - } - return LogLevel.silent; - } - - set level(level: LogLevel) { - this.pinoLogger.level = LogLevel[level]; - } - - isLevelEnabled(level: LogLevel) { - if (this.level > level) { - return false; - } - return true; - } - - log(...args: any[]) { - if (this.isLevelEnabled(LogLevel.info)) { - this.pinoLogger.info(...prepareArgs(args)); - } - } - info(...args: any[]) { - if (this.isLevelEnabled(LogLevel.info)) { - this.pinoLogger.info(...prepareArgs(args)); - } - } - warn(...args: any[]) { - if (this.isLevelEnabled(LogLevel.warn)) { - this.pinoLogger.warn(...prepareArgs(args)); - } - } - error(...args: any[]) { - if (this.isLevelEnabled(LogLevel.error)) { - this.pinoLogger.error(...prepareArgs(args)); - } - } - debug(...lazyArgs: LazyLoggerMessage[]) { - if (this.isLevelEnabled(LogLevel.debug)) { - this.pinoLogger.debug(...prepareArgs(lazyArgs)); - } - } - child(nameOrMeta: string | Record) { - if (typeof nameOrMeta === 'string') { - nameOrMeta = { - name: this.name - ? this.name.includes(nameOrMeta) - ? this.name - : `${this.name}, ${nameOrMeta}` - : nameOrMeta, - }; - } - return new PinoLoggerAdapter(this.pinoLogger.child(nameOrMeta), { - ...this.meta, - ...nameOrMeta, - }); - } -} - -export function createLoggerFromPino( - pinoLogger: PinoWithChild, -): PinoLoggerAdapter { - return new PinoLoggerAdapter(pinoLogger); -} diff --git a/packages/logger-pino/tests/pino.spec.ts b/packages/logger-pino/tests/pino.spec.ts deleted file mode 100644 index bde7486a7..000000000 --- a/packages/logger-pino/tests/pino.spec.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { hostname } from 'node:os'; -import { Writable } from 'node:stream'; -import pino from 'pino'; -import { describe, expect, it } from 'vitest'; -import { createLoggerFromPino } from '../src'; - -describe('Pino', () => { - let log = ''; - let lastCallback = () => {}; - const stream = new Writable({ - write(chunk, _encoding, callback) { - log = chunk.toString('utf-8'); - lastCallback = callback; - }, - }); - const logLevels = ['error', 'warn', 'info', 'debug'] as const; - for (const level of logLevels) { - describe(`Level: ${level}`, () => { - it('basic', async () => { - const logger = pino( - { - level, - }, - stream, - ); - const loggerAdapter = createLoggerFromPino(logger); - const testData = [ - 'Hello', - ['World'], - { foo: 'bar' }, - 42, - true, - null, - undefined, - () => 'Expensive', - ]; - loggerAdapter[level](...testData); - lastCallback(); - const logJson = JSON.parse(log); - expect(logJson).toEqual({ - level: pino.levels.values[level], - foo: 'bar', - msg: 'Hello, World, 42, true, Expensive', - pid: process.pid, - time: expect.any(Number), - hostname: hostname(), - }); - }); - it('child', async () => { - const logger = pino( - { - level, - }, - stream, - ); - const loggerAdapter = createLoggerFromPino(logger); - const testData = [ - 'Hello', - ['World'], - { foo: 'bar' }, - 42, - true, - null, - undefined, - () => 'Expensive', - ]; - const childLogger = loggerAdapter.child('child'); - childLogger[level](...testData); - lastCallback(); - const logJson = JSON.parse(log); - expect(logJson).toEqual({ - level: pino.levels.values[level], - foo: 'bar', - msg: 'Hello, World, 42, true, Expensive', - name: 'child', - pid: process.pid, - time: expect.any(Number), - hostname: hostname(), - }); - }); - it('deduplicate names', async () => { - const logger = pino( - { - level, - }, - stream, - ); - const loggerAdapter = createLoggerFromPino(logger); - const testData = [ - 'Hello', - ['World'], - { foo: 'bar' }, - 42, - true, - null, - undefined, - () => 'Expensive', - ]; - const childLogger = loggerAdapter.child('child').child('child'); - childLogger[level](...testData); - lastCallback(); - const logJson = JSON.parse(log); - expect(logJson).toEqual({ - level: pino.levels.values[level], - foo: 'bar', - msg: 'Hello, World, 42, true, Expensive', - name: 'child', - pid: process.pid, - time: expect.any(Number), - hostname: hostname(), - }); - }); - it('nested', async () => { - const logger = pino( - { - level, - }, - stream, - ); - const loggerAdapter = createLoggerFromPino(logger); - const testData = [ - 'Hello', - ['World'], - { foo: 'bar' }, - 42, - true, - null, - undefined, - () => 'Expensive', - ]; - const childLogger = loggerAdapter.child('child'); - const nestedLogger = childLogger.child('nested'); - nestedLogger[level](...testData); - lastCallback(); - const logJson = JSON.parse(log); - expect(logJson).toEqual({ - level: pino.levels.values[level], - foo: 'bar', - msg: 'Hello, World, 42, true, Expensive', - name: 'child, nested', - pid: process.pid, - time: expect.any(Number), - hostname: hostname(), - }); - }); - }); - } -}); diff --git a/packages/logger-winston/CHANGELOG.md b/packages/logger-winston/CHANGELOG.md deleted file mode 100644 index 5fe13b275..000000000 --- a/packages/logger-winston/CHANGELOG.md +++ /dev/null @@ -1,55 +0,0 @@ -# @graphql-hive/logger-winston - -## 1.0.3 - -### Patch Changes - -- [#1258](https://github.com/graphql-hive/gateway/pull/1258) [`3d24beb`](https://github.com/graphql-hive/gateway/commit/3d24beb7b15fd8109f86bbb3dfd514f6b8202741) Thanks [@dependabot](https://github.com/apps/dependabot)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/types@^0.104.5` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.104.5) (from `^0.104.0`, in `dependencies`) - -## 1.0.2 - -### Patch Changes - -- [#727](https://github.com/graphql-hive/gateway/pull/727) [`c54a080`](https://github.com/graphql-hive/gateway/commit/c54a080b8b9c477ed55dd7c23fc8fcae9139bec8) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - - - Updated dependency [`@whatwg-node/disposablestack@^0.0.6` ↗︎](https://www.npmjs.com/package/@whatwg-node/disposablestack/v/0.0.6) (from `^0.0.5`, in `dependencies`) - -- [#775](https://github.com/graphql-hive/gateway/pull/775) [`33f7dfd`](https://github.com/graphql-hive/gateway/commit/33f7dfdb10eef2a1e7f6dffe0ce6e4bb3cc7c2c6) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/types@^0.104.0` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.104.0) (from `^0.103.18`, in `dependencies`) - -## 1.0.1 - -### Patch Changes - -- [#696](https://github.com/graphql-hive/gateway/pull/696) [`a289faa`](https://github.com/graphql-hive/gateway/commit/a289faae1469eb46f1458be341d21909fe5f8f8f) Thanks [@ardatan](https://github.com/ardatan)! - dependencies updates: - - - Updated dependency [`@graphql-mesh/types@^0.103.18` ↗︎](https://www.npmjs.com/package/@graphql-mesh/types/v/0.103.18) (from `^0.103.6`, in `dependencies`) - -## 1.0.0 - -### Major Changes - -- [#622](https://github.com/graphql-hive/gateway/pull/622) [`16f9bd9`](https://github.com/graphql-hive/gateway/commit/16f9bd981d5779c585c00bf79e790c94b00326f1) Thanks [@ardatan](https://github.com/ardatan)! - **Winston Adapter** - - Now you can integrate [Winston](https://github.com/winstonjs/winston) into Hive Gateway on Node.js - - ```ts - import { defineConfig } from '@graphql-hive/gateway'; - import { createLoggerFromWinston } from '@graphql-hive/winston'; - import { createLogger, format, transports } from 'winston'; - - // Create a Winston logger - const winstonLogger = createLogger({ - level: 'info', - format: format.combine(format.timestamp(), format.json()), - transports: [new transports.Console()], - }); - - export const gatewayConfig = defineConfig({ - // Create an adapter for Winston - logging: createLoggerFromWinston(winstonLogger), - }); - ``` diff --git a/packages/logger-winston/package.json b/packages/logger-winston/package.json deleted file mode 100644 index 57d761b93..000000000 --- a/packages/logger-winston/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@graphql-hive/logger-winston", - "version": "1.0.3", - "type": "module", - "repository": { - "type": "git", - "url": "git+https://github.com/graphql-hive/gateway.git", - "directory": "packages/logger-winston" - }, - "homepage": "https://the-guild.dev/graphql/hive/docs/gateway", - "author": { - "email": "contact@the-guild.dev", - "name": "The Guild", - "url": "https://the-guild.dev" - }, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - }, - "import": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - } - }, - "./package.json": "./package.json" - }, - "files": [ - "dist" - ], - "scripts": { - "build": "pkgroll --clean-dist", - "prepack": "yarn build" - }, - "peerDependencies": { - "graphql": "^15.9.0 || ^16.9.0", - "winston": "^3.17.0" - }, - "dependencies": { - "@graphql-mesh/types": "^0.104.5", - "@whatwg-node/disposablestack": "^0.0.6", - "tslib": "^2.8.1" - }, - "devDependencies": { - "graphql": "16.11.0", - "pkgroll": "2.14.3", - "winston": "^3.17.0" - }, - "sideEffects": false -} diff --git a/packages/logger-winston/src/index.ts b/packages/logger-winston/src/index.ts deleted file mode 100644 index d050b60f0..000000000 --- a/packages/logger-winston/src/index.ts +++ /dev/null @@ -1,102 +0,0 @@ -import type { - LazyLoggerMessage, - Logger as MeshLogger, -} from '@graphql-mesh/types'; -import { DisposableSymbols } from '@whatwg-node/disposablestack'; -import type { Logger as WinstonLogger } from 'winston'; - -function prepareArgs(messageArgs: LazyLoggerMessage[]) { - const flattenedMessageArgs = messageArgs - .flat(Infinity) - .flatMap((messageArg) => { - if (typeof messageArg === 'function') { - messageArg = messageArg(); - } - if (messageArg?.toJSON) { - messageArg = messageArg.toJSON(); - } - if (messageArg instanceof AggregateError) { - return messageArg.errors; - } - return messageArg; - }); - let message: string = ''; - const extras: any[] = []; - for (let messageArg of flattenedMessageArgs) { - if (messageArg == null) { - continue; - } - const typeofMessageArg = typeof messageArg; - if ( - typeofMessageArg === 'string' || - typeofMessageArg === 'number' || - typeofMessageArg === 'boolean' - ) { - message = message ? message + ', ' + messageArg : messageArg; - } else if (typeofMessageArg === 'object') { - extras.push(messageArg); - } - } - return [message, ...extras] as const; -} - -class WinstonLoggerAdapter implements MeshLogger, Disposable { - public name?: string; - constructor( - private winstonLogger: WinstonLogger, - private meta: Record = {}, - ) { - if (meta['name']) { - this.name = meta['name']; - } - } - log(...args: any[]) { - if (this.winstonLogger.isInfoEnabled()) { - this.winstonLogger.info(...prepareArgs(args)); - } - } - info(...args: any[]) { - if (this.winstonLogger.isInfoEnabled()) { - this.winstonLogger.info(...prepareArgs(args)); - } - } - warn(...args: any[]) { - if (this.winstonLogger.isWarnEnabled()) { - this.winstonLogger.warn(...prepareArgs(args)); - } - } - error(...args: any[]) { - if (this.winstonLogger.isErrorEnabled()) { - this.winstonLogger.error(...prepareArgs(args)); - } - } - debug(...lazyArgs: LazyLoggerMessage[]) { - if (this.winstonLogger.isDebugEnabled()) { - this.winstonLogger.debug(...prepareArgs(lazyArgs)); - } - } - child(nameOrMeta: string | Record) { - if (typeof nameOrMeta === 'string') { - nameOrMeta = { - name: this.name - ? this.name.includes(nameOrMeta) - ? this.name - : `${this.name}, ${nameOrMeta}` - : nameOrMeta, - }; - } - return new WinstonLoggerAdapter(this.winstonLogger.child(nameOrMeta), { - ...this.meta, - ...nameOrMeta, - }); - } - [DisposableSymbols.dispose]() { - return this.winstonLogger.close(); - } -} - -export function createLoggerFromWinston( - winstonLogger: WinstonLogger, -): WinstonLoggerAdapter { - return new WinstonLoggerAdapter(winstonLogger); -} diff --git a/packages/logger-winston/tests/winston.spec.ts b/packages/logger-winston/tests/winston.spec.ts deleted file mode 100644 index 9b9034dad..000000000 --- a/packages/logger-winston/tests/winston.spec.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { Writable } from 'node:stream'; -import { describe, expect, it } from 'vitest'; -import * as winston from 'winston'; -import { createLoggerFromWinston } from '../src'; - -describe('Winston', () => { - let log = ''; - let lastCallback = () => {}; - const stream = new Writable({ - write(chunk, _encoding, callback) { - log = chunk.toString('utf-8'); - lastCallback = callback; - }, - }); - const logLevels = ['error', 'warn', 'info', 'debug'] as const; - for (const level of logLevels) { - describe(`Level: ${level}`, () => { - it('basic', () => { - const logger = winston.createLogger({ - level, - format: winston.format.json(), - transports: [ - new winston.transports.Stream({ - stream, - }), - ], - }); - using loggerAdapter = createLoggerFromWinston(logger); - const testData = [ - 'Hello', - ['World'], - { foo: 'bar' }, - 42, - true, - null, - undefined, - () => 'Expensive', - ]; - loggerAdapter[level](...testData); - lastCallback(); - const logJson = JSON.parse(log, (_key, value) => value); - expect(logJson).toEqual({ - level, - foo: 'bar', - message: 'Hello, World, 42, true, Expensive', - }); - }); - it('child', () => { - const logger = winston.createLogger({ - level, - format: winston.format.json(), - transports: [ - new winston.transports.Stream({ - stream, - }), - ], - }); - const loggerAdapter = createLoggerFromWinston(logger); - const testData = [ - 'Hello', - ['World'], - { foo: 'bar' }, - 42, - true, - null, - undefined, - () => 'Expensive', - ]; - const childLogger = loggerAdapter.child('child'); - childLogger[level](...testData); - lastCallback(); - const logJson = JSON.parse(log, (_key, value) => value); - expect(logJson).toEqual({ - level, - foo: 'bar', - message: 'Hello, World, 42, true, Expensive', - name: 'child', - }); - }); - it('deduplicate names', () => { - const logger = winston.createLogger({ - level, - format: winston.format.json(), - transports: [ - new winston.transports.Stream({ - stream, - }), - ], - }); - const loggerAdapter = createLoggerFromWinston(logger); - const testData = [ - 'Hello', - ['World'], - { foo: 'bar' }, - 42, - true, - null, - undefined, - () => 'Expensive', - ]; - const childLogger = loggerAdapter.child('child').child('child'); - childLogger[level](...testData); - lastCallback(); - const logJson = JSON.parse(log, (_key, value) => value); - expect(logJson).toEqual({ - level, - foo: 'bar', - message: 'Hello, World, 42, true, Expensive', - name: 'child', - }); - }); - it('nested', () => { - const logger = winston.createLogger({ - level, - format: winston.format.json(), - transports: [ - new winston.transports.Stream({ - stream, - }), - ], - }); - const loggerAdapter = createLoggerFromWinston(logger); - const testData = [ - 'Hello', - ['World'], - { foo: 'bar' }, - 42, - true, - null, - undefined, - () => 'Expensive', - ]; - const childLogger = loggerAdapter.child('child'); - const nestedLogger = childLogger.child('nested'); - nestedLogger[level](...testData); - lastCallback(); - const logJson = JSON.parse(log, (_key, value) => value); - expect(logJson).toEqual({ - level, - foo: 'bar', - message: 'Hello, World, 42, true, Expensive', - name: 'child, nested', - }); - }); - }); - } -}); diff --git a/packages/logger/README.md b/packages/logger/README.md new file mode 100644 index 000000000..d94c8cb12 --- /dev/null +++ b/packages/logger/README.md @@ -0,0 +1,733 @@ +# Hive Logger + +Lightweight and customizable logging utility designed for use within the GraphQL Hive ecosystem. It provides structured logging capabilities, making it easier to debug and monitor applications effectively. + +## Compatibility + +The Hive Logger is designed to work seamlessly in all JavaScript environments, including Node.js, browsers, and serverless platforms. Its lightweight design ensures minimal overhead, making it suitable for a wide range of applications. + +# Getting Started + +## Install + +```sh +npm i @graphql-hive/logger +``` + +## Basic Usage + +Create a default logger that set to the `info` log level writing to the console. + +```ts +import { Logger } from '@graphql-hive/logger'; + +const log = new Logger(); + +log.debug('I wont be logged by default'); + +log.info({ some: 'attributes' }, 'Hello %s!', 'world'); + +const child = log.child({ requestId: '123-456' }); + +child.warn({ more: 'attributes' }, 'Oh hello child!'); + +const err = new Error('Woah!'); + +child.error({ err }, 'Something went wrong!'); +``` + +Will produce the following output to the console output: + + +```sh +2025-04-10T14:00:00.000Z INF Hello world! + some: "attributes" +2025-04-10T14:00:00.000Z WRN Oh hello child! + requestId: "123-456" + more: "attributes" +2025-04-10T14:00:00.000Z ERR Something went wrong! + requestId: "123-456" + err: { + stack: "Error: Woah! + at (/project/example.js:13:13) + at ModuleJob.run (node:internal/modules/esm/module_job:274:25) + at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26) + at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5)" + message: "Woah!" + name: "Error" + class: "Error" + } +``` + + +or if you wish to have JSON output, set the `LOG_JSON` environment variable to a truthy value: + + +```sh +$ LOG_JSON=1 node example.js + +{"some":"attributes","level":"info","msg":"Hello world!","timestamp":"2025-04-10T14:00:00.000Z"} +{"requestId":"123-456","more":"attributes","level":"info","msg":"Hello child!","timestamp":"2025-04-10T14:00:00.000Z"} +{"requestId":"123-456","err":{"stack":"Error: Woah!\n at (/project/example.js:13:13)\n at ModuleJob.run (node:internal/modules/esm/module_job:274:25)\n at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26)\n at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5)","message":"Woah!","name":"Error","class":"Error"},"level":"error","msg":"Something went wrong!","timestamp":"2025-04-10T14:00:00.000Z"} +``` + + +## Logging Methods and Their Arguments + +Hive Logger provides convenient methods for each log level: `trace`, `debug`, `info`, `warn`, and `error`. + +All logging methods support flexible argument patterns for structured and formatted logging: + +### No Arguments + +Logs an empty message at the specified level. + +```ts +log.debug(); +``` + +```sh +2025-04-10T14:00:00.000Z DBG +``` + +### Attributes Only + +Logs structured attributes without a message. + +```ts +log.info({ hello: 'world' }); +``` + + +```sh +2025-04-10T14:00:00.000Z INF + hello: "world" +``` + + +### Message with Interpolation + +Logs a formatted message, similar to printf-style formatting. Read more about it in the [Message Formatting section](#message-formatting). + +```ts +log.warn('Hello %s!', 'World'); +``` + + +```sh +2025-04-10T14:00:00.000Z WRN Hello World! +``` + + +### Attributes and Message (with interpolation) + +Logs structured attributes and a formatted message. The attributes can be anything object-like, including classes. + +```ts +const err = new Error('Something went wrong!'); +log.error(err, 'Problem occurred at %s', new Date()); +``` + + +```sh +2025-04-10T14:00:00.000Z ERR Problem occurred at Thu Apr 10 2025 14:00:00 GMT+0200 (Central European Summer Time) + stack: "Error: Something went wrong! + at (/projects/example.js:2:1)" + message: "Something went wrong!" + name: "Error" + class: "Error" +``` + + +## Message Formatting + +The Hive Logger uses the [`quick-format-unescaped` library](https://github.com/pinojs/quick-format-unescaped) to format log messages that include interpolation (e.g., placeholders like %s, %d, etc.). + +```ts +import { Logger } from '@graphql-hive/logger'; + +const log = new Logger(); + +log.info('hello %s %j %d %o', 'world', { obj: true }, 4, { another: 'obj' }); +``` + +Outputs: + +```sh +2025-04-10T14:00:00.000Z INF hello world {"obj":true} 4 {"another":"obj"} +``` + +Available interpolation placeholders are: + +- `%s` - string +- `%d` and `%f` - number with(out) decimals +- `%i` - integer number +- `%o`,`%O` and `%j` - JSON stringified object +- `%%` - escaped percentage sign + +## Logging Levels + +The default logger uses the `info` log level which will make sure to log only `info`+ logs. Available log levels are: + +- false (disables logging altogether) +- `trace` +- `debug` +- `info` _default_ +- `warn` +- `error` + +### Lazy Arguments and Performance + +Hive Logger supports "lazy" attributes for log methods. If you pass a function as the attributes argument, it will only be evaluated if the log level is enabled and the log will actually be written. This avoids unnecessary computation for expensive attributes when the log would be ignored due to the current log level. + +```ts +import { Logger } from '@graphql-hive/logger'; + +const log = new Logger({ level: 'info' }); + +log.debug( + // This function will NOT be called, since 'debug' is below the current log level. + () => ({ expensive: computeExpensiveValue() }), + 'This will not be logged', +); + +log.info( + // This function WILL be called, since 'info' log level is set. + () => ({ expensive: computeExpensiveValue() }), + 'This will be logged', +); +``` + +### Change Logging Level on Creation + +When creating an instance of the logger, you can configure the logging level by configuring the `level` option. Like this: + +```ts +import { Logger } from '@graphql-hive/logger'; + +const log = new Logger({ level: 'debug' }); + +log.trace( + // you can suply "lazy" attributes which wont be evaluated unless the log level allows logging + () => ({ + wont: 'be evaluated', + some: expensiveOperation(), + }), + 'Wont be logged and attributes wont be evaluated', +); + +log.debug('Hello world!'); + +const child = log.child('[prefix] '); + +child.debug('Child loggers inherit the parent log level'); +``` + +Outputs the following to the console: + + +```sh +2025-04-10T14:00:00.000Z DBG Hello world! +2025-04-10T14:00:00.000Z DBG [prefix] Child loggers inherit the parent log level +``` + + +### Change Logging Level Dynamically + +Alternatively, you can change the logging level dynamically during runtime. There's two possible ways of doing that. + +#### Using `log.setLevel(level: LogLevel)` + +One way of doing it is by using the log's `setLevel` method. + +```ts +import { Logger } from '@graphql-hive/logger'; + +const log = new Logger({ level: 'debug' }); + +log.debug('Hello world!'); + +const child = log.child('[prefix] '); + +child.debug('Child loggers inherit the parent log level'); + +log.setLevel('trace'); + +log.trace(() => ({ hi: 'there' }), 'Now tracing is logged too!'); + +child.trace('Also on the child logger'); + +child.setLevel('info'); + +log.trace('Still logging!'); + +child.debug('Wont be logged because the child has a different log level now'); + +child.info('Hello child!'); +``` + +Outputs the following to the console: + + +```sh +2025-04-10T14:00:00.000Z DBG Hello world! +2025-04-10T14:00:00.000Z DBG [prefix] Child loggers inherit the parent log level +2025-04-10T14:00:00.000Z TRC Now tracing is logged too! + hi: "there" +2025-04-10T14:00:00.000Z TRC [prefix] Also on the child logger +2025-04-10T14:00:00.000Z TRC Still logging! +2025-04-10T14:00:00.000Z INF Hello child! +``` + + +#### Using `LoggerOptions.level` Function + +Another way of doing it is to pass a function to the `level` option when creating a logger. + +```ts +import { Logger } from '@graphql-hive/logger'; + +let isDebug = false; + +const log = new Logger({ + level: () => { + if (isDebug) { + return 'debug'; + } + return 'info'; + }, +}); + +log.debug('isDebug is false, so this wont be logged'); + +log.info('Hello world!'); + +const child = log.child('[scoped] '); + +child.debug( + 'Child loggers inherit the parent log level function, so this wont be logged either', +); + +// enable debug mode +isDebug = true; + +child.debug('Now debug is enabled and logged'); +``` + +Outputs the following: + + +```sh +2025-04-10T14:00:00.000Z INF Hello world! +2025-04-10T14:00:00.000Z DBG [scoped] Now debug is enabled and logged +``` + + +## Child Loggers + +Child loggers in Hive Logger allow you to create new logger instances that inherit configuration (such as log level, writers, and attributes) from their parent logger. This is useful for associating contextual information (like request IDs or component names) with all logs from a specific part of your application. + +When you create a child logger using the child method, you can: + +- Add a prefix to all log messages from the child logger. +- Add attributes that will be included in every log entry from the child logger. +- Inherit the log level and writers from the parent logger, unless explicitly changed on the child. + +This makes it easy to organize and structure logs in complex applications, ensuring that related logs carry consistent context. + +> [!IMPORTANT] +> In a child logger, attributes provided in individual log calls will overwrite any attributes inherited from the parent logger if they share the same keys. This allows you to override or add context-specific attributes for each log entry. + +For example, running this: + +```ts +import { Logger } from '@graphql-hive/logger'; + +const log = new Logger(); + +const child = log.child({ requestId: '123-456' }, '[child] '); + +child.info('Hello World!'); +child.info({ requestId: 'overwritten attribute' }); + +const nestedChild = child.child({ traceId: '789-012' }, '[nestedChild] '); + +nestedChild.info('Hello Deep Down!'); +``` + +Will output: + + +```sh +2025-04-10T14:00:00.000Z INF [child] Hello World! + requestId: "123-456" +2025-04-10T14:00:00.000Z INF [child] + requestId: "overwritten attribute" +2025-04-20T18:39:30.291Z INF [child] [nestedChild] Hello Deep Down! + requestId: "123-456" + traceId: "789-012" +``` + + +## Writers + +Logger writers are responsible for handling how and where log messages are output. In Hive Logger, writers are pluggable components that receive structured log data and determine its final destination and format. This allows you to easily customize logging behavior, such as printing logs to the console, writing them as JSON, storing them in memory for testing, or sending them to external systems. + +By default, Hive Logger provides several built-in writers, but you can also implement your own to suit your application's needs. The built-ins are: + +### `MemoryLogWriter` + +Writes the logs to memory allowing you to access the logs. Mostly useful for testing. + +```ts +import { Logger, MemoryLogWriter } from '@graphql-hive/logger'; + +const writer = new MemoryLogWriter(); + +const log = new Logger({ writers: [writer] }); + +log.info({ my: 'attrs' }, 'Hello World!'); + +console.log(writer.logs); +``` + +Outputs: + +```sh +[ { level: 'info', msg: 'Hello World!', attrs: { my: 'attrs' } } ] +``` + +### `ConsoleLogWriter` (default) + +The default log writer used by the Hive Logger. It outputs log messages to the console in a human-friendly, colorized format, making it easy to distinguish log levels and read structured attributes. Each log entry includes a timestamp, the log level (with color), the message, and any additional attributes (with colored keys), which are pretty-printed and formatted for clarity. + +The writer works in both Node.js and browser-like environments, automatically disabling colors if not supported. This makes `ConsoleLogWriter` ideal for all cases, providing clear and readable logs out of the box. + +```ts +import { ConsoleLogWriter, Logger } from '@graphql-hive/logger'; + +const writer = new ConsoleLogWriter({ + noColor: true, // defaults to env.NO_COLOR. read more: https://no-color.org/ + noTimestamp: true, +}); + +const log = new Logger({ writers: [writer] }); + +log.info({ my: 'attrs' }, 'Hello World!'); +``` + +Outputs: + + +```sh +INF Hello World! + my: "attrs" +``` + + +### `JSONLogWriter` + +> [!NOTE] +> Will be used then the `LOG_JSON=1` environment variable is provided. + +Built-in log writer that outputs each log entry as a structured JSON object. When used, it prints logs to the console in JSON format, including all provided attributes, the log level, message, and a timestamp. + +In the JSONLogWriter implementation, any attributes you provide with the keys `msg`, `timestamp`, or `level` will be overwritten in the final log output. This is because the writer explicitly sets these fields when constructing the log object. If you include these keys in your attributes, their values will be replaced by the logger's own values in the JSON output. + +If the `LOG_JSON_PRETTY=1` environment variable is provided, the output will be pretty-printed for readability; otherwise, it is compact. + +This writer's format is ideal for machine parsing, log aggregation, or integrating with external logging systems, especially useful for production environments or when logs need to be consumed by other tools. + +```ts +import { JSONLogWriter, Logger } from '@graphql-hive/logger'; + +const log = new Logger({ writers: [new JSONLogWriter()] }); + +log.info({ my: 'attrs' }, 'Hello World!'); +``` + +Outputs: + + +```sh +{"my":"attrs","level":"info","msg":"Hello World!","timestamp":"2025-04-10T14:00:00.000Z"} +``` + + +Or pretty printed: + + +```sh +$ LOG_JSON_PRETTY=1 node example.js + +{ + "my": "attrs", + "level": "info", + "msg": "Hello World!", + "timestamp": "2025-04-10T14:00:00.000Z" +} +``` + + +### Optional Writers + +Hive Logger includes some writers for common loggers of the JavaScript ecosystem with optional peer dependencies. + +#### `PinoLogWriter` + +Use the [Node.js `pino` logger library](https://github.com/pinojs/pino) for writing Hive Logger's logs. + +`pino` is an optional peer dependency, so you must install it first. + +```sh +npm i pino pino-pretty +``` + +```ts +import { Logger } from '@graphql-hive/logger'; +import { PinoLogWriter } from '@graphql-hive/logger/writers/pino'; +import pino from 'pino'; + +const pinoLogger = pino({ + transport: { + target: 'pino-pretty', + }, +}); + +const log = new Logger({ writers: [new PinoLogWriter(pinoLogger)] }); + +log.info({ some: 'attributes' }, 'hello world'); +``` + + +```sh +[14:00:00.000] INFO (20744): hello world + some: "attributes" +``` + + +#### `WinstonLogWriter` + +Use the [Node.js `winston` logger library](https://github.com/winstonjs/winston) for writing Hive Logger's logs. + +`winston` is an optional peer dependency, so you must install it first. + +```sh +npm i winston +``` + +```ts +import { Logger } from '@graphql-hive/logger'; +import { WinstonLogWriter } from '@graphql-hive/logger/writers/winston'; +import winston from 'winston'; + +const winstonLogger = winston.createLogger({ + transports: [new winston.transports.Console()], +}); + +const log = new Logger({ writers: [new WinstonLogWriter(winstonLogger)] }); + +log.info({ some: 'attributes' }, 'hello world'); +``` + +```sh +{"level":"info","message":"hello world","some":"attributes"} +``` + +> [!IMPORTANT] +> Winston logger does not have a "trace" log level. Hive Logger will instead use "verbose" when writing logs to Winston. + +### Custom Writers + +You can implement custom log writers for the Hive Logger by creating a class that implements the `LogWriter` interface. This interface requires a single `write` method, which receives the log level, attributes, and message. + +Your writer can perform any action, such as sending logs to a file, external service, or custom destination. + +Writers can be synchronous (returning `void`) or asynchronous (returning a `Promise`). If your writer performs asynchronous operations (like network requests or file writes), simply return a promise from the `write` method. + +```ts +import { + Attributes, + ConsoleLogWriter, + Logger, + LogLevel, + LogWriter, +} from '@graphql-hive/logger'; + +class HTTPLogWriter implements LogWriter { + async write(level: LogLevel, attrs: Attributes, msg: string) { + await fetch('https://my-log-service.com', { + method: 'POST', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify({ level, attrs, msg }), + }); + } +} + +const log = new Logger({ + // send logs both to the HTTP loggging service and output them to the console + writers: [new HTTPLogWriter(), new ConsoleLogWriter()], +}); + +log.info('Hello World!'); + +await log.flush(); // make sure all async writes settle +``` + +#### Flushing and Non-Blocking Logging + +The logger does not block when you log asynchronously. Instead, it tracks all pending async writes internally. When you call `log.flush()` it waits for all pending writes to finish, ensuring no logs are lost on shutdown. During normal operation, logging remains fast and non-blocking, even if some writers are async. + +This design allows you to use async writers without impacting the performance of your application or blocking the main thread. + +##### Explicit Resource Management + +The Hive Logger also supports [Explicit Resource Management](https://github.com/tc39/proposal-explicit-resource-management). This allows you to ensure that all pending asynchronous log writes are properly flushed before your application exits or when the logger is no longer needed. + +You can use the logger with `await using` (in environments that support it) to wait for all log operations to complete. This is especially useful in serverless or short-lived environments where you want to guarantee that no logs are lost due to unfinished asynchronous operations. + +```ts +import { + Attributes, + ConsoleLogWriter, + Logger, + LogLevel, + LogWriter, +} from '@graphql-hive/logger'; + +class HTTPLogWriter implements LogWriter { + async write(level: LogLevel, attrs: Attributes, msg: string) { + await fetch('https://my-log-service.com', { + method: 'POST', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify({ level, attrs, msg }), + }); + } +} + +{ + await using log = new Logger({ + // send logs both to the HTTP loggging service and output them to the console + writers: [new HTTPLogWriter(), new ConsoleLogWriter()], + }); + + log.info('Hello World!'); +} + +// logger went out of scope and all of the logs have been flushed +``` + +##### Handling Async Write Errors + +The Logger handles write errors for asynchronous writers by tracking all write promises. When `await log.flush()` is called (including during async disposal), it waits for all pending writes to settle. If any writes fail (i.e., their promises reject), their errors are collected and after all writes have settled, if there were any errors, an `AggregateError` is thrown containing all the individual write errors. + +```ts +import { Logger } from './Logger'; + +let i = 0; +const log = new Logger({ + writers: [ + { + async write() { + i++; + throw new Error('Write failed! #' + i); + }, + }, + ], +}); + +// no fail during logs +log.info('hello'); +log.info('world'); + +try { + await log.flush(); +} catch (e) { + // flush will fail with each individually failed writes + console.error(e); +} +``` + +Outputs: + +```sh +AggregateError: Failed to flush 2 writes + at async (/project/example.js:20:3) { + [errors]: [ + Error: Write failed! #1 + at Object.write (/project/example.js:9:15), + Error: Write failed! #2 + at Object.write (/project/example.js:9:15) + ] +} +``` + +## Advanced Serialization of Attributes + +Hive Logger uses advanced serialization to ensure that all attributes are logged safely and readably, even when they contain complex or circular data structures. This means you can log rich, nested objects or errors as attributes without worrying about serialization failures or unreadable logs. + +For example, the logger will serialize the error object, including its message and stack, in a safe and readable way. This advanced serialization is applied automatically to all attributes passed to log methods, child loggers, and writers. + +```ts +import { Logger } from '@graphql-hive/logger'; + +const log = new Logger(); + +class DatabaseError extends Error { + constructor(message: string) { + super(message); + this.name = 'DatabaseError'; + } +} +const dbErr = new DatabaseError('Connection failed'); +const userErr = new Error('Updating user failed', { cause: dbErr }); +const errs = new AggregateError([dbErr, userErr], 'Failed to update user'); + +log.error(errs); +``` + + +```sh +2025-04-10T14:00:00.000Z ERR + stack: "AggregateError: Failed to update user + at (/project/example.js:13:14) + at ModuleJob.run (node:internal/modules/esm/module_job:274:25) + at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26) + at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5)" + message: "Failed to update user" + errors: [ + { + stack: "DatabaseError: Connection failed + at (/project/example.js:11:15) + at ModuleJob.run (node:internal/modules/esm/module_job:274:25) + at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26) + at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5)" + message: "Database connection failed" + name: "DatabaseError" + class: "DatabaseError" + } + { + stack: "Error: Updating user failed + at (/project/example.js:12:17) + at ModuleJob.run (node:internal/modules/esm/module_job:274:25) + at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26) + at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5)" + message: "Updating user failed" + cause: { + stack: "DatabaseError: Connection failed + at (/project/example.js:11:15) + at ModuleJob.run (node:internal/modules/esm/module_job:274:25) + at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:644:26) + at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:98:5)" + message: "Database connection failed" + name: "DatabaseError" + class: "DatabaseError" + } + name: "Error" + class: "Error" + } + ] + name: "AggregateError" + class: "AggregateError" +``` + diff --git a/packages/logger/package.json b/packages/logger/package.json new file mode 100644 index 000000000..d9203afe4 --- /dev/null +++ b/packages/logger/package.json @@ -0,0 +1,93 @@ +{ + "name": "@graphql-hive/logger", + "version": "0.0.0", + "type": "module", + "repository": { + "type": "git", + "url": "git+https://github.com/graphql-hive/gateway.git", + "directory": "packages/logger" + }, + "author": { + "email": "contact@the-guild.dev", + "name": "The Guild", + "url": "https://the-guild.dev" + }, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + }, + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "./request": { + "require": { + "types": "./dist/request.d.cts", + "default": "./dist/request.cjs" + }, + "import": { + "types": "./dist/request.d.ts", + "default": "./dist/request.js" + } + }, + "./writers/pino": { + "require": { + "types": "./dist/writers/pino.d.cts", + "default": "./dist/writers/pino.cjs" + }, + "import": { + "types": "./dist/writers/pino.d.ts", + "default": "./dist/writers/pino.js" + } + }, + "./writers/winston": { + "require": { + "types": "./dist/writers/winston.d.cts", + "default": "./dist/writers/winston.cjs" + }, + "import": { + "types": "./dist/writers/winston.d.ts", + "default": "./dist/writers/winston.js" + } + }, + "./package.json": "./package.json" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "pkgroll --clean-dist", + "prepack": "yarn build" + }, + "peerDependencies": { + "pino": "^9.6.0" + }, + "peerDependenciesMeta": { + "pino": { + "optional": true + }, + "winston": { + "optional": true + } + }, + "devDependencies": { + "@types/quick-format-unescaped": "^4.0.3", + "@whatwg-node/disposablestack": "^0.0.6", + "fast-safe-stringify": "^2.1.1", + "pino": "^9.6.0", + "pkgroll": "2.11.2", + "quick-format-unescaped": "^4.0.4", + "winston": "^3.17.0" + }, + "sideEffects": false, + "dependencies.info": "all of the dependencies are in devDependencies which will bundle them into the package using pkgroll making pkgroll ultimately zero-dep with a smaller footprint because of tree-shaking" +} diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts new file mode 100644 index 000000000..352b76440 --- /dev/null +++ b/packages/logger/src/index.ts @@ -0,0 +1,4 @@ +export * from './logger'; +export * from './writers'; +/** @deprecated Please migrate to using the './Logger' instead. */ +export * from './legacyLogger'; diff --git a/packages/logger/src/legacyLogger.ts b/packages/logger/src/legacyLogger.ts new file mode 100644 index 000000000..ed25e8948 --- /dev/null +++ b/packages/logger/src/legacyLogger.ts @@ -0,0 +1,98 @@ +import { Logger, LogLevel } from './logger'; +import { shouldLog } from './utils'; + +// type comes from "@graphql-mesh/types" package, we're copying them over just to avoid including the whole package +export type LazyLoggerMessage = (() => any | any[]) | any; + +/** @deprecated Please migrate to using the {@link Logger} instead.*/ +export class LegacyLogger { + #logger: Logger; + + constructor(logger: Logger) { + this.#logger = logger; + } + + static from(logger: Logger): LegacyLogger { + return new LegacyLogger(logger); + } + + #log(level: LogLevel, ...[maybeMsgOrArg, ...restArgs]: any[]) { + if (typeof maybeMsgOrArg === 'string') { + if (restArgs.length) { + this.#logger.log(level, restArgs, maybeMsgOrArg); + } else { + this.#logger.log(level, maybeMsgOrArg); + } + } else { + if (restArgs.length) { + this.#logger.log(level, [maybeMsgOrArg, ...restArgs]); + } else { + this.#logger.log(level, maybeMsgOrArg); + } + } + } + + log(...args: any[]) { + this.#log('info', ...args); + } + + warn(...args: any[]) { + this.#log('warn', ...args); + } + + info(...args: any[]) { + this.#log('info', ...args); + } + + error(...args: any[]) { + this.#log('error', ...args); + } + + debug(...lazyArgs: LazyLoggerMessage[]) { + if (!shouldLog(this.#logger.level, 'debug')) { + // we only return early here because only debug can have lazy logs + return; + } + this.#log('debug', ...handleLazyMessage(lazyArgs)); + } + + child(name: string | Record): LegacyLogger { + name = + stringifyName(name) + + // append space if object is strigified to space out the prefix + (typeof name === 'object' ? ' ' : ''); + if (this.#logger.prefix === name) { + return this; + } + return LegacyLogger.from(this.#logger.child(name)); + } + + addPrefix(prefix: string | Record): LegacyLogger { + prefix = stringifyName(prefix); + if (this.#logger.prefix?.includes(prefix)) { + // TODO: why do we do this? + return this; + } + return LegacyLogger.from(this.#logger.child(prefix)); + } +} + +function stringifyName(name: string | Record) { + if (typeof name === 'string' || typeof name === 'number') { + return `${name}`; + } + const names: string[] = []; + for (const [key, value] of Object.entries(name)) { + names.push(`${key}=${value}`); + } + return `${names.join(', ')}`; +} + +function handleLazyMessage(lazyArgs: LazyLoggerMessage[]) { + return lazyArgs.flat(Infinity).flatMap((arg) => { + if (typeof arg === 'function') { + return arg(); + } + return arg; + }); +} diff --git a/packages/logger/src/logger.ts b/packages/logger/src/logger.ts new file mode 100644 index 000000000..4bfe33a6e --- /dev/null +++ b/packages/logger/src/logger.ts @@ -0,0 +1,297 @@ +import { DisposableSymbols } from '@whatwg-node/disposablestack'; +import fastSafeStringify from 'fast-safe-stringify'; +import format from 'quick-format-unescaped'; +import { + Attributes, + getEnv, + isPromise, + logLevel, + MaybeLazy, + parseAttrs, + shallowMergeAttributes, + shouldLog, + truthyEnv, +} from './utils'; +import { ConsoleLogWriter, JSONLogWriter, LogWriter } from './writers'; + +export type { Attributes } from './utils'; + +export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error'; + +export interface LoggerOptions { + /** + * The minimum log level to log. + * + * Providing `false` will disable all logging. + * + * Provided function will always be invoked to get the current log level. + * + * @default env.LOG_LEVEL || env.DEBUG ? 'debug' : 'info' + */ + level?: MaybeLazy; + /** A prefix to include in every log's message. */ + prefix?: string; + /** + * The attributes to include in all logs. Is mainly used to pass the parent + * attributes when creating {@link Logger.child child loggers}. + */ + attrs?: Attributes; + /** + * The log writers to use when writing logs. + * + * @default env.LOG_JSON ? [new JSONLogWriter()] : [new ConsoleLogWriter()] + */ + writers?: [LogWriter, ...LogWriter[]]; +} + +export class Logger implements AsyncDisposable { + #level: MaybeLazy; + #prefix: string | undefined; + #attrs: Attributes | undefined; + #writers: [LogWriter, ...LogWriter[]]; + #pendingWrites?: Set>; + + constructor(opts: LoggerOptions = {}) { + let logLevelEnv = getEnv('LOG_LEVEL'); + if (logLevelEnv && !(logLevelEnv in logLevel)) { + throw new Error( + `Invalid LOG_LEVEL environment variable "${logLevelEnv}". Must be one of: ${[...Object.keys(logLevel), 'false'].join(', ')}`, + ); + } + this.#level = + opts.level ?? + (logLevelEnv as LogLevel) ?? + (truthyEnv('DEBUG') ? 'debug' : 'info'); + this.#prefix = opts.prefix; + this.#attrs = opts.attrs; + this.#writers = + opts.writers ?? + (truthyEnv('LOG_JSON') + ? [new JSONLogWriter()] + : [new ConsoleLogWriter()]); + } + + /** The prefix that's prepended to each log message. */ + public get prefix() { + return this.#prefix; + } + + /** + * The attributes that are added to each log. If the log itself contains + * attributes with keys existing in {@link attrs}, the log's attributes will + * override. + */ + public get attrs() { + return this.#attrs; + } + + /** The current {@link LogLevel} of the logger. You can change the level using the {@link setLevel} method. */ + public get level() { + return typeof this.#level === 'function' ? this.#level() : this.#level; + } + + /** + * Sets the new {@link LogLevel} of the logger. All subsequent logs, and {@link child child loggers} whose + * level did not change, will respect the new level. + */ + public setLevel(level: MaybeLazy) { + this.#level = level; + } + + public write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void { + for (const w of this.#writers) { + const write$ = w.write(level, attrs, msg); + if (isPromise(write$)) { + this.#pendingWrites ??= new Set(); + this.#pendingWrites.add(write$); + write$ + .then(() => { + // we remove from pending writes only if the write was successful + this.#pendingWrites!.delete(write$); + }) + .catch((e) => { + // otherwise we keep in the pending write to throw on flush + console.error('Failed to write async log', e); + }); + } + } + } + + public flush() { + if (this.#pendingWrites?.size) { + const errs: unknown[] = []; + return Promise.allSettled( + Array.from(this.#pendingWrites).map((w) => + w.catch((err) => errs.push(err)), + ), + ).then(() => { + this.#pendingWrites!.clear(); + if (errs.length) { + throw new AggregateError( + errs, + `Failed to flush ${errs.length} writes`, + ); + } + }); + } + return; + } + + async [DisposableSymbols.asyncDispose]() { + return this.flush(); + } + + // + + public child(prefix: string): Logger; + public child(attrs: Attributes, prefix?: string): Logger; + public child(prefixOrAttrs: string | Attributes, prefix?: string): Logger { + if (typeof prefixOrAttrs === 'string') { + return new Logger({ + level: () => this.level, // inherits the parent level (yet can be changed on child only when using setLevel) + prefix: (this.#prefix || '') + prefixOrAttrs, + attrs: this.#attrs, + writers: this.#writers, + }); + } + return new Logger({ + level: () => this.level, // inherits the parent level (yet can be changed on child only when using setLevel) + prefix: (this.#prefix || '') + (prefix || '') || undefined, + attrs: shallowMergeAttributes(this.#attrs, prefixOrAttrs), + writers: this.#writers, + }); + } + + // + + public log(level: LogLevel): void; + public log(level: LogLevel, attrs: MaybeLazy): void; + public log(level: LogLevel, msg: string, ...interpol: unknown[]): void; + public log( + level: LogLevel, + attrs: MaybeLazy, + msg: string, + ...interpol: unknown[] + ): void; + public log( + level: LogLevel, + maybeAttrsOrMsg?: MaybeLazy | string | null | undefined, + ...rest: unknown[] + ): void { + if (!shouldLog(this.#level, level)) { + return; + } + + let msg: string | undefined; + let attrs: MaybeLazy | undefined; + if (typeof maybeAttrsOrMsg === 'string') { + msg = maybeAttrsOrMsg; + } else if (maybeAttrsOrMsg) { + attrs = maybeAttrsOrMsg; + if (typeof rest[0] === 'string') { + // we shift because the "rest" becomes "interpol" + msg = rest.shift() as string; + } + } + + if (this.#prefix) { + msg = `${this.#prefix}${msg || ''}`.trim(); // we trim everything because maybe the "msg" is empty + } + + attrs = shallowMergeAttributes(parseAttrs(this.#attrs), parseAttrs(attrs)); + + msg = + msg && rest.length + ? format(msg, rest, { stringify: fastSafeStringify }) + : msg; + + this.write(level, attrs, msg); + if (truthyEnv('LOG_TRACE_LOGS')) { + console.trace('👆'); + } + } + + public trace(): void; + public trace(attrs: MaybeLazy): void; + public trace(msg: string, ...interpol: unknown[]): void; + public trace( + attrs: MaybeLazy, + msg: string, + ...interpol: unknown[] + ): void; + public trace(...args: any): void { + this.log( + 'trace', + // @ts-expect-error + ...args, + ); + } + + public debug(): void; + public debug(attrs: MaybeLazy): void; + public debug(msg: string, ...interpol: unknown[]): void; + public debug( + attrs: MaybeLazy, + msg: string, + ...interpol: unknown[] + ): void; + public debug(...args: any): void { + this.log( + 'debug', + // @ts-expect-error + ...args, + ); + } + + public info(): void; + public info(attrs: MaybeLazy): void; + public info(msg: string, ...interpol: unknown[]): void; + public info( + attrs: MaybeLazy, + msg: string, + ...interpol: unknown[] + ): void; + public info(...args: any): void { + this.log( + 'info', + // @ts-expect-error + ...args, + ); + } + + public warn(): void; + public warn(attrs: MaybeLazy): void; + public warn(msg: string, ...interpol: unknown[]): void; + public warn( + attrs: MaybeLazy, + msg: string, + ...interpol: unknown[] + ): void; + public warn(...args: any): void { + this.log( + 'warn', + // @ts-expect-error + ...args, + ); + } + + public error(): void; + public error(attrs: MaybeLazy): void; + public error(msg: string, ...interpol: unknown[]): void; + public error( + attrs: MaybeLazy, + msg: string, + ...interpol: unknown[] + ): void; + public error(...args: any): void { + this.log( + 'error', + // @ts-expect-error + ...args, + ); + } +} diff --git a/packages/logger/src/request.ts b/packages/logger/src/request.ts new file mode 100644 index 000000000..43239bf70 --- /dev/null +++ b/packages/logger/src/request.ts @@ -0,0 +1,20 @@ +import { Logger } from './logger'; + +export const requestIdByRequest = new WeakMap(); + +const loggerByRequest = new WeakMap(); + +/** + * Gets the {@link Logger} of for the {@link request}. + * + * If the request does not have a logger, the provided {@link log} + * will be associated to the {@link request} and returned. + */ +export function loggerForRequest(log: Logger, request: Request): Logger { + const reqLog = loggerByRequest.get(request); + if (reqLog) { + return reqLog; + } + loggerByRequest.set(request, log); + return log; +} diff --git a/packages/logger/src/utils.ts b/packages/logger/src/utils.ts new file mode 100644 index 000000000..fbfaae167 --- /dev/null +++ b/packages/logger/src/utils.ts @@ -0,0 +1,229 @@ +import { LogLevel } from './logger'; + +export type MaybeLazy = T | (() => T); + +export type AttributeValue = any; + +export type Attributes = + | AttributeValue[] + | { [key: string | number]: AttributeValue }; + +export const logLevel: { [level in LogLevel]: number } = { + trace: 0, + debug: 1, + info: 2, + warn: 3, + error: 4, +}; + +export function shouldLog( + setLevel: MaybeLazy, + loggingLevel: LogLevel, +): boolean { + setLevel = typeof setLevel === 'function' ? setLevel() : setLevel; + return ( + setLevel !== false && // logging is not disabled + logLevel[setLevel] <= logLevel[loggingLevel] // and set log level is less than or equal to logging level + ); +} + +export function logLevelToString(level: LogLevel): string { + switch (level) { + case 'trace': + return 'TRC'; + case 'debug': + return 'DBG'; + case 'info': + return 'INF'; + case 'warn': + return 'WRN'; + case 'error': + return 'ERR'; + default: + throw new Error(`Unknown log level "${level}"`); + } +} + +export function isPromise(val: unknown): val is Promise { + const obj = Object(val); + return ( + typeof obj.then === 'function' && + typeof obj.catch === 'function' && + typeof obj.finally === 'function' + ); +} + +/** Recursivelly unwrapps the lazy attributes and parses instances of classes. */ +export function parseAttrs( + attrs: MaybeLazy | undefined, + functionUnwrapDepth = 0, +): Attributes | undefined { + if (functionUnwrapDepth > 3) { + throw new Error('Too much recursion while unwrapping function attributes'); + } + + if (!attrs) { + return undefined; + } + + if (typeof attrs === 'function') { + return parseAttrs(attrs(), functionUnwrapDepth + 1); + } + + if (Array.isArray(attrs)) { + return attrs.map((val) => unwrapAttrVal(val)); + } + + if (isPlainObject(attrs)) { + const unwrapped: Attributes = {}; + for (const key of Object.keys(attrs)) { + const val = attrs[key as keyof typeof attrs]; + unwrapped[key] = unwrapAttrVal(val); + } + return unwrapped; + } + + return objectifyClass(attrs); +} + +function unwrapAttrVal( + attr: AttributeValue, + visited = new WeakSet(), +): AttributeValue { + if (!attr) { + return attr; + } + + if (isPrimitive(attr)) { + return attr; + } + + if (typeof attr === 'function') { + return `[Function: ${attr.name || '(anonymous)'}]`; + } + + if (visited.has(attr)) { + return '[Circular]'; + } + visited.add(attr); + + if (Array.isArray(attr)) { + return attr.map((val) => unwrapAttrVal(val)); + } + + if (isPlainObject(attr)) { + const unwrapped: { [key: string | number]: AttributeValue } = {}; + for (const key of Object.keys(attr)) { + const val = attr[key as keyof typeof attr]; + unwrapped[key] = unwrapAttrVal(val, visited); + } + return unwrapped; + } + + // very likely an instance of something, dont unwrap it + return objectifyClass(attr); +} + +function isPrimitive(val: unknown): val is string | number | boolean { + return val !== Object(val); +} + +const nodejsCustomInspectSy = Symbol.for('nodejs.util.inspect.custom'); + +function objectifyClass(val: unknown): Record { + if ( + // simply empty + !val || + // Object.create(null) + Object(val).__proto__ == null + ) { + return {}; + } + if ( + typeof val === 'object' && + 'toJSON' in val && + typeof val.toJSON === 'function' + ) { + // if the object has a toJSON method, use it - always + return val.toJSON(); + } + if ( + typeof val === 'object' && + nodejsCustomInspectSy in val && + typeof val[nodejsCustomInspectSy] === 'function' + ) { + // > Custom [util.inspect.custom](depth, opts, inspect) functions typically return a string but may return a value of any type that will be formatted accordingly by util.inspect(). + return { + [nodejsCustomInspectSy.toString()]: unwrapAttrVal( + val[nodejsCustomInspectSy](Infinity, {}), + ), + class: val.constructor.name, + }; + } + const props: Record = {}; + for (const propName of Object.getOwnPropertyNames(val)) { + props[propName] = unwrapAttrVal(val[propName as keyof typeof val]); + } + for (const protoPropName of Object.getOwnPropertyNames( + Object.getPrototypeOf(val), + )) { + const propVal = val[protoPropName as keyof typeof val]; + if (typeof propVal === 'function') { + continue; + } + props[protoPropName] = unwrapAttrVal(propVal); + } + return { + ...props, + class: val.constructor.name, + }; +} + +export function getEnv(key: string): string | undefined { + return ( + globalThis.process?.env?.[key] || + // @ts-expect-error can exist in wrangler and maybe other runtimes + globalThis.env?.[key] || + // @ts-expect-error can exist in deno + globalThis.Deno?.env?.get(key) || + // @ts-expect-error could be + globalThis[key] + ); +} + +export function truthyEnv(key: string): boolean { + return ['1', 't', 'true', 'y', 'yes'].includes( + getEnv(key)?.toLowerCase() || '', + ); +} + +export function shallowMergeAttributes( + target: Attributes | undefined, + source: Attributes | undefined, +): Attributes | undefined { + switch (true) { + case Array.isArray(source) && Array.isArray(target): + // both are arrays + return [...target, ...source]; + case Array.isArray(source): + // only "source" is an array + return target ? [target, ...source] : source; + case Array.isArray(target): + // only "target" is an array + return source ? [...target, source] : target; + case !!(target || source): + // neither are arrays, but at least one is an object + return { ...target, ...source }; + default: + // neither are provided + return undefined; + } +} + +/** Checks whether the value is a plan object and not an instance of any other class. */ +function isPlainObject(val: unknown): val is Object { + return ( + Object(val).constructor === Object && + Object.getPrototypeOf(val) === Object.prototype + ); +} diff --git a/packages/logger/src/writers/common.ts b/packages/logger/src/writers/common.ts new file mode 100644 index 000000000..4bad07367 --- /dev/null +++ b/packages/logger/src/writers/common.ts @@ -0,0 +1,14 @@ +import fastSafeStringify from 'fast-safe-stringify'; +import { Attributes, LogLevel } from '../logger'; + +export function jsonStringify(val: unknown, pretty?: boolean): string { + return fastSafeStringify(val, undefined, pretty ? 2 : undefined); +} + +export interface LogWriter { + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void | Promise; +} diff --git a/packages/logger/src/writers/console.ts b/packages/logger/src/writers/console.ts new file mode 100644 index 000000000..cec5def1f --- /dev/null +++ b/packages/logger/src/writers/console.ts @@ -0,0 +1,124 @@ +import { LogLevel } from '../logger'; +import { Attributes, logLevelToString, truthyEnv } from '../utils'; +import { jsonStringify, LogWriter } from './common'; + +const asciMap = { + timestamp: '\x1b[90m', // bright black + trace: '\x1b[36m', // cyan + debug: '\x1b[90m', // bright black + info: '\x1b[32m', // green + warn: '\x1b[33m', // yellow + error: '\x1b[41;39m', // red; white + message: '\x1b[1m', // bold + key: '\x1b[35m', // magenta + reset: '\x1b[0m', // reset +}; + +export interface ConsoleLogWriterOptions { + /** @default globalThis.Console */ + console?: Pick; + /** + * Whether to disable colors in the console output. + * + * @default env.NO_COLOR || false + */ + noColor?: boolean; + /** + * Whether to include the timestamp at the beginning of the log message. + * + * @default false + */ + noTimestamp?: boolean; +} + +export class ConsoleLogWriter implements LogWriter { + #console: NonNullable; + #noColor: boolean; + #noTimestamp: boolean; + constructor(opts: ConsoleLogWriterOptions = {}) { + const { + console = globalThis.console, + // no color if we're running in browser-like (edge) environments + noColor = typeof process === 'undefined' || + // or no color if https://no-color.org/ + truthyEnv('NO_COLOR'), + noTimestamp = false, + } = opts; + this.#console = console; + this.#noColor = noColor; + this.#noTimestamp = noTimestamp; + } + color( + style: keyof typeof asciMap, + text: T, + ): T { + if (!text) { + return text; + } + if (this.#noColor) { + return text; + } + return (asciMap[style] + text + asciMap.reset) as T; + } + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void { + this.#console[level === 'trace' ? 'debug' : level]( + [ + !this.#noTimestamp && this.color('timestamp', new Date().toISOString()), + this.color(level, logLevelToString(level)), + this.color('message', msg), + attrs && this.stringifyAttrs(attrs), + ] + .filter(Boolean) + .join(' '), + ); + } + stringifyAttrs(attrs: Attributes): string { + let log = '\n'; + + for (const line of jsonStringify(attrs, true).split('\n')) { + // remove the first and last line the opening and closing brackets + if (line === '{' || line === '}' || line === '[' || line === ']') { + continue; + } + + let formattedLine = line; + + // remove the quotes from the keys and remove the opening bracket + // TODO: make sure keys with quotes are preserved + formattedLine = formattedLine.replace( + /"([^"]+)":/, + this.color('key', '$1:'), + ); + + // replace all escaped new lines with a new line and append the indentation of the line + let indentationSize = line.match(/^\s*/)?.[0]?.length || 0; + if (indentationSize) indentationSize++; + + // TODO: error stack traces will have 4 spaces of indentation, should we sanitize all 4 spaces / tabs to 2 space indentation? + formattedLine = formattedLine.replaceAll( + /\\n/g, + '\n' + [...Array(indentationSize)].join(' '), + ); + + // remove the ending comma + formattedLine = formattedLine.replace(/,$/, ''); + + // color the opening and closing brackets + formattedLine = formattedLine.replace( + /(\[|\{|\]|\})$/, + this.color('key', '$1'), + ); + + log += formattedLine + '\n'; + } + + // remove last new line + log = log.slice(0, -1); + + return log; + } +} diff --git a/packages/logger/src/writers/index.ts b/packages/logger/src/writers/index.ts new file mode 100644 index 000000000..346b943f9 --- /dev/null +++ b/packages/logger/src/writers/index.ts @@ -0,0 +1,4 @@ +export * from './common'; +export * from './console'; +export * from './json'; +export * from './memory'; diff --git a/packages/logger/src/writers/json.ts b/packages/logger/src/writers/json.ts new file mode 100644 index 000000000..2f5cd6fa9 --- /dev/null +++ b/packages/logger/src/writers/json.ts @@ -0,0 +1,23 @@ +import { LogLevel } from '../logger'; +import { Attributes, truthyEnv } from '../utils'; +import { jsonStringify, LogWriter } from './common'; + +export class JSONLogWriter implements LogWriter { + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void { + console.log( + jsonStringify( + { + ...attrs, + level, + ...(msg ? { msg } : {}), + timestamp: new Date().toISOString(), + }, + truthyEnv('LOG_JSON_PRETTY'), + ), + ); + } +} diff --git a/packages/logger/src/writers/memory.ts b/packages/logger/src/writers/memory.ts new file mode 100644 index 000000000..5808b2d54 --- /dev/null +++ b/packages/logger/src/writers/memory.ts @@ -0,0 +1,18 @@ +import { LogLevel } from '../logger'; +import { Attributes } from '../utils'; +import { LogWriter } from './common'; + +export class MemoryLogWriter implements LogWriter { + public logs: { level: LogLevel; msg?: string; attrs?: unknown }[] = []; + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void { + this.logs.push({ + level, + ...(msg ? { msg } : {}), + ...(attrs ? { attrs } : {}), + }); + } +} diff --git a/packages/logger/src/writers/pino.ts b/packages/logger/src/writers/pino.ts new file mode 100644 index 000000000..84ea435bb --- /dev/null +++ b/packages/logger/src/writers/pino.ts @@ -0,0 +1,18 @@ +import type { BaseLogger as PinoLogger } from 'pino'; +import { LogLevel } from '../logger'; +import { Attributes } from '../utils'; +import { LogWriter } from './common'; + +export class PinoLogWriter implements LogWriter { + #pinoLogger: PinoLogger; + constructor(pinoLogger: PinoLogger) { + this.#pinoLogger = pinoLogger; + } + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void { + this.#pinoLogger[level](attrs, msg || undefined); + } +} diff --git a/packages/logger/src/writers/winston.ts b/packages/logger/src/writers/winston.ts new file mode 100644 index 000000000..6a5460847 --- /dev/null +++ b/packages/logger/src/writers/winston.ts @@ -0,0 +1,22 @@ +import type { Logger as WinstonLogger } from 'winston'; +import { LogLevel } from '../logger'; +import { Attributes } from '../utils'; +import { LogWriter } from './common'; + +export class WinstonLogWriter implements LogWriter { + #winstonLogger: WinstonLogger; + constructor(winstonLogger: WinstonLogger) { + this.#winstonLogger = winstonLogger; + } + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void { + if (msg) { + this.#winstonLogger[level === 'trace' ? 'verbose' : level](msg, attrs); + } else { + this.#winstonLogger[level === 'trace' ? 'verbose' : level](attrs); + } + } +} diff --git a/packages/logger/tests/__snapshots__/writers.test.ts.snap b/packages/logger/tests/__snapshots__/writers.test.ts.snap new file mode 100644 index 000000000..7b0ee8652 --- /dev/null +++ b/packages/logger/tests/__snapshots__/writers.test.ts.snap @@ -0,0 +1,22 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ConsoleLogWriter should color levels and keys 1`] = ` +[ + ""\\u001b[36mTRC\\u001b[0m \\u001b[1mhi\\u001b[0m \\n \\u001b[35mhello:\\u001b[0m \\u001b[35m{\\u001b[0m\\n \\u001b[35mdear:\\u001b[0m \\"world\\"\\n \\u001b[35mtry:\\u001b[0m \\u001b[35m[\\u001b[0m\\n \\"num\\"\\n 1\\n 2\\n \\u001b[35m]\\u001b[0m\\n \\u001b[35m}\\u001b[0m"", + ""\\u001b[90mDBG\\u001b[0m \\u001b[1mhi\\u001b[0m \\n \\u001b[35mhello:\\u001b[0m \\u001b[35m{\\u001b[0m\\n \\u001b[35mdear:\\u001b[0m \\"world\\"\\n \\u001b[35mtry:\\u001b[0m \\u001b[35m[\\u001b[0m\\n \\"num\\"\\n 1\\n 2\\n \\u001b[35m]\\u001b[0m\\n \\u001b[35m}\\u001b[0m"", + ""\\u001b[32mINF\\u001b[0m \\u001b[1mhi\\u001b[0m \\n \\u001b[35mhello:\\u001b[0m \\u001b[35m{\\u001b[0m\\n \\u001b[35mdear:\\u001b[0m \\"world\\"\\n \\u001b[35mtry:\\u001b[0m \\u001b[35m[\\u001b[0m\\n \\"num\\"\\n 1\\n 2\\n \\u001b[35m]\\u001b[0m\\n \\u001b[35m}\\u001b[0m"", + ""\\u001b[33mWRN\\u001b[0m \\u001b[1mhi\\u001b[0m \\n \\u001b[35mhello:\\u001b[0m \\u001b[35m{\\u001b[0m\\n \\u001b[35mdear:\\u001b[0m \\"world\\"\\n \\u001b[35mtry:\\u001b[0m \\u001b[35m[\\u001b[0m\\n \\"num\\"\\n 1\\n 2\\n \\u001b[35m]\\u001b[0m\\n \\u001b[35m}\\u001b[0m"", + ""\\u001b[41;39mERR\\u001b[0m \\u001b[1mhi\\u001b[0m \\n \\u001b[35mhello:\\u001b[0m \\u001b[35m{\\u001b[0m\\n \\u001b[35mdear:\\u001b[0m \\"world\\"\\n \\u001b[35mtry:\\u001b[0m \\u001b[35m[\\u001b[0m\\n \\"num\\"\\n 1\\n 2\\n \\u001b[35m]\\u001b[0m\\n \\u001b[35m}\\u001b[0m"", +] +`; + +exports[`ConsoleLogWriter should pretty print the attributes 1`] = ` +[ + ""TRC obj \\n a: 1\\n b: 2"", + ""DBG arr \\n \\"a\\"\\n \\"b\\"\\n \\"c\\""", + ""INF nested \\n a: {\\n b: {\\n c: {\\n d: 1\\n }\\n }\\n }"", + ""WRN arr objs \\n {\\n a: 1\\n }\\n {\\n b: 2\\n }"", + ""ERR multlinestring \\n str: \\"a\\n b\\n c\\"\\n err: {\\n message: \\"woah!\\"\\n }"", + ""INF graphql \\n query: \\"\\n {\\n hi(howMany: 1) {\\n hello\\n world\\n }\\n }\\n \\""", +] +`; diff --git a/packages/logger/tests/legacyLogger.test.ts b/packages/logger/tests/legacyLogger.test.ts new file mode 100644 index 000000000..574074833 --- /dev/null +++ b/packages/logger/tests/legacyLogger.test.ts @@ -0,0 +1,94 @@ +import { LegacyLogger } from '@graphql-hive/logger'; +import { Logger as MeshLogger } from '@graphql-mesh/types'; +import { expect, it } from 'vitest'; +import { Logger, LoggerOptions } from '../src/logger'; +import { MemoryLogWriter } from '../src/writers'; + +// a type test making sure the LegacyLogger is compatible with the MeshLogger +export const _: MeshLogger = new LegacyLogger(null as any); + +function createTLogger(opts?: Partial) { + const writer = new MemoryLogWriter(); + return [ + LegacyLogger.from( + new Logger({ ...opts, writers: opts?.writers ? opts.writers : [writer] }), + ), + writer, + ] as const; +} + +it('should correctly write legacy logger logs', () => { + const [log, writer] = createTLogger(); + + log.info('hello world'); + log.info({ hello: 'world' }); + log.info('hello', { wor: 'ld' }); + log.info('hello', [{ wor: 'ld' }]); + log.info('hello', { w: 'o' }, { rl: 'd' }); + log.info('hello', 'world'); + + log.child('child ').info('hello child'); + log.child({ chi: 'ld' }).info('hello chi ld'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + "msg": "hello world", + }, + { + "attrs": { + "hello": "world", + }, + "level": "info", + }, + { + "attrs": [ + { + "wor": "ld", + }, + ], + "level": "info", + "msg": "hello", + }, + { + "attrs": [ + [ + { + "wor": "ld", + }, + ], + ], + "level": "info", + "msg": "hello", + }, + { + "attrs": [ + { + "w": "o", + }, + { + "rl": "d", + }, + ], + "level": "info", + "msg": "hello", + }, + { + "attrs": [ + "world", + ], + "level": "info", + "msg": "hello", + }, + { + "level": "info", + "msg": "child hello child", + }, + { + "level": "info", + "msg": "chi=ld hello chi ld", + }, + ] + `); +}); diff --git a/packages/logger/tests/logger.bench.ts b/packages/logger/tests/logger.bench.ts new file mode 100644 index 000000000..bd4a3eefa --- /dev/null +++ b/packages/logger/tests/logger.bench.ts @@ -0,0 +1,58 @@ +import { jsonStringify, Logger } from '@graphql-hive/logger'; +import { bench, describe } from 'vitest'; + +const voidlog = new Logger({ + writers: [ + { + write() { + // void + }, + }, + ], +}); + +describe.each([ + { name: 'string' as const, value: 'hello' }, + { name: 'integer' as const, value: 7 }, + { name: 'float' as const, value: 7.77 }, + { name: 'object' as const, value: { hello: 'world' } }, +])('log formatting of $name', ({ name, value }) => { + // we switch outside of the bench to avoid the overhead of the switch + switch (name) { + case 'string': + bench('template literals', () => { + voidlog.info(`hi there ${value}`); + }); + bench('interpolation', () => { + voidlog.info('hi there %s', value); + }); + break; + case 'integer': + bench('template literals', () => { + voidlog.info(`hi there ${value}`); + }); + bench('interpolation', () => { + voidlog.info('hi there %i', value); + }); + break; + case 'float': + bench('template literals', () => { + voidlog.info(`hi there ${value}`); + }); + bench('interpolation', () => { + voidlog.info('hi there %d', value); + }); + break; + case 'object': + bench('template literals native stringify', () => { + voidlog.info(`hi there ${JSON.stringify(value)}`); + }); + bench('template literals logger stringify', () => { + voidlog.info(`hi there ${jsonStringify(value)}`); + }); + bench('interpolation', () => { + voidlog.info('hi there %o', value); + }); + break; + } +}); diff --git a/packages/logger/tests/logger.test.ts b/packages/logger/tests/logger.test.ts new file mode 100644 index 000000000..d98ca15c3 --- /dev/null +++ b/packages/logger/tests/logger.test.ts @@ -0,0 +1,811 @@ +import { setTimeout } from 'node:timers/promises'; +import { expect, it, vi } from 'vitest'; +import { Logger, LoggerOptions } from '../src/logger'; +import { MemoryLogWriter } from '../src/writers'; +import { stableError } from './utils'; + +function createTLogger(opts?: Partial) { + const writer = new MemoryLogWriter(); + return [ + new Logger({ ...opts, writers: opts?.writers ? opts.writers : [writer] }), + writer, + ] as const; +} + +it('should write logs with levels, message and attributes', () => { + const [log, writter] = createTLogger(); + + const err = stableError(new Error('Woah!')); + + log.log('info'); + log.log('info', { hello: 'world', err }, 'Hello, world!'); + log.log('info', '2nd Hello, world!'); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + }, + { + "attrs": { + "err": { + "class": "Error", + "message": "Woah!", + "name": "Error", + "stack": "", + }, + "hello": "world", + }, + "level": "info", + "msg": "Hello, world!", + }, + { + "level": "info", + "msg": "2nd Hello, world!", + }, + ] + `); +}); + +it('should write logs only if level is higher than set', () => { + const [log, writter] = createTLogger({ + level: 'info', + }); + + log.trace('Trace'); + log.debug('Debug'); + log.info('Info'); + log.warn('Warn'); + log.error('Error'); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + "msg": "Info", + }, + { + "level": "warn", + "msg": "Warn", + }, + { + "level": "error", + "msg": "Error", + }, + ] + `); +}); + +it('should include attributes in child loggers', () => { + let [log, writter] = createTLogger(); + + log = log.child({ par: 'ent' }); + + log.info('hello'); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "par": "ent", + }, + "level": "info", + "msg": "hello", + }, + ] + `); +}); + +it('should include prefix in child loggers', () => { + let [log, writter] = createTLogger(); + + log = log.child('prefix '); + + log.info('hello'); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + "msg": "prefix hello", + }, + ] + `); +}); + +it('should include attributes and prefix in child loggers', () => { + let [log, writter] = createTLogger(); + + log = log.child({ par: 'ent' }, 'prefix '); + + log.info('hello'); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "par": "ent", + }, + "level": "info", + "msg": "prefix hello", + }, + ] + `); +}); + +it('should have child inherit parent log level', () => { + let [log, writter] = createTLogger({ level: 'warn' }); + + log = log.child({ par: 'ent' }); + + log.debug('no hello'); + log.info('still no hello'); + log.warn('hello'); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "par": "ent", + }, + "level": "warn", + "msg": "hello", + }, + ] + `); +}); + +it('should include attributes and prefix in nested child loggers', () => { + let [log, writter] = createTLogger(); + + log = log.child({ par: 'ent' }, 'prefix '); + log = log.child({ par2: 'ent2' }, 'prefix2 '); + + log.info('hello'); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "par": "ent", + "par2": "ent2", + }, + "level": "info", + "msg": "prefix prefix2 hello", + }, + ] + `); +}); + +it('should unwrap lazy attribute values', () => { + const [log, writter] = createTLogger(); + + log.info( + () => ({ + every: 'thing', + nested: { + lazy: () => 'nested lazy not unwrapped', + }, + }), + 'hello', + ); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "every": "thing", + "nested": { + "lazy": "[Function: lazy]", + }, + }, + "level": "info", + "msg": "hello", + }, + ] + `); +}); + +it('should not log lazy attributes returning nothing', () => { + const [log, writter] = createTLogger(); + + log.info(() => undefined, 'hello'); + log.info(() => null, 'wor'); + log.info(() => void 0, 'ld'); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + "msg": "hello", + }, + { + "level": "info", + "msg": "wor", + }, + { + "level": "info", + "msg": "ld", + }, + ] + `); +}); + +it('should not unwrap lazy attribute values', () => { + const [log, writter] = createTLogger(); + + log.info( + { + lazy: () => 'lazy', + nested: { + lazy: () => 'nested lazy', + }, + arr: [() => '0', '1'], + }, + 'hello', + ); + + expect(writter.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "arr": [ + "[Function: (anonymous)]", + "1", + ], + "lazy": "[Function: lazy]", + "nested": { + "lazy": "[Function: lazy]", + }, + }, + "level": "info", + "msg": "hello", + }, + ] + `); +}); + +it('should not unwrap lazy attributes if level is not to be logged', () => { + const [log] = createTLogger({ + level: 'info', + }); + + const lazy = vi.fn(() => ({ la: 'zy' })); + log.debug(lazy, 'hello'); + + expect(lazy).not.toHaveBeenCalled(); +}); + +it('should wait for async writers on flush', async () => { + const logs: any[] = []; + const log = new Logger({ + writers: [ + { + async write(level, attrs, msg) { + await setTimeout(10); + logs.push({ level, attrs, msg }); + }, + }, + ], + }); + + log.info('hello'); + log.info('world'); + + // not flushed yet + expect(logs).toMatchInlineSnapshot(`[]`); + + await log.flush(); + + // flushed + expect(logs).toMatchInlineSnapshot(` + [ + { + "attrs": undefined, + "level": "info", + "msg": "hello", + }, + { + "attrs": undefined, + "level": "info", + "msg": "world", + }, + ] + `); +}); + +it('should handle async write errors on flush', async () => { + const origConsoleError = console.error; + console.error = vi.fn(() => { + // noop + }); + using _ = { + [Symbol.dispose]() { + console.error = origConsoleError; + }, + }; + + let i = 0; + const log = new Logger({ + writers: [ + { + async write() { + i++; + throw new Error('Write failed! #' + i); + }, + }, + ], + }); + + // no fail + log.info('hello'); + log.info('world'); + + try { + await log.flush(); + throw new Error('should not have reached here'); + } catch (e) { + expect(e).toMatchInlineSnapshot( + `[AggregateError: Failed to flush 2 writes]`, + ); + expect((e as AggregateError).errors).toMatchInlineSnapshot(` + [ + [Error: Write failed! #1], + [Error: Write failed! #2], + ] + `); + expect(console.error).toHaveBeenCalledTimes(2); + } +}); + +it('should wait for async writers on async dispose', async () => { + const logs: any[] = []; + + { + await using log = new Logger({ + writers: [ + { + async write(level, attrs, msg) { + await setTimeout(10); + logs.push({ level, attrs, msg }); + }, + }, + ], + }); + + log.info('hello'); + log.info('world'); + + // not flushed yet + expect(logs).toMatchInlineSnapshot(`[]`); + } + + // flushed because scope ended and async dispose was called + expect(logs).toMatchInlineSnapshot(` + [ + { + "attrs": undefined, + "level": "info", + "msg": "hello", + }, + { + "attrs": undefined, + "level": "info", + "msg": "world", + }, + ] + `); +}); + +it('should log array attributes with object child attributes', () => { + let [log, writer] = createTLogger(); + + log = log.child({ hello: 'world' }); + log.info(['hello', 'world']); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": [ + { + "hello": "world", + }, + "hello", + "world", + ], + "level": "info", + }, + ] + `); +}); + +it('should log array child attributes with object attributes', () => { + let [log, writer] = createTLogger(); + + log = log.child(['hello', 'world']); + log.info({ hello: 'world' }); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": [ + "hello", + "world", + { + "hello": "world", + }, + ], + "level": "info", + }, + ] + `); +}); + +it('should log array child attributes with array attributes', () => { + let [log, writer] = createTLogger(); + + log = log.child(['hello', 'world']); + log.info(['more', 'life']); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": [ + "hello", + "world", + "more", + "life", + ], + "level": "info", + }, + ] + `); +}); + +it('should format string', () => { + const [log, writer] = createTLogger(); + + log.info('%o hello %s', { worldly: 1 }, 'world'); + log.info({ these: { are: 'attrs' } }, '%o hello %s', { worldly: 1 }, 'world'); + log.info('hello %s %j %d %o', 'world', { obj: true }, 4, { another: 'obj' }); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + "msg": "{"worldly":1} hello world", + }, + { + "attrs": { + "these": { + "are": "attrs", + }, + }, + "level": "info", + "msg": "{"worldly":1} hello world", + }, + { + "level": "info", + "msg": "hello world {"obj":true} 4 {"another":"obj"}", + }, + ] + `); +}); + +it('should write logs with unexpected attributes', () => { + const [log, writer] = createTLogger(); + + const err = stableError(new Error('Woah!')); + + log.info(err); + + log.info([err, { denis: 'badurina' }, ['hello'], 'world']); + + class MyClass { + constructor(public someprop: string) {} + get getsomeprop() { + return this.someprop; + } + } + log.info(new MyClass('hey')); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "class": "Error", + "message": "Woah!", + "name": "Error", + "stack": "", + }, + "level": "info", + }, + { + "attrs": [ + { + "class": "Error", + "message": "Woah!", + "name": "Error", + "stack": "", + }, + { + "denis": "badurina", + }, + [ + "hello", + ], + "world", + ], + "level": "info", + }, + { + "attrs": { + "class": "MyClass", + "getsomeprop": "hey", + "someprop": "hey", + }, + "level": "info", + }, + ] + `); +}); + +it('should serialise using the toJSON method', () => { + const [log, writer] = createTLogger(); + + class ToJSON { + toJSON() { + return { hello: 'world' }; + } + } + + log.info(new ToJSON(), 'hello'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "hello": "world", + }, + "level": "info", + "msg": "hello", + }, + ] + `); +}); + +it('should serialise error causes', () => { + const [log, writer] = createTLogger(); + + const cause = stableError(new Error('Cause')); + + const err = stableError(new Error('Woah!', { cause })); + + log.info(err, 'hello'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "cause": { + "class": "Error", + "message": "Cause", + "name": "Error", + "stack": "", + }, + "class": "Error", + "message": "Woah!", + "name": "Error", + "stack": "", + }, + "level": "info", + "msg": "hello", + }, + ] + `); +}); + +it('should gracefully handle Object.create(null)', () => { + const [log, writer] = createTLogger(); + + class NullConst { + constructor() { + return Object.create(null); + } + } + class NullProp { + someprop = Object.create(null); + } + + log.info({ class: new NullConst() }, 'hello'); + log.info(new NullProp(), 'world'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "class": {}, + }, + "level": "info", + "msg": "hello", + }, + { + "attrs": { + "class": "NullProp", + "someprop": {}, + }, + "level": "info", + "msg": "world", + }, + ] + `); +}); + +it('should handle circular references', () => { + const [log, writer] = createTLogger(); + + const obj = { circ: null as any }; + const circ = { + hello: 'world', + obj, + }; + obj.circ = circ; + + log.info(circ, 'circular'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "hello": "world", + "obj": { + "circ": { + "hello": "world", + "obj": "[Circular]", + }, + }, + }, + "level": "info", + "msg": "circular", + }, + ] + `); +}); + +it('should serialise aggregate errors', () => { + const [log, writer] = createTLogger(); + + const err1 = stableError(new Error('Woah!')); + + const err2 = stableError(new Error('Woah2!')); + + const aggErr = stableError( + new AggregateError([err1, err2], 'Woah Aggregate!'), + ); + + log.info(aggErr, 'aggregate'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "class": "AggregateError", + "errors": [ + { + "class": "Error", + "message": "Woah!", + "name": "Error", + "stack": "", + }, + { + "class": "Error", + "message": "Woah2!", + "name": "Error", + "stack": "", + }, + ], + "message": "Woah Aggregate!", + "name": "AggregateError", + "stack": "", + }, + "level": "info", + "msg": "aggregate", + }, + ] + `); +}); + +it('should change log level', () => { + const [log, writer] = createTLogger(); + + log.info('hello'); + log.setLevel('warn'); + log.info('no hello'); + log.warn('yes hello'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + "msg": "hello", + }, + { + "level": "warn", + "msg": "yes hello", + }, + ] + `); +}); + +it('should change root log level and propagate to child loggers', () => { + const [rootLog, writer] = createTLogger(); + + const childLog = rootLog.child('sub '); + + childLog.info('hello'); + rootLog.setLevel('warn'); + childLog.info('no hello'); + childLog.warn('yes hello'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + "msg": "sub hello", + }, + { + "level": "warn", + "msg": "sub yes hello", + }, + ] + `); +}); + +it('should change child log level only on child', () => { + const [rootLog, writer] = createTLogger(); + + const childLog = rootLog.child('sub '); + + childLog.setLevel('warn'); + rootLog.info('yes hello'); // should still log because root didnt change + childLog.info('no hello'); + childLog.warn('yes hello'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "level": "info", + "msg": "yes hello", + }, + { + "level": "warn", + "msg": "sub yes hello", + }, + ] + `); +}); + +it('should log using nodejs.util.inspect.custom symbol', () => { + const [log, writer] = createTLogger(); + + class Inspect { + [Symbol.for('nodejs.util.inspect.custom')]() { + return 'Ok good'; + } + } + + log.info(new Inspect(), 'sy'); + + expect(writer.logs).toMatchInlineSnapshot(` + [ + { + "attrs": { + "Symbol(nodejs.util.inspect.custom)": "Ok good", + "class": "Inspect", + }, + "level": "info", + "msg": "sy", + }, + ] + `); +}); diff --git a/packages/logger/tests/utils.ts b/packages/logger/tests/utils.ts new file mode 100644 index 000000000..1c448beca --- /dev/null +++ b/packages/logger/tests/utils.ts @@ -0,0 +1,20 @@ +/** Stabilises the error for snapshot testing */ +export function stableError(err: T): T { + if (globalThis.Bun) { + // bun serialises errors differently from node + // we need to remove some properties to make the snapshots match + // @ts-expect-error + delete err.column; + // @ts-expect-error + delete err.line; + // @ts-expect-error + delete err.originalColumn; + // @ts-expect-error + delete err.originalLine; + // @ts-expect-error + delete err.sourceURL; + } + // we remove the stack to make the snapshot stable + err.stack = ''; + return err; +} diff --git a/packages/logger/tests/writers.test.ts b/packages/logger/tests/writers.test.ts new file mode 100644 index 000000000..d3ae6227a --- /dev/null +++ b/packages/logger/tests/writers.test.ts @@ -0,0 +1,71 @@ +import { describe, expect, it } from 'vitest'; +import { Logger } from '../src/logger'; +import { + ConsoleLogWriter, + ConsoleLogWriterOptions, + jsonStringify, +} from '../src/writers'; + +describe('ConsoleLogWriter', () => { + function createTConsoleLogger(opts?: Partial) { + const logs: string[] = []; + const writer = new ConsoleLogWriter({ + console: { + debug: (...args: unknown[]) => { + logs.push(args.map((arg) => jsonStringify(arg)).join(' ')); + }, + info: (...args: unknown[]) => { + logs.push(args.map((arg) => jsonStringify(arg)).join(' ')); + }, + warn: (...args: unknown[]) => { + logs.push(args.map((arg) => jsonStringify(arg)).join(' ')); + }, + error: (...args: unknown[]) => { + logs.push(args.map((arg) => jsonStringify(arg)).join(' ')); + }, + }, + noTimestamp: true, + noColor: true, + ...opts, + }); + return [new Logger({ level: 'trace', writers: [writer] }), logs] as const; + } + + it('should pretty print the attributes', () => { + const [log, logs] = createTConsoleLogger(); + + log.trace({ a: 1, b: 2 }, 'obj'); + log.debug(['a', 'b', 'c'], 'arr'); + log.info({ a: { b: { c: { d: 1 } } } }, 'nested'); + log.warn([{ a: 1 }, { b: 2 }], 'arr objs'); + log.error({ str: 'a\nb\nc', err: { message: 'woah!' } }, 'multlinestring'); + + log.info( + { + query: ` +{ + hi(howMany: 1) { + hello + world + } +} +`, + }, + 'graphql', + ); + + expect(logs).toMatchSnapshot(); + }); + + it('should color levels and keys', () => { + const [log, logs] = createTConsoleLogger({ noColor: false }); + + log.trace({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + log.debug({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + log.info({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + log.warn({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + log.error({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + + expect(logs).toMatchSnapshot(); + }); +}); diff --git a/packages/nestjs/src/index.ts b/packages/nestjs/src/index.ts index e4f14f710..44e5be704 100644 --- a/packages/nestjs/src/index.ts +++ b/packages/nestjs/src/index.ts @@ -1,5 +1,6 @@ import { createGatewayRuntime, + createLoggerFromLogging, GatewayCLIBuiltinPluginConfig, GatewayConfigProxy, GatewayConfigSubgraph, @@ -11,10 +12,7 @@ import { PubSub, type GatewayRuntime, } from '@graphql-hive/gateway'; -import { - Logger as GatewayLogger, - type LazyLoggerMessage, -} from '@graphql-mesh/types'; +import { Logger as HiveLogger } from '@graphql-hive/logger'; import { asArray, type IResolvers, @@ -63,6 +61,7 @@ export class HiveGatewayDriver< private async ensureGatewayRuntime({ typeDefs, resolvers, + logging, ...options }: HiveGatewayDriverConfig) { if (this._gatewayRuntime) { @@ -78,14 +77,34 @@ export class HiveGatewayDriver< if (resolvers) { additionalResolvers.push(...asArray(resolvers)); } - const logger = new NestJSLoggerAdapter( - 'Hive Gateway', - {}, - new NestLogger('Hive Gateway'), - options.debug ?? truthy(process.env['DEBUG']), - ); + + let log: HiveLogger; + if (logging != null) { + log = createLoggerFromLogging(logging); + } else { + const nestLog = new NestLogger('Hive Gateway'); + log = new HiveLogger({ + writers: [ + { + write(level, attrs, msg) { + switch (level) { + case 'trace': + nestLog.verbose(msg, attrs); + break; + case 'info': + nestLog.log(msg, attrs); + break; + default: + nestLog[level](msg, attrs); + } + }, + }, + ], + }); + } + const configCtx = { - logger, + log, cwd: process.cwd(), pubsub: options.pubsub || new PubSub(), }; @@ -96,7 +115,7 @@ export class HiveGatewayDriver< }); this._gatewayRuntime = createGatewayRuntime({ ...options, - logging: configCtx.logger, + logging: configCtx.log, cache, graphqlEndpoint: options.path, additionalTypeDefs, @@ -287,100 +306,3 @@ export class HiveGatewayDriver< }); } } - -class NestJSLoggerAdapter implements GatewayLogger { - constructor( - public name: string, - private meta: Record, - private logger: NestLogger, - private isDebug: boolean, - ) {} - private prepareMessage(args: LazyLoggerMessage[]) { - const obj = { - ...(this.meta || {}), - }; - const strs: string[] = []; - const flattenedArgs = args - .flatMap((arg) => (typeof arg === 'function' ? arg() : arg)) - .flat(Number.POSITIVE_INFINITY); - for (const arg of flattenedArgs) { - if (typeof arg === 'string' || typeof arg === 'number') { - strs.push(arg.toString()); - } else { - Object.assign(obj, arg); - } - } - return { obj, str: strs.join(', ') }; - } - log(...args: any[]) { - const { obj, str } = this.prepareMessage(args); - if (Object.keys(obj).length) { - this.logger.log(obj, str); - } else { - this.logger.log(str); - } - } - info(...args: any[]) { - const { obj, str } = this.prepareMessage(args); - if (Object.keys(obj).length) { - this.logger.log(obj, str); - } else { - this.logger.log(str); - } - } - error(...args: any[]) { - const { obj, str } = this.prepareMessage(args); - if (Object.keys(obj).length) { - this.logger.error(obj, str); - } else { - this.logger.error(str); - } - } - warn(...args: any[]) { - const { obj, str } = this.prepareMessage(args); - if (Object.keys(obj).length) { - this.logger.warn(obj, str); - } else { - this.logger.warn(str); - } - } - debug(...args: any[]) { - if (!this.isDebug) { - return; - } - const { obj, str } = this.prepareMessage(args); - if (Object.keys(obj).length) { - this.logger.debug(obj, str); - } else { - this.logger.debug(str); - } - } - child( - newNameOrMeta: string | Record, - ): NestJSLoggerAdapter { - const newName = - typeof newNameOrMeta === 'string' - ? this.name - ? `${this.name}, ${newNameOrMeta}` - : newNameOrMeta - : this.name; - const newMeta = - typeof newNameOrMeta === 'string' - ? this.meta - : { ...this.meta, ...newNameOrMeta }; - return new NestJSLoggerAdapter( - newName, - newMeta, - new NestLogger(newName), - this.isDebug, - ); - } -} - -function truthy(val: unknown) { - return ( - val === true || - val === 1 || - ['1', 't', 'true', 'y', 'yes'].includes(String(val)) - ); -} diff --git a/packages/plugins/hmac-upstream-signature/src/index.ts b/packages/plugins/hmac-upstream-signature/src/index.ts index 3682c43c5..4bec1c30d 100644 --- a/packages/plugins/hmac-upstream-signature/src/index.ts +++ b/packages/plugins/hmac-upstream-signature/src/index.ts @@ -1,4 +1,6 @@ import type { GatewayPlugin } from '@graphql-hive/gateway-runtime'; +import type { Logger } from '@graphql-hive/logger'; +import { loggerForRequest } from '@graphql-hive/logger/request'; import type { OnSubgraphExecutePayload } from '@graphql-mesh/fusion-runtime'; import { serializeExecutionRequest } from '@graphql-tools/executor-common'; import type { ExecutionRequest } from '@graphql-tools/utils'; @@ -9,7 +11,6 @@ import { import type { FetchAPI, GraphQLParams, - YogaLogger, Plugin as YogaPlugin, } from 'graphql-yoga'; import jsonStableStringify from 'json-stable-stringify'; @@ -87,23 +88,22 @@ export function useHmacUpstreamSignature( let key$: MaybePromise; let fetchAPI: FetchAPI; let textEncoder: TextEncoder; - let yogaLogger: YogaLogger; return { onYogaInit({ yoga }) { fetchAPI = yoga.fetchAPI; - yogaLogger = yoga.logger; }, onSubgraphExecute({ subgraphName, subgraph, executionRequest, - logger = yogaLogger, + log: rootLog, }) { - logger?.debug(`running shouldSign for subgraph ${subgraphName}`); + const log = rootLog.child('[useHmacUpstreamSignature] '); + log.debug(`Running shouldSign for subgraph ${subgraphName}`); if (shouldSign({ subgraphName, subgraph, executionRequest })) { - logger?.debug( + log.debug( `shouldSign is true for subgraph ${subgraphName}, signing request`, ); textEncoder ||= new fetchAPI.TextEncoder(); @@ -128,8 +128,12 @@ export function useHmacUpstreamSignature( const extensionValue = fetchAPI.btoa( String.fromCharCode(...new Uint8Array(signature)), ); - logger?.debug( - `produced hmac signature for subgraph ${subgraphName}, signature: ${extensionValue}, signed payload: ${serializedExecutionRequest}`, + log.debug( + { + signature: extensionValue, + payload: serializedExecutionRequest, + }, + `Produced hmac signature for subgraph ${subgraphName}`, ); if (!executionRequest.extensions) { @@ -141,7 +145,7 @@ export function useHmacUpstreamSignature( }, ); } else { - logger?.debug( + log.debug( `shouldSign is false for subgraph ${subgraphName}, skipping hmac signature`, ); } @@ -150,6 +154,7 @@ export function useHmacUpstreamSignature( } export type HMACUpstreamSignatureValidationOptions = { + log: Logger; secret: string; extensionName?: string; serializeParams?: (params: GraphQLParams) => string; @@ -167,22 +172,17 @@ export function useHmacSignatureValidation( const extensionName = options.extensionName || DEFAULT_EXTENSION_NAME; let key$: MaybePromise; let textEncoder: TextEncoder; - let logger: YogaLogger; const paramsSerializer = options.serializeParams || defaultParamsSerializer; return { - onYogaInit({ yoga }) { - logger = yoga.logger; - }, - onParams({ params, fetchAPI }) { + onParams({ params, fetchAPI, request }) { + const log = loggerForRequest(options.log, request).child( + '[useHmacSignatureValidation] ', + ); textEncoder ||= new fetchAPI.TextEncoder(); const extension = params.extensions?.[extensionName]; if (!extension) { - logger.warn( - `Missing HMAC signature: extension ${extensionName} not found in request.`, - ); - throw new Error( `Missing HMAC signature: extension ${extensionName} not found in request.`, ); @@ -202,8 +202,9 @@ export function useHmacSignatureValidation( c.charCodeAt(0), ); const serializedParams = paramsSerializer(params); - logger.debug( - `HMAC signature will be calculate based on serialized params: ${serializedParams}`, + log.debug( + { serializedParams }, + 'HMAC signature will be calculate based on serialized params', ); return handleMaybePromise( @@ -216,10 +217,9 @@ export function useHmacSignatureValidation( ), (result) => { if (!result) { - logger.error( - `HMAC signature does not match the body content. short circuit request.`, + log.error( + 'HMAC signature does not match the body content. short circuit request.', ); - throw new Error( `Invalid HMAC signature: extension ${extensionName} does not match the body content.`, ); diff --git a/packages/plugins/hmac-upstream-signature/tests/hmac-upstream-signature.spec.ts b/packages/plugins/hmac-upstream-signature/tests/hmac-upstream-signature.spec.ts index 2100ecfcc..a14d9c586 100644 --- a/packages/plugins/hmac-upstream-signature/tests/hmac-upstream-signature.spec.ts +++ b/packages/plugins/hmac-upstream-signature/tests/hmac-upstream-signature.spec.ts @@ -4,6 +4,7 @@ import { GatewayPlugin, useCustomFetch, } from '@graphql-hive/gateway-runtime'; +import { Logger } from '@graphql-hive/logger'; import { getUnifiedGraphGracefully } from '@graphql-mesh/fusion-composition'; import { MeshFetch } from '@graphql-mesh/types'; import { GraphQLSchema, stripIgnoredCharacters } from 'graphql'; @@ -61,6 +62,7 @@ for (const [name, createConfig] of Object.entries(cases)) { ...createConfig(upstreamSchema), plugins: () => [ useHmacSignatureValidation({ + log: new Logger({ level: false }), secret: 'topSecret', }), useCustomFetch(upstream.fetch as MeshFetch), @@ -119,6 +121,7 @@ for (const [name, createConfig] of Object.entries(cases)) { schema: upstreamSchema, plugins: [ useHmacSignatureValidation({ + log: new Logger({ level: false }), secret: sharedSecret, }), ], diff --git a/packages/plugins/jwt-auth/src/index.ts b/packages/plugins/jwt-auth/src/index.ts index 001373555..351ebbb82 100644 --- a/packages/plugins/jwt-auth/src/index.ts +++ b/packages/plugins/jwt-auth/src/index.ts @@ -76,7 +76,7 @@ export function useJWT( executionRequest, subgraphName, setExecutionRequest, - logger, + log, }) { if (shouldForward && executionRequest.context?.jwt) { const jwtData: Partial = { @@ -86,9 +86,9 @@ export function useJWT( token: forwardToken ? executionRequest.context.jwt.token : undefined, }; - logger?.debug( - `Forwarding JWT payload to subgraph ${subgraphName}, payload: `, - jwtData.payload, + log.debug( + { payload: jwtData.payload }, + `[useJWT] Forwarding JWT payload to subgraph ${subgraphName}`, ); setExecutionRequest({ diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 799883c3f..8b5977d2d 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -1,7 +1,7 @@ import { getRetryInfo, isRetryExecutionRequest, - type GatewayConfigContext, + Logger, type GatewayPlugin, } from '@graphql-hive/gateway-runtime'; import { getHeadersObj } from '@graphql-mesh/utils'; @@ -37,7 +37,6 @@ import { WebTracerProvider, } from '@opentelemetry/sdk-trace-web'; import { unfakePromise } from '@whatwg-node/promise-helpers'; -import { YogaLogger } from 'graphql-yoga'; import { ATTR_SERVICE_VERSION, SEMRESATTRS_SERVICE_NAME } from './attributes'; import { getContextManager, OtelContextStack } from './context'; import { @@ -278,7 +277,7 @@ export type OpenTelemetryPlugin = export function useOpenTelemetry( options: OpenTelemetryGatewayPluginOptions & { - logger?: GatewayConfigContext['logger']; + log: Logger; }, ): OpenTelemetryPlugin { const inheritContext = options.inheritContext ?? true; @@ -312,14 +311,10 @@ export function useOpenTelemetry( return specificState?.current ?? ROOT_CONTEXT; } - const yogaLogger = createDeferred(); - let pluginLogger = options.logger - ? fakePromise( - options.logger.child({ - plugin: 'OpenTelemetry', - }), - ) - : yogaLogger.promise; + const logger = createDeferred(); + let pluginLogger = options.log + ? fakePromise(options.log.child('[useOpenTelemetry] ')) + : logger.promise; function init(): Promise { if ('initializeNodeSDK' in options && options.initializeNodeSDK === false) { @@ -394,14 +389,14 @@ export function useOpenTelemetry( }), ); preparation$ = fakePromise(); - return pluginLogger.then((logger) => { - pluginLogger = fakePromise(logger); - logger.debug( + return pluginLogger.then((log) => { + pluginLogger = fakePromise(log); + log.debug( `context manager is ${useContextManager ? 'enabled' : 'disabled'}`, ); if (!useContextManager) { if (options.spans?.schema) { - logger.warn( + log.warn( 'Schema loading spans are disabled because no context manager is available', ); } @@ -411,15 +406,15 @@ export function useOpenTelemetry( diag.setLogger( { error: (message, ...args) => - logger.error('[otel-diag] ' + message, ...args), + log.error('[otel-diag] ' + message, ...args), warn: (message, ...args) => - logger.warn('[otel-diag] ' + message, ...args), + log.warn('[otel-diag] ' + message, ...args), info: (message, ...args) => - logger.info('[otel-diag] ' + message, ...args), + log.info('[otel-diag] ' + message, ...args), debug: (message, ...args) => - logger.debug('[otel-diag] ' + message, ...args), + log.debug('[otel-diag] ' + message, ...args), verbose: (message, ...args) => - logger.debug('[otel-diag] ' + message, ...args), + log.debug('[otel-diag] ' + message, ...args), }, options.diagLevel ?? DiagLogLevel.VERBOSE, ); @@ -756,7 +751,7 @@ export function useOpenTelemetry( onYogaInit({ yoga }) { yogaVersion.resolve(yoga.version); - yogaLogger.resolve(yoga.logger); + logger.resolve(options.log); }, onEnveloped({ state, extendContext }) { diff --git a/packages/plugins/opentelemetry/tests/yoga.spec.ts b/packages/plugins/opentelemetry/tests/yoga.spec.ts index 8e17c5c15..0dfe37b4f 100644 --- a/packages/plugins/opentelemetry/tests/yoga.spec.ts +++ b/packages/plugins/opentelemetry/tests/yoga.spec.ts @@ -1,3 +1,4 @@ +import { Logger } from '@graphql-hive/logger'; import { useOpenTelemetry } from '@graphql-mesh/plugin-opentelemetry'; import { createSchema, createYoga, Plugin as YogaPlugin } from 'graphql-yoga'; import { beforeEach, describe, expect, it, vi } from 'vitest'; @@ -34,6 +35,7 @@ describe('useOpenTelemetry', () => { const otelPlugin = useOpenTelemetry({ initializeNodeSDK: false, contextManager, + log: new Logger({ level: false }), }); const yoga = createYoga({ diff --git a/packages/plugins/prometheus/package.json b/packages/plugins/prometheus/package.json index 874c3c781..6bebe0459 100644 --- a/packages/plugins/prometheus/package.json +++ b/packages/plugins/prometheus/package.json @@ -44,6 +44,7 @@ }, "dependencies": { "@graphql-hive/gateway-runtime": "workspace:^", + "@graphql-hive/logger": "workspace:^", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/types": "^0.104.5", "@graphql-mesh/utils": "^0.104.5", diff --git a/packages/plugins/prometheus/src/index.ts b/packages/plugins/prometheus/src/index.ts index 00e2aa24b..3918ac141 100644 --- a/packages/plugins/prometheus/src/index.ts +++ b/packages/plugins/prometheus/src/index.ts @@ -1,12 +1,11 @@ -import { type GatewayPlugin } from '@graphql-hive/gateway-runtime'; +import type { GatewayPlugin, OnFetchHook } from '@graphql-hive/gateway-runtime'; +import type { Logger } from '@graphql-hive/logger'; import type { OnSubgraphExecuteHook } from '@graphql-mesh/fusion-runtime'; import type { TransportEntry } from '@graphql-mesh/transport-common'; import type { ImportFn, - Logger, MeshFetchRequestInit, MeshPlugin, - OnFetchHook, } from '@graphql-mesh/types'; import { defaultImportFn, @@ -140,12 +139,11 @@ type MeshMetricsConfig = { */ fetchResponseHeaders?: boolean | string[]; }; - /** * The logger instance used by the plugin to log messages. * This should be the logger instance provided by Mesh in the plugins context. */ - logger: Logger; + log: Logger; }; export type PrometheusPluginOptions = PrometheusTracingPluginConfig & @@ -369,7 +367,7 @@ export default function useMeshPrometheus( } function registryFromYamlConfig( - config: YamlConfig & { logger: Logger }, + config: YamlConfig & { log: Logger }, ): Registry { if (!config.registry) { throw new Error('Registry not defined in the YAML config'); @@ -393,7 +391,9 @@ function registryFromYamlConfig( registry$ .then(() => registryProxy.revoke()) - .catch((e) => config.logger.error(e)); + .catch((e) => + config.log.error(e, '[usePrometheus] Failed to load Prometheus registry'), + ); return registryProxy.proxy; } diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 5efed7971..fcf43e66b 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -47,8 +47,9 @@ "@envelop/core": "^5.3.0", "@envelop/disable-introspection": "^8.0.0", "@envelop/generic-auth": "^9.0.0", + "@envelop/instrumentation": "^1.0.0", "@graphql-hive/core": "^0.13.0", - "@graphql-hive/logger-json": "workspace:^", + "@graphql-hive/logger": "workspace:^", "@graphql-hive/pubsub": "workspace:^", "@graphql-hive/signal": "workspace:^", "@graphql-hive/yoga": "^0.42.2", diff --git a/packages/runtime/src/createGatewayRuntime.ts b/packages/runtime/src/createGatewayRuntime.ts index be449f2c8..903c6abb7 100644 --- a/packages/runtime/src/createGatewayRuntime.ts +++ b/packages/runtime/src/createGatewayRuntime.ts @@ -9,6 +9,7 @@ import { createSchemaFetcher, createSupergraphSDLFetcher, } from '@graphql-hive/core'; +import { LegacyLogger } from '@graphql-hive/logger'; import type { OnDelegationPlanHook, OnDelegationStageExecuteHook, @@ -27,19 +28,13 @@ import { import { useHmacUpstreamSignature } from '@graphql-mesh/hmac-upstream-signature'; import useMeshResponseCache from '@graphql-mesh/plugin-response-cache'; import { TransportContext } from '@graphql-mesh/transport-common'; -import type { - KeyValueCache, - OnDelegateHook, - OnFetchHook, -} from '@graphql-mesh/types'; +import type { KeyValueCache, OnDelegateHook } from '@graphql-mesh/types'; import { dispose, getHeadersObj, getInContextSDK, isDisposable, isUrl, - LogLevel, - wrapFetchWithHooks, } from '@graphql-mesh/utils'; import { batchDelegateToSchema } from '@graphql-tools/batch-delegate'; import { @@ -84,8 +79,8 @@ import { type LandingPageRenderer, type YogaServerInstance, } from 'graphql-yoga'; +import { createLoggerFromLogging } from './createLoggerFromLogging'; import { createGraphOSFetcher } from './fetchers/graphos'; -import { handleLoggingConfig } from './getDefaultLogger'; import { getProxyExecutor } from './getProxyExecutor'; import { getReportingPlugin } from './getReportingPlugin'; import { @@ -119,6 +114,7 @@ import type { OnCacheDeleteHook, OnCacheGetHook, OnCacheSetHook, + OnFetchHook, UnifiedGraphConfig, } from './types'; import { @@ -127,6 +123,7 @@ import { getExecuteFnFromExecutor, wrapCacheWithHooks, } from './utils'; +import { wrapFetchWithHooks } from './wrapFetchWithHooks'; export type GatewayRuntime< TContext extends Record = Record, @@ -139,7 +136,7 @@ export function createGatewayRuntime< TContext extends Record = Record, >(config: GatewayConfig): GatewayRuntime { let fetchAPI = config.fetchAPI; - const logger = handleLoggingConfig(config.logging); + const log = createLoggerFromLogging(config.logging); let instrumentation: GatewayPlugin['instrumentation']; @@ -149,8 +146,8 @@ export function createGatewayRuntime< const onCacheDeleteHooks: OnCacheDeleteHook[] = []; const wrappedFetchFn = wrapFetchWithHooks( onFetchHooks, + log, () => instrumentation, - logger, ); const wrappedCache: KeyValueCache | undefined = config.cache ? wrapCacheWithHooks({ @@ -165,7 +162,7 @@ export function createGatewayRuntime< const configContext: GatewayConfigContext = { fetch: wrappedFetchFn, - logger, + log, cwd: config.cwd || (typeof process !== 'undefined' ? process.cwd() : ''), cache: wrappedCache, pubsub, @@ -205,9 +202,7 @@ export function createGatewayRuntime< persistedDocumentsPlugin = useHiveConsole({ ...configContext, enabled: false, // disables only usage reporting - logger: configContext.logger.child({ - plugin: 'Hive Persisted Documents', - }), + log: configContext.log.child('[useHiveConsole.persistedDocuments] '), experimental__persistedDocuments: { cdn: { endpoint: config.persistedDocuments.endpoint, @@ -272,7 +267,9 @@ export function createGatewayRuntime< const fetcher = createSchemaFetcher({ endpoint, key, - logger: configContext.logger.child({ source: 'Hive CDN' }), + logger: LegacyLogger.from( + configContext.log.child('[hiveSchemaFetcher] '), + ), }); schemaFetcher = function fetchSchemaFromCDN() { pausePolling(); @@ -341,7 +338,7 @@ export function createGatewayRuntime< return true; }, (err) => { - configContext.logger.warn(`Failed to introspect schema`, err); + configContext.log.warn(`Failed to introspect schema`, err); return true; }, ); @@ -473,7 +470,10 @@ export function createGatewayRuntime< const onSubgraphExecute = getOnSubgraphExecute({ onSubgraphExecuteHooks, ...(config.transports ? { transports: config.transports } : {}), - transportContext: configContext, + transportContext: { + ...configContext, + logger: LegacyLogger.from(configContext.log), + }, transportEntryMap, getSubgraphSchema() { return unifiedGraph; @@ -635,7 +635,7 @@ export function createGatewayRuntime< unifiedGraph, // @ts-expect-error - Typings are wrong in legacy Mesh [subschemaConfig], - configContext.logger, + LegacyLogger.from(configContext.log), onDelegateHooks, ), ); @@ -669,7 +669,8 @@ export function createGatewayRuntime< const fetcher = createSupergraphSDLFetcher({ endpoint, key, - logger: configContext.logger.child({ source: 'Hive CDN' }), + log: configContext.log.child('[hiveSupergraphFetcher] '), + // @ts-expect-error - MeshFetch is not compatible with `typeof fetch` fetchImplementation: configContext.fetch, }); @@ -694,10 +695,10 @@ export function createGatewayRuntime< // local or remote if (!isDynamicUnifiedGraphSchema(config.supergraph)) { // no polling for static schemas - logger.debug(`Disabling polling for static supergraph`); + log.debug(`Disabling polling for static supergraph`); delete config.pollingInterval; } else if (!config.pollingInterval) { - logger.debug( + log.debug( `Polling interval not set for supergraph, if you want to get updates of supergraph, we recommend setting a polling interval`, ); } @@ -732,7 +733,10 @@ export function createGatewayRuntime< transports: config.transports, transportEntryAdditions: config.transportEntries, pollingInterval: config.pollingInterval, - transportContext: configContext, + transportContext: { + ...configContext, + logger: LegacyLogger.from(configContext.log), + }, onDelegateHooks, onSubgraphExecuteHooks, onDelegationPlanHooks, @@ -744,24 +748,22 @@ export function createGatewayRuntime< }); getSchema = () => unifiedGraphManager.getUnifiedGraph(); readinessChecker = () => { - const logger = configContext.logger.child('readiness'); - logger.debug(`checking`); + const log = configContext.log.child('[readiness] '); + log.debug('checking'); return handleMaybePromise( () => unifiedGraphManager.getUnifiedGraph(), (schema) => { if (!schema) { - logger.debug( - `failed because supergraph has not been loaded yet or failed to load`, + log.debug( + 'failed because supergraph has not been loaded yet or failed to load', ); return false; } - logger.debug('passed'); + log.debug('passed'); return true; }, (err) => { - logger.error( - `failed due to errors on loading supergraph:\n${err.stack || err.message}`, - ); + log.error(err, 'loading supergraph failed due to errors'); return false; }, ); @@ -1022,7 +1024,7 @@ export function createGatewayRuntime< readinessCheckPlugin, registryPlugin, persistedDocumentsPlugin, - useRetryOnSchemaReload({ logger }), + useRetryOnSchemaReload({ log }), ]; if (config.subgraphErrors !== false) { @@ -1151,23 +1153,21 @@ export function createGatewayRuntime< let isDebug: boolean = false; - if ('level' in logger) { - if (logger.level === 'debug' || logger.level === LogLevel.debug) { - isDebug = true; - } + if (config.logging === 'debug') { + isDebug = true; } else { - logger.debug(() => { + // we use the logger's debug option because the extra plugins only add more logs + log.debug(() => { isDebug = true; - return 'Debug mode enabled'; - }); + }, 'Debug mode enabled'); } if (isDebug) { extraPlugins.push( - useSubgraphExecuteDebug(configContext), - useFetchDebug(configContext), - useDelegationPlanDebug(configContext), - useCacheDebug(configContext), + useSubgraphExecuteDebug(), + useFetchDebug(), + useDelegationPlanDebug(), + useCacheDebug({ log: configContext.log }), ); } @@ -1176,7 +1176,7 @@ export function createGatewayRuntime< schema: unifiedGraph, // @ts-expect-error MeshFetch is not compatible with YogaFetch fetchAPI: config.fetchAPI, - logging: logger, + logging: log, plugins: [ ...basePlugins, ...extraPlugins, diff --git a/packages/runtime/src/createLoggerFromLogging.ts b/packages/runtime/src/createLoggerFromLogging.ts new file mode 100644 index 000000000..2460e956a --- /dev/null +++ b/packages/runtime/src/createLoggerFromLogging.ts @@ -0,0 +1,13 @@ +import { Logger, LogLevel } from '@graphql-hive/logger'; + +export function createLoggerFromLogging( + logging: boolean | Logger | LogLevel | undefined, +) { + if (logging == null || typeof logging === 'boolean') { + return new Logger({ level: logging === false ? false : 'info' }); + } + if (typeof logging === 'string') { + return new Logger({ level: logging }); + } + return logging; +} diff --git a/packages/runtime/src/fetchers/graphos.ts b/packages/runtime/src/fetchers/graphos.ts index 29ae7c273..8894bb939 100644 --- a/packages/runtime/src/fetchers/graphos.ts +++ b/packages/runtime/src/fetchers/graphos.ts @@ -56,8 +56,8 @@ export function createGraphOSFetcher({ graphosOpts.upLink || process.env['APOLLO_SCHEMA_CONFIG_DELIVERY_ENDPOINT']; const uplinks = uplinksParam?.split(',').map((uplink) => uplink.trim()) || DEFAULT_UPLINKS; - const graphosLogger = configContext.logger.child({ source: 'GraphOS' }); - graphosLogger.info('Using GraphOS with uplinks ', ...uplinks); + const log = configContext.log.child('[apolloGraphOSSupergraphFetcher] '); + log.info({ uplinks }, 'Using uplinks'); let supergraphLoadedPlace = defaultLoadedPlacePrefix; if (graphosOpts.graphRef) { supergraphLoadedPlace += `
${graphosOpts.graphRef}`; @@ -80,8 +80,8 @@ export function createGraphOSFetcher({ const currentTime = Date.now(); if (nextFetchTime >= currentTime) { const delay = nextFetchTime - currentTime; - graphosLogger.info( - `Fetching supergraph with delay: ${millisecondsToStr(delay)}`, + log.info( + `Fetching supergraph with delay ${millisecondsToStr(delay)}`, ); nextFetchTime = 0; return delayInMs(delay).then(fetchSupergraph); @@ -101,8 +101,8 @@ export function createGraphOSFetcher({ if (maxRetries > 1) { attemptMetadata['attempt'] = `${maxRetries - retries}/${maxRetries}`; } - const attemptLogger = graphosLogger.child(attemptMetadata); - attemptLogger.debug(`Fetching supergraph`); + const attemptLogger = log.child(attemptMetadata); + attemptLogger.debug('Fetching supergraph'); return handleMaybePromise( () => fetchSupergraphSdlFromManagedFederation({ diff --git a/packages/runtime/src/getDefaultLogger.ts b/packages/runtime/src/getDefaultLogger.ts deleted file mode 100644 index 037f779b6..000000000 --- a/packages/runtime/src/getDefaultLogger.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { JSONLogger } from '@graphql-hive/logger-json'; -import { process } from '@graphql-mesh/cross-helpers'; -import { Logger } from '@graphql-mesh/types'; -import { DefaultLogger, LogLevel } from '@graphql-mesh/utils'; - -export function getDefaultLogger(opts?: { name?: string; level?: LogLevel }) { - const logFormat = process.env['LOG_FORMAT'] || (globalThis as any).LOG_FORMAT; - if (logFormat) { - if (logFormat.toLowerCase() === 'json') { - return new JSONLogger(opts); - } else if (logFormat.toLowerCase() === 'pretty') { - return new DefaultLogger(opts?.name, opts?.level); - } - } - const nodeEnv = process.env['NODE_ENV'] || (globalThis as any).NODE_ENV; - if (nodeEnv === 'production') { - return new JSONLogger(opts); - } - return new DefaultLogger(opts?.name, opts?.level); -} - -export function handleLoggingConfig( - loggingConfig: - | boolean - | Logger - | LogLevel - | keyof typeof LogLevel - | undefined, - existingLogger?: Logger, -) { - if (typeof loggingConfig === 'object') { - return loggingConfig; - } - if (typeof loggingConfig === 'boolean') { - if (!loggingConfig) { - if (existingLogger && 'logLevel' in existingLogger) { - existingLogger.logLevel = LogLevel.silent; - return existingLogger; - } - return getDefaultLogger({ - name: existingLogger?.name, - level: LogLevel.silent, - }); - } - } - if (typeof loggingConfig === 'number') { - if (existingLogger && 'logLevel' in existingLogger) { - existingLogger.logLevel = loggingConfig; - return existingLogger; - } - return getDefaultLogger({ - name: existingLogger?.name, - level: loggingConfig, - }); - } - if (typeof loggingConfig === 'string') { - if (existingLogger && 'logLevel' in existingLogger) { - existingLogger.logLevel = LogLevel[loggingConfig]; - return existingLogger; - } - return getDefaultLogger({ - name: existingLogger?.name, - level: LogLevel[loggingConfig], - }); - } - return existingLogger || getDefaultLogger(); -} diff --git a/packages/runtime/src/getProxyExecutor.ts b/packages/runtime/src/getProxyExecutor.ts index ec219dbf4..acbc52fad 100644 --- a/packages/runtime/src/getProxyExecutor.ts +++ b/packages/runtime/src/getProxyExecutor.ts @@ -1,3 +1,4 @@ +import { LegacyLogger } from '@graphql-hive/logger'; import type { Instrumentation, OnSubgraphExecuteHook, @@ -42,7 +43,10 @@ export function getProxyExecutor>({ return fakeTransportEntryMap[subgraphNameProp]; }, }), - transportContext: configContext, + transportContext: { + ...configContext, + logger: LegacyLogger.from(configContext.log), + }, getSubgraphSchema: getSchema, transportExecutorStack, transports: config.transports, diff --git a/packages/runtime/src/getReportingPlugin.ts b/packages/runtime/src/getReportingPlugin.ts index 367a3bed8..8540f7bde 100644 --- a/packages/runtime/src/getReportingPlugin.ts +++ b/packages/runtime/src/getReportingPlugin.ts @@ -30,7 +30,7 @@ export function getReportingPlugin>( return { name: 'Hive', plugin: useHiveConsole({ - logger: configContext.logger.child({ reporting: 'Hive' }), + log: configContext.log.child('[useHiveConsole] '), enabled: true, ...reporting, ...(usage ? { usage } : {}), diff --git a/packages/runtime/src/handleUnifiedGraphConfig.ts b/packages/runtime/src/handleUnifiedGraphConfig.ts index 40bb3249f..fb39c7788 100644 --- a/packages/runtime/src/handleUnifiedGraphConfig.ts +++ b/packages/runtime/src/handleUnifiedGraphConfig.ts @@ -1,3 +1,4 @@ +import { LegacyLogger } from '@graphql-hive/logger'; import { UnifiedGraphManagerOptions } from '@graphql-mesh/fusion-runtime'; import { defaultImportFn, isUrl, readFileOrUrl } from '@graphql-mesh/utils'; import { defaultPrintFn } from '@graphql-tools/executor-common'; @@ -51,7 +52,7 @@ export function handleUnifiedGraphSchema( return readFileOrUrl(unifiedGraphSchema, { fetch: configContext.fetch, cwd: configContext.cwd, - logger: configContext.logger, + logger: LegacyLogger.from(configContext.log), allowUnknownExtensions: true, importFn: defaultImportFn, }); diff --git a/packages/runtime/src/index.ts b/packages/runtime/src/index.ts index b110fa61a..fe34d3970 100644 --- a/packages/runtime/src/index.ts +++ b/packages/runtime/src/index.ts @@ -1,7 +1,7 @@ export * from './createGatewayRuntime'; -export { LogLevel, DefaultLogger } from '@graphql-mesh/utils'; -export { JSONLogger } from '@graphql-hive/logger-json'; export type * from './types'; +export * from '@graphql-hive/logger'; +export * from './createLoggerFromLogging'; export * from './plugins/useCustomFetch'; export * from './plugins/useStaticFiles'; export * from './getProxyExecutor'; @@ -20,4 +20,3 @@ export { } from './plugins/useUpstreamRetry'; export { useUpstreamTimeout } from './plugins/useUpstreamTimeout'; export { getGraphQLWSOptions } from './getGraphQLWSOptions'; -export * from './getDefaultLogger'; diff --git a/packages/runtime/src/plugins/useCacheDebug.ts b/packages/runtime/src/plugins/useCacheDebug.ts index 480bf4da0..304ba8a74 100644 --- a/packages/runtime/src/plugins/useCacheDebug.ts +++ b/packages/runtime/src/plugins/useCacheDebug.ts @@ -1,48 +1,52 @@ -import { Logger } from '@graphql-mesh/types'; +import type { Logger } from '@graphql-hive/logger'; import { GatewayPlugin } from '../types'; -export function useCacheDebug>(opts: { - logger: Logger; +export function useCacheDebug>({ + log: rootLog, +}: { + log: Logger; }): GatewayPlugin { return { + onContextBuilding({ context }) { + // onContextBuilding might not execute at all so we use the root log + rootLog = context.log; + }, onCacheGet({ key }) { + const log = rootLog.child({ key }, '[useCacheDebug] '); + log.debug('Get'); return { onCacheGetError({ error }) { - const cacheGetErrorLogger = opts.logger.child('cache-get-error'); - cacheGetErrorLogger.error({ key, error }); + log.error({ key, error }, 'Error'); }, onCacheHit({ value }) { - const cacheHitLogger = opts.logger.child('cache-hit'); - cacheHitLogger.debug({ key, value }); + log.debug({ key, value }, 'Hit'); }, onCacheMiss() { - const cacheMissLogger = opts.logger.child('cache-miss'); - cacheMissLogger.debug({ key }); + log.debug({ key }, 'Miss'); }, }; }, onCacheSet({ key, value, ttl }) { + const log = rootLog.child({ key, value, ttl }, '[useCacheDebug] '); + log.debug('Set'); return { onCacheSetError({ error }) { - const cacheSetErrorLogger = opts.logger.child('cache-set-error'); - cacheSetErrorLogger.error({ key, value, ttl, error }); + log.error({ error }, 'Error'); }, onCacheSetDone() { - const cacheSetDoneLogger = opts.logger.child('cache-set-done'); - cacheSetDoneLogger.debug({ key, value, ttl }); + log.debug('Done'); }, }; }, onCacheDelete({ key }) { + const log = rootLog.child({ key }, '[useCacheDebug] '); + log.debug('Delete'); return { onCacheDeleteError({ error }) { - const cacheDeleteErrorLogger = - opts.logger.child('cache-delete-error'); - cacheDeleteErrorLogger.error({ key, error }); + log.error({ error }, 'Error'); }, onCacheDeleteDone() { - const cacheDeleteDoneLogger = opts.logger.child('cache-delete-done'); - cacheDeleteDoneLogger.debug({ key }); + log.debug('Done'); }, }; }, diff --git a/packages/runtime/src/plugins/useCustomAgent.ts b/packages/runtime/src/plugins/useCustomAgent.ts index 8211b3dc6..3f61a2cb5 100644 --- a/packages/runtime/src/plugins/useCustomAgent.ts +++ b/packages/runtime/src/plugins/useCustomAgent.ts @@ -2,8 +2,11 @@ import type { Agent as HttpAgent } from 'node:http'; // eslint-disable-next-line import/no-nodejs-modules import type { Agent as HttpsAgent } from 'node:https'; -import type { OnFetchHookPayload } from '@graphql-mesh/types'; -import type { GatewayContext, GatewayPlugin } from '../types'; +import type { + GatewayContext, + GatewayPlugin, + OnFetchHookPayload, +} from '../types'; export type AgentFactory = ( payload: OnFetchHookPayload< diff --git a/packages/runtime/src/plugins/useDelegationPlanDebug.ts b/packages/runtime/src/plugins/useDelegationPlanDebug.ts index eb792a9fa..9acc94281 100644 --- a/packages/runtime/src/plugins/useDelegationPlanDebug.ts +++ b/packages/runtime/src/plugins/useDelegationPlanDebug.ts @@ -1,4 +1,3 @@ -import type { Logger } from '@graphql-mesh/types'; import { pathToArray } from '@graphql-tools/utils'; import { print } from 'graphql'; import { FetchAPI } from 'graphql-yoga'; @@ -6,7 +5,7 @@ import type { GatewayContext, GatewayPlugin } from '../types'; export function useDelegationPlanDebug< TContext extends Record, ->(opts: { logger: Logger }): GatewayPlugin { +>(): GatewayPlugin { let fetchAPI: FetchAPI; const stageExecuteLogById = new WeakMap>(); return { @@ -18,15 +17,15 @@ export function useDelegationPlanDebug< variables, fragments, fieldNodes, + context, info, - logger = opts.logger, }) { const planId = fetchAPI.crypto.randomUUID(); - const planLogger = logger.child({ planId, typeName }); - const delegationPlanStartLogger = planLogger.child( - 'delegation-plan-start', + const log = context.log.child( + { planId, typeName }, + '[useDelegationPlanDebug] ', ); - delegationPlanStartLogger.debug(() => { + log.debug(() => { const logObj: Record = {}; if (variables && Object.keys(variables).length) { logObj['variables'] = variables; @@ -48,19 +47,21 @@ export function useDelegationPlanDebug< logObj['path'] = pathToArray(info.path).join(' | '); } return logObj; - }); + }, 'Start'); return ({ delegationPlan }) => { - const delegationPlanDoneLogger = logger.child('delegation-plan-done'); - delegationPlanDoneLogger.debug(() => - delegationPlan.map((plan) => { - const planObj: Record = {}; - for (const [subschema, selectionSet] of plan) { - if (subschema.name) { - planObj[subschema.name] = print(selectionSet); + log.debug( + () => ({ + delegationPlan: delegationPlan.map((plan) => { + const planObj: Record = {}; + for (const [subschema, selectionSet] of plan) { + if (subschema.name) { + planObj[subschema.name] = print(selectionSet); + } } - } - return planObj; + return planObj; + }), }), + 'Done', ); }; }, @@ -72,19 +73,18 @@ export function useDelegationPlanDebug< selectionSet, key, typeName, - logger = opts.logger, }) { let contextLog = stageExecuteLogById.get(context); if (!contextLog) { contextLog = new Set(); stageExecuteLogById.set(context, contextLog); } - const log = { + const logAttr = { key: JSON.stringify(key), object: JSON.stringify(object), selectionSet: print(selectionSet), }; - const logStr = JSON.stringify(log); + const logStr = JSON.stringify(logAttr); if (contextLog.has(logStr)) { return; } @@ -94,18 +94,16 @@ export function useDelegationPlanDebug< subgraph, typeName, }; - const delegationStageLogger = logger.child(logMeta); - delegationStageLogger.debug('delegation-plan-start', () => { - return { + const log = context.log.child(logMeta, '[useDelegationPlanDebug] '); + log.debug( + () => ({ ...log, path: pathToArray(info.path).join(' | '), - }; - }); + }), + 'Stage start', + ); return ({ result }) => { - const delegationStageExecuteDoneLogger = logger.child( - 'delegation-stage-execute-done', - ); - delegationStageExecuteDoneLogger.debug(() => result); + log.debug(() => result, 'Stage done'); }; }, }; diff --git a/packages/runtime/src/plugins/useDemandControl.ts b/packages/runtime/src/plugins/useDemandControl.ts index e55adf7e5..c7782fb34 100644 --- a/packages/runtime/src/plugins/useDemandControl.ts +++ b/packages/runtime/src/plugins/useDemandControl.ts @@ -69,8 +69,7 @@ export function useDemandControl>({ }); const costByContextMap = new WeakMap(); return { - onSubgraphExecute({ subgraph, executionRequest, logger }) { - const demandControlLogger = logger?.child('demand-control'); + onSubgraphExecute({ subgraph, executionRequest, log }) { let costByContext = executionRequest.context ? costByContextMap.get(executionRequest.context) || 0 : 0; @@ -83,10 +82,13 @@ export function useDemandControl>({ if (executionRequest.context) { costByContextMap.set(executionRequest.context, costByContext); } - demandControlLogger?.debug({ - operationCost, - totalCost: costByContext, - }); + log.debug( + { + operationCost, + totalCost: costByContext, + }, + '[useDemandControl]', + ); if (maxCost != null && costByContext > maxCost) { throw createGraphQLError( `Operation estimated cost ${costByContext} exceeded configured maximum ${maxCost}`, diff --git a/packages/runtime/src/plugins/useFetchDebug.ts b/packages/runtime/src/plugins/useFetchDebug.ts index d6a9eb207..3e87798da 100644 --- a/packages/runtime/src/plugins/useFetchDebug.ts +++ b/packages/runtime/src/plugins/useFetchDebug.ts @@ -1,38 +1,36 @@ -import type { Logger } from '@graphql-mesh/types'; import { FetchAPI } from 'graphql-yoga'; import type { GatewayPlugin } from '../types'; -export function useFetchDebug>(opts: { - logger: Logger; -}): GatewayPlugin { +export function useFetchDebug< + TContext extends Record, +>(): GatewayPlugin { let fetchAPI: FetchAPI; return { onYogaInit({ yoga }) { fetchAPI = yoga.fetchAPI; }, - onFetch({ url, options, logger = opts.logger }) { + onFetch({ url, options, context }) { const fetchId = fetchAPI.crypto.randomUUID(); - const fetchLogger = logger.child({ - fetchId, - }); - const httpFetchRequestLogger = fetchLogger.child('http-fetch-request'); - httpFetchRequestLogger.debug(() => ({ - url, - ...(options || {}), - body: options?.body, - headers: options?.headers, - signal: options?.signal?.aborted ? options?.signal?.reason : false, - })); + const log = context.log.child({ fetchId }, '[useFetchDebug] '); + log.debug( + () => ({ + url, + body: options?.body?.toString(), + headers: options?.headers, + signal: options?.signal?.aborted ? options?.signal?.reason : false, + }), + 'Request', + ); const start = performance.now(); return function onFetchDone({ response }) { - const httpFetchResponseLogger = fetchLogger.child( - 'http-fetch-response', + log.debug( + () => ({ + status: response.status, + headers: Object.fromEntries(response.headers.entries()), + duration: performance.now() - start, + }), + 'Response', ); - httpFetchResponseLogger.debug(() => ({ - status: response.status, - headers: Object.fromEntries(response.headers.entries()), - duration: performance.now() - start, - })); }; }, }; diff --git a/packages/runtime/src/plugins/useHiveConsole.ts b/packages/runtime/src/plugins/useHiveConsole.ts index 4f34a7c9a..6e5a0336b 100644 --- a/packages/runtime/src/plugins/useHiveConsole.ts +++ b/packages/runtime/src/plugins/useHiveConsole.ts @@ -1,7 +1,7 @@ import type { HivePluginOptions } from '@graphql-hive/core'; +import { LegacyLogger, type Logger } from '@graphql-hive/logger'; import { useHive } from '@graphql-hive/yoga'; import { process } from '@graphql-mesh/cross-helpers'; -import type { Logger } from '@graphql-mesh/types'; import { GatewayPlugin } from '../types'; export interface HiveConsolePluginOptions @@ -33,13 +33,13 @@ export default function useHiveConsole< enabled, token, ...options -}: HiveConsolePluginOptions & { logger: Logger }): GatewayPlugin< +}: HiveConsolePluginOptions & { log: Logger }): GatewayPlugin< TPluginContext, TContext > { const agent: HiveConsolePluginOptions['agent'] = { name: 'hive-gateway', - logger: options.logger, + logger: LegacyLogger.from(options.log), ...options.agent, }; diff --git a/packages/runtime/src/plugins/usePropagateHeaders.ts b/packages/runtime/src/plugins/usePropagateHeaders.ts index f678f3bd4..ae9dc5f1c 100644 --- a/packages/runtime/src/plugins/usePropagateHeaders.ts +++ b/packages/runtime/src/plugins/usePropagateHeaders.ts @@ -1,7 +1,6 @@ import { subgraphNameByExecutionRequest } from '@graphql-mesh/fusion-runtime'; -import type { OnFetchHookDone } from '@graphql-mesh/types'; import { handleMaybePromise } from '@whatwg-node/promise-helpers'; -import type { GatewayPlugin } from '../types'; +import type { GatewayPlugin, OnFetchHookDone } from '../types'; interface FromClientToSubgraphsPayload { request: Request; @@ -34,7 +33,10 @@ export function usePropagateHeaders>( const resHeadersByRequest = new WeakMap>(); return { onFetch({ executionRequest, context, options, setOptions }) { - const request = context?.request || executionRequest?.context?.request; + const request = + 'request' in context + ? context?.request || executionRequest?.context?.request + : undefined; if (request) { const subgraphName = (executionRequest && subgraphNameByExecutionRequest.get(executionRequest))!; diff --git a/packages/runtime/src/plugins/useRequestId.ts b/packages/runtime/src/plugins/useRequestId.ts index 46468012b..57ca584c2 100644 --- a/packages/runtime/src/plugins/useRequestId.ts +++ b/packages/runtime/src/plugins/useRequestId.ts @@ -1,4 +1,8 @@ -import { requestIdByRequest } from '@graphql-mesh/utils'; +import { LegacyLogger } from '@graphql-hive/logger'; +import { + loggerForRequest, + requestIdByRequest, +} from '@graphql-hive/logger/request'; import { FetchAPI } from '@whatwg-node/server'; import type { GatewayContext, GatewayPlugin } from '../types'; @@ -48,17 +52,26 @@ export function useRequestId>( }); requestIdByRequest.set(request, requestId); }, - onContextBuilding({ context }) { - if (context?.request) { - const requestId = requestIdByRequest.get(context.request); - if (requestId && context.logger) { - // @ts-expect-error - Logger is somehow read-only - context.logger = context.logger.child({ requestId }); - } + onContextBuilding({ context, extendContext }) { + // the request ID wont always be available because there's no request in websockets + const requestId = requestIdByRequest.get(context.request); + let log = context.log; + if (requestId) { + log = loggerForRequest( + context.log.child({ requestId }), + context.request, + ); } + extendContext( + // @ts-expect-error TODO: typescript is acting up here + { + log, + logger: LegacyLogger.from(log), + }, + ); }, onFetch({ context, options, setOptions }) { - if (context?.request) { + if ('request' in context) { const requestId = requestIdByRequest.get(context.request); if (requestId) { setOptions({ diff --git a/packages/runtime/src/plugins/useRetryOnSchemaReload.ts b/packages/runtime/src/plugins/useRetryOnSchemaReload.ts index f0f5060a1..8dc8c8910 100644 --- a/packages/runtime/src/plugins/useRetryOnSchemaReload.ts +++ b/packages/runtime/src/plugins/useRetryOnSchemaReload.ts @@ -1,5 +1,5 @@ -import { Logger } from '@graphql-mesh/types'; -import { requestIdByRequest } from '@graphql-mesh/utils'; +import type { Logger } from '@graphql-hive/logger'; +import { loggerForRequest } from '@graphql-hive/logger/request'; import type { MaybeAsyncIterable } from '@graphql-tools/utils'; import { handleMaybePromise, @@ -12,9 +12,9 @@ import type { GatewayPlugin } from '../types'; type ExecHandler = () => MaybePromise>; export function useRetryOnSchemaReload>({ - logger, + log: rootLog, }: { - logger: Logger; + log: Logger; }): GatewayPlugin { const execHandlerByContext = new WeakMap<{}, ExecHandler>(); function handleOnExecute(args: ExecutionArgs) { @@ -26,6 +26,7 @@ export function useRetryOnSchemaReload>({ } } } + const logForRequest = new WeakMap(); function handleExecutionResult({ context, result, @@ -35,20 +36,22 @@ export function useRetryOnSchemaReload>({ context: {}; result?: ExecutionResult; setResult: (result: MaybeAsyncIterable) => void; - request: Request; + // request wont be available over websockets + request: Request | undefined; }) { const execHandler = execHandlerByContext.get(context); if ( execHandler && result?.errors?.some((e) => e.extensions?.['code'] === 'SCHEMA_RELOAD') ) { - let requestLogger = logger; - const requestId = requestIdByRequest.get(request); - if (requestId) { - requestLogger = logger.child({ requestId }); - } - requestLogger.info( - 'The operation has been aborted after the supergraph schema reloaded, retrying the operation...', + const log = request + ? loggerForRequest( + logForRequest.get(request)!, // must exist at this point + request, + ) + : rootLog; + log.info( + '[useRetryOnSchemaReload] The operation has been aborted after the supergraph schema reloaded, retrying the operation...', ); if (execHandler) { return handleMaybePromise(execHandler, (newResult) => @@ -67,10 +70,20 @@ export function useRetryOnSchemaReload>({ }), ); }, - onExecute({ args }) { + onExecute({ args, context }) { + // we set the logger here because it most likely contains important attributes (like the request-id) + if (context.request) { + // the request wont be available over websockets + logForRequest.set(context.request, context.log); + } handleOnExecute(args); }, - onSubscribe({ args }) { + onSubscribe({ args, context }) { + // we set the logger here because it most likely contains important attributes (like the request-id) + if (context.request) { + // the request wont be available over websockets + logForRequest.set(context.request, context.log); + } handleOnExecute(args); }, onExecutionResult({ request, context, result, setResult }) { diff --git a/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts b/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts index d009a1e2b..135763525 100644 --- a/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts +++ b/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts @@ -1,24 +1,26 @@ import { defaultPrintFn } from '@graphql-mesh/transport-common'; -import type { Logger } from '@graphql-mesh/types'; import { FetchAPI, isAsyncIterable } from 'graphql-yoga'; import type { GatewayPlugin } from '../types'; export function useSubgraphExecuteDebug< TContext extends Record, ->(opts: { logger: Logger }): GatewayPlugin { +>(): GatewayPlugin { let fetchAPI: FetchAPI; return { onYogaInit({ yoga }) { fetchAPI = yoga.fetchAPI; }, - onSubgraphExecute({ executionRequest, logger = opts.logger }) { - const subgraphExecuteHookLogger = logger.child({ - subgraphExecuteId: fetchAPI.crypto.randomUUID(), - }); - const subgraphExecuteStartLogger = subgraphExecuteHookLogger.child( - 'subgraph-execute-start', + onSubgraphExecute({ executionRequest }) { + const log = executionRequest.context?.log.child( + { + subgraphExecuteId: fetchAPI.crypto.randomUUID(), + }, + '[useSubgraphExecuteDebug] ', ); - subgraphExecuteStartLogger.debug(() => { + if (!log) { + throw new Error('Logger is not available in the execution context'); + } + log.debug(() => { const logData: Record = {}; if (executionRequest.document) { logData['query'] = defaultPrintFn(executionRequest.document); @@ -30,28 +32,25 @@ export function useSubgraphExecuteDebug< logData['variables'] = executionRequest.variables; } return logData; - }); + }, 'Start'); const start = performance.now(); return function onSubgraphExecuteDone({ result }) { - const subgraphExecuteEndLogger = subgraphExecuteHookLogger.child( - 'subgraph-execute-end', - ); if (isAsyncIterable(result)) { return { onNext({ result }) { - const subgraphExecuteNextLogger = subgraphExecuteHookLogger.child( - 'subgraph-execute-next', - ); - subgraphExecuteNextLogger.debug(result); + log.debug(result, 'Next'); }, onEnd() { - subgraphExecuteEndLogger.debug(() => ({ - duration: performance.now() - start, - })); + log.debug( + () => ({ + duration: performance.now() - start, + }), + 'End', + ); }, }; } - subgraphExecuteEndLogger.debug(result); + log.debug(result, 'Done'); return void 0; }; }, diff --git a/packages/runtime/src/plugins/useUpstreamCancel.ts b/packages/runtime/src/plugins/useUpstreamCancel.ts index a744a2a7e..04ed514fc 100644 --- a/packages/runtime/src/plugins/useUpstreamCancel.ts +++ b/packages/runtime/src/plugins/useUpstreamCancel.ts @@ -6,7 +6,7 @@ export function useUpstreamCancel(): GatewayPlugin { return { onFetch({ context, options, executionRequest, info }) { const signals: AbortSignal[] = []; - if (context?.request?.signal) { + if ('request' in context && context.request.signal) { signals.push(context.request.signal); } const execRequestSignal = diff --git a/packages/runtime/src/plugins/useUpstreamRetry.ts b/packages/runtime/src/plugins/useUpstreamRetry.ts index ee0043c84..7ef434d45 100644 --- a/packages/runtime/src/plugins/useUpstreamRetry.ts +++ b/packages/runtime/src/plugins/useUpstreamRetry.ts @@ -182,11 +182,8 @@ export function useUpstreamRetry>( } } }, - onFetch({ info, executionRequest }) { - // if there's no execution request, it's a subgraph request + onFetch({ executionRequest }) { // TODO: Also consider what happens when there are multiple fetch calls for a single subgraph request - // @ts-expect-error - we know that it might have executionRequest property - executionRequest ||= info?.rootValue?.executionRequest; if (executionRequest) { return function onFetchDone({ response }) { executionRequestResponseMap.set(executionRequest, response); diff --git a/packages/runtime/src/plugins/useWebhooks.ts b/packages/runtime/src/plugins/useWebhooks.ts index 8f557e5ec..1fddbf0bd 100644 --- a/packages/runtime/src/plugins/useWebhooks.ts +++ b/packages/runtime/src/plugins/useWebhooks.ts @@ -1,16 +1,18 @@ +import type { Logger } from '@graphql-hive/logger'; import { HivePubSub } from '@graphql-hive/pubsub'; -import type { Logger } from '@graphql-mesh/types'; import { handleMaybePromise } from '@whatwg-node/promise-helpers'; -import type { Plugin } from 'graphql-yoga'; +import { GatewayPlugin } from '../types'; export interface GatewayWebhooksPluginOptions { + log: Logger; pubsub?: HivePubSub; - logger: Logger; } + export function useWebhooks({ + log: rootLog, pubsub, - logger, -}: GatewayWebhooksPluginOptions): Plugin { +}: GatewayWebhooksPluginOptions): GatewayPlugin { + const log = rootLog.child('[useWebhooks] '); if (!pubsub) { throw new Error(`You must provide a pubsub instance to webhooks feature! Example: @@ -32,13 +34,13 @@ export function useWebhooks({ const expectedEventName = `webhook:${requestMethod}:${pathname}`; for (const eventName of eventNames) { if (eventName === expectedEventName) { - logger?.debug(() => `Received webhook request for ${pathname}`); + log.debug({ pathname }, 'Received webhook request'); return handleMaybePromise( () => request.text(), function handleWebhookPayload(webhookPayload) { - logger?.debug( - () => - `Emitted webhook request for ${pathname}: ${webhookPayload}`, + log.debug( + { pathname, payload: webhookPayload }, + 'Emitted webhook request', ); webhookPayload = request.headers.get('content-type') === 'application/json' diff --git a/packages/runtime/src/types.ts b/packages/runtime/src/types.ts index ebda1cc81..75d110ea3 100644 --- a/packages/runtime/src/types.ts +++ b/packages/runtime/src/types.ts @@ -1,5 +1,6 @@ import type { Plugin as EnvelopPlugin } from '@envelop/core'; import type { useGenericAuth } from '@envelop/generic-auth'; +import type { Logger, LogLevel } from '@graphql-hive/logger'; import { HivePubSub } from '@graphql-hive/pubsub'; import type { Instrumentation as GatewayRuntimeInstrumentation, @@ -11,13 +12,14 @@ import type { HMACUpstreamSignatureOptions } from '@graphql-mesh/hmac-upstream-s import type { ResponseCacheConfig } from '@graphql-mesh/plugin-response-cache'; import type { KeyValueCache, - Logger, + Logger as LegacyLogger, MeshFetch, - OnFetchHook, + MeshFetchRequestInit, } from '@graphql-mesh/types'; -import type { FetchInstrumentation, LogLevel } from '@graphql-mesh/utils'; +import type { FetchInstrumentation } from '@graphql-mesh/utils'; import type { HTTPExecutorOptions } from '@graphql-tools/executor-http'; import type { + ExecutionRequest, IResolvers, MaybePromise, TypeSource, @@ -35,6 +37,7 @@ import type { Plugin as YogaPlugin, YogaServerOptions, } from 'graphql-yoga'; +import { GraphQLResolveInfo } from 'graphql/type'; import type { UnifiedGraphConfig } from './handleUnifiedGraphConfig'; import type { UseContentEncodingOpts } from './plugins/useContentEncoding'; import type { AgentFactory } from './plugins/useCustomAgent'; @@ -61,9 +64,9 @@ export interface GatewayConfigContext { */ fetch: MeshFetch; /** - * The logger to use throught Mesh and it's plugins. + * The logger to use throught Hive and its plugins. */ - logger: Logger; + log: Logger; /** * Current working directory. */ @@ -96,7 +99,7 @@ export type GatewayPlugin< TContext extends Record = Record, > = YogaPlugin & GatewayContext & TContext> & UnifiedGraphPlugin & GatewayContext & TContext> & { - onFetch?: OnFetchHook & GatewayContext & TContext>; + onFetch?: OnFetchHook & TContext>; onCacheGet?: OnCacheGetHook; onCacheSet?: OnCacheSetHook; onCacheDelete?: OnCacheDeleteHook; @@ -112,6 +115,40 @@ export type GatewayPlugin< >; }; +export interface OnFetchHookPayload { + url: string; + setURL(url: URL | string): void; + options: MeshFetchRequestInit; + setOptions(options: MeshFetchRequestInit): void; + /** + * The context is not available in cases where "fetch" is done in + * order to pull a supergraph or do some internal work. + * + * The logger will be available in all cases. + */ + context: (GatewayContext & TContext) | { log: Logger }; + /** @deprecated Please use `log` from the {@link context} instead. */ + logger: LegacyLogger; + info: GraphQLResolveInfo; + fetchFn: MeshFetch; + setFetchFn: (fetchFn: MeshFetch) => void; + executionRequest?: ExecutionRequest; + endResponse: (response$: MaybePromise) => void; +} + +export interface OnFetchHookDonePayload { + response: Response; + setResponse: (response: Response) => void; +} + +export type OnFetchHookDone = ( + payload: OnFetchHookDonePayload, +) => MaybePromise; + +export type OnFetchHook = ( + payload: OnFetchHookPayload, +) => MaybePromise; + export type OnCacheGetHook = ( payload: OnCacheGetHookEventPayload, ) => MaybePromise; @@ -481,9 +518,10 @@ interface GatewayConfigBase> { * Enable, disable or implement a custom logger for logging. * * @default true + * * @see https://the-guild.dev/graphql/hive/docs/gateway/logging-and-error-handling */ - logging?: boolean | Logger | LogLevel | keyof typeof LogLevel | undefined; + logging?: boolean | Logger | LogLevel | undefined; /** * Endpoint of the GraphQL API. */ diff --git a/packages/runtime/src/wrapFetchWithHooks.ts b/packages/runtime/src/wrapFetchWithHooks.ts new file mode 100644 index 000000000..a8f27249f --- /dev/null +++ b/packages/runtime/src/wrapFetchWithHooks.ts @@ -0,0 +1,105 @@ +import { getInstrumented } from '@envelop/instrumentation'; +import { LegacyLogger, type Logger } from '@graphql-hive/logger'; +import type { MeshFetch } from '@graphql-mesh/types'; +import type { ExecutionRequest, MaybePromise } from '@graphql-tools/utils'; +import { handleMaybePromise, iterateAsync } from '@whatwg-node/promise-helpers'; +import { OnFetchHook, OnFetchHookDone } from './types'; + +export type FetchInstrumentation = { + fetch?: ( + payload: { executionRequest?: ExecutionRequest }, + wrapped: () => MaybePromise, + ) => MaybePromise; +}; + +export function wrapFetchWithHooks( + onFetchHooks: OnFetchHook[], + log: Logger, + instrumentation?: () => FetchInstrumentation | undefined, +): MeshFetch { + let wrappedFetchFn = function wrappedFetchFn(url, options, context, info) { + let fetchFn: MeshFetch; + let response$: MaybePromise; + const onFetchDoneHooks: OnFetchHookDone[] = []; + return handleMaybePromise( + () => + iterateAsync( + onFetchHooks, + (onFetch, endEarly) => + onFetch({ + fetchFn, + setFetchFn(newFetchFn) { + fetchFn = newFetchFn; + }, + url, + setURL(newUrl) { + url = String(newUrl); + }, + // @ts-expect-error TODO: why? + options, + setOptions(newOptions) { + options = newOptions; + }, + context: { log, ...context }, + logger: LegacyLogger.from(log), + // @ts-expect-error TODO: why? + info, + get executionRequest() { + return ( + info?.executionRequest || + // @ts-expect-error might be in the root value, see packages/fusion-runtime/src/utils.ts + info?.rootValue?.executionRequest + ); + }, + endResponse(newResponse) { + response$ = newResponse; + endEarly(); + }, + }), + onFetchDoneHooks, + ), + function handleIterationResult() { + if (response$) { + return response$; + } + return handleMaybePromise( + () => fetchFn(url, options, context, info), + function (response: Response) { + return handleMaybePromise( + () => + iterateAsync(onFetchDoneHooks, (onFetchDone) => + onFetchDone({ + response, + setResponse(newResponse) { + response = newResponse; + }, + }), + ), + function handleOnFetchDone() { + return response; + }, + ); + }, + ); + }, + ); + } as MeshFetch; + + if (instrumentation) { + const originalWrappedFetch = wrappedFetchFn; + wrappedFetchFn = function wrappedFetchFn(url, options, context, info) { + const fetchInstrument = instrumentation()?.fetch; + const instrumentedFetch = fetchInstrument + ? getInstrumented({ + get executionRequest() { + return info?.executionRequest; + }, + }).asyncFn(fetchInstrument, originalWrappedFetch) + : originalWrappedFetch; + + return instrumentedFetch(url, options, context, info); + }; + } + + return wrappedFetchFn; +} diff --git a/packages/runtime/tests/contentEncoding.test.ts b/packages/runtime/tests/contentEncoding.test.ts index 84443e376..317455fb1 100644 --- a/packages/runtime/tests/contentEncoding.test.ts +++ b/packages/runtime/tests/contentEncoding.test.ts @@ -1,5 +1,4 @@ import { getUnifiedGraphGracefully } from '@graphql-mesh/fusion-composition'; -import type { OnFetchHookDonePayload } from '@graphql-mesh/types'; import { getSupportedEncodings, useContentEncoding } from '@whatwg-node/server'; import { createSchema, @@ -8,7 +7,11 @@ import { type YogaInitialContext, } from 'graphql-yoga'; import { afterEach, describe, expect, it, vi } from 'vitest'; -import { createGatewayRuntime, useCustomFetch } from '../src/index'; +import { + createGatewayRuntime, + OnFetchHookDonePayload, + useCustomFetch, +} from '../src/index'; describe('contentEncoding', () => { const fooResolver = vi.fn((_, __, _context: YogaInitialContext) => { diff --git a/packages/runtime/tests/graphos.test.ts b/packages/runtime/tests/graphos.test.ts index b1135db8e..2ed5143b3 100644 --- a/packages/runtime/tests/graphos.test.ts +++ b/packages/runtime/tests/graphos.test.ts @@ -1,9 +1,10 @@ import { setTimeout } from 'timers/promises'; import { - JSONLogger, type GatewayConfigContext, type GatewayGraphOSManagedFederationOptions, } from '@graphql-hive/gateway-runtime'; +import { LegacyLogger, Logger } from '@graphql-hive/logger'; +import { TransportContext } from '@graphql-mesh/transport-common'; import { Response } from '@whatwg-node/fetch'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { createGraphOSFetcher } from '../src/fetchers/graphos'; @@ -20,7 +21,7 @@ describe('GraphOS', () => { it('should fetch the supergraph SDL', async () => { const { unifiedGraphFetcher } = createTestFetcher({ fetch: mockSDL }); - const result = Promise.resolve().then(() => unifiedGraphFetcher({})); + const result = Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(1_000); expect(await result).toBe(supergraphSdl); }); @@ -37,7 +38,7 @@ describe('GraphOS', () => { }, }); - const result = Promise.resolve().then(() => unifiedGraphFetcher({})); + const result = Promise.resolve().then(() => unifiedGraphFetcher()); for (let i = 0; i < 3; i++) { await advanceTimersByTimeAsync(1_000); } @@ -52,7 +53,7 @@ describe('GraphOS', () => { ); const result = Promise.resolve() - .then(() => unifiedGraphFetcher({})) + .then(() => unifiedGraphFetcher()) .catch((err) => err); for (let i = 0; i < 3; i++) { await advanceTimersByTimeAsync(1_000); @@ -68,7 +69,7 @@ describe('GraphOS', () => { ); const result = Promise.resolve() - .then(() => unifiedGraphFetcher({})) + .then(() => unifiedGraphFetcher()) .catch(() => {}); await advanceTimersByTimeAsync(25); expect(mockFetchError).toHaveBeenCalledTimes(1); @@ -84,12 +85,12 @@ describe('GraphOS', () => { it('should respect min-delay between polls', async () => { const { unifiedGraphFetcher } = createTestFetcher({ fetch: mockSDL }); - Promise.resolve().then(() => unifiedGraphFetcher({})); + Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(25); expect(mockSDL).toHaveBeenCalledTimes(1); await advanceTimersByTimeAsync(20); expect(mockSDL).toHaveBeenCalledTimes(1); - Promise.resolve().then(() => unifiedGraphFetcher({})); + Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(50); expect(mockSDL).toHaveBeenCalledTimes(1); await advanceTimersByTimeAsync(50); @@ -107,19 +108,19 @@ describe('GraphOS', () => { return mockSDL(); }, }); - const result1 = Promise.resolve().then(() => unifiedGraphFetcher({})); + const result1 = Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(1_000); - const result2 = Promise.resolve().then(() => unifiedGraphFetcher({})); + const result2 = Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(1_000); expect(await result1).toBe(await result2); }, 30_000); it('should not wait if min delay is superior to polling interval', async () => { const { unifiedGraphFetcher } = createTestFetcher({ fetch: mockSDL }); - const result = Promise.resolve().then(() => unifiedGraphFetcher({})); + const result = Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(1_000); await result; - const result2 = Promise.resolve().then(() => unifiedGraphFetcher({})); + const result2 = Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(1_000); expect(await result).toBe(await result2); }); @@ -146,9 +147,9 @@ describe('GraphOS', () => { }, }); - const result = Promise.resolve().then(() => unifiedGraphFetcher({})); + const result = Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(1_000); - const result2 = Promise.resolve().then(() => unifiedGraphFetcher({})); + const result2 = Promise.resolve().then(() => unifiedGraphFetcher()); await advanceTimersByTimeAsync(1_000); expect(await result).toBe(await result2); }); @@ -161,20 +162,10 @@ function createTestFetcher( }, opts?: Partial, ) { - return createGraphOSFetcher({ + const log = new Logger({ level: process.env['DEBUG'] ? 'debug' : false }); + const fetcher = createGraphOSFetcher({ configContext: { - logger: process.env['DEBUG'] - ? new JSONLogger() - : { - child() { - return this; - }, - info: () => {}, - debug: () => {}, - error: () => {}, - warn: () => {}, - log: () => {}, - }, + log, cwd: process.cwd(), ...configContext, }, @@ -186,6 +177,15 @@ function createTestFetcher( }, pollingInterval: 0.000000001, }); + return { + unifiedGraphFetcher: (transportContext: Partial = {}) => { + return fetcher.unifiedGraphFetcher({ + log, + logger: LegacyLogger.from(log), + ...transportContext, + }); + }, + }; } let supergraphSdl = 'TEST SDL'; diff --git a/packages/runtime/tests/wrapFetchWithHooks.test.ts b/packages/runtime/tests/wrapFetchWithHooks.test.ts new file mode 100644 index 000000000..145b5a880 --- /dev/null +++ b/packages/runtime/tests/wrapFetchWithHooks.test.ts @@ -0,0 +1,39 @@ +import { Logger } from '@graphql-hive/logger'; +import { createServerAdapter, Response } from '@whatwg-node/server'; +import type { GraphQLResolveInfo } from 'graphql'; +import { expect, it } from 'vitest'; +import { + wrapFetchWithHooks, + type FetchInstrumentation, +} from '../src/wrapFetchWithHooks'; + +it('should wrap fetch instrumentation', async () => { + await using adapter = createServerAdapter(() => + Response.json({ hello: 'world' }), + ); + let receivedExecutionRequest; + const fetchInstrumentation: FetchInstrumentation = { + fetch: async ({ executionRequest }, wrapped) => { + receivedExecutionRequest = executionRequest; + await wrapped(); + }, + }; + const wrappedFetch = wrapFetchWithHooks( + [ + ({ setFetchFn }) => { + setFetchFn( + // @ts-expect-error TODO: MeshFetch is not compatible with @whatwg-node/server fetch + adapter.fetch, + ); + }, + ], + new Logger({ level: false }), + () => fetchInstrumentation, + ); + const executionRequest = {}; + const res = await wrappedFetch('http://localhost:4000', {}, {}, { + executionRequest, + } as GraphQLResolveInfo); + expect(await res.json()).toEqual({ hello: 'world' }); + expect(receivedExecutionRequest).toBe(executionRequest); +}); diff --git a/packages/transports/common/package.json b/packages/transports/common/package.json index c4ea62a98..ab87aaf3f 100644 --- a/packages/transports/common/package.json +++ b/packages/transports/common/package.json @@ -43,6 +43,7 @@ }, "dependencies": { "@envelop/core": "^5.3.0", + "@graphql-hive/logger": "workspace:^", "@graphql-hive/pubsub": "workspace:^", "@graphql-hive/signal": "workspace:^", "@graphql-mesh/types": "^0.104.5", diff --git a/packages/transports/common/src/types.ts b/packages/transports/common/src/types.ts index 529ca9828..c304d7179 100644 --- a/packages/transports/common/src/types.ts +++ b/packages/transports/common/src/types.ts @@ -1,5 +1,10 @@ +import type { Logger } from '@graphql-hive/logger'; import { HivePubSub } from '@graphql-hive/pubsub'; -import type { KeyValueCache, Logger, MeshFetch } from '@graphql-mesh/types'; +import type { + KeyValueCache, + Logger as LegacyLogger, + MeshFetch, +} from '@graphql-mesh/types'; import type { Executor, MaybePromise } from '@graphql-tools/utils'; import type { GraphQLError, GraphQLSchema } from 'graphql'; @@ -20,10 +25,14 @@ export interface TransportEntry< } export interface TransportContext { + log: Logger; + /** @deprecated Please migrate to using the {@link log}. */ + logger: LegacyLogger; + /** The fetch API to use. */ fetch?: MeshFetch; - pubsub?: HivePubSub; - logger?: Logger; + /** Will be empty when run on serverless. */ cwd?: string; + pubsub?: HivePubSub; cache?: KeyValueCache; } diff --git a/packages/transports/http-callback/src/index.ts b/packages/transports/http-callback/src/index.ts index 614670d67..8c006dbbf 100644 --- a/packages/transports/http-callback/src/index.ts +++ b/packages/transports/http-callback/src/index.ts @@ -73,7 +73,7 @@ export default { transportEntry, fetch, pubsub, - logger, + log: rootLog, }): DisposableExecutor { let headersInConfig: Record | undefined; if (typeof transportEntry.headers === 'string') { @@ -106,7 +106,7 @@ export default { executionRequest: ExecutionRequest, ) { const subscriptionId = crypto.randomUUID(); - const subscriptionLogger = logger?.child({ + const log = rootLog.child({ executor: 'http-callback', subscription: subscriptionId, }); @@ -138,8 +138,9 @@ export default { stopSubscription(createTimeoutError()); }, heartbeatIntervalMs), ); - subscriptionLogger?.debug( - `Subscribing to ${transportEntry.location} with callbackUrl: ${callbackUrl}`, + log.debug( + { location: transportEntry.location, callbackUrl }, + 'Subscribing using callback', ); let pushFn: Push = () => { throw new Error( @@ -202,7 +203,7 @@ export default { } return; } - logger?.debug(`Subscription request received`, resJson); + log.debug(resJson, 'Subscription request received'); if (resJson.errors) { if (resJson.errors.length === 1 && resJson.errors[0]) { const error = resJson.errors[0]; @@ -224,7 +225,7 @@ export default { }, ), (e) => { - logger?.debug(`Subscription request failed`, e); + log.error(e, 'Subscription request failed'); stopSubscription(e); }, ); @@ -246,13 +247,13 @@ export default { pushFn = push; stopSubscription = stop; stopFnSet.add(stop); - logger?.debug(`Listening to ${subscriptionCallbackPath}`); + log.debug(`Listening to ${subscriptionCallbackPath}`); const subId = pubsub.subscribe( `webhook:post:${subscriptionCallbackPath}`, (message: HTTPCallbackMessage) => { - logger?.debug( - `Received message from ${subscriptionCallbackPath}`, + log.debug( message, + `Received message from ${subscriptionCallbackPath}`, ); if (message.verifier !== verifier) { return; diff --git a/packages/transports/ws/src/index.ts b/packages/transports/ws/src/index.ts index 2f937b45a..22a42fe48 100644 --- a/packages/transports/ws/src/index.ts +++ b/packages/transports/ws/src/index.ts @@ -33,7 +33,7 @@ export interface WSTransportOptions { export default { getSubgraphExecutor( - { transportEntry, logger }, + { transportEntry, log: rootLog }, /** * Do not use this option unless you know what you are doing. * @internal @@ -76,12 +76,12 @@ export default { let wsExecutor = wsExecutorMap.get(hash); if (!wsExecutor) { - const executorLogger = logger?.child({ + const log = rootLog.child({ executor: 'GraphQL WS', wsUrl, connectionParams, headers, - } as Record); + }); wsExecutor = buildGraphQLWSExecutor({ headers, url: wsUrl, @@ -91,30 +91,30 @@ export default { connectionParams, on: { connecting(isRetry) { - executorLogger?.debug('connecting', { isRetry }); + log.debug({ isRetry }, 'connecting'); }, opened(socket) { - executorLogger?.debug('opened', { socket }); + log.debug({ socket }, 'opened'); }, connected(socket, payload) { - executorLogger?.debug('connected', { socket, payload }); + log.debug({ socket, payload }, 'connected'); }, ping(received, payload) { - executorLogger?.debug('ping', { received, payload }); + log.debug({ received, payload }, 'ping'); }, pong(received, payload) { - executorLogger?.debug('pong', { received, payload }); + log.debug({ received, payload }, 'pong'); }, message(message) { - executorLogger?.debug('message', { message }); + log.debug({ message }, 'message'); }, closed(event) { - executorLogger?.debug('closed', { event }); + log.debug({ event }, 'closed'); // no subscriptions and the lazy close timeout has passed - remove the client wsExecutorMap.delete(hash); }, error(error) { - executorLogger?.debug('error', { error }); + log.debug({ error }, 'error'); }, }, onClient, diff --git a/packages/transports/ws/tests/ws.spec.ts b/packages/transports/ws/tests/ws.spec.ts index 0e71544ec..e9d7f0c68 100644 --- a/packages/transports/ws/tests/ws.spec.ts +++ b/packages/transports/ws/tests/ws.spec.ts @@ -1,4 +1,4 @@ -import { JSONLogger } from '@graphql-hive/logger-json'; +import { Logger } from '@graphql-hive/logger'; import type { TransportEntry, TransportGetSubgraphExecutorOptions, @@ -79,7 +79,7 @@ async function createTServer( ...transportEntry, options, }, - logger: new JSONLogger(), + log: new Logger({ level: false }), } as unknown as TransportGetSubgraphExecutorOptions, onClient, ); diff --git a/tsconfig.json b/tsconfig.json index 583838cbd..cca157be4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -61,11 +61,14 @@ ], "@graphql-tools/wrap": ["./packages/wrap/src/index.ts"], "@graphql-tools/executor-*": ["./packages/executors/*/src/index.ts"], - "@graphql-hive/logger-json": ["./packages/logger-json/src/index.ts"], - "@graphql-hive/logger-winston": [ - "./packages/logger-winston/src/index.ts" + "@graphql-hive/logger": ["./packages/logger/src/index.ts"], + "@graphql-hive/logger/request": ["./packages/logger/src/request.ts"], + "@graphql-hive/logger/writers/pino": [ + "./packages/logger/src/writers/pino.ts" + ], + "@graphql-hive/logger/writers/winston": [ + "./packages/logger/src/writers/winston.ts" ], - "@graphql-hive/logger-pino": ["./packages/logger-pino/src/index.ts"], "@graphql-hive/plugin-aws-sigv4": [ "./packages/plugins/aws-sigv4/src/index.ts" ], diff --git a/vitest.projects.ts b/vitest.projects.ts new file mode 100644 index 000000000..33180dd9d --- /dev/null +++ b/vitest.projects.ts @@ -0,0 +1,62 @@ +import { defineWorkspace } from 'vitest/config'; +import { timeout as testTimeout } from './internal/e2e/src/timeout'; +import { boolEnv, isCI, isNotPlatform } from './internal/testing/src/env'; + +export default defineWorkspace([ + { + extends: './vitest.config.ts', + test: { + name: 'unit', + include: ['**/*.(test|spec).ts'], + }, + }, + { + extends: './vitest.config.ts', + test: { + name: 'e2e', + include: [ + '**/*.e2e.ts', + ...(isCI() && isNotPlatform('linux') + ? [ + // TODO: containers are not starting on non-linux environments + '!**/e2e/auto-type-merging', + '!**/e2e/neo4j-example', + '!**/e2e/soap-demo', + '!**/e2e/mysql-employees', + '!**/e2e/opentelemetry', + '!**/e2e/graphos-polling', + ] + : []), + ], + hookTimeout: testTimeout, + testTimeout, + retry: boolEnv('CI') ? 3 : 0, + }, + }, + { + extends: './vitest.config.ts', + test: { + name: 'bench', + hookTimeout: testTimeout, + testTimeout, + benchmark: { + include: [ + 'bench/**/*.bench.ts', + 'e2e/**/*.bench.ts', + '**/tests/**/*.bench.ts', + ], + reporters: ['verbose'], + outputJson: 'bench/results.json', + }, + }, + }, + { + extends: './vitest.config.ts', + test: { + name: 'memtest', + include: ['**/*.memtest.ts'], + hookTimeout: testTimeout, + testTimeout, + }, + }, +]); diff --git a/yarn.lock b/yarn.lock index 33c60f9ec..555278489 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3149,6 +3149,7 @@ __metadata: "@apollo/server": "npm:^4.12.2" "@apollo/subgraph": "npm:^2.11.2" "@graphql-hive/gateway": "workspace:^" + "@graphql-hive/logger": "workspace:^" "@graphql-mesh/compose-cli": "npm:^1.4.10" "@graphql-mesh/hmac-upstream-signature": "workspace:^" "@graphql-mesh/plugin-jwt-auth": "workspace:^" @@ -4106,8 +4107,9 @@ __metadata: "@envelop/core": "npm:^5.3.0" "@envelop/disable-introspection": "npm:^8.0.0" "@envelop/generic-auth": "npm:^9.0.0" + "@envelop/instrumentation": "npm:^1.0.0" "@graphql-hive/core": "npm:^0.13.0" - "@graphql-hive/logger-json": "workspace:^" + "@graphql-hive/logger": "workspace:^" "@graphql-hive/pubsub": "workspace:^" "@graphql-hive/signal": "workspace:^" "@graphql-hive/yoga": "npm:^0.42.2" @@ -4165,6 +4167,7 @@ __metadata: "@escape.tech/graphql-armor-max-tokens": "npm:^2.5.0" "@graphql-hive/gateway-runtime": "workspace:^" "@graphql-hive/importer": "workspace:^" + "@graphql-hive/logger": "workspace:^" "@graphql-hive/plugin-aws-sigv4": "workspace:^" "@graphql-hive/plugin-deduplicate-request": "workspace:^" "@graphql-hive/pubsub": "workspace:^" @@ -4238,52 +4241,24 @@ __metadata: languageName: unknown linkType: soft -"@graphql-hive/logger-json@workspace:^, @graphql-hive/logger-json@workspace:packages/logger-json": - version: 0.0.0-use.local - resolution: "@graphql-hive/logger-json@workspace:packages/logger-json" - dependencies: - "@graphql-mesh/cross-helpers": "npm:^0.4.10" - "@graphql-mesh/types": "npm:^0.104.5" - "@graphql-mesh/utils": "npm:^0.104.5" - cross-inspect: "npm:^1.0.1" - graphql: "npm:^16.9.0" - pkgroll: "npm:2.14.3" - tslib: "npm:^2.8.1" - peerDependencies: - graphql: ^15.9.0 || ^16.9.0 - languageName: unknown - linkType: soft - -"@graphql-hive/logger-pino@workspace:packages/logger-pino": +"@graphql-hive/logger@workspace:^, @graphql-hive/logger@workspace:packages/logger": version: 0.0.0-use.local - resolution: "@graphql-hive/logger-pino@workspace:packages/logger-pino" + resolution: "@graphql-hive/logger@workspace:packages/logger" dependencies: - "@graphql-mesh/types": "npm:^0.104.5" - "@graphql-mesh/utils": "npm:^0.104.5" + "@types/quick-format-unescaped": "npm:^4.0.3" "@whatwg-node/disposablestack": "npm:^0.0.6" - graphql: "npm:16.11.0" - pino: "npm:^9.7.0" - pkgroll: "npm:2.14.3" - tslib: "npm:^2.8.1" - peerDependencies: - graphql: ^15.9.0 || ^16.9.0 - pino: ^9.7.0 - languageName: unknown - linkType: soft - -"@graphql-hive/logger-winston@workspace:packages/logger-winston": - version: 0.0.0-use.local - resolution: "@graphql-hive/logger-winston@workspace:packages/logger-winston" - dependencies: - "@graphql-mesh/types": "npm:^0.104.5" - "@whatwg-node/disposablestack": "npm:^0.0.6" - graphql: "npm:16.11.0" - pkgroll: "npm:2.14.3" - tslib: "npm:^2.8.1" + fast-safe-stringify: "npm:^2.1.1" + pino: "npm:^9.6.0" + pkgroll: "npm:2.11.2" + quick-format-unescaped: "npm:^4.0.4" winston: "npm:^3.17.0" peerDependencies: - graphql: ^15.9.0 || ^16.9.0 - winston: ^3.17.0 + pino: ^9.6.0 + peerDependenciesMeta: + pino: + optional: true + winston: + optional: true languageName: unknown linkType: soft @@ -4537,6 +4512,7 @@ __metadata: dependencies: "@envelop/core": "npm:^5.3.0" "@envelop/instrumentation": "npm:^1.0.0" + "@graphql-hive/logger": "workspace:^" "@graphql-mesh/cross-helpers": "npm:^0.4.10" "@graphql-mesh/transport-common": "workspace:^" "@graphql-mesh/types": "npm:^0.104.5" @@ -4723,6 +4699,7 @@ __metadata: resolution: "@graphql-mesh/plugin-prometheus@workspace:packages/plugins/prometheus" dependencies: "@graphql-hive/gateway-runtime": "workspace:^" + "@graphql-hive/logger": "workspace:^" "@graphql-mesh/cross-helpers": "npm:^0.4.10" "@graphql-mesh/types": "npm:^0.104.5" "@graphql-mesh/utils": "npm:^0.104.5" @@ -4831,6 +4808,7 @@ __metadata: resolution: "@graphql-mesh/transport-common@workspace:packages/transports/common" dependencies: "@envelop/core": "npm:^5.3.0" + "@graphql-hive/logger": "workspace:^" "@graphql-hive/pubsub": "workspace:^" "@graphql-hive/signal": "workspace:^" "@graphql-mesh/cross-helpers": "npm:^0.4.10" @@ -8821,6 +8799,13 @@ __metadata: languageName: node linkType: hard +"@types/quick-format-unescaped@npm:^4.0.3": + version: 4.0.3 + resolution: "@types/quick-format-unescaped@npm:4.0.3" + checksum: 10c0/e95ba1dfa68f9d1dee785905c3c648b9fe1514c5261160e566d9a19731013d138269937632dea79a73859988a90621c9653504170c6a7415cacb426343f2a11a + languageName: node + linkType: hard + "@types/range-parser@npm:*": version: 1.2.7 resolution: "@types/range-parser@npm:1.2.7" @@ -13918,6 +13903,7 @@ __metadata: "@babel/plugin-proposal-explicit-resource-management": "npm:7.27.4" "@babel/plugin-transform-class-properties": "npm:7.27.1" "@babel/plugin-transform-class-static-block": "npm:7.27.1" + "@babel/plugin-transform-private-methods": "npm:^7.27.1" "@babel/preset-env": "npm:7.28.0" "@babel/preset-typescript": "npm:7.27.1" "@changesets/changelog-github": "npm:^0.5.0" @@ -18190,7 +18176,7 @@ __metadata: languageName: node linkType: hard -"pino@npm:^9.0.0, pino@npm:^9.7.0": +"pino@npm:^9.0.0": version: 9.7.0 resolution: "pino@npm:9.7.0" dependencies: @@ -18211,6 +18197,27 @@ __metadata: languageName: node linkType: hard +"pino@npm:^9.6.0": + version: 9.6.0 + resolution: "pino@npm:9.6.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.1.1" + on-exit-leak-free: "npm:^2.1.0" + pino-abstract-transport: "npm:^2.0.0" + pino-std-serializers: "npm:^7.0.0" + process-warning: "npm:^4.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.2.0" + safe-stable-stringify: "npm:^2.3.1" + sonic-boom: "npm:^4.0.1" + thread-stream: "npm:^3.0.0" + bin: + pino: bin.js + checksum: 10c0/bcd1e9d9b301bea13b95689ca9ad7105ae9451928fb6c0b67b3e58c5fe37cea1d40665f3d6641e3da00be0bbc17b89031e67abbc8ea6aac6164f399309fd78e7 + languageName: node + linkType: hard + "pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.6": version: 4.0.7 resolution: "pirates@npm:4.0.7" @@ -18613,7 +18620,7 @@ __metadata: languageName: node linkType: hard -"quick-format-unescaped@npm:^4.0.3": +"quick-format-unescaped@npm:^4.0.3, quick-format-unescaped@npm:^4.0.4": version: 4.0.4 resolution: "quick-format-unescaped@npm:4.0.4" checksum: 10c0/fe5acc6f775b172ca5b4373df26f7e4fd347975578199e7d74b2ae4077f0af05baa27d231de1e80e8f72d88275ccc6028568a7a8c9ee5e7368ace0e18eff93a4 From 8b7db06887f5dec52d380bfc123dbf495cbe04ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 5 Jun 2025 14:06:28 +0000 Subject: [PATCH 19/60] chore(dependencies): updated changesets for modified dependencies --- .changeset/@graphql-hive_gateway-956-dependencies.md | 7 +++++++ .../@graphql-hive_gateway-runtime-956-dependencies.md | 9 +++++++++ .../@graphql-mesh_fusion-runtime-956-dependencies.md | 7 +++++++ .../@graphql-mesh_plugin-prometheus-956-dependencies.md | 7 +++++++ .../@graphql-mesh_transport-common-956-dependencies.md | 7 +++++++ 5 files changed, 37 insertions(+) create mode 100644 .changeset/@graphql-hive_gateway-956-dependencies.md create mode 100644 .changeset/@graphql-hive_gateway-runtime-956-dependencies.md create mode 100644 .changeset/@graphql-mesh_fusion-runtime-956-dependencies.md create mode 100644 .changeset/@graphql-mesh_plugin-prometheus-956-dependencies.md create mode 100644 .changeset/@graphql-mesh_transport-common-956-dependencies.md diff --git a/.changeset/@graphql-hive_gateway-956-dependencies.md b/.changeset/@graphql-hive_gateway-956-dependencies.md new file mode 100644 index 000000000..fc6e6bbec --- /dev/null +++ b/.changeset/@graphql-hive_gateway-956-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/gateway': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-hive_gateway-runtime-956-dependencies.md b/.changeset/@graphql-hive_gateway-runtime-956-dependencies.md new file mode 100644 index 000000000..102b3e27b --- /dev/null +++ b/.changeset/@graphql-hive_gateway-runtime-956-dependencies.md @@ -0,0 +1,9 @@ +--- +'@graphql-hive/gateway-runtime': patch +--- + +dependencies updates: + +- Added dependency [`@envelop/instrumentation@^1.0.0` ↗︎](https://www.npmjs.com/package/@envelop/instrumentation/v/1.0.0) (to `dependencies`) +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Removed dependency [`@graphql-hive/logger-json@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger-json/v/workspace:^) (from `dependencies`) diff --git a/.changeset/@graphql-mesh_fusion-runtime-956-dependencies.md b/.changeset/@graphql-mesh_fusion-runtime-956-dependencies.md new file mode 100644 index 000000000..d381bdd14 --- /dev/null +++ b/.changeset/@graphql-mesh_fusion-runtime-956-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/fusion-runtime': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-prometheus-956-dependencies.md b/.changeset/@graphql-mesh_plugin-prometheus-956-dependencies.md new file mode 100644 index 000000000..02e9f8bf5 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-prometheus-956-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/plugin-prometheus': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_transport-common-956-dependencies.md b/.changeset/@graphql-mesh_transport-common-956-dependencies.md new file mode 100644 index 000000000..2096b7a2b --- /dev/null +++ b/.changeset/@graphql-mesh_transport-common-956-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/transport-common': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) From d2683f4164e2a0551409cd55039b599ec0913c51 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Thu, 19 Jun 2025 15:12:40 +0200 Subject: [PATCH 20/60] export attributes, value and maybelazy --- packages/logger/src/logger.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/logger/src/logger.ts b/packages/logger/src/logger.ts index 4bfe33a6e..fe9a44862 100644 --- a/packages/logger/src/logger.ts +++ b/packages/logger/src/logger.ts @@ -14,7 +14,8 @@ import { } from './utils'; import { ConsoleLogWriter, JSONLogWriter, LogWriter } from './writers'; -export type { Attributes } from './utils'; +export type { Attributes }; +export type { MaybeLazy, AttributeValue } from './utils'; export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error'; From a0b25525a8b9b80f804b076611871f7728d41ad8 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Thu, 19 Jun 2025 16:52:35 +0200 Subject: [PATCH 21/60] use headref in example --- .github/workflows/examples.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index ac85f6638..79878976e 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -89,6 +89,8 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: token: ${{secrets.token}} + # https://github.com/stefanzweifel/git-auto-commit-action?tab=readme-ov-file#checkout-the-correct-branch + ref: ${{github.ref != 'refs/heads/main' && github.head_ref || ''}} - name: Download uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: From 61845b82b6b4f557ac9ad6abfa568f56aa807e29 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Thu, 19 Jun 2025 17:03:36 +0200 Subject: [PATCH 22/60] always head_ref --- .github/workflows/examples.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index 79878976e..16c74c276 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -90,7 +90,7 @@ jobs: with: token: ${{secrets.token}} # https://github.com/stefanzweifel/git-auto-commit-action?tab=readme-ov-file#checkout-the-correct-branch - ref: ${{github.ref != 'refs/heads/main' && github.head_ref || ''}} + ref: ${{github.head_ref}} - name: Download uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: From e227f867c365e7d337885d1558bc637f03cc29b5 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Thu, 19 Jun 2025 17:28:27 +0200 Subject: [PATCH 23/60] revert auto commit to v5 --- .github/workflows/examples.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index 16c74c276..ac85f6638 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -89,8 +89,6 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: token: ${{secrets.token}} - # https://github.com/stefanzweifel/git-auto-commit-action?tab=readme-ov-file#checkout-the-correct-branch - ref: ${{github.head_ref}} - name: Download uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: From 7b907f468795150ed18018080fb425e7b65758fc Mon Sep 17 00:00:00 2001 From: theguild-bot Date: Thu, 19 Jun 2025 15:41:44 +0000 Subject: [PATCH 24/60] docs(examples): converted from e2es --- examples/hmac-auth-https/package-lock.json | 484 ++++++++++++++------- examples/hmac-auth-https/package.json | 4 +- 2 files changed, 336 insertions(+), 152 deletions(-) diff --git a/examples/hmac-auth-https/package-lock.json b/examples/hmac-auth-https/package-lock.json index cb7793878..1f73d3a5e 100644 --- a/examples/hmac-auth-https/package-lock.json +++ b/examples/hmac-auth-https/package-lock.json @@ -541,6 +541,7 @@ "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", "@smithy/core": "^3.6.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", @@ -548,7 +549,10 @@ "@smithy/signature-v4": "^5.1.2", "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, @@ -915,6 +919,19 @@ } } }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", + "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@azure/abort-controller": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", @@ -960,9 +977,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.20.0.tgz", - "integrity": "sha512-ASoP8uqZBS3H/8N8at/XwFr6vYrRP3syTK0EUjDXQy0Y1/AUS+QeIRThKmTNJO2RggvBBxaXDPM7YoIwDGeA0g==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.21.0.tgz", + "integrity": "sha512-a4MBwe/5WKbq9MIxikzgxLBbruC5qlkFYlBdI7Ev50Y7ib5Vo/Jvt5jnJo7NaWeJ908LCHL0S1Us4UMf1VoTfg==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -970,7 +987,7 @@ "@azure/core-tracing": "^1.0.1", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", - "@typespec/ts-http-runtime": "^0.2.2", + "@typespec/ts-http-runtime": "^0.2.3", "tslib": "^2.6.2" }, "engines": { @@ -1017,28 +1034,76 @@ } }, "node_modules/@azure/monitor-opentelemetry-exporter": { - "version": "1.0.0-beta.31", - "resolved": "https://registry.npmjs.org/@azure/monitor-opentelemetry-exporter/-/monitor-opentelemetry-exporter-1.0.0-beta.31.tgz", - "integrity": "sha512-fH/vFMWOHwN/qdJ1SxVtsJ9zWIGWJdy/tZiVVPsFbpbR4NT49J5Im72iCcTyvABRPfIkMz/zsD58Yilf0yiEZw==", + "version": "1.0.0-beta.32", + "resolved": "https://registry.npmjs.org/@azure/monitor-opentelemetry-exporter/-/monitor-opentelemetry-exporter-1.0.0-beta.32.tgz", + "integrity": "sha512-Tk5Tv8KwHhKCQlXET/7ZLtjBv1Zi4lmPTadKTQ9KCURRJWdt+6hu5ze52Tlp2pVeg3mg+MRQ9vhWvVNXMZAp/A==", "license": "MIT", "dependencies": { "@azure/core-auth": "^1.9.0", "@azure/core-client": "^1.9.2", "@azure/core-rest-pipeline": "^1.19.0", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.57.2", - "@opentelemetry/core": "^1.30.1", - "@opentelemetry/resources": "^1.30.1", - "@opentelemetry/sdk-logs": "^0.57.2", - "@opentelemetry/sdk-metrics": "^1.30.1", - "@opentelemetry/sdk-trace-base": "^1.30.1", - "@opentelemetry/semantic-conventions": "^1.30.0", + "@opentelemetry/api-logs": "^0.200.0", + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/resources": "^2.0.0", + "@opentelemetry/sdk-logs": "^0.200.0", + "@opentelemetry/sdk-metrics": "^2.0.0", + "@opentelemetry/sdk-trace-base": "^2.0.0", + "@opentelemetry/semantic-conventions": "^1.32.0", "tslib": "^2.8.1" }, "engines": { "node": ">=18.0.0" } }, + "node_modules/@azure/monitor-opentelemetry-exporter/node_modules/@opentelemetry/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", + "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@azure/monitor-opentelemetry-exporter/node_modules/@opentelemetry/resources": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", + "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@azure/monitor-opentelemetry-exporter/node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", + "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -1490,9 +1555,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", "cpu": [ "ppc64" ], @@ -1507,9 +1572,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", "cpu": [ "arm" ], @@ -1524,9 +1589,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", "cpu": [ "arm64" ], @@ -1541,9 +1606,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", "cpu": [ "x64" ], @@ -1558,9 +1623,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", "cpu": [ "arm64" ], @@ -1575,9 +1640,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", "cpu": [ "x64" ], @@ -1592,9 +1657,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", "cpu": [ "arm64" ], @@ -1609,9 +1674,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", "cpu": [ "x64" ], @@ -1626,9 +1691,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", "cpu": [ "arm" ], @@ -1643,9 +1708,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", "cpu": [ "arm64" ], @@ -1660,9 +1725,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", "cpu": [ "ia32" ], @@ -1677,9 +1742,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", "cpu": [ "loong64" ], @@ -1694,9 +1759,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", "cpu": [ "mips64el" ], @@ -1711,9 +1776,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", "cpu": [ "ppc64" ], @@ -1728,9 +1793,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", "cpu": [ "riscv64" ], @@ -1745,9 +1810,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", "cpu": [ "s390x" ], @@ -1762,9 +1827,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", "cpu": [ "x64" ], @@ -1779,9 +1844,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", "cpu": [ "arm64" ], @@ -1796,9 +1861,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", "cpu": [ "x64" ], @@ -1813,9 +1878,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", "cpu": [ "arm64" ], @@ -1830,9 +1895,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", "cpu": [ "x64" ], @@ -1847,9 +1912,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", "cpu": [ "x64" ], @@ -1864,9 +1929,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", "cpu": [ "arm64" ], @@ -1881,9 +1946,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", "cpu": [ "ia32" ], @@ -1898,9 +1963,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", "cpu": [ "x64" ], @@ -2095,7 +2160,7 @@ "@graphql-yoga/plugin-csrf-prevention": "^3.13.5", "@graphql-yoga/plugin-defer-stream": "^3.13.5", "@graphql-yoga/plugin-persisted-operations": "^3.13.6", - "@types/node": "^22.15.27", + "@types/node": "^22.15.29", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/promise-helpers": "^1.3.0", "@whatwg-node/server": "^0.10.10", @@ -2154,7 +2219,7 @@ "integrity": "sha512-BSSq55DnuSHURHQA1Wo08NifA/uEmOcLVS/8vSpj8F293otYwEVE+XMRBPKpVQzjm70mHasoBZnv+32KxnFmpA==", "license": "MIT", "dependencies": { - "@aws-sdk/client-sts": "^3.817.0", + "@aws-sdk/client-sts": "^3.823.0", "@graphql-mesh/fusion-runtime": "^0.11.17", "@whatwg-node/promise-helpers": "^1.3.0", "aws4": "1.13.2", @@ -2699,17 +2764,17 @@ } }, "node_modules/@graphql-mesh/plugin-response-cache": { - "version": "0.104.4", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-response-cache/-/plugin-response-cache-0.104.4.tgz", - "integrity": "sha512-qy+z/rlvRNeuWyPwtr0hfIo8cfYK6ToAs4qTOrVpj5+iq2sN5V4aOCjYUpZPBGdleM7pH4rr8DjZt+WBTl2jRQ==", + "version": "0.104.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-response-cache/-/plugin-response-cache-0.104.6.tgz", + "integrity": "sha512-3UWVhay2op1CR2pNpkyhhNIkQOh6Syx3LvIsfsTnqdx0RnTYZRZO77xY8sIC5m7M762HWbsFDE7BNtUpAk7Lqw==", "license": "MIT", "dependencies": { "@envelop/core": "^5.1.0", "@envelop/response-cache": "^7.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.3", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/utils": "^10.6.2", "@graphql-yoga/plugin-response-cache": "^3.13.1", "@whatwg-node/promise-helpers": "^1.0.0", @@ -3865,15 +3930,15 @@ } }, "node_modules/@opentelemetry/api-logs": { - "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", - "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", + "version": "0.200.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.200.0.tgz", + "integrity": "sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0" }, "engines": { - "node": ">=14" + "node": ">=8.0.0" } }, "node_modules/@opentelemetry/core": { @@ -3987,6 +4052,18 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/instrumentation/node_modules/@opentelemetry/api-logs": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", + "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/instrumentation/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -4054,6 +4131,51 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/api-logs": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", + "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-logs": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz", + "integrity": "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", + "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, "node_modules/@opentelemetry/resources": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", @@ -4080,33 +4202,95 @@ } }, "node_modules/@opentelemetry/sdk-logs": { - "version": "0.57.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz", - "integrity": "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==", + "version": "0.200.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.200.0.tgz", + "integrity": "sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.57.2", - "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1" + "@opentelemetry/api-logs": "0.200.0", + "@opentelemetry/core": "2.0.0", + "@opentelemetry/resources": "2.0.0" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz", + "integrity": "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", - "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", + "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.9.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", + "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", + "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" @@ -4990,9 +5174,9 @@ "license": "MIT" }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.2.tgz", - "integrity": "sha512-Gz/Sm64+Sq/vklJu1tt9t+4R2lvnud8NbTD/ZfpZtMiUX7YeVpCA8j6NSW8ptwcoLL+NmYANwqP8DV0q/bwl2w==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.3.tgz", + "integrity": "sha512-oRhjSzcVjX8ExyaF8hC0zzTqxlVuRlgMHL/Bh4w3xB9+wjbm0FpXylVU/lBrn+kgphwYTrOk3tp+AVShGmlYCg==", "license": "MIT", "dependencies": { "http-proxy-agent": "^7.0.0", @@ -5143,9 +5327,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6012,9 +6196,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -6025,31 +6209,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" } }, "node_modules/escalade": { @@ -6798,9 +6982,9 @@ "license": "MIT" }, "node_modules/import-in-the-middle": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.0.tgz", - "integrity": "sha512-g5zLT0HaztRJWysayWYiUq/7E5H825QIiecMD2pI5QO7Wzr847l6GDvPvmZaDIdrDtS2w7qRczywxiK6SL5vRw==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", + "integrity": "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==", "license": "Apache-2.0", "dependencies": { "acorn": "^8.14.0", diff --git a/examples/hmac-auth-https/package.json b/examples/hmac-auth-https/package.json index 96ba78cc5..18ea2b13f 100644 --- a/examples/hmac-auth-https/package.json +++ b/examples/hmac-auth-https/package.json @@ -24,6 +24,6 @@ "tsx": "^4.20.3" }, "overrides": { - "esbuild": "^0.25.4" + "esbuild": "^0.25.5" } -} +} \ No newline at end of file From 2cf5679aa7a0165df4735f47bcc1ee054a4e6aee Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Fri, 20 Jun 2025 12:24:18 +0200 Subject: [PATCH 25/60] async console writes --- packages/logger/package.json | 1 + packages/logger/src/writers/console.ts | 37 ++++++++++++++++++- .../tests/__snapshots__/writers.test.ts.snap | 10 +++++ packages/logger/tests/writers.test.ts | 14 +++++++ yarn.lock | 1 + 5 files changed, 61 insertions(+), 2 deletions(-) diff --git a/packages/logger/package.json b/packages/logger/package.json index d9203afe4..bc7403022 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -82,6 +82,7 @@ "devDependencies": { "@types/quick-format-unescaped": "^4.0.3", "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.3.2", "fast-safe-stringify": "^2.1.1", "pino": "^9.6.0", "pkgroll": "2.11.2", diff --git a/packages/logger/src/writers/console.ts b/packages/logger/src/writers/console.ts index cec5def1f..777d48d79 100644 --- a/packages/logger/src/writers/console.ts +++ b/packages/logger/src/writers/console.ts @@ -1,3 +1,4 @@ +import { createDeferredPromise } from '@whatwg-node/promise-helpers'; import { LogLevel } from '../logger'; import { Attributes, logLevelToString, truthyEnv } from '../utils'; import { jsonStringify, LogWriter } from './common'; @@ -29,12 +30,25 @@ export interface ConsoleLogWriterOptions { * @default false */ noTimestamp?: boolean; + /** + * Asynchronously write the logs to the {@link console}. Will not block the main thread, + * but has potential to spam the event loop with log promises. Use with caution. + * + * Note that all of the logs will be written in the order they were called, only not immedietely. + * + * The logs are queued in a macrotask, so they will not block the main thread and will have lower + * priority than microtasks (promises will have priority). + * + * @default false + */ + async?: boolean; } export class ConsoleLogWriter implements LogWriter { #console: NonNullable; #noColor: boolean; #noTimestamp: boolean; + #async: boolean; constructor(opts: ConsoleLogWriterOptions = {}) { const { console = globalThis.console, @@ -43,10 +57,12 @@ export class ConsoleLogWriter implements LogWriter { // or no color if https://no-color.org/ truthyEnv('NO_COLOR'), noTimestamp = false, + async = false, } = opts; this.#console = console; this.#noColor = noColor; this.#noTimestamp = noTimestamp; + this.#async = async; } color( style: keyof typeof asciMap, @@ -60,11 +76,11 @@ export class ConsoleLogWriter implements LogWriter { } return (asciMap[style] + text + asciMap.reset) as T; } - write( + #writeToConsole( level: LogLevel, attrs: Attributes | null | undefined, msg: string | null | undefined, - ): void { + ) { this.#console[level === 'trace' ? 'debug' : level]( [ !this.#noTimestamp && this.color('timestamp', new Date().toISOString()), @@ -76,6 +92,23 @@ export class ConsoleLogWriter implements LogWriter { .join(' '), ); } + + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void | Promise { + if (this.#async) { + const { promise, resolve } = createDeferredPromise(); + setTimeout(() => { + // queue a macrotask to avoid blocking the main thread and promises + this.#writeToConsole(level, attrs, msg); + resolve(); + }, 0); + return promise; + } + this.#writeToConsole(level, attrs, msg); + } stringifyAttrs(attrs: Attributes): string { let log = '\n'; diff --git a/packages/logger/tests/__snapshots__/writers.test.ts.snap b/packages/logger/tests/__snapshots__/writers.test.ts.snap index 7b0ee8652..82b3e201c 100644 --- a/packages/logger/tests/__snapshots__/writers.test.ts.snap +++ b/packages/logger/tests/__snapshots__/writers.test.ts.snap @@ -10,6 +10,16 @@ exports[`ConsoleLogWriter should color levels and keys 1`] = ` ] `; +exports[`ConsoleLogWriter should flush async logs 1`] = ` +[ + ""TRC hi \\n hello: {\\n dear: \\"world\\"\\n try: [\\n \\"num\\"\\n 1\\n 2\\n ]\\n }"", + ""DBG hi \\n hello: {\\n dear: \\"world\\"\\n try: [\\n \\"num\\"\\n 1\\n 2\\n ]\\n }"", + ""INF hi \\n hello: {\\n dear: \\"world\\"\\n try: [\\n \\"num\\"\\n 1\\n 2\\n ]\\n }"", + ""WRN hi \\n hello: {\\n dear: \\"world\\"\\n try: [\\n \\"num\\"\\n 1\\n 2\\n ]\\n }"", + ""ERR hi \\n hello: {\\n dear: \\"world\\"\\n try: [\\n \\"num\\"\\n 1\\n 2\\n ]\\n }"", +] +`; + exports[`ConsoleLogWriter should pretty print the attributes 1`] = ` [ ""TRC obj \\n a: 1\\n b: 2"", diff --git a/packages/logger/tests/writers.test.ts b/packages/logger/tests/writers.test.ts index d3ae6227a..b4f26c035 100644 --- a/packages/logger/tests/writers.test.ts +++ b/packages/logger/tests/writers.test.ts @@ -68,4 +68,18 @@ describe('ConsoleLogWriter', () => { expect(logs).toMatchSnapshot(); }); + + it('should flush async logs', async () => { + const [log, logs] = createTConsoleLogger({ noColor: true, async: true }); + + log.trace({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + log.debug({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + log.info({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + log.warn({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + log.error({ hello: { dear: 'world', try: ['num', 1, 2] } }, 'hi'); + + expect(logs).toHaveLength(0); + await log.flush(); + expect(logs).toMatchSnapshot(); + }); }); diff --git a/yarn.lock b/yarn.lock index 555278489..80183b5c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4247,6 +4247,7 @@ __metadata: dependencies: "@types/quick-format-unescaped": "npm:^4.0.3" "@whatwg-node/disposablestack": "npm:^0.0.6" + "@whatwg-node/promise-helpers": "npm:^1.3.2" fast-safe-stringify: "npm:^2.1.1" pino: "npm:^9.6.0" pkgroll: "npm:2.11.2" From 49f5b032d3636e6b76c0a9da12a37a34aa8b05fd Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Fri, 20 Jun 2025 13:20:24 +0200 Subject: [PATCH 26/60] log writers can flush too --- packages/logger/src/logger.ts | 26 ++++-- packages/logger/src/writers/common.ts | 1 + packages/logger/tests/logger.test.ts | 125 +++++++++++++++++++++++++- 3 files changed, 142 insertions(+), 10 deletions(-) diff --git a/packages/logger/src/logger.ts b/packages/logger/src/logger.ts index fe9a44862..5bb6355cb 100644 --- a/packages/logger/src/logger.ts +++ b/packages/logger/src/logger.ts @@ -14,8 +14,8 @@ import { } from './utils'; import { ConsoleLogWriter, JSONLogWriter, LogWriter } from './writers'; +export type { AttributeValue, MaybeLazy } from './utils'; export type { Attributes }; -export type { MaybeLazy, AttributeValue } from './utils'; export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error'; @@ -123,18 +123,28 @@ export class Logger implements AsyncDisposable { } public flush() { - if (this.#pendingWrites?.size) { + const writerFlushes = this.#writers.map((w) => w.flush).filter((f) => !!f); + if (this.#pendingWrites?.size || writerFlushes.length) { const errs: unknown[] = []; - return Promise.allSettled( - Array.from(this.#pendingWrites).map((w) => + return Promise.allSettled([ + ...Array.from(this.#pendingWrites || []).map((w) => w.catch((err) => errs.push(err)), ), - ).then(() => { - this.#pendingWrites!.clear(); - if (errs.length) { + ...Array.from(writerFlushes || []).map(async (f) => { + try { + await f(); + } catch (err) { + errs.push(err); + } + }), + ]).then(() => { + this.#pendingWrites?.clear(); + if (errs.length === 1) { + throw new Error('Failed to flush', { cause: errs[0] }); + } else if (errs.length) { throw new AggregateError( errs, - `Failed to flush ${errs.length} writes`, + `Failed to flush with ${errs.length} errors`, ); } }); diff --git a/packages/logger/src/writers/common.ts b/packages/logger/src/writers/common.ts index 4bad07367..81c93eea4 100644 --- a/packages/logger/src/writers/common.ts +++ b/packages/logger/src/writers/common.ts @@ -11,4 +11,5 @@ export interface LogWriter { attrs: Attributes | null | undefined, msg: string | null | undefined, ): void | Promise; + flush?(): void | Promise; } diff --git a/packages/logger/tests/logger.test.ts b/packages/logger/tests/logger.test.ts index d98ca15c3..febbec659 100644 --- a/packages/logger/tests/logger.test.ts +++ b/packages/logger/tests/logger.test.ts @@ -314,10 +314,56 @@ it('should wait for async writers on flush', async () => { `); }); +it('should wait for flushable writers on flush', async () => { + const logs: any[] = []; + const pendingWrites: Promise[] = []; + const log = new Logger({ + writers: [ + { + write(level, attrs, msg) { + pendingWrites.push( + (async () => { + await setTimeout(10); + logs.push({ level, attrs, msg }); + })(), + ); + }, + async flush() { + await Promise.all(pendingWrites); + }, + }, + ], + }); + + log.info('hello'); + log.info('world'); + + // not flushed yet + expect(logs).toMatchInlineSnapshot(`[]`); + + await log.flush(); + + // flushed + expect(logs).toMatchInlineSnapshot(` + [ + { + "attrs": undefined, + "level": "info", + "msg": "hello", + }, + { + "attrs": undefined, + "level": "info", + "msg": "world", + }, + ] + `); +}); + it('should handle async write errors on flush', async () => { const origConsoleError = console.error; console.error = vi.fn(() => { - // noop + // failed writes will be logged to the error console }); using _ = { [Symbol.dispose]() { @@ -346,10 +392,85 @@ it('should handle async write errors on flush', async () => { throw new Error('should not have reached here'); } catch (e) { expect(e).toMatchInlineSnapshot( - `[AggregateError: Failed to flush 2 writes]`, + `[AggregateError: Failed to flush with 2 errors]`, + ); + expect((e as AggregateError).errors).toMatchInlineSnapshot(` + [ + [Error: Write failed! #1], + [Error: Write failed! #2], + ] + `); + expect(console.error).toHaveBeenCalledTimes(2); + } +}); + +it('should handle writer flush errors on flush', async () => { + const log = new Logger({ + writers: [ + { + write() { + // noop + }, + flush() { + throw new Error('Whoops!'); + }, + }, + ], + }); + + // no fail + log.info('hello'); + log.info('world'); + + try { + await log.flush(); + throw new Error('should not have reached here'); + } catch (e) { + expect(e).toMatchInlineSnapshot(`[Error: Failed to flush]`); + expect((e as Error).cause).toMatchInlineSnapshot(`[Error: Whoops!]`); + } +}); + +it('should handle both async write and writer flush errors on flush', async () => { + const origConsoleError = console.error; + console.error = vi.fn(() => { + // failed writes will be logged to the error console + }); + using _ = { + [Symbol.dispose]() { + console.error = origConsoleError; + }, + }; + + let i = 0; + const log = new Logger({ + writers: [ + { + async write() { + i++; + throw new Error('Write failed! #' + i); + }, + flush() { + throw new Error('Whoops!'); + }, + }, + ], + }); + + // no fail + log.info('hello'); + log.info('world'); + + try { + await log.flush(); + throw new Error('should not have reached here'); + } catch (e) { + expect(e).toMatchInlineSnapshot( + `[AggregateError: Failed to flush with 3 errors]`, ); expect((e as AggregateError).errors).toMatchInlineSnapshot(` [ + [Error: Whoops!], [Error: Write failed! #1], [Error: Write failed! #2], ] From 2faeed760c556abe3e79aa1b3b64ca6d47e6b9b1 Mon Sep 17 00:00:00 2001 From: theguild-bot Date: Mon, 23 Jun 2025 12:27:11 +0000 Subject: [PATCH 27/60] docs(examples): converted from e2es --- examples/hmac-auth-https/package-lock.json | 342 ++++++++++++--------- 1 file changed, 189 insertions(+), 153 deletions(-) diff --git a/examples/hmac-auth-https/package-lock.json b/examples/hmac-auth-https/package-lock.json index 1f73d3a5e..a26237a91 100644 --- a/examples/hmac-auth-https/package-lock.json +++ b/examples/hmac-auth-https/package-lock.json @@ -2084,27 +2084,27 @@ "@graphql-hive/gateway-runtime": "^1.9.4", "@graphql-hive/importer": "^1.1.0", "@graphql-hive/plugin-aws-sigv4": "^1.0.15", - "@graphql-hive/plugin-deduplicate-request": "^1.0.0", + "@graphql-hive/plugin-deduplicate-request": "^1.0.1", "@graphql-hive/pubsub": "^1.0.0", - "@graphql-mesh/cache-cfw-kv": "^0.105.0", - "@graphql-mesh/cache-localforage": "^0.105.3", - "@graphql-mesh/cache-redis": "^0.104.0", - "@graphql-mesh/cache-upstash-redis": "^0.1.0", + "@graphql-mesh/cache-cfw-kv": "^0.105.5", + "@graphql-mesh/cache-localforage": "^0.105.6", + "@graphql-mesh/cache-redis": "^0.104.5", + "@graphql-mesh/cache-upstash-redis": "^0.1.5", "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/hmac-upstream-signature": "^1.2.27", - "@graphql-mesh/plugin-http-cache": "^0.105.2", - "@graphql-mesh/plugin-jit": "^0.2.0", - "@graphql-mesh/plugin-jwt-auth": "^1.5.5", - "@graphql-mesh/plugin-mock": "^0.105.0", + "@graphql-mesh/hmac-upstream-signature": "^1.2.28", + "@graphql-mesh/plugin-http-cache": "^0.105.6", + "@graphql-mesh/plugin-jit": "^0.2.5", + "@graphql-mesh/plugin-jwt-auth": "^1.5.6", + "@graphql-mesh/plugin-mock": "^0.105.6", "@graphql-mesh/plugin-opentelemetry": "^1.3.62", "@graphql-mesh/plugin-prometheus": "^1.3.50", - "@graphql-mesh/plugin-rate-limit": "^0.104.0", - "@graphql-mesh/plugin-snapshot": "^0.104.0", - "@graphql-mesh/transport-http": "^0.6.42", - "@graphql-mesh/transport-http-callback": "^0.6.1", - "@graphql-mesh/transport-ws": "^1.0.9", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", + "@graphql-mesh/plugin-rate-limit": "^0.104.5", + "@graphql-mesh/plugin-snapshot": "^0.104.5", + "@graphql-mesh/transport-http": "^0.6.43", + "@graphql-mesh/transport-http-callback": "^0.6.2", + "@graphql-mesh/transport-ws": "^1.0.10", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/code-file-loader": "^8.1.15", "@graphql-tools/graphql-file-loader": "^8.0.20", "@graphql-tools/load": "^8.0.14", @@ -2137,21 +2137,21 @@ "@envelop/disable-introspection": "^7.0.0", "@envelop/generic-auth": "^9.0.0", "@graphql-hive/core": "^0.12.0", - "@graphql-hive/logger-json": "^0.0.4", + "@graphql-hive/logger-json": "^0.0.5", "@graphql-hive/pubsub": "^1.0.0", "@graphql-hive/signal": "^1.0.0", "@graphql-hive/yoga": "^0.42.1", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/fusion-runtime": "^0.11.17", - "@graphql-mesh/hmac-upstream-signature": "^1.2.27", - "@graphql-mesh/plugin-response-cache": "^0.104.0", - "@graphql-mesh/transport-common": "^0.7.34", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", + "@graphql-mesh/hmac-upstream-signature": "^1.2.28", + "@graphql-mesh/plugin-response-cache": "^0.104.6", + "@graphql-mesh/transport-common": "^0.7.35", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/batch-delegate": "^9.0.39", "@graphql-tools/delegate": "^10.2.21", "@graphql-tools/executor-common": "^0.0.4", - "@graphql-tools/executor-http": "^2.0.2", + "@graphql-tools/executor-http": "^2.0.3", "@graphql-tools/federation": "^3.2.6", "@graphql-tools/stitch": "^9.4.26", "@graphql-tools/utils": "^10.8.1", @@ -2160,7 +2160,7 @@ "@graphql-yoga/plugin-csrf-prevention": "^3.13.5", "@graphql-yoga/plugin-defer-stream": "^3.13.5", "@graphql-yoga/plugin-persisted-operations": "^3.13.6", - "@types/node": "^22.15.29", + "@types/node": "^22.15.30", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/promise-helpers": "^1.3.0", "@whatwg-node/server": "^0.10.10", @@ -2195,14 +2195,14 @@ } }, "node_modules/@graphql-hive/logger-json": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@graphql-hive/logger-json/-/logger-json-0.0.4.tgz", - "integrity": "sha512-oKPgvJ2zVQNiYEN7Fz0wTlyR000uUY6mn4U8uQphFpd6XcuNhA0THoTwWUJnn20mqj8HgpKUoW47sAJ9twkcEg==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@graphql-hive/logger-json/-/logger-json-0.0.5.tgz", + "integrity": "sha512-k5/bGLKlHe+yl0r64tMZFPhXAWp6QR702ar1ZpJhmxmDJmfuSGJSEK3qVxam8WsmmJmFJhYjzwOoGd7pI6XqRw==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "cross-inspect": "^1.0.1", "tslib": "^2.8.1" }, @@ -2219,7 +2219,7 @@ "integrity": "sha512-BSSq55DnuSHURHQA1Wo08NifA/uEmOcLVS/8vSpj8F293otYwEVE+XMRBPKpVQzjm70mHasoBZnv+32KxnFmpA==", "license": "MIT", "dependencies": { - "@aws-sdk/client-sts": "^3.823.0", + "@aws-sdk/client-sts": "^3.828.0", "@graphql-mesh/fusion-runtime": "^0.11.17", "@whatwg-node/promise-helpers": "^1.3.0", "aws4": "1.13.2", @@ -2233,12 +2233,12 @@ } }, "node_modules/@graphql-hive/plugin-deduplicate-request": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@graphql-hive/plugin-deduplicate-request/-/plugin-deduplicate-request-1.0.0.tgz", - "integrity": "sha512-dqrkZQmZHS4/2GOaUP3RBgtVKEvxHe4oHT+yP3QNU5qTn9jeCGFsgqOIowEYM5fVltmHUHJEJasiuBVHJ92VnQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@graphql-hive/plugin-deduplicate-request/-/plugin-deduplicate-request-1.0.1.tgz", + "integrity": "sha512-mHsawnqgUAM+kqoJBhoH77oF0hsmvjOIrKpgLKWvJ4/DjtCglw+nnjOTEb8OTVP18lC2dSdzkVDICAindjOpuQ==", "license": "MIT", "dependencies": { - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/utils": "^10.8.6", "@whatwg-node/promise-helpers": "^1.3.1" }, @@ -2312,13 +2312,13 @@ "license": "0BSD" }, "node_modules/@graphql-mesh/cache-cfw-kv": { - "version": "0.105.3", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-cfw-kv/-/cache-cfw-kv-0.105.3.tgz", - "integrity": "sha512-FbmB/k8Lff5+SXH4NKN8wX0VrlHG6ocAQRzO+rEcTmyBDn1uCWiYqYrIuR3Ps85Ylzp+niYjZkmAMqGctqHiCQ==", + "version": "0.105.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-cfw-kv/-/cache-cfw-kv-0.105.6.tgz", + "integrity": "sha512-5RFsZq9wW1GBmZdpnAUzjsWaJx2B6tePMqC0r3JYYlBPImiEF2/qcLuzQoWWDzvlclMs7jBOJJMcZuXimuFHiw==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.3", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.4.0" }, @@ -2330,13 +2330,13 @@ } }, "node_modules/@graphql-mesh/cache-inmemory-lru": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-inmemory-lru/-/cache-inmemory-lru-0.8.4.tgz", - "integrity": "sha512-WdK1ld3n2UlNWPHIA44FaUGTTb0uN+kUr7Gh7EvYDfZJnOt5ZC4Myu0qT8qxXwQOTggO9Wf8GTRYA+hW8PhA8A==", + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-inmemory-lru/-/cache-inmemory-lru-0.8.7.tgz", + "integrity": "sha512-KoxgtbAARab0pu0B6/0H46RteQgXxgztVO1o8EWzQMSARhf3taF4W7FI3JuhyicjaFr6Vien2+hdfsx8/iPMrQ==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.3", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "@whatwg-node/disposablestack": "^0.0.6", "tslib": "^2.4.0" }, @@ -2348,14 +2348,14 @@ } }, "node_modules/@graphql-mesh/cache-localforage": { - "version": "0.105.4", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-localforage/-/cache-localforage-0.105.4.tgz", - "integrity": "sha512-y8YLsaqEQv5fRNh5y1T7XLeR9QuWQ5LIxS9w9CV1zyg5P5uHCDzk63J+aiK4qLSt9ulyTno5/CkmW7mF4QxDgg==", + "version": "0.105.7", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-localforage/-/cache-localforage-0.105.7.tgz", + "integrity": "sha512-Z+q8kGwGi3YRwY0S2zX2YKYy074D/026wbQmtzg3uG5BpnO3gTbMWCFL/PgG63viGR/GafBYekqXIdSLS3ml5A==", "license": "MIT", "dependencies": { - "@graphql-mesh/cache-inmemory-lru": "^0.8.4", - "@graphql-mesh/types": "^0.104.3", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/cache-inmemory-lru": "^0.8.7", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "localforage": "1.10.0", "tslib": "^2.4.0" }, @@ -2367,14 +2367,14 @@ } }, "node_modules/@graphql-mesh/cache-redis": { - "version": "0.104.3", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-redis/-/cache-redis-0.104.3.tgz", - "integrity": "sha512-1ZCCbaLZDvKevawxGQdhfpslkYvIyr2DY6CYJeo2dY/AHA6DUu31WXXQcBD+ElKLl+daL6HYeEJhPp6M6ARWWA==", + "version": "0.104.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-redis/-/cache-redis-0.104.6.tgz", + "integrity": "sha512-Vd+z83Gp+m3jpUI6jWG46dbaoL9A6D/o3lcJKaKSxm2A7gM4Qu5z1NlJpDZrgoVB+t99FurHrOusxOVobEF8dg==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/types": "^0.104.6", "@whatwg-node/disposablestack": "^0.0.6", "ioredis": "^5.3.2", "ioredis-mock": "^8.8.3", @@ -2388,13 +2388,13 @@ } }, "node_modules/@graphql-mesh/cache-upstash-redis": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-upstash-redis/-/cache-upstash-redis-0.1.3.tgz", - "integrity": "sha512-096cnwTUegzqTzs8SG/IS7vxyPpdKkEsm9GA9XLqy5TlqgkgFqYI6qmEJK3Und7/LhSdno7Ws92DdSh7ue9mMw==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/cache-upstash-redis/-/cache-upstash-redis-0.1.6.tgz", + "integrity": "sha512-Y22kchj/AiBIn64r+SHImaUldXPTjA4tiod5yPwKzjjS26qBJkXqCTrNKuEXIYzvygq5tqrNRX80Z2MoSBTEeQ==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.9", - "@graphql-mesh/types": "^0.104.3", + "@graphql-mesh/types": "^0.104.6", "@upstash/redis": "^1.34.3", "@whatwg-node/disposablestack": "^0.0.6", "tslib": "^2.4.0" @@ -2522,9 +2522,9 @@ "@envelop/core": "^5.2.3", "@envelop/instrumentation": "^1.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/transport-common": "^0.7.34", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", + "@graphql-mesh/transport-common": "^0.7.35", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/batch-execute": "^9.0.17", "@graphql-tools/delegate": "^10.2.21", "@graphql-tools/executor": "^1.4.7", @@ -2588,13 +2588,13 @@ } }, "node_modules/@graphql-mesh/plugin-http-cache": { - "version": "0.105.4", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-http-cache/-/plugin-http-cache-0.105.4.tgz", - "integrity": "sha512-XS4iRF9Kij991MfWtVi810LZe5ABnkl5BeZf+7XQU7ULesvNxcR5bbEU+5occKOq3pRN5KZg3n3XTkZ2ilYxZA==", + "version": "0.105.7", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-http-cache/-/plugin-http-cache-0.105.7.tgz", + "integrity": "sha512-1Wlu77ntfHIh+9ujFTFAcTfZz2X1Sg+r4iM+3HHi9kda28MwpPAlgX6+0vk1ir08vM66NSSB5RkZ2faXqI6mBA==", "license": "MIT", "dependencies": { - "@graphql-mesh/types": "^0.104.3", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "@whatwg-node/fetch": "^0.10.6", "@whatwg-node/promise-helpers": "^1.0.0", "http-cache-semantics": "^4.1.1", @@ -2608,13 +2608,13 @@ } }, "node_modules/@graphql-mesh/plugin-jit": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-jit/-/plugin-jit-0.2.3.tgz", - "integrity": "sha512-ir/CEq3wGZeFV2NC406n/SrEssdUQ2F3fG/s6D4LVDXYEodcA4mdud0Ko5I2ACsvxYfRxba7q1x2dG5BlvGPGQ==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-jit/-/plugin-jit-0.2.6.tgz", + "integrity": "sha512-iSYKc+hhhohRoyABMURsJ8XN/IoIXFEH4TmAcPO+RLu8nEnvkTweNIoz7F3JhcrSIOCyMKqk+LjUqJo2rbmQIg==", "license": "MIT", "dependencies": { "@envelop/core": "^5.1.0", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/utils": "^0.104.6", "@graphql-tools/utils": "^10.8.0", "graphql-jit": "^0.8.7", "tslib": "^2.4.0" @@ -2645,15 +2645,15 @@ } }, "node_modules/@graphql-mesh/plugin-mock": { - "version": "0.105.4", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-mock/-/plugin-mock-0.105.4.tgz", - "integrity": "sha512-yhgU0aDfzQIuCbYkqfQTYdPP6Sxn7ucG8PQdbPLkhHYrMvcqdrnFXuzWhio13pbD5/geprxmEkdncJjaY2tDlA==", + "version": "0.105.7", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-mock/-/plugin-mock-0.105.7.tgz", + "integrity": "sha512-tLy5sRZ3C5JPJkndMBiikG5HjS4NsM2iWO4A9tgz08n0f36Q2kHvJOglDzRR4sn3Nj1ILqhTknnFw4Q1PJ2y3A==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.8", - "@graphql-mesh/types": "^0.104.3", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "@graphql-tools/mock": "^9.0.3", "@graphql-tools/schema": "^10.0.5", "@graphql-tools/utils": "^10.8.0", @@ -2694,9 +2694,9 @@ "@azure/monitor-opentelemetry-exporter": "^1.0.0-beta.27", "@graphql-hive/gateway-runtime": "^1.9.4", "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/transport-common": "^0.7.34", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", + "@graphql-mesh/transport-common": "^0.7.35", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/utils": "^10.8.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^1.30.0", @@ -2726,8 +2726,8 @@ "dependencies": { "@graphql-hive/gateway-runtime": "^1.9.4", "@graphql-mesh/cross-helpers": "^0.4.10", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/utils": "^10.8.1", "@graphql-yoga/plugin-prometheus": "^6.8.5", "prom-client": "^15.0.0", @@ -2742,16 +2742,16 @@ } }, "node_modules/@graphql-mesh/plugin-rate-limit": { - "version": "0.104.3", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-rate-limit/-/plugin-rate-limit-0.104.3.tgz", - "integrity": "sha512-f5mfZX/z/iXm9TbZSZuow6P0o+8svrO7wsCZb/kAoQ2wFLUDQqcmCfDpFVCqxPVTkV+GSkI4g5jr1S899RJ6MQ==", + "version": "0.104.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-rate-limit/-/plugin-rate-limit-0.104.6.tgz", + "integrity": "sha512-PinCHbkcAnOiEoTSJrW7ilkyOZQtwXLs1BrFwYKSk/KT2cjtShRJriRJqI3fcvrb9N4raeW7O6kb5AnMDj/jrg==", "license": "MIT", "dependencies": { "@envelop/rate-limiter": "^7.0.1", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.3", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "@graphql-tools/utils": "^10.8.0", "@whatwg-node/promise-helpers": "^1.0.0", "tslib": "^2.4.0" @@ -2764,17 +2764,17 @@ } }, "node_modules/@graphql-mesh/plugin-response-cache": { - "version": "0.104.6", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-response-cache/-/plugin-response-cache-0.104.6.tgz", - "integrity": "sha512-3UWVhay2op1CR2pNpkyhhNIkQOh6Syx3LvIsfsTnqdx0RnTYZRZO77xY8sIC5m7M762HWbsFDE7BNtUpAk7Lqw==", + "version": "0.104.7", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-response-cache/-/plugin-response-cache-0.104.7.tgz", + "integrity": "sha512-DbCVHtcnjph00RMofMXm8Bbsrcz2d7rSiG5Q487BfX/HLUFN05dAujuf7x6uKHrXfRuaohoHlhum5SWxNwzPgQ==", "license": "MIT", "dependencies": { "@envelop/core": "^5.1.0", "@envelop/response-cache": "^7.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.5", - "@graphql-mesh/utils": "^0.104.5", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "@graphql-tools/utils": "^10.6.2", "@graphql-yoga/plugin-response-cache": "^3.13.1", "@whatwg-node/promise-helpers": "^1.0.0", @@ -2790,15 +2790,15 @@ } }, "node_modules/@graphql-mesh/plugin-snapshot": { - "version": "0.104.3", - "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-snapshot/-/plugin-snapshot-0.104.3.tgz", - "integrity": "sha512-q39dgck3D8m4qpRCuP+WOt59xZMMzgYiFhV6pJ/s6tzXeujA7doJb/p4ILxlG+erSTK3gp9nBbi4rQiBVEHF/g==", + "version": "0.104.6", + "resolved": "https://registry.npmjs.org/@graphql-mesh/plugin-snapshot/-/plugin-snapshot-0.104.6.tgz", + "integrity": "sha512-RrxlseP2A/wFaT7Cxhr4YUK4lb2NfZJR2fAI6s6OH7ybEFj9nYgKyGv8h+ga3T2Mx2ybpybXoZQXjqfsail76g==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "0.5.8", - "@graphql-mesh/types": "^0.104.3", - "@graphql-mesh/utils": "^0.104.3", + "@graphql-mesh/types": "^0.104.6", + "@graphql-mesh/utils": "^0.104.6", "@whatwg-node/fetch": "^0.10.6", "minimatch": "10.0.1", "tslib": "^2.4.0" @@ -2810,6 +2810,21 @@ "graphql": "*" } }, + "node_modules/@graphql-mesh/plugin-snapshot/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@graphql-mesh/store": { "version": "0.104.6", "resolved": "https://registry.npmjs.org/@graphql-mesh/store/-/store-0.104.6.tgz", @@ -2849,15 +2864,15 @@ } }, "node_modules/@graphql-mesh/transport-common": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-common/-/transport-common-0.7.34.tgz", - "integrity": "sha512-Wush6n3gm1ytUpoZYfDO4jaAUi6Ty3s0sgepASbUD0Fki2ONawq+8i/LywZw85eGlBLm5Ky2jrHwi8TKaNUdTg==", + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-common/-/transport-common-0.7.35.tgz", + "integrity": "sha512-11IMzYfFaa+oWubEv1BE5y2m0vp4AQpiN0TpvvOf4Ez61IQRi555DTteYasYlIB1TjC1+2NNE8GPOa+K4uoSWA==", "license": "MIT", "dependencies": { "@envelop/core": "^5.2.3", "@graphql-hive/pubsub": "^1.0.0", "@graphql-hive/signal": "^1.0.0", - "@graphql-mesh/types": "^0.104.0", + "@graphql-mesh/types": "^0.104.5", "@graphql-tools/executor": "^1.4.7", "@graphql-tools/executor-common": "^0.0.4", "@graphql-tools/utils": "^10.8.1", @@ -2871,17 +2886,17 @@ } }, "node_modules/@graphql-mesh/transport-http": { - "version": "0.6.42", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-http/-/transport-http-0.6.42.tgz", - "integrity": "sha512-P+cneKWodQCiBljTCau6EzpYEoQWdbKHi8LIROsbOlQi4Jn6rV22WQTkLQ0ZoIrsXXDdejO/CZkY9JapSeFwkA==", + "version": "0.6.43", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-http/-/transport-http-0.6.43.tgz", + "integrity": "sha512-9Zc/eQmrEsQWDg26vise13WdwHk6hmp+sE+7WJLFj6l7aoHKYoH5LSSW+ciU2ah7C4lCOMUOWoeoHgSVbcD2Lg==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.6", - "@graphql-mesh/transport-common": "^0.7.34", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", - "@graphql-tools/executor-http": "^2.0.2", + "@graphql-mesh/transport-common": "^0.7.35", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", + "@graphql-tools/executor-http": "^2.0.3", "@graphql-tools/utils": "^10.8.1", "@whatwg-node/promise-helpers": "^1.3.0", "graphql": "^16.9.0", @@ -2895,17 +2910,17 @@ } }, "node_modules/@graphql-mesh/transport-http-callback": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-http-callback/-/transport-http-callback-0.6.1.tgz", - "integrity": "sha512-P8lJygBuz8vEPCdRcg6U9XSz5VhP2iePFjmteU+ttRPXYe7qLD5Gf6gdn7yXgjW2HohOiNhUj+346MTVUBvaQg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-http-callback/-/transport-http-callback-0.6.2.tgz", + "integrity": "sha512-F1mfygfBPcsLj41oYR1WaprEkqeb9OOD5lNCOPdgIK/k8FmqUL40lfWKDqMQCwxhZ9HoZF29MvlozQ9s1X+xyQ==", "license": "MIT", "dependencies": { "@graphql-hive/signal": "^1.0.0", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.6", - "@graphql-mesh/transport-common": "^0.7.34", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", + "@graphql-mesh/transport-common": "^0.7.35", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/executor-common": "^0.0.4", "@graphql-tools/utils": "^10.8.1", "@repeaterjs/repeater": "^3.0.6", @@ -2921,16 +2936,16 @@ } }, "node_modules/@graphql-mesh/transport-ws": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-ws/-/transport-ws-1.0.9.tgz", - "integrity": "sha512-OjFFFX2GUVOcBcbd5ViTTaA6ComIV6XSDwMFB0KFOOqKVg7qaQK09OG00NXxJN7oTMhKMlPdzeaJXniHfq0m4g==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@graphql-mesh/transport-ws/-/transport-ws-1.0.10.tgz", + "integrity": "sha512-vOR/PYfH1AT2e/nP3HE65tmxnTYgc4VFuXK8jmK/9cDzfEefLqVRPUfeMGjjKCrHeqOSCmxUD7RjeBoz2zbvSQ==", "license": "MIT", "dependencies": { "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/string-interpolation": "^0.5.6", - "@graphql-mesh/transport-common": "^0.7.34", - "@graphql-mesh/types": "^0.104.0", - "@graphql-mesh/utils": "^0.104.2", + "@graphql-mesh/transport-common": "^0.7.35", + "@graphql-mesh/types": "^0.104.5", + "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/executor-graphql-ws": "^2.0.5", "@graphql-tools/utils": "^10.8.1", "graphql-ws": "^6.0.3", @@ -3158,9 +3173,9 @@ } }, "node_modules/@graphql-tools/executor-http": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-2.0.2.tgz", - "integrity": "sha512-EZXhyGhAi2ZPv0Mp+OxKe8tP8xAAzVduhMxwYCOMwlW18ItPr8p6Dta9O+ysXQPAQZZBJJaGKObmYi7a0UUbHg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-2.0.3.tgz", + "integrity": "sha512-zlBu3ka3yQF/SHr3BfafM734RlUG8YifjBcGDpP9aL46yonGEGwIfvcwDU+0V1KviSnXOGiyYaL2ZcG6u8GTSA==", "license": "MIT", "dependencies": { "@graphql-hive/signal": "^1.0.0", @@ -3170,7 +3185,7 @@ "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/fetch": "^0.10.8", "@whatwg-node/promise-helpers": "^1.3.0", - "meros": "^1.2.1", + "meros": "^1.3.1", "tslib": "^2.8.1" }, "engines": { @@ -3188,7 +3203,7 @@ "dependencies": { "@graphql-tools/delegate": "^10.2.21", "@graphql-tools/executor": "^1.4.7", - "@graphql-tools/executor-http": "^2.0.2", + "@graphql-tools/executor-http": "^2.0.3", "@graphql-tools/merge": "^9.0.12", "@graphql-tools/schema": "^10.0.11", "@graphql-tools/stitch": "^9.4.26", @@ -3334,9 +3349,9 @@ } }, "node_modules/@graphql-tools/mock": { - "version": "9.0.22", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-9.0.22.tgz", - "integrity": "sha512-5hU5Kx18dBTGZiCGjHgz/nUs2Eoh7t0ul8uhqUeYVUBrrle3y9rGgMsFOyx4v7hgyIbxFmzU30+8n8SC3cAcEg==", + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-9.0.23.tgz", + "integrity": "sha512-l6z5OdMAvMybqG/8aIhSJyhyc4/ryEYWY4CmpkH9KbLFe0tLOMCCbBR0+K/ANMzs2ZdGy/9yknDHGvDH46fwZw==", "license": "MIT", "dependencies": { "@graphql-tools/schema": "^10.0.23", @@ -3810,6 +3825,27 @@ "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", "license": "MIT" }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -5082,9 +5118,9 @@ } }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", - "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", "license": "MIT", "dependencies": { "@types/ms": "*", @@ -5110,9 +5146,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz", - "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==", + "version": "22.15.32", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.32.tgz", + "integrity": "sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -5188,12 +5224,12 @@ } }, "node_modules/@upstash/redis": { - "version": "1.34.9", - "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.34.9.tgz", - "integrity": "sha512-7qzzF2FQP5VxR2YUNjemWs+hl/8VzJJ6fOkT7O7kt9Ct8olEVzb1g6/ik6B8Pb8W7ZmYv81SdlVV9F6O8bh/gw==", + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.35.0.tgz", + "integrity": "sha512-WUm0Jz1xN4DBDGeJIi2Y0kVsolWRB2tsVds4SExaiLg4wBdHFMB+8IfZtBWr+BP0FvhuBr5G1/VLrJ9xzIWHsg==", "license": "MIT", "dependencies": { - "crypto-js": "^4.2.0" + "uncrypto": "^0.1.3" } }, "node_modules/@whatwg-node/cookie-store": { @@ -5538,9 +5574,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -5953,12 +5989,6 @@ "node": ">= 8" } }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", - "license": "MIT" - }, "node_modules/dataloader": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.3.tgz", @@ -7587,9 +7617,9 @@ } }, "node_modules/meros": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", - "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.1.tgz", + "integrity": "sha512-eV7dRObfTrckdmAz4/n7pT1njIsIJXRIZkgCiX43xEsPNy4gjXQzOYYxmGcolAMtF7HyfqRuDBh3Lgs4hmhVEw==", "license": "MIT", "engines": { "node": ">=13" @@ -7659,12 +7689,12 @@ } }, "node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" @@ -8872,6 +8902,12 @@ "node": ">= 0.6" } }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", From cf0eeb766c5aec49c541cf7dd699412102336963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iha=20Shin=20=28=EC=8B=A0=EC=9D=98=ED=95=98=29?= Date: Mon, 23 Jun 2025 22:01:54 +0900 Subject: [PATCH 28/60] feat(logger): add LogTape writer (#1231) Co-authored-by: Denis Badurina --- packages/logger/package.json | 15 ++++++++++ packages/logger/src/writers/logtape.ts | 39 ++++++++++++++++++++++++++ yarn.lock | 11 ++++++++ 3 files changed, 65 insertions(+) create mode 100644 packages/logger/src/writers/logtape.ts diff --git a/packages/logger/package.json b/packages/logger/package.json index bc7403022..4a1fe7eaf 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -39,6 +39,16 @@ "default": "./dist/request.js" } }, + "./writers/logtape": { + "require": { + "types": "./dist/writers/logtape.d.cts", + "default": "./dist/writers/logtape.cjs" + }, + "import": { + "types": "./dist/writers/logtape.d.ts", + "default": "./dist/writers/logtape.js" + } + }, "./writers/pino": { "require": { "types": "./dist/writers/pino.d.cts", @@ -69,9 +79,13 @@ "prepack": "yarn build" }, "peerDependencies": { + "@logtape/logtape": "^1.0.0", "pino": "^9.6.0" }, "peerDependenciesMeta": { + "@logtape/logtape": { + "optional": true + }, "pino": { "optional": true }, @@ -80,6 +94,7 @@ } }, "devDependencies": { + "@logtape/logtape": "^1.0.0", "@types/quick-format-unescaped": "^4.0.3", "@whatwg-node/disposablestack": "^0.0.6", "@whatwg-node/promise-helpers": "^1.3.2", diff --git a/packages/logger/src/writers/logtape.ts b/packages/logger/src/writers/logtape.ts new file mode 100644 index 000000000..2fae2108c --- /dev/null +++ b/packages/logger/src/writers/logtape.ts @@ -0,0 +1,39 @@ +import { getLogger, Logger as LogTapeLogger } from '@logtape/logtape'; +import { LogLevel } from '../logger'; +import { Attributes } from '../utils'; +import { LogWriter } from './common'; + +export interface LogTapeLogWriterOptions { + category?: Parameters[0]; + getProperties?( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): Record; +} + +export class LogTapeLogWriter implements LogWriter { + #logTapeLogger: LogTapeLogger; + + constructor(public options: LogTapeLogWriterOptions = {}) { + this.#logTapeLogger = getLogger(this.options.category ?? ['hive-gateway']); + } + + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void { + const log = this.#logTapeLogger[level].bind(this.#logTapeLogger); + const properties = this.options.getProperties + ? this.options.getProperties(level, attrs, msg) + : attrs + ? { + // TODO: attrs can be an array too + ...attrs, + } + : undefined; + if (msg != null) log(msg, properties); + else if (properties) log(properties); + } +} diff --git a/yarn.lock b/yarn.lock index 80183b5c4..79fb4296e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4245,6 +4245,7 @@ __metadata: version: 0.0.0-use.local resolution: "@graphql-hive/logger@workspace:packages/logger" dependencies: + "@logtape/logtape": "npm:^1.0.0" "@types/quick-format-unescaped": "npm:^4.0.3" "@whatwg-node/disposablestack": "npm:^0.0.6" "@whatwg-node/promise-helpers": "npm:^1.3.2" @@ -4254,8 +4255,11 @@ __metadata: quick-format-unescaped: "npm:^4.0.4" winston: "npm:^3.17.0" peerDependencies: + "@logtape/logtape": ^1.0.0 pino: ^9.6.0 peerDependenciesMeta: + "@logtape/logtape": + optional: true pino: optional: true winston: @@ -6294,6 +6298,13 @@ __metadata: languageName: node linkType: hard +"@logtape/logtape@npm:^1.0.0": + version: 1.0.0 + resolution: "@logtape/logtape@npm:1.0.0" + checksum: 10c0/c1f70c0b61109c67980595d0794205652e5cc6d1d5d297712902f4cf8e0992a69033d8099b5a7bb2f11d1d4b6d045f712d6aa78c95e737f3324ed09af62adfb5 + languageName: node + linkType: hard + "@lukeed/csprng@npm:^1.0.0": version: 1.1.0 resolution: "@lukeed/csprng@npm:1.1.0" From 82db1316cad01c5d1c9f5f395e6424c6f12bd664 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Mon, 30 Jun 2025 12:32:29 +0200 Subject: [PATCH 29/60] disable forking --- .changeset/new-buttons-thank.md | 7 +++++++ packages/gateway/src/cli.ts | 18 +++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 .changeset/new-buttons-thank.md diff --git a/.changeset/new-buttons-thank.md b/.changeset/new-buttons-thank.md new file mode 100644 index 000000000..91144360f --- /dev/null +++ b/.changeset/new-buttons-thank.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/gateway': major +--- + +Disable forking even if NODE_ENV=production + +Forking workers for concurrent processing is a delicate process and if not done carefully can lead to performance degradations. It should be configured with careful consideration by advanced users. diff --git a/packages/gateway/src/cli.ts b/packages/gateway/src/cli.ts index 2c9e4258b..7742e4af5 100644 --- a/packages/gateway/src/cli.ts +++ b/packages/gateway/src/cli.ts @@ -252,9 +252,8 @@ export type AddCommand = (ctx: CLIContext, cli: CLI) => void; // we dont use `Option.default()` in the command definitions because we want the CLI options to // override the config file (with option defaults, config file will always be overwritten) -const maxFork = getMaxConcurrency(); export const defaultOptions = { - fork: process.env['NODE_ENV'] === 'production' ? maxFork : 1, + fork: 1, host: platform().toLowerCase() === 'win32' || // is WSL? @@ -274,21 +273,22 @@ let cli = new Command() }) .addOption( new Option( - '--fork ', - `count of workers to spawn. uses "${maxFork}" (available parallelism) workers when NODE_ENV is "production", otherwise "1" (the main) worker (default: ${defaultOptions.fork})`, + '--fork ', + `number of workers to spawn. (default: ${defaultOptions.fork})`, ) .env('FORK') .argParser((v) => { - const count = parseInt(v); - if (isNaN(count)) { + const number = parseInt(v); + if (isNaN(number)) { throw new InvalidArgumentError('not a number.'); } - if (count > maxFork) { + const maxConcurrency = getMaxConcurrency(); + if (number > maxConcurrency) { throw new InvalidArgumentError( - `exceedes number of available parallelism "${maxFork}".`, + `exceedes number of available concurrency "${maxConcurrency}".`, ); } - return count; + return number; }), ) .addOption( From cd9b7ce551ec702c00b33e6c1b2cf68f0a6c82a3 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Mon, 30 Jun 2025 14:42:19 +0200 Subject: [PATCH 30/60] Drop Node 18 support for v2 (#1287) --- .changeset/dry-humans-mix.md | 34 +++++++++++++++++++ .github/workflows/test.yml | 6 ---- packages/batch-delegate/package.json | 2 +- packages/batch-execute/package.json | 2 +- packages/delegate/package.json | 2 +- packages/executors/common/package.json | 2 +- packages/executors/graphql-ws/package.json | 2 +- packages/executors/http/package.json | 2 +- packages/federation/package.json | 2 +- packages/fusion-runtime/package.json | 2 +- packages/gateway/package.json | 2 +- packages/importer/package.json | 2 +- packages/logger/package.json | 2 +- packages/nestjs/package.json | 2 +- packages/plugins/aws-sigv4/package.json | 2 +- .../plugins/deduplicate-request/package.json | 2 +- .../hmac-upstream-signature/package.json | 2 +- packages/plugins/jwt-auth/package.json | 2 +- packages/plugins/opentelemetry/package.json | 2 +- packages/plugins/prometheus/package.json | 2 +- packages/pubsub/package.json | 2 +- packages/runtime/package.json | 2 +- packages/signal/package.json | 2 +- packages/stitch/package.json | 2 +- packages/stitching-directives/package.json | 2 +- packages/transports/common/package.json | 2 +- .../transports/http-callback/package.json | 2 +- packages/transports/http/package.json | 2 +- packages/transports/ws/package.json | 2 +- packages/wrap/package.json | 2 +- 30 files changed, 62 insertions(+), 34 deletions(-) create mode 100644 .changeset/dry-humans-mix.md diff --git a/.changeset/dry-humans-mix.md b/.changeset/dry-humans-mix.md new file mode 100644 index 000000000..f9595dd86 --- /dev/null +++ b/.changeset/dry-humans-mix.md @@ -0,0 +1,34 @@ +--- +'@graphql-mesh/hmac-upstream-signature': major +'@graphql-hive/plugin-deduplicate-request': major +'@graphql-mesh/transport-http-callback': major +'@graphql-mesh/plugin-opentelemetry': major +'@graphql-tools/executor-graphql-ws': major +'@graphql-tools/stitching-directives': major +'@graphql-mesh/plugin-prometheus': major +'@graphql-hive/plugin-aws-sigv4': major +'@graphql-mesh/transport-common': major +'@graphql-tools/executor-common': major +'@graphql-mesh/plugin-jwt-auth': major +'@graphql-mesh/transport-http': major +'@graphql-tools/batch-delegate': major +'@graphql-tools/executor-http': major +'@graphql-mesh/fusion-runtime': major +'@graphql-tools/batch-execute': major +'@graphql-mesh/transport-ws': major +'@graphql-tools/federation': major +'@graphql-tools/delegate': major +'@graphql-hive/importer': major +'@graphql-hive/gateway': major +'@graphql-hive/gateway-runtime': major +'@graphql-hive/logger': major +'@graphql-hive/nestjs': major +'@graphql-hive/pubsub': major +'@graphql-hive/signal': major +'@graphql-tools/stitch': major +'@graphql-tools/wrap': major +--- + +Drop Node 18 support + +Least supported Node version is now v20. diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5e8481f32..ce3469252 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,6 @@ jobs: fail-fast: false matrix: node-version: - - 18 - 20 - 22 - 23 @@ -59,7 +58,6 @@ jobs: fail-fast: false matrix: node-version: - - 18 - 20 - 22 - 23 @@ -87,10 +85,6 @@ jobs: matrix: setup: # Node - - workflow-name: Node 18 on Ubuntu - os: ubuntu-latest - gateway-runner: node - node-version: 18 - workflow-name: Node 20 on Ubuntu os: ubuntu-latest gateway-runner: node diff --git a/packages/batch-delegate/package.json b/packages/batch-delegate/package.json index 89095f8a6..2dfac57b2 100644 --- a/packages/batch-delegate/package.json +++ b/packages/batch-delegate/package.json @@ -10,7 +10,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/batch-execute/package.json b/packages/batch-execute/package.json index 7c10a2e03..53e274e4a 100644 --- a/packages/batch-execute/package.json +++ b/packages/batch-execute/package.json @@ -10,7 +10,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/delegate/package.json b/packages/delegate/package.json index 7e0eb77b4..76a19837b 100644 --- a/packages/delegate/package.json +++ b/packages/delegate/package.json @@ -10,7 +10,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/executors/common/package.json b/packages/executors/common/package.json index 6179da86a..9de877fe0 100644 --- a/packages/executors/common/package.json +++ b/packages/executors/common/package.json @@ -11,7 +11,7 @@ "author": "Arda TANRIKULU ", "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/executors/graphql-ws/package.json b/packages/executors/graphql-ws/package.json index 49770c7fe..0d99b9e21 100644 --- a/packages/executors/graphql-ws/package.json +++ b/packages/executors/graphql-ws/package.json @@ -11,7 +11,7 @@ "author": "Arda TANRIKULU ", "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/executors/http/package.json b/packages/executors/http/package.json index 9c2e27496..75355021f 100644 --- a/packages/executors/http/package.json +++ b/packages/executors/http/package.json @@ -11,7 +11,7 @@ "author": "Arda TANRIKULU ", "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/federation/package.json b/packages/federation/package.json index 5120af8f8..bb6efbb89 100644 --- a/packages/federation/package.json +++ b/packages/federation/package.json @@ -10,7 +10,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/fusion-runtime/package.json b/packages/fusion-runtime/package.json index 47b43e164..f7dac9e93 100644 --- a/packages/fusion-runtime/package.json +++ b/packages/fusion-runtime/package.json @@ -15,7 +15,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/gateway/package.json b/packages/gateway/package.json index a0d4b3d0a..3509e4090 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -15,7 +15,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "bin": { "hive-gateway": "./dist/bin.js" diff --git a/packages/importer/package.json b/packages/importer/package.json index 74edf43d8..eda7b6020 100644 --- a/packages/importer/package.json +++ b/packages/importer/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/logger/package.json b/packages/logger/package.json index 4a1fe7eaf..73f63df07 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/nestjs/package.json b/packages/nestjs/package.json index 390010499..1f19f8b43 100644 --- a/packages/nestjs/package.json +++ b/packages/nestjs/package.json @@ -15,7 +15,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/plugins/aws-sigv4/package.json b/packages/plugins/aws-sigv4/package.json index e7de7b780..6c700974e 100644 --- a/packages/plugins/aws-sigv4/package.json +++ b/packages/plugins/aws-sigv4/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/plugins/deduplicate-request/package.json b/packages/plugins/deduplicate-request/package.json index 175f97b2d..7273f6d87 100644 --- a/packages/plugins/deduplicate-request/package.json +++ b/packages/plugins/deduplicate-request/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/plugins/hmac-upstream-signature/package.json b/packages/plugins/hmac-upstream-signature/package.json index ad79ec909..f2bbf140a 100644 --- a/packages/plugins/hmac-upstream-signature/package.json +++ b/packages/plugins/hmac-upstream-signature/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/plugins/jwt-auth/package.json b/packages/plugins/jwt-auth/package.json index 99308a1d7..1c819502b 100644 --- a/packages/plugins/jwt-auth/package.json +++ b/packages/plugins/jwt-auth/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/plugins/opentelemetry/package.json b/packages/plugins/opentelemetry/package.json index bb8008381..6b022a3a6 100644 --- a/packages/plugins/opentelemetry/package.json +++ b/packages/plugins/opentelemetry/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/plugins/prometheus/package.json b/packages/plugins/prometheus/package.json index 6bebe0459..33b851bf8 100644 --- a/packages/plugins/prometheus/package.json +++ b/packages/plugins/prometheus/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/pubsub/package.json b/packages/pubsub/package.json index 2106be23a..e2d1cce23 100644 --- a/packages/pubsub/package.json +++ b/packages/pubsub/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/runtime/package.json b/packages/runtime/package.json index fcf43e66b..0f1d8d5c2 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -15,7 +15,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/signal/package.json b/packages/signal/package.json index 5cf4820a2..4ff26db9c 100644 --- a/packages/signal/package.json +++ b/packages/signal/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/stitch/package.json b/packages/stitch/package.json index 6605cc341..21b926441 100644 --- a/packages/stitch/package.json +++ b/packages/stitch/package.json @@ -10,7 +10,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/stitching-directives/package.json b/packages/stitching-directives/package.json index c8a280a23..cc6c11b93 100644 --- a/packages/stitching-directives/package.json +++ b/packages/stitching-directives/package.json @@ -10,7 +10,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/transports/common/package.json b/packages/transports/common/package.json index ab87aaf3f..6a1eb92c2 100644 --- a/packages/transports/common/package.json +++ b/packages/transports/common/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/transports/http-callback/package.json b/packages/transports/http-callback/package.json index 175363b89..e21d6906a 100644 --- a/packages/transports/http-callback/package.json +++ b/packages/transports/http-callback/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/transports/http/package.json b/packages/transports/http/package.json index 1557af656..82c30990e 100644 --- a/packages/transports/http/package.json +++ b/packages/transports/http/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/transports/ws/package.json b/packages/transports/ws/package.json index 1b4068413..9841aabfd 100644 --- a/packages/transports/ws/package.json +++ b/packages/transports/ws/package.json @@ -14,7 +14,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/wrap/package.json b/packages/wrap/package.json index 18494aa2e..ee06d78db 100644 --- a/packages/wrap/package.json +++ b/packages/wrap/package.json @@ -10,7 +10,7 @@ }, "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "main": "./dist/index.js", "types": "./dist/index.d.ts", From dbb4fd9287ff872de5cc9f18546987bd71232df5 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Mon, 30 Jun 2025 19:13:16 +0200 Subject: [PATCH 31/60] disable multipar req --- .changeset/unlucky-pigs-sniff.md | 7 +++++++ packages/runtime/src/createGatewayRuntime.ts | 1 + packages/runtime/src/types.ts | 9 +++++++++ 3 files changed, 17 insertions(+) create mode 100644 .changeset/unlucky-pigs-sniff.md diff --git a/.changeset/unlucky-pigs-sniff.md b/.changeset/unlucky-pigs-sniff.md new file mode 100644 index 000000000..378088eb9 --- /dev/null +++ b/.changeset/unlucky-pigs-sniff.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/gateway-runtime': major +--- + +GraphQL multipart request support is disabled by default + +The only objective of [GraphQL multipart request spec](https://github.com/jaydenseric/graphql-multipart-request-spec) is to support file uploads; however, file uploads are not native to GraphQL and are generally considered an anti-pattern. diff --git a/packages/runtime/src/createGatewayRuntime.ts b/packages/runtime/src/createGatewayRuntime.ts index 903c6abb7..8f1619832 100644 --- a/packages/runtime/src/createGatewayRuntime.ts +++ b/packages/runtime/src/createGatewayRuntime.ts @@ -1215,6 +1215,7 @@ export function createGatewayRuntime< healthCheckEndpoint: config.healthCheckEndpoint || '/healthcheck', landingPage: landingPageRenderer, disposeOnProcessTerminate: true, + multipart: config.multipart ?? false, }); fetchAPI ||= yoga.fetchAPI; diff --git a/packages/runtime/src/types.ts b/packages/runtime/src/types.ts index 75d110ea3..432d92fe3 100644 --- a/packages/runtime/src/types.ts +++ b/packages/runtime/src/types.ts @@ -614,6 +614,15 @@ interface GatewayConfigBase> { */ deferStream?: boolean; + /** + * GraphQL Multipart Request support. + * + * @see https://github.com/jaydenseric/graphql-multipart-request-spec + * + * @default false + */ + multipart?: boolean; + /** * Enable execution cancellation * From cfdc4b1c7aa30310e0dc49672b5c7372ea33b781 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Mon, 30 Jun 2025 19:20:59 +0200 Subject: [PATCH 32/60] remove usemock --- .changeset/thick-eyes-whisper.md | 7 ++++++ packages/gateway/package.json | 1 - packages/gateway/src/index.ts | 1 - yarn.lock | 42 -------------------------------- 4 files changed, 7 insertions(+), 44 deletions(-) create mode 100644 .changeset/thick-eyes-whisper.md diff --git a/.changeset/thick-eyes-whisper.md b/.changeset/thick-eyes-whisper.md new file mode 100644 index 000000000..abafcadfb --- /dev/null +++ b/.changeset/thick-eyes-whisper.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/gateway': major +--- + +Remove mocking plugin from Hive Gateway built-ins + +There is no need to provide the `useMock` plugin alongside Hive Gateway built-ins. Not only is the mock plugin 2MB in size (minified), but installing and using it is very simple. diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 3509e4090..a1ad516ac 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -68,7 +68,6 @@ "@graphql-mesh/plugin-http-cache": "^0.105.6", "@graphql-mesh/plugin-jit": "^0.2.5", "@graphql-mesh/plugin-jwt-auth": "workspace:^", - "@graphql-mesh/plugin-mock": "^0.105.6", "@graphql-mesh/plugin-opentelemetry": "workspace:^", "@graphql-mesh/plugin-prometheus": "workspace:^", "@graphql-mesh/plugin-rate-limit": "^0.104.5", diff --git a/packages/gateway/src/index.ts b/packages/gateway/src/index.ts index f294a5326..dc636d330 100644 --- a/packages/gateway/src/index.ts +++ b/packages/gateway/src/index.ts @@ -8,7 +8,6 @@ export * from '@graphql-mesh/plugin-prometheus'; export { default as useRateLimit } from '@graphql-mesh/plugin-rate-limit'; export { default as useHttpCache } from '@graphql-mesh/plugin-http-cache'; export { useDeduplicateRequest } from '@graphql-hive/plugin-deduplicate-request'; -export { default as useMock } from '@graphql-mesh/plugin-mock'; export { default as useSnapshot } from '@graphql-mesh/plugin-snapshot'; export { default as CloudflareKVCacheStorage } from '@graphql-mesh/cache-cfw-kv'; export { default as RedisCacheStorage } from '@graphql-mesh/cache-redis'; diff --git a/yarn.lock b/yarn.lock index 79fb4296e..bab374b4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4180,7 +4180,6 @@ __metadata: "@graphql-mesh/plugin-http-cache": "npm:^0.105.6" "@graphql-mesh/plugin-jit": "npm:^0.2.5" "@graphql-mesh/plugin-jwt-auth": "workspace:^" - "@graphql-mesh/plugin-mock": "npm:^0.105.6" "@graphql-mesh/plugin-opentelemetry": "workspace:^" "@graphql-mesh/plugin-prometheus": "workspace:^" "@graphql-mesh/plugin-rate-limit": "npm:^0.104.5" @@ -4647,26 +4646,6 @@ __metadata: languageName: node linkType: hard -"@graphql-mesh/plugin-mock@npm:^0.105.6": - version: 0.105.7 - resolution: "@graphql-mesh/plugin-mock@npm:0.105.7" - dependencies: - "@graphql-mesh/cross-helpers": "npm:^0.4.10" - "@graphql-mesh/string-interpolation": "npm:^0.5.8" - "@graphql-mesh/types": "npm:^0.104.6" - "@graphql-mesh/utils": "npm:^0.104.6" - "@graphql-tools/mock": "npm:^9.0.3" - "@graphql-tools/schema": "npm:^10.0.5" - "@graphql-tools/utils": "npm:^10.8.0" - faker: "npm:5.5.3" - graphql-scalars: "npm:^1.22.4" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: "*" - checksum: 10c0/51703a20d7b82d64ce06cd7c223c007f82355e29c719ffe8c5af8f433bbce08b5f48856b6980ff51dc982a3dff2018c6f76eb4d9029d97dae2581cb6c013acff - languageName: node - linkType: hard - "@graphql-mesh/plugin-opentelemetry@workspace:^, @graphql-mesh/plugin-opentelemetry@workspace:packages/plugins/opentelemetry": version: 0.0.0-use.local resolution: "@graphql-mesh/plugin-opentelemetry@workspace:packages/plugins/opentelemetry" @@ -5235,20 +5214,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/mock@npm:^9.0.3": - version: 9.0.22 - resolution: "@graphql-tools/mock@npm:9.0.22" - dependencies: - "@graphql-tools/schema": "npm:^10.0.23" - "@graphql-tools/utils": "npm:^10.8.6" - fast-json-stable-stringify: "npm:^2.1.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/3e79c7e8ef2dcf787c65dda66c6dadd81252e7a05c201c394d4286d86b928ffe20c2153db746b47dc340c5c9805b3528a28441ac26bfbc0188ca2469652fcbdc - languageName: node - linkType: hard - "@graphql-tools/schema@npm:10.0.23, @graphql-tools/schema@npm:^10.0.11, @graphql-tools/schema@npm:^10.0.23, @graphql-tools/schema@npm:^10.0.5": version: 10.0.23 resolution: "@graphql-tools/schema@npm:10.0.23" @@ -13294,13 +13259,6 @@ __metadata: languageName: node linkType: hard -"faker@npm:5.5.3": - version: 5.5.3 - resolution: "faker@npm:5.5.3" - checksum: 10c0/55ee2fb6425df717253f237b4e952c94efe33da23a5826ca41c6ecb31ccfb49d06c5de64b82b6994ca9c76c05eab4dbf779cea047455fff6e62cc9d585c7d460 - languageName: node - linkType: hard - "fast-copy@npm:^3.0.2": version: 3.0.2 resolution: "fast-copy@npm:3.0.2" From 50ca0c1efa007211f8c5b5ce5f675c074f5de4c2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 30 Jun 2025 17:21:28 +0000 Subject: [PATCH 33/60] chore(dependencies): updated changesets for modified dependencies --- .changeset/@graphql-hive_gateway-956-dependencies.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changeset/@graphql-hive_gateway-956-dependencies.md b/.changeset/@graphql-hive_gateway-956-dependencies.md index fc6e6bbec..f60ed026e 100644 --- a/.changeset/@graphql-hive_gateway-956-dependencies.md +++ b/.changeset/@graphql-hive_gateway-956-dependencies.md @@ -5,3 +5,4 @@ dependencies updates: - Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Removed dependency [`@graphql-mesh/plugin-mock@^0.105.6` ↗︎](https://www.npmjs.com/package/@graphql-mesh/plugin-mock/v/0.105.6) (from `dependencies`) From 31b43f562316a564218fc3d2609603bbdd80d845 Mon Sep 17 00:00:00 2001 From: theguild-bot Date: Mon, 30 Jun 2025 17:25:01 +0000 Subject: [PATCH 34/60] docs(examples): converted from e2es --- examples/hmac-auth-https/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/hmac-auth-https/package-lock.json b/examples/hmac-auth-https/package-lock.json index a26237a91..569c2a4a4 100644 --- a/examples/hmac-auth-https/package-lock.json +++ b/examples/hmac-auth-https/package-lock.json @@ -476,7 +476,7 @@ "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.5", + "@smithy/util-retry": "^4.0.6", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -526,7 +526,7 @@ "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.5", + "@smithy/util-retry": "^4.0.6", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -800,7 +800,7 @@ "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-retry": "^4.0.5", + "@smithy/util-retry": "^4.0.6", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, From afed97d0287734130ac35cee2b45845cf3f29163 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Mon, 30 Jun 2025 19:30:11 +0200 Subject: [PATCH 35/60] install mocking utils where needdd --- packages/stitch/package.json | 1 + packages/wrap/package.json | 1 + yarn.lock | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/packages/stitch/package.json b/packages/stitch/package.json index 21b926441..dbdc5d9bb 100644 --- a/packages/stitch/package.json +++ b/packages/stitch/package.json @@ -42,6 +42,7 @@ "@graphql-tools/delegate": "workspace:^", "@graphql-tools/executor": "^1.4.7", "@graphql-tools/merge": "^9.0.12", + "@graphql-tools/mock": "^9.0.23", "@graphql-tools/schema": "^10.0.11", "@graphql-tools/utils": "^10.8.1", "@graphql-tools/wrap": "workspace:^", diff --git a/packages/wrap/package.json b/packages/wrap/package.json index ee06d78db..6c951009c 100644 --- a/packages/wrap/package.json +++ b/packages/wrap/package.json @@ -39,6 +39,7 @@ }, "dependencies": { "@graphql-tools/delegate": "workspace:^", + "@graphql-tools/mock": "^9.0.23", "@graphql-tools/schema": "^10.0.11", "@graphql-tools/utils": "^10.8.1", "@whatwg-node/promise-helpers": "^1.3.0", diff --git a/yarn.lock b/yarn.lock index bab374b4f..fa692c22b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5214,6 +5214,20 @@ __metadata: languageName: node linkType: hard +"@graphql-tools/mock@npm:^9.0.23": + version: 9.0.23 + resolution: "@graphql-tools/mock@npm:9.0.23" + dependencies: + "@graphql-tools/schema": "npm:^10.0.23" + "@graphql-tools/utils": "npm:^10.8.6" + fast-json-stable-stringify: "npm:^2.1.0" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/f6d2642bc5e67800a8ca8572685f144af2e483cd7ceb9f8777fed5e948cd60a47b3513727d07a1b8cd030dbf6c7d50ca004a26fb486e3a0cc912de61b3a6d9fb + languageName: node + linkType: hard + "@graphql-tools/schema@npm:10.0.23, @graphql-tools/schema@npm:^10.0.11, @graphql-tools/schema@npm:^10.0.23, @graphql-tools/schema@npm:^10.0.5": version: 10.0.23 resolution: "@graphql-tools/schema@npm:10.0.23" @@ -5249,6 +5263,7 @@ __metadata: "@graphql-tools/delegate": "workspace:^" "@graphql-tools/executor": "npm:^1.4.7" "@graphql-tools/merge": "npm:^9.0.12" + "@graphql-tools/mock": "npm:^9.0.23" "@graphql-tools/schema": "npm:^10.0.11" "@graphql-tools/utils": "npm:^10.8.1" "@graphql-tools/wrap": "workspace:^" @@ -5320,6 +5335,7 @@ __metadata: resolution: "@graphql-tools/wrap@workspace:packages/wrap" dependencies: "@graphql-tools/delegate": "workspace:^" + "@graphql-tools/mock": "npm:^9.0.23" "@graphql-tools/schema": "npm:^10.0.11" "@graphql-tools/utils": "npm:^10.8.1" "@whatwg-node/promise-helpers": "npm:^1.3.0" From 5e73cc903bdc3b9e25ba7580b4f4b9d11ba39f49 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 30 Jun 2025 17:30:58 +0000 Subject: [PATCH 36/60] chore(dependencies): updated changesets for modified dependencies --- .changeset/@graphql-tools_stitch-956-dependencies.md | 7 +++++++ .changeset/@graphql-tools_wrap-956-dependencies.md | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 .changeset/@graphql-tools_stitch-956-dependencies.md create mode 100644 .changeset/@graphql-tools_wrap-956-dependencies.md diff --git a/.changeset/@graphql-tools_stitch-956-dependencies.md b/.changeset/@graphql-tools_stitch-956-dependencies.md new file mode 100644 index 000000000..2f596b551 --- /dev/null +++ b/.changeset/@graphql-tools_stitch-956-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-tools/stitch': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-tools/mock@^9.0.23` ↗︎](https://www.npmjs.com/package/@graphql-tools/mock/v/9.0.23) (to `dependencies`) diff --git a/.changeset/@graphql-tools_wrap-956-dependencies.md b/.changeset/@graphql-tools_wrap-956-dependencies.md new file mode 100644 index 000000000..63a5242e4 --- /dev/null +++ b/.changeset/@graphql-tools_wrap-956-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-tools/wrap': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-tools/mock@^9.0.23` ↗︎](https://www.npmjs.com/package/@graphql-tools/mock/v/9.0.23) (to `dependencies`) From 8a140ea22557af1a6c3c6b43b9f08f93e9e285a5 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Tue, 1 Jul 2025 10:59:42 +0200 Subject: [PATCH 37/60] fix e2e upload tests --- e2e/file-upload/gateway.config.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 e2e/file-upload/gateway.config.ts diff --git a/e2e/file-upload/gateway.config.ts b/e2e/file-upload/gateway.config.ts new file mode 100644 index 000000000..1d12e95a7 --- /dev/null +++ b/e2e/file-upload/gateway.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from '@graphql-hive/gateway'; + +export const gatewayConfig = defineConfig({ + multipart: true, +}); From 7e6db5d136e6f6baaaaeebed5b7c0dad6dea176b Mon Sep 17 00:00:00 2001 From: theguild-bot Date: Tue, 1 Jul 2025 09:05:08 +0000 Subject: [PATCH 38/60] docs(examples): converted from e2es --- examples/file-upload/gateway.config.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 examples/file-upload/gateway.config.ts diff --git a/examples/file-upload/gateway.config.ts b/examples/file-upload/gateway.config.ts new file mode 100644 index 000000000..1d12e95a7 --- /dev/null +++ b/examples/file-upload/gateway.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from '@graphql-hive/gateway'; + +export const gatewayConfig = defineConfig({ + multipart: true, +}); From a38d64d536f9515f294b3eee2eff28bf7e2d75e8 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Tue, 1 Jul 2025 13:49:46 +0200 Subject: [PATCH 39/60] mock is a dev dep --- packages/stitch/package.json | 2 +- packages/wrap/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/stitch/package.json b/packages/stitch/package.json index dbdc5d9bb..0cf6a73fd 100644 --- a/packages/stitch/package.json +++ b/packages/stitch/package.json @@ -42,7 +42,6 @@ "@graphql-tools/delegate": "workspace:^", "@graphql-tools/executor": "^1.4.7", "@graphql-tools/merge": "^9.0.12", - "@graphql-tools/mock": "^9.0.23", "@graphql-tools/schema": "^10.0.11", "@graphql-tools/utils": "^10.8.1", "@graphql-tools/wrap": "workspace:^", @@ -50,6 +49,7 @@ "tslib": "^2.8.1" }, "devDependencies": { + "@graphql-tools/mock": "^9.0.23", "dataloader": "^2.2.3", "graphql": "^16.9.0", "pkgroll": "2.14.3" diff --git a/packages/wrap/package.json b/packages/wrap/package.json index 6c951009c..1a4d3b828 100644 --- a/packages/wrap/package.json +++ b/packages/wrap/package.json @@ -39,13 +39,13 @@ }, "dependencies": { "@graphql-tools/delegate": "workspace:^", - "@graphql-tools/mock": "^9.0.23", "@graphql-tools/schema": "^10.0.11", "@graphql-tools/utils": "^10.8.1", "@whatwg-node/promise-helpers": "^1.3.0", "tslib": "^2.8.1" }, "devDependencies": { + "@graphql-tools/mock": "^9.0.23", "graphql": "^16.9.0", "pkgroll": "2.14.3" }, From 0bb9a24e32d1e179be5241b45fdcdf1fd4370ab4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 1 Jul 2025 11:50:19 +0000 Subject: [PATCH 40/60] chore(dependencies): updated changesets for modified dependencies --- .changeset/@graphql-tools_stitch-956-dependencies.md | 7 ------- .changeset/@graphql-tools_wrap-956-dependencies.md | 7 ------- 2 files changed, 14 deletions(-) delete mode 100644 .changeset/@graphql-tools_stitch-956-dependencies.md delete mode 100644 .changeset/@graphql-tools_wrap-956-dependencies.md diff --git a/.changeset/@graphql-tools_stitch-956-dependencies.md b/.changeset/@graphql-tools_stitch-956-dependencies.md deleted file mode 100644 index 2f596b551..000000000 --- a/.changeset/@graphql-tools_stitch-956-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@graphql-tools/stitch': patch ---- - -dependencies updates: - -- Added dependency [`@graphql-tools/mock@^9.0.23` ↗︎](https://www.npmjs.com/package/@graphql-tools/mock/v/9.0.23) (to `dependencies`) diff --git a/.changeset/@graphql-tools_wrap-956-dependencies.md b/.changeset/@graphql-tools_wrap-956-dependencies.md deleted file mode 100644 index 63a5242e4..000000000 --- a/.changeset/@graphql-tools_wrap-956-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@graphql-tools/wrap': patch ---- - -dependencies updates: - -- Added dependency [`@graphql-tools/mock@^9.0.23` ↗︎](https://www.npmjs.com/package/@graphql-tools/mock/v/9.0.23) (to `dependencies`) From 9e4d81c2ad9e99d2195e3f2a021a30a9312cf980 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Tue, 1 Jul 2025 14:47:04 +0200 Subject: [PATCH 41/60] feat(opentelemetry): new configuration API (#1171) Co-authored-by: github-actions[bot] Co-authored-by: Denis Badurina Co-authored-by: theguild-bot --- ...@graphql-hive_gateway-1171-dependencies.md | 15 + ..._plugin-opentelemetry-1171-dependencies.md | 18 + ...ace-otlp-http-npm-0.200.0-80a44c64cd.patch | 20 - ...exporter-base-npm-0.200.0-6fb25211c7.patch | 62 - ...exporter-base-npm-0.202.0-f6f29c2eeb.patch | 29 + ...metry-resources-npm-2.0.0-f20376a5f9.patch | 124 -- ...n-node-resolve-npm-16.0.1-2936474bab.patch | 48 + .../ansi-color-npm-0.2.1-f7243d10a4.patch | 15 + DEPS_RESOLUTIONS_NOTES.md | 19 +- .../cloudflare-workers.e2e.ts | 27 +- e2e/cloudflare-workers/src/index.ts | 32 +- .../services/gateway-fastify.ts | 28 +- e2e/opentelemetry/gateway.config.ts | 92 +- e2e/opentelemetry/opentelemetry.e2e.ts | 82 +- internal/e2e/src/tenv.ts | 7 +- package.json | 6 +- packages/gateway/package.json | 11 +- packages/gateway/rollup.config.js | 80 +- packages/plugins/opentelemetry/package.json | 37 +- .../opentelemetry/scripts/inject-version.ts | 35 + .../src/async-context-manager.ts | 6 + .../plugins/opentelemetry/src/attributes.ts | 8 +- .../src/auto-instrumentations.ts | 9 + packages/plugins/opentelemetry/src/context.ts | 33 +- .../src/exporter-trace-otlp-grpc.ts | 3 + packages/plugins/opentelemetry/src/gobal.d.ts | 6 + packages/plugins/opentelemetry/src/index.ts | 2 +- packages/plugins/opentelemetry/src/plugin.ts | 502 ++--- .../plugins/opentelemetry/src/processors.ts | 106 - .../plugins/opentelemetry/src/sdk-node.ts | 31 + packages/plugins/opentelemetry/src/setup.ts | 192 ++ packages/plugins/opentelemetry/src/spans.ts | 18 +- packages/plugins/opentelemetry/src/utils.ts | 59 +- .../tests/useOpenTelemetry.spec.ts | 474 +++-- packages/plugins/opentelemetry/tests/utils.ts | 75 +- .../plugins/opentelemetry/tests/yoga.spec.ts | 21 +- tsconfig.json | 3 + yarn.lock | 1776 ++++++++++++++--- 38 files changed, 2919 insertions(+), 1192 deletions(-) create mode 100644 .changeset/@graphql-hive_gateway-1171-dependencies.md create mode 100644 .changeset/@graphql-mesh_plugin-opentelemetry-1171-dependencies.md delete mode 100644 .yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.200.0-80a44c64cd.patch delete mode 100644 .yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch create mode 100644 .yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.202.0-f6f29c2eeb.patch delete mode 100644 .yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch create mode 100644 .yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch create mode 100644 .yarn/patches/ansi-color-npm-0.2.1-f7243d10a4.patch create mode 100644 packages/plugins/opentelemetry/scripts/inject-version.ts create mode 100644 packages/plugins/opentelemetry/src/async-context-manager.ts create mode 100644 packages/plugins/opentelemetry/src/auto-instrumentations.ts create mode 100644 packages/plugins/opentelemetry/src/exporter-trace-otlp-grpc.ts create mode 100644 packages/plugins/opentelemetry/src/gobal.d.ts delete mode 100644 packages/plugins/opentelemetry/src/processors.ts create mode 100644 packages/plugins/opentelemetry/src/sdk-node.ts create mode 100644 packages/plugins/opentelemetry/src/setup.ts diff --git a/.changeset/@graphql-hive_gateway-1171-dependencies.md b/.changeset/@graphql-hive_gateway-1171-dependencies.md new file mode 100644 index 000000000..67ded21e9 --- /dev/null +++ b/.changeset/@graphql-hive_gateway-1171-dependencies.md @@ -0,0 +1,15 @@ +--- +'@graphql-hive/gateway': patch +--- + +dependencies updates: + +- Added dependency [`@opentelemetry/api@^1.9.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api/v/1.9.0) (to `dependencies`) +- Added dependency [`@opentelemetry/context-zone@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-zone/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/core@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/exporter-jaeger@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-jaeger/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/exporter-zipkin@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/propagator-b3@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/propagator-b3/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/propagator-jaeger@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/propagator-jaeger/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sampler-jaeger-remote@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sampler-jaeger-remote/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-metrics@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-metrics/v/2.0.1) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-1171-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-1171-dependencies.md new file mode 100644 index 000000000..248438bb8 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-1171-dependencies.md @@ -0,0 +1,18 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +dependencies updates: + +- Updated dependency [`@opentelemetry/context-async-hooks@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.1) (from `^2.0.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/core@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.1) (from `^2.0.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-grpc@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-grpc/v/0.202.0) (from `^0.200.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-http@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.202.0) (from `^0.200.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/instrumentation@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/instrumentation/v/0.202.0) (from `^0.200.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/resources@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.0.1) (from `^2.0.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/sdk-trace-base@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.1) (from `^2.0.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/semantic-conventions@^1.34.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.34.0) (from `^1.28.0`, in `dependencies`) +- Added dependency [`@opentelemetry/auto-instrumentations-node@^0.60.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.60.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-node@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.202.0) (to `dependencies`) +- Removed dependency [`@opentelemetry/exporter-zipkin@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/2.0.0) (from `dependencies`) +- Removed dependency [`@opentelemetry/sdk-trace-web@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-web/v/2.0.0) (from `dependencies`) diff --git a/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.200.0-80a44c64cd.patch b/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.200.0-80a44c64cd.patch deleted file mode 100644 index 5807f045d..000000000 --- a/.yarn/patches/@opentelemetry-exporter-trace-otlp-http-npm-0.200.0-80a44c64cd.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/package.json b/package.json -index d90fb5e21da07efdc8c645cae1327495235910d2..869ab86b744a36da0192da14b638208451d7c147 100644 ---- a/package.json -+++ b/package.json -@@ -3,13 +3,13 @@ - "version": "0.200.0", - "description": "OpenTelemetry Collector Trace Exporter allows user to send collected traces to the OpenTelemetry Collector", - "main": "build/src/index.js", -- "module": "build/esm/index.js", -+ "module": "build/esnext/index.js", - "esnext": "build/esnext/index.js", - "types": "build/src/index.d.ts", - "repository": "open-telemetry/opentelemetry-js", - "browser": { - "./src/platform/index.ts": "./src/platform/browser/index.ts", -- "./build/esm/platform/index.js": "./build/esm/platform/browser/index.js", -+ "./build/esm/platform/index.js": "./build/esnext/platform/browser/index.js", - "./build/esnext/platform/index.js": "./build/esnext/platform/browser/index.js", - "./build/src/platform/index.js": "./build/src/platform/browser/index.js" - }, diff --git a/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch b/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch deleted file mode 100644 index b585e1fbc..000000000 --- a/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch +++ /dev/null @@ -1,62 +0,0 @@ -diff --git a/build/esnext/transport/http-exporter-transport.js b/build/esnext/transport/http-exporter-transport.js -index 7977489487a2236fbd0e4c2273ef53fd3c7b93a8..edec72e84b575cb07ea3e4710f9bcb61f3915805 100644 ---- a/build/esnext/transport/http-exporter-transport.js -+++ b/build/esnext/transport/http-exporter-transport.js -@@ -20,7 +20,7 @@ class HttpExporterTransport { - this._parameters = _parameters; - } - async send(data, timeoutMillis) { -- const { agent, send } = this._loadUtils(); -+ const { agent, send } = await this._loadUtils(); - return new Promise(resolve => { - send(this._parameters, agent, data, result => { - resolve(result); -@@ -30,13 +30,11 @@ class HttpExporterTransport { - shutdown() { - // intentionally left empty, nothing to do. - } -- _loadUtils() { -+ async _loadUtils() { - let utils = this._utils; - if (utils === null) { - // Lazy require to ensure that http/https is not required before instrumentations can wrap it. -- const { sendWithHttp, createHttpAgent, -- // eslint-disable-next-line @typescript-eslint/no-var-requires -- } = require('./http-transport-utils'); -+ const { sendWithHttp, createHttpAgent } = await import('./http-transport-utils'); - utils = this._utils = { - agent: createHttpAgent(this._parameters.url, this._parameters.agentOptions), - send: sendWithHttp, -diff --git a/package.json b/package.json -index d00689f7f0eb517923fe6f6f9e8b6b624d5936ca..c60c871496c8823ee1c3d0ba62a11553eb35822b 100644 ---- a/package.json -+++ b/package.json -@@ -3,24 +3,24 @@ - "version": "0.200.0", - "description": "OpenTelemetry OTLP Exporter base (for internal use only)", - "main": "build/src/index.js", -- "module": "build/esm/index.js", -+ "module": "build/esnext/index.js", - "esnext": "build/esnext/index.js", - "types": "build/src/index.d.ts", - "exports": { - ".": { -- "module": "./build/esm/index.js", -+ "module": "./build/esnext/index.js", - "esnext": "./build/esnext/index.js", - "types": "./build/src/index.d.ts", - "default": "./build/src/index.js" - }, - "./node-http": { -- "module": "./build/esm/index-node-http.js", -+ "module": "./build/esnext/index-node-http.js", - "esnext": "./build/esnext/index-node-http.js", - "types": "./build/src/index-node-http.d.ts", - "default": "./build/src/index-node-http.js" - }, - "./browser-http": { -- "module": "./build/esm/index-browser-http.js", -+ "module": "./build/esnext/index-browser-http.js", - "esnext": "./build/esnext/index-browser-http.js", - "types": "./build/src/index-browser-http.d.ts", - "default": "./build/src/index-browser-http.js" diff --git a/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.202.0-f6f29c2eeb.patch b/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.202.0-f6f29c2eeb.patch new file mode 100644 index 000000000..bfdae5bdd --- /dev/null +++ b/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.202.0-f6f29c2eeb.patch @@ -0,0 +1,29 @@ +diff --git a/build/esnext/transport/http-exporter-transport.js b/build/esnext/transport/http-exporter-transport.js +index 7977489487a2236fbd0e4c2273ef53fd3c7b93a8..93e9701d10f6aea530f38330daea87199e514452 100644 +--- a/build/esnext/transport/http-exporter-transport.js ++++ b/build/esnext/transport/http-exporter-transport.js +@@ -20,7 +20,7 @@ class HttpExporterTransport { + this._parameters = _parameters; + } + async send(data, timeoutMillis) { +- const { agent, send } = this._loadUtils(); ++ const { agent, send } = await this._loadUtils(); + return new Promise(resolve => { + send(this._parameters, agent, data, result => { + resolve(result); +@@ -30,13 +30,11 @@ class HttpExporterTransport { + shutdown() { + // intentionally left empty, nothing to do. + } +- _loadUtils() { ++ async _loadUtils() { + let utils = this._utils; + if (utils === null) { + // Lazy require to ensure that http/https is not required before instrumentations can wrap it. +- const { sendWithHttp, createHttpAgent, +- // eslint-disable-next-line @typescript-eslint/no-var-requires +- } = require('./http-transport-utils'); ++ const { sendWithHttp, createHttpAgent } = await import('./http-transport-utils'); + utils = this._utils = { + agent: createHttpAgent(this._parameters.url, this._parameters.agentOptions), + send: sendWithHttp, diff --git a/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch b/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch deleted file mode 100644 index 6aaec9091..000000000 --- a/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch +++ /dev/null @@ -1,124 +0,0 @@ -diff --git a/build/esnext/detectors/platform/node/machine-id/getMachineId.js b/build/esnext/detectors/platform/node/machine-id/getMachineId.js -index 6600fb658cb3330dde569141fafd51c9b2f215e1..fc6d07470edcdd36e2895bfd6f20ecb94275a799 100644 ---- a/build/esnext/detectors/platform/node/machine-id/getMachineId.js -+++ b/build/esnext/detectors/platform/node/machine-id/getMachineId.js -@@ -13,23 +13,28 @@ - * See the License for the specific language governing permissions and - * limitations under the License. - */ --import * as process from 'process'; --let getMachineId; --switch (process.platform) { -- case 'darwin': -- ({ getMachineId } = require('./getMachineId-darwin')); -- break; -- case 'linux': -- ({ getMachineId } = require('./getMachineId-linux')); -- break; -- case 'freebsd': -- ({ getMachineId } = require('./getMachineId-bsd')); -- break; -- case 'win32': -- ({ getMachineId } = require('./getMachineId-win')); -- break; -+export function getMachineId(...args) { -+ switch (process.platform) { -+ case "darwin": -+ return import("./getMachineId-darwin").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); -+ case "linux": -+ return import("./getMachineId-linux").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); -+ case "freebsd": -+ return import("./getMachineId-bsd").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); -+ case "win32": -+ return import("./getMachineId-win").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); - default: -- ({ getMachineId } = require('./getMachineId-unsupported')); -+ return import("./getMachineId-unsupported").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); -+ } - } --export { getMachineId }; - //# sourceMappingURL=getMachineId.js.map -diff --git a/build/src/detectors/platform/node/machine-id/getMachineId.js b/build/src/detectors/platform/node/machine-id/getMachineId.js -index 9c1877c31fda380b7c6e64491400972fb8dc297c..8ddfff3c832abd65bde91f09c4ef93016b738219 100644 ---- a/build/src/detectors/platform/node/machine-id/getMachineId.js -+++ b/build/src/detectors/platform/node/machine-id/getMachineId.js -@@ -16,23 +16,28 @@ exports.getMachineId = void 0; - * See the License for the specific language governing permissions and - * limitations under the License. - */ --const process = require("process"); --let getMachineId; --exports.getMachineId = getMachineId; --switch (process.platform) { -- case 'darwin': -- (exports.getMachineId = getMachineId = require('./getMachineId-darwin').getMachineId); -- break; -- case 'linux': -- (exports.getMachineId = getMachineId = require('./getMachineId-linux').getMachineId); -- break; -- case 'freebsd': -- (exports.getMachineId = getMachineId = require('./getMachineId-bsd').getMachineId); -- break; -- case 'win32': -- (exports.getMachineId = getMachineId = require('./getMachineId-win').getMachineId); -- break; -+exports.getMachineId = function getMachineId(...args) { -+ switch (process.platform) { -+ case "darwin": -+ return import("./getMachineId-darwin").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); -+ case "linux": -+ return import("./getMachineId-linux").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); -+ case "freebsd": -+ return import("./getMachineId-bsd").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); -+ case "win32": -+ return import("./getMachineId-win").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); - default: -- (exports.getMachineId = getMachineId = require('./getMachineId-unsupported').getMachineId); -+ return import("./getMachineId-unsupported").then(({ getMachineId }) => -+ getMachineId(...args) -+ ); -+ } - } - //# sourceMappingURL=getMachineId.js.map -\ No newline at end of file -diff --git a/package.json b/package.json -index 6a4170da17a23b3d4969fc12412f26d6f7df83ef..b856e274838fbbd67d7a4f6b31346072f737b026 100644 ---- a/package.json -+++ b/package.json -@@ -3,15 +3,15 @@ - "version": "2.0.0", - "description": "OpenTelemetry SDK resources", - "main": "build/src/index.js", -- "module": "build/esm/index.js", -+ "module": "build/esnext/index.js", - "esnext": "build/esnext/index.js", - "browser": { - "./src/platform/index.ts": "./src/platform/browser/index.ts", -- "./build/esm/platform/index.js": "./build/esm/platform/browser/index.js", -+ "./build/esm/platform/index.js": "./build/esnext/platform/browser/index.js", - "./build/esnext/platform/index.js": "./build/esnext/platform/browser/index.js", - "./build/src/platform/index.js": "./build/src/platform/browser/index.js", - "./src/detectors/platform/index.ts": "./src/detectors/platform/browser/index.ts", -- "./build/esm/detectors/platform/index.js": "./build/esm/detectors/platform/browser/index.js", -+ "./build/esm/detectors/platform/index.js": "./build/esnext/detectors/platform/browser/index.js", - "./build/esnext/detectors/platform/index.js": "./build/esnext/detectors/platform/browser/index.js", - "./build/src/detectors/platform/index.js": "./build/src/detectors/platform/browser/index.js" - }, diff --git a/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch b/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch new file mode 100644 index 000000000..08444c65f --- /dev/null +++ b/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch @@ -0,0 +1,48 @@ +diff --git a/dist/es/index.js b/dist/es/index.js +index 505218ea7b14fb8773fe805b622f9071d5da59dd..263631008120b7bf2bd678220dca6394ed30c026 100644 +--- a/dist/es/index.js ++++ b/dist/es/index.js +@@ -478,28 +478,10 @@ async function resolvePackageTarget(context, { target, patternMatch, isImports } + } + // Otherwise, if target is a non-null Object, then + if (target && typeof target === 'object') { +- // For each property of target +- for (const [key, value] of Object.entries(target)) { +- // If exports contains any index property keys, as defined in ECMA-262 6.1.7 Array Index, throw an Invalid Package Configuration error. +- // TODO: We do not check if the key is a number here... +- // If key equals "default" or conditions contains an entry for the key, then +- if (key === 'default' || context.conditions.includes(key)) { +- // Let targetValue be the value of the property in target. +- // Let resolved be the result of PACKAGE_TARGET_RESOLVE of the targetValue +- const resolved = await resolvePackageTarget(context, { +- target: value, +- patternMatch, +- isImports +- }); +- // If resolved is equal to undefined, continue the loop. +- // Return resolved. +- if (resolved !== undefined) { +- return resolved; +- } +- } +- } +- // Return undefined. +- return undefined; ++ const key = context.conditions.find(condition => condition in target) ?? 'default'; ++ return key in target ++ ? resolvePackageTarget(context, { target: target[key], patternMatch, isImports }) ++ : undefined; + } + // Otherwise, if target is null, return null. + if (target === null) { +@@ -1072,8 +1054,8 @@ function nodeResolve(opts = {}) { + ? 'development' + : 'production' + ]; +- const conditionsEsm = [...baseConditionsEsm, ...exportConditions, ...devProdCondition]; +- const conditionsCjs = [...baseConditionsCjs, ...exportConditions, ...devProdCondition]; ++ const conditionsEsm = [...baseConditionsEsm, ...exportConditions, ...devProdCondition].reverse(); ++ const conditionsCjs = [...baseConditionsCjs, ...exportConditions, ...devProdCondition].reverse(); + const packageInfoCache = new Map(); + const idToPackageInfo = new Map(); + const mainFields = getMainFields(options); diff --git a/.yarn/patches/ansi-color-npm-0.2.1-f7243d10a4.patch b/.yarn/patches/ansi-color-npm-0.2.1-f7243d10a4.patch new file mode 100644 index 000000000..2e834077d --- /dev/null +++ b/.yarn/patches/ansi-color-npm-0.2.1-f7243d10a4.patch @@ -0,0 +1,15 @@ +diff --git a/lib/ansi-color.js b/lib/ansi-color.js +index 1062c87b46c5515a2d0c813b38de333b88149d0b..9d8838916773350f6e726ee96bccbe235cef4ce5 100644 +--- a/lib/ansi-color.js ++++ b/lib/ansi-color.js +@@ -32,8 +32,8 @@ exports.set = function(str, color) { + var color_attrs = color.split("+"); + var ansi_str = ""; + for(var i=0, attr; attr = color_attrs[i]; i++) { +- ansi_str += "\033[" + ANSI_CODES[attr] + "m"; ++ ansi_str += "\x1b[" + ANSI_CODES[attr] + "m"; + } +- ansi_str += str + "\033[" + ANSI_CODES["off"] + "m"; ++ansi_str += str + "\x1b[" + ANSI_CODES["off"] + "m"; + return ansi_str; + }; diff --git a/DEPS_RESOLUTIONS_NOTES.md b/DEPS_RESOLUTIONS_NOTES.md index 8f775b2d1..46ee8f1f4 100644 --- a/DEPS_RESOLUTIONS_NOTES.md +++ b/DEPS_RESOLUTIONS_NOTES.md @@ -5,7 +5,7 @@ Here we collect reasons and write explanations about why some resolutions or pat ### pkgroll 1. https://github.com/privatenumber/pkgroll/issues/101 (added `interop: "auto"` to `getRollupConfigs` outputs) -1. Skip libchecking while generating type declarations because we never bundle `@types` by disabling `respectExternal` ([read more](https://github.com/Swatinem/rollup-plugin-dts?tab=readme-ov-file#what-to-expect)) +2. Skip libchecking while generating type declarations because we never bundle `@types` by disabling `respectExternal` ([read more](https://github.com/Swatinem/rollup-plugin-dts?tab=readme-ov-file#what-to-expect)) ### tsx @@ -18,18 +18,17 @@ Here we collect reasons and write explanations about why some resolutions or pat ### @memlab/core 1. Define package.json#export for `@memlab/core/Types` -1. Define package.json#export for `@memlab/core/Utils` - -### @opentelemetry/exporter-trace-otlp-http - -1. Point to esnext instead of esm for ES Module support +2. Define package.json#export for `@memlab/core/Utils` ### @opentelemetry/otlp-exporter-base -1. Point to esnext instead of esm for ES Module support 1. Use `import` instead of `require` for dynamic resolution in ES Module -### @opentelemetry/resources +### @rollup/plugin-node-resolve -1. Point to esnext instead of esm for ES Module support -1. Use `import` instead of `require` for dynamic resolution in ES Module +1. Give priority to additional `exportConditions` provided in configuration. This allows to not patch most OTEL packages to point to esnext build. + +### ansi-color + +1. Used by OTEl packages (NodeSDK). +2. Contains a legacy byte code syntax, forbidden in strict mode used by Hive Gateway. diff --git a/e2e/cloudflare-workers/cloudflare-workers.e2e.ts b/e2e/cloudflare-workers/cloudflare-workers.e2e.ts index aab459035..445ce1cb4 100644 --- a/e2e/cloudflare-workers/cloudflare-workers.e2e.ts +++ b/e2e/cloudflare-workers/cloudflare-workers.e2e.ts @@ -41,15 +41,18 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( type JaegerTracesApiResponse = { data: Array<{ traceID: string; - spans: Array<{ - traceID: string; - spanID: string; - operationName: string; - tags: Array<{ key: string; value: string; type: string }>; - }>; + spans: JaegerTraceSpan[]; }>; }; + type JaegerTraceSpan = { + traceID: string; + spanID: string; + operationName: string; + tags: Array<{ key: string; value: string; type: string }>; + references: Array<{ refType: string; spanID: string; traceID: string }>; + }; + async function getJaegerTraces( service: string, expectedDataLength: number, @@ -77,7 +80,7 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( async function wrangler(env: { OTLP_EXPORTER_URL: string; - OTLP_SERVICE_NAME: string; + OTEL_SERVICE_NAME: string; }) { const port = await getAvailablePort(); await spawn([ @@ -89,7 +92,9 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( '--var', 'OTLP_EXPORTER_URL:' + env.OTLP_EXPORTER_URL, '--var', - 'OTLP_SERVICE_NAME:' + env.OTLP_SERVICE_NAME, + 'OTEL_SERVICE_NAME:' + env.OTEL_SERVICE_NAME, + '--var', + 'OTEL_LOG_LEVEL:debug', ...(isDebug() ? ['--var', 'DEBUG:1'] : []), ]); const hostname = await getLocalhost(port); @@ -122,7 +127,7 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( const serviceName = 'mesh-e2e-test-1'; const { execute } = await wrangler({ OTLP_EXPORTER_URL: `${jaegerHostname}:${jaeger.port}/v1/traces`, - OTLP_SERVICE_NAME: serviceName, + OTEL_SERVICE_NAME: serviceName, }); await expect(execute({ query: TEST_QUERY })).resolves @@ -169,7 +174,7 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( const serviceName = 'mesh-e2e-test-4'; const { url } = await wrangler({ OTLP_EXPORTER_URL: `${jaegerHostname}:${jaeger.port}/v1/traces`, - OTLP_SERVICE_NAME: serviceName, + OTEL_SERVICE_NAME: serviceName, }); await fetch(`${url}/non-existing`).catch(() => {}); @@ -207,7 +212,7 @@ describe.skipIf(gatewayRunner !== 'node' || process.version.startsWith('v1'))( const serviceName = 'mesh-e2e-test-5'; const { url, execute } = await wrangler({ OTLP_EXPORTER_URL: `${jaegerHostname}:${jaeger.port}/v1/traces`, - OTLP_SERVICE_NAME: serviceName, + OTEL_SERVICE_NAME: serviceName, }); await expect( diff --git a/e2e/cloudflare-workers/src/index.ts b/e2e/cloudflare-workers/src/index.ts index a01458833..a16778fb2 100644 --- a/e2e/cloudflare-workers/src/index.ts +++ b/e2e/cloudflare-workers/src/index.ts @@ -3,15 +3,14 @@ import { createGatewayRuntime, GatewayPlugin, } from '@graphql-hive/gateway-runtime'; -import { - createOtlpHttpExporter, - useOpenTelemetry, -} from '@graphql-mesh/plugin-opentelemetry'; +import { useOpenTelemetry } from '@graphql-mesh/plugin-opentelemetry'; +import { opentelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; import http from '@graphql-mesh/transport-http'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; interface Env { OTLP_EXPORTER_URL: string; - OTLP_SERVICE_NAME: string; + OTEL_SERVICE_NAME: string; DEBUG: string; } @@ -38,28 +37,27 @@ const useOnFetchTracer = (): GatewayPlugin => { let runtime: ReturnType; function getRuntime(env: Env) { if (!runtime) { - console.log(env); + opentelemetrySetup({ + contextManager: null, + resource: { serviceName: env.OTEL_SERVICE_NAME, serviceVersion: '1.0.0' }, + traces: { + exporter: new OTLPTraceExporter({ url: env['OTLP_EXPORTER_URL'] }), + batching: false, // Disable batching to speedup tests + }, + }); + runtime = createGatewayRuntime({ proxy: { endpoint: 'https://countries.trevorblades.com' }, transports: { http }, plugins: (ctx) => [ - useOpenTelemetry({ - ...ctx, - exporters: [ - createOtlpHttpExporter( - { url: env['OTLP_EXPORTER_URL'] }, - // Batching config is set in order to make it easier to test. - false, - ), - ], - serviceName: env['OTLP_SERVICE_NAME'], - }), + useOpenTelemetry({ ...ctx, traces: true }), useOnFetchTracer(), ], }); } return runtime; } + export default { async fetch(req, env, ctx) { const res = await getRuntime(env)(req, env, ctx); diff --git a/e2e/graphos-polling/services/gateway-fastify.ts b/e2e/graphos-polling/services/gateway-fastify.ts index 77dc1b9b7..30002a5f7 100644 --- a/e2e/graphos-polling/services/gateway-fastify.ts +++ b/e2e/graphos-polling/services/gateway-fastify.ts @@ -1,10 +1,10 @@ import { createGatewayRuntime, Logger } from '@graphql-hive/gateway-runtime'; import { PinoLogWriter } from '@graphql-hive/logger/writers/pino'; -import { - createOtlpHttpExporter, - useOpenTelemetry, -} from '@graphql-mesh/plugin-opentelemetry'; +import { useOpenTelemetry } from '@graphql-mesh/plugin-opentelemetry'; +import { opentelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; import { Opts } from '@internal/testing'; +import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; import fastify, { type FastifyReply, type FastifyRequest } from 'fastify'; /* --- E2E TEST SPECIFIC CONFIGURATION START--- */ @@ -17,6 +17,15 @@ const port = opts.getServicePort('gateway-fastify'); /*--- E2E TEST SPECIFIC CONFIGURATION END--- */ +opentelemetrySetup({ + contextManager: new AsyncLocalStorageContextManager(), + traces: { + exporter: new OTLPTraceExporter({ url: process.env['OTLP_EXPORTER_URL'] }), + // Do not batch for test + batching: false, + }, +}); + const requestIdHeader = 'x-guild-request-id'; const app = fastify({ @@ -71,16 +80,7 @@ const gw = createGatewayRuntime({ plugins: (ctx) => [ useOpenTelemetry({ ...ctx, - exporters: [ - createOtlpHttpExporter( - { - url: process.env['OTLP_EXPORTER_URL'], - }, - { - scheduledDelayMillis: 1, - }, - ), - ], + traces: true, }), ], }); diff --git a/e2e/opentelemetry/gateway.config.ts b/e2e/opentelemetry/gateway.config.ts index be15f07ed..f095082f4 100644 --- a/e2e/opentelemetry/gateway.config.ts +++ b/e2e/opentelemetry/gateway.config.ts @@ -1,11 +1,13 @@ -import { - createOtlpGrpcExporter, - createOtlpHttpExporter, - defineConfig, - GatewayPlugin, - OpenTelemetryDiagLogLevel, -} from '@graphql-hive/gateway'; +import { defineConfig, GatewayPlugin } from '@graphql-hive/gateway'; +import { opentelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; import type { MeshFetchRequestInit } from '@graphql-mesh/types'; +import { trace } from '@opentelemetry/api'; +import { + getNodeAutoInstrumentations, + getResourceDetectors, +} from '@opentelemetry/auto-instrumentations-node'; +import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; +import { NodeSDK, resources, tracing } from '@opentelemetry/sdk-node'; // The following plugin is used to trace the fetch calls made by Mesh. const useOnFetchTracer = (): GatewayPlugin => { @@ -27,38 +29,58 @@ const useOnFetchTracer = (): GatewayPlugin => { }; }; +const { OTLPTraceExporter } = + process.env['OTLP_EXPORTER_TYPE'] === 'http' + ? await import(`@opentelemetry/exporter-trace-otlp-http`) + : await import(`@opentelemetry/exporter-trace-otlp-grpc`); + +const exporter = new OTLPTraceExporter({ + url: process.env['OTLP_EXPORTER_URL'], +}); + +const resource = resources.resourceFromAttributes({ + 'custom.resource': 'custom value', +}); + +// The NodeSDK only actually work in Node. For other envs, it's better to use our own configurator +const runner = process.env['E2E_GATEWAY_RUNNER']; +if (runner === 'node' || runner === 'docker') { + const sdk = new NodeSDK({ + // Use spanProcessor instead of spanExporter to remove batching for test speed + spanProcessors: [new tracing.SimpleSpanProcessor(exporter)], + resource, + instrumentations: getNodeAutoInstrumentations(), + resourceDetectors: getResourceDetectors(), + }); + + sdk.start(); + ['SIGTERM', 'SIGINT'].forEach((sig) => process.on(sig, () => sdk.shutdown())); +} else { + opentelemetrySetup({ + contextManager: new AsyncLocalStorageContextManager(), + resource, + traces: { + exporter, + // Disable batching to speedup tests + batching: false, + }, + }); +} + export const gatewayConfig = defineConfig({ openTelemetry: { - diagLevel: OpenTelemetryDiagLogLevel.INFO, - exporters: [ - process.env['OTLP_EXPORTER_TYPE'] === 'grpc' - ? createOtlpGrpcExporter( - { - url: process.env['OTLP_EXPORTER_URL'], - }, - // Batching config is set in order to make it easier to test. - { - maxExportBatchSize: 1, - scheduledDelayMillis: 1, - }, - ) - : createOtlpHttpExporter( - { - url: process.env['OTLP_EXPORTER_URL'], - }, - // Batching config is set in order to make it easier to test. - { - maxExportBatchSize: 1, - scheduledDelayMillis: 1, - }, - ), - ], - serviceName: process.env['OTLP_SERVICE_NAME'], + traces: true, }, - plugins: () => - process.env['MEMTEST'] + plugins: () => [ + { + onExecute() { + trace.getActiveSpan()?.setAttribute('custom.attribute', 'custom value'); + }, + }, + ...(process.env['MEMTEST'] ? [ // disable the plugin in memtests because the upstreamCallHeaders will grew forever reporting a false positive leak ] - : [useOnFetchTracer()], + : [useOnFetchTracer()]), + ], }); diff --git a/e2e/opentelemetry/opentelemetry.e2e.ts b/e2e/opentelemetry/opentelemetry.e2e.ts index 90b9bb8ea..aa09c3aa4 100644 --- a/e2e/opentelemetry/opentelemetry.e2e.ts +++ b/e2e/opentelemetry/opentelemetry.e2e.ts @@ -17,6 +17,17 @@ const JAEGER_HOSTNAME = const exampleSetup = createExampleSetup(__dirname); +const runner = { + docker: { + volumes: [ + { + host: __dirname + '/otel-setup.ts', + container: `/gateway/otel-setup.ts`, + }, + ], + }, +}; + beforeAll(async () => { supergraph = await exampleSetup.supergraph(); }); @@ -25,14 +36,26 @@ type JaegerTracesApiResponse = { data: Array<{ traceID: string; spans: JaegerTraceSpan[]; + processes: { [key: string]: JaegerTraceResource }; }>; }; +type JaegerTraceTag = { + key: string; + type: string; + value: string; +}; + +type JaegerTraceResource = { + serviceName: string; + tags: JaegerTraceTag[]; +}; + type JaegerTraceSpan = { traceID: string; spanID: string; operationName: string; - tags: Array<{ key: string; value: string; type: string }>; + tags: Array; references: Array<{ refType: string; spanID: string; traceID: string }>; }; @@ -125,11 +148,13 @@ describe('OpenTelemetry', () => { it('should report telemetry metrics correctly to jaeger', async () => { const serviceName = 'mesh-e2e-test-1'; const { execute } = await gateway({ + runner, supergraph, env: { OTLP_EXPORTER_TYPE, OTLP_EXPORTER_URL: urls[OTLP_EXPORTER_TYPE], - OTLP_SERVICE_NAME: serviceName, + OTEL_SERVICE_NAME: serviceName, + OTEL_SERVICE_VERSION: '1.0.0', }, }); @@ -600,6 +625,37 @@ describe('OpenTelemetry', () => { expect(relevantTrace).toBeDefined(); expect(relevantTrace!.spans.length).toBe(20); + const resource = relevantTrace!.processes['p1']; + expect(resource).toBeDefined(); + + const tags = resource!.tags.map(({ key, value }) => ({ key, value })); + const tagKeys = resource!.tags.map(({ key }) => key); + expect(resource!.serviceName).toBe(serviceName); + [ + ['custom.resource', 'custom value'], + ['otel.library.name', 'gateway'], + ].forEach(([key, value]) => { + return expect(tags).toContainEqual({ key, value }); + }); + + if ( + process.env['E2E_GATEWAY_RUNNER'] === 'node' || + process.env['E2E_GATEWAY_RUNNER'] === 'docker' + ) { + const expectedTags = [ + 'process.owner', + 'host.arch', + 'os.type', + 'service.instance.id', + ]; + if (process.env['E2E_GATEWAY_RUNNER'] === 'docker') { + expectedTags.push('container.id'); + } + expectedTags.forEach((key) => { + return expect(tagKeys).toContain(key); + }); + } + const spanTree = buildSpanTree(relevantTrace!.spans, 'POST /graphql'); expect(spanTree).toBeDefined(); @@ -621,6 +677,12 @@ describe('OpenTelemetry', () => { ); } + expect( + operationSpan!.children + .find(({ span }) => span.operationName === 'graphql.execute') + ?.span.tags.find(({ key }) => key === 'custom.attribute'), + ).toMatchObject({ value: 'custom value' }); + const executeSpan = operationSpan!.children.find( ({ span }) => span.operationName === 'graphql.execute', ); @@ -654,11 +716,13 @@ describe('OpenTelemetry', () => { it('should report parse failures correctly', async () => { const serviceName = 'mesh-e2e-test-2'; const { execute } = await gateway({ + runner, supergraph, env: { OTLP_EXPORTER_TYPE, OTLP_EXPORTER_URL: urls[OTLP_EXPORTER_TYPE], - OTLP_SERVICE_NAME: serviceName, + OTEL_SERVICE_NAME: serviceName, + OTEL_SERVICE_VERSION: '1.0.0', }, }); @@ -728,11 +792,13 @@ describe('OpenTelemetry', () => { it('should report validate failures correctly', async () => { const serviceName = 'mesh-e2e-test-3'; const { execute } = await gateway({ + runner, supergraph, env: { OTLP_EXPORTER_TYPE, OTLP_EXPORTER_URL: urls[OTLP_EXPORTER_TYPE], - OTLP_SERVICE_NAME: serviceName, + OTEL_SERVICE_NAME: serviceName, + OTEL_SERVICE_VERSION: '1.0.0', }, }); @@ -806,11 +872,13 @@ describe('OpenTelemetry', () => { it('should report http failures', async () => { const serviceName = 'mesh-e2e-test-4'; const { port } = await gateway({ + runner, supergraph, env: { OTLP_EXPORTER_TYPE, OTLP_EXPORTER_URL: urls[OTLP_EXPORTER_TYPE], - OTLP_SERVICE_NAME: serviceName, + OTEL_SERVICE_NAME: serviceName, + OTEL_SERVICE_VERSION: '1.0.0', }, }); const path = '/non-existing'; @@ -848,11 +916,13 @@ describe('OpenTelemetry', () => { const traceId = '0af7651916cd43dd8448eb211c80319c'; const serviceName = 'mesh-e2e-test-5'; const { execute, port } = await gateway({ + runner, supergraph, env: { OTLP_EXPORTER_TYPE, OTLP_EXPORTER_URL: urls[OTLP_EXPORTER_TYPE], - OTLP_SERVICE_NAME: serviceName, + OTEL_SERVICE_NAME: serviceName, + OTEL_SERVICE_VERSION: '1.0.0', }, }); diff --git a/internal/e2e/src/tenv.ts b/internal/e2e/src/tenv.ts index 709e0319c..5dcc2df8d 100644 --- a/internal/e2e/src/tenv.ts +++ b/internal/e2e/src/tenv.ts @@ -424,8 +424,11 @@ export function createTenv(cwd: string): Tenv { switch (gatewayRunner) { case 'bun-docker': case 'docker': { - const volumes: ContainerOptions['volumes'] = - runner?.docker?.volumes || []; + const volumes: ContainerOptions['volumes'] = []; + + if (runner?.docker?.volumes) { + volumes.push(...runner.docker.volumes); + } if (supergraph) { supergraph = await handleDockerHostNameInURLOrAtPath( diff --git a/package.json b/package.json index 783f9ba9b..189558287 100644 --- a/package.json +++ b/package.json @@ -65,10 +65,10 @@ "@graphql-mesh/types": "0.104.6", "@graphql-mesh/utils": "0.104.6", "@graphql-tools/delegate": "workspace:^", - "@opentelemetry/exporter-trace-otlp-http@npm:0.200.0": "patch:@opentelemetry/exporter-trace-otlp-http@npm%3A0.200.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch", - "@opentelemetry/otlp-exporter-base@npm:0.200.0": "patch:@opentelemetry/otlp-exporter-base@npm%3A0.200.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch", - "@opentelemetry/resources@npm:2.0.0": "patch:@opentelemetry/resources@npm%3A2.0.0#~/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch", + "@opentelemetry/otlp-exporter-base@npm:0.202.0": "patch:@opentelemetry/otlp-exporter-base@npm%3A0.202.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.202.0-f6f29c2eeb.patch", + "@rollup/plugin-node-resolve@npm:^15.2.3": "patch:@rollup/plugin-node-resolve@npm%3A16.0.1#~/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch", "@vitest/snapshot": "patch:@vitest/snapshot@npm:3.1.2#~/.yarn/patches/@vitest-snapshot-npm-3.1.1-4d18cf86dc.patch", + "ansi-color@npm:^0.2.1": "patch:ansi-color@npm%3A0.2.1#~/.yarn/patches/ansi-color-npm-0.2.1-f7243d10a4.patch", "cookie": "^1.0.0", "cross-spawn": "7.0.6", "esbuild": "0.25.5", diff --git a/packages/gateway/package.json b/packages/gateway/package.json index a1ad516ac..8621e5786 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -82,6 +82,15 @@ "@graphql-tools/load": "^8.0.14", "@graphql-tools/utils": "^10.8.1", "@graphql-yoga/render-graphiql": "^5.15.1", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-zone": "^2.0.1", + "@opentelemetry/core": "^2.0.1", + "@opentelemetry/exporter-jaeger": "^2.0.1", + "@opentelemetry/exporter-zipkin": "^2.0.1", + "@opentelemetry/propagator-b3": "^2.0.1", + "@opentelemetry/propagator-jaeger": "^2.0.1", + "@opentelemetry/sampler-jaeger-remote": "^0.202.0", + "@opentelemetry/sdk-metrics": "^2.0.1", "commander": "^13.1.0", "dotenv": "^17.2.0", "graphql-ws": "^6.0.4", @@ -95,7 +104,7 @@ "@graphql-tools/executor": "^1.4.7", "@rollup/plugin-commonjs": "^28.0.0", "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-node-resolve": "patch:@rollup/plugin-node-resolve@npm%3A16.0.1#~/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch", "@rollup/plugin-sucrase": "^5.0.2", "@tsconfig/node18": "^18.2.4", "@types/adm-zip": "^0.5.5", diff --git a/packages/gateway/rollup.config.js b/packages/gateway/rollup.config.js index d0b627972..9906582d9 100644 --- a/packages/gateway/rollup.config.js +++ b/packages/gateway/rollup.config.js @@ -62,9 +62,50 @@ const deps = { '../../node_modules/@escape.tech/graphql-armor-max-depth/dist/graphql-armor-max-depth.esm.js', 'node_modules/@escape.tech/graphql-armor-block-field-suggestions/index': '../../node_modules/@escape.tech/graphql-armor-block-field-suggestions/dist/graphql-armor-block-field-suggestions.esm.js', - // OpenTelemetry plugin is built-in but it dynamically imports the gRPC exporter, we therefore need to bundle it + // OpenTelemetry plugin is sometimes imported, and not re-used from the gateway itself. we therefore need to bundle it into node_modules + 'node_modules/@graphql-mesh/plugin-opentelemetry/index': + '../plugins/opentelemetry/src/index.ts', + // Since `async_hooks` is not available in all runtime, it have to be bundle separately + // The Async Local context manager of Opentelemetry can't be bundled correctly, so we use our own + // proxy export file. It just re-export otel's package, which makes rollup happy + 'node_modules/@opentelemetry/context-async-hooks/index': + '../plugins/opentelemetry/src/async-context-manager.ts', 'node_modules/@opentelemetry/exporter-trace-otlp-grpc/index': - '../../node_modules/@opentelemetry/exporter-trace-otlp-grpc/build/src/index.js', + '../plugins/opentelemetry/src/exporter-trace-otlp-grpc.ts', + 'node_modules/@opentelemetry/sdk-node/index': + '../plugins/opentelemetry/src/sdk-node.ts', + 'node_modules/@opentelemetry/auto-instrumentations-node/index': + '../plugins/opentelemetry/src/auto-instrumentations.ts', + 'node_modules/@graphql-mesh/plugin-opentelemetry/setup': + '../plugins/opentelemetry/src/setup.ts', + ...Object.fromEntries( + // To ease the OTEL setup, we need to bundle some important OTEL packages. + // Those are most used features. + [ + // Common API base + ['api'], + ['core'], + ['resources', 'esm/'], + ['sdk-trace-base'], + ['sdk-metrics'], + ['semantic-conventions'], + ['instrumentation'], + + // Exporters + ['exporter-trace-otlp-http'], + ['exporter-zipkin'], + + // Propagators + ['propagator-b3'], + ['propagator-jaeger'], + + // Context Managers + ['context-zone'], // An incomplete but Web compatible async context manager based on zone.js + ].map(([otelPackage, buildDir = 'esm']) => [ + `node_modules/@opentelemetry/${otelPackage}/index`, + `../../node_modules/@opentelemetry/${otelPackage}/build/${buildDir}/index.js`, + ]), + ), }; if ( @@ -99,7 +140,11 @@ export default defineConfig({ external: ['tuql'], plugins: [ tsConfigPaths(), // use tsconfig paths to resolve modules - nodeResolve({ preferBuiltins: true }), // resolve node_modules and bundle them too + nodeResolve({ + preferBuiltins: true, + mainFields: ['esnext', 'module', 'main'], + exportConditions: ['esnext'], + }), // resolve node_modules and bundle them too graphql(), // handle graphql imports commonjs({ strictRequires: true }), // convert commonjs to esm json(), // support importing json files to esm (needed for commonjs() plugin) @@ -119,6 +164,9 @@ function packagejson() { generateBundle(_outputs, bundles) { /** @type {string[]} */ const e2eModules = []; + /** @type Record, main?: string}> */ + const packages = {}; + for (const bundle of Object.values(bundles).filter((bundle) => { const bundleName = String(bundle.name); return ( @@ -138,23 +186,25 @@ function packagejson() { } const dir = path.dirname(bundle.fileName); const bundledFile = path.basename(bundle.fileName).replace(/\\/g, '/'); - /** @type {Record} */ - const pkg = { type: 'module' }; - if (bundledFile === 'index.mjs') { - pkg['main'] = bundledFile; - } else { - const mjsFile = path - .basename(bundle.fileName, '.mjs') - .replace(/\\/g, '/'); - // if the bundled file is not "index", then it's an package.json exports path - pkg['exports'] = { [`./${mjsFile}`]: `./${bundledFile}` }; - } + const pkgFileName = path.join(dir, 'package.json'); + const pkg = packages[pkgFileName] ?? { type: 'module' }; + const mjsFile = + bundledFile === 'index.mjs' + ? '.' + : './' + path.basename(bundle.fileName, '.mjs').replace(/\\/g, '/'); + // if the bundled file is not "index", then it's an package.json exports path + pkg.exports = { ...pkg.exports, [mjsFile]: `./${bundledFile}` }; + packages[pkgFileName] = pkg; + } + + for (const [fileName, pkg] of Object.entries(packages)) { this.emitFile({ type: 'asset', - fileName: path.join(dir, 'package.json'), + fileName, source: JSON.stringify(pkg), }); } + this.emitFile({ type: 'asset', fileName: path.join('e2e', 'package.json'), diff --git a/packages/plugins/opentelemetry/package.json b/packages/plugins/opentelemetry/package.json index 6b022a3a6..192e3516e 100644 --- a/packages/plugins/opentelemetry/package.json +++ b/packages/plugins/opentelemetry/package.json @@ -29,13 +29,23 @@ "default": "./dist/index.js" } }, + "./setup": { + "require": { + "types": "./dist/setup.d.cts", + "default": "./dist/setup.cjs" + }, + "import": { + "types": "./dist/setup.d.ts", + "default": "./dist/setup.js" + } + }, "./package.json": "./package.json" }, "files": [ "dist" ], "scripts": { - "build": "pkgroll --clean-dist", + "build": "pkgroll --clean-dist && tsx scripts/inject-version", "prepack": "yarn build" }, "peerDependencies": { @@ -49,16 +59,16 @@ "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/utils": "^10.8.1", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^2.0.0", - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/exporter-trace-otlp-grpc": "^0.200.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.200.0", - "@opentelemetry/exporter-zipkin": "^2.0.0", - "@opentelemetry/instrumentation": "^0.200.0", - "@opentelemetry/resources": "^2.0.0", - "@opentelemetry/sdk-trace-base": "^2.0.0", - "@opentelemetry/sdk-trace-web": "^2.0.0", - "@opentelemetry/semantic-conventions": "^1.28.0", + "@opentelemetry/auto-instrumentations-node": "^0.60.1", + "@opentelemetry/context-async-hooks": "^2.0.1", + "@opentelemetry/core": "^2.0.1", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.202.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.202.0", + "@opentelemetry/instrumentation": "^0.202.0", + "@opentelemetry/resources": "^2.0.1", + "@opentelemetry/sdk-node": "^0.202.0", + "@opentelemetry/sdk-trace-base": "^2.0.1", + "@opentelemetry/semantic-conventions": "^1.34.0", "@whatwg-node/promise-helpers": "1.3.0", "tslib": "^2.8.1" }, @@ -66,7 +76,10 @@ "@whatwg-node/server": "^0.10.0", "graphql": "^16.9.0", "graphql-yoga": "^5.15.1", - "pkgroll": "2.14.3" + "pkgroll": "2.14.3", + "rimraf": "^6.0.1", + "rollup": "^4.41.1", + "tsx": "^4.19.4" }, "sideEffects": false } diff --git a/packages/plugins/opentelemetry/scripts/inject-version.ts b/packages/plugins/opentelemetry/scripts/inject-version.ts new file mode 100644 index 000000000..34bcbdf7d --- /dev/null +++ b/packages/plugins/opentelemetry/scripts/inject-version.ts @@ -0,0 +1,35 @@ +import { readFile, writeFile } from 'node:fs/promises'; +import { resolve } from 'node:path'; +import { fileURLToPath, URL } from 'node:url'; +import pkg from '../package.json'; + +const version = process.argv[2] || pkg.version; + +console.log(`Injecting version ${version} to build and bundle`); + +const source = '// @inject-version globalThis.__OTEL_PLUGIN_VERSION__ here'; +const inject = `globalThis.__OTEL_PLUGIN_VERSION__ = '${version}';`; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); + +for (const file of [ + // build + resolve(__dirname, '../dist/setup.js'), + resolve(__dirname, '../dist/setup.cjs'), +]) { + try { + const content = await readFile(file, 'utf-8'); + if (content.includes(source)) { + await writeFile(file, content.replace(source, inject)); + } + console.info(`✅ Version injected to "${file}"`); + } catch (e) { + if (Object(e).code === 'ENOENT') { + console.warn( + `⚠️ File does not exist and cannot have the version injected "${file}"`, + ); + } else { + throw e; + } + } +} diff --git a/packages/plugins/opentelemetry/src/async-context-manager.ts b/packages/plugins/opentelemetry/src/async-context-manager.ts new file mode 100644 index 000000000..4e041bf6e --- /dev/null +++ b/packages/plugins/opentelemetry/src/async-context-manager.ts @@ -0,0 +1,6 @@ +import { + AsyncHooksContextManager, + AsyncLocalStorageContextManager, +} from '@opentelemetry/context-async-hooks'; + +export { AsyncHooksContextManager, AsyncLocalStorageContextManager }; diff --git a/packages/plugins/opentelemetry/src/attributes.ts b/packages/plugins/opentelemetry/src/attributes.ts index 09f23fa32..c8c55dddd 100644 --- a/packages/plugins/opentelemetry/src/attributes.ts +++ b/packages/plugins/opentelemetry/src/attributes.ts @@ -1,5 +1,9 @@ -// HTTP/network attributes export { + // Basic attributes + ATTR_SERVICE_NAME, + ATTR_SERVICE_VERSION, + + // HTTP/network attributes SEMATTRS_HTTP_CLIENT_IP, SEMATTRS_HTTP_HOST, SEMATTRS_HTTP_METHOD, @@ -10,8 +14,6 @@ export { SEMATTRS_HTTP_URL, SEMATTRS_HTTP_USER_AGENT, SEMATTRS_NET_HOST_NAME, - ATTR_SERVICE_NAME as SEMRESATTRS_SERVICE_NAME, - ATTR_SERVICE_VERSION, } from '@opentelemetry/semantic-conventions'; // GraphQL-specific attributes diff --git a/packages/plugins/opentelemetry/src/auto-instrumentations.ts b/packages/plugins/opentelemetry/src/auto-instrumentations.ts new file mode 100644 index 000000000..11be919b3 --- /dev/null +++ b/packages/plugins/opentelemetry/src/auto-instrumentations.ts @@ -0,0 +1,9 @@ +import { + getNodeAutoInstrumentations, + getResourceDetectors, + InstrumentationConfigMap, +} from '@opentelemetry/auto-instrumentations-node'; + +export type { InstrumentationConfigMap }; + +export { getNodeAutoInstrumentations, getResourceDetectors }; diff --git a/packages/plugins/opentelemetry/src/context.ts b/packages/plugins/opentelemetry/src/context.ts index 3192f8ff8..f4bae5c2b 100644 --- a/packages/plugins/opentelemetry/src/context.ts +++ b/packages/plugins/opentelemetry/src/context.ts @@ -1,5 +1,4 @@ -import { trace, type Context, type ContextManager } from '@opentelemetry/api'; -import { fakePromise } from '@whatwg-node/promise-helpers'; +import { trace, type Context } from '@opentelemetry/api'; type Node = { ctx: Context; @@ -41,33 +40,3 @@ export class OtelContextStack { return names.join(' -> '); } } - -export function getContextManager( - contextManager?: boolean | ContextManager, -): Promise { - if (contextManager === false) { - return fakePromise(undefined); - } - - if (contextManager === true || contextManager == undefined) { - const doNotBundleThisModule = '@opentelemetry'; - return import(`${doNotBundleThisModule}/context-async-hooks`) - .then((module) => new module.AsyncLocalStorageContextManager()) - .catch((err) => { - console.dir('module error', err); - // If `async_hooks` is not available, we want to error only if the context manager is - // explicitly enabled. - if (contextManager === true) { - throw new Error( - "[OTEL] 'node:async_hooks' module is not available: can't initialize context manager. Possible solutions:\n" + - '\t- disable context manager usage by providing `contextManager: false`\n' + - '\t- provide a custom context manager in the `contextManager` option' + - 'Learn more about OTEL configuration here: https://the-guild.dev/graphql/hive/docs/gateway/monitoring-tracing#opentelemetry-traces', - { cause: err }, - ); - } - }); - } - - return fakePromise(contextManager); -} diff --git a/packages/plugins/opentelemetry/src/exporter-trace-otlp-grpc.ts b/packages/plugins/opentelemetry/src/exporter-trace-otlp-grpc.ts new file mode 100644 index 000000000..372deae69 --- /dev/null +++ b/packages/plugins/opentelemetry/src/exporter-trace-otlp-grpc.ts @@ -0,0 +1,3 @@ +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'; + +export { OTLPTraceExporter }; diff --git a/packages/plugins/opentelemetry/src/gobal.d.ts b/packages/plugins/opentelemetry/src/gobal.d.ts new file mode 100644 index 000000000..d15e15116 --- /dev/null +++ b/packages/plugins/opentelemetry/src/gobal.d.ts @@ -0,0 +1,6 @@ +export {}; + +declare global { + /** Gets injected during build by `scripts/inject-version.ts`. */ + var __OTEL_PLUGIN_VERSION__: string | undefined; +} diff --git a/packages/plugins/opentelemetry/src/index.ts b/packages/plugins/opentelemetry/src/index.ts index d806dd369..413de39d0 100644 --- a/packages/plugins/opentelemetry/src/index.ts +++ b/packages/plugins/opentelemetry/src/index.ts @@ -5,7 +5,7 @@ import { type OpenTelemetryPlugin, } from './plugin'; -export * from './processors'; +export * from './attributes'; export type OpenTelemetryMeshPluginOptions = OpenTelemetryGatewayPluginOptions; diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 8b5977d2d..1ef1a0d90 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -1,44 +1,25 @@ import { + Attributes, getRetryInfo, isRetryExecutionRequest, Logger, type GatewayPlugin, } from '@graphql-hive/gateway-runtime'; import { getHeadersObj } from '@graphql-mesh/utils'; -import { - createDeferred, - ExecutionRequest, - fakePromise, - isPromise, - MaybePromise, -} from '@graphql-tools/utils'; +import { ExecutionRequest, fakePromise } from '@graphql-tools/utils'; import { context, diag, - DiagLogLevel, propagation, ROOT_CONTEXT, trace, type Context, - type ContextManager, type TextMapGetter, type Tracer, } from '@opentelemetry/api'; import { setGlobalErrorHandler } from '@opentelemetry/core'; -import { - detectResources, - resourceFromAttributes, -} from '@opentelemetry/resources'; -import { type SpanProcessor } from '@opentelemetry/sdk-trace-base'; -import { - AlwaysOnSampler, - ParentBasedSampler, - TraceIdRatioBasedSampler, - WebTracerProvider, -} from '@opentelemetry/sdk-trace-web'; import { unfakePromise } from '@whatwg-node/promise-helpers'; -import { ATTR_SERVICE_VERSION, SEMRESATTRS_SERVICE_NAME } from './attributes'; -import { getContextManager, OtelContextStack } from './context'; +import { OtelContextStack } from './context'; import { getMostSpecificState, withState, @@ -54,7 +35,7 @@ import { createGraphQLValidateSpan, createHttpSpan, createSchemaLoadingSpan, - startSubgraphExecuteFetchSpan as createSubgraphExecuteFetchSpan, + createSubgraphExecuteSpan, createUpstreamHttpFetchSpan, recordCacheError, recordCacheEvent, @@ -71,7 +52,10 @@ import { setUpstreamFetchAttributes, setUpstreamFetchResponseAttributes, } from './spans'; -import { getEnvVar, tryContextManagerSetup } from './utils'; +import { + diagLogLevelFromEnv, + isContextManagerCompatibleWithAsync, +} from './utils'; const initializationTime = 'performance' in globalThis ? performance.now() : undefined; @@ -80,11 +64,7 @@ type BooleanOrPredicate = | boolean | ((input: TInput) => boolean); -interface OpenTelemetryGatewayPluginOptionsWithoutInit { - /** - * Whether to initialize the OpenTelemetry SDK (default: true). - */ - initializeNodeSDK: false; +export type OpenTelemetryGatewayPluginOptions = { /** * Whether to rely on OTEL context api for span correlation. * - `true`: the plugin will rely on OTEL context manager for span parenting. @@ -96,150 +76,120 @@ interface OpenTelemetryGatewayPluginOptionsWithoutInit { * * Note: If `true`, an error is thrown if it fails to obtain an async calls compatible Context Manager. */ - contextManager?: boolean; -} - -interface OpenTelemetryGatewayPluginOptionsWithInit { + useContextManager?: boolean; /** - * Whether to initialize the OpenTelemetry SDK (default: true). - */ - initializeNodeSDK?: true; - /** - * A list of OpenTelemetry exporters to use for exporting the spans. - * You can use exporters from `@opentelemetry/exporter-*` packages, or use the built-in utility functions. + * Whether to inherit the context from the calling service (default: true). + * + * This process is done by extracting the context from the incoming request headers. If disabled, a new context and a trace-id will be created. * - * Does not apply when `initializeNodeSDK` is `false`. + * See https://opentelemetry.io/docs/languages/js/propagation/ */ - exporters: MaybePromise[]; + inheritContext?: boolean; /** - * Service name to use for OpenTelemetry Resource option (default: 'Gateway'). + * Whether to propagate the context to the outgoing requests (default: true). * - * Does not apply when `initializeNodeSDK` is `false`. + * This process is done by injecting the context into the outgoing request headers. If disabled, the context will not be propagated. + * + * See https://opentelemetry.io/docs/languages/js/propagation/ */ - serviceName?: string; + propagateContext?: boolean; /** - * Service version to use for OpenTelemetry Resource option (default: Hive Gateway version). + * Configure Opentelemetry `diag` API to use Gateway's logger. * - * Note: This can also be set by using `OTEL_SERVICE_VERSION` environment variable. + * @default true + + * Note: Logger configuration respects OTEL environment variables standard. + * This means that the logger will be enabled only if `OTEL_LOG_LEVEL` variable is set. */ - serviceVersion?: string; - + configureDiagLogger?: boolean; /** - * Whether to rely on OTEL context api for span correlation. - * - `undefined` (default): the plugin will try to enable context manager if possible. - * - `false`: the plugin will rely on request context for span parenting, - * which implies that any user defined context and spans will be ignored. - * - `true`: the plugin will rely on AsyncLocalStorage based context manager. - * Note that `async_hooks` module must be available, otherwise provide a custom `ContextManager` instance. - * - `ContextManager`: rely on this provided `ContextManger` instance. + * The TraceProvider method to call on Gateway's disposal. By default, it tries to run `forceFlush` method on + * the registered trace provider if it exists. + * Set to `false` to disable this behavior. + * @default 'forceFlush' */ - contextManager?: ContextManager | boolean; + flushOnDispose?: string | false; /** - * Sampling rate of spans. The value should be between 0 and 1. - * By default, all spans are recorded and exported, which correspond to a sampling rate of 1. - * - * Note: The sampling strategy used is parent based, meaning spans will be always sampled if a sampled parent span is found in the OTEL context. + * Tracing configuration */ - samplingRate?: number; -} - -type OpenTelemetryGatewayPluginOptionsInit = - | OpenTelemetryGatewayPluginOptionsWithInit - | OpenTelemetryGatewayPluginOptionsWithoutInit; - -export type OpenTelemetryGatewayPluginOptions = - OpenTelemetryGatewayPluginOptionsInit & { - /** - * Tracer instance to use for creating spans (default: a tracer with name 'gateway'). - */ - tracer?: Tracer; - /** - * Whether to inherit the context from the calling service (default: true). - * - * This process is done by extracting the context from the incoming request headers. If disabled, a new context and a trace-id will be created. - * - * See https://opentelemetry.io/docs/languages/js/propagation/ - */ - inheritContext?: boolean; - /** - * Whether to propagate the context to the outgoing requests (default: true). - * - * This process is done by injecting the context into the outgoing request headers. If disabled, the context will not be propagated. - * - * See https://opentelemetry.io/docs/languages/js/propagation/ - */ - propagateContext?: boolean; - /** - * The level of verbosity of OTEL diagnostic logs. - * @default Verbose - */ - diagLevel?: DiagLogLevel; - /** - * Options to control which spans to create. - * By default, all spans are enabled. - * - * You may specify a boolean value to enable/disable all spans, or a function to dynamically enable/disable spans based on the input. - */ - spans?: { - /** - * Enable/disable HTTP request spans (default: true). - * - * Disabling the HTTP span will also disable all other child spans. - */ - http?: BooleanOrPredicate<{ request: Request }>; - /** - * Enable/disable GraphQL operation spans (default: true). - * - * Disabling the GraphQL operation spa will also disable all other child spans. - */ - graphql?: BooleanOrPredicate; // FIXME: better type for graphql context - /** - * Enable/disable GraphQL context building phase (default: true). - */ - graphqlContextBuilding?: BooleanOrPredicate; // FIXME: better type for graphql context - /** - * Enable/disable GraphQL parse spans (default: true). - */ - graphqlParse?: BooleanOrPredicate; // FIXME: better type for graphql context - /** - * Enable/disable GraphQL validate spans (default: true). - */ - graphqlValidate?: BooleanOrPredicate; - /** - * Enable/disable GraphQL execute spans (default: true). - * - * Disabling the GraphQL execute spans will also disable all other child spans. - */ - graphqlExecute?: BooleanOrPredicate; - /** - * Enable/disable subgraph execute spans (default: true). - * - * Disabling the subgraph execute spans will also disable all other child spans. - */ - subgraphExecute?: BooleanOrPredicate<{ - executionRequest: ExecutionRequest; - subgraphName: string; - }>; - /** - * Enable/disable upstream HTTP fetch calls spans (default: true). - */ - upstreamFetch?: BooleanOrPredicate; - /** - * Enable/Disable cache related span events (default: true). - */ - cache?: BooleanOrPredicate<{ key: string; action: 'read' | 'write' }>; - /** - * Enable/disable schema loading spans (default: true if context manager available). - * - * Note: This span requires an Async compatible context manager - */ - schema?: boolean; - /** - * Enable/disable initialization span (default: true). - */ - initialization?: boolean; - }; - }; + traces?: + | boolean + | { + /** + * Tracer instance to use for creating spans (default: a tracer with name 'gateway'). + */ + tracer?: Tracer; + /** + * Options to control which spans to create. + * By default, all spans are enabled. + * + * You may specify a boolean value to enable/disable all spans, or a function to dynamically enable/disable spans based on the input. + */ + spans?: { + /** + * Enable/disable HTTP request spans (default: true). + * + * Disabling the HTTP span will also disable all other child spans. + */ + http?: BooleanOrPredicate<{ request: Request }>; + /** + * Enable/disable GraphQL operation spans (default: true). + * + * Disabling the GraphQL operation spa will also disable all other child spans. + */ + graphql?: BooleanOrPredicate<{ context: unknown }>; // FIXME: better type for graphql context + /** + * Enable/disable GraphQL context building phase (default: true). + */ + graphqlContextBuilding?: BooleanOrPredicate<{ context: unknown }>; // FIXME: better type for graphql context + /** + * Enable/disable GraphQL parse spans (default: true). + */ + graphqlParse?: BooleanOrPredicate<{ context: unknown }>; // FIXME: better type for graphql context + /** + * Enable/disable GraphQL validate spans (default: true). + */ + graphqlValidate?: BooleanOrPredicate<{ context: unknown }>; + /** + * Enable/disable GraphQL execute spans (default: true). + * + * Disabling the GraphQL execute spans will also disable all other child spans. + */ + graphqlExecute?: BooleanOrPredicate<{ context: unknown }>; + /** + * Enable/disable subgraph execute spans (default: true). + * + * Disabling the subgraph execute spans will also disable all other child spans. + */ + subgraphExecute?: BooleanOrPredicate<{ + executionRequest: ExecutionRequest; + subgraphName: string; + }>; + /** + * Enable/disable upstream HTTP fetch calls spans (default: true). + */ + upstreamFetch?: BooleanOrPredicate<{ + executionRequest: ExecutionRequest | undefined; + }>; + /** + * Enable/disable schema loading spans (default: true if context manager available). + * + * Note: This span requires an Async compatible context manager + */ + schema?: boolean; + /** + * Enable/disable initialization span (default: true). + */ + initialization?: boolean; + }; + events?: { + /** + * Enable/Disable cache related span events (default: true). + */ + cache?: BooleanOrPredicate<{ key: string; action: 'read' | 'write' }>; + }; + }; +}; const HeadersTextMapGetter: TextMapGetter = { keys(carrier) { @@ -283,13 +233,10 @@ export function useOpenTelemetry( const inheritContext = options.inheritContext ?? true; const propagateContext = options.propagateContext ?? true; let useContextManager: boolean; + const traces = typeof options.traces === 'object' ? options.traces : {}; let tracer: Tracer; - - let spanProcessors: SpanProcessor[]; - let provider: WebTracerProvider; - - const yogaVersion = createDeferred(); + let pluginLogger: Logger; let initSpan: Context | null; function isParentEnabled(state: State): boolean { @@ -311,115 +258,47 @@ export function useOpenTelemetry( return specificState?.current ?? ROOT_CONTEXT; } - const logger = createDeferred(); - let pluginLogger = options.log - ? fakePromise(options.log.child('[useOpenTelemetry] ')) - : logger.promise; - - function init(): Promise { - if ('initializeNodeSDK' in options && options.initializeNodeSDK === false) { - if (options.contextManager === false) { - return fakePromise(false); - } - - if ( - options.contextManager === true || - options.contextManager == undefined - ) { - return tryContextManagerSetup(options.contextManager); - } + let preparation$ = init(); + preparation$.then(() => { + preparation$ = fakePromise(); + }); - if (context.setGlobalContextManager(options.contextManager)) { - return fakePromise(true); - } else { + async function init() { + if ( + options.useContextManager !== false && + !(await isContextManagerCompatibleWithAsync()) + ) { + useContextManager = false; + if (options.useContextManager === true) { throw new Error( - '[OTEL] The provided context manager failed to register, a context manger is already registered.', + '[OTEL] Context Manager usage is enabled, but the registered one is not compatible with async calls.' + + ' Please use another context manager, such as `AsyncLocalStorageContextManager`.', ); } + } else { + useContextManager = options.useContextManager ?? true; } - const exporters$ = fakePromise( - containsOnlyValues(options.exporters) - ? options.exporters - : Promise.all(options.exporters), - ); - - const resource = detectResources().merge( - resourceFromAttributes({ - [SEMRESATTRS_SERVICE_NAME]: - options.serviceName ?? getEnvVar('OTEL_SERVICE_NAME', 'Gateway'), - [ATTR_SERVICE_VERSION]: - options.serviceVersion ?? - getEnvVar('OTEL_SERVICE_VERSION', yogaVersion.promise), - }), - ); - - let contextManager$ = getContextManager(options.contextManager); - - const sampler = options.samplingRate - ? new ParentBasedSampler({ - root: new TraceIdRatioBasedSampler(options.samplingRate), - }) - : new AlwaysOnSampler(); - - setGlobalErrorHandler((err) => { - diag.error('Uncaught Error', err); - }); - - return exporters$ - .then((exporters) => { - spanProcessors = exporters; - provider = new WebTracerProvider({ resource, spanProcessors, sampler }); - return contextManager$; - }) - .then((contextManager) => { - provider.register({ contextManager }); - return !!contextManager; - }); - } + tracer = traces.tracer || trace.getTracer('gateway'); - let preparation$: Promise; - preparation$ = init().then((contextManager) => { - useContextManager = contextManager; - tracer = options.tracer || trace.getTracer('gateway'); initSpan = trace.setSpan( context.active(), tracer.startSpan('gateway.initialization', { startTime: initializationTime, }), ); - preparation$ = fakePromise(); - return pluginLogger.then((log) => { - pluginLogger = fakePromise(log); - log.debug( - `context manager is ${useContextManager ? 'enabled' : 'disabled'}`, - ); - if (!useContextManager) { - if (options.spans?.schema) { - log.warn( - 'Schema loading spans are disabled because no context manager is available', - ); - } - options.spans = options.spans ?? {}; - options.spans.schema = false; + + if (!useContextManager) { + if (traces.spans?.schema) { + pluginLogger.warn( + 'Schema loading spans are disabled because no context manager is available', + ); } - diag.setLogger( - { - error: (message, ...args) => - log.error('[otel-diag] ' + message, ...args), - warn: (message, ...args) => - log.warn('[otel-diag] ' + message, ...args), - info: (message, ...args) => - log.info('[otel-diag] ' + message, ...args), - debug: (message, ...args) => - log.debug('[otel-diag] ' + message, ...args), - verbose: (message, ...args) => - log.debug('[otel-diag] ' + message, ...args), - }, - options.diagLevel ?? DiagLogLevel.VERBOSE, - ); - }); - }); + + traces.spans = traces.spans ?? {}; + traces.spans.schema = false; + } + } return withState< OpenTelemetryPlugin, @@ -431,7 +310,7 @@ export function useOpenTelemetry( getOtelContext: ({ state }) => getContext(state), instrumentation: { request({ state: { forRequest }, request }, wrapped) { - if (!shouldTrace(options.spans?.http, { request })) { + if (!shouldTrace(traces.spans?.http, { request })) { return wrapped(); } @@ -475,7 +354,7 @@ export function useOpenTelemetry( ) { if ( !isParentEnabled(parentState) || - !shouldTrace(options.spans?.graphql, gqlCtx) + !shouldTrace(traces.spans?.graphql, { context: gqlCtx }) ) { return wrapped(); } @@ -505,7 +384,9 @@ export function useOpenTelemetry( context({ state, context: gqlCtx }, wrapped) { if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.graphqlContextBuilding, gqlCtx) + !shouldTrace(traces.spans?.graphqlContextBuilding, { + context: gqlCtx, + }) ) { return wrapped(); } @@ -534,7 +415,7 @@ export function useOpenTelemetry( parse({ state, context: gqlCtx }, wrapped) { if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.graphqlParse, gqlCtx) + !shouldTrace(traces.spans?.graphqlParse, { context: gqlCtx }) ) { return wrapped(); } @@ -561,7 +442,7 @@ export function useOpenTelemetry( validate({ state, context: gqlCtx }, wrapped) { if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.graphqlValidate, gqlCtx) + !shouldTrace(traces.spans?.graphqlValidate, { context: gqlCtx }) ) { return wrapped(); } @@ -594,7 +475,7 @@ export function useOpenTelemetry( execute({ state, context: gqlCtx }, wrapped) { if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.graphqlExecute, gqlCtx) + !shouldTrace(traces.spans?.graphqlExecute, { context: gqlCtx }) ) { // Other parenting skipping are marked by the fact that `otel` is undefined in the state // For execute, there is no specific state, so we keep track of it here. @@ -639,8 +520,8 @@ export function useOpenTelemetry( parentState.forOperation?.skipExecuteSpan || !shouldTrace( isIntrospection - ? options.spans?.schema - : options.spans?.subgraphExecute, + ? traces.spans?.schema + : traces.spans?.subgraphExecute, { subgraphName, executionRequest, @@ -658,7 +539,7 @@ export function useOpenTelemetry( : getContext(parentState); forSubgraphExecution.otel = new OtelContextStack( - createSubgraphExecuteFetchSpan({ + createSubgraphExecuteSpan({ ctx: parentContext, tracer, executionRequest, @@ -695,7 +576,7 @@ export function useOpenTelemetry( if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.upstreamFetch, executionRequest) + !shouldTrace(traces.spans?.upstreamFetch, { executionRequest }) ) { return wrapped(); } @@ -729,13 +610,16 @@ export function useOpenTelemetry( }, schema(_, wrapped) { - if (!shouldTrace(options.spans?.schema, null)) { + if (!shouldTrace(traces.spans?.schema, null)) { return wrapped(); } return unfakePromise( preparation$.then(() => { - const ctx = createSchemaLoadingSpan({ tracer }); + const ctx = createSchemaLoadingSpan({ + ctx: initSpan ?? ROOT_CONTEXT, + tracer, + }); return fakePromise() .then(() => context.with(ctx, wrapped)) .catch((err) => { @@ -750,8 +634,37 @@ export function useOpenTelemetry( }, onYogaInit({ yoga }) { - yogaVersion.resolve(yoga.version); - logger.resolve(options.log); + const log = + options.log ?? + //TODO remove this when Yoga will also use the new Logger API + new Logger({ + writers: [ + { + write(level, attrs, msg) { + level = level === 'trace' ? 'debug' : level; + yoga.logger[level](msg, attrs); + }, + }, + ], + }); + + pluginLogger = log.child('[useOpenTelemetry]'); + + if (options.configureDiagLogger !== false) { + const logLevel = diagLogLevelFromEnv(); // We enable the diag only if it is explicitly enabled, as NodeSDK does + if (logLevel) { + const diagLog = pluginLogger.child('[diag] ') as Logger & { + verbose: Logger['trace']; + }; + diagLog.verbose = diagLog.trace; + diag.setLogger(diagLog, logLevel); + setGlobalErrorHandler((err) => diagLog.error(err as Attributes)); + } + } + + pluginLogger.debug( + `context manager is ${useContextManager ? 'enabled' : 'disabled'}`, + ); }, onEnveloped({ state, extendContext }) { @@ -764,7 +677,7 @@ export function useOpenTelemetry( }, onCacheGet: (payload) => - shouldTrace(options.spans?.cache, { key: payload.key, action: 'read' }) + shouldTrace(traces.events?.cache, { key: payload.key, action: 'read' }) ? { onCacheMiss: () => recordCacheEvent('miss', payload), onCacheHit: () => recordCacheEvent('hit', payload), @@ -774,7 +687,7 @@ export function useOpenTelemetry( : undefined, onCacheSet: (payload) => - shouldTrace(options.spans?.cache, { key: payload.key, action: 'write' }) + shouldTrace(traces.events?.cache, { key: payload.key, action: 'write' }) ? { onCacheSetDone: () => recordCacheEvent('write', payload), onCacheSetError: ({ error }) => @@ -787,14 +700,14 @@ export function useOpenTelemetry( state.forRequest.otel && setResponseAttributes(state.forRequest.otel.root, response); } catch (error) { - pluginLogger.then((l) => l.error('Failed to end http span', { error })); + pluginLogger!.error('Failed to end http span', { error }); } }, onParams: function onParamsOTEL({ state, context: gqlCtx, params }) { if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.graphql, gqlCtx) + !shouldTrace(traces.spans?.graphql, { context: gqlCtx }) ) { return; } @@ -810,7 +723,7 @@ export function useOpenTelemetry( }) { if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.graphql, gqlCtx) + !shouldTrace(traces.spans?.graphql, { context: gqlCtx }) ) { return; } @@ -821,7 +734,7 @@ export function useOpenTelemetry( onParse({ state, context: gqlCtx }) { if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.graphqlParse, gqlCtx) + !shouldTrace(traces.spans?.graphqlParse, { context: gqlCtx }) ) { return; } @@ -839,7 +752,7 @@ export function useOpenTelemetry( onValidate({ state, context: gqlCtx }) { if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.graphqlValidate, gqlCtx) + !shouldTrace(traces.spans?.graphqlValidate, { context: gqlCtx }) ) { return; } @@ -896,7 +809,7 @@ export function useOpenTelemetry( if ( !isParentEnabled(state) || - !shouldTrace(options.spans?.upstreamFetch, executionRequest) + !shouldTrace(traces.spans?.upstreamFetch, { executionRequest }) ) { return; } @@ -914,7 +827,6 @@ export function useOpenTelemetry( setUpstreamFetchResponseAttributes({ ctx, response }); }; }, - onSchemaChange(payload) { setSchemaAttributes(payload); @@ -924,26 +836,22 @@ export function useOpenTelemetry( } }, - async onDispose() { - if (options.initializeNodeSDK) { - await provider?.forceFlush?.(); - await provider?.shutdown?.(); + onDispose() { + if (options.flushOnDispose !== false) { + const flushMethod = options.flushOnDispose ?? 'forceFlush'; - diag.disable(); - trace.disable(); - context.disable(); - propagation.disable(); + const provider = trace.getTracerProvider() as Record; + if ( + flushMethod in provider && + typeof provider[flushMethod] === 'function' + ) { + return provider[flushMethod](); + } } }, })); } -function containsOnlyValues( - maybePromises: MaybePromise[], -): maybePromises is T[] { - return !maybePromises.some(isPromise); -} - function shouldTrace( value: BooleanOrPredicate | null | undefined, args: Args, diff --git a/packages/plugins/opentelemetry/src/processors.ts b/packages/plugins/opentelemetry/src/processors.ts deleted file mode 100644 index 587773afb..000000000 --- a/packages/plugins/opentelemetry/src/processors.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { OTLPTraceExporter as OtlpHttpExporter } from '@opentelemetry/exporter-trace-otlp-http'; -import { - ZipkinExporter, - type ExporterConfig as ZipkinExporterConfig, -} from '@opentelemetry/exporter-zipkin'; -import { type OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'; -import { type OTLPGRPCExporterConfigNode } from '@opentelemetry/otlp-grpc-exporter-base'; -import { - BatchSpanProcessor, - ConsoleSpanExporter, - SimpleSpanProcessor, - type BufferConfig, - type SpanExporter, - type SpanProcessor, -} from '@opentelemetry/sdk-trace-base'; -import { handleMaybePromise, MaybePromise } from '@whatwg-node/promise-helpers'; - -export type BatchingConfig = boolean | BufferConfig; - -function resolveBatchingConfig( - exporter: SpanExporter, - batchingConfig?: BatchingConfig, -): SpanProcessor { - const value = batchingConfig ?? true; - - if (value === true) { - return new BatchSpanProcessor(exporter); - } else if (value === false) { - return new SimpleSpanProcessor(exporter); - } else { - return new BatchSpanProcessor(exporter, value); - } -} - -export function createStdoutExporter( - batchingConfig?: BatchingConfig, -): SpanProcessor { - return resolveBatchingConfig(new ConsoleSpanExporter(), batchingConfig); -} - -export function createZipkinExporter( - config?: ZipkinExporterConfig, - batchingConfig?: BatchingConfig, -): SpanProcessor { - return resolveBatchingConfig(new ZipkinExporter(config), batchingConfig); -} - -export function createOtlpHttpExporter( - config?: OTLPExporterNodeConfigBase, - batchingConfig?: BatchingConfig, -): SpanProcessor { - return resolveBatchingConfig(new OtlpHttpExporter(config), batchingConfig); -} - -interface SpanExporterCtor { - new (config: TConfig): SpanExporter; -} - -function loadExporterLazily< - TConfig, - TSpanExporterCtor extends SpanExporterCtor, ->( - exporterName: string, - exporterModuleName: string, - exportNameInModule: string, -): MaybePromise { - try { - return handleMaybePromise( - () => import(exporterModuleName), - (mod) => { - const ExportCtor = - mod?.default?.[exportNameInModule] || mod?.[exportNameInModule]; - if (!ExportCtor) { - throw new Error( - `${exporterName} exporter is not available in the current environment`, - ); - } - return ExportCtor; - }, - ); - } catch (err) { - throw new Error( - `${exporterName} exporter is not available in the current environment`, - ); - } -} - -export function createOtlpGrpcExporter( - config?: OTLPGRPCExporterConfigNode, - batchingConfig?: BatchingConfig, -): MaybePromise { - return handleMaybePromise( - () => - loadExporterLazily( - 'OTLP gRPC', - '@opentelemetry/exporter-trace-otlp-grpc', - 'OTLPTraceExporter', - ), - (OTLPTraceExporter) => { - return resolveBatchingConfig( - new OTLPTraceExporter(config), - batchingConfig, - ); - }, - ); -} diff --git a/packages/plugins/opentelemetry/src/sdk-node.ts b/packages/plugins/opentelemetry/src/sdk-node.ts new file mode 100644 index 000000000..2dc67d534 --- /dev/null +++ b/packages/plugins/opentelemetry/src/sdk-node.ts @@ -0,0 +1,31 @@ +import sdkDefault, { + api, + contextBase, + core, + LoggerProviderConfig, + logs, + MeterProviderConfig, + metrics, + node, + NodeSDK, + NodeSDKConfiguration, + resources, + tracing, +} from '@opentelemetry/sdk-node'; + +export type { LoggerProviderConfig, MeterProviderConfig, NodeSDKConfiguration }; + +export { + api, + contextBase, + core, + logs, + metrics, + node, + NodeSDK, + resources, + sdkDefault, + tracing, +}; + +export default sdkDefault; diff --git a/packages/plugins/opentelemetry/src/setup.ts b/packages/plugins/opentelemetry/src/setup.ts new file mode 100644 index 000000000..a1672f002 --- /dev/null +++ b/packages/plugins/opentelemetry/src/setup.ts @@ -0,0 +1,192 @@ +import { + context, + ContextManager, + propagation, + TextMapPropagator, + trace, + TracerProvider, +} from '@opentelemetry/api'; +import { + CompositePropagator, + W3CBaggagePropagator, + W3CTraceContextPropagator, +} from '@opentelemetry/core'; +import { Resource, resourceFromAttributes } from '@opentelemetry/resources'; +import { + AlwaysOnSampler, + BasicTracerProvider, + BatchSpanProcessor, + ConsoleSpanExporter, + GeneralLimits, + ParentBasedSampler, + SimpleSpanProcessor, + SpanLimits, + TraceIdRatioBasedSampler, + type BufferConfig, + type Sampler, + type SpanExporter, + type SpanProcessor, +} from '@opentelemetry/sdk-trace-base'; +import { + ATTR_SERVICE_NAME, + ATTR_SERVICE_VERSION, +} from '@opentelemetry/semantic-conventions'; +import { getEnvVar } from './utils'; + +export * from './attributes'; + +// @inject-version globalThis.__OTEL_PLUGIN_VERSION__ here + +type TracingOptions = { + traces?: + | { tracerProvider: TracerProvider } + | (TracerOptions & + ( + | { + // Processors + processors: SpanProcessor[]; + tracerProvider?: never; + exporter?: never; + } + | { + // Exporter + exporter: SpanExporter; + batching?: BatchingConfig | boolean; + tracerProvider?: never; + processors?: never; + } + | { + // Console only + tracerProvider?: never; + processors?: never; + exporter?: never; + } + )); +}; + +type TracerOptions = { + console?: boolean; + spanLimits?: SpanLimits; +}; + +type SamplingOptions = + | { + sampler: Sampler; + samplingRate?: never; + } + | { + sampler?: never; + samplingRate?: number; + }; + +type OpentelemetrySetupOptions = TracingOptions & + SamplingOptions & { + resource?: Resource | { serviceName: string; serviceVersion: string }; + contextManager: ContextManager | null; + propagators?: TextMapPropagator[]; + generalLimits?: GeneralLimits; + }; + +export function opentelemetrySetup(options: OpentelemetrySetupOptions) { + if (getEnvVar('OTEL_SDK_DISABLED', false) === 'true') { + return; + } + + if (options.traces) { + if (options.traces.tracerProvider) { + if ( + 'register' in options.traces.tracerProvider && + typeof options.traces.tracerProvider.register === 'function' + ) { + options.traces.tracerProvider.register(); + } else { + trace.setGlobalTracerProvider(options.traces.tracerProvider); + } + } else { + let spanProcessors = options.traces.processors ?? []; + + if (options.traces.exporter) { + spanProcessors.push( + resolveBatchingConfig( + options.traces.exporter, + options.traces.batching, + ), + ); + } + + if (options.traces.console) { + spanProcessors.push(new SimpleSpanProcessor(new ConsoleSpanExporter())); + } + + const baseResource = resourceFromAttributes({ + [ATTR_SERVICE_NAME]: + options.resource && 'serviceName' in options.resource + ? options.resource?.serviceName + : getEnvVar( + 'OTEL_SERVICE_NAME', + '@graphql-mesh/plugin-opentelemetry', + ), + [ATTR_SERVICE_VERSION]: + options.resource && 'serviceVersion' in options.resource + ? options.resource?.serviceVersion + : getEnvVar( + 'OTEL_SERVICE_VERSION', + globalThis.__OTEL_PLUGIN_VERSION__, + ), + }); + + trace.setGlobalTracerProvider( + new BasicTracerProvider({ + resource: + options.resource && !('serviceName' in options.resource) + ? baseResource.merge(options.resource) + : baseResource, + sampler: + options.sampler ?? + (options.samplingRate + ? new ParentBasedSampler({ + root: new TraceIdRatioBasedSampler(options.samplingRate), + }) + : new AlwaysOnSampler()), + spanProcessors, + generalLimits: options.generalLimits, + spanLimits: options.traces.spanLimits, + }), + ); + } + } + + if (options.contextManager !== null) { + context.setGlobalContextManager(options.contextManager); + } + + if (!options.propagators || options.propagators.length !== 0) { + const propagators = options.propagators ?? [ + new W3CBaggagePropagator(), + new W3CTraceContextPropagator(), + ]; + + propagation.setGlobalPropagator( + propagators.length === 1 + ? propagators[0]! + : new CompositePropagator({ propagators }), + ); + } +} + +export type BatchingConfig = boolean | BufferConfig; + +function resolveBatchingConfig( + exporter: SpanExporter, + batchingConfig?: BatchingConfig, +): SpanProcessor { + const value = batchingConfig ?? true; + + if (value === true) { + return new BatchSpanProcessor(exporter); + } else if (value === false) { + return new SimpleSpanProcessor(exporter); + } else { + return new BatchSpanProcessor(exporter, value); + } +} diff --git a/packages/plugins/opentelemetry/src/spans.ts b/packages/plugins/opentelemetry/src/spans.ts index 1de17baf9..9a4ee6686 100644 --- a/packages/plugins/opentelemetry/src/spans.ts +++ b/packages/plugins/opentelemetry/src/spans.ts @@ -7,6 +7,7 @@ import { type ExecutionResult, } from '@graphql-tools/utils'; import { + context, ROOT_CONTEXT, SpanKind, SpanStatusCode, @@ -304,7 +305,7 @@ export function setGraphQLExecutionResultAttributes(input: { } } -export function startSubgraphExecuteFetchSpan(input: { +export function createSubgraphExecuteSpan(input: { ctx: Context; tracer: Tracer; executionRequest: ExecutionRequest; @@ -436,12 +437,23 @@ export function setExecutionResultAttributes(input: { } } -export function createSchemaLoadingSpan(inputs: { tracer: Tracer }) { +export function createSchemaLoadingSpan(inputs: { + tracer: Tracer; + ctx: Context; +}) { const span = inputs.tracer.startSpan( 'gateway.schema', { attributes: { 'gateway.schema.changed': false } }, - ROOT_CONTEXT, + inputs.ctx, ); + const currentContext = context.active(); + + // If the current span is not the provided span, add a link to the current span + if (currentContext !== inputs.ctx) { + const currentSpan = trace.getActiveSpan(); + currentSpan?.addLink({ context: span.spanContext() }); + } + return trace.setSpan(ROOT_CONTEXT, span); } diff --git a/packages/plugins/opentelemetry/src/utils.ts b/packages/plugins/opentelemetry/src/utils.ts index 9e1b5e4d1..254edc0a2 100644 --- a/packages/plugins/opentelemetry/src/utils.ts +++ b/packages/plugins/opentelemetry/src/utils.ts @@ -1,5 +1,4 @@ -import { context } from '@opentelemetry/api'; -import { getContextManager } from './context'; +import { context, diag, DiagLogLevel } from '@opentelemetry/api'; export async function tryContextManagerSetup( useContextManager: true | undefined, @@ -8,19 +7,11 @@ export async function tryContextManagerSetup( return true; } - const contextManager = await getContextManager(useContextManager); - - if (!contextManager) { - return false; - } - - if (!context.setGlobalContextManager(contextManager)) { - if (useContextManager) { - throw new Error( - '[OTEL] A Context Manager is already registered, but is not compatible with async calls.' + - ' Please use another context manager, such as `AsyncLocalStorageContextManager`.', - ); - } + if (useContextManager) { + throw new Error( + '[OTEL] A Context Manager is already registered, but is not compatible with async calls.' + + ' Please use another context manager, such as `AsyncLocalStorageContextManager`.', + ); } return true; @@ -29,8 +20,15 @@ export async function tryContextManagerSetup( export function isContextManagerCompatibleWithAsync(): Promise { const symbol = Symbol(); const root = context.active(); - return context.with(root.setValue(symbol, true), async () => { - return (context.active().getValue(symbol) as boolean) || false; + return context.with(root.setValue(symbol, true), () => { + return new Promise((resolve) => { + // Use timeout to ensure that we yield to the event loop. + // Some runtimes are optimized and doesn't yield for straight forward async functions + // without actual async work. + setTimeout(() => { + resolve((context.active().getValue(symbol) as boolean) || false); + }); + }); }); } @@ -39,3 +37,30 @@ export const getEnvVar = ? (name: string, defaultValue: T): string | T => process.env[name] || defaultValue : (_name: string, defaultValue: T): string | T => defaultValue; + +const logLevelMap: Record = { + ALL: DiagLogLevel.ALL, + VERBOSE: DiagLogLevel.VERBOSE, + DEBUG: DiagLogLevel.DEBUG, + INFO: DiagLogLevel.INFO, + WARN: DiagLogLevel.WARN, + ERROR: DiagLogLevel.ERROR, + NONE: DiagLogLevel.NONE, +}; + +export function diagLogLevelFromEnv(): DiagLogLevel | undefined { + const value = getEnvVar('OTEL_LOG_LEVEL', null); + + if (value == null) { + return undefined; + } + + const resolvedLogLevel = logLevelMap[value.toUpperCase()]; + if (resolvedLogLevel == null) { + diag.warn( + `Unknown log level "${value}", expected one of ${Object.keys(logLevelMap)}, using default`, + ); + return DiagLogLevel.INFO; + } + return resolvedLogLevel; +} diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index bdbe26c07..5ceafc002 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -1,147 +1,365 @@ -import { SpanStatusCode } from '@opentelemetry/api'; -import { createSchema, createYoga } from 'graphql-yoga'; -import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'; +import { opentelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; +import { + SpanStatusCode, + TextMapPropagator, + TracerProvider, +} from '@opentelemetry/api'; +import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; +import { + CompositePropagator, + W3CBaggagePropagator, + W3CTraceContextPropagator, +} from '@opentelemetry/core'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'; +import { resourceFromAttributes } from '@opentelemetry/resources'; +import { + AlwaysOffSampler, + AlwaysOnSampler, + BasicTracerProvider, + BatchSpanProcessor, + ConsoleSpanExporter, + ParentBasedSampler, + SimpleSpanProcessor, + SpanProcessor, + TraceIdRatioBasedSampler, +} from '@opentelemetry/sdk-trace-base'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; import type { OpenTelemetryContextExtension } from '../src/plugin'; -import { buildTestGateway, spanExporter } from './utils'; - -let mockModule = vi.mock; -if (globalThis.Bun) { - mockModule = require('bun:test').mock.module; -} -const mockRegisterProvider = vi.fn(); -let gw: typeof import('../../../runtime/src'); -describe('useOpenTelemetry', () => { - mockModule('@opentelemetry/sdk-trace-web', () => ({ - WebTracerProvider: vi.fn(() => ({ register: mockRegisterProvider })), - AlwaysOnSampler: vi.fn(), - })); - - beforeAll(async () => { - gw = await import('../../../runtime/src'); - }); +import { + buildTestGateway, + disableAll, + getContextManager, + getPropagator, + getResource, + getSampler, + getSpanProcessors, + getTracerProvider, + setupOtelForTests, + spanExporter, +} from './utils'; +describe('useOpenTelemetry', () => { beforeEach(() => { vi.clearAllMocks(); spanExporter.reset(); }); - describe('initialization', () => { - it('initializes and starts a new provider by default', async () => { - const { useOpenTelemetry } = await import('../src'); - await using upstream = createYoga({ - schema: createSchema({ - typeDefs: /* GraphQL */ ` - type Query { - hello: String - } - `, - resolvers: { - Query: { - hello: () => 'World', - }, - }, - }), - logging: false, + + describe('setup', () => { + beforeEach(() => { + // Unregister all global OTEL apis, so that each tests can check for different setups + disableAll(); + }); + + it('should setup OTEL with sain default', () => { + opentelemetrySetup({ + contextManager: new AsyncLocalStorageContextManager(), + traces: { + exporter: new OTLPTraceExporter(), + }, }); - await using gateway = gw.createGatewayRuntime({ - proxy: { - endpoint: 'https://example.com/graphql', + // Check context manager + expect(getTracerProvider()).toBeInstanceOf(BasicTracerProvider); + expect(getContextManager()).toBeInstanceOf( + AsyncLocalStorageContextManager, + ); + + // Check processor. Should be a batched HTTP OTLP exporter + const processors = getSpanProcessors(); + expect(processors).toHaveLength(1); + expect(processors![0]).toBeInstanceOf(BatchSpanProcessor); + const processor = processors![0] as BatchSpanProcessor; + // @ts-ignore access private field + const exporter = processor._exporter as OTLPTraceExporter; + expect(exporter).toBeInstanceOf(OTLPTraceExporter); + + // Check Sampler + expect(getSampler()).toBeInstanceOf(AlwaysOnSampler); + + // Check Propagators + const propagator = getPropagator(); + expect(propagator).toBeInstanceOf(CompositePropagator); + // @ts-expect-error Access of private field + const propagators = propagator._propagators as TextMapPropagator[]; + expect(propagators).toContainEqual(expect.any(W3CBaggagePropagator)); + expect(propagators).toContainEqual(expect.any(W3CTraceContextPropagator)); + + const resource = getResource(); + expect(resource?.attributes).toMatchObject({ + 'service.name': '@graphql-mesh/plugin-opentelemetry', + }); + }); + + it('should register a custom TracerProvider', () => { + const tracerProvider: TracerProvider & { register: () => void } = { + register: vi.fn(), + getTracer: vi.fn(), + }; + + opentelemetrySetup({ + contextManager: null, + traces: { + tracerProvider, }, - plugins: (ctx) => [ - gw.useCustomFetch( - // @ts-expect-error TODO: MeshFetch is not compatible with @whatwg-node/server fetch - upstream.fetch, - ), - useOpenTelemetry({ - exporters: [], - ...ctx, - }), - ], - logging: false, }); - const response = await gateway.fetch('http://localhost:4000/graphql', { - method: 'POST', - headers: { - 'content-type': 'application/json', + expect(tracerProvider.register).toHaveBeenCalled(); + }); + + it('should not register a contextManager when passed null', () => { + const before = getContextManager(); + + opentelemetrySetup({ + contextManager: null, + }); + + expect(getContextManager()).toBe(before); + }); + + it('should register a console exporter', () => { + opentelemetrySetup({ + contextManager: null, + traces: { + console: true, }, - body: JSON.stringify({ - query: /* GraphQL */ ` - query { - hello - } - `, + }); + + const processors = getSpanProcessors(); + expect(processors).toHaveLength(1); + // @ts-ignore access of private field + const exporter = processors![0]!._exporter; + expect(exporter).toBeInstanceOf(ConsoleSpanExporter); + }); + + it('should register a console exporter even if an exporter is given', () => { + opentelemetrySetup({ + contextManager: null, + traces: { + exporter: new OTLPTraceExporter(), + console: true, + }, + }); + + const processors = getSpanProcessors(); + expect(processors).toHaveLength(2); + // @ts-ignore access of private field + const exporter = processors![1]!._exporter; + expect(exporter).toBeInstanceOf(ConsoleSpanExporter); + }); + + it('should register a console exporter even if a list of processors is given', () => { + opentelemetrySetup({ + contextManager: null, + traces: { + processors: [new SimpleSpanProcessor(new OTLPTraceExporter())], + console: true, + }, + }); + + const processors = getSpanProcessors(); + expect(processors).toHaveLength(2); + // @ts-ignore access of private field + const exporter = processors![1]!._exporter; + expect(exporter).toBeInstanceOf(ConsoleSpanExporter); + }); + + it('should register a custom resource', () => { + opentelemetrySetup({ + resource: resourceFromAttributes({ + 'service.name': 'test-name', + 'service.version': 'test-version', + 'custom-attribute': 'test-value', }), + traces: { + console: true, + }, + contextManager: null, }); - expect(response.status).toBe(200); - const body = await response.json(); - expect(body.data?.hello).toBe('World'); - expect(mockRegisterProvider).toHaveBeenCalledTimes(1); + expect(getResource()?.attributes).toMatchObject({ + 'service.name': 'test-name', + 'service.version': 'test-version', + 'custom-attribute': 'test-value', + }); }); - it('does not initialize a new provider and does not start the provided provider instance', async () => { - const { useOpenTelemetry } = await import('../src'); - await using upstream = createYoga({ - schema: createSchema({ - typeDefs: /* GraphQL */ ` - type Query { - hello: String - } - `, - resolvers: { - Query: { - hello: () => 'World', - }, + it.skipIf(!vi.stubEnv)( + 'should get service name and version from env var', + () => { + vi.stubEnv('OTEL_SERVICE_NAME', 'test-name'); + vi.stubEnv('OTEL_SERVICE_VERSION', 'test-version'); + + opentelemetrySetup({ + traces: { console: true }, + contextManager: null, + }); + + expect(getResource()?.attributes).toMatchObject({ + 'service.name': 'test-name', + 'service.version': 'test-version', + }); + + vi.unstubAllEnvs(); + }, + ); + + it('should allow to register a custom sampler', () => { + opentelemetrySetup({ + traces: { + console: true, + }, + contextManager: null, + sampler: new AlwaysOffSampler(), + }); + + expect(getSampler()).toBeInstanceOf(AlwaysOffSampler); + }); + + it('should allow to configure a rate sampling strategy', () => { + opentelemetrySetup({ + contextManager: null, + traces: { console: true }, + samplingRate: 0.1, + }); + + const sampler = getSampler(); + expect(sampler).toBeInstanceOf(ParentBasedSampler); + + // @ts-ignore access private field + const rootSampler = sampler._root; + expect(rootSampler).toBeInstanceOf(TraceIdRatioBasedSampler); + + // @ts-ignore access private field + const rate = rootSampler._ratio; + expect(rate).toBe(0.1); + }); + + it('should allow to disable batching', () => { + opentelemetrySetup({ + contextManager: null, + traces: { + exporter: new OTLPTraceExporter(), + batching: false, + }, + }); + + const [processor] = getSpanProcessors()!; + expect(processor).toBeInstanceOf(SimpleSpanProcessor); + }); + + it('should allow to configure batching', () => { + opentelemetrySetup({ + contextManager: null, + traces: { + exporter: new OTLPTraceExporter(), + batching: { + maxExportBatchSize: 1, + maxQueueSize: 2, + scheduledDelayMillis: 3, + exportTimeoutMillis: 4, }, - }), - logging: false, + }, }); - await using gateway = gw.createGatewayRuntime({ - proxy: { - endpoint: 'https://example.com/graphql', + const [processor] = getSpanProcessors()!; + expect(processor).toBeInstanceOf(BatchSpanProcessor); + expect(processor).toMatchObject({ + _maxExportBatchSize: 1, + _maxQueueSize: 2, + _scheduledDelayMillis: 3, + _exportTimeoutMillis: 4, + }); + }); + + it('should allow to manually define processor', () => { + const processor = {} as SpanProcessor; + opentelemetrySetup({ + contextManager: null, + traces: { + processors: [processor], }, - plugins: (ctx) => [ - gw.useCustomFetch( - // @ts-expect-error TODO: MeshFetch is not compatible with @whatwg-node/server fetch - upstream.fetch, - ), - useOpenTelemetry({ initializeNodeSDK: false, ...ctx }), - ], - logging: false, }); - const response = await gateway.fetch('http://localhost:4000/graphql', { - method: 'POST', - headers: { - 'content-type': 'application/json', + const processors = getSpanProcessors(); + expect(processors).toHaveLength(1); + expect(getSpanProcessors()![0]).toBe(processor); + }); + + it('should allow to customize propagators', () => { + const propagator = {} as TextMapPropagator; + opentelemetrySetup({ + contextManager: null, + propagators: [propagator], + }); + + expect(getPropagator()).toBe(propagator); + }); + + it('should allow to customize propagators', () => { + const before = getPropagator(); + + opentelemetrySetup({ + contextManager: null, + propagators: [], + }); + + expect(getPropagator()).toBe(before); + }); + + it('should allow to customize limits', () => { + opentelemetrySetup({ + contextManager: null, + traces: { + console: true, + spanLimits: { + attributeCountLimit: 1, + attributePerEventCountLimit: 2, + attributePerLinkCountLimit: 3, + attributeValueLengthLimit: 4, + eventCountLimit: 5, + linkCountLimit: 6, + }, + }, + generalLimits: { + attributeCountLimit: 7, + attributeValueLengthLimit: 8, }, - body: JSON.stringify({ - query: /* GraphQL */ ` - query { - hello - } - `, - }), }); - expect(response.status).toBe(200); - const body = await response.json(); - expect(body.data?.hello).toBe('World'); - expect(mockRegisterProvider).not.toHaveBeenCalled(); + // @ts-ignore access private field + const registeredConfig = getTracerProvider()._config; + expect(registeredConfig).toMatchObject({ + spanLimits: { + attributeCountLimit: 1, + attributePerEventCountLimit: 2, + attributePerLinkCountLimit: 3, + attributeValueLengthLimit: 4, + eventCountLimit: 5, + linkCountLimit: 6, + }, + generalLimits: { + attributeCountLimit: 7, + attributeValueLengthLimit: 8, + }, + }); }); }); describe('tracing', () => { + beforeEach(() => { + // Register testing OTEL api with a custom Span processor and an Async Context Manager + disableAll(); + setupOtelForTests(); + }); + describe.each([ - { name: 'with context manager', contextManager: undefined }, - { name: 'without context manager', contextManager: false as const }, - ])('$name', ({ contextManager }) => { + { name: 'with context manager', useContextManager: undefined }, + { name: 'without context manager', useContextManager: false as const }, + ])('$name', ({ useContextManager }) => { const buildTestGatewayForCtx: typeof buildTestGateway = (options) => buildTestGateway({ ...options, - options: { contextManager, ...options?.options }, + options: { useContextManager, ...options?.options }, }); const expected = { @@ -326,7 +544,9 @@ describe('useOpenTelemetry', () => { it('should not trace http requests if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { http: false, schema: false }, + traces: { + spans: { http: false, schema: false }, + }, }, }); await gateway.query(); @@ -337,7 +557,9 @@ describe('useOpenTelemetry', () => { it('should not trace graphql operation if disable', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { graphql: false, schema: false }, + traces: { + spans: { graphql: false, schema: false }, + }, }, }); await gateway.query(); @@ -358,7 +580,9 @@ describe('useOpenTelemetry', () => { it('should not trace parse if disable', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { graphqlParse: false }, + traces: { + spans: { graphqlParse: false }, + }, }, }); await gateway.query(); @@ -373,7 +597,9 @@ describe('useOpenTelemetry', () => { it('should not trace validate if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { graphqlValidate: false }, + traces: { + spans: { graphqlValidate: false }, + }, }, }); await gateway.query(); @@ -388,7 +614,9 @@ describe('useOpenTelemetry', () => { it('should not trace context building if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { graphqlContextBuilding: false }, + traces: { + spans: { graphqlContextBuilding: false }, + }, }, }); await gateway.query(); @@ -403,7 +631,9 @@ describe('useOpenTelemetry', () => { it('should not trace execute if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { graphqlExecute: false, schema: false }, + traces: { + spans: { graphqlExecute: false, schema: false }, + }, }, }); await gateway.query(); @@ -426,7 +656,9 @@ describe('useOpenTelemetry', () => { it('should not trace subgraph execute if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { subgraphExecute: false, schema: false }, + traces: { + spans: { subgraphExecute: false, schema: false }, + }, }, }); await gateway.query(); @@ -449,7 +681,9 @@ describe('useOpenTelemetry', () => { it('should not trace fetch if disabled', async () => { await using gateway = await buildTestGatewayForCtx({ options: { - spans: { upstreamFetch: false }, + traces: { + spans: { upstreamFetch: false }, + }, }, }); await gateway.query(); @@ -584,7 +818,7 @@ describe('useOpenTelemetry', () => { it('should register schema loading span', async () => { await using gateway = await buildTestGateway({ - options: { spans: { http: false, schema: true } }, + options: { traces: { spans: { http: false, schema: true } } }, }); await gateway.query(); @@ -592,8 +826,6 @@ describe('useOpenTelemetry', () => { const descendants = schemaSpan.descendants.map(({ name }) => name); - console.log(spanExporter.toString()); - expect(descendants).toEqual([ 'gateway.schema', 'subgraph.execute (upstream)', diff --git a/packages/plugins/opentelemetry/tests/utils.ts b/packages/plugins/opentelemetry/tests/utils.ts index 4d8d1a093..af4f1a124 100644 --- a/packages/plugins/opentelemetry/tests/utils.ts +++ b/packages/plugins/opentelemetry/tests/utils.ts @@ -4,15 +4,25 @@ import { GatewayPlugin, } from '@graphql-hive/gateway'; import { MeshFetch } from '@graphql-mesh/types'; -import { diag, TraceState } from '@opentelemetry/api'; +import { + context, + diag, + metrics, + propagation, + ProxyTracerProvider, + trace, + TraceState, + type TextMapPropagator, +} from '@opentelemetry/api'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; import { ExportResultCode, type ExportResult } from '@opentelemetry/core'; import { + BasicTracerProvider, SimpleSpanProcessor, type ReadableSpan, type SpanExporter, + type TracerConfig, } from '@opentelemetry/sdk-trace-base'; -import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { AsyncDisposableStack } from '@whatwg-node/disposablestack'; import { createSchema, createYoga, type GraphQLParams } from 'graphql-yoga'; import { expect } from 'vitest'; @@ -24,9 +34,7 @@ import type { export async function buildTestGateway( options: { gatewayOptions?: Omit; - options?: Partial< - Extract - >; + options?: OpenTelemetryGatewayPluginOptions; plugins?: ( otelPlugin: OpenTelemetryPlugin, ctx: GatewayConfigContext, @@ -66,7 +74,6 @@ export async function buildTestGateway( maskedErrors: false, plugins: (ctx) => { otelPlugin = useOpenTelemetry({ - initializeNodeSDK: false, ...ctx, ...options.options, }); @@ -233,9 +240,57 @@ export type Span = ReadableSpan & { }; export const spanExporter = new MockSpanExporter(); -const traceProvider = new WebTracerProvider({ +const traceProvider = new BasicTracerProvider({ spanProcessors: [new SimpleSpanProcessor(spanExporter)], }); -traceProvider.register({ - contextManager: new AsyncLocalStorageContextManager(), -}); + +export function setupOtelForTests() { + trace.setGlobalTracerProvider(traceProvider); + context.setGlobalContextManager(new AsyncLocalStorageContextManager()); +} + +export const getContextManager = () => { + // @ts-expect-error Access to private method for test purpose + return context._getContextManager() as Context; +}; + +export const getTracerProvider = () => { + return (trace.getTracerProvider() as ProxyTracerProvider).getDelegate(); +}; + +export const getPropagator = () => { + // @ts-expect-error Access to private method for test purpose + return propagation._getGlobalPropagator() as TextMapPropagator; +}; + +export const getTracerProviderConfig = () => { + return ( + // @ts-expect-error Access to private method for test purpose + (getTracerProvider() as BasicTracerProvider)._config as TracerConfig + ); +}; + +export const getSampler = () => { + return getTracerProviderConfig().sampler; +}; + +export const getSpanProcessors = () => { + return getTracerProviderConfig().spanProcessors; +}; + +export const getResource = () => { + return getTracerProviderConfig().resource; +}; + +export const getLimits = () => { + const { spanLimits, generalLimits } = getTracerProviderConfig(); + return { spanLimits, generalLimits }; +}; + +export const disableAll = () => { + trace.disable(); + context.disable(); + propagation.disable(); + metrics.disable(); + diag.disable(); +}; diff --git a/packages/plugins/opentelemetry/tests/yoga.spec.ts b/packages/plugins/opentelemetry/tests/yoga.spec.ts index 0dfe37b4f..1724dc524 100644 --- a/packages/plugins/opentelemetry/tests/yoga.spec.ts +++ b/packages/plugins/opentelemetry/tests/yoga.spec.ts @@ -1,22 +1,16 @@ import { Logger } from '@graphql-hive/logger'; import { useOpenTelemetry } from '@graphql-mesh/plugin-opentelemetry'; import { createSchema, createYoga, Plugin as YogaPlugin } from 'graphql-yoga'; -import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { spanExporter } from './utils'; - -let mockModule = vi.mock; -if (globalThis.Bun) { - mockModule = require('bun:test').mock.module; -} -const mockRegisterProvider = vi.fn(); +import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; +import { disableAll, setupOtelForTests, spanExporter } from './utils'; describe('useOpenTelemetry', () => { - mockModule('@opentelemetry/sdk-trace-web', () => ({ - WebTracerProvider: vi.fn(() => ({ register: mockRegisterProvider })), - })); + beforeAll(() => { + disableAll(); + setupOtelForTests(); + }); beforeEach(() => { - vi.clearAllMocks(); spanExporter.reset(); }); @@ -33,9 +27,8 @@ describe('useOpenTelemetry', () => { } = {}, ) { const otelPlugin = useOpenTelemetry({ - initializeNodeSDK: false, - contextManager, log: new Logger({ level: false }), + useContextManager: contextManager, }); const yoga = createYoga({ diff --git a/tsconfig.json b/tsconfig.json index cca157be4..ecfd2e20e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -46,6 +46,9 @@ "@graphql-mesh/plugin-opentelemetry": [ "./packages/plugins/opentelemetry/src/index.ts" ], + "@graphql-mesh/plugin-opentelemetry/setup": [ + "./packages/plugins/opentelemetry/src/setup.ts" + ], "@graphql-mesh/plugin-prometheus": [ "./packages/plugins/prometheus/src/index.ts" ], diff --git a/yarn.lock b/yarn.lock index fa692c22b..e9af88420 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4197,9 +4197,18 @@ __metadata: "@graphql-tools/load": "npm:^8.0.14" "@graphql-tools/utils": "npm:^10.8.1" "@graphql-yoga/render-graphiql": "npm:^5.15.1" + "@opentelemetry/api": "npm:^1.9.0" + "@opentelemetry/context-zone": "npm:^2.0.1" + "@opentelemetry/core": "npm:^2.0.1" + "@opentelemetry/exporter-jaeger": "npm:^2.0.1" + "@opentelemetry/exporter-zipkin": "npm:^2.0.1" + "@opentelemetry/propagator-b3": "npm:^2.0.1" + "@opentelemetry/propagator-jaeger": "npm:^2.0.1" + "@opentelemetry/sampler-jaeger-remote": "npm:^0.202.0" + "@opentelemetry/sdk-metrics": "npm:^2.0.1" "@rollup/plugin-commonjs": "npm:^28.0.0" "@rollup/plugin-json": "npm:^6.1.0" - "@rollup/plugin-node-resolve": "npm:^16.0.0" + "@rollup/plugin-node-resolve": "patch:@rollup/plugin-node-resolve@npm%3A16.0.1#~/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch" "@rollup/plugin-sucrase": "npm:^5.0.2" "@tsconfig/node18": "npm:^18.2.4" "@types/adm-zip": "npm:^0.5.5" @@ -4657,22 +4666,25 @@ __metadata: "@graphql-mesh/utils": "npm:^0.104.5" "@graphql-tools/utils": "npm:^10.8.1" "@opentelemetry/api": "npm:^1.9.0" - "@opentelemetry/context-async-hooks": "npm:^2.0.0" - "@opentelemetry/core": "npm:^2.0.0" - "@opentelemetry/exporter-trace-otlp-grpc": "npm:^0.200.0" - "@opentelemetry/exporter-trace-otlp-http": "npm:^0.200.0" - "@opentelemetry/exporter-zipkin": "npm:^2.0.0" - "@opentelemetry/instrumentation": "npm:^0.200.0" - "@opentelemetry/resources": "npm:^2.0.0" - "@opentelemetry/sdk-trace-base": "npm:^2.0.0" - "@opentelemetry/sdk-trace-web": "npm:^2.0.0" - "@opentelemetry/semantic-conventions": "npm:^1.28.0" + "@opentelemetry/auto-instrumentations-node": "npm:^0.60.1" + "@opentelemetry/context-async-hooks": "npm:^2.0.1" + "@opentelemetry/core": "npm:^2.0.1" + "@opentelemetry/exporter-trace-otlp-grpc": "npm:^0.202.0" + "@opentelemetry/exporter-trace-otlp-http": "npm:^0.202.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/resources": "npm:^2.0.1" + "@opentelemetry/sdk-node": "npm:^0.202.0" + "@opentelemetry/sdk-trace-base": "npm:^2.0.1" + "@opentelemetry/semantic-conventions": "npm:^1.34.0" "@whatwg-node/promise-helpers": "npm:1.3.0" "@whatwg-node/server": "npm:^0.10.0" graphql: "npm:^16.9.0" graphql-yoga: "npm:^5.15.1" pkgroll: "npm:2.14.3" + rimraf: "npm:^6.0.1" + rollup: "npm:^4.41.1" tslib: "npm:^2.8.1" + tsx: "npm:^4.19.4" peerDependencies: graphql: ^15.9.0 || ^16.9.0 languageName: unknown @@ -6738,12 +6750,12 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api-logs@npm:0.200.0": - version: 0.200.0 - resolution: "@opentelemetry/api-logs@npm:0.200.0" +"@opentelemetry/api-logs@npm:0.202.0, @opentelemetry/api-logs@npm:^0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/api-logs@npm:0.202.0" dependencies: "@opentelemetry/api": "npm:^1.3.0" - checksum: 10c0/c6bc3cfba35c69411f294519d93d0ff9f603517030d1162839ee42ac22ed1b0235edaf71d00cabc40125f813d8b4dc830d14315afcebcef138c1df560eaa5c91 + checksum: 10c0/2b6fd961c9303c5581367e7bef16a0cc7e7fc9a22ffae417ac7812151238760a9c0db20aad2c222c492cd8afc8353a611076bcac9272168d04b64e6386e71a66 languageName: node linkType: hard @@ -6754,224 +6766,1108 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/context-async-hooks@npm:^2.0.0": - version: 2.0.0 - resolution: "@opentelemetry/context-async-hooks@npm:2.0.0" +"@opentelemetry/auto-instrumentations-node@npm:^0.60.1": + version: 0.60.1 + resolution: "@opentelemetry/auto-instrumentations-node@npm:0.60.1" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/instrumentation-amqplib": "npm:^0.49.0" + "@opentelemetry/instrumentation-aws-lambda": "npm:^0.53.0" + "@opentelemetry/instrumentation-aws-sdk": "npm:^0.54.0" + "@opentelemetry/instrumentation-bunyan": "npm:^0.48.0" + "@opentelemetry/instrumentation-cassandra-driver": "npm:^0.48.0" + "@opentelemetry/instrumentation-connect": "npm:^0.46.0" + "@opentelemetry/instrumentation-cucumber": "npm:^0.17.0" + "@opentelemetry/instrumentation-dataloader": "npm:^0.19.0" + "@opentelemetry/instrumentation-dns": "npm:^0.46.0" + "@opentelemetry/instrumentation-express": "npm:^0.51.0" + "@opentelemetry/instrumentation-fastify": "npm:^0.47.0" + "@opentelemetry/instrumentation-fs": "npm:^0.22.0" + "@opentelemetry/instrumentation-generic-pool": "npm:^0.46.0" + "@opentelemetry/instrumentation-graphql": "npm:^0.50.0" + "@opentelemetry/instrumentation-grpc": "npm:^0.202.0" + "@opentelemetry/instrumentation-hapi": "npm:^0.49.0" + "@opentelemetry/instrumentation-http": "npm:^0.202.0" + "@opentelemetry/instrumentation-ioredis": "npm:^0.50.0" + "@opentelemetry/instrumentation-kafkajs": "npm:^0.11.0" + "@opentelemetry/instrumentation-knex": "npm:^0.47.0" + "@opentelemetry/instrumentation-koa": "npm:^0.50.1" + "@opentelemetry/instrumentation-lru-memoizer": "npm:^0.47.0" + "@opentelemetry/instrumentation-memcached": "npm:^0.46.0" + "@opentelemetry/instrumentation-mongodb": "npm:^0.55.1" + "@opentelemetry/instrumentation-mongoose": "npm:^0.49.0" + "@opentelemetry/instrumentation-mysql": "npm:^0.48.0" + "@opentelemetry/instrumentation-mysql2": "npm:^0.48.0" + "@opentelemetry/instrumentation-nestjs-core": "npm:^0.48.0" + "@opentelemetry/instrumentation-net": "npm:^0.46.1" + "@opentelemetry/instrumentation-oracledb": "npm:^0.28.0" + "@opentelemetry/instrumentation-pg": "npm:^0.54.0" + "@opentelemetry/instrumentation-pino": "npm:^0.49.0" + "@opentelemetry/instrumentation-redis": "npm:^0.49.1" + "@opentelemetry/instrumentation-redis-4": "npm:^0.49.0" + "@opentelemetry/instrumentation-restify": "npm:^0.48.1" + "@opentelemetry/instrumentation-router": "npm:^0.47.0" + "@opentelemetry/instrumentation-runtime-node": "npm:^0.16.0" + "@opentelemetry/instrumentation-socket.io": "npm:^0.49.0" + "@opentelemetry/instrumentation-tedious": "npm:^0.21.0" + "@opentelemetry/instrumentation-undici": "npm:^0.13.1" + "@opentelemetry/instrumentation-winston": "npm:^0.47.0" + "@opentelemetry/resource-detector-alibaba-cloud": "npm:^0.31.2" + "@opentelemetry/resource-detector-aws": "npm:^2.2.0" + "@opentelemetry/resource-detector-azure": "npm:^0.9.0" + "@opentelemetry/resource-detector-container": "npm:^0.7.2" + "@opentelemetry/resource-detector-gcp": "npm:^0.36.0" + "@opentelemetry/resources": "npm:^2.0.0" + "@opentelemetry/sdk-node": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.4.1 + "@opentelemetry/core": ^2.0.0 + checksum: 10c0/5417d264f2f4ff4eac25010e5a66fd1ee8cbef03da938352b5031f1fd2e2ab0390cbf237c19cd679efdf2e182f94234451bae8150eb316b965ec083de460d0f5 + languageName: node + linkType: hard + +"@opentelemetry/context-async-hooks@npm:2.0.1, @opentelemetry/context-async-hooks@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/context-async-hooks@npm:2.0.1" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/65c7c0cd3daa382143dc90772a07fb8a9baf12ffe42bd9506fd6aabdcad9e3e4d967b82de9e4c2a1cee401514c9aab3c603bc8bbcdfb1f9d3614ba3aa571f1b1 + checksum: 10c0/75b06f33b9c3dccb8d9802c14badcc3b9a497b21c77bf0344fc6231041ea1bf6a2bcc195cc27fafd5914bffcc7fa160b9f4480c06a37e86e876c98bf1a533a0d languageName: node linkType: hard -"@opentelemetry/core@npm:2.0.0, @opentelemetry/core@npm:^2.0.0": - version: 2.0.0 - resolution: "@opentelemetry/core@npm:2.0.0" +"@opentelemetry/context-zone-peer-dep@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/context-zone-peer-dep@npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + zone.js: ^0.10.2 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0 + checksum: 10c0/3a0f432d0a6982a29932ee048458e9a374c6475cbaebb8763c20d07c786367b5912c5a68a569a1db38d9c777b8feeb675f8764408f9e0b855020722e0be2b078 + languageName: node + linkType: hard + +"@opentelemetry/context-zone@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/context-zone@npm:2.0.1" + dependencies: + "@opentelemetry/context-zone-peer-dep": "npm:2.0.1" + zone.js: "npm:^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0" + checksum: 10c0/fc67bac8475518c2ab2bb53b74825e9946cbd1792e05d2ecd5be508abe20647b69282d7169e7a095b63e9dae7955c2244392a864f5f1c39953823fb423b7b5a6 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:2.0.1, @opentelemetry/core@npm:^2.0.0, @opentelemetry/core@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/core@npm:2.0.1" dependencies: "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/d2cc6d8a955305b9de15cc36135e5d5b0f0405fead8bbd4de51433f2d05369af0a3bcb2c6fe7fe6d9e61b0db782511bcadc5d93ed906027d4c00d5c2e3575a24 + checksum: 10c0/d587b1289559757d80da98039f9f57612f84f72ec608cd665dc467c7c6c5ce3a987dfcc2c63b521c7c86ce984a2552b3ead15a0dc458de1cf6bde5cdfe4ca9d8 languageName: node linkType: hard -"@opentelemetry/exporter-trace-otlp-grpc@npm:^0.200.0": - version: 0.200.0 - resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.200.0" +"@opentelemetry/exporter-jaeger@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/exporter-jaeger@npm:2.0.1" + dependencies: + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + jaeger-client: "npm:^3.15.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/5120cd843865fe2f2d10e782b0df5f08e7d14f747c943920405a9237c706597863c66fd0a6ca1b83790ebdd2fd0bac6e009ce0f56102cc84eebd0543ee88cdb6 + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-grpc@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-logs-otlp-grpc@npm:0.202.0" dependencies: "@grpc/grpc-js": "npm:^1.7.1" - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/otlp-exporter-base": "npm:0.200.0" - "@opentelemetry/otlp-grpc-exporter-base": "npm:0.200.0" - "@opentelemetry/otlp-transformer": "npm:0.200.0" - "@opentelemetry/resources": "npm:2.0.0" - "@opentelemetry/sdk-trace-base": "npm:2.0.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/sdk-logs": "npm:0.202.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/e38c1ff8c98ecb56f81b4400f6baca5763dbde6f717da4b1467fa47cf6681e2586a7f46f1a428b7a59013a8f382bc7bd75ecc7abb1b27f805ce18c0bdc435c0c + checksum: 10c0/b6a19d50807965f4767d777e82ef8ec8cbb910c18a5435918eabc7bee6c56c4363388a79820dac302217e5d0c59ba4317b59b6a2297e94248d8caca56f447398 languageName: node linkType: hard -"@opentelemetry/exporter-trace-otlp-http@npm:^0.200.0": - version: 0.200.0 - resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.200.0" +"@opentelemetry/exporter-logs-otlp-http@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-logs-otlp-http@npm:0.202.0" dependencies: - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/otlp-exporter-base": "npm:0.200.0" - "@opentelemetry/otlp-transformer": "npm:0.200.0" - "@opentelemetry/resources": "npm:2.0.0" - "@opentelemetry/sdk-trace-base": "npm:2.0.0" + "@opentelemetry/api-logs": "npm:0.202.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/sdk-logs": "npm:0.202.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/9cc914570cca1bd411e467f0a03146d3397c7940c8f9f5f876a28f9c8345f1b0d433651df8c8a0006d13c8b62f0d04ef44a7f7419d2765fcd061f1cbd585b6c5 + checksum: 10c0/4e891dc369de7f8d04b1a804efabf96871c7a7bebb03a1856628c786677716a8ebcb6515e0971058d84965130e16a5202e9ed2512e5ff4f114d92d18d93ef2fd languageName: node linkType: hard -"@opentelemetry/exporter-zipkin@npm:^2.0.0": - version: 2.0.0 - resolution: "@opentelemetry/exporter-zipkin@npm:2.0.0" +"@opentelemetry/exporter-logs-otlp-proto@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-logs-otlp-proto@npm:0.202.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.202.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-logs": "npm:0.202.0" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/cc1724d344dfce533e99286cab5345545a11b7519e73a6d78f6cb5a782831da194140b3dc8e8cb4f8d372d2f7df531329223ed7f35169ded76b08d72f8ec045c + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-grpc@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-metrics-otlp-grpc@npm:0.202.0" + dependencies: + "@grpc/grpc-js": "npm:^1.7.1" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.202.0" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-metrics": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/a310f4e72b0d6535cc07bafc6286489b61e8d1b919e6484d704aef01969378e42cac96e7b3cc9aabfe5e08d9303dca76d221624f9002f9614d3871f3effbe90d + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-http@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-metrics-otlp-http@npm:0.202.0" + dependencies: + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-metrics": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/a1f4d2284d2fc72205a24b0d4a5720788fe1df7b4af56c4fc222eccd36cb3ebd50aadbc85c52a21708dd9ce8cd7b506fcd2f22434f653d68927bc7ce7a4b96c9 + languageName: node + linkType: hard + +"@opentelemetry/exporter-metrics-otlp-proto@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-metrics-otlp-proto@npm:0.202.0" + dependencies: + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.202.0" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-metrics": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/7be21fe5b1b6685caad5e1cd178ad9a30add2a90ed910c33e050b06285bc709f709c4b9db34ad842d2c6df9a68f9f48531a9d45b7982733d14b278b08daabf37 + languageName: node + linkType: hard + +"@opentelemetry/exporter-prometheus@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-prometheus@npm:0.202.0" + dependencies: + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-metrics": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/6115cb6ae9634294a4f4422d92710dd01d9e049da5a0587fa5d42b5d49991111c0a95075ec8804a7aa7dd42e2c2580e425d63bb31a952af4478175b8b4e92576 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-grpc@npm:0.202.0, @opentelemetry/exporter-trace-otlp-grpc@npm:^0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.202.0" + dependencies: + "@grpc/grpc-js": "npm:^1.7.1" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-grpc-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/b997c0ee2704ffddffd0a2f9204ea9f4963cecd8d39027082e0c105b6fc8b8e3679bbff835f81f4b5997b0846e57ce4a6d2a3fb241b03a3a37a8c90a53e9440b + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-http@npm:0.202.0, @opentelemetry/exporter-trace-otlp-http@npm:^0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.202.0" + dependencies: + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/9cc7c2d65699f8634a0b39f0a9ea89ef4114562f57f0fb08a986cb92a2ba1fed9085ecabf3d3cafe95d311579a61fba4cf0a95cddc09df3990bc35cf5226098b + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-proto@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.202.0" dependencies: - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/resources": "npm:2.0.0" - "@opentelemetry/sdk-trace-base": "npm:2.0.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/c65405d18e6f04f48beac58c72a23eca47814c741ee8b997f2413adc8ee6c1fd76efe920349c0180cf4a0ee0f00599c6f217d364be19eef9d98ee84b7feb867e + languageName: node + linkType: hard + +"@opentelemetry/exporter-zipkin@npm:2.0.1, @opentelemetry/exporter-zipkin@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/exporter-zipkin@npm:2.0.1" + dependencies: + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ^1.0.0 - checksum: 10c0/48505b1e5d5ae84abf06101011cd0da7e9931210e34dd1439673d1a9389ebe956a6076c36313e0e0d5d82cbd3239242ace8fb8cc54c77716de112981f4eae4d9 + checksum: 10c0/10e0ad1dfb967c951d26bc64647e2f7d0705fdcf82449473308f277e1866552a07d7636bcf198e21662ada93df2366c4f24aec2d329d18e59f3d09ddcf65969d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-amqplib@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-amqplib@npm:0.49.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/5c60b11065709ee4b88d70c6934e12c4da5aa6a18001cd4134b69279509ba7bc9fd409ff9167104019b72761924da8ba8aade2c52e78ecc3a37cc1d2fdb48d25 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-aws-lambda@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-aws-lambda@npm:0.53.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/aws-lambda": "npm:8.10.147" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/57ba724a66fadbcd70095563cf1c4890fa2d29092b8b396bcd7d431b5b6c31075e077f4834c3a862b15a1d746b742f9503f786bff41363123bdd55b251084027 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-aws-sdk@npm:^0.54.0": + version: 0.54.0 + resolution: "@opentelemetry/instrumentation-aws-sdk@npm:0.54.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/propagation-utils": "npm:^0.31.2" + "@opentelemetry/semantic-conventions": "npm:^1.31.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/860ab7f74c7a5d87d8977d068ce6057624705f7f7bb0e62c2aa04319b58ed9850026cfec2a1f314eac3eba8575bb86a8800d819bac3fae7c31220444c0d1b0bd + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-bunyan@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-bunyan@npm:0.48.0" + dependencies: + "@opentelemetry/api-logs": "npm:^0.202.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@types/bunyan": "npm:1.8.11" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/f7e568dec0fda807e028c1a34f534dad12898b445226a7ac4bbb19eb8f5e3b92157a2a3eafec3df19066a11687f47c4521186b162975a45ab6c125f83e64ee85 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-cassandra-driver@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-cassandra-driver@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/d61d95d6c695a2ec39fcd3fcc1b8aa2a12524537c85b5d3d2dcbc2d9c16cac0a103772fa9a68f4c1fd4fe2c842b64ede86a72ae2643a127382e404ac235d807f + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-connect@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-connect@npm:0.46.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/connect": "npm:3.4.38" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/59c0dd3232664c2ab55fa4da6dd0c845c007d3afa8f0ad9acf4eb21c1a4be0d5f5bce0e245646cedc2c0874c9a19a3e67989d6d521889d6c103e902cb17ea390 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-cucumber@npm:^0.17.0": + version: 0.17.0 + resolution: "@opentelemetry/instrumentation-cucumber@npm:0.17.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/b066b511ba47ed678b2264ff7e9080fc1bff1cb6751fc1a7e25c5ad79f3f4876128b4f92e22874449fa77d3bc9b1b212a8c8725373bc213b0912a52392ab3c05 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dataloader@npm:^0.19.0": + version: 0.19.0 + resolution: "@opentelemetry/instrumentation-dataloader@npm:0.19.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/f2b1f9b7fcc24b1270580044c194355b89aeb16c5cc6ddae1d6087d35bc50496dfe9eeeac70d1668a5dd5f152217c70dc049d98a01607fdc5356696b6e3f832c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dns@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-dns@npm:0.46.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/212404c6f9951130abc7cb3a6d2557941f61c0e88627756e1f4fbc3fdb21394dacf6acefbef800c45693e0cc207cd3f4b6068ea3568de45405286ce3d3973414 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-express@npm:^0.51.0": + version: 0.51.0 + resolution: "@opentelemetry/instrumentation-express@npm:0.51.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/2befd056cf0f9b3c19d8a990eef74fb2e9f32c191a7d0cbd36b0ce6a1322faf2ff99fe7da94964ceecddd3653072e88902403097b6744e0a9589673c383d8b26 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fastify@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-fastify@npm:0.47.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/8b4d2d6fff7b1888933598efbb9e8fc4fcc8a9f6191493387975d7b1cf06254c680de28910ab10141ba07e183bb941a11c407fca02718e442d2c80fd05a772ce + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fs@npm:^0.22.0": + version: 0.22.0 + resolution: "@opentelemetry/instrumentation-fs@npm:0.22.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/ec97db2c182e2f205cf56f3e214fef291ad7e5ffea6f08ec38c0c68cffa4b8d9db886e299cb13c140381a5ee6d37497d45f875cbf424462fe8da3f581c6b2f90 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-generic-pool@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.46.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/cd60f28323d00f45727748f4052d69327d1b595d89a30c2fe001ba4b375d8cb63667ea48cbef0a3ec4dc67b20f82bb110bd0d98b7210e1cc95f9d22306ca591e + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-graphql@npm:^0.50.0": + version: 0.50.0 + resolution: "@opentelemetry/instrumentation-graphql@npm:0.50.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/3db096518d7b0a480a8bcfc6178247c1bee0ba7f22e1f083176ae2f50f0466311863e2a5cd8af32815da4da512170b51f3e3b41f0f70506868aa02288b8cc0db + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-grpc@npm:^0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/instrumentation-grpc@npm:0.202.0" + dependencies: + "@opentelemetry/instrumentation": "npm:0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/53461cb750b18469ed5c121d5093038550a84c35e4a56677b2da7ea513f52fe8cb0fe870e6cb1fd83d516384cd33bd60327318ae71922284d5dd72d9487fd889 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-hapi@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-hapi@npm:0.49.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/867de41fd1fb8bf2af1fd90e2ee105aa0da65db4ead02e21fb519b09e0218fa07c617245af538689abb742a091e4ca74aa65220e4e4a06e4bf72c00b1e70bdb0 languageName: node linkType: hard -"@opentelemetry/instrumentation@npm:^0.200.0": - version: 0.200.0 - resolution: "@opentelemetry/instrumentation@npm:0.200.0" +"@opentelemetry/instrumentation-http@npm:^0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/instrumentation-http@npm:0.202.0" dependencies: - "@opentelemetry/api-logs": "npm:0.200.0" - "@types/shimmer": "npm:^1.2.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/instrumentation": "npm:0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + forwarded-parse: "npm:2.1.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/ba221223573bdfa7011292cd373bbaf68e1236887510bb051a8a61d7e72c0aed95d59f0031169d539289032f9ad5f6e50a7e0e57236f66f10e9f1ce2f83020f3 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-ioredis@npm:^0.50.0": + version: 0.50.0 + resolution: "@opentelemetry/instrumentation-ioredis@npm:0.50.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/redis-common": "npm:^0.37.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/4400a774ea243ee5bdf9f04d892c9d8fa826bfa11fce360e2adac4683b46272bc17c2987521b928778d943f5617af915f5790281ecc0d94bdbf69146835e4978 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-kafkajs@npm:^0.11.0": + version: 0.11.0 + resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.11.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.30.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/d2fcce3ff69b22b000054f8bdd89cbf05bd212a4e3c41f88ae1cdc39c31499e044b43184697a993e28cbd0f70b41241e9619660b48415c984405e4639c53e641 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-knex@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-knex@npm:0.47.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/c031b3d18df48f103b706dd178b70cd20addd9d6b3c801fa7c0cfa216d82ccdfd3db009533734c356003f730207076755f8472fa43f27df0df6e99a244367418 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-koa@npm:^0.50.1": + version: 0.50.1 + resolution: "@opentelemetry/instrumentation-koa@npm:0.50.1" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/5c17e9f892d652f9d3b014c1b72dab9e4ed79c605c27284d7523d7f5fb328744baff6eefe9c39361cda351ac80ac32c3520faf18530c18bdf2b18d72f80cb490 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-lru-memoizer@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.47.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/785e957fdda1b4c754f2344557a7da2490a09520e17e739c2402c1a3d551e3715da76351035173f62362ff35dde5eab09b103508b049018ffb106460e0f37b63 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-memcached@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-memcached@npm:0.46.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/memcached": "npm:^2.2.6" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/4309cfcbfa83848cf203ea2eddcfea5ad85b4c4e33c9150e4ccb8f951b8f12f30032879ddd3474934ea772ddb3f31fa86f0c541afa47862a9dc4502cb631c723 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongodb@npm:^0.55.1": + version: 0.55.1 + resolution: "@opentelemetry/instrumentation-mongodb@npm:0.55.1" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/e5880c15518f9ffee86dc3051b09be08889c8b5e423e2e2bd2cc13e72921b1052356b35767926af5aedbc73ca93848ec5484e6998223afed514c95f2cf84860c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongoose@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-mongoose@npm:0.49.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/53164c59e51eba2340015e521c819e602e9ba0a87bb49b2ad2106ea3c3bce0b4a18e0bc124e4a942ce640a790e622e725e9a4dae3277cd9a2b465768ad2eeb89 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql2@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-mysql2@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@opentelemetry/sql-common": "npm:^0.41.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/0f68ff719695c7a2055b3419053309493a278b09e00709ed016920b1b99bc4f4991a62434643d93ad1da20c5c062c5e0d45c1e3a55e411ef106c43629ac3b275 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-mysql@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/mysql": "npm:2.15.26" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/b807d6f35fa9a1cb16e8fa1857d6a3946fb2453c091979ea5f7f98cc66602655d2c6f9cd59e004b38557f3c1de8d3660d2119547c3e022b9ed3147840f586149 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-nestjs-core@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.30.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/77f742ed1d3827e99608f9ad17409ad64f3e52b8b2903b2fcbc9e4c7ba61a76dfed2e6b53f842fa0e5373147a1d6e4f92d5708ba49bec31c3f9bc7bf76cd4d07 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-net@npm:^0.46.1": + version: 0.46.1 + resolution: "@opentelemetry/instrumentation-net@npm:0.46.1" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/1bb22530c8a01d572cc6a874f9f0bde3b93b2082d5900464ff01f15bbbf8031c42fdbba8a16068c408a31d56de9b160abe48ca9002b8a550f7f46ead892ac34d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-oracledb@npm:^0.28.0": + version: 0.28.0 + resolution: "@opentelemetry/instrumentation-oracledb@npm:0.28.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/oracledb": "npm:6.5.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/3eb4f369239919e1c93aadd7f4ed708425e9680cc6265c6f37a3f071ef9db74a9f11b85a6692d19e42a84cf65fde6638c72320f3332ef637d7315ba3591b6112 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pg@npm:^0.54.0": + version: 0.54.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.54.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@opentelemetry/sql-common": "npm:^0.41.0" + "@types/pg": "npm:8.15.1" + "@types/pg-pool": "npm:2.0.6" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/2fc36b58ecb507617deb96bb572e869f13020d90c7985fab696c76589999eb9b5ee4ec89d4cb2c66c8549ef13ead7659b3d37bfbb2da75926e4c81a7f4429a16 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pino@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-pino@npm:0.49.0" + dependencies: + "@opentelemetry/api-logs": "npm:^0.202.0" + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/9ee664bfd308ad62f139f5edd8c0a789de8061d23b5958f3e0e622f0ce87b3de129b56ba03c40436e82f89c3c65ff032be825b67cad173e6c257f77b5300d1e9 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-redis-4@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-redis-4@npm:0.49.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/redis-common": "npm:^0.37.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/f16e2d49a18d537c5b226151b6b1e46951c1433bf6b307ca7ae5ce09a25738af40448d2289125001c667d047f9e3ef5c7bf0b87e609a7af7e92e5eb42e729206 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-redis@npm:^0.49.1": + version: 0.49.1 + resolution: "@opentelemetry/instrumentation-redis@npm:0.49.1" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/redis-common": "npm:^0.37.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/97a463db65bcc37d12781e4691d0febee6e50f486b40a304ba4fc67ed8f92d3d5ef191766071142d789ff995e33de8a87f2214b162bdc98eee28e80bf8ed9257 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-restify@npm:^0.48.1": + version: 0.48.1 + resolution: "@opentelemetry/instrumentation-restify@npm:0.48.1" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/82861ecc695b0f2fa3e2544a2bfefe1808a24ac75e9d1631b12822266ed95193d06028a5134633e8cc13593025908cd5324d7d2ac636409f98338c382cef4dc4 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-router@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-router@npm:0.47.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/f3259d50d5acc029440ccc310a1a0f404e73fe0cbd0338c113e1140ec27197696e85dd1163da87f1451c2da010dbe43f43b9c86a11343c66dbfa464fe18bafb2 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-runtime-node@npm:^0.16.0": + version: 0.16.0 + resolution: "@opentelemetry/instrumentation-runtime-node@npm:0.16.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/1ad58386693f363c2807daf074188f3ce36e37babb657477a667af2a4e8552e9965e0d78fc1e5435acd7d0e2be6c12994fa74ea0462af300b7b51832796155b3 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-socket.io@npm:^0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-socket.io@npm:0.49.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/527491f9c971c7aa3ce078cc10337c03d651539832d7f8cf9c3cae1ef57c46dc1827bd75857828ef2aecee8902f44eea09ae224f214c7557cc2b5fd175569dbe + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-tedious@npm:^0.21.0": + version: 0.21.0 + resolution: "@opentelemetry/instrumentation-tedious@npm:0.21.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.202.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/tedious": "npm:^4.0.14" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/727ce27d4a9db08eb17fc4de9fd1e1a57fcfdecee30e4132313c077e1ea68993048dee9c0c0dea031e68cf34778742232a0a809a6f79da0dc0bd14e36976ea0f + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-undici@npm:^0.13.1": + version: 0.13.1 + resolution: "@opentelemetry/instrumentation-undici@npm:0.13.1" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.7.0 + checksum: 10c0/9e02b509eb0654b0bbc68c4cf6f0e9503fa259104ea7f71e54446bc68e180a09783209871d771f393152671a9db4d2b85a7ed4996070c3897a00f36ea58b9bd4 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-winston@npm:^0.47.0": + version: 0.47.0 + resolution: "@opentelemetry/instrumentation-winston@npm:0.47.0" + dependencies: + "@opentelemetry/api-logs": "npm:^0.202.0" + "@opentelemetry/instrumentation": "npm:^0.202.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/55b7c78bd71e38dfccfe23976b855f0dcafba218958f987b087f576076e1966ae4df3be436de7818359987409b8ebee7fb7758a09ab0f0fdbd6ed563b2359aad + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.202.0, @opentelemetry/instrumentation@npm:^0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/instrumentation@npm:0.202.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.202.0" import-in-the-middle: "npm:^1.8.1" require-in-the-middle: "npm:^7.1.1" - shimmer: "npm:^1.2.1" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/b7e6e0382231e7d0b113a2916511f5da24f80795e6904e32c2386a1e0856a0ad8592fb46bf8c3846447396a51aeed8c1664572af8728323a3266aecc3a33edd8 + checksum: 10c0/3edac99d3093841bcd6008c19353f989042231485bcfe93c069e6ac41f35ab11800998275c0e3a85873656a21af982b8fd8721da974288a4ac653ecae8407641 languageName: node linkType: hard -"@opentelemetry/otlp-exporter-base@npm:0.200.0": - version: 0.200.0 - resolution: "@opentelemetry/otlp-exporter-base@npm:0.200.0" +"@opentelemetry/otlp-exporter-base@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.202.0" dependencies: - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/otlp-transformer": "npm:0.200.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-transformer": "npm:0.202.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/3283c12bffc3156a41d9c16c097966e8418781a1d779250334f3d5b4f864be1aeac69fecfdf489abc95578dc36098dc0e026e5a48eb19ee170d72ef89b94f0e9 + checksum: 10c0/800047f125988a55da6e7cb732a5a000e39fa707f4f40e86976a50b72e93ccee9cb6d75a62ea9ca4e494233fc21812fb5cffd0de581fe9df478ea68f005230ca languageName: node linkType: hard -"@opentelemetry/otlp-exporter-base@patch:@opentelemetry/otlp-exporter-base@npm%3A0.200.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch": - version: 0.200.0 - resolution: "@opentelemetry/otlp-exporter-base@patch:@opentelemetry/otlp-exporter-base@npm%3A0.200.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.200.0-6fb25211c7.patch::version=0.200.0&hash=9541a9" +"@opentelemetry/otlp-exporter-base@patch:@opentelemetry/otlp-exporter-base@npm%3A0.202.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.202.0-f6f29c2eeb.patch": + version: 0.202.0 + resolution: "@opentelemetry/otlp-exporter-base@patch:@opentelemetry/otlp-exporter-base@npm%3A0.202.0#~/.yarn/patches/@opentelemetry-otlp-exporter-base-npm-0.202.0-f6f29c2eeb.patch::version=0.202.0&hash=e59ded" dependencies: - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/otlp-transformer": "npm:0.200.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-transformer": "npm:0.202.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/5c18a4c3b33dfdac62175e06004b8a72138ea8ed6f8c987959795d58f68f7eb2eb50e484b399bcd321914a5613fbefe7d97c2ac811c193f519955acf2cf4fa47 + checksum: 10c0/72130f5a45d0a0c9d3b1b0f1943827672519cfdbf354076bda9fdd92ed808c94c9dae5a73fcf9e881c5c833a92cbcad1ce63063e1df9b09a90943951b7d253de languageName: node linkType: hard -"@opentelemetry/otlp-grpc-exporter-base@npm:0.200.0": - version: 0.200.0 - resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.200.0" +"@opentelemetry/otlp-grpc-exporter-base@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.202.0" dependencies: "@grpc/grpc-js": "npm:^1.7.1" - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/otlp-exporter-base": "npm:0.200.0" - "@opentelemetry/otlp-transformer": "npm:0.200.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/otlp-exporter-base": "npm:0.202.0" + "@opentelemetry/otlp-transformer": "npm:0.202.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/257efcd22f98a2f9189e37aad65c33a00b4c38e75bd3c815a4420a6f5515bc85a7002a7594c0a7d4985c4cf4af22471e28e8be8cdb47acfe7a2e28f0cc1b2fad + checksum: 10c0/f04e0a5d3935f4aaafceae5795dd7e9ba3e5df3f327b76d483c7855f68ae675f4455e90bae47b895bc58b840684e130220ddd3475fb78b4ec80ef45cb7b70311 languageName: node linkType: hard -"@opentelemetry/otlp-transformer@npm:0.200.0": - version: 0.200.0 - resolution: "@opentelemetry/otlp-transformer@npm:0.200.0" +"@opentelemetry/otlp-transformer@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/otlp-transformer@npm:0.202.0" dependencies: - "@opentelemetry/api-logs": "npm:0.200.0" - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/resources": "npm:2.0.0" - "@opentelemetry/sdk-logs": "npm:0.200.0" - "@opentelemetry/sdk-metrics": "npm:2.0.0" - "@opentelemetry/sdk-trace-base": "npm:2.0.0" + "@opentelemetry/api-logs": "npm:0.202.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-logs": "npm:0.202.0" + "@opentelemetry/sdk-metrics": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" protobufjs: "npm:^7.3.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/4f5383fad48c62e17824df91f6944b0376cb17f7b132b11d62fa5cf46747f224c980960209c85669b6e341a131f94586c6ad52bc1a6d2fb8d5295e23b460600c + checksum: 10c0/33cd518ba39904d9a6baf2486efc61f979d8e27a2f0418b6f908f54c9b93412dac1bca1571e1c7f8ec8a08c3c74ab5bc11de8aa74c1a99f80dcab4ef5c7b28c8 languageName: node linkType: hard -"@opentelemetry/resources@npm:2.0.0, @opentelemetry/resources@npm:^2.0.0": - version: 2.0.0 - resolution: "@opentelemetry/resources@npm:2.0.0" +"@opentelemetry/propagation-utils@npm:^0.31.2": + version: 0.31.2 + resolution: "@opentelemetry/propagation-utils@npm:0.31.2" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/c184fdb11199759575c9afff4babeabf36de4be4748cf8649828aefdfa4de6a8df11c302605896005c34130b2272c233e58e176ff2bf63db1cb5482e4f881b12 + languageName: node + linkType: hard + +"@opentelemetry/propagator-b3@npm:2.0.1, @opentelemetry/propagator-b3@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/propagator-b3@npm:2.0.1" dependencies: - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/semantic-conventions": "npm:^1.29.0" + "@opentelemetry/core": "npm:2.0.1" peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 10c0/2f331ff8268ef7168e8f24312fd7505900693c0ea302f6025937e94c157b8173ee54f5d5a737c06b956da721aa63443ac520f530cade880ef3cd40a2a25c702c + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/79dbfaaa867f4f71a22ab640848f797ef9789fd94fc824ca4e38f298968a3f559a895fc228a17f09b1e06ec88cbf0b1f3cadc480ea76848504c7364693fd30ca languageName: node linkType: hard -"@opentelemetry/resources@patch:@opentelemetry/resources@npm%3A2.0.0#~/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch": - version: 2.0.0 - resolution: "@opentelemetry/resources@patch:@opentelemetry/resources@npm%3A2.0.0#~/.yarn/patches/@opentelemetry-resources-npm-2.0.0-f20376a5f9.patch::version=2.0.0&hash=81587a" +"@opentelemetry/propagator-jaeger@npm:2.0.1, @opentelemetry/propagator-jaeger@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/propagator-jaeger@npm:2.0.1" + dependencies: + "@opentelemetry/core": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10c0/e21df109b831a7efffe54459bb5da35be05eeb72581017f0ce40dee2ab98b3e8063602894a477f6c593ad1bd3a1ead36adfceee21eb2472ca88050d49f056154 + languageName: node + linkType: hard + +"@opentelemetry/redis-common@npm:^0.37.0": + version: 0.37.0 + resolution: "@opentelemetry/redis-common@npm:0.37.0" + checksum: 10c0/8e754164c800c509504f07bb38b8bbf2890eafde65bb5a5ffb8227e1b234cf84bc294671416f27504d90bfd22f334f671db2d7cd146f852f0b6dc7c8d36798c0 + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-alibaba-cloud@npm:^0.31.2": + version: 0.31.2 + resolution: "@opentelemetry/resource-detector-alibaba-cloud@npm:0.31.2" dependencies: - "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/resources": "npm:^2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/46974743ec5f731057b5e524ce01fcbaaa34775ece76bb7eedca79ce7dae5a87737208f58712bca2cf67772640a711b80a13a08bf186cb38baf61c9a3b6cf9c9 + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-aws@npm:^2.2.0": + version: 2.2.0 + resolution: "@opentelemetry/resource-detector-aws@npm:2.2.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/resources": "npm:^2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/67a21804281b3106a75e029aa1016d8db993eeb857024b1a65841d2c6ae8692b733fe6a75f16131fe5d75b08a517ba5eac0f07d026c068b09ec1c29bbd9c36b7 + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-azure@npm:^0.9.0": + version: 0.9.0 + resolution: "@opentelemetry/resource-detector-azure@npm:0.9.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/resources": "npm:^2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/3966148393536e5af66a58f0fde4d6ae8cb64bb013ed18eaad73b68845e20e0cfbe812cf2b9ac7d01d5206857ba869fca54abd1e6f86745a3951038addd3a928 + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-container@npm:^0.7.2": + version: 0.7.2 + resolution: "@opentelemetry/resource-detector-container@npm:0.7.2" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/resources": "npm:^2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/298d2c3955f7f6f604ccfd1ad34fde2c4f50b1cdf1e916033c114c8001c02bc3746791395c6c1aedc024aec45973b0ff95518e743ff041af21d1b0c81d3ffc8a + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-gcp@npm:^0.36.0": + version: 0.36.0 + resolution: "@opentelemetry/resource-detector-gcp@npm:0.36.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/resources": "npm:^2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + gcp-metadata: "npm:^6.0.0" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/57c9c1fea896667253ef95034f25a60afd59afa3d376137288b2df70b23e68ef97cb4bd347fff79710226e1b40fee0a3d8c8c96dc58bd73c5c60c2d43d7462fc + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:2.0.1, @opentelemetry/resources@npm:^2.0.0, @opentelemetry/resources@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/resources@npm:2.0.1" + dependencies: + "@opentelemetry/core": "npm:2.0.1" "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 10c0/ba0e2ef51bcfeab51c9ff85bfc2a7d8a1c1c284de9af9e7ef549cc95c2b16e7b3c21c529bc7537f95ec64b822244c7975bcd0dba4b748af425a7b3530eeb3e0d + checksum: 10c0/96532b7553b26607a7a892d72f6b03ad12bd542dc23c95135a8ae40362da9c883c21a4cff3d2296d9e0e9bd899a5977e325ed52d83142621a8ffe81d08d99341 languageName: node linkType: hard -"@opentelemetry/sdk-logs@npm:0.200.0": - version: 0.200.0 - resolution: "@opentelemetry/sdk-logs@npm:0.200.0" +"@opentelemetry/sampler-jaeger-remote@npm:^0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/sampler-jaeger-remote@npm:0.202.0" dependencies: - "@opentelemetry/api-logs": "npm:0.200.0" - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/dc1fa837c989dedeb2ff2ffc9b123ee6d5be9afaf9276781decb3f4c66fb7c75aa9dbd19c23a3a6c2ebbf684da1152a5edb8241ec08536ab6551ff08c97b4b27 + languageName: node + linkType: hard + +"@opentelemetry/sdk-logs@npm:0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/sdk-logs@npm:0.202.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.202.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/resources": "npm:2.0.1" peerDependencies: "@opentelemetry/api": ">=1.4.0 <1.10.0" - checksum: 10c0/031dc40dd012fad102e5c8c0c9bdbbce051dbc7fcc2e05e003f959aeb34d252dc3595b353ea2a9f900ff40f45d19cb4c8f7ab95a9faa01391f6b415c7780c786 + checksum: 10c0/02659eb5da445f7740eafd79dfebefd38a4265751b7b9cb78c7231dcb2e3b2b9d073dff16abbb0da7cff0837be880dc5b581118601c7630f976a4ccf9db62ab2 languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:2.0.0": - version: 2.0.0 - resolution: "@opentelemetry/sdk-metrics@npm:2.0.0" +"@opentelemetry/sdk-metrics@npm:2.0.1, @opentelemetry/sdk-metrics@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/sdk-metrics@npm:2.0.1" dependencies: - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/resources": "npm:2.0.1" peerDependencies: "@opentelemetry/api": ">=1.9.0 <1.10.0" - checksum: 10c0/9a3c87738671f29a496a39d65b3ab0829b52d0f31c0be662ea575a8f77bc5444044fd01513c891abdff6bf6344a08730e18f79253a85e68962669f3e1fa12e72 + checksum: 10c0/fcf7ae23d459e5da7cb6fe150064b6dc4e11e47925b08980c3b357bd5534ad388898bbacd0ff8befef6801f43b35142dc7123f028ffde2d0fe2bd72177d07639 + languageName: node + linkType: hard + +"@opentelemetry/sdk-node@npm:^0.202.0": + version: 0.202.0 + resolution: "@opentelemetry/sdk-node@npm:0.202.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.202.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/exporter-logs-otlp-grpc": "npm:0.202.0" + "@opentelemetry/exporter-logs-otlp-http": "npm:0.202.0" + "@opentelemetry/exporter-logs-otlp-proto": "npm:0.202.0" + "@opentelemetry/exporter-metrics-otlp-grpc": "npm:0.202.0" + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.202.0" + "@opentelemetry/exporter-metrics-otlp-proto": "npm:0.202.0" + "@opentelemetry/exporter-prometheus": "npm:0.202.0" + "@opentelemetry/exporter-trace-otlp-grpc": "npm:0.202.0" + "@opentelemetry/exporter-trace-otlp-http": "npm:0.202.0" + "@opentelemetry/exporter-trace-otlp-proto": "npm:0.202.0" + "@opentelemetry/exporter-zipkin": "npm:2.0.1" + "@opentelemetry/instrumentation": "npm:0.202.0" + "@opentelemetry/propagator-b3": "npm:2.0.1" + "@opentelemetry/propagator-jaeger": "npm:2.0.1" + "@opentelemetry/resources": "npm:2.0.1" + "@opentelemetry/sdk-logs": "npm:0.202.0" + "@opentelemetry/sdk-metrics": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" + "@opentelemetry/sdk-trace-node": "npm:2.0.1" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10c0/8df1556294a0a23ec1608f8eb51837820f86ec09e70e3df656fa5e7a176d736c0b13dce14f990ac7037cb14a90012eb3bdb85c54001a905d40368201ab7813b1 languageName: node linkType: hard -"@opentelemetry/sdk-trace-base@npm:2.0.0, @opentelemetry/sdk-trace-base@npm:^2.0.0": - version: 2.0.0 - resolution: "@opentelemetry/sdk-trace-base@npm:2.0.0" +"@opentelemetry/sdk-trace-base@npm:2.0.1, @opentelemetry/sdk-trace-base@npm:^2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/sdk-trace-base@npm:2.0.1" dependencies: - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/resources": "npm:2.0.1" "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 10c0/c63cc052741e4cc01d084c883e24a1c0792f081a242e14e5cf526d5a3d96bac5974006fa0d8f902bd04f34ed9ce95a0d0f01b7fdb37fcc813cea9f818f2b8f43 + checksum: 10c0/4e3c733296012b758d007e9c0d8a5b175edbe9a680c73ec75303476e7982b73ad4209f1a2791c1a94c428e5a53eba6c2a72faa430c70336005aa58744d6cb37b languageName: node linkType: hard -"@opentelemetry/sdk-trace-web@npm:^2.0.0": - version: 2.0.0 - resolution: "@opentelemetry/sdk-trace-web@npm:2.0.0" +"@opentelemetry/sdk-trace-node@npm:2.0.1": + version: 2.0.1 + resolution: "@opentelemetry/sdk-trace-node@npm:2.0.1" dependencies: - "@opentelemetry/core": "npm:2.0.0" - "@opentelemetry/sdk-trace-base": "npm:2.0.0" - "@opentelemetry/semantic-conventions": "npm:^1.29.0" + "@opentelemetry/context-async-hooks": "npm:2.0.1" + "@opentelemetry/core": "npm:2.0.1" + "@opentelemetry/sdk-trace-base": "npm:2.0.1" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/72af264a404a8cc6ba35235434f519bcb8825e2e9163e0ebe554074cbe51f543fbc4c5cc55b21dce221647af0ee6a0acab0442dc3d6ca1c32ff43f347ad95ad8 + checksum: 10c0/b237efc219dc10c33746c05461c8c8741edbe7558eaf7f2dab01a3e75af4788bfd0633a049cd5dc7ecf015a2de7aa948c3989c0131d1f140109fb5e7b0313d7a languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:^1.28.0, @opentelemetry/semantic-conventions@npm:^1.29.0": +"@opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.30.0, @opentelemetry/semantic-conventions@npm:^1.31.0, @opentelemetry/semantic-conventions@npm:^1.33.1, @opentelemetry/semantic-conventions@npm:^1.34.0": + version: 1.34.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.34.0" + checksum: 10c0/a51a32a5cf5c803bd2125a680d0abacbff632f3b255d0fe52379dac191114a0e8d72a34f9c46c5483ccfe91c4061c309f3cf61a19d11347e2a69779e82cfefd0 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:^1.29.0": version: 1.30.0 resolution: "@opentelemetry/semantic-conventions@npm:1.30.0" checksum: 10c0/0bf99552e3b4b7e8b7eb504b678d52f59c6f259df88e740a2011a0d858e523d36fee86047ae1b7f45849c77f00f970c3059ba58e0a06a7d47d6f01dbe8c455bd languageName: node linkType: hard +"@opentelemetry/sql-common@npm:^0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/sql-common@npm:0.41.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: 10c0/3611fa2766be809d3f19f1c032373349962c3203cbc77839ea59d78a4ce2bf6954da9b163efdde386f3f4a8ec77c50c985f9e5b8b3df6e7fccd2990cf861bca4 + languageName: node + linkType: hard + "@oven/bun-darwin-aarch64@npm:1.2.18": version: 1.2.18 resolution: "@oven/bun-darwin-aarch64@npm:1.2.18" @@ -7278,9 +8174,9 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-node-resolve@npm:^15.2.3": - version: 15.3.1 - resolution: "@rollup/plugin-node-resolve@npm:15.3.1" +"@rollup/plugin-node-resolve@npm:16.0.1": + version: 16.0.1 + resolution: "@rollup/plugin-node-resolve@npm:16.0.1" dependencies: "@rollup/pluginutils": "npm:^5.0.1" "@types/resolve": "npm:1.20.2" @@ -7292,13 +8188,13 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 10c0/ecf3abe890fc98ad665fdbfb1ea245253e0d1f2bc6d9f4e8f496f212c76a2ce7cd4b9bc0abd21e6bcaa16f72d1c67cc6b322ea12a6ec68e8a8834df8242a5ecd + checksum: 10c0/54d33282321492fafec29b49c66dd1efd90c72a24f9d1569dcb57a72ab8de8a782810f39fdb917b96ec6a598c18f3416588b419bf7af331793a010de1fe28c60 languageName: node linkType: hard -"@rollup/plugin-node-resolve@npm:^16.0.0": +"@rollup/plugin-node-resolve@patch:@rollup/plugin-node-resolve@npm%3A16.0.1#~/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch": version: 16.0.1 - resolution: "@rollup/plugin-node-resolve@npm:16.0.1" + resolution: "@rollup/plugin-node-resolve@patch:@rollup/plugin-node-resolve@npm%3A16.0.1#~/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch::version=16.0.1&hash=c5de40" dependencies: "@rollup/pluginutils": "npm:^5.0.1" "@types/resolve": "npm:1.20.2" @@ -7310,7 +8206,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 10c0/54d33282321492fafec29b49c66dd1efd90c72a24f9d1569dcb57a72ab8de8a782810f39fdb917b96ec6a598c18f3416588b419bf7af331793a010de1fe28c60 + checksum: 10c0/1baa7e86d03bdd55e2cc0109b103436a962262b71fc313181b1b0fd4a9318f3aeb77e329062f3353bc0214f9ca51d1bac6e45b5678041bd1279ee482a051fd21 languageName: node linkType: hard @@ -7360,9 +8256,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.41.0" +"@rollup/rollup-android-arm-eabi@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.41.1" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -7374,9 +8270,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-android-arm64@npm:4.41.0" +"@rollup/rollup-android-arm64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-android-arm64@npm:4.41.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -7388,9 +8284,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.41.0" +"@rollup/rollup-darwin-arm64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.41.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -7402,9 +8298,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.41.0" +"@rollup/rollup-darwin-x64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.41.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -7416,9 +8312,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.41.0" +"@rollup/rollup-freebsd-arm64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.41.1" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -7430,9 +8326,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.41.0" +"@rollup/rollup-freebsd-x64@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.41.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -7444,9 +8340,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.41.0" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.41.1" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard @@ -7458,9 +8354,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.41.0" +"@rollup/rollup-linux-arm-musleabihf@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.41.1" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard @@ -7472,9 +8368,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.41.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.41.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -7486,9 +8382,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.41.0" +"@rollup/rollup-linux-arm64-musl@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.41.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard @@ -7500,9 +8396,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.41.0" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.41.1" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard @@ -7514,9 +8410,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.41.0" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.41.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard @@ -7528,9 +8424,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.41.0" +"@rollup/rollup-linux-riscv64-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.41.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard @@ -7542,9 +8438,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-musl@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.41.0" +"@rollup/rollup-linux-riscv64-musl@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.41.1" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard @@ -7556,9 +8452,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.41.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.41.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard @@ -7570,9 +8466,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.41.0" +"@rollup/rollup-linux-x64-gnu@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.41.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -7584,9 +8480,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.41.0" +"@rollup/rollup-linux-x64-musl@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.41.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -7598,9 +8494,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.41.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.41.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -7612,9 +8508,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.41.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.41.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -7626,9 +8522,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.41.0": - version: 4.41.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.41.0" +"@rollup/rollup-win32-x64-msvc@npm:4.41.1": + version: 4.41.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.41.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -8383,6 +9279,13 @@ __metadata: languageName: node linkType: hard +"@types/aws-lambda@npm:8.10.147": + version: 8.10.147 + resolution: "@types/aws-lambda@npm:8.10.147" + checksum: 10c0/c77bcb18a935fb26f5b1164aaadf46b3d11d6c001a95c6e9f2ff72f7d9ed4e7f28075a3abf9f9585cc75510acbc29c7a6441e66727902eae1bd39ac8dc28351e + languageName: node + linkType: hard + "@types/aws4@npm:^1.11.6": version: 1.11.6 resolution: "@types/aws4@npm:1.11.6" @@ -8452,6 +9355,15 @@ __metadata: languageName: node linkType: hard +"@types/bunyan@npm:1.8.11": + version: 1.8.11 + resolution: "@types/bunyan@npm:1.8.11" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/07d762499307a1c3f04f56f2c62417b909f86f6090cee29b73a00dde323a4463cfd2e78888598cb1cd3b1eb88e6c47ef2a58e17f119dae27ff04cd361c0a1d4c + languageName: node + linkType: hard + "@types/cacheable-request@npm:^6.0.1": version: 6.0.3 resolution: "@types/cacheable-request@npm:6.0.3" @@ -8473,7 +9385,7 @@ __metadata: languageName: node linkType: hard -"@types/connect@npm:*": +"@types/connect@npm:*, @types/connect@npm:3.4.38": version: 3.4.38 resolution: "@types/connect@npm:3.4.38" dependencies: @@ -8720,6 +9632,15 @@ __metadata: languageName: node linkType: hard +"@types/memcached@npm:^2.2.6": + version: 2.2.10 + resolution: "@types/memcached@npm:2.2.10" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/0c5214a73c9abb3d1bbf91d2890d38476961ae8aa387f71235519be65a537c654ca0380a468cf3ab49d3b9409c441580d081f16f14ed6aea3339144aee0f16fb + languageName: node + linkType: hard + "@types/methods@npm:^1.1.4": version: 1.1.4 resolution: "@types/methods@npm:1.1.4" @@ -8741,6 +9662,15 @@ __metadata: languageName: node linkType: hard +"@types/mysql@npm:2.15.26": + version: 2.15.26 + resolution: "@types/mysql@npm:2.15.26" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/3cf279e7db05d56c0544532a4380b9079f579092379a04c8138bd5cf88dda5b31208ac2d23ce7dbf4e3a3f43aaeed44e72f9f19f726518f308efe95a7435619a + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.6.1, @types/node-fetch@npm:^2.6.2": version: 2.6.12 resolution: "@types/node-fetch@npm:2.6.12" @@ -8785,6 +9715,46 @@ __metadata: languageName: node linkType: hard +"@types/oracledb@npm:6.5.2": + version: 6.5.2 + resolution: "@types/oracledb@npm:6.5.2" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/16e6d2e4247222dddf7be01273946b7f6a686327ce440be861671a2a0b98fe1a0d42df849d039a3f58aa1014f1c9d803f3c9793531a476077d762423ac911e65 + languageName: node + linkType: hard + +"@types/pg-pool@npm:2.0.6": + version: 2.0.6 + resolution: "@types/pg-pool@npm:2.0.6" + dependencies: + "@types/pg": "npm:*" + checksum: 10c0/41965d4d0b677c54ce45d36add760e496d356b78019cb062d124af40287cf6b0fd4d86e3b0085f443856c185983a60c8b0795ff76d15683e2a93c62f5ac0125f + languageName: node + linkType: hard + +"@types/pg@npm:*": + version: 8.15.4 + resolution: "@types/pg@npm:8.15.4" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^2.2.0" + checksum: 10c0/7f9295cb2d934681bba84f7caad529c3b100d87e83ad0732c7fe496f4f79e42a795097321db54e010fcff22cb5e410cf683b4c9941907ee4564c822242816e91 + languageName: node + linkType: hard + +"@types/pg@npm:8.15.1": + version: 8.15.1 + resolution: "@types/pg@npm:8.15.1" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^4.0.1" + checksum: 10c0/68ab3b2ae56a9ef891fcefe814b4a4eb6da4f4f3860b56d2821de8fe024eb093895ffe152414c708d889f7110cd5b3839392d2955b07d38f111df8e6186c7e8c + languageName: node + linkType: hard + "@types/qs@npm:*": version: 6.9.18 resolution: "@types/qs@npm:6.9.18" @@ -8850,13 +9820,6 @@ __metadata: languageName: node linkType: hard -"@types/shimmer@npm:^1.2.0": - version: 1.2.0 - resolution: "@types/shimmer@npm:1.2.0" - checksum: 10c0/6f7bfe1b55601cfc3ae713fc74a03341f3834253b8b91cb2add926d5949e4a63f7e666f59c2a6e40a883a5f9e2f3e3af10f9d3aed9b60fced0bda87659e58d8d - languageName: node - linkType: hard - "@types/ssh2@npm:*": version: 1.15.5 resolution: "@types/ssh2@npm:1.15.5" @@ -8895,6 +9858,15 @@ __metadata: languageName: node linkType: hard +"@types/tedious@npm:^4.0.14": + version: 4.0.14 + resolution: "@types/tedious@npm:4.0.14" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/d2914f8e9b5b998e4275ec5f0130cba1c2fb47e75616b5c125a65ef6c1db2f1dc3f978c7900693856a15d72bbb4f4e94f805537a4ecb6dc126c64415d31c0590 + languageName: node + linkType: hard + "@types/treeify@npm:^1.0.0": version: 1.0.3 resolution: "@types/treeify@npm:1.0.3" @@ -10093,6 +11065,20 @@ __metadata: languageName: node linkType: hard +"ansi-color@npm:0.2.1": + version: 0.2.1 + resolution: "ansi-color@npm:0.2.1" + checksum: 10c0/0ccfb57aadd3a955d1bbdc8392fb24e7e13b247812955b0182a3bea3f733d757e49f0b8faa00a6d2c619613f2d2a3136096f91e1fb4d688c39cf24b4f776a0d3 + languageName: node + linkType: hard + +"ansi-color@patch:ansi-color@npm%3A0.2.1#~/.yarn/patches/ansi-color-npm-0.2.1-f7243d10a4.patch": + version: 0.2.1 + resolution: "ansi-color@patch:ansi-color@npm%3A0.2.1#~/.yarn/patches/ansi-color-npm-0.2.1-f7243d10a4.patch::version=0.2.1&hash=de9957" + checksum: 10c0/b23a96f3c448e8dc1db58d4a5c2f21608a39d3a886784642395496828ece114d54e5690320ef89b8faa0d9dc824c7dbd9f40beec958336e2aab6709c1c984388 + languageName: node + linkType: hard + "ansi-colors@npm:^4.1.1, ansi-colors@npm:^4.1.3": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" @@ -10690,6 +11676,13 @@ __metadata: languageName: node linkType: hard +"bignumber.js@npm:^9.0.0": + version: 9.3.0 + resolution: "bignumber.js@npm:9.3.0" + checksum: 10c0/f54a79cd6fc98552ac0510c1cd9381650870ae443bdb20ba9b98e3548188d941506ac3c22a9f9c69b2cc60da9be5700e87d3f54d2825310a8b2ae999dfd6d99d + languageName: node + linkType: hard + "bintrees@npm:1.0.2": version: 1.0.2 resolution: "bintrees@npm:1.0.2" @@ -10873,6 +11866,18 @@ __metadata: languageName: node linkType: hard +"bufrw@npm:^1.3.0": + version: 1.4.0 + resolution: "bufrw@npm:1.4.0" + dependencies: + ansi-color: "npm:^0.2.1" + error: "npm:^7.0.0" + hexer: "npm:^1.5.0" + xtend: "npm:^4.0.0" + checksum: 10c0/f4bfd7e13796f1f562753661be8b72c7eaac38e77b06edd5f238f8567d3d973c7f2686b1098bd5914fb88dc7141252d8361d0507e818af321fab13ef93ad3239 + languageName: node + linkType: hard + "buildcheck@npm:~0.0.6": version: 0.0.6 resolution: "buildcheck@npm:0.0.6" @@ -12446,6 +13451,25 @@ __metadata: languageName: node linkType: hard +"error@npm:7.0.2": + version: 7.0.2 + resolution: "error@npm:7.0.2" + dependencies: + string-template: "npm:~0.2.1" + xtend: "npm:~4.0.0" + checksum: 10c0/abee95f258f34490278bfb5f5852420e23f9d7dd7754215144391a731c2e7f68ccb5367497ca7cc20459d1eb7ae5d119d6c82f620a9340150034ddd2e3603178 + languageName: node + linkType: hard + +"error@npm:^7.0.0": + version: 7.2.1 + resolution: "error@npm:7.2.1" + dependencies: + string-template: "npm:~0.2.1" + checksum: 10c0/91ce301017292eab20b59e27a0bc322a8f45fcf48d992761530d20c5f9c5699a2ae1822fc94298d4815fd35c2595e89139a7c6fdd3bbe9e93871e3b412186567 + languageName: node + linkType: hard + "es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9": version: 1.23.9 resolution: "es-abstract@npm:1.23.9" @@ -13231,6 +14255,13 @@ __metadata: languageName: node linkType: hard +"extend@npm:^3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + "extendable-error@npm:^0.1.5": version: 0.1.7 resolution: "extendable-error@npm:0.1.7" @@ -13740,6 +14771,13 @@ __metadata: languageName: node linkType: hard +"forwarded-parse@npm:2.1.2": + version: 2.1.2 + resolution: "forwarded-parse@npm:2.1.2" + checksum: 10c0/0c6b4c631775f272b4475e935108635495e8a5b261d1b4a5caef31c47c5a0b04134adc564e655aadfef366a02647fa3ae90a1d3ac19929f3ade47f9bed53036a + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -13920,6 +14958,30 @@ __metadata: languageName: unknown linkType: soft +"gaxios@npm:^6.1.1": + version: 6.7.1 + resolution: "gaxios@npm:6.7.1" + dependencies: + extend: "npm:^3.0.2" + https-proxy-agent: "npm:^7.0.1" + is-stream: "npm:^2.0.0" + node-fetch: "npm:^2.6.9" + uuid: "npm:^9.0.1" + checksum: 10c0/53e92088470661c5bc493a1de29d05aff58b1f0009ec5e7903f730f892c3642a93e264e61904383741ccbab1ce6e519f12a985bba91e13527678b32ee6d7d3fd + languageName: node + linkType: hard + +"gcp-metadata@npm:^6.0.0": + version: 6.1.1 + resolution: "gcp-metadata@npm:6.1.1" + dependencies: + gaxios: "npm:^6.1.1" + google-logging-utils: "npm:^0.0.2" + json-bigint: "npm:^1.0.0" + checksum: 10c0/71f6ad4800aa622c246ceec3955014c0c78cdcfe025971f9558b9379f4019f5e65772763428ee8c3244fa81b8631977316eaa71a823493f82e5c44d7259ffac8 + languageName: node + linkType: hard + "generate-function@npm:^2.3.1": version: 2.3.1 resolution: "generate-function@npm:2.3.1" @@ -14227,6 +15289,13 @@ __metadata: languageName: node linkType: hard +"google-logging-utils@npm:^0.0.2": + version: 0.0.2 + resolution: "google-logging-utils@npm:0.0.2" + checksum: 10c0/9a4bbd470dd101c77405e450fffca8592d1d7114f245a121288d04a957aca08c9dea2dd1a871effe71e41540d1bb0494731a0b0f6fea4358e77f06645e4268c1 + languageName: node + linkType: hard + "gopd@npm:^1.0.1, gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" @@ -14562,6 +15631,20 @@ __metadata: languageName: node linkType: hard +"hexer@npm:^1.5.0": + version: 1.5.0 + resolution: "hexer@npm:1.5.0" + dependencies: + ansi-color: "npm:^0.2.1" + minimist: "npm:^1.1.0" + process: "npm:^0.10.0" + xtend: "npm:^4.0.0" + bin: + hexer: ./cli.js + checksum: 10c0/43b00fad220a98ed98dad3a3d0e7297bd3d0ce66f0d935a2927e07c0d29f5b8de92f9c0fa32c641daa4291ccb19385fa1bd0853d298983ec9b3ec88e7686ee5c + languageName: node + linkType: hard + "hotscript@npm:^1.0.11": version: 1.0.13 resolution: "hotscript@npm:1.0.13" @@ -15495,6 +16578,19 @@ __metadata: languageName: node linkType: hard +"jaeger-client@npm:^3.15.0": + version: 3.19.0 + resolution: "jaeger-client@npm:3.19.0" + dependencies: + node-int64: "npm:^0.4.0" + opentracing: "npm:^0.14.4" + thriftrw: "npm:^3.5.0" + uuid: "npm:^8.3.2" + xorshift: "npm:^1.1.1" + checksum: 10c0/04f5683461212de49e4d5b6ca6b214276a797e361fba852231bc5e7fdcee76b053a6e618e5490106d7f7254917d928dda0880f7cd71e35dece7e09bbdcdd0927 + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.9.2 resolution: "jake@npm:10.9.2" @@ -16103,6 +17199,15 @@ __metadata: languageName: node linkType: hard +"json-bigint@npm:^1.0.0": + version: 1.0.0 + resolution: "json-bigint@npm:1.0.0" + dependencies: + bignumber.js: "npm:^9.0.0" + checksum: 10c0/e3f34e43be3284b573ea150a3890c92f06d54d8ded72894556357946aeed9877fd795f62f37fe16509af189fd314ab1104d0fd0f163746ad231b9f378f5b33f4 + languageName: node + linkType: hard + "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -16634,6 +17739,13 @@ __metadata: languageName: node linkType: hard +"long@npm:^2.4.0": + version: 2.4.0 + resolution: "long@npm:2.4.0" + checksum: 10c0/2560d6a299f2177b94ce300cc21fc15dbf72d9899ddac7bd10251468e1b4eabbce48463f651fea15cc4acf2c4775e3507767c58df73945d5d6ae4e12ac058796 + languageName: node + linkType: hard + "long@npm:^4.0.0": version: 4.0.0 resolution: "long@npm:4.0.0" @@ -17075,7 +18187,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6, minimist@npm:^1.2.8": +"minimist@npm:^1.1.0, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -17405,7 +18517,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.5.0, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.5.0, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -17614,6 +18726,13 @@ __metadata: languageName: node linkType: hard +"obuf@npm:~1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 10c0/520aaac7ea701618eacf000fc96ae458e20e13b0569845800fc582f81b386731ab22d55354b4915d58171db00e79cfcd09c1638c02f89577ef092b38c65b7d81 + languageName: node + linkType: hard + "ohash@npm:^2.0.11": version: 2.0.11 resolution: "ohash@npm:2.0.11" @@ -17683,6 +18802,13 @@ __metadata: languageName: node linkType: hard +"opentracing@npm:^0.14.4": + version: 0.14.7 + resolution: "opentracing@npm:0.14.7" + checksum: 10c0/a7be8d697b1997548233423f5f4c196e285af8e864a24d7704fc6029beb73cd1f987651ca814e207629c6bc624cb03297a86601c0dc51cdca9a07a20f97b71ea + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -18086,6 +19212,55 @@ __metadata: languageName: node linkType: hard +"pg-int8@npm:1.0.1": + version: 1.0.1 + resolution: "pg-int8@npm:1.0.1" + checksum: 10c0/be6a02d851fc2a4ae3e9de81710d861de3ba35ac927268973eb3cb618873a05b9424656df464dd43bd7dc3fc5295c3f5b3c8349494f87c7af50ec59ef14e0b98 + languageName: node + linkType: hard + +"pg-numeric@npm:1.0.2": + version: 1.0.2 + resolution: "pg-numeric@npm:1.0.2" + checksum: 10c0/43dd9884e7b52c79ddc28d2d282d7475fce8bba13452d33c04ceb2e0a65f561edf6699694e8e1c832ff9093770496363183c950dd29608e1bdd98f344b25bca9 + languageName: node + linkType: hard + +"pg-protocol@npm:*": + version: 1.10.0 + resolution: "pg-protocol@npm:1.10.0" + checksum: 10c0/7d0d64fe9df50262d907fd476454e1e36f41f5f66044c3ba6aa773fb8add1d350a9c162306e5c33e99bdfbdcc1140dd4ca74f66eda41d0aaceb5853244dcdb65 + languageName: node + linkType: hard + +"pg-types@npm:^2.2.0": + version: 2.2.0 + resolution: "pg-types@npm:2.2.0" + dependencies: + pg-int8: "npm:1.0.1" + postgres-array: "npm:~2.0.0" + postgres-bytea: "npm:~1.0.0" + postgres-date: "npm:~1.0.4" + postgres-interval: "npm:^1.1.0" + checksum: 10c0/ab3f8069a323f601cd2d2279ca8c425447dab3f9b61d933b0601d7ffc00d6200df25e26a4290b2b0783b59278198f7dd2ed03e94c4875797919605116a577c65 + languageName: node + linkType: hard + +"pg-types@npm:^4.0.1": + version: 4.0.2 + resolution: "pg-types@npm:4.0.2" + dependencies: + pg-int8: "npm:1.0.1" + pg-numeric: "npm:1.0.2" + postgres-array: "npm:~3.0.1" + postgres-bytea: "npm:~3.0.0" + postgres-date: "npm:~2.1.0" + postgres-interval: "npm:^3.0.0" + postgres-range: "npm:^1.1.1" + checksum: 10c0/780fccda2f3fa2a34e85a72e8e7dadb7d88fbe71ce88f126cb3313f333ad836d02488ec4ff3d94d0c1e5846f735d6e6c6281f8059e6b8919d2180429acaec3e2 + languageName: node + linkType: hard + "picocolors@npm:^1.0.1, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -18162,28 +19337,7 @@ __metadata: languageName: node linkType: hard -"pino@npm:^9.0.0": - version: 9.7.0 - resolution: "pino@npm:9.7.0" - dependencies: - atomic-sleep: "npm:^1.0.0" - fast-redact: "npm:^3.1.1" - on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^2.0.0" - pino-std-serializers: "npm:^7.0.0" - process-warning: "npm:^5.0.0" - quick-format-unescaped: "npm:^4.0.3" - real-require: "npm:^0.2.0" - safe-stable-stringify: "npm:^2.3.1" - sonic-boom: "npm:^4.0.1" - thread-stream: "npm:^3.0.0" - bin: - pino: bin.js - checksum: 10c0/c7f8a83a9a9d728b4eff6d0f4b9367f031c91bcaa5806fbf0eedcc8e77faba593d59baf11a8fba0dd1c778bb17ca7ed01418ac1df4ec129faeedd4f3ecaff66f - languageName: node - linkType: hard - -"pino@npm:^9.6.0": +"pino@npm:^9.0.0, pino@npm:^9.6.0": version: 9.6.0 resolution: "pino@npm:9.6.0" dependencies: @@ -18304,6 +19458,73 @@ __metadata: languageName: node linkType: hard +"postgres-array@npm:~2.0.0": + version: 2.0.0 + resolution: "postgres-array@npm:2.0.0" + checksum: 10c0/cbd56207e4141d7fbf08c86f2aebf21fa7064943d3f808ec85f442ff94b48d891e7a144cc02665fb2de5dbcb9b8e3183a2ac749959e794b4a4cfd379d7a21d08 + languageName: node + linkType: hard + +"postgres-array@npm:~3.0.1": + version: 3.0.4 + resolution: "postgres-array@npm:3.0.4" + checksum: 10c0/47f3e648da512bacdd6a5ed55cf770605ec271330789faeece0fd13805a49f376d6e5c9e0e353377be11a9545e727dceaa2473566c505432bf06366ccd04c6b2 + languageName: node + linkType: hard + +"postgres-bytea@npm:~1.0.0": + version: 1.0.0 + resolution: "postgres-bytea@npm:1.0.0" + checksum: 10c0/febf2364b8a8953695cac159eeb94542ead5886792a9627b97e33f6b5bb6e263bc0706ab47ec221516e79fbd6b2452d668841830fb3b49ec6c0fc29be61892ce + languageName: node + linkType: hard + +"postgres-bytea@npm:~3.0.0": + version: 3.0.0 + resolution: "postgres-bytea@npm:3.0.0" + dependencies: + obuf: "npm:~1.1.2" + checksum: 10c0/41c79cc48aa730c5ba3eda6ab989a940034f07a1f57b8f2777dce56f1b8cca16c5870582932b5b10cc605048aef9b6157e06253c871b4717cafc6d00f55376aa + languageName: node + linkType: hard + +"postgres-date@npm:~1.0.4": + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 10c0/0ff91fccc64003e10b767fcfeefb5eaffbc522c93aa65d5051c49b3c4ce6cb93ab091a7d22877a90ad60b8874202c6f1d0f935f38a7235ed3b258efd54b97ca9 + languageName: node + linkType: hard + +"postgres-date@npm:~2.1.0": + version: 2.1.0 + resolution: "postgres-date@npm:2.1.0" + checksum: 10c0/00a7472c10788f6b0d08d24108bf1eb80858de1bd6317740198a564918ea4a69b80c98148167b92ae688abd606483020d0de0dd3a36f3ea9a3e26bbeef3464f4 + languageName: node + linkType: hard + +"postgres-interval@npm:^1.1.0": + version: 1.2.0 + resolution: "postgres-interval@npm:1.2.0" + dependencies: + xtend: "npm:^4.0.0" + checksum: 10c0/c1734c3cb79e7f22579af0b268a463b1fa1d084e742a02a7a290c4f041e349456f3bee3b4ee0bb3f226828597f7b76deb615c1b857db9a742c45520100456272 + languageName: node + linkType: hard + +"postgres-interval@npm:^3.0.0": + version: 3.0.0 + resolution: "postgres-interval@npm:3.0.0" + checksum: 10c0/8b570b30ea37c685e26d136d34460f246f98935a1533defc4b53bb05ee23ae3dc7475b718ec7ea607a57894d8c6b4f1adf67ca9cc83a75bdacffd427d5c68de8 + languageName: node + linkType: hard + +"postgres-range@npm:^1.1.1": + version: 1.1.4 + resolution: "postgres-range@npm:1.1.4" + checksum: 10c0/254494ef81df208e0adeae6b66ce394aba37914ea14c7ece55a45fb6691b7db04bee74c825380a47c887a9f87158fd3d86f758f9cc60b76d3a38ce5aca7912e8 + languageName: node + linkType: hard + "postject@npm:^1.0.0-alpha.6": version: 1.0.0-alpha.6 resolution: "postject@npm:1.0.0-alpha.6" @@ -18415,6 +19636,13 @@ __metadata: languageName: node linkType: hard +"process@npm:^0.10.0": + version: 0.10.1 + resolution: "process@npm:0.10.1" + checksum: 10c0/2608c672bb59fbd5e87f0c4df512540995af7e047c4eed024e1a4a1c9b144ce394840ce15069a97b82afef7aa58c6e2e8e959c1b711fe3a1f7bfb6529b03084c + languageName: node + linkType: hard + "progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" @@ -19144,30 +20372,30 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.18.1, rollup@npm:^4.34.9": - version: 4.41.0 - resolution: "rollup@npm:4.41.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.41.0" - "@rollup/rollup-android-arm64": "npm:4.41.0" - "@rollup/rollup-darwin-arm64": "npm:4.41.0" - "@rollup/rollup-darwin-x64": "npm:4.41.0" - "@rollup/rollup-freebsd-arm64": "npm:4.41.0" - "@rollup/rollup-freebsd-x64": "npm:4.41.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.41.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.41.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.41.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.41.0" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.41.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.41.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.41.0" - "@rollup/rollup-linux-riscv64-musl": "npm:4.41.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.41.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.41.0" - "@rollup/rollup-linux-x64-musl": "npm:4.41.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.41.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.41.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.41.0" +"rollup@npm:^4.18.1, rollup@npm:^4.34.9, rollup@npm:^4.41.1": + version: 4.41.1 + resolution: "rollup@npm:4.41.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.41.1" + "@rollup/rollup-android-arm64": "npm:4.41.1" + "@rollup/rollup-darwin-arm64": "npm:4.41.1" + "@rollup/rollup-darwin-x64": "npm:4.41.1" + "@rollup/rollup-freebsd-arm64": "npm:4.41.1" + "@rollup/rollup-freebsd-x64": "npm:4.41.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.41.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.41.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.41.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.41.1" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.41.1" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.41.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.41.1" + "@rollup/rollup-linux-riscv64-musl": "npm:4.41.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.41.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.41.1" + "@rollup/rollup-linux-x64-musl": "npm:4.41.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.41.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.41.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.41.1" "@types/estree": "npm:1.0.7" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -19215,7 +20443,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/4c3d361f400317cb18f5e3912553a514bb1dcc7ce0c92ff66b9786b598632eb1d56f7bb1cc11ed16a4ccdbe6808ae851bc6bde5d2305cc587450c6212e69617f + checksum: 10c0/c4d5f2257320b50dc0e035e31d8d2f78d36b7015aef2f87cc984c0a1c97ffebf14337dddeb488b4b11ae798fea6486189b77e7cf677617dcf611d97db41ebfda languageName: node linkType: hard @@ -19620,13 +20848,6 @@ __metadata: languageName: node linkType: hard -"shimmer@npm:^1.2.1": - version: 1.2.1 - resolution: "shimmer@npm:1.2.1" - checksum: 10c0/ae8b27c389db2a00acfc8da90240f11577685a8f3e40008f826a3bea8b4f3b3ecd305c26be024b4a0fd3b123d132c1569d6e238097960a9a543b6c60760fb46a - languageName: node - linkType: hard - "side-channel-list@npm:^1.0.0": version: 1.0.0 resolution: "side-channel-list@npm:1.0.0" @@ -20068,6 +21289,13 @@ __metadata: languageName: node linkType: hard +"string-template@npm:~0.2.1": + version: 0.2.1 + resolution: "string-template@npm:0.2.1" + checksum: 10c0/5dc9bd8741e50aaf1ebb616c64fdada32301dc52718692a7a13088285b96fecd1010ab612b348ef29c08dff4df4f96c8e80689ca855a578d01cc182e48199182 + languageName: node + linkType: hard + "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -20501,6 +21729,19 @@ __metadata: languageName: node linkType: hard +"thriftrw@npm:^3.5.0": + version: 3.12.0 + resolution: "thriftrw@npm:3.12.0" + dependencies: + bufrw: "npm:^1.3.0" + error: "npm:7.0.2" + long: "npm:^2.4.0" + bin: + thrift2json: ./thrift2json.js + checksum: 10c0/3f7f4184eb3d722c8f07be7a27f960f9ebe4c014532cb77d625b69f2246e5c3f9f1e7be2dbbf438372e6d6827b32ba55f658c80addcb9b511e907017205f9213 + languageName: node + linkType: hard + "through@npm:2, through@npm:^2.3.8, through@npm:~2.3, through@npm:~2.3.1": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -21379,6 +22620,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + languageName: node + linkType: hard + "uuid@npm:^9.0.0, uuid@npm:^9.0.1": version: 9.0.1 resolution: "uuid@npm:9.0.1" @@ -21965,7 +23215,14 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.2": +"xorshift@npm:^1.1.1": + version: 1.2.0 + resolution: "xorshift@npm:1.2.0" + checksum: 10c0/e805cdda3ca16ea48d3e1dbcb6f55f7c135bcf5219ae842bdea814486e4e6788cefc6703a04140b93be631370c1a7403c51ab0a6554ec68d66e84b601e34a722 + languageName: node + linkType: hard + +"xtend@npm:^4.0.0, xtend@npm:^4.0.2, xtend@npm:~4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e @@ -22110,3 +23367,10 @@ __metadata: checksum: 10c0/00d76093a999e377e4ffd037fa7185e861c35917e8c4272f514115c206a0654995168f57fb71708b11e0a9243206d988b7f63b543404e1796402e50d346a6bd7 languageName: node linkType: hard + +"zone.js@npm:^0.11.0 || ^0.12.0 || ^0.13.0 || ^0.14.0 || ^0.15.0": + version: 0.15.1 + resolution: "zone.js@npm:0.15.1" + checksum: 10c0/4eca000f90dbea1c34f62e88ce56910dace8cdecbe14747b214f2af37aa511264c7bd50faf3e9b00612e95dc4567da156a9690fef1983bfcf74604a630d190ef + languageName: node + linkType: hard From 91ce65f9e020204be6ef8174e63133be5a44b51f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 1 Jul 2025 12:47:34 +0000 Subject: [PATCH 42/60] chore(dependencies): updated changesets for modified dependencies --- .../@graphql-hive_gateway-956-dependencies.md | 9 ++++++++ ...h_plugin-opentelemetry-956-dependencies.md | 21 +++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.changeset/@graphql-hive_gateway-956-dependencies.md b/.changeset/@graphql-hive_gateway-956-dependencies.md index f60ed026e..5296db288 100644 --- a/.changeset/@graphql-hive_gateway-956-dependencies.md +++ b/.changeset/@graphql-hive_gateway-956-dependencies.md @@ -5,4 +5,13 @@ dependencies updates: - Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Added dependency [`@opentelemetry/api@^1.9.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api/v/1.9.0) (to `dependencies`) +- Added dependency [`@opentelemetry/context-zone@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-zone/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/core@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/exporter-jaeger@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-jaeger/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/exporter-zipkin@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/propagator-b3@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/propagator-b3/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/propagator-jaeger@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/propagator-jaeger/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sampler-jaeger-remote@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sampler-jaeger-remote/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-metrics@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-metrics/v/2.0.1) (to `dependencies`) - Removed dependency [`@graphql-mesh/plugin-mock@^0.105.6` ↗︎](https://www.npmjs.com/package/@graphql-mesh/plugin-mock/v/0.105.6) (from `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md index e4c85675d..90da13fba 100644 --- a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md @@ -4,14 +4,17 @@ dependencies updates: -- Updated dependency [`@opentelemetry/core@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.0) (from `^1.30.0`, in `dependencies`) -- Updated dependency [`@opentelemetry/exporter-trace-otlp-grpc@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-grpc/v/0.200.0) (from `^0.57.0`, in `dependencies`) -- Updated dependency [`@opentelemetry/exporter-trace-otlp-http@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.200.0) (from `^0.57.0`, in `dependencies`) -- Updated dependency [`@opentelemetry/exporter-zipkin@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/2.0.0) (from `^1.29.0`, in `dependencies`) -- Updated dependency [`@opentelemetry/instrumentation@^0.200.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/instrumentation/v/0.200.0) (from `^0.57.0`, in `dependencies`) -- Updated dependency [`@opentelemetry/resources@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.0.0) (from `^1.29.0`, in `dependencies`) -- Updated dependency [`@opentelemetry/sdk-trace-base@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.0) (from `^1.29.0`, in `dependencies`) -- Updated dependency [`@opentelemetry/sdk-trace-web@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-web/v/2.0.0) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/core@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.1) (from `^1.30.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-grpc@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-grpc/v/0.202.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-http@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.202.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/instrumentation@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/instrumentation/v/0.202.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/resources@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.0.1) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/sdk-trace-base@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.1) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/semantic-conventions@^1.34.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.34.0) (from `^1.28.0`, in `dependencies`) - Updated dependency [`@whatwg-node/promise-helpers@1.3.0` ↗︎](https://www.npmjs.com/package/@whatwg-node/promise-helpers/v/1.3.0) (from `^1.3.0`, in `dependencies`) -- Added dependency [`@opentelemetry/context-async-hooks@^2.0.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.0) (to `dependencies`) +- Added dependency [`@opentelemetry/auto-instrumentations-node@^0.60.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.60.1) (to `dependencies`) +- Added dependency [`@opentelemetry/context-async-hooks@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-node@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.202.0) (to `dependencies`) - Removed dependency [`@azure/monitor-opentelemetry-exporter@^1.0.0-beta.27` ↗︎](https://www.npmjs.com/package/@azure/monitor-opentelemetry-exporter/v/1.0.0) (from `dependencies`) +- Removed dependency [`@opentelemetry/exporter-zipkin@^1.29.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/1.29.0) (from `dependencies`) +- Removed dependency [`@opentelemetry/sdk-trace-web@^1.29.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-web/v/1.29.0) (from `dependencies`) From 9d49c6b9989fccea0ee6a921e802ad1b99709380 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Tue, 1 Jul 2025 15:00:04 +0200 Subject: [PATCH 43/60] fix casing of opentelemtry --- e2e/cloudflare-workers/src/index.ts | 4 +- .../services/gateway-fastify.ts | 4 +- e2e/opentelemetry/gateway.config.ts | 4 +- packages/plugins/opentelemetry/src/index.ts | 2 - packages/plugins/opentelemetry/src/plugin.ts | 4 +- packages/plugins/opentelemetry/src/setup.ts | 2 +- .../tests/useOpenTelemetry.spec.ts | 38 +++++++++---------- 7 files changed, 28 insertions(+), 30 deletions(-) diff --git a/e2e/cloudflare-workers/src/index.ts b/e2e/cloudflare-workers/src/index.ts index a16778fb2..211b7bbe4 100644 --- a/e2e/cloudflare-workers/src/index.ts +++ b/e2e/cloudflare-workers/src/index.ts @@ -4,7 +4,7 @@ import { GatewayPlugin, } from '@graphql-hive/gateway-runtime'; import { useOpenTelemetry } from '@graphql-mesh/plugin-opentelemetry'; -import { opentelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; +import { openTelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; import http from '@graphql-mesh/transport-http'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; @@ -37,7 +37,7 @@ const useOnFetchTracer = (): GatewayPlugin => { let runtime: ReturnType; function getRuntime(env: Env) { if (!runtime) { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, resource: { serviceName: env.OTEL_SERVICE_NAME, serviceVersion: '1.0.0' }, traces: { diff --git a/e2e/graphos-polling/services/gateway-fastify.ts b/e2e/graphos-polling/services/gateway-fastify.ts index 30002a5f7..329fedcd8 100644 --- a/e2e/graphos-polling/services/gateway-fastify.ts +++ b/e2e/graphos-polling/services/gateway-fastify.ts @@ -1,7 +1,7 @@ import { createGatewayRuntime, Logger } from '@graphql-hive/gateway-runtime'; import { PinoLogWriter } from '@graphql-hive/logger/writers/pino'; import { useOpenTelemetry } from '@graphql-mesh/plugin-opentelemetry'; -import { opentelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; +import { openTelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; import { Opts } from '@internal/testing'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; @@ -17,7 +17,7 @@ const port = opts.getServicePort('gateway-fastify'); /*--- E2E TEST SPECIFIC CONFIGURATION END--- */ -opentelemetrySetup({ +openTelemetrySetup({ contextManager: new AsyncLocalStorageContextManager(), traces: { exporter: new OTLPTraceExporter({ url: process.env['OTLP_EXPORTER_URL'] }), diff --git a/e2e/opentelemetry/gateway.config.ts b/e2e/opentelemetry/gateway.config.ts index f095082f4..a13e94db2 100644 --- a/e2e/opentelemetry/gateway.config.ts +++ b/e2e/opentelemetry/gateway.config.ts @@ -1,5 +1,5 @@ import { defineConfig, GatewayPlugin } from '@graphql-hive/gateway'; -import { opentelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; +import { openTelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; import type { MeshFetchRequestInit } from '@graphql-mesh/types'; import { trace } from '@opentelemetry/api'; import { @@ -56,7 +56,7 @@ if (runner === 'node' || runner === 'docker') { sdk.start(); ['SIGTERM', 'SIGINT'].forEach((sig) => process.on(sig, () => sdk.shutdown())); } else { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: new AsyncLocalStorageContextManager(), resource, traces: { diff --git a/packages/plugins/opentelemetry/src/index.ts b/packages/plugins/opentelemetry/src/index.ts index 413de39d0..ebbe4c6cf 100644 --- a/packages/plugins/opentelemetry/src/index.ts +++ b/packages/plugins/opentelemetry/src/index.ts @@ -7,8 +7,6 @@ import { export * from './attributes'; -export type OpenTelemetryMeshPluginOptions = OpenTelemetryGatewayPluginOptions; - export const OpenTelemetryDiagLogLevel = DiagLogLevel; export { diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 1ef1a0d90..1ba026224 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -201,7 +201,7 @@ const HeadersTextMapGetter: TextMapGetter = { }; export type OpenTelemetryContextExtension = { - opentelemetry: { + openTelemetry: { tracer: Tracer; activeContext: () => Context; }; @@ -669,7 +669,7 @@ export function useOpenTelemetry( onEnveloped({ state, extendContext }) { extendContext({ - opentelemetry: { + openTelemetry: { tracer, activeContext: () => getContext(state), }, diff --git a/packages/plugins/opentelemetry/src/setup.ts b/packages/plugins/opentelemetry/src/setup.ts index a1672f002..19a037bc7 100644 --- a/packages/plugins/opentelemetry/src/setup.ts +++ b/packages/plugins/opentelemetry/src/setup.ts @@ -87,7 +87,7 @@ type OpentelemetrySetupOptions = TracingOptions & generalLimits?: GeneralLimits; }; -export function opentelemetrySetup(options: OpentelemetrySetupOptions) { +export function openTelemetrySetup(options: OpentelemetrySetupOptions) { if (getEnvVar('OTEL_SDK_DISABLED', false) === 'true') { return; } diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index 5ceafc002..d6812d445 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -1,4 +1,4 @@ -import { opentelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; +import { openTelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; import { SpanStatusCode, TextMapPropagator, @@ -51,7 +51,7 @@ describe('useOpenTelemetry', () => { }); it('should setup OTEL with sain default', () => { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: new AsyncLocalStorageContextManager(), traces: { exporter: new OTLPTraceExporter(), @@ -96,7 +96,7 @@ describe('useOpenTelemetry', () => { getTracer: vi.fn(), }; - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { tracerProvider, @@ -109,7 +109,7 @@ describe('useOpenTelemetry', () => { it('should not register a contextManager when passed null', () => { const before = getContextManager(); - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, }); @@ -117,7 +117,7 @@ describe('useOpenTelemetry', () => { }); it('should register a console exporter', () => { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { console: true, @@ -132,7 +132,7 @@ describe('useOpenTelemetry', () => { }); it('should register a console exporter even if an exporter is given', () => { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { exporter: new OTLPTraceExporter(), @@ -148,7 +148,7 @@ describe('useOpenTelemetry', () => { }); it('should register a console exporter even if a list of processors is given', () => { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { processors: [new SimpleSpanProcessor(new OTLPTraceExporter())], @@ -164,7 +164,7 @@ describe('useOpenTelemetry', () => { }); it('should register a custom resource', () => { - opentelemetrySetup({ + openTelemetrySetup({ resource: resourceFromAttributes({ 'service.name': 'test-name', 'service.version': 'test-version', @@ -189,7 +189,7 @@ describe('useOpenTelemetry', () => { vi.stubEnv('OTEL_SERVICE_NAME', 'test-name'); vi.stubEnv('OTEL_SERVICE_VERSION', 'test-version'); - opentelemetrySetup({ + openTelemetrySetup({ traces: { console: true }, contextManager: null, }); @@ -204,7 +204,7 @@ describe('useOpenTelemetry', () => { ); it('should allow to register a custom sampler', () => { - opentelemetrySetup({ + openTelemetrySetup({ traces: { console: true, }, @@ -216,7 +216,7 @@ describe('useOpenTelemetry', () => { }); it('should allow to configure a rate sampling strategy', () => { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { console: true }, samplingRate: 0.1, @@ -235,7 +235,7 @@ describe('useOpenTelemetry', () => { }); it('should allow to disable batching', () => { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { exporter: new OTLPTraceExporter(), @@ -248,7 +248,7 @@ describe('useOpenTelemetry', () => { }); it('should allow to configure batching', () => { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { exporter: new OTLPTraceExporter(), @@ -273,7 +273,7 @@ describe('useOpenTelemetry', () => { it('should allow to manually define processor', () => { const processor = {} as SpanProcessor; - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { processors: [processor], @@ -287,7 +287,7 @@ describe('useOpenTelemetry', () => { it('should allow to customize propagators', () => { const propagator = {} as TextMapPropagator; - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, propagators: [propagator], }); @@ -298,7 +298,7 @@ describe('useOpenTelemetry', () => { it('should allow to customize propagators', () => { const before = getPropagator(); - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, propagators: [], }); @@ -307,7 +307,7 @@ describe('useOpenTelemetry', () => { }); it('should allow to customize limits', () => { - opentelemetrySetup({ + openTelemetrySetup({ contextManager: null, traces: { console: true, @@ -474,8 +474,8 @@ describe('useOpenTelemetry', () => { ({ context: gqlCtx, executionRequest }: any) => { const ctx: OpenTelemetryContextExtension = gqlCtx ?? executionRequest?.context; - return ctx.opentelemetry.tracer - .startSpan(name, {}, ctx.opentelemetry.activeContext()) + return ctx.openTelemetry.tracer + .startSpan(name, {}, ctx.openTelemetry.activeContext()) .end(); }; From f3caa12a7ad50cdc03c82f2336f820e8ccbad55e Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Wed, 9 Jul 2025 22:45:29 +0200 Subject: [PATCH 44/60] feat(opentelemetry): add log writer (#1293) Co-authored-by: github-actions[bot] Co-authored-by: Denis Badurina --- ...@graphql-hive_gateway-1293-dependencies.md | 8 + .../@graphql-hive_nestjs-1293-dependencies.md | 7 + ..._plugin-opentelemetry-1293-dependencies.md | 9 + packages/gateway/package.json | 2 + packages/gateway/rollup.config.js | 2 + packages/gateway/src/cli.ts | 7 +- packages/nestjs/package.json | 1 + packages/plugins/opentelemetry/package.json | 3 + .../plugins/opentelemetry/src/log-writer.ts | 151 ++++++++++ packages/plugins/opentelemetry/src/plugin.ts | 39 ++- packages/plugins/opentelemetry/src/setup.ts | 2 + .../tests/useOpenTelemetry.spec.ts | 262 +++++++++++++++++- packages/plugins/opentelemetry/tests/utils.ts | 68 ++++- yarn.lock | 8 +- 14 files changed, 554 insertions(+), 15 deletions(-) create mode 100644 .changeset/@graphql-hive_gateway-1293-dependencies.md create mode 100644 .changeset/@graphql-hive_nestjs-1293-dependencies.md create mode 100644 .changeset/@graphql-mesh_plugin-opentelemetry-1293-dependencies.md create mode 100644 packages/plugins/opentelemetry/src/log-writer.ts diff --git a/.changeset/@graphql-hive_gateway-1293-dependencies.md b/.changeset/@graphql-hive_gateway-1293-dependencies.md new file mode 100644 index 000000000..4d736887b --- /dev/null +++ b/.changeset/@graphql-hive_gateway-1293-dependencies.md @@ -0,0 +1,8 @@ +--- +'@graphql-hive/gateway': patch +--- + +dependencies updates: + +- Added dependency [`@opentelemetry/api-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api-logs/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-logs/v/0.202.0) (to `dependencies`) diff --git a/.changeset/@graphql-hive_nestjs-1293-dependencies.md b/.changeset/@graphql-hive_nestjs-1293-dependencies.md new file mode 100644 index 000000000..0af93d273 --- /dev/null +++ b/.changeset/@graphql-hive_nestjs-1293-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/nestjs': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-1293-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-1293-dependencies.md new file mode 100644 index 000000000..4811d2789 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-1293-dependencies.md @@ -0,0 +1,9 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Added dependency [`@opentelemetry/api-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api-logs/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-logs/v/0.202.0) (to `dependencies`) diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 8621e5786..971689f58 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -83,6 +83,7 @@ "@graphql-tools/utils": "^10.8.1", "@graphql-yoga/render-graphiql": "^5.15.1", "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api-logs": "^0.202.0", "@opentelemetry/context-zone": "^2.0.1", "@opentelemetry/core": "^2.0.1", "@opentelemetry/exporter-jaeger": "^2.0.1", @@ -90,6 +91,7 @@ "@opentelemetry/propagator-b3": "^2.0.1", "@opentelemetry/propagator-jaeger": "^2.0.1", "@opentelemetry/sampler-jaeger-remote": "^0.202.0", + "@opentelemetry/sdk-logs": "^0.202.0", "@opentelemetry/sdk-metrics": "^2.0.1", "commander": "^13.1.0", "dotenv": "^17.2.0", diff --git a/packages/gateway/rollup.config.js b/packages/gateway/rollup.config.js index 9906582d9..915b62da8 100644 --- a/packages/gateway/rollup.config.js +++ b/packages/gateway/rollup.config.js @@ -84,10 +84,12 @@ const deps = { [ // Common API base ['api'], + ['api-logs'], ['core'], ['resources', 'esm/'], ['sdk-trace-base'], ['sdk-metrics'], + ['sdk-logs'], ['semantic-conventions'], ['instrumentation'], diff --git a/packages/gateway/src/cli.ts b/packages/gateway/src/cli.ts index 7742e4af5..f1b549518 100644 --- a/packages/gateway/src/cli.ts +++ b/packages/gateway/src/cli.ts @@ -20,7 +20,7 @@ import type { AWSSignv4PluginOptions } from '@graphql-hive/plugin-aws-sigv4'; import { HivePubSub } from '@graphql-hive/pubsub'; import type UpstashRedisCache from '@graphql-mesh/cache-upstash-redis'; import type { JWTAuthPluginOptions } from '@graphql-mesh/plugin-jwt-auth'; -import type { OpenTelemetryMeshPluginOptions } from '@graphql-mesh/plugin-opentelemetry'; +import type { OpenTelemetryGatewayPluginOptions } from '@graphql-mesh/plugin-opentelemetry'; import type { PrometheusPluginOptions } from '@graphql-mesh/plugin-prometheus'; import type { KeyValueCache, YamlConfig } from '@graphql-mesh/types'; import { renderGraphiQL } from '@graphql-yoga/render-graphiql'; @@ -128,7 +128,10 @@ export interface GatewayCLIBuiltinPluginConfig { * * @see https://graphql-hive.com/docs/gateway/monitoring-tracing */ - openTelemetry?: Exclude; + openTelemetry?: Exclude< + OpenTelemetryGatewayPluginOptions, + GatewayConfigContext + >; /** * Configure Rate Limiting * diff --git a/packages/nestjs/package.json b/packages/nestjs/package.json index 1f19f8b43..1837050e8 100644 --- a/packages/nestjs/package.json +++ b/packages/nestjs/package.json @@ -46,6 +46,7 @@ }, "dependencies": { "@graphql-hive/gateway": "workspace:^", + "@graphql-hive/logger": "workspace:^", "@graphql-mesh/types": "^0.104.5", "@graphql-tools/utils": "^10.8.1", "@whatwg-node/promise-helpers": "^1.3.0", diff --git a/packages/plugins/opentelemetry/package.json b/packages/plugins/opentelemetry/package.json index 192e3516e..86f5c1ac7 100644 --- a/packages/plugins/opentelemetry/package.json +++ b/packages/plugins/opentelemetry/package.json @@ -53,12 +53,14 @@ }, "dependencies": { "@graphql-hive/gateway-runtime": "workspace:^", + "@graphql-hive/logger": "workspace:^", "@graphql-mesh/cross-helpers": "^0.4.10", "@graphql-mesh/transport-common": "workspace:^", "@graphql-mesh/types": "^0.104.5", "@graphql-mesh/utils": "^0.104.5", "@graphql-tools/utils": "^10.8.1", "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api-logs": "^0.202.0", "@opentelemetry/auto-instrumentations-node": "^0.60.1", "@opentelemetry/context-async-hooks": "^2.0.1", "@opentelemetry/core": "^2.0.1", @@ -66,6 +68,7 @@ "@opentelemetry/exporter-trace-otlp-http": "^0.202.0", "@opentelemetry/instrumentation": "^0.202.0", "@opentelemetry/resources": "^2.0.1", + "@opentelemetry/sdk-logs": "^0.202.0", "@opentelemetry/sdk-node": "^0.202.0", "@opentelemetry/sdk-trace-base": "^2.0.1", "@opentelemetry/semantic-conventions": "^1.34.0", diff --git a/packages/plugins/opentelemetry/src/log-writer.ts b/packages/plugins/opentelemetry/src/log-writer.ts new file mode 100644 index 000000000..f14be8cf2 --- /dev/null +++ b/packages/plugins/opentelemetry/src/log-writer.ts @@ -0,0 +1,151 @@ +import { Attributes, LogLevel, LogWriter } from '@graphql-hive/logger'; +import { Context, context, ROOT_CONTEXT } from '@opentelemetry/api'; +import { logs, SeverityNumber, type Logger } from '@opentelemetry/api-logs'; +import { Resource } from '@opentelemetry/resources'; +import { + BatchLogRecordProcessor, + ConsoleLogRecordExporter, + LoggerProvider, + LogRecordExporter, + LogRecordLimits, + LogRecordProcessor, + SimpleLogRecordProcessor, +} from '@opentelemetry/sdk-logs'; +import { BufferConfig } from '@opentelemetry/sdk-trace-base'; +import { otelCtxForRequestId } from './plugin'; + +type ProcessorOptions = { + forceFlushTimeoutMillis?: number; + logRecordLimits?: LogRecordLimits; + resource?: Resource; + console?: boolean; +}; + +export type OpenTelemetryLogWriterSetupOptions = + | { + logger: Logger; + } + | { + provider: LoggerProvider; + } + | (ProcessorOptions & + ( + | { + processors: LogRecordProcessor[]; + exporter?: never; + } + | { + exporter: LogRecordExporter; + batching?: boolean | BufferConfig; + processors?: never; + } + | { + console: boolean; + processors?: never; + exporter?: never; + } + )); + +export type OpenTelemetryLogWriterOptions = + OpenTelemetryLogWriterSetupOptions & { + useContextManager?: boolean; + }; + +export class OpenTelemetryLogWriter implements LogWriter { + private logger: Logger; + private useContextManager: boolean; + + constructor(options: OpenTelemetryLogWriterOptions) { + this.useContextManager = options.useContextManager ?? true; + + if ('logger' in options) { + this.logger = options.logger; + return; + } + + if ('provider' in options) { + if ( + 'register' in options.provider && + typeof options.provider.register === 'function' + ) { + options.provider.register(); + } else { + logs.setGlobalLoggerProvider(options.provider); + } + } else { + const processors = options.processors ?? []; + + if (options.exporter) { + if (options.batching !== false) { + processors.push( + new BatchLogRecordProcessor( + options.exporter, + options.batching === true ? {} : options.batching, + ), + ); + } + processors.push(new SimpleLogRecordProcessor(options.exporter)); + } + + if (options.console) { + processors.push( + new SimpleLogRecordProcessor(new ConsoleLogRecordExporter()), + ); + } + + logs.setGlobalLoggerProvider( + new LoggerProvider({ + ...options, + processors, + }), + ); + } + + this.logger = logs.getLogger('gateway'); + } + + flush(): void | Promise { + const provider = logs.getLoggerProvider(); + if ('forceFlush' in provider && typeof provider.forceFlush === 'function') { + provider.forceFlush(); + } + } + + write( + level: LogLevel, + attrs: Attributes | null | undefined, + msg: string | null | undefined, + ): void | Promise { + const attributes = Array.isArray(attrs) + ? { ...attrs } + : (attrs ?? undefined); + + return this.logger.emit({ + body: msg, + attributes: attributes, + severityNumber: HIVE_LOG_LEVEL_NUMBERS[level], + severityText: level, + context: this.useContextManager + ? context.active() + : getContextForRequest(attributes), + }); + } +} + +export const HIVE_LOG_LEVEL_NUMBERS = { + trace: SeverityNumber.TRACE, + debug: SeverityNumber.DEBUG, + info: SeverityNumber.INFO, + warn: SeverityNumber.WARN, + error: SeverityNumber.ERROR, +}; + +export function getContextForRequest(attributes?: { + requestId?: string; +}): Context { + if (!attributes?.requestId) { + return ROOT_CONTEXT; + } + + return otelCtxForRequestId.get(attributes.requestId) ?? ROOT_CONTEXT; +} diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 1ba026224..9f1a7a5c0 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -5,6 +5,10 @@ import { Logger, type GatewayPlugin, } from '@graphql-hive/gateway-runtime'; +import { + loggerForRequest, + requestIdByRequest, +} from '@graphql-hive/logger/request'; import { getHeadersObj } from '@graphql-mesh/utils'; import { ExecutionRequest, fakePromise } from '@graphql-tools/utils'; import { @@ -191,6 +195,8 @@ export type OpenTelemetryGatewayPluginOptions = { }; }; +export const otelCtxForRequestId = new Map(); + const HeadersTextMapGetter: TextMapGetter = { keys(carrier) { return [...carrier.keys()]; @@ -667,6 +673,27 @@ export function useOpenTelemetry( ); }, + onRequest({ state, request }) { + try { + const requestId = requestIdByRequest.get(request); + if (requestId) { + loggerForRequest(options.log.child({ requestId }), request); + + // When running in a runtime without a context manager, we have to keep track of the + // span correlated to a log manually. For now, we just link all logs for a request to + // the HTTP root span + if (!useContextManager) { + otelCtxForRequestId.set(requestId, getContext(state)); + } + } + } catch (error) { + pluginLogger.error( + { error }, + 'Error while setting up logger for request', + ); + } + }, + onEnveloped({ state, extendContext }) { extendContext({ openTelemetry: { @@ -695,12 +722,20 @@ export function useOpenTelemetry( } : undefined, - onResponse({ response, state }) { + onResponse({ response, request, state }) { try { state.forRequest.otel && setResponseAttributes(state.forRequest.otel.root, response); + + // Clean up Logging context tracking for runtimes without context manager + if (!useContextManager) { + const requestId = requestIdByRequest.get(request); + if (requestId) { + otelCtxForRequestId.delete(requestId); + } + } } catch (error) { - pluginLogger!.error('Failed to end http span', { error }); + pluginLogger!.error({ error }, 'Failed to end http span'); } }, diff --git a/packages/plugins/opentelemetry/src/setup.ts b/packages/plugins/opentelemetry/src/setup.ts index 19a037bc7..1cdd8d133 100644 --- a/packages/plugins/opentelemetry/src/setup.ts +++ b/packages/plugins/opentelemetry/src/setup.ts @@ -35,6 +35,8 @@ import { getEnvVar } from './utils'; export * from './attributes'; +export * from './log-writer'; + // @inject-version globalThis.__OTEL_PLUGIN_VERSION__ here type TracingOptions = { diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index d6812d445..61891f469 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -1,9 +1,16 @@ -import { openTelemetrySetup } from '@graphql-mesh/plugin-opentelemetry/setup'; +import { Logger } from '@graphql-hive/logger'; +import { loggerForRequest } from '@graphql-hive/logger/request'; import { + OpenTelemetryLogWriter, + openTelemetrySetup, +} from '@graphql-mesh/plugin-opentelemetry/setup'; +import { + ROOT_CONTEXT, SpanStatusCode, TextMapPropagator, TracerProvider, } from '@opentelemetry/api'; +import { SeverityNumber } from '@opentelemetry/api-logs'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; import { CompositePropagator, @@ -12,6 +19,11 @@ import { } from '@opentelemetry/core'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'; import { resourceFromAttributes } from '@opentelemetry/resources'; +import { + LoggerProvider, + LogRecordExporter, + LogRecordProcessor, +} from '@opentelemetry/sdk-logs'; import { AlwaysOffSampler, AlwaysOnSampler, @@ -23,7 +35,7 @@ import { SpanProcessor, TraceIdRatioBasedSampler, } from '@opentelemetry/sdk-trace-base'; -import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { beforeEach, describe, expect, it, MockedFunction, vi } from 'vitest'; import type { OpenTelemetryContextExtension } from '../src/plugin'; import { buildTestGateway, @@ -34,6 +46,7 @@ import { getSampler, getSpanProcessors, getTracerProvider, + MockLogRecordExporter, setupOtelForTests, spanExporter, } from './utils'; @@ -833,4 +846,249 @@ describe('useOpenTelemetry', () => { ]); }); }); + + describe('logging', () => { + beforeEach(() => { + disableAll(); + }); + + describe('setup', () => { + beforeEach(() => { + disableAll(); + }); + + it('should allow to use a given logger', () => { + const logger = { emit: vi.fn() }; + const log = new Logger({ + writers: [ + new OpenTelemetryLogWriter({ + logger, + }), + ], + }); + + log.info({ foo: 'bar' }, 'test'); + + expect(logger.emit).toHaveBeenCalledWith({ + severityText: 'info', + severityNumber: SeverityNumber.INFO, + body: 'test', + attributes: { foo: 'bar' }, + context: ROOT_CONTEXT, + }); + }); + + it('should allow to use a provider', () => { + const processor: LogRecordProcessor = { + onEmit: vi.fn(), + forceFlush: vi.fn(), + shutdown: vi.fn(), + }; + const provider = new LoggerProvider({ processors: [processor] }); + const log = new Logger({ + writers: [ + new OpenTelemetryLogWriter({ + provider, + }), + ], + }); + + log.info({ foo: 'bar' }, 'test'); + + expect(processor.onEmit).toHaveBeenCalled(); + expect( + (processor.onEmit as MockedFunction) + .mock.calls[0]![0], + ).toMatchObject({ + severityText: 'info', + severityNumber: SeverityNumber.INFO, + body: 'test', + attributes: { foo: 'bar' }, + }); + }); + + it('should allow to provide a processor', () => { + const processor: LogRecordProcessor = { + onEmit: vi.fn(), + forceFlush: vi.fn(), + shutdown: vi.fn(), + }; + const log = new Logger({ + writers: [ + new OpenTelemetryLogWriter({ + processors: [processor], + }), + ], + }); + + log.info({ foo: 'bar' }, 'test'); + + expect(processor.onEmit).toHaveBeenCalled(); + expect( + (processor.onEmit as MockedFunction) + .mock.calls[0]![0], + ).toMatchObject({ + severityText: 'info', + severityNumber: SeverityNumber.INFO, + body: 'test', + attributes: { foo: 'bar' }, + }); + }); + + it('should allow to use an exporter', () => { + const exportFn = vi.fn(); + const exporter: LogRecordExporter = { + export: exportFn, + shutdown: vi.fn(), + }; + + const log = new Logger({ + writers: [ + new OpenTelemetryLogWriter({ + exporter, + batching: false, + }), + ], + }); + + log.info({ foo: 'bar' }, 'test'); + + expect(exportFn).toHaveBeenCalled(); + expect(exportFn.mock.calls[0]![0]).toMatchObject([ + { + severityText: 'info', + severityNumber: SeverityNumber.INFO, + body: 'test', + attributes: { foo: 'bar' }, + }, + ]); + }); + }); + + describe('logs correlation with span', () => { + const hooks = [ + 'onRequest', + 'onParams', + 'onParse', + 'onContextBuilding', + 'onValidate', + 'onExecute', + 'onSubgraphExecute', + 'onFetch', + ]; + const exporter = new MockLogRecordExporter(); + + const buildTestGatewayForLogs = ({ + useContextManager, + }: { useContextManager?: boolean } = {}) => + buildTestGateway({ + options: { useContextManager }, + gatewayOptions: { + logging: new Logger({ + writers: [ + new OpenTelemetryLogWriter({ + useContextManager, + exporter, + batching: false, + }), + ], + }), + }, + plugins: (_, ctx) => { + const createHook = (name: string): any => ({ + [name]: (payload: any) => { + let log = ctx.log; + const context = + payload.context ?? payload.executionRequest?.context; + const request = payload.request ?? context?.request; + if (request) { + log = loggerForRequest(log, request) ?? log; + } + if (payload.context) { + log = payload.context.log ?? log; + } + + const phase = + (name as string).charAt(2).toLowerCase() + + (name as string).substring(3); + log.info({ phase }, name); + }, + }); + + let plugin = {}; + for (let hook of hooks) { + plugin = { ...plugin, ...createHook(hook) }; + } + + return [plugin]; + }, + }); + + beforeEach(() => { + disableAll(); + exporter.reset(); + }); + + it('should correlate logs with spans with context manager', async () => { + setupOtelForTests(); + + await using gateway = await buildTestGatewayForLogs(); + await gateway.query(); + + const expectedLogs = { + 'POST /graphql': 'onRequest', + 'graphql.operation Anonymous': 'onParams', + 'graphql.parse': 'onParse', + 'graphql.validate': 'onValidate', + 'graphql.context': 'onContextBuilding', + 'graphql.execute': 'onExecute', + 'subgraph.execute (upstream)': 'onSubgraphExecute', + 'http.fetch': 'onFetch', + }; + + Object.entries(expectedLogs).forEach(([spanName, hook]) => { + const span = spanExporter.assertSpanWithName(spanName); + const logs = exporter.getLogsForSpan(span.id); + const phase = hook.charAt(2).toLowerCase() + hook.substring(3); + // @ts-expect-error Access to private field. public `body` seems to not be readable (returns undefined) + const log = logs.find((log) => log._body === hook); + if (!log) { + console.error( + `${hook} log not found. Logs for ${spanName} were`, + logs, + ); + throw new Error(`${hook} log not found`); + } + + expect(log.attributes).toMatchObject({ phase }); + }); + }); + + it('should correlate logs with root http span without a context manager', async () => { + setupOtelForTests({ contextManager: false }); + + await using gateway = await buildTestGatewayForLogs({ + useContextManager: false, + }); + await gateway.query(); + + const httpSpan = spanExporter.assertRoot('POST /graphql'); + const logs = exporter.getLogsForSpan(httpSpan.span.id); + for (let hook of hooks) { + const phase = hook.charAt(2).toLowerCase() + hook.substring(3); + // @ts-expect-error access to private field + const log = logs.find(({ _body: body }) => body === hook); + if (!log) { + console.error( + `missing log for ${hook}. Logs were:`, + exporter.records, + ); + throw new Error(`missing log for ${hook}`); + } + expect(log).toBeDefined(); + expect(log?.attributes).toMatchObject({ phase }); + } + }); + }); + }); }); diff --git a/packages/plugins/opentelemetry/tests/utils.ts b/packages/plugins/opentelemetry/tests/utils.ts index af4f1a124..72a168f95 100644 --- a/packages/plugins/opentelemetry/tests/utils.ts +++ b/packages/plugins/opentelemetry/tests/utils.ts @@ -14,8 +14,10 @@ import { TraceState, type TextMapPropagator, } from '@opentelemetry/api'; +import { logs } from '@opentelemetry/api-logs'; import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks'; import { ExportResultCode, type ExportResult } from '@opentelemetry/core'; +import { LogRecordExporter, ReadableLogRecord } from '@opentelemetry/sdk-logs'; import { BasicTracerProvider, SimpleSpanProcessor, @@ -134,11 +136,7 @@ export async function buildTestGateway( } export class MockSpanExporter implements SpanExporter { - spans: Span[]; - - constructor() { - this.spans = []; - } + spans: Span[] = []; export( spans: ReadableSpan[], @@ -195,7 +193,9 @@ export class MockSpanExporter implements SpanExporter { }; assertSpanWithName = (name: string) => { - expect(this.spans.map(({ name }) => name)).toContain(name); + const span = this.spans.find((span) => span.name === name); + expect(span).toBeDefined(); + return span!; }; toString() { @@ -244,9 +244,15 @@ const traceProvider = new BasicTracerProvider({ spanProcessors: [new SimpleSpanProcessor(spanExporter)], }); -export function setupOtelForTests() { +export function setupOtelForTests({ + contextManager, +}: { + contextManager?: boolean; +} = {}) { trace.setGlobalTracerProvider(traceProvider); - context.setGlobalContextManager(new AsyncLocalStorageContextManager()); + if (contextManager !== false) { + context.setGlobalContextManager(new AsyncLocalStorageContextManager()); + } } export const getContextManager = () => { @@ -293,4 +299,50 @@ export const disableAll = () => { propagation.disable(); metrics.disable(); diag.disable(); + logs.disable(); +}; + +export class MockLogRecordExporter implements LogRecordExporter { + records: LogRecord[] = []; + + export( + logs: ReadableLogRecord[], + resultCallback: (result: ExportResult) => void, + ): void { + this.records.push( + ...logs.map((record) => ({ + ...record, + traceId: record.spanContext?.traceId, + spanId: record.spanContext?.spanId, + })), + ); + resultCallback({ code: ExportResultCode.SUCCESS }); + } + + shutdown(): Promise { + this.reset(); + return Promise.resolve(); + } + + forceFlush(): Promise { + this.reset(); + return Promise.resolve(); + } + + reset() { + this.records = []; + } + + getLogsForSpan(spanId: string) { + return this.records.filter((record) => record.spanId === spanId); + } + + getLogsForTrace(traceId: string) { + return this.records.filter((record) => record.traceId === traceId); + } +} + +export type LogRecord = ReadableLogRecord & { + traceId?: string; + spanId?: string; }; diff --git a/yarn.lock b/yarn.lock index e9af88420..d9dc452da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4198,6 +4198,7 @@ __metadata: "@graphql-tools/utils": "npm:^10.8.1" "@graphql-yoga/render-graphiql": "npm:^5.15.1" "@opentelemetry/api": "npm:^1.9.0" + "@opentelemetry/api-logs": "npm:^0.202.0" "@opentelemetry/context-zone": "npm:^2.0.1" "@opentelemetry/core": "npm:^2.0.1" "@opentelemetry/exporter-jaeger": "npm:^2.0.1" @@ -4205,6 +4206,7 @@ __metadata: "@opentelemetry/propagator-b3": "npm:^2.0.1" "@opentelemetry/propagator-jaeger": "npm:^2.0.1" "@opentelemetry/sampler-jaeger-remote": "npm:^0.202.0" + "@opentelemetry/sdk-logs": "npm:^0.202.0" "@opentelemetry/sdk-metrics": "npm:^2.0.1" "@rollup/plugin-commonjs": "npm:^28.0.0" "@rollup/plugin-json": "npm:^6.1.0" @@ -4280,6 +4282,7 @@ __metadata: resolution: "@graphql-hive/nestjs@workspace:packages/nestjs" dependencies: "@graphql-hive/gateway": "workspace:^" + "@graphql-hive/logger": "workspace:^" "@graphql-mesh/types": "npm:^0.104.5" "@graphql-tools/utils": "npm:^10.8.1" "@nestjs/common": "npm:11.1.3" @@ -4660,12 +4663,14 @@ __metadata: resolution: "@graphql-mesh/plugin-opentelemetry@workspace:packages/plugins/opentelemetry" dependencies: "@graphql-hive/gateway-runtime": "workspace:^" + "@graphql-hive/logger": "workspace:^" "@graphql-mesh/cross-helpers": "npm:^0.4.10" "@graphql-mesh/transport-common": "workspace:^" "@graphql-mesh/types": "npm:^0.104.5" "@graphql-mesh/utils": "npm:^0.104.5" "@graphql-tools/utils": "npm:^10.8.1" "@opentelemetry/api": "npm:^1.9.0" + "@opentelemetry/api-logs": "npm:^0.202.0" "@opentelemetry/auto-instrumentations-node": "npm:^0.60.1" "@opentelemetry/context-async-hooks": "npm:^2.0.1" "@opentelemetry/core": "npm:^2.0.1" @@ -4673,6 +4678,7 @@ __metadata: "@opentelemetry/exporter-trace-otlp-http": "npm:^0.202.0" "@opentelemetry/instrumentation": "npm:^0.202.0" "@opentelemetry/resources": "npm:^2.0.1" + "@opentelemetry/sdk-logs": "npm:^0.202.0" "@opentelemetry/sdk-node": "npm:^0.202.0" "@opentelemetry/sdk-trace-base": "npm:^2.0.1" "@opentelemetry/semantic-conventions": "npm:^1.34.0" @@ -7760,7 +7766,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-logs@npm:0.202.0": +"@opentelemetry/sdk-logs@npm:0.202.0, @opentelemetry/sdk-logs@npm:^0.202.0": version: 0.202.0 resolution: "@opentelemetry/sdk-logs@npm:0.202.0" dependencies: From 4c1099125c75ee57892366ee017aca87ce2b26b9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 10 Jul 2025 08:48:56 +0000 Subject: [PATCH 45/60] chore(dependencies): updated changesets for modified dependencies --- .changeset/@graphql-hive_gateway-956-dependencies.md | 2 ++ .changeset/@graphql-hive_nestjs-956-dependencies.md | 7 +++++++ .../@graphql-mesh_plugin-opentelemetry-956-dependencies.md | 3 +++ 3 files changed, 12 insertions(+) create mode 100644 .changeset/@graphql-hive_nestjs-956-dependencies.md diff --git a/.changeset/@graphql-hive_gateway-956-dependencies.md b/.changeset/@graphql-hive_gateway-956-dependencies.md index 5296db288..abfa62910 100644 --- a/.changeset/@graphql-hive_gateway-956-dependencies.md +++ b/.changeset/@graphql-hive_gateway-956-dependencies.md @@ -6,6 +6,7 @@ dependencies updates: - Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) - Added dependency [`@opentelemetry/api@^1.9.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api/v/1.9.0) (to `dependencies`) +- Added dependency [`@opentelemetry/api-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api-logs/v/0.202.0) (to `dependencies`) - Added dependency [`@opentelemetry/context-zone@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-zone/v/2.0.1) (to `dependencies`) - Added dependency [`@opentelemetry/core@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.1) (to `dependencies`) - Added dependency [`@opentelemetry/exporter-jaeger@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-jaeger/v/2.0.1) (to `dependencies`) @@ -13,5 +14,6 @@ dependencies updates: - Added dependency [`@opentelemetry/propagator-b3@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/propagator-b3/v/2.0.1) (to `dependencies`) - Added dependency [`@opentelemetry/propagator-jaeger@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/propagator-jaeger/v/2.0.1) (to `dependencies`) - Added dependency [`@opentelemetry/sampler-jaeger-remote@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sampler-jaeger-remote/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-logs/v/0.202.0) (to `dependencies`) - Added dependency [`@opentelemetry/sdk-metrics@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-metrics/v/2.0.1) (to `dependencies`) - Removed dependency [`@graphql-mesh/plugin-mock@^0.105.6` ↗︎](https://www.npmjs.com/package/@graphql-mesh/plugin-mock/v/0.105.6) (from `dependencies`) diff --git a/.changeset/@graphql-hive_nestjs-956-dependencies.md b/.changeset/@graphql-hive_nestjs-956-dependencies.md new file mode 100644 index 000000000..0af93d273 --- /dev/null +++ b/.changeset/@graphql-hive_nestjs-956-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/nestjs': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md index 90da13fba..b44729e9c 100644 --- a/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-956-dependencies.md @@ -12,8 +12,11 @@ dependencies updates: - Updated dependency [`@opentelemetry/sdk-trace-base@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.1) (from `^1.29.0`, in `dependencies`) - Updated dependency [`@opentelemetry/semantic-conventions@^1.34.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.34.0) (from `^1.28.0`, in `dependencies`) - Updated dependency [`@whatwg-node/promise-helpers@1.3.0` ↗︎](https://www.npmjs.com/package/@whatwg-node/promise-helpers/v/1.3.0) (from `^1.3.0`, in `dependencies`) +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Added dependency [`@opentelemetry/api-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api-logs/v/0.202.0) (to `dependencies`) - Added dependency [`@opentelemetry/auto-instrumentations-node@^0.60.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.60.1) (to `dependencies`) - Added dependency [`@opentelemetry/context-async-hooks@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-logs/v/0.202.0) (to `dependencies`) - Added dependency [`@opentelemetry/sdk-node@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.202.0) (to `dependencies`) - Removed dependency [`@azure/monitor-opentelemetry-exporter@^1.0.0-beta.27` ↗︎](https://www.npmjs.com/package/@azure/monitor-opentelemetry-exporter/v/1.0.0) (from `dependencies`) - Removed dependency [`@opentelemetry/exporter-zipkin@^1.29.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/1.29.0) (from `dependencies`) From cfbffca7505d422620c3935e9631fc94a7d074d8 Mon Sep 17 00:00:00 2001 From: theguild-bot Date: Thu, 10 Jul 2025 08:51:23 +0000 Subject: [PATCH 46/60] docs(examples): converted from e2es --- examples/file-upload/example.tar.gz | Bin 66483 -> 66544 bytes examples/hmac-auth-https/example.tar.gz | Bin 80451 -> 80828 bytes examples/hmac-auth-https/package.json | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/file-upload/example.tar.gz b/examples/file-upload/example.tar.gz index b65b10100756b723a133d9bdcc83d5afbbd4470a..a3d91f53f7b9450c3ba459f8817e13f6e5d5661b 100644 GIT binary patch delta 66088 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 aAqavX2!bF8f*=Tj_&;9hc+(>Q*aQHOhBt-) delta 65981 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 UF`$4C|7#dRM0yW1++bk<0Pbumm;e9( diff --git a/examples/hmac-auth-https/example.tar.gz b/examples/hmac-auth-https/example.tar.gz index e9d14b849edada846a1368fcd4654c33a8bb7ba8..103737613be67f85a8e1a4dea61f3ea8513e4b4b 100644 GIT binary patch literal 80828 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 z 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 literal 80451 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

h1j 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 Date: Fri, 11 Jul 2025 22:25:09 +0200 Subject: [PATCH 47/60] No details landing page and improvements around it (#1315) Co-authored-by: theguild-bot --- .changeset/strong-islands-laugh.md | 5 + .prettierignore | 2 +- examples/extra-fields/example.tar.gz | Bin 66594 -> 66596 bytes examples/hmac-auth-https/example.tar.gz | Bin 80828 -> 80839 bytes .../example.tar.gz | Bin 66971 -> 66970 bytes .../example.tar.gz | Bin 67093 -> 67094 bytes examples/type-merging-batching/example.tar.gz | Bin 67060 -> 67062 bytes packages/gateway/src/cli.ts | 5 +- packages/runtime/assets/icon-256x256.png | Bin 0 -> 53508 bytes packages/runtime/assets/icon.png | Bin 0 -> 163983 bytes packages/runtime/assets/logo.svg | 11 + packages/runtime/package.json | 9 +- packages/runtime/scripts/LandingPage.css | 184 ++++++++++++++++ packages/runtime/scripts/LandingPage.tsx | 206 ++++++++++++++++++ .../scripts/generate-landing-page-html.ts | 25 --- .../runtime/scripts/render-landing-page.tsx | 39 ++++ .../runtime/scripts/serve-landing-page.tsx | 22 ++ packages/runtime/src/createGatewayRuntime.ts | 182 +++------------- packages/runtime/src/getReportingPlugin.ts | 65 +++--- packages/runtime/src/landing-page-html.ts | 1 - .../runtime/src/landing-page.generated.ts | 3 + packages/runtime/src/landing-page.html | 204 ----------------- packages/runtime/src/productLogo.ts | 16 -- packages/runtime/tests/hive.spec.ts | 12 - tsconfig.json | 2 + yarn.lock | 54 +++++ 26 files changed, 598 insertions(+), 449 deletions(-) create mode 100644 .changeset/strong-islands-laugh.md create mode 100644 packages/runtime/assets/icon-256x256.png create mode 100644 packages/runtime/assets/icon.png create mode 100644 packages/runtime/assets/logo.svg create mode 100644 packages/runtime/scripts/LandingPage.css create mode 100644 packages/runtime/scripts/LandingPage.tsx delete mode 100644 packages/runtime/scripts/generate-landing-page-html.ts create mode 100644 packages/runtime/scripts/render-landing-page.tsx create mode 100644 packages/runtime/scripts/serve-landing-page.tsx delete mode 100644 packages/runtime/src/landing-page-html.ts create mode 100644 packages/runtime/src/landing-page.generated.ts delete mode 100644 packages/runtime/src/landing-page.html delete mode 100644 packages/runtime/src/productLogo.ts diff --git a/.changeset/strong-islands-laugh.md b/.changeset/strong-islands-laugh.md new file mode 100644 index 000000000..dc29b6756 --- /dev/null +++ b/.changeset/strong-islands-laugh.md @@ -0,0 +1,5 @@ +--- +'@graphql-hive/gateway-runtime': minor +--- + +No details landing page and improvements around it diff --git a/.prettierignore b/.prettierignore index d2c6c10b1..93367e2d6 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,7 +1,7 @@ .yarn/* !.yarn/custom-plugins Dockerfile -packages/runtime/src/landing-page-html.ts +packages/runtime/src/landing-page.generated.ts __generated__ .changeset/* !.changeset/README.md diff --git a/examples/extra-fields/example.tar.gz b/examples/extra-fields/example.tar.gz index 852bc9e429ab9f7636a16e531acf443f785509dd..aac0985369a049c1fb0053d01f7709e06400f281 100644 GIT binary patch literal 66596 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

I^_ucKiqmX@ebAAy5YfxKhT-I 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 O82kXwbuk?P*aQHXRxVWl literal 66594 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�{;GR*+UmKB0RO-7sX1iGu_@D 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 MJ+?urdjQx30HSe2761SM diff --git a/examples/hmac-auth-https/example.tar.gz b/examples/hmac-auth-https/example.tar.gz index 103737613be67f85a8e1a4dea61f3ea8513e4b4b..cbf288271b84cc4ac51046338d34234a72569485 100644 GIT binary patch delta 72875 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�)b9$hmvXC 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 z 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 diff --git a/examples/interface-additional-resolvers/example.tar.gz b/examples/interface-additional-resolvers/example.tar.gz index a6a446eaf1b3ac4fc6c1e9968cd21c106eff5d0a..2a6936fcaa65d82758d86074e3d4ecf7f7568e6c 100644 GIT binary patch delta 47656 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 delta 47686 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μ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 delta 65965 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

B^&QM;V>u_Zz+%LlhX)IfDq6jb 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

~vHcazC^{?YN4HyQ;W-1Jmf-=vkbX&)V- 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

_J%YQBJ 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

^B?>Mxihlhx=raat|)6v17+r+>d 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®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 M0j}(jw*c4#01mJc?EnA( diff --git a/packages/gateway/src/cli.ts b/packages/gateway/src/cli.ts index f1b549518..25ea18296 100644 --- a/packages/gateway/src/cli.ts +++ b/packages/gateway/src/cli.ts @@ -224,7 +224,7 @@ export interface CLIContext { log: Logger; /** @default 'Hive Gateway' */ productName: string; - /** @default 'Federated GraphQL Gateway' */ + /** @default 'Unify and accelerate your data graph across diverse services with Hive Gateway, which seamlessly integrates with Apollo Federation.' */ productDescription: string; /** @default '@graphql-hive/gateway' */ productPackageName: string; @@ -405,7 +405,8 @@ export async function run(userCtx: Partial) { const ctx: CLIContext = { log: userCtx.log || new Logger(), productName: 'Hive Gateway', - productDescription: 'Federated GraphQL Gateway', + productDescription: + 'Unify and accelerate your data graph across diverse services with Hive Gateway, which seamlessly integrates with Apollo Federation.', productPackageName: '@graphql-hive/gateway', productLink: 'https://the-guild.dev/graphql/hive/docs/gateway', binName: 'hive-gateway', diff --git a/packages/runtime/assets/icon-256x256.png b/packages/runtime/assets/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..2e07863e828a118ed533a4a3d5aac45d1519927d GIT binary patch literal 53508 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

}A>*kJ-yTp$q|D$QDr2rA&JJ9|_dszbFj5TvQ& zZc}CnHu5x;7Gpx!A@B>;RcEi_4_D!4Pyh4BPYfNst^W5Rh6Mg4enBlahWGyUYgK`O z>#2yx{$pyrS+E!#tuxb|h`&RQBMQ>-y~I-RtTP@ zFU8yrvVDc=xUl6myQ1==qA0n9z?x*C$4WKrZ@=CMvJ{FIqy)l3&}wNF#4*~bu%JKN z&4sT7;8mm zU()C^%xYGZeY>4RG;FRyX^v9F!W4@OYN8`<}4J|-Vt_3c} zSTl#|FpnOK`j&J158_;>EGa4|LxL1Pn_m|C{`3i;POn4x{u4z&COC1bW8RT33YI1# zNHZaB{)d>+>t5>Ok(9vO{g#bcQc@E_F{^4q`b={3XhnfPa?K z+>h#cM#sqqVS1+kTWA)IroFemb!?^L36dZbxn~bd(vh{~7+G>6C^Ar@DYfI>*qUj_;evQ)WMv?qFsJI8H zlhWb{6a2Zpxd^K*OWR|irRjYcJa|xzyN6jWgaPJMaiiC>zP=c5X{StGj1`;I%r^U$ zrZ)HfES|68{np9xpkx2&ktX3UQ2zPBJ4vmEj386@0!Dx-6~9oN!lPfJp8d*?9=`1m zkFu13R36kmLpS%oHiWV>2@8~=$3w~$>hK4?f+O?u6igcqLeLo}_Uh!6+6o+6pb7!A zA4DX*@y-Jy3*M8jp{z<1a&a~Ym@pFK%Vi3UgO7d-1m>nQ{2KI(jjc?oOh;Q#AlCNN zsEJ3OD*swvNrHF9o`(`^r-%u21jM1NS8zllqlQLs9rJEtzQFZ1-Z#Si;&F4fxj#8h zEiFaAhQBUM+~1ZuoN#GBLiTmO5U4pqt(v)ONRwX$MN`w<#wjL~EnHv?R2dr4$L8@I zvk}Z;Dg>67Rc;f28_BzQUZK&!h}o3>v_Yn+sd9vgmRG`2Ew+ibi80u9AYo#`NpcG` zBvGj6L+o{q>6!k@qW(gd!}ZRnY9}{D0H5f z@1$2RgQ$tb`VUDk5%W!W(Q}_{D=3;UMM+It$({vZE|4K4{nhN4?DOSi$d?wZt#vuo zReJXLW3`s60GGeHrESfocF~9HgEw}WMFesl?Iu+LT**;A0VAh9uj5)c<_0uEw@hQc z-+nk#V_9<&6mF`81}lPtETtZFShXpyo=bx=U@6_y%!vpz?>o)Ch-IFh;$Q9BjfEs8 zv7{C8IAmY6UKu1*FO~XacSl2;%X_6w?edRII3#yO6q7@%6zS8)l3(x zrBmHtUcgnU8j0;4v&xIqTdjJ3v!#^T3lLMTm2@%f#0Swi!%Y< zIs?=G0HGt`xb8SIkos*P-cmpHv-;E5k4ft{e)B`(6B>b zXjx>51yRjF$h#F_DDZXO!7#=V@lblNO@LzL?_BhWPRh$OCcv!v>DynFHbm$KC@7Mt zAQ+k&YZQ>Yw2@ywN+R)4OB&u8^R4wE8rQZ^9R-1u?;7zRyfM6uV<4A60-Qsx~m~++2p}qQ5rA0 zgSd;4QG!=95XS#4OyoO*>F=97+CHn_s!Y*jW62UN}4@7Nf62DRK+P7!FJ-BcD}HHnJJelR74 zzu`L6(347>Itx4=Mtc7kM70y3ZBp@BedszYg^HrM8IMYX0@Ts9IpOd}6+TV1j_bPwLRdC&0IG zh5AMZiOKP)0PJdNog>@shqjAgHa)3ii_s3-oA1n6b;x1Yp|C9J!h&ZwUUR?6`#zp> zU!U8qgf3fZS34cmn(Nv|0u}ifH0j4|ZOEY7Es|0=&;%UswC+QqaL+$({xYqb+%bN4 zuP$gotxRjAP_rCc>s!PKGDAoL2`U|22ooHShyBj%gO*lRq+m2K%t78`k2=(A+eDQH91L;yH3L%3>t~^5+8UP z!WE4ypj?vLevZgjI4G;{Si_Mr)JSR}zsOY=?m z@nTrESu)Gc`YJ%=b$AhR85<8SoPUN0O=VjNle?X#z^^?ZYUWUtcE@ooW68dt)(&kl zIKj$kr90W1(Q@@hvALtIPt3>nm}_VK;e557hU*B*V1iCwmK$a!T>Ax6U?Hn)ojEP;Tai-1h^}GZS&ej?M;|F7@Pyu&=BJK^P-LLU zG*P4`Yt$rA=`;m&;IH8U!J8(~#PNYBPZhPil4uB)G-$bwSQou-6qb5eC&VPLL$?M= zl@O0zZ~==_oB##Faf_jJb!Q&2qhhH7r({RmFKf-dM>^Wp<?m`~l`Wg`VF?N) zxBbQOl@&uhdq7VkhZt27B;_*NF=4EclMB6+8F(9Bxq`?49v64okGv zh!algMuArM+lkMB1A=0IXJ*1s9`kIB0$Z9Xqn$K3&9C@&1+XK~1r+38L)1{N<^Hgd z-|BSODy(xgLFu@I{FHfTZv@D=D#*AD>Fj2wg~14QlP z@_8eB@a%kS{}zg)1^yL<8AOUH6jYzaeQTw>+8Nrps9{b~HmV5Quz zqq;r$s%2p@V-QtHW$G5h8;@E86tSlX;GwY2${LE;atnP(^A#pxE&wNpn5yKu)anCy zGb0OM!{h}EgM9@N5Rvq&m1)0Gp~yw-RfpD{)e_^zz>=PXSVEP_A0AG|`EKC)WnahS z%CX}8xB6m}K4W)s$13ahuDrYE1S?)Tl%9tn`E0@Xp%M2N(A1MmqA)sJjZN*pO(g|& z^e7^~%J<^f)MFLX_F5%mIh3qtu1>1{Ha86Y}Hcegxb5ft-#Ps1O%dc4|ovMVp3gBT>q<4165})Zf$MV7{@iMHKF^~ttHhAMumcc z9vnk(1EiS^k(2?oa=r*(m>j%k3rVzQP?|B zg@9!2=g(iu*`yemN#+I?T0*)?jA(JTV7Ak68rKK%{d+Cc_8f2(5TqbTu=%OKY4!Pq z>8Nqk2nN%*A#&uEjO#>Sh|mw5=@A#ro=VV1(E>7ueTWkXf0Dq)8 z6NY-I3CYQ8npCub;6b^T+p3A)ths91mM|{Qx+M!vTsrh5>If12)NTRDh9LlH}s^lH5 zb;)#XI@u$E0P?S-LpG3D9-)eLF)3wn0+5HP$&?Ur6kJ0ypKHhfii9{D!K95J`@Ot13VBf7*+y*>X>-}k!- zr9h5osaXE^VJqvc`|t{6Zs-IwUJf47<1sS-(i1u@$i2iUk93A_his^F5Y04JM1L#r zj`w23r-rumsnOJ(UppWfdh?ZCY=QzNF*DWOepEF#10JO-P@E!aF*)WZy#OL`kp4MC zd88^dAQuT8b`Dl#5V>JqdNmvw`O=0%SaPiPI<>_a$gn(RYoLy?lDb=kp-0BzeJtB) z%&y^@GmOte4D3kI{~uHDz#dl{uxn3j+qSKVZKqLV+cp~8wv)!z#Eos+Y}BCr^1Sc2 z_pyJ&x@XOO>0FgR2Qej9qMV|NK-B0bPPWlPP)?wZCKrPwzs&h%u>;o@p>Q=UXX5YT z`hnQa;TKl9+NaW)FcM`qA3=2?b&>F+`GXfLcKfnGGkbm;Q~Pnu#1LUxxG}|Z8Gf!Z z8i^-fdDkjm~#^W*_%5 z;p8P*O`Q8dE-bS~yz)_a%^8Qu zQP$|c|Az$t^Yv&!SMQm|U>+I)!HO$=u|?Vi;E+2Qy($ zrAWj*J3G9iqoxm0wn+?35ZbqwGumjR6P6|${9c9C#!Tz!r6;U%<(jI$!XzdjJM=zK zR1EurFLl7_4A1hbaD^(V73NzeUDs&20+r;PHO$;Zj=b}Bxu5&w@>w~>O*P2Ks+m5l zw|Z$^O1tGp{+~3eK)*Q*m>y>OHm*$RQ}Qjz-pO!9oeThUlPm zX*NcqU`E8!2P3Ab!SmP!Hj|&)kYlcc=c=QUW3aqa)*;T8V14Ay9@MhGF5-MKS;{P5 zaAS`jIw;i->!8g=ffp~KBo3|e3QO=6>e7c{ld~N8Wu+FjQHq~H^a$LsJ&C6vDkVsp zJ#wj5{7az2=5v^j6%A$97lVNxB52n%)m%f~OJ5T{55N!&(qo}77E@4>qIwakGfLiz zoR2Q%a`BBbN2(^w7&g)1e`V-0Q|WIi(aeHUYeE{y`i9%Y0r9THgQ^0g z9|1%X4&Kn(pTp#TRrI8*KET9ejRS(>xvrC`}%Nw`A z5nSWufme)Y!Ta?PldHVvRPmC0!Sf99zgWUDZ0T{1I%?a8&p(bfbe6XdwXNj6G$)i>Xu`7kn7tP!lS#$^oN80GpVgx(fJ34up zuIb)BBA6<^ztji>xw;#HeZnp>@fk3|uxWYZ6b*b-g~XnMGp0dOFwOK` z`HybjMEV;^T0+kWN-!-o4kUaD9Iqz378ABgCw!=SUZ$1Hii>GGP)Vdm!U$RMU$Ts1 zezcwJlh&_CF*096lAZN2mLH{9$lhr?uv7IUt1qvAj0yy(Mm*3-ZDu7KDJNCPCC3N@ zOWK3U+f`=0=SF^)L zPzFOdd?_q_D>5^I-tdcrP%&FF&EW| zF^w53T>lB2#x~y)NbeMS*0gNw%7)dPX7GyxnywS+4g_}-^7Pm}eBTXW6L~w9xRv~k z)SjPUmkI_|4D zffRC_sH<`u4*sXSctVe3!Ig?LT7ur6^nJj#e);$zLd%1U5L|7fQz3II% z2bUNI4|l|Jpma|QsGHBIg0!yRnL7{#8(D3$BqlM0z_K*W_kq6xNlBrOEz;IHBpL(O z>*~-sKp*~%?ew^gln{2NHgz}y;+ zKX4JNwKBn0cF7^WIe?)<;o*{%qhHl7xXWMrfKY6bK{p$V4 z#d*A*rtFW^Zt;Y%P7@@Os7i`4mHrBp+0sU}s8c3RPk6R-_!4NDx@k#@x_Y`*lEWo1 z1ze&7XN6>tH|~XL<}Gb@eVH=0nlC7l0-avV^pLJV7fZ9{L@ER>*~yE*RzorxyPi#h z4j~jwk1;jrBj_yYr(7NMHadcjhcAKCgCRwkA}-1kz`NITwfDH`b9-UXcqpY*yTbz)z)_{)Pxvn5QHax96(JOQF^9|6PDmSk=}3>3nk>dBW7 zs~x{KBZmWH1>g2TL7>zDzNi5gQ=h*BF9}pR|DbOdnmJ06!rOfTqCR!`A1A$?z{I9p2|N3qk zD^T1GeNU&eggupr?0_JfrcpU;(6eQG!6>gt; zg3A%d&)N27ebS9Qky-dVNoMc4C%YMz!kQDv7ZS-SZ>>~f&j+M9tmlmgTRYom*IsHi zyl6z^0#nKTV~8S#=jhWjLfU9`;RL5?@fvC2H?t-TY)0|#7O*Rh#M~+c=b*yHr%k}8 zv=B|n8si_He z$Rgqu^no*^_(Zr0L^UneXoTNJGw_rer5L_V0$B`S;m*n6nFfs-kdu#VB^d3Kj*BPc zDP3sYwIP-%^Dn)xDCz3e)81H80gSK}xIDSc@arSVWTU%9S9eChLC$>Y%ZcYMqb2y` zJz1ewAuLrZ4Y^4EpkXDZuC|ZHqr=*chCPk4)_+IGye%jtWF&PD$>Y?SJV@mdP4s`Y z-(a+Cr)2tkQIES4vTQRZURzFP*v!LOoQT=)6PFRT9GDiQLq0!ydV!rDWB!tZYHkxL zPsk7ogLCE){%A=@2Rg@Pabmc z%6}8usYf*BG-6kfH+(L`a(&0&t!Y3R5D(*`XcJtBXZ*(5Gn@@Q9bdkFv`hv6JQBSl z)u`As-*7M=`(>5G^NUQcACeymcXmlRV`bIz681<5lW9Z15;s5ke25B=kv&NeYElr; zs*Z5S!)~2C`n;}OA*vB~a{ay1Ac9do5@oGWo9Tbpz6sr37>FMnna(zt4Z9hOn=KmG-Z2_2)ldR&`2r^1;$#WAej!kY+%* z9VYs>m^f2AA#G#uCVPN4A_MKhPT^s;x327X6a^T+m8+>=ax7QhK7;Fo^DmG-kgGPh zK+!Njxt5@~#18SRezsP%#g05jI60oX&?@L1*XfD<`e#8xYJk$=43iiFPBwQe=L+zk z5p+D=xd72a^T^5CihTAlHC%+~2tfZ|xBf3d1#<`On0KT!XTE^`u$5R#iC_TUhc}0i z&}QL4UpVx?8zO=3>&LJi{_V;kWPtEt9Yz6~O7zO!t`yJ5Yg3_SD8powR(&nj6{JPi zyA@5)F+j-^{M8Kr?X4uT0<{{E6SdjqJRNyVlx|AJrp(q@)3lmo8k%~~NX4Zmh`Z8q z@c(B+`3*NlkbS|X-?(ZT;lU(Nu*C!$$|taNTj)AVl(0v=b-=G9L~Xvs{yKh*#UC;F zs#j#rH{C@1pF&&P|5IpNTaN=?T;fA0qrgoV<5&EUB zQ zu^Pmv0PccIL$BN`frJ{oS=Qc2)n42ZzB?J6!R?dSJ~hp6gq)2`b>t$I-bU9-g+h(wVmL@V&%^-WJ!vD$nZ)KMVyv+`2YVgi{c#O$~ez5SSo# z^$Oqa&O!c!N?{*P zNY_?E6*-`LU;2KU*uy$+?PoF|df&y`xB&x{1#nHdFTV{`_T&;|bW3H1;XWg=F*Gnd zZ4R>i>FxS5D9_?{n!&sPAvJdX4#ja);ft#w@cUTla+-ux32w4nl0Og=3iP{CTY^6k z10g|PwD5n-FM718uI~)S+se_;_T;5fERMcvucVV)f`!W=VX%WU02k&kB;%9u-&}z~ zv8sa?1Tjy5y2;hO&kg5+6#`1e#aAg#R>9JyMjEMO7dTW4i&{1{pUS3C2pi1&89n{) z`$PkZFvuQ`CH=RZ`@UUSb$Z>V^?g%3D{nW?rwMN=&ePX&#D`R7@X}cmVUnR!mf+F} zP2ii;Jllgj(8tDP{0M~{sW|7G;f_1~{oVJz4p-P`jV1~S{g32Gep`!~WU-IhLgHw7 z!Tj?6VY$F8!1O+bk_e}A2cn}C5-1QhBzHPwyic1L2> zzsa0Fw7$kc@C4hCsU>i_BZX;ZhE(aS9^bUV~758 z+@8DMX-~N6T0~37fh_2E)RGQB4Cp+82^9UgOznEj#MsM=IzU%|ycKvw%R#Zr0OEz`QczjGW}W;@5kn#^Yx!nohFuX z%DuyaRMzs(bWD7Z0W`?0bHNqmJo2R6|G7S*+gr~L+33YjaU7 zptN94L9QzYp;wE(&AztA84tJEI>>l;cUSyzDpzP&s(WYxeK-`UE0xaK`AsvN+M^9I z!~PLzf8R5yT`bPM-B%yJ>w==ofGvAN9leSKKveJy>PE$<*C0yIV0Lx#XjX3J2o$Xh z`DphD1<50l)t2Ka1#K%IcoNZR)M?tAb}RmFcQ#;r%- z&xY-GRydRo(z;E%LI$VX>o`V*m4?V9lPo<(D86k~X!3R4?6KZ-=$;q?#!yuOAyCKtXiKj)M3h7jsdpj!%E03vQPXRAE_ zb$e16xPtYAMTudl-PiK!p8J&{0~gdP=lhRn(REvqrzh{WL3z>h(49l>Gc`Fzlbbv0 z+eR!!%*QO0D^7~efD(@S1)7@0S^Os=QB<4b?#lIgbNi+kNy&cvzoc&lCzX8zEIc1l zeoNmp4-v~UFYI2LnINU_3u#D&PJH*)O)a{QskbmdN_&_Ensp0Gdv`T7U90o)*S>u( z-?v*=`|1P~Z^?Pvoze|N+azX@j4E=tO_a#IC6;ontxDrHY;PQ!=TyJ1H6Su3G4E`x z_E0SpA>WDsT~AtXAbWAZ1Q_(;FJ>6S<#%gL>}M>g(WRdC1j0;HOJIr}R;kTw>~x68 zqajQGMTZvC+x0-m=$FE;VSr#r|280-@iv?otF9D=Wq3u!iX{5P(BdN}bPWuo;M-7v zRl?zNNtXzfwaHbKtP=KQ_rdh%aR1`cRkCw>8sKecxXA}=IWIn%nb3-&7HG;AAtBA!kG~EP`)HAC(Q8I+CV@FA0 zw`AOc{D22g8fjrwOf@m*(=fJF!DO!M>cEmzM3d1?5Wl>0&>6@d@NM>YsUgHtfpE~z z>+>q|4L3|ln}v*RC1qM_AY4AV0x5CYz!GpiIO9i8qS_UHF(`g0sUH6@^xtp{Er6}@ z3+78r2fAamO3D^j=)+Vy7O9`ZI8z7toZY79G+=bZ3K4+>gUNP#hE=g0$p(?JKLr&7 z|1gYdA12H5wT8@v2#ZfsB}EmlCOqXC#I^auER%lfIX;Qm<_i565Q<+k@rFkA0R^rj z+6$&k@KT+ufEf_xjb9^y#p(m|BzjBeqyy`JnJp*KIdoL!MeQ6f(yLz0nT2%l5KC^j zp_LG@6*V|#$RCXMQ$F*@N; zq@b%KeCtvBftbHTpzJZFy-w5Qlpvn&JOFCPZ{gOcJcj!@+A)8mYhPvIb**d?t+4H_WwD!5gpUL`SvI!h-uR)4mZy$qEHeyi=2JIBa?S}kYY9e4K4F=msqyI(J|K>i zef+_!P!@?7#}dFiZt*|D_AU8xYI9TKkc2WmJ3~E6uWqPq%SK)M6;lKO3YI7>#atFn z%+{d{X$MU%ZWVtGV@uRn>FZ=weObF?Hpr5OHkW7BbE-n$ll*b}Viadw?%p%JA8&Hi zsQkCItiWRjt^b`tSNp_9;m7%JTAiHz9T9)LV8av1X~K|sfmDHs2lWuf4@NZ&*s4L! zVSXSDQT|nsMTd&LnH-KRj3$J7r2`w?3!}$~|6!>l6FIm$$$@@%M;AmbO0G~M z5DDhM0@hNii_C0U)KM$4&||^%WkZDWX8%t!5nglr`)2bnos$`muSD49g0VI|XIA2u z4st;5v+@Hw3aaEyWn+PY_wVKgyhDWv4fGZEmjM6Ra`ht>t?xT6 zf0;Z6`12Q9f_H^OIULI|W$#HNMMseXIg`{wb7_ULE_K_Q2}THLp|Xi-^RP_fG=mn3 zq2e>dF~c8Q;3VP(Tk9a$+nyz3Tnd-p^%r?v)o}%QsVF&W1lr;iB~x?EVNga3ozjiq z;CbmGFqF+k$SI9L;#G){Kd-3b)yH%W;M|gOy-S4E3ne=Dzo7*9wiUc)3tr0P$;5`A zXwcv**>Nh*L?-D{^Va_N9O&@cENZI*O`N~*I zPF&__!9`LMl&Ndb`h3(h9=-CftWB2YN_}$lr>!csY!d-waOBl-}Rr z6)s6F6dch8rxo0-VDz3_1oj2&ERL{(QBh#f`QxwFR5epLjywEZQ8FM<7L`P1oX!;X z(q9&pf^OjEvOv&+Cq^VtUBmSJHnMuS#o3%Tq($jxFyY#6Y;PYT>FO+P9@@0}=0p^G zbn&PUyDQ>>3gEh@TvqtWJAgvC*v38Bbe8oC^o^`S32?JA2vr z_C5i$cgVl3>*r zPt=lQ71d}JRTnJmTBH?KIO}1(Yxa6MuK_Lkg&Oe^_KG}E<}6>O9n4AeI-$PZLsjw@ z(|5s%WVFO4E&6CrreKJ^xk9P_7%0Iyh}s`6cYz!gpSX5jdncfs$u2>GHqS2xqltnR z3_@`l_adKIh#Qh)*=kZ=c|@r}AroRZOtfUOBC!d{J=4_;O21m#h=?Jfoqz~o{t%mIum@Yb zXAGMQS0{-y`?qKysWN!E1FonxMwBE@?JUc4HZJzCu3r%3Naeb2XEK=Lye$@{g4t5@ zPPwqTdKWb{UI~j0#R?!}-E+f{=cB>eWYSu(YEjpqNB9n0aK;a+SM-d?vG?bu6w8U# zQ=|QB{IK0GS&x;@>obPl)2^|6{v|=z3(9}di61{jzUP);ShD|8Dl8cbcBW2bhM^tu zb?j^vh~xmw`;p__3~qDT>ogWrl;-#3!fx7p@zVroq@5 zV=GxIYzEJkHMy|sI_nC(rb%sTgjQu$CI+d9oyrB*c@_TQ&(1wgG9-TZGph8?CEzl% zuox!qb~Luve?RK!{`yl~M}AHR4tpR4&erFL&}!ga@cWsaNmQVW#ybX|t44Z9x|liR zdc%k7BkYZ-A0H{{4%}WhLB{ZXb z;eLCMA@&!+`e;b2ASw2pZ$9StIR|4ys|sihmj0 zFu1fisLJX#5_BzUilh##xcBBHxd#UoZFhS9&#vG95(W5EPJa}}V+{;`A4E{FBq*&{ zGbpSsqZj+FlUMksg-F$B8qy`(PkV$e5mrslMiuD|f(M$UBoB}w*Zk6R%Kg`EkM{Ew zmYMCY7k1_t16!Uv?YWe~5|-&Ah~-t*ngxXqyn$2>_|@xW^D>p;<;1pCVnH=gQvyhv zq@)NK^dlsaA8oFuc97$`>Q~>X`E{xw)--&nzs(c)Z?v_f33IigCRW^k@{!oN6^v@C z%v;DYvRSj`-%)yhs0aAn`U~_jkno(Q&$4*D2zm+s(=z;9nP9RA57+s9T8UC-2{rUi z(I=$haSxg>cY*);gnfVo`37N#cZG5#OC{{EUcxy<%>>3x+<8q<>J~xcXO3fEtMBjQ z3{RFhdGQ&R`d=9(3+BOd)}n4GF%o~l30mu5GK?_0&6d3Sf3)hi5L0PSjh7VKnT_ZC z@!+4^(cWv$7FqJ@$l$gy?GE$e4a%s}l=?W; zJtPl(8>27}bjZ>JN}7DMpYq)H!stgkp9-h)8M;I7HPcv$5~7|i(T!5;D}~98LK0;8t!Q|#5IUNvQ$HWLkkDO`C{93Zgcp6Ko*u|5k()wEU`4zE`Iy&B<7X~H6 zBk(pxF!c2B&eOuifr*&bGIKe(sf3}hDY~*(EBnqIvw~x@I>{y;xRRj_KN*7#-(NE3 z6`Q^BYjIof3(xID_5CI-xd->L);U_74`F(>($l*tkOkKT75m#?j^-)0#UIV_{)`Zt zJ*c{eT!otnW(DIV+UIlq@ip>a50^Kss#}#G(60Q6i*8QW>ElF2!^=kdrCm-TSI!s) zajNQf-qJ6-YU=yid=K-t-S~o7WbEfaBfc2Nl~^5Vj7c>%xa?j80e0q>AL$OpX+q?! z;ou=~E|;O`S;d9fwPFwjgW1!stYWeIQ#X|65T}UM%rzVbKsgV<(Ugab>gD&49}wG- zbR3CSX%h^453$+CR9dU52Qe+{u*^TCM9NcB!|?8EI+W(d^aQ@8pHB-sP6{BWUCu}_ z9&3asjm8eLJ9Xezd2D-(y4;cP$Q35_a z7Wn#wwsY^?OWFa&kj>0<{RvF~UhODwsuMZcSjbW_Zy?qV7#~HNHc@Pv%9i%8E|JVF{zAwQj1mCX z0QSK}oZ`GkK7+lr8Np|1V%NjBz%HB@0QG{TdI2S%p!>@K-64^@z*5D1pm1tQpJ)a)XgzGF%5Ann%%;VGCLu6h!3ERS}A30Ui?Hm`TMC z{+1Axf1dB`#=|DKh%qGNP)Kmr7#C*;;#@N_wnJdiwYP0ARjYFhbPcfVKHc*D?Q7@_ zX3}(VEI4`lG1JMD!O}nV!G8a<=SD*Yzb`Y`6pP@C2JoE%>gm9!`8YyL2-yl5#)6U7 z6tbqu-m4jtV^B||4OMv5F8Brm^oU6WwO8-&r;Y5&w49ono1?G2^2>a(*ps2@9v{Ok zL#GgLBT60G33q?mrcR|YJr1e61EP}Ugm*}L(m?g@gJHL&Sa@P)g)4ehi+E`CNz(3f zuc|f}c&M0?R=0`9@Jlaxo|Uu1G9VZkt`S`!mk}#8c>!r?)R8v#8_0o7(49^SFVRj^ zL&7$=q;;?uLbBLCAog&GyvX)&IKJ~w!xiadWF{AY9M>hAu~`da5F<8i#oD`Zu_X?3 zR^e!@Y@M7u@tIS-JniR!mPzQIJ_wo!%w%0TTTE_3=j|kviw?I>MXLP-m!zRPTe^Ww z$qa1NdpIm5XdW21rG*N^z|o@J-eH86Mph}R!D?PgHF4>A$th;tc;pUeWI8;_dl!~> z>;I(qDBCdNIi&+oU(YV?vGTjmNwCL;l0*eL%+>VFEb;}lKE>_pbS33U@O@@1cOAqifcS&0OUcnJa_K8 zz3VG8{@2(0;iLg1!n;-6%j3i%fBJ=1^CWu_x>%O1mVtnHMdhDFGSbKE_nZ{*M@}60 zM-N;+P0jiz&p{I-7paaukMT7JAQP`R-DFM}x4MdC=X6BZ#xUuTvd|q9*?30Qv@IDv zdD*0CBqK6}g*&2E*hdrr`$In%w2RuG^IAi}+&*U<{GzWwC`&=-M;RD6#|t%HDu?Xw z@~0ulP{5z?4uZ(8jvsl%BeGA=N>?Zz8>T2))B@v$oQ0HGKD5hIR5n|*o?hb+YJq6h zxX8_Fwotz+ifS8{7tA8P#0q0RKjf~BlgFC8olqGW#2OkE2D5QG8~2TS?$qWnTJ{a4 z9mV=?hM$I>-0<$uH(t*lg|8W5`jjb3-6lF3o?K^RX z)j2Del|dm+`W*&t_`>RU8mx>nSaU^3S}ogM;V;G`)5bw)uE?-3>I&nA1Ci+f>cw@l zge61PS4hw*SWm2J{@-k@S`j{HH70x3CK(PwhkPA90;TzBri?kM!0G#%KU_vGscdsf zdjtEVy*Q{0o?B=FRL-SX1B6AV`Pkq>KJN6%I{Zw*<%6n~BmwFo`hQ13K)IDuL@o5g z(SK?iul0ffejV23LbLT!L%i$pOUlbo_>Yxpo93(M&xCpEAQlvLM!Grq z-K84EKt9|~sRtL#oF90kEm=Ig$+WcD;+4q^;)Bg{?*=npb znM@RZ$14An!W(-QRQJOXFLW@8m*iQote^8msWq(75~``@)Opxw2f3Q2FeM1AmR*5=~_v=Ddey)OWb1`^nRNHdcVmwCeMEg1T# zGQ6!=96xk zjDmV4RdNSnC}fTp|B{0R`vSg#UMdjGSv24l(!jsDzQUY_RZIMYW7^|Kt*KO?5$IuL z+jVu`8|Eck%~q8aXqh1!gTVXlU_~IxcBk);%vRZa22L%q_3FHq5cki+@8NPZp@jV7 zM+napdOB`gTSk4X{_N%gCc<4dsuU7RI=H*6=u+iTowz=&HV+ioPAUQfvUnz=G;5SL zHu7Z&uh%vmc--m~(7rTvLQqV1x-Q*WW6V?(YqeCL2s>Vh!Fxy=nwV9QSM1;zY>j~bz6`2QcY#J&MdSLY@D#Qp4t4X(|hda&@KBgSw&zl?O z_?TH>YAyKlSP`VqsIq1PS>9Y?R7Q<^9yek+dza;UQcjYH5AV;eli1rCQpsIw!@D05 z_mBVYQGY1+-^te$5(44A-@m1%hzR$I$FnZZ{2o9omWe)G)ks^vzH4CAaGMWR52&{( zAy(x!)=#h}F@{}gXO*c<=jy5ud;$X**qH{R!FeL{fcq&2qIUNBHX;!03ImisSZPRD zP?ZV&RLz)!N*aGTSb%ZJ|HNg7`*B5{Y7`o~hLpM539nGC(_p->j@%CWI|-2YmBj_2 zLB0)_prF8D|`#a}r0q^RvGdw72lt4t6R+?x;!|M_Fr?|*u0|51p0NZhD*otwA#5W75& zN6M8hz>S|olnp+8#41M1jq%tb(D8~U{r zkuh72G`E@uwZ2y%Cc8vUBU;oL=0aJa>!y?(nH@0(v||@J4<-s|i#H68=7D13iN8WL zroUBxD-wi&S11WkFnVUgnMM;mucAo3Nf8d2-goB}KW2sQd4&T}GJ(*96Z6=!0qUtd zqkD~eUg;$H_M|i{aV4wivD(7+hhrrZ_J@H){-^zvgwO9Z!e?ScQF&K_8FnB1{DLA0 zYMrP#V#&!(HN}899tq)EBP1L>uT~qj-$s&Q*?Q^&Fox|v8bT9~@l-AtXuzUkMWd5~ z{ubIok@ZHGh?21tiXxeiqFo-v^~Y&|JJu48R}|>qXa>WGb#{#R=+uOaXML7iZ@$U{ zwFLDK23a6T3OROJiZMdldrq*)B~ZT;6%s_eUINtN3gRNH!Wp!{41oP40^r|A(azX; zKh_GV+z7*Z-PRJ2NThMO%Rf<@nAmk5hyFc(xBR>vtR;P+>It<)}a6Sy*zvyp&di0HqS@l%h!8Dv*&Kjjg5pT0k#Qr5*30(ZgU#awF1OEDfNRHtM_OgB9lW} zbkT$5$&Qp(xEg>_JGf>oo?aTz;^GWDeUa(WTZ0;zgmyItW5;DOAnsgEha=8WcmUnN zUbT@epq<%c5e3?!bdbyd2#_(=42Z4&e7F{Un+6c$Pe_AnApQN!x`q@HS(7#A z;#*QNi5~tbH+|owggeHp9U~cdp&XEVy?fozFRwhB|J|+);0s$*zW4yo*4x&|Xg z6QU3{$C*C8fo<5(io#~iWX;2jjCcI=&Oi6~);CGSS6N^muL~XoJ@rdrdA*@r3~fYR z{(?a5uo_VmsrbQ$`-sN!@*6HbVh9%A6m@nCA8gIk$dX(PUHWsQX)Ip=?m~QmDRnhZ0O9kY z+Ahy?14)|NPHy(3a(QV(_Y|Wa`Y1Z&)GKe$hKzhRZJD-S0z^CeFlriu3XG}(oje;& zl=A0qv11BA*qzx^iM^Lp^jUT&S}{#!MiyUH+P{<)&Z@>L`6+Ig5=NeMJG5*)JwQIUI`#r_^;q&fx^$k2?72elvbu& z$Qp9e^>2t@;MrOYdq%|Mh>u9wUvU#bVCPT*^V57u?}BlE-3R8@G4c3$?-{hFJ{C0n z+YrV(NGgP2dfkyJUz{LP_gzUkMj+^|_)rHH_e`am>UU$D8h)=pLGs(M@!Yax;~QocV%mO)EN+=JHnJvJ%Ldkcp4YC|Ng5pj`#q(8@K=?uw z90|q5iA!|-JTJm)bu05pUwKSE{ z!66*|pbtHQgwmJ-92R916eYR?H&@f*IFb~E$-O15j5$grw#BXoi-1xpW=JWeVG}F% z?~wNC zJIDyeZ(;>0}SC*v9254DHPJ~Q^l&&T|(bTgoq2bH_4YCk39_skyz&p(CJO$uF35et$*_-KJh zjBl3(r$<#bM>6I6ak>%Lj-tlGC;j1IF~DVNzljVXyJ|2rh;LGweIFA*M_#~XSxm@p z2tDMtj@aXqb;3JOHmMGx|Hc>}JW@Z#rM>Pp*bMbNhqmPUIBI&tn$T(yIXP(}&ro8w zW`Z-`SzKZp8${c_rz(G@XBK3~rd!v&KI6RX4~Rd5l{%@7cTUg_!IzMxATDTFMs9!o zu4a^zh_=T}bZOy2U9kt)Zyi#uMMM$&Q1QBQ!{bFwy+^feA@17t@b>oZ2+PNJb33LL7T=Tgp=U03fxdw z4Xq+;z74a$Y1=n5OkZhVOTr?mTDAif5{6rxb0?q6q=@r6&Ico2DO}j1$i}2ns}60& zkmqlQrF7A9q!1+vH|fp)ykw54-cb;xk%@?v^j)u=o|aeV1i_?#NEi6W8)^+ogSTLS zrp4NK9(9Yzkp*Y~{U6PcOF!HOs!i5jd(*M0uqleu|C$bsj_&U4f8!1qHqQOY=i-%F z)abwGT0l(fcZM+Ztsu~Y*Z(h2kkLJ_M#I4;6G5?4ku- z-f?SjpHXRWrx(lrm^)5wnxUI%3K30ce3-j4UQ;fRk=A-fL0M2bm!$c5+znp;b>kcA zaE-rcu7~iW{Q6)pACk=*X1@($0*<(6>qM6}o!IG!PATLWJ#InAeTKaM11n1R(ijbA z)IR7lCA^H7TI$ZX$np77bK2wG z6B_Z`G9s`y$iO4VgK3rfD-(wY{672l;q~m+ba6%z=M0bFA*KY#9Dv!kLr27&`S=L` z4>~!`_2+FS;+Y5MO%aei!Z-#uEtfVK5WOKw^keQWv#R8=@~4Tj6I)U$1(tyhP2J=g zZC0nUgn`T4zvXEpAERH3Lm6j^Vwv2s{b}5f7!fFo--0avpp$VEUZH;VsNxbJ&ze*0 z3f?9%&e%>7rZ^Ot_DJYpnDgMl)q3wI%le*adU>yeosSmw8SOs;?;=R>`yPfdhH&!z zOti~j8V<5ze)}PVNFI(q+iQEdHPupyQ~yxMwL{Lw=*fcO0f$h)a%Y=|SON1t@KF12 zAXVF4W4ofdmD#;uSbS2C+wN4E%kSRgiBO@i3WuAt@8Z)A@SO z@rVr+6i~)R#gGa&WG-!x&CYTj%lrXDMI%WdFdr3KWO?Dgdl192 z()7(FBz=eOj)cqt4Fv`)Qn%QJNU#KJ;%=L)fkYjDJZ6w=t{}C}tcNPg3#tXLqzx2| zzv4@FRGqEY-$THw29nm92Lz!6)jGXLqW6SQYXeV8zWwU0Rb!|zBv>?r2URF@CoTAv6(_~*EG$L4?$#LaUNI?%fHlgg)`~Zyu zm~+;#mJxiqJVjK!8oJ^`oc9$*;M6Syben3TyB&^7btSDfaVB~%3*~PMND^#l_2@Wx z?V+)^s?+X)BVV$UiLk3ti*8v2u!y;s7Pjq|yP-#Nv^VeDP($3lV?9GQpge)Ffz<&I z!oAYoniGKs_+H7nA@JEe;HV>y*3875r!$2=Ar7nx%CYx8L2wGflkH%j8Ybfzsi6NK z%a4e&n-LbFKbVdmxG;T)xE+cuRC6^9$gTVHC%9JV-%BIon=Dj~PNF(UJrOVhSC_e< zg|I8Y(OmcmRk~lk+W=OyC!I6VVJS&%LL~=(x^PPJUine(kH&-akjc6!O)S1;xyvj; z#{Q-Z2g4^f@t)v!zP}INs|T=L zxIa&D%54TA6YwAqmGYeJNEu=oNYEe~$|@5J$wzGPj$5k(i6g5J1`}7{;r~AX*+3@0 z^SJS+@BDtYALmo#Nj})X@iw1TI?49{o$z~xj#$>{YYeXW#~Lh4Y-3$wS4->gFs_fZ z*pCTtkHY}+4pS}TF#wjZ$xuzoJm7U zqfXgfPlQ)@|_$t})fQAhv)KmbWZK~##F(DEP6%$8zns|VD0bChTd zdTWK>tmOnEEEtn^ks4Nb;m3DV{HFhjQ>TV!Pdz`Jp*PvA;Ib7ag5#_?Hgen+j7x+E z>B&O3-g5hJJ$3?DT}{u`&pQDQvovUF(nb`YixvGs9d@?guJhl1TR!2(8^3K$6the< zKKJa?^g8rshBK>lsf|vu@gYC>L2Z9QgegyC3ApIXSOM|TPIkl)m6ebh`%qHLL~O_D z~a2utqOLD|#Z00Sk;l!fZXw^(d08J5$?pxs+^YDs8 z&N2TqyI(IDBs2)Fb4{ID0*Hcnsv%*FBO%Pl?YKu_1n5#G7Eu^ScyMOktTCEQ_;kmi z{u;f&;`uXYh8O7CIc^NHPg{^+q1)AqN9bmuOK2x>8|?&MboJH4w;jJqcLK5zcd~S< zR1`Jwli%*}yZttt@RO(aVx#t2bfB?ALXD?rhxGzIlMrY7xxT8$mbgE5lPk3tLs@H_ z{WhceJK-uahg8nE3>8@6D^=rLtM#WzFzP5surXsxTRj{psj+@ctVyIim!Yb!@kgGk`4aWt7a)`U$%M&P7d2_r1-rYJsq=AFPA{Zx31 zH%tx-gxCqpkq6(wW(*~1q>i#7r6tdZ6Xr1Fgd+JdqPQuNHbpfCLr*OWVL}{_9F{f4cTC2E<8f?Q*noR09dPjCklc0x*V3o; zZMV{q!0?BBH1L_n=}3Ss5n`pusZ>KlgJ&DR9rojsf6~UExvXNb`Z{H1Nm1p8v(I8- zalHU?GTNdPrHyfn$C78ufHVXF^+VOB9Q6oJYcw zBl$c4udFpGbQ?JmYd4wL>ioNPU>860mzmH{nkTGOhdHMawTiBc4i;GDC1Yh#wX%8+ z*m<}}=&k(SEP>496C-gkhM7xA8W&^uNWgXi_&Puj8h!08uc!DwU`E*q#D|3j60W`6 z-piNz^mSc!ho67v*ZMR%RqN}5Tcu>Jz8+CR5lc-ZR$uktwsDn(8_1^+ExwaRGnHnH zuEeTT3>;FaLen*NGGNeXC*KO|2ymO*Ke7KweaeZk29nof^p0u@YagdP)^sZ?kqSz+)0d%*_HD z{nJ$V6vz5vQ>lP(;&$on{se<0aqE~gnJKg!qG4F z;cS2JgdYW29Wg%1R*X~bE53Y znt{|h!VMGT!=kCIY#oIk*c zLHt7RRyq>E^ZBm3^ax!YSm&<`NM_ixWII8=Yp%G0Za;qg=*FK5^kR}3W!s_*n{ENK zq@B~Iax$MS>M5=PX*g%*K{Q$$A8T_SLK!eSSW7YJP%=nBKODS$Pn)JgT7iH7n^5kK z=kO`>z&BW{zBrP^p=FkQT}82IY$#Y}yGBI0^sdka ze-R;did8_t8I9m=^sJU%I$3-cM{P@1nQ8#(YAPO)imv>Iqn6JJ(7A&z(eDVZyX=bL z##h}utkSav&d}ef3+MS}Bh-y&4_v--U^sF46~k+8ylpsk#Z~;4UR+t=n|QD?X$PBp zNDE`*XbeE=M81w2CLc#e0!Nm3GQ}vGwnIo5vsx=*s%7H{V*vHV92YQfK+SzpIFBiL zcG*xpo_Q;BrD__6A?r9E9y}9}o{tizX*65qH7K33iL|3=ii8%Re@}VZ~X-ddBizcyJpfzae52KEMa>};Eu%sBXYACH+v;otR z0N&~M`17ZRE013@TzlgB;W+(J2S*1u{FB;ehU4_hy_dZBrNh?wXBZJ$uyK|E z#gqXnE|n~X`@y)Dw+VuQVHTYcJ%)56P=vQ&Dus-&V~0F(vW`u_*~0cEHbw{zP6~i2 z1q>dqr^(kCWMx*S!qSm6Rfho?JwRdJjf{7%<82I!!9&ReeCCE`oKZHLJC)Gw&?x{q z?j3mH!s>8teRH^hHu9r~FCC67uM8V>bbxyb4lgYYmmWGaTzl<{>4`*Zd#i`}63k3>Imn?)^G?@Z4h|1@*yk6p*z$v;% zfB(Tl!xhIa9}dtDc5sM~BLV!z;0pSRu(JQ)aO&K7IX__JL=5hRU+tF6{OE(2`rOElAHh8HhX^<-m1D{jSB>#}VP1yXh> zqii{fIje#d!CZzWg@;y+^L!jgJ%G;P-Qo~s4Ae$Bm_@9x!S7)%1ZPjIaJK53ncLd9 z3y;MLENd1zc^DjVUNJu*Xy9GHh*+ zx!u<_y0;Sg;A~Yb8xxPYxbLPU#E9Zp7aZso2>7#sQiL1qbl9KVNdcQD?s&v+a{%bCk1N#!&KL!@_{vhL9?v|Lvr>We zqS!}uRG3OlAsS6%FLw%V(B;8>`<91!x)g|=0yh3ViwnaNJ+Kp(4*AYQbhS%bN|7YJ zc^k+h*P1;Tt~|Qq=_Lpe^e6ulk1I*2fXP?o=8wk;Kq@kJr|t)44_WsxW55pt{-&k` z1s672T{Er)FEMl#Kz?2dE_RX~E-r*5T1VJ0p27lS3%Q+`<6?S8SgQqWUV{nNdaBA0 z)F4Kt5=j8WI^)@B^E%-j0K zA}E?esFEu~8)^fko@sF{QL!*b#ap}`iLqrABO=u!#L+E%B|Cix_-APb&}gtHF*Oh} zC}0APU6@V4ICF)u?j^GsJqSWVBsF`o#uQ|#mV070rJL5Ab$;0Usltly!CmZ#F$Ad? z^F+BtQb+ah9-XmHb4&;fqEnD<#Ox3gYFw=Ymr|3Cb=k(Zhd1unS{I_NktdMB)wml& z!*~&f>BxZMzE202{EW3x%q1n7q+}elSvm(umjV?PmH;gAtZExd7VIGy*!5Pf2|$FK z+eZS1GQsRSr0gP3WAL@9<0+(&6flO1c9x?dGi6P25pJ@Kw`rw@9zj5{yVluQEjQSJ zi&&RwOJf;ZoEw>Cd^Q5L^~U*-)3Jrz%8Lo$oKj7{%P{c?keN{(zdA65(8!MZ=IM&&oLXOwbrp2}oZ7XwC+jnS(-h*|q~I666Uq zUIbjb^)BQE)>LqqTm%rt$q`}@qaGV)5>!F=I+X0?gm#6b2I$u!G&Ax}y{WQ_);1OQ`_-HdO?8kPA{qV1Q`Lpsm}1 zK#4+)u~{2Y4uUWOfH~zt0k)8YU@Wv0dyzPWH;vWd%<&@tZihnB*mi}fp$E2DzJ3J z_CmYHGMrE&KsU1>n%n9Uk|QaMoSdq~8-44kEUH#k3+JxMsEl^gu}KKLb$t26)QGX< z*BB6I%?Afhptg$}=9&j_EiSq_(~5ZvhN!ZI#zm^><(} zp@=edK*d>&o?wl`BVCArkSj+}gV^F=$pDb)R2)8-#{0&L?0EMqh*$EBOdo z(pU#eY=V1v@DtYcgbIoS5FiTXiQX|GE+e92f=6LQ-la?|qVSjy9`&S}Dvi+@;3nkK zbM9<&N6{(?{3lT>OKgrRB1b|8Y((SN!sP?aEUFFWo#|xiLIivk#XE* z*-aqUswDx|<77~CO#ijW;M`?GiCpG{S{n-A_}idlNlL@Q27_1&Bfl9a8v3DR?F^b> zJ)Q;8+-9KIy3>Rb!{bP*d16?y0uX9y@s&l@%Ifs6+cF%(r2L2sz+Sw63R;$cH%?KuL8(LA?9mcDXEctTs+G?qts5 zR;d^&e<*=56)?Dq2n=;@0@Pf*Y*{f&Vd+W^b0NWeNZsv1!m$EZa*Kh!0#s81!AFM1 zCNZtKwIueA8zvqY1=@i|ieqIYn0(ojH4E)nQ)H|Ggh^+T$unOV4y!U&s>4+9_<&>4 z9M(%R!tQ1#5{Di3yV(V1lVBC$60!JLYW$R~b~x`Op%D4bYZ9D&6r*7lZEYJ`u(hv^ z>0?`*F=bEI0)`!ZFHrEa~N+9i%o6ehEyt2 znT!*|BbNqG#uu+kSkA5#v6vtg%~G1xJlv{cHpA}TB7*)xU>u7!K4WWtiXB;xL#ir# z+>?PROLhefY$GKER1iC0%akfhN{H`@%3v|nLY$|)5_xctXC4$w-$ilV7%|1%(6Xz{ zCP5`uv1n`~5jo^xjHOCS;HX7osqm^+RwL&=^RQUBd!kT9S1OR%6i2dgMq+kaYU7AH z+iV$NrNDnKIOK#~F^sP=u-c1@IQXMZviG8PC@z_y*q_HvaUMvy>g=GhZac&U&8&@^ zD?!`=)E9FUV+s(G4tIqk54Mlah8lquFR;QJF^$Zye(#MBF(vgluX|WfO*^EfnfV=h z!bApIr^)J$Qf6yvEd`BAlg5e-s=2uB_c;e!K$kW+HLA71QLJ8v=ANbmr5&GbF`!mMy0s3qEH^S^#0=_6-~$8wkjbBO}XhfVZ70cT}U?238gYqwz7R zAg+!Ocgj$EEe3?Y=J8DgZJkUv$Hlo2j7JJtkhRkR~X zoCKV*LSg0jGP6{ZTk0G_ERo6HXXZ1Cq=+$?iUH@yjT5Dh01p@ZM)O(|FopSykJ@BPN(Qk@ z{WjhKp<*E@Qpr(lMal(?G4}Dnngc5bR9nUgh{2iSupco@S!Ri*tMI_5CFC%sA&tGJ zOc;n3;ueikopR#qKkfu92v6Gz4r0Nz7HF0VVuNaCZu@;U25BvTv>+;`wZPF@%@Q^~ z1x{0fCTkjrHEwlRY7Q#SA{9imMHvXz)rek{U0I2rMsi*koPC;b!KB!Jm_a74T?(q# zjm)S^$OyBuv#bd)f~`VTZNa0Kw1>=W7Q@v}z~v~?EU*X;aaV-7w-q8@ysZWHSRNhz z%SphA0pzrW6e^aGdXAj<;{a0%2xea?n)(`pC+>I(DI`tR$K~o7qretlSt`|1N%G2B zse&(NrU;|aR(;gO*eK_K z3YeW|l3oM2ZO4C}VWSKTSaEu)fa8C#8zLZ=zr??M5qL^gr z0Ry=l{Mk@=5hhscMOB8N22rZ^7!gnw@?;!*#p03+5?kgS$3#ZPgBi`cBayI1>JE$n2WR;e(%XDC=^6fbjz1pfh04oWrv= zMgSCNpAIfGj&;H5lO-t*NrFRKA&srOIhvNX8tCPqBtbC?05I7S(g1G8W=f{(lMn&D5zjR)9xl>r9UMl4gdEX7hJiQ%u^l@Tg0Ezp+~Fyl`xBLhqTnIb7+LuBp)&=Jeg zl_97>>;>`)h6*zdq{UJs>J2GT2eN00ARChsSER9UwyV?QtFVHJl7cEMK3TD0ZES7~ zXHK7@r}@qgbJa2#{nSmAv;(0X!0Nd(!waWh7*^LeXbI!>Vf2hZ;yicm>~P`i>0uAO zA8^>FKTI5-3o?^i&A{LpdZ)k^@1SO>X4K_wqYEukkE81ESnW{C>J7I#gIfgZNxe!<3PC&>-A@j3zClF9&Mhd=MCPSB} zYqaihxFM>AB<6%LB)8dx_#<|m-NM1q~dKQMO9#IK6u^t z9BrVdPCYk#e5FQHp zna|!g{Q0N;R7+DX3uG&D(Z6UTSu2n@_R$WDa$u)|myX1#JB|?mIr3M&uB&UT0w<9s z=u~9PHqH9iQum`$)}$l`R~*s`qdl#clPpKN3`pC*>;XVe^)Y8!%APk1o*d?+Fpd{C znOjdE&p}-#^JuGteO}4Oxs7WKSkYRcfTwuosYog{QemL$c=%!Khh=Njw&{!i%KQSo zr|+rZaoTA4`+MYKaE!<~B&YfVY?F2bd+EIZcrnNVeNun+kw^F|Mc%s0SV}0(0|)wq z$xNJ!73x2IfbiE1+Of#F0l`Lmv6$57H*aqHSgU0kY{r;2zLbD4{?b>A+ok0|i*B)= z)gdl4;MP+tMQXx221f7Tw*YfkNVL%CrT~;O#gsCMg1L7D6bTbKD@Ra+*d-X>FO|qx zgYDUhccicYun{PxB5^M&HTNuR{1vWJH7r<33|dJ=8`CDer*C~zPW;7uU0DaI=BlxB z5>ZfiEjYdo*w|TH$FM%W5FF0y6KQ-PxobUI=}5sar+UC=3&}IKV<#@c2HqfsND`;$ z69TM``YTr^t2E~B6il#Gk1H-zL_u|k3z^HH#myEw3cwB;6U}J{K&O8&0C<1gUUE#; zIU5O1D~g+#TG-pFs)`It?YKul1ZZ-E_$V@t@GWO+>44Y-4ltyMq{NJZm6%@M8Y_6V zPUMt0EU;^8|nsLue+F5roCUl@)m+-#~;hpE%!D_o^&Shi*@GOK3lb63Cg{hzz3G;4re7LmS)$L_w@P8e9R?YK?i3(w42+4AXBFrH#e+v9J>T_^{+BruN#^1B52Fbssvg2#X|H+@pMUWNGptoTQWv?Ab+M~2e3>>`m=Mh+p}~M zcxIS=cy?=Z`;Rcfb7VNUci*s%n@mPW+z6$`obzRK=!7}Q1kwIf48Yc+p@AX6-A)2z z*ZU~32B6`CiCN6f0ZB>32^(QP{x#ex)P&kJC^3-NNUc?5R)ZEqKr1y{S|_ukcDUGW z7;71^`^@0h<_K8nukUndajR4ejHy(KgVFw+sUz4YzqK6*OrR?3b~j@i=`a@(27HAR zF5voDx3)q*!f@P*g1P-6?*?6#UD>mjKJ(|cal_X6)eDc%^8mK@1GKnjap%~|{^13> z;Y98d3(+Ljlcdn{xmRO|+Fp0rN(?wMb*uz1YxvHM++^;S5GZT0#e+Lcl^Q%Qa_UkN z+xubJnl+~*!N}AWfR#tFEe@6trhtGObqYqt1>d|0xC>Sy6sK4olbkhcBb+eXU*gTt z6H3a&#?@MpC|hF+^T@I_mWUXUInbi>&>0K24soF&bWbZx=s(doUMSHAS)TOJ4?5y` zVRLghw6uh~HD_>%d2w;^0v!p=KeoQUh8slY4jtIP^9+IbG64q38Ni&`nb=I$O5O(R z=7}CfHC!>;x+B#vRPi|sTDH_GSPgM8hyCSrnZ)mYBxzYfLL~pXrg6^T(G0M()|lSB zf~1|R86v2W1r6#5hg_CY461<9RmY5MpfOJg2XEg~FeddYGcQ^oz&14{f;wQ!lqyRK z0w+w4bs>#&KN8puo=iBZ$L~lE>|4UoKJ5Uuhvhx{K0m*?w)rP?Z~5w;y?gc^S~;*i zY;RNTa`soa%6V8M1w9Xv<*^pdket=ZRG`k{FcuV0aOM`gR1#LO7Dxe=u~Na9O~$IZ zvQv%L6sIk7v)GDbNNLrZn+$P{K)?l}N>$`InR=Wt^|W;coFNG$|C6s(`ebIcR^n94 z#)eYd0n`_BT)@Bq6~os|SXkIo+d^vqVsJVZTpK~FnPFj}1++1+*OY4Q3-IFUVBJ&) zcEk}X%OmA(QjFYnL?{OmUE3{J1E(fPmm`E_z%zz;x<9Xd=~1OJa{d{B*;TO{6X zvH-#bQKMQ59Ie$Xa@ZgHJ533itZ5|HxYb>$IY^wGzk_Q{*^;%$3=jPoz}jv}l{3(c zdf*s!3W1NsF1V0RI2F%hlAM(?!V9zgdBh0T{YhxS4WD&>!p3hgJPwR&c~e?b7-rFC zlr}OHxkwq^TSNt0q!49BZcPzC`eA>t$Wba`sBec39N3}Df3sT~8(T+@9DZi@KYQKl z9;JH$KD9ts0QT?SzjJi&UcQIhgM^dkOlrBTb$?^<-Eqg`Q7iyJe|;P;mI!lT#w$r= z?r@fvA~|`C4RSn2K-AZA*k5`Ph@-eGAk-T~P*ke2_N|uEylBzCulKOucymkamMA+| zOI;q>Ku5zz@NJrurE!Db5JG8M1I>nM^CJOwB4(DQjiOH14HxD9-J=dmm1_kBU$3otYLWn3bly~A+b%7I}Ow}ytb+(^-9CN*X*$h@IC zGf|tMtW_3OvlU!siJM zCg*dl1ptr9+N2qo72DcvDWNEZ+`Qe&&v*A82(_JHu`;g_s(2@^w{wH z`Z_%>Sg1IURblL=_u3E;L_%hbL&*fn)?*fF9i#Z1*090aF~QsEQ7?Iys7Kk_vL$PQ zmPPW80J1r2k!92~>aZ~gsV87#E-M)|V;p5H8$>aT@WO0=1+2zo7*qPh*{WJLHiU3< zKX$>TK*ze^?r4d!11iBWtU1N3yw49bXc+5m?-)aE!N;~agKcXo@{u|YV zOcl^0L`Yr63P%6ysbdldfAZGoo}RKa0OJR0YD%zhphY*dWv2+pF4&f(Sc+8T80i-9 zbxiz9ha&(yPvWw}hlhoQ`5DN2_AdM}*m(yqKezYu!_M|Yc;d|QW0&zR!wE@X*$q}y zWq_)G*<%iiBbWj*4t~S>!Kv(oT42By-ewdOC5VcoQUeP|*;sR}gteN@UgKE@C$Q3V z${7b(OyPxvrq;1LuSEJ>nRo@Yk;MvPb_X_sCJ$J(G)OOW7gBM9kp8N{girhxJ+QU_ z6w}2TE?_GrS2><>T_(r5FoDw;(3TFc77c~UBnvD-K{Ak1B&=~uIvYl}l3*WTVxu`7 z1{}HcF!f?)ZewkIZSTVTeaJ9-_uY5TegAE@ohHPe;r75|mmb-^kq#AB`F;Q*0=s2E z1efTk*b-;s9z~%RWr=aM%qf+u<*Y1FD--x&N~Obyse=_qcJ^ScO)agXP<}m9)qyrm zYpK&21(1A~CkeYpWdt~kr{;II9FkygHSWfcLR2Bpc;a5bL>p3GG#%H8sJ7r_NlL#A zhqOY6z2@*BcQjQc2!7qE-~Z_*zk>%a*`AxH$HC3c-v2XqzT*Lq%nomTE0fWsf#2WQ z*ckRNFVDQ<_|?OgSI^VKBIabrn@Bx(5k~!^juPvVU@^Bpbnc=Tmh*{#Jz;aBPlf5J zT#b~}bE_=_tnPk5#`ZC=29_Y2XEbhvK2u;cMu0tH4K|L8h;%lKbp!Huh&m<-X$cBd zl13R4iZ>YMoDMIwwnelSTUT3;S}a@#R1BtS8+a>E zt@4IX@ag(Rz$$;uS9HbhiU&ZkC77jdC=R(hhu!1YinOC5Rw%nHZ3M$ImN^KCjm|eb zM3Q4{=UU@rY>f%Q94@wBH)>GB_awcnbZpQ9iDZG7db<0t3`fWz>f_q=C|Ff%*% z-g~b+9e8&5fAPELLkBMzZocN);VY{b==(yO#wxIM)|S$=Bsl1Ad>Kik!X#Wn(TLX! zS+g3VS9pv~@l}}Na~mQjhQX=hAtBs14at`z5FTYSI*5T=Y(GAsc4 z-&vAXq~Kr#7SW^A_(J875(^2u#bTW5F;!ZvH5%JU^>#R8oXJc{v#Ea5??ts)-DSjR zy@nQVF!q!gf_!YdQI0KMNJSH7PVJ7`JMf41lXUq1@++%u4M6m;*7=1G-g)xm z*|*ZUKWzJU9{@9M4cotS`poH#J$n}CU-6ruR=7QrPuobi97A5h-D908A zOqSc-F(xNSo`H@4t~-9!4*k||4(IsxEbe(9053m!loRj{;Eiv5Bfk#jhhBH`&&m3M z1-fPMx~s0*e$C;d{562j92>1x&=%6Sz&h^Hjs-yJc9qc732mU6fQl}OKu)aFYWrq-jD)*%5JgZ{*EoB;PYB(v?>jQzO2wI4%OOom&Sv=tVr{UzY! zg_WQ(4qcXnD@rcHH1H%AbCf`r63(q6n6De|Mng$V%q{(iq#hKFy!>$`@5F&ihAS?+ zY@40|FuT3E_23WOdi(D&@S`8)ul~FPh+hNdXXpOi+S=-HVE_J^+rQ;ohtHiqi`xce z<)B<`x?C)i1J?qzKyi3fh0AKz@)9TuL_Wivu{hF@M5SO^s?tQHkm;~%*!cPvh=K^d zO4Sr(g~R@W*y00LqpitUA>+f{>@av}1&jO!RZH4|lz;#%Mwg7kJJeYTjNgMGbOy9= zC8S_0Q%_||noV`s4+2iu&)U@N{c7>a!irhSk!G)6UjRj53DL&DWtxGF(NkDa9v<@h zG<}7C<%w&Dm8E5R0?;f@{=M&p8*W&`+5fxlx~uE}5NbyOOH2EIbA5H~fknD2@Y`;9 z$<~ntdQ2GokN~$6BAxAxO1i$(?x_mS%Cmgts6e z6%fZ{r)mWg;Ow)QfJmH?u3vhNjCjZvV<>BDT-GxR9QFrX_QKFu0Q0HwHiix-XXyZm zHP%v+^s(+&p`dJJYDCZ-?1DSZl32{xju6K&78u9DB1+=%EavtA_W(Z{QxZ7d1Z=B# z;0OKEcewtV6SNQ9Sy(-PVS8oY%D(~TyAB=VjUTd~1He(h-Sm!tldpdDDZ2jm8+cdT z6~~Tkf8R^Kb@;;Bv%@0Z7e`Ym6H?LG2@9Dgf$e%>j2>0HCJZbb!5Ks_ z4GDo zC8v%ahr7T>>KgDZ*I&OwKmF%x|10~J{sllUfBDO;dmNJ#vdr8?4-CF*W@h_0|KQ&L zWqEn|XU?5HyZL|p&Tq}%`_Kc!ak`#}cga=zMJBS2x8;e&?Db*41l!zDs#mI^&?Z(W z=*a{;oaVmR8pi33vCZ9&QG5uaNS<2LIM!mU^`5mP2GO?9IU0r)X~MWRalGQ?lnn;% z3AiR*2b(h#jdPV*anuqpoT#m?wGh^gF4T+yN$#Q)DTF0sQW%shuDB40iin|Fpv(48 ztga5X9KUM#?%Q9#xwvmHy`*vLW54**?|wayv~#3`ecJ-+BLMQh?4EltH1w9Bh5z;J znKLi!*|T^4^{={d`>Xtn09$rih&9wgR2AVmi3M|zA}wUo6{HQUVG63nm{(i@07s=7 zR$AFaxMPF^bQidVIj+SAOAuq;Y|h#^4j#e+UWG)}WfQE8#1mwLTiZg_GXf}P!xf8h zwHA0|Z5}exQNXMm1$^Y6@7uTU z@2_6Cu=&2Svtiw z7)#i}nk%*iHp&#?ItG1gV=d&FgS3Qo#f9vT(GGEey;&Pg5SfZh!C2E5>BoFuI(Ke3 zdHsuqJ8pgL<{bU@cXoUGKhdZE?F0^6YzfWh0Mu?r0dsRZ|MU5CXHV0)06q#hKyRwW z6#;qoTQvxUlcdreNciMO_U_&$V40$XvWi)WD^eZi;EuqQT0_T8CLjX0S~{g1a)JZ#J0IWJArR|>9^v$ zKUsE$153-l1lV2o-YaMEp@gZs1Hf5A{7m@Gx1anR(fn^S^u6Lrx|!fdZn|~&^b4nW zPh-m{mj_KOX18w}=J9@U5r)!=f@=6st8;S-5Cwe3L6c8^wiB+;7otLk#%Y5mh=HXl zi9o>FpNhb@;fjSbOcCcY3w?YDCD9|;Y+Bt)46O90jo9+s;+)sUEWipT7^^zqiMS$@ z)ZvUwCIiMxnDK?d{HcYTAuSFTtV(IUbeIcH2Mhn15Ilyq)?E{H96Cgw{&eI2F#PsE{E;8~z;M@Hvv-|5x!GZS8d*Q?DF9>-CvBChwL`VLh?EpUb~BAgScknB} z;T+xO`=UdKhnL-O1Kk3!v#`0gzP-G>^b5e>b;tO2-aP_95S=X8#*c)4=;X;$^z88e zaeZwacL&b?@OQj%=fMl-c#k8S8PJ$=!S=~-E3jZ}p0QOZgSv4Dt3r)2wib&4H97i4 z22u8o(+3a4Fa=L#B{kCre-xFl;x&YsK@~5=n!n#_Rn+hUT@(asza#+rOt5AbF=PV= z!ql4k7Fe4)eC=ntDP}EqH;7?_^!W`cXdDgLF6eLRx!ZO)%^NLK77y8^3q$@ zR#!KF>)zj+|5u;<`0#3aa?l03-`Gg3LpG|`4JTnvvuehUDty?zgh(T=@WPUv4C&%D zXI%$j$Kk;fL{LBt6*4PZr@|>ig;gta6>b^{!gZjUGd2aa`!=Q65)z46E-pw^QHQi( zEL<&>qf!-2*1p5Yyyeu>4uo^MPQ-dskDnoIx8$~V>!-EPjs47QG1z>_Q zlS5)-akRq^hq!om8pkbS80+{}cXJX8F8KGtc zbvFJkx90EqzDA>$>B2Nb8Ej=WvZmqzM9ihz21$DzjxU$6SnsO)cye{1o2hi`(O8_2j^#Ie{p+f zdpNj%|M2!Veb3Ir>#I~0eL7LEP`Yh+%>XlN)wxQIF_o+8cvB)9d|;d4h_9R)R9QoS zdOCpCq!ueAu(aYhuVI0xsoI=|Mhh?f$$xi@$5cR%5Fy7=CE4KU*4($WR-(WTrR#8d z7i27^1T(C~+IYg_UKc!-3vgLX2@to1S?fU%+~|V4&EmX`#|>G~KxuGnObnzvM^Etn z?wfDJ3qLmY?%Ov@kMa9w|HY5|_=o7nKJ)K-*Sj_{NvrL41i%p|PoCVOg*EeocYNos zZmh5W+QOc_b0@C4dh-`fe)sU{Q_l^1=|Kaf(;`|&C1utk7JhgIVK{9~6_RRhPHB0r zCiCO~vr-EYjfxouO#vnb06guaM4hk}AFvfs#wwW>*{(1#7+6^$j6@A+qkeGBu$Hg&UIQLSvvTd7tJ;>4u@ z!&z&<)Ru)|M<2=EQzr6N0VCLK&YCfl{+I=AA8QDUF%()GPqP`eZ3O|m#k3f;Odx|x z+zRSoJ0=S1T1QKm#^H=ETvQZ;5sJTNT%6N|M9x;sl3SF~@pWuLz+}1I-DXObq=X>w zV2#HI?xSZ;4{xF$>b;D9u}gRUEzrCEHjf;+^zC%=ev7X8&)d&^6IVx>b_c*;1@N8X z%{QI=D*d+j-K(o>=jb)V^MC90Z`k_2>s~xOL?iZWR%wcsYYBCL^lP$uvS za{%bF36{VKt9m+s*3?>zto5j+byx^z*7C$g*a>ir6Hwg##$%=;R9>oNoXBhTLOYgj zI124LDgshvET#lAEMuX81Ama+>jD|8Dd9$Z-EcQ%hL~IW6G=TN8jGxMLt)#(-F{y_ ze{Q((imQfOUVS4DjRv|~cUWHD_ml7byKnon z^UmF$;}_CRUdIA3ig)eMokcTuZU5#+@BJU<_bmM4=Emms<4-*~^DDo8H{Ct3Gc3~^ zhSuo^34X7T^&*hKgyd;xi!mT;u|({CMJOazF<1g|um&*z!lH$BoU9EW$F}^_VLg8+ zr4l1G$;8_h=9uj2V>3oWePePe7aIHotOt?6aUSeKgcRA`F1QaCTe;oKf@_X7q3TrZ)&*GGsd8hD$DMw7#Md@$R6qKi-!&XLeCay9$!l?Dd;52O;Xi-Z z4}gSrnDh-`>Mz5b_o9vfywYD1>F?Ze@*l5VSbZ;jC78XE-YNLAfBWz5tW&Y)>C7Y! zRd!qERX>HaYqZSbti&S~E+FIW1<4lQ|67w1NdrB}Vka3bvsk zgT+`owzpQ6Owp;;c`}j`jd~K2DG55&VLu|7w$BY~@^}r&%K4Lp6|>03&!FDSU^!F6 z$*F-&+&x0W2oyUG{?1Q_{rKcxC8BqneA96G(PQiMw64X?&5bV{KXTc3p1kh5Rb29m zPx%>P@0!~kR2SAaVy~l#XYTp%2mggrfak1JiRzWhE7sK7GIj5q$j^1yxwXqb<`owqQEr5S@)2 z5(g2mO4UfR_8rdbZmgx9L2|!GAX#fQOGDAYMye64!~e){C!T;F(f<>10iKlk=` zeHAC>r@7uAG9~eAIsz~TZ2Y+7K>E(kzEkf!fA;LZrG+zh&G9RDe(s0v+_`-J%J9g! zv%?boj2Qb<`G@GLx0P!A(uxy9jWB2v;S!WUEk0O+XrXAcIcwuMjRd?3iK@x|ZOsgk zxF-Wge+E~zgAAaK7bfFysTf8ga+HB$Sd@D^3X7>*j^mw0VyIz7uXZem!XMTVUQZ0^ zbS{{O@f^o9H;R;T`my|FZJQ z|LDP$gRjNLf7ji2Eq*;4KPqTz)w(XGsg4Bx_2S+=KSA#x+kXCq7lwO2^ugKpKm5S( zs!I+J7wE*G_ZA5zjEgM@E3jJTRe6D^FZS^PYk<~7mdaSE7D}ypI)G^U>w1_6YQT7U zEhB^K{?N1D2HnLWW`sA=W!NZF4q;dy+gK;mkg%?}P{t=`j{}!HB~s1Fkdze1N^oP- z#~psS$p_c@aj6ey`}eP`tkWI-^vS>Z`Q-!ium47T@>?Na*Aak`q$7c6PyIB#fBaw4 z8Oqs12M^Bv==cA?);qraHN&6N%|i2Z1`}s9$4A&0OUvU!Gusgqk4a$!)dWjxg)?|6 zK&1vI6+_dnMH%`;TtDJ$0~~>cED(XBzX0y%wy=yftF@M!b!;FVGNfwFp#UW_OM{)T z;aMHtHo@-6f+dRsp$NF#ZBc9(CwEU3SgFP)tvg+Czw^1pgcfTaZi5>eKei40%>GgO z;C#~!FCD)3JKnIfe|d?|_77V-pSD{uQoeezo!Mg zrXTh^PbbfDdoS+r!^)5A{PbYI-+s$a{PbIHn3-AodcX76_1O5;_ODsLOP?nQg7~vcjgn%JUzUUUO-B|VUs#pim>6(m3_h(hDAOm zR((*i4rgm3OJ%Ioz^$HffUY3gw+XmFN+JO(Y^4Txi#2B()5o?rl+d--Wl5?Ltkq#{ zf%Ul!=PkoB7MiUy$Mni!}ld^T4P6m(HHyU-jXK zJ@hKCjV-#p7kBvKCZC`G$#?$Oh{f4{`WyXizw=*&VB>fZA-hf$BM1Nh4DLxpK~zJj zNd9U;?e=f{{)cZ_TibZ=^2*Aq*4I|IPSazHKKk)Lnfu@G`^0c9o!~e??;%{LM~&l6 zCUhN>$jgQzS}z|)Faf&^MDut_P2-p_*k9Mj?jTrv0vWxEyE?+s&HI$776 z{uuKFPPm%5Hi0pv7MD8lvt7Kv;|x8?=Q+BA_IqFY^5IqVlV1F)4?paob7&j%EdQVU zuYUX||1E;!(RCvGIu-Qcn>Ja|ANbhEj-9%2=3mfb#eNu{Dztao{QN@?&Hww4{lV~w zXPz8hMlUeLUT_t64^CALjdWN7Jnr4N;0Yq2Av{Eqbt;@PRM^OCG6-kru{_fq_7_6i zMw*q3t1Y;?UUr9>AQd0NN__zwMJqsURcNvH9g&G;rknPwk8`@ zM-E>4_IJPSZJ&7~ed^!)p7(5hEjRgu-i(UVZEvIDyF1?dr*xh2Ciz|R-5>tlcW-WO z{`X5u`!1y&-1g}+XLsn_z}&BW@)N`9&5hw@D+l<-p-p<`KpxnbM+Z5Kbr2(vQn>7u0qYKX4Slr-(V@<%ijDuU81joNG(T{oX^jIW7Kc!r74kg5P)V2VP1a^uJ8E z55IYyu61tG&ln$n`l;Ff^r`!1f9?KH4~NKhC4Du(*8%z>q(3o^W$HlZrc+lRpw ztU&~*Qj4W^RGbz|z+JHlP^k5GJWPR2#$xbTUi(VfhH$?bxNUj+IPi^n5~C^Ks5|_O zk6SOn1$V=Oab!<&fBlF3NaB=j0=Rjy4IhX4=s(`rgO_%^@kK8lUimFArTh60Z{Pu* zc!uBh`o;qX=t(|!m;1sVw(nq_5+)bKK7NlKl;>tGyndSa9I!Mws1oam~OxN1i!K8 z@?*#7*?luJbg6ufp5D7d5Agiu@4w}>|1BQlMd!_MW8F5+pE=n#Q9!@`N~d@n?G&C}0}sZxA* zBK(A!)z^Wvrf&?^iYfdg(f_p47^rF68VXMh7T($ly^ZN(Tb#0W#>oey`Qg*g z(Nl-$mg1}Ew*~UxkwLy9(2A>LUTVzCh3%~=Sb_*}r4~!;U~Y@SU%Knul`ne;0HCV@`!<|PS zdu;A=4?j5bXJ3AlAA^h=jIP$50XXohLo63=RffHtbk(lbaHwe^dmwo#thp=(IzkNjcWUei z?!W*39sAz%z7Kuql^fgZKfSrN{X={A?ma$FKP#q(k@8W&^QTV_UwP_@xd*@WrJ28c z;<4egFFemH#z8tdxMX3Gjt=JJc4JM8Jubd7@IP9zvYXI#X|yy$5ump=q&NjsIH+-O z#ofmyI#sv=f`h}jG`a`p4o&oXl%fJSh>miB$Ii8J!AV?TtZ6nDu3r?dMV0ieg?w%l z!POF0YI3ItRv!R-uAU6|bjJp7Z20<#OVy|7lb)_(5paf|&U5{-%Z95jzhXFco)>~v+h2)#pGu(ZYCk_(2x66hMW-x&ua zJ}htqi4Tko+St#~hE6A{;ov`fl3%m5GF(ZIzq^dC-yga3(w&0`57K44ecN1~M_+W#fMypitPU^Gqms{@IXnB+Q_l}CoH;Xl zihhp#Rl4EgG@Xz+OGgoB34fOEJd_iOSg@12SUD@TM5+Ugjp!)WqDBBC=29qcwL&rx z8wwf4SuL?8@HY()?od}uJ0_=EpoISSVjS;657pY}g8^slSLgv8EA;hp|DL_Wp{1o^ zKV6buSzg{bwEqC^(%YuLfo^Rd=nOszp>Otc1HFltHuz2Y+xW`D{K5zKEbe*V58QhD z@7-|24R|)rK=0X{qci+7@A)R)(9?EkI*Toh>Ck`0DEdk;d&eDj%-YF9q`!M-XKv#I zzx^8egnz@<*3KJtcD7$dpXpaGtt^vCy0b|eIMbR`d)tl#0Z3F7L~vv zRmFOPqeFbv+%vzhL!af_bo{=(Fh9>H?8#5}=+GN7$&VvTQil!t3P6|e*2sSU;{3wB z3k&lfxa#YnydFtRz@r!a8Cr zrf&l5D*#bNcWV$Jx=IrGQdV}-jQ_L3wH8STCg!&sRxB8pK%=4zUzo51#AI!7Y2D

4RgyeJb?aefqrFd2C^J{vkSu`Q)Cx3xB+KVgA0Kx$_+lAdgLNrSn-YKYDa#_~=Lf z%C6;G?yse__3>+o{cDM#g)(ywy`<#+kwJ$4H$ME~8_uksTV9-7ym4(~(_40k10${JyHNOe+BWLer0B9p{6|YuOCGPnPE` zL<*+V3iz1VBZ;dNzzCU9K0d&~I!Ol{^z>Je8O2&z(MZ_H##% z9De4C`F&q_^PAs{yL!@u%Xn8l@x;#G#6$d4Xh-?~05yK5hhWRC6aWAK07*qoM6N<$ Eg6hN;7XSbN literal 0 HcmV?d00001 diff --git a/packages/runtime/assets/icon.png b/packages/runtime/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bc4a29d9cdc1af26d4f087f65945dbdb56e32ab3 GIT binary patch literal 163983 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∨bd+FK}Pk-bsOft!#eR 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 AG5`Po literal 0 HcmV?d00001 diff --git a/packages/runtime/assets/logo.svg b/packages/runtime/assets/logo.svg new file mode 100644 index 000000000..cd353e2b3 --- /dev/null +++ b/packages/runtime/assets/logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 0f1d8d5c2..739e19185 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -37,8 +37,9 @@ ], "scripts": { "build": "pkgroll --clean-dist", - "generate-landing-page": "tsx scripts/generate-landing-page-html.ts", - "prepack": "yarn generate-landing-page && yarn build" + "prepack": "yarn render-landing-page && yarn build", + "render-landing-page": "tsx scripts/render-landing-page.tsx", + "serve-landing-page": "tsx watch --include scripts/LandingPage.css scripts/serve-landing-page.tsx" }, "peerDependencies": { "graphql": "^15.9.0 || ^16.9.0" @@ -86,12 +87,16 @@ "@graphql-mesh/transport-rest": "^0.9.6", "@omnigraph/openapi": "^0.109.11", "@types/html-minifier-terser": "^7.0.2", + "@types/react": "^19", + "@types/react-dom": "^19", "@whatwg-node/fetch": "^0.10.8", "fets": "^0.8.4", "graphql": "^16.9.0", "graphql-sse": "^2.5.3", "html-minifier-terser": "7.2.0", "pkgroll": "2.14.3", + "react": "^19.1.0", + "react-dom": "^19.1.0", "tsx": "4.20.3" }, "sideEffects": false diff --git a/packages/runtime/scripts/LandingPage.css b/packages/runtime/scripts/LandingPage.css new file mode 100644 index 000000000..041a8f6ae --- /dev/null +++ b/packages/runtime/scripts/LandingPage.css @@ -0,0 +1,184 @@ +:root { + --background-color: #a5c4cb; + --background-light-color: #adcad0; + --primary-color: #00342c; + --accent-color: #e1ff00; + --primary-light-color: #245850; + --primary-light-hover-color: #3b736a; +} + +* { + box-sizing: border-box; +} + +body, +html { + padding: 50px 25px; + margin: 0; + background-color: var(--background-color); + color: var(--primary-color); + font-family: + -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, + sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; +} +main { + z-index: 1; + position: relative; +} +footer { + margin-top: 50px; + text-align: center; +} +footer { + display: flex; + justify-content: center; + align-items: center; +} +.the-guild { + display: flex; + margin-left: 5px; + color: black; + width: 3.2rem; +} +.the-guild svg.logo { + width: 2em; +} +.the-guild svg.name { + margin-left: 3px; + width: 2.5em; +} +.watermark { + z-index: 0; + position: absolute; + overflow: hidden; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +a { + /* color: var(--accent-color); */ + color: var(--primary-color); + font-weight: bold; +} +code { + background-color: white; + color: var(--primary-color); + padding: 4px; + border-radius: 4px; + font-family: monospace; +} + +pre { + max-width: 100%; +} +pre code { + border-radius: 16px; +} + +.hero { + display: flex; + flex-direction: column; + align-items: center; +} +.hero .logo { + font-size: 2rem; + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 10px; +} +.hero .logo svg { + min-width: 50px; + max-width: 50px; +} +.hero .logo h1 { + margin: 0; + text-align: center; +} +.hero .description { + color: #245850; + max-width: 600px; + text-align: center; +} +.hero .links { + display: flex; + gap: 10px; + flex-wrap: wrap; + justify-content: center; +} + +.content { + position: relative; + margin: 50px auto; + display: flex; + flex-direction: column; + max-width: 800px; + align-items: center; +} +.content p { + text-align: center; +} + +.shell { + background-color: var(--background-light-color); + border-radius: 16px; + display: flex; + padding: 6px 16px; +} +.shell .dollar { + margin-top: 11px; /* Align dollar sign with the command text */ + margin-right: 10px; + color: var(--accent-color); +} +.shell .command { + user-select: all; + /* color: white; */ +} + +.curl code { + padding-left: 30px !important; + background-color: var(--primary-light-color); + color: white; +} + +.four-oh-four { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + border-radius: 16px; + margin: 0 auto; + padding: 20px 30px; + max-width: 800px; + opacity: 0.4; + transition: opacity 0.3s ease-in-out; +} +.four-oh-four:hover { + opacity: 1; +} +.four-oh-four p { + text-align: center; +} + +a.button { + display: inline-block; + padding: 12px 24px; + font-size: 1.2rem; + transition: background-color 0.1s ease-in-out; + color: white; + background-color: var(--primary-light-color); + text-decoration: none; + border-radius: 8px; + border: 1px solid var(--primary-light-color); +} +a.button:hover { + background-color: var(--primary-light-hover-color); +} +a.button.accent { + color: black; + background-color: var(--accent-color); +} +a.button.accent:hover { + background-color: white; +} diff --git a/packages/runtime/scripts/LandingPage.tsx b/packages/runtime/scripts/LandingPage.tsx new file mode 100644 index 000000000..ac35d42f2 --- /dev/null +++ b/packages/runtime/scripts/LandingPage.tsx @@ -0,0 +1,206 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { SVGProps } from 'react'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const styles = fs.readFileSync( + path.join(__dirname, 'LandingPage.css'), + 'utf-8', +); + +export const iconBase64 = Buffer.from( + fs.readFileSync(path.join(__dirname, '..', 'assets', 'icon-256x256.png')), +).toString('base64'); + +export interface LandingPageProps { + productName?: string; + productDescription?: string; + productLink?: string; + productPackageName?: string; + graphiqlPathname?: string; + graphqlUrl?: string; + requestPathname?: string; +} + +export function LandingPage(props: LandingPageProps) { + const { + productName = '__PRODUCT_NAME__', + productDescription = '__PRODUCT_DESCRIPTION__', + productLink = '__PRODUCT_LINK__', + productPackageName = '__PRODUCT_PACKAGE_NAME__', + graphiqlPathname = '__GRAPHIQL_PATHNAME__', + graphqlUrl = '__GRAPHQL_URL__', + requestPathname = '__REQUEST_PATHNAME__', + } = props; + return ( + + + + {`Welcome to ${productName}`} + + + + + + + + +

__PRODUCT_DESCRIPTION__

__SUBGRAPH_HTML__

ℹ️ Not the Page You Expected To See?

This page is shown be default whenever a 404 is hit.
You can disable this by behavior via the landingPage option.

import { defineConfig } from '__PRODUCT_PACKAGE_NAME__';\n\nexport const gatewayConfig = defineConfig({\n  landingPage: false,\n});\n

If you expected this page to be the GraphQL route, you need to configure Hive Gateway.
Currently, the GraphQL route is configured to be on __GRAPHIQL_LINK__.

import { defineConfig } from '__PRODUCT_PACKAGE_NAME__';\n\nexport const gatewayConfig = defineConfig({\n  graphqlEndpoint: '__REQUEST_PATH__',\n});\n
" \ No newline at end of file diff --git a/packages/runtime/src/landing-page.generated.ts b/packages/runtime/src/landing-page.generated.ts new file mode 100644 index 000000000..be3acd29a --- /dev/null +++ b/packages/runtime/src/landing-page.generated.ts @@ -0,0 +1,3 @@ +export const iconBase64 = "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"; +export const logoSvg = " "; +export const html = "Welcome to __PRODUCT_NAME__

__PRODUCT_DESCRIPTION__


You can interact with this endpoint by sending a POST request

$
curl --url '__GRAPHQL_URL__' \\\n  --header 'content-type: application/json' \\\n  --data '{"query":"{ __typename }"}'

Not the Page You Expected To See?

This page is shown be default whenever a 404 is hit.
You can disable this by behavior via the landingPage option.

import { defineConfig } from '__PRODUCT_PACKAGE_NAME__';\n\nexport const gatewayConfig = defineConfig({\n  landingPage: false,\n});

If you expected this page to be the GraphQL route, you need to configure Hive Gateway.
Currently, the GraphQL route is configured to be on __GRAPHIQL_PATHNAME__.

import { defineConfig } from '__PRODUCT_PACKAGE_NAME__';\n\nexport const gatewayConfig = defineConfig({\n  graphqlEndpoint: '__REQUEST_PATHNAME__',\n});\n
Developed with ❤️ by
"; diff --git a/packages/runtime/src/landing-page.html b/packages/runtime/src/landing-page.html deleted file mode 100644 index 65e54eb5c..000000000 --- a/packages/runtime/src/landing-page.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - Welcome to __PRODUCT_NAME__ - - - - - - - - - - - - -
-
- -

__PRODUCT_DESCRIPTION__

- -
-
__SUBGRAPH_HTML__
-
-

ℹ️ Not the Page You Expected To See?

-

- This page is shown be default whenever a 404 is hit.
You can - disable this by behavior via the - landingPage - option. -

-
import { defineConfig } from '__PRODUCT_PACKAGE_NAME__';
-
-export const gatewayConfig = defineConfig({
-  landingPage: false,
-});
-
-

- If you expected - this - page to be the GraphQL route, you need to configure Hive Gateway.
Currently, - the GraphQL route is configured to be on - __GRAPHIQL_LINK__. -

-
import { defineConfig } from '__PRODUCT_PACKAGE_NAME__';
-
-export const gatewayConfig = defineConfig({
-  graphqlEndpoint: '__REQUEST_PATH__',
-});
-
-
-
- - diff --git a/packages/runtime/src/productLogo.ts b/packages/runtime/src/productLogo.ts deleted file mode 100644 index 6002254b2..000000000 --- a/packages/runtime/src/productLogo.ts +++ /dev/null @@ -1,16 +0,0 @@ -export const defaultProductLogo = /* HTML */ ` - - - - - - - -`; diff --git a/packages/runtime/tests/hive.spec.ts b/packages/runtime/tests/hive.spec.ts index ad66c6a45..6fd5f39d0 100644 --- a/packages/runtime/tests/hive.spec.ts +++ b/packages/runtime/tests/hive.spec.ts @@ -97,18 +97,6 @@ describe('Hive CDN', () => { const resJson: ExecutionResult = await res.json(); const clientSchema = buildClientSchema(resJson.data!); expect(printSchema(clientSchema)).toMatchSnapshot('hive-cdn'); - - // Landing page - const landingPageRes = await gateway.fetch('http://localhost:4000', { - method: 'GET', - headers: { - accept: 'text/html', - }, - }); - const landingPage = await landingPageRes.text(); - expect(landingPage).toContain('Hive CDN'); - expect(landingPage).toContain('upstream'); - expect(landingPage).toContain('http://upstream/graphql'); }); it('uses Hive CDN instead of introspection for Proxy mode', async () => { const upstreamSchema = createUpstreamSchema(); diff --git a/tsconfig.json b/tsconfig.json index ecfd2e20e..f6b7d5897 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,8 @@ "module": "esnext", "moduleResolution": "bundler", "target": "esnext", + // for landing page HTML generation + "jsx": "react-jsx", // TODO: set to true once dependencies (like yoga and whatwg server) add `| undefined` in addition to `?` "exactOptionalPropertyTypes": false, // packages diff --git a/yarn.lock b/yarn.lock index d9dc452da..10ed032ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4137,6 +4137,8 @@ __metadata: "@omnigraph/openapi": "npm:^0.109.11" "@types/html-minifier-terser": "npm:^7.0.2" "@types/node": "npm:^22.15.30" + "@types/react": "npm:^19" + "@types/react-dom": "npm:^19" "@whatwg-node/disposablestack": "npm:^0.0.6" "@whatwg-node/fetch": "npm:^0.10.8" "@whatwg-node/promise-helpers": "npm:^1.3.0" @@ -4149,6 +4151,8 @@ __metadata: graphql-yoga: "npm:^5.15.1" html-minifier-terser: "npm:7.2.0" pkgroll: "npm:2.14.3" + react: "npm:^19.1.0" + react-dom: "npm:^19.1.0" tslib: "npm:^2.8.1" tsx: "npm:4.20.3" peerDependencies: @@ -9782,6 +9786,24 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^19": + version: 19.1.6 + resolution: "@types/react-dom@npm:19.1.6" + peerDependencies: + "@types/react": ^19.0.0 + checksum: 10c0/7ba74eee2919e3f225e898b65fdaa16e54952aaf9e3472a080ddc82ca54585e46e60b3c52018d21d4b7053f09d27b8293e9f468b85f9932ff452cd290cc131e8 + languageName: node + linkType: hard + +"@types/react@npm:^19": + version: 19.1.8 + resolution: "@types/react@npm:19.1.8" + dependencies: + csstype: "npm:^3.0.2" + checksum: 10c0/4908772be6dc941df276931efeb0e781777fa76e4d5d12ff9f75eb2dcc2db3065e0100efde16fde562c5bafa310cc8f50c1ee40a22640459e066e72cd342143e + languageName: node + linkType: hard + "@types/resolve@npm:1.20.2": version: 1.20.2 resolution: "@types/resolve@npm:1.20.2" @@ -12801,6 +12823,13 @@ __metadata: languageName: node linkType: hard +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 + languageName: node + linkType: hard + "data-uri-to-buffer@npm:^6.0.2": version: 6.0.2 resolution: "data-uri-to-buffer@npm:6.0.2" @@ -19922,6 +19951,17 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^19.1.0": + version: 19.1.0 + resolution: "react-dom@npm:19.1.0" + dependencies: + scheduler: "npm:^0.26.0" + peerDependencies: + react: ^19.1.0 + checksum: 10c0/3e26e89bb6c67c9a6aa86cb888c7a7f8258f2e347a6d2a15299c17eb16e04c19194e3452bc3255bd34000a61e45e2cb51e46292392340432f133e5a5d2dfb5fc + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.3.1 resolution: "react-is@npm:18.3.1" @@ -19952,6 +19992,13 @@ __metadata: languageName: node linkType: hard +"react@npm:^19.1.0": + version: 19.1.0 + resolution: "react@npm:19.1.0" + checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698 + languageName: node + linkType: hard + "read-yaml-file@npm:^1.1.0": version: 1.1.0 resolution: "read-yaml-file@npm:1.1.0" @@ -20565,6 +20612,13 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.26.0": + version: 0.26.0 + resolution: "scheduler@npm:0.26.0" + checksum: 10c0/5b8d5bfddaae3513410eda54f2268e98a376a429931921a81b5c3a2873aab7ca4d775a8caac5498f8cbc7d0daeab947cf923dbd8e215d61671f9f4e392d34356 + languageName: node + linkType: hard + "secure-json-parse@npm:^2.4.0": version: 2.7.0 resolution: "secure-json-parse@npm:2.7.0" From 471eb4e01045ab6c6e0545726a3adbbf67875015 Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Tue, 15 Jul 2025 13:48:42 +0200 Subject: [PATCH 48/60] Load schema on CLI init (#1327) --- .changeset/thirty-dolls-help.md | 7 +++++ .prettierignore | 1 + e2e/load-on-init/load-on-init.e2e.ts | 29 +++++++++++++++++++ e2e/load-on-init/malformed.graphql | 3 ++ e2e/load-on-init/package.json | 4 +++ packages/gateway/src/commands/proxy.ts | 8 +++-- packages/gateway/src/commands/subgraph.ts | 8 +++-- packages/gateway/src/commands/supergraph.ts | 21 +++++++------- packages/runtime/src/createGatewayRuntime.ts | 4 --- .../src/plugins/useSubgraphExecuteDebug.ts | 19 +++++++----- yarn.lock | 6 ++++ 11 files changed, 84 insertions(+), 26 deletions(-) create mode 100644 .changeset/thirty-dolls-help.md create mode 100644 e2e/load-on-init/load-on-init.e2e.ts create mode 100644 e2e/load-on-init/malformed.graphql create mode 100644 e2e/load-on-init/package.json diff --git a/.changeset/thirty-dolls-help.md b/.changeset/thirty-dolls-help.md new file mode 100644 index 000000000..853a84696 --- /dev/null +++ b/.changeset/thirty-dolls-help.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/gateway': major +--- + +Load schema on initialization + +Failing to start if the schema is not loaded for whatever reason. diff --git a/.prettierignore b/.prettierignore index 93367e2d6..b5c0065f9 100644 --- a/.prettierignore +++ b/.prettierignore @@ -12,4 +12,5 @@ __generated__ /packages/importer/tests/fixtures/syntax-error.ts /e2e/config-syntax-error/gateway.config.ts /e2e/config-syntax-error/custom-resolvers.ts +/e2e/load-on-init/malformed.graphql CHANGELOG.md diff --git a/e2e/load-on-init/load-on-init.e2e.ts b/e2e/load-on-init/load-on-init.e2e.ts new file mode 100644 index 000000000..e722056d7 --- /dev/null +++ b/e2e/load-on-init/load-on-init.e2e.ts @@ -0,0 +1,29 @@ +import path from 'node:path'; +import { createTenv } from '@internal/e2e'; +import { expect, it } from 'vitest'; + +const { gateway } = createTenv(__dirname); + +it('should load the supergraph on init', async () => { + await expect( + gateway({ + supergraph: path.join(__dirname, 'malformed.graphql'), + }), + ).rejects.toThrowError(/Syntax Error: Unexpected Name \\"skema\\"./); +}); + +it('should load the subgraph on init', async () => { + await expect( + gateway({ + subgraph: path.join(__dirname, 'malformed.graphql'), + }), + ).rejects.toThrowError(/Syntax Error: Unexpected Name \\"skema\\"./); +}); + +it('should load the proxy schema on init', async () => { + await expect( + gateway({ + args: ['proxy', 'http://localhost:65432'], + }), + ).rejects.toThrowError(/DOWNSTREAM_SERVICE_ERROR/); +}); diff --git a/e2e/load-on-init/malformed.graphql b/e2e/load-on-init/malformed.graphql new file mode 100644 index 000000000..ba5348aa5 --- /dev/null +++ b/e2e/load-on-init/malformed.graphql @@ -0,0 +1,3 @@ +skema { + query: Query +} diff --git a/e2e/load-on-init/package.json b/e2e/load-on-init/package.json new file mode 100644 index 000000000..b6e033a82 --- /dev/null +++ b/e2e/load-on-init/package.json @@ -0,0 +1,4 @@ +{ + "name": "@e2e/load-on-init", + "private": true +} diff --git a/packages/gateway/src/commands/proxy.ts b/packages/gateway/src/commands/proxy.ts index 781308617..954fccd28 100644 --- a/packages/gateway/src/commands/proxy.ts +++ b/packages/gateway/src/commands/proxy.ts @@ -206,10 +206,14 @@ export async function runProxy({ log }: CLIContext, config: ProxyConfig) { return; } - log.info(`Proxying requests to ${config.proxy.endpoint}`); - const runtime = createGatewayRuntime(config); + log.info({ endpoint: config.proxy.endpoint }, 'Loading schema'); + + await runtime.getSchema(); + + log.info({ endpoint: config.proxy.endpoint }, 'Proxying requests'); + await startServerForRuntime(runtime, { ...config, log, diff --git a/packages/gateway/src/commands/subgraph.ts b/packages/gateway/src/commands/subgraph.ts index b76b82e50..daeec0f3c 100644 --- a/packages/gateway/src/commands/subgraph.ts +++ b/packages/gateway/src/commands/subgraph.ts @@ -186,13 +186,15 @@ export async function runSubgraph({ log }: CLIContext, config: SubgraphConfig) { const runtime = createGatewayRuntime(config); if (absSchemaPath) { - log.info(`Serving local subgraph from ${absSchemaPath}`); + log.info(`Loading local subgraph from ${absSchemaPath}`); } else if (isUrl(String(config.subgraph))) { - log.info(`Serving remote subgraph from ${config.subgraph}`); + log.info(`Loading remote subgraph from ${config.subgraph}`); } else { - log.info('Serving subgraph from config'); + log.info('Loading subgraph from config'); } + await runtime.getSchema(); + await startServerForRuntime(runtime, { ...config, log, diff --git a/packages/gateway/src/commands/supergraph.ts b/packages/gateway/src/commands/supergraph.ts index be111668b..c4da68576 100644 --- a/packages/gateway/src/commands/supergraph.ts +++ b/packages/gateway/src/commands/supergraph.ts @@ -81,12 +81,12 @@ export const addCommand: AddCommand = (ctx, cli) => | GatewayHiveCDNOptions | GatewayGraphOSManagedFederationOptions = './supergraph.graphql'; if (schemaPathOrUrl) { - ctx.log.info(`Supergraph will be loaded from ${schemaPathOrUrl}`); + ctx.log.info(`Supergraph will be loaded from "${schemaPathOrUrl}"`); if (hiveCdnKey) { ctx.log.info('Using Hive CDN key'); if (!isUrl(schemaPathOrUrl)) { ctx.log.error( - `Hive CDN endpoint must be a URL when providing --hive-cdn-key but got ${schemaPathOrUrl}`, + `Hive CDN endpoint must be a URL when providing --hive-cdn-key but got "${schemaPathOrUrl}"`, ); process.exit(1); } @@ -99,7 +99,7 @@ export const addCommand: AddCommand = (ctx, cli) => ctx.log.info('Using GraphOS API key'); if (!schemaPathOrUrl.includes('@')) { ctx.log.error( - `Apollo GraphOS requires a graph ref in the format @ when providing --apollo-key. Please provide a valid graph ref not ${schemaPathOrUrl}.`, + `Apollo GraphOS requires a graph ref in the format @ when providing --apollo-key. Please provide a valid graph ref not "${schemaPathOrUrl}".`, ); process.exit(1); } @@ -273,13 +273,12 @@ export async function runSupergraph( absSchemaPath = isAbsolute(supergraphPath) ? String(supergraphPath) : resolve(process.cwd(), supergraphPath); - log.info({ path: absSchemaPath }, 'Reading supergraph'); try { await lstat(absSchemaPath); } catch (err) { log.error( { path: absSchemaPath, err }, - 'Could not read supergraph. Make sure the file exists.', + 'Could not find supergraph. Make sure the file exists.', ); process.exit(1); } @@ -289,7 +288,7 @@ export async function runSupergraph( // Polling should not be enabled when watching the file delete config.pollingInterval; if (cluster.isPrimary) { - log.info({ path: absSchemaPath }, 'Watching supergraph for changes'); + log.info({ path: absSchemaPath }, 'Watching supergraph file for changes'); const ctrl = new AbortController(); registerTerminateHandler((signal) => { @@ -368,9 +367,9 @@ export async function runSupergraph( const runtime = createGatewayRuntime(config); if (absSchemaPath) { - log.info({ path: absSchemaPath }, 'Serving local supergraph'); + log.info({ path: absSchemaPath }, 'Loading local supergraph'); } else if (isUrl(String(config.supergraph))) { - log.info({ url: config.supergraph }, 'Serving remote supergraph'); + log.info({ url: config.supergraph }, 'Loading remote supergraph'); } else if ( typeof config.supergraph === 'object' && 'type' in config.supergraph && @@ -378,12 +377,14 @@ export async function runSupergraph( ) { log.info( { endpoint: config.supergraph.endpoint }, - 'Serving supergraph from Hive CDN', + 'Loading supergraph from Hive CDN', ); } else { - log.info('Serving supergraph from config'); + log.info('Loading supergraph from config'); } + await runtime.getSchema(); + await startServerForRuntime(runtime, { ...config, log, diff --git a/packages/runtime/src/createGatewayRuntime.ts b/packages/runtime/src/createGatewayRuntime.ts index 593c2a693..5d331ee8f 100644 --- a/packages/runtime/src/createGatewayRuntime.ts +++ b/packages/runtime/src/createGatewayRuntime.ts @@ -336,10 +336,6 @@ export function createGatewayRuntime< continuePolling(); return true; }, - (err) => { - configContext.log.warn(`Failed to introspect schema`, err); - return true; - }, ); }; } diff --git a/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts b/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts index 135763525..3524a3dfd 100644 --- a/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts +++ b/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts @@ -10,16 +10,21 @@ export function useSubgraphExecuteDebug< onYogaInit({ yoga }) { fetchAPI = yoga.fetchAPI; }, - onSubgraphExecute({ executionRequest }) { - const log = executionRequest.context?.log.child( - { - subgraphExecuteId: fetchAPI.crypto.randomUUID(), - }, - '[useSubgraphExecuteDebug] ', - ); + onSubgraphExecute({ executionRequest, setExecutionRequest }) { + let log = executionRequest.context?.log.child({ + subgraphExecuteId: fetchAPI.crypto.randomUUID(), + }); if (!log) { throw new Error('Logger is not available in the execution context'); } + setExecutionRequest({ + ...executionRequest, + context: { + ...executionRequest.context, + log, + }, + }); + log = log.child('[useSubgraphExecuteDebug] '); log.debug(() => { const logData: Record = {}; if (executionRequest.document) { diff --git a/yarn.lock b/yarn.lock index 10ed032ab..82a94a574 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3204,6 +3204,12 @@ __metadata: languageName: unknown linkType: soft +"@e2e/load-on-init@workspace:e2e/load-on-init": + version: 0.0.0-use.local + resolution: "@e2e/load-on-init@workspace:e2e/load-on-init" + languageName: unknown + linkType: soft + "@e2e/manual-transport-def@workspace:e2e/manual-transport-def": version: 0.0.0-use.local resolution: "@e2e/manual-transport-def@workspace:e2e/manual-transport-def" From 2d8a3bfe349dd1becbcf1607441fe35d49d60dde Mon Sep 17 00:00:00 2001 From: enisdenjo Date: Tue, 15 Jul 2025 13:58:47 +0200 Subject: [PATCH 49/60] mutate context instead of spread --- .../runtime/src/plugins/useSubgraphExecuteDebug.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts b/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts index 3524a3dfd..bb9870a3a 100644 --- a/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts +++ b/packages/runtime/src/plugins/useSubgraphExecuteDebug.ts @@ -10,20 +10,16 @@ export function useSubgraphExecuteDebug< onYogaInit({ yoga }) { fetchAPI = yoga.fetchAPI; }, - onSubgraphExecute({ executionRequest, setExecutionRequest }) { + onSubgraphExecute({ executionRequest }) { let log = executionRequest.context?.log.child({ subgraphExecuteId: fetchAPI.crypto.randomUUID(), }); if (!log) { throw new Error('Logger is not available in the execution context'); } - setExecutionRequest({ - ...executionRequest, - context: { - ...executionRequest.context, - log, - }, - }); + // we intentionally mutate the executionRequest context here + // to avoid losing the context ref and improve perf + executionRequest.context!.log = log; log = log.child('[useSubgraphExecuteDebug] '); log.debug(() => { const logData: Record = {}; From 691ebc7011f2acffe401327853666481395eca23 Mon Sep 17 00:00:00 2001 From: theguild-bot Date: Tue, 15 Jul 2025 12:05:49 +0000 Subject: [PATCH 50/60] docs(examples): converted from e2es --- examples/extra-fields/example.tar.gz | Bin 66596 -> 66594 bytes examples/file-upload/example.tar.gz | Bin 66544 -> 66544 bytes examples/hmac-auth-https/example.tar.gz | Bin 80839 -> 80838 bytes .../example.tar.gz | Bin 66970 -> 66971 bytes .../example.tar.gz | Bin 67094 -> 67093 bytes examples/type-merging-batching/example.tar.gz | Bin 67062 -> 67060 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/extra-fields/example.tar.gz b/examples/extra-fields/example.tar.gz index aac0985369a049c1fb0053d01f7709e06400f281..852bc9e429ab9f7636a16e531acf443f785509dd 100644 GIT binary patch literal 66594 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�{;GR*+UmKB0RO-7sX1iGu_@D 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 MJ+?urdjQx30HSe2761SM literal 66596 zcmV({K+?Y-iwFP!000001MFPMmfJ{nt#y6{oaJ*$YKp{6fNHBP&htF8PE`v-5CDmZ z7&vv;Ilb`SdvE+3_V4%y>`!n6h|DCJWF}H#W~ro%g#aSnix-G@--{c8NG0%=ur2{X z29Aq^wdV-&sRne}{o!(jfF;Q=!4;O{D?!l7yLqxdJ2B;P8&IqyC&5%000N0}2POiClVe z(B#9g3111SluejVbp1fuv<*z#lj*{N@GuuaT!J{Utb5YPg<<{syZZaOqToEJdsmNi zvzB37E;y+n9n{@fLZcG8{-oYv-PP6q{pWxD1M8`9+?Knz4Uni>uJ@jSx%~!HyI6#9 zJ6-)2dC&y_D?#XC#hnf0Bth~t%lxMR?hVTWM+s?#vXAdsaRr#bfok#&LFg@h-uD=m zr}CHwT<@1RIH15`Y-7HQux0rUQrfjFStiU$9&n(7X2Po}=(o5>+297lqGPRGaNlAA znn`$WU=*8bIyhk&KcNr|g>NEK?!lyqtyIB7kHFdnl9%{Wigu3w8^Bdz5-_Kl0z2_# zHlEJ^S&Dw$|9O$}%KyLbauENQ4EnwD2>&M;nmbZr4h^UaRYi!R-9*>bKpb`qRf7f{1W~hYTVv>Do_!zPf_*6KWWu z$@Om7#jb7a!-1(c$hI3c?!L!0PMx+uPmUZ|^><3y^F*tqas6UHAq4BgnFbIFF$B zHa5sX3i}?z|Ad7-!2X0|p8^dS$j~6>K_RSQS-1Uwy?T#jc04dBA06OY`V#c4H@DAj zUa|q{@O$hU>RjKeL*~Q!whx@meTf3fBBz>oyL+drdmV-Sy6q_R;Cs~br*stRd}&7y znz-pGB(o6aZ~y%5Pk`t6pDjppK>=|H*?D5-TILtn_zeEX5%eqndx`SO|Gw{X5dW79 z`n~cH|079)rl@=Tk4;jq{O=_SntiX)F4#4k3qOV%8VCCj*NBB&BS@fKivgS*ARB?w zbnx5(3txj1HGJSXJ_w$LFhb9Ell%4UT_j_Hm<()46M!jcdkqCOA5ZN|q85K86C|5p zZrj+GJ*KFkJd+@aefdy)SDQ?v5~ph88%q%a5f&LF_eDHc*TkTXO7O7ihS%-A*D`nZ z)jW3{=)!KL67;R|J}bR8EgAgPuw)-?xPF8~Xgk&nNFMG0L$GblRQ5-EdF!uhDnakP z&UMJHWK?yt`Rf2hb3JF1Fl}SzCM-ueZ2^zp-N%D=6P~iYYa8v5DURj^ZgEwCC8;<~ zXcI5pQns;LuROMZwp@%Yo~5S*HOq{KsOg8{m8e&iduxmslM9mycR=^7AI<5dSem9QS zzY_56*aJxI2}9sY;GQ_e+;=-b`_;#Gkt>nbUp^$^2ojO}ZCko-;m{+VCHm8ud&b#h zf=Y0o;q2q)p{MVD#Di8JcXdrr*X-8xO09_|(5$f;=Q16?!1A8HYPs`ONn*3Z%p{95 zV!fJ4x>_$YTzPe8z8FbvW7XCQ-EDWxs#Uqu>Knjt@-|&m_Fb(CZn)Fll^o6X_R`NW z6f)ghoQ`L8!H2)2fMM_D1sDD>v|U3ey(FjuDC~)ff(w$&<8tWh7sObYB8a1OwI>Lc z01mC8c^+_Xn1U@GY_4-!+G2mg8)MHcyRyjgow8%0`H>-sqZ2(4Dru9tg}qV!ZE z46|Mo53Ss|}bme*~s z{A8&i<=t|+YjN}8Xu_7p!{xMTbQ{&2n_py^rr@eQn-}z+A#7s>u9u~11W$JhOSU6t zVv9aKaLM^(aiLlC{@d=n^6TN~9gF%l0;U^Z0Wo~`xRUQ_`U6s~Jja8a5y-$9nK~zh z8ba$G$Rgt_&6KTGsB)BHKDsaytDBwtZKk4*#rEl65+=kifg*k=7j{5%Ymh z^ekSf&%^6!8xX8VPvTTGv=)mkx|wPhaunkiL3%Xq&sN>uDBZCZ_GB|J33Ag&^F?+! zt+c8Hp35e=g@EJ4V!3cC+Zwr+_+fiE;_!{cO;^4=Yn58+xyo7{wy9oHiBk}qeoGFT&~E&jM$Uv?PM-ZC~`wp@yyDp&2ybtIyYpi4k=6w znVHkMav=$}^#RkN8s)UnBluOjLT~z2p7PYv(8%IFvx=|mdcAxZAD@pIOGyr42__s}c~EnzrO;ZK*vUS+#nzSX{DxnZ)OW9&^pb zyt!?Y9U`mtGuid9u4mjr9n6Qb1+nV*a(M*`F6UNz>}7p_BAmW5=bv4}U5s=D%edS7 zs8pj+Xty^$2V|e|r_1sr))eG|T`D!b80hvg!dRGV3?s#a`Ap#!6D4Ie+n}b;Ij)fO zy5q$xmo8*=r&O7zy!w!YvTA0s`_1cLjv5FGA5jS37cz3f|_ zK~UtpPSYSOH>Rs{1IG&-hnLg2T-RlJEmqG7%|*c(%qCV!Oba^EsB$IW>G;E1%`T8y zZNw?!(3zEHz>19v%CpYu(Yz8u>3Q6M8o$Z05eJ&-%=;-w@RJievjpta1#P|9=nt!P zf$Y>;ZBjO8X4?V;r_0mwR&t9Xt7h3Dkux}-q3G&xE39+}u53pcXOzt^Q(Ix%zFY)8 zPP1QvH3tLx%9X!0u6*9DuMGJ+V#trc;FTADL%bNxCz7rK(~G+aO9ji21G-H6q zW1~WY>FISM=eDZjO2dwkz4Xjb*NvppG^gXs6XSauo7WHT!|iX`o#)b$wfin`?1p_A zLz874tON(d(P_818XPKmf|hP6%99ivAo&48;xh0+@J9kq(Du;=te`+3Jf?(j1&!>^ z$i_qDJ=)P*j`WaF5Rf-#2BS&e^?TpTPf@#x)KfZPqB!xc===21hpSuR@T(CG)5Xc= zf)7=36sK`@cce00yd8fE3*}Y8Rd2f)eBU`KrkP7Y*W~zZXlx#q-}63vK@W|E4s%)f zH7knRjjL`4grpzQZ~)9mcjAv3fL_{rYyL55PmtyhcOH%64RmeCT59s1J5P2#(75L- zWFUD;Jop$RS$d!ny7l<8U?{q~#CPd8Y?V3s&>o83tuPok`;wW zCcV2awf8^{IBYV>v`cyCy~m~Zf(%Qw7pyKood8=kwzH=xfV^9?m-_lKBh10T}`YuWAjmA({_8c?R=w& z;@VVe_OLzqmiUI`0N6WE6ZG4>_TbF+%2Qr>$}3MftMSTHUU|w%l~9#&h)&}|MsG)a(+#OfAQn5N(r15-8 zrJZ4WV2`KjXfznOHF-Re8!NV&>CdgS<@na5dr4Ljc|uzoXd_J1@1}n0`21nyS>x%c z3rg9*@ixceXYl)!)TJq=;Q7#}OXfwB+zTYHCx!d@FrEsK^&$V?C1v#HXHWFMP^h1v zv%p+FTlAkchZ4f+n&>$qzbzyOQl-j`mTkO9vT2wZD%%ESG)8@XDh=$B#fY7aLw1uM zwP3gFWWQCyN3)!0lKgtpH<}BA^kNRL6k|Q3lpk0mKfQ2{h_b+VFpqp*AU_aDUkBpC z1oL8$LwaX07cjfXpj(M%UuzX>10W=gk=R!WX6nZV6{9$BFO8nn0==%*W`5hDF=cL z2u3JK9h&_*LP|5Wmy9TA?o2?zn&|Pw6{r-EafchZtCqwVS2jm-tURkow4vwAMygD7 zSgwG#W;(f^WRj`6JXZ(Btm)@_Lo4Gk3QNzuikxiZXIlf;(rRH;FfMrH{7ZI;cGK#U z)o$?pR6Tej0rycxdP;ToLG;OL=yaDBJl*;9A$^E{56EFmKHAAB>FFf)4B5SC)`2jE zW&%v3zfg^%|DfX!Kl_I5y;!b5_Rb`WV9tn~Evo*s#aGOAnkHB4xn47pG+6dq-9p+f zN+o{8C%3e*Om#b=oi*5vqzuc&LAE!tdretcB%Rj8S@lx()Y~p8Tx5&^o|5!S&%VEZ zCfH2{-&g{9O$pDL67GEeVp$$HmYFosa;e6^^9SSlG9_i0 z4PN$hcu#J+3(zU2dnBdua3PrDGply1QA?MNbaT}lZYLE!>l16QYmc~WTdn^NOyU`q zgWn`#pYsscX>(_g`lRDs)IyOxSx$C{3ArJvHD1|nSA~AjP&1`&f6Z(+JX@ni12Q{O z?M`Dg;K=S^SXtC^g8|za3+f@flddrsbwHjOwg`P?Y1W8RTyM^F%)a8t z{X9JuS_?iMQ!Cmay^&}&Ce3o7yqJn^TbvlFMFDu#ELAI{FJ8-;Pl0qI;y0_^bDk!*jPwPNl@e5u|Ko&e2&TZhEF#7Wxh9>_0_?^ zBud-CusyRoHCL5uZr>);LvFMI6=A&*W*wo@=3}D^FFYbbDe5NL*9xQCV=>Q-pq-&Z z@a&#N$Bo_{@P*~fmUZ1O3LV$ptX!ALdZPhf=NgShDMsNlKDn%yV&iOclAQWf5ASUX zGVYaDlN7bgO-qtDoOi_bS|LP1S*)x}{+VM`+lxsh?g>LE-{2t>zB(dYDH zZZnnTjar`1$O&2ToH5%diEM0*XFFPk=ZZ6->r~hCoUoC-5tZ$yIIdDoXFM;N(o?IN zC>3+%c5F!a6?WaSrrc|;`5bs1oQZpGRNWan1k>J0wdkihHLX77GA(v8PZ!e5VMnSa zx%vuMSXOYjX4Y9c8#9}tRNq|VYqdUily0p~$vZk0*WuhKEM zgb$mLL`2WT2%&{lfIuu46T!X+0b-L-^t}6M^CDZau`Qp|-Sb}=Ls5w;zg#LSt1^(* zi8QA;jU_CAV0VB$T18wbSI&lkiE)=m5Xp1M8o`;WaY-o`hI3TjFmcadR+_RJ;R&Wx z(}Ca-*}qfb@m~qVKc)-*N+A9#f%vZk;@3_7N+A9#f%uEQ$4!m?BRK-;&PxcNoyTXBVsu}$Z=AsEkkC34XP1!yz`3xR1 zJD(xgUM7f=M)k+bdbIHJKQLYYypC#{2X(#E?_|^dez3k>k@yjmz9O@S=c_yIaoHs* zdB)0Gz4A8^)2rQ{Df>8Ws$+-4l$1+jb|G+0fNta(S3ENg`sp&>>QjZFwgs~!CNo40 zr&?3iZnd3u%YiTJe<17dkH^OU<(GmUKjvo;dprsG;q>FIFnwrYk*p9X^Ki6EA zHE^=2y1(&(*RhoM!y>rpc%6f}_UX%_1c`o@eb7!!LG+h>;U zeGer0r{duo_u)sFc}eB*pqZx|?b++DN4PX|e2`f}d4y(ZRW{OaY*qrPQ68wy>*0DF zN+h`myW%Vv)*uJ@h^F?zXkIVrc-ENOk{@QJnNeAnaNY5Ea<8-X?-axSjAQqQ@bdZ? z;TxENI^V|31*J#aT-QsiVgU7x|0Go1`Pd^c!i6Q9^<$Y1gP{ zMuv3kAW^}wRFu=+XiiQ^Qu58t4qX7FSP`d8HYPQ-A=Ep?A^#8`uSOewP650n_jKgc znYzP#2rok{muL7 zrZPMzLM~#$;!4lXSb=fgDAyG`Rk-jlbCtT$T zd1p479B1rKsd@pIF^l13kT#xo&>D4A3c9U7ovW*8}I4=B-|yZ|-lW z*{Pi5f1FCDJU#l~Pe{n+mf0JEaj}c`(}MAW#9kg={P%F~`eQL5DJm_c#Pt?zmkiBm zIqQN5Oa^p^Hj;$eIJ}i@!a?Aa;9y~ur9J928yvy>BC2v|HmNZ})-_R6P(2y&gq|2t zCH^})y}K%RLDNd}@)#q|(>Q+TwA7b@&h~7*N@LI2*S8*y1U_bNLgZ{QQdb=ssW3Jh z2+?*x%JCX4bJAZJhBoCH({eSV%+{!b4lEvICbK>w^?SKP?l3Uc2?*)r<;a5}a1B*C z?-$=JO7go|cHFRUR>xTW^&(LCmqhTg^T(3`4%ZLIE?Zb2VKdE)W>Yn0LC#rjO?SP( znlY%nR-8IC_;G)>mL`Laij6j*g~X$g0c1p>+l1Ng69_+{Rfv30y0 z>oMU_y-|%pdM~uFMGDe&iA4#W_IOiuX&maa!zl~RVWsFOoChyb*}E0B{f&6-x5wW# zWPPOeS^)4=vn_LNuq;k1t9g|iDh(f-LwggC{&BoM55=t#ir)k3x&KFqp8q{oQEY)t zg^|M%Ei6@gG#7MwhiX{GNP07~X%grpdKLgo<~f3ti1Z>iyd}iYzLS^(mGOdtAj*LU zl30JR>kR54JzA+gMGU@)%|F7XcgiyCq4`}Vo$E3@T|b=q{Fpy5N;Q!z`U653Nc9AV z03LC)YzPFKtkdmkLr2tvp%h!{)OXN1?O-Cjs7+#0cb70h?NyJs>IQ=`tPl#k>Wj*D z(JyYzvVTN(d?=!S>I{WT?Q(bFd`cTX=Zd!!NGM=NJ9h7n0ERs9c)F4Dq+0+BC?VCI zw!~)Sb4ypLleuf8N*s$Cs@uVq|k&?6uMya-8zW>+&o;R zNm!=&Lz*3mna1wwkT~(+ZV#nr-r?<@#)IXS<}dWiQ_c4&AJTWiktAAmN}wB5*v`ceInI!5;ri&x2RKQ@ z>p-m+yv7-W4E%PD%&Wcue%m*Ak)?EKhums+&F6(*_j@t0pqYg?=)Y-q$cii;@e93H zT9?hA^6=hjx66hH^i;Whj<$T%x^R}C`HDmH!&PXv@BUOf`jDg5?iF`s?giUEX!S#7 z;JvIA=K)3EDcW$g2KjFl@>j(>uCniXpb7d)Io!AXKN|OAhaXEaXBtajt`nt@YW7vQD`(8=>E?~VB z_a8&o6Om(H+xfaJ&KzS#pi*~N6C09Arld@CGTFyu!L2j5CtKJYt?Mnj@w$a3vf40Oq98mMWn9AtDUaov6fB*Z8qb4@ z=U1gX5+q`67o0WkWS~#8JcVpDldSHvhWIsjUU&fikFji-mK*O!&2b;R++5uPWA7Kz z`wALgcYid$kN-TJdi@xFb|m(UScJG5wK~0EKvc3@H*%%(oe+pqnwhu@+>7m@PcdlE z9_|qcu(0KzAu)}c#LWY-M+C!Vf)IiwDlCvs);DWRw)Lk^KP_fm&c zf)}3W*{=p}|6)`;9P>(_4>`K<*Rs$)Y$izaM})y&aN4@R@XxV-m6_$k{s)-v@&60c zuQ&Z40r2$S2?1?pR7%Owx+FA;1>&aC_fQ5}MXSi`ayXBvX%QsIaNbSU^xUOOxfJb; zRkUbQ;XP+$8x>t>$<}BUUb**3-*j=mD`L;SZCkOTOmm_Z;@T@j zb-}K=1fLN&!ts1>S1rB8pi}f1WeLtgio zChVb!&~GB(#@MnGFK;3<3d0T8R8a0UE3{2UtC{Hhdp2cT25nxnT$zW57)e zdOl-P7&hj+2_40}M^8PmT#0gj3gEIPOpx!c=zc;--U0T1M|tS@?#7LegY@uH^+0=^ zVYeEeyy@4?5$qDqZgB$qAwBu?k=9RInRj*A{muJra(j^7e%RXhBLG|m6Gc(gh?RAD zYN!mH^mX5a!idbk+No=v(-~LDZS(N#C!R9zZh-Ne;9JD|5kD(YV2pX%2Ht=f9 z_=)$IDx)nY&W=d9I>aO1mHRK-lB<-SMgH=BYa0Xk^RcQ3yvC>5x}*fLj!8`QHJ!pH zI>9|V;y z=BNkSp9&(Ke{dF8`%gP&Py8qZU($I--^;tLfd~5utYnz3ElpI{2h$0YS$l4Ym>zj> zNt*atxBaHr0X9F>s%68*T{051fJ7J4W^VOuh{nr7$3lR7Ix(7+?D$COt>NUKgNq|^qyIA?P+Vy zkVqil?f{stxA2lM{N2_Fpaw2;t5N_uC70o7vkpYGyB`jHO>deJ6$o>Ow)i`X%{JXB3LJ0n*(IE;Jz5a;5o!h=?+fMTUp7U z;Komyh-b6V-V}_7^;lj(g}UgEw?UR6oGoCWilGxBjzwH_#ojzzPt=I>Kz1>KdhyuA zfXrtgjFN)IrmRg*Mi6EU81sa~DXfDH>-)?#TZZ_4v-kP2mHBd9;mNMNv?ML!1)|Ot zeFVq(K~LpC%NRHrFswseUoKKzi%Av9cX8ODcCd9|L5$p}N6(~+qe)t$6$|$vSq2Ck zA8pJ9%d9k@5H$5pGl&nlV};4(o6mu*{i9Pb@oZXuMa37m`zfF9>`oO;QkvVd-}_(| zd*Y9ap!XNv4`?3n@P3Q-;Y=B%^I(JZwtk0Vr|dY{jWdCaIm>oNp=}PzNDwnC!Z&7L z?&KJ=P>11aYO`Rc3;F$N36b2EY@&koLv_AfM9D_D@4DhEXZoLDKJf4f^t{km_ty@O zogdCWIbXKc5UfBNeasxujXrnaK1ePjKIniAoRrHE#%z?SDu-)d+U8Ydu*ev0s%aeh ziz!>%Qyr37;cY^D09^e4a3awnqJaq*Lg?22v3F)&ifT&&{xAJX=aG4M6c9y0 zWDt~I-D@$=^CUjp-`;6vWu{rD(lSq$-dffD=0@Bh@kQ)80w^4GV}`pe&k}myEsZ+$ zZKg+)G$!bHyOk>Oh{m>RvM59OODa`j0giKet_48AvZ=LOV^EzKj*y_&#S>oc*Iys? z^t*q3Q`i+OyuA0)qP%p71v{NT`@HhcYkoP!@>JCoM-%&PA{jfLTsCu9lJY9z;Z{m! z4h9c)##e@<)WkS!f1?Q|Y>|##+2Q zPn17CX_q~EjP<(P_xIq)m%HCu+*2az_ue>!RyzdG8DYx0$fC#I@BHw{DQfA%G>zCl zXoRmn_y6+u-Keqb)9Uys(Cie2ba8RzJpIb2?c|4|9u4P**B_pQT`?#`@Nyx!qZx7u zjM!x3F!LrZ8@!2|rL8Dp9hOl))kBJkRT50#wNOCbo>>J1+C?PCq8S_-f+nua1xu(q zi&eCkT6{eGw1jDR>)w)CojGJ+5Bv9Ox5Xri7vr5|fTYk1k zHn>DYdF*uum&9|M>r~XAbj!J;bv7qiOat*No}-;^Zzc#5eYMN~hUlR!inN)$O(9Q5 zgFlWD`s1zaX&@armr|urUo)?B2`|U2z7-#+>kMkKAa`Kp9MRN<4zfQ-g>Yy0!*&Z6 zMl{f_uwL2mvcQ)D?AQApXE5@5YbX3s76=tb0aNO@8CJz%M9kE2K>U!@9Y)(2fg8k`IG*53;+A5=vVGCpj6LFd!7-g+xn@-h&jGk8b1kGW#?a{DF(D6uemOF)lAalXa zJoc-~U~xtP3@*^(kgWp38^3Dm|84`jg7Tw=zcIT_C;3+YBipyawOyj8E=LPS_9=i4 ztKC8)Fw^ctzbkZR+Ad|bM3{BP(u3WLbpmYbJhN0GBe%UbMM8O^046U^;Tj zHdRe`14QYw&3=SrsSXlC@hWHy6r~Ue3Xr;tvuOl%nkb;)OPtZ06xO!}yy?l&-8Osa zS9N{wobGhA^0ysHA@Bd#)uwdzn-jcuSpcwqZfui(*ofg@Gsce^G5k7P^oLQ1I8h(8 z>3;Oqk)ZeVLKh<`%B{nyn_D4Rs>yMI!uS%OPiuTV={$}I@Kro9v<@Uw$0K!_X)eIPn$hyltmxs4f)~^Tk zZVxvBpafg9aGYQs0u&x0Mv!Lq21h2)3=f*g9ufh30P;MtcA1gYkV_Z+@>nm3orF#$ z4_ET}myZ&B(2)IX=>FYk9R2iY{M|3o!nK<4ufThI2hzLkt1QZ+%xazRZNB<$u$8?e z)_^|F8}`SK@*nY)#UuTT$LYW71@B}$CpI{{aJ45?2apb#-Qmz`IHGF6!Jh9dz&EP2 zkVFL9p+22YOtg;xy>vby03QW7netn z4-Ne3O>R#&g3m$LU-AUsYTAcWu-oZPW~Y_Q=dGE@A73r}Le$6q@s*rQ8-MRt&_8YX z?|1&5D*L&aGYywbkq&WSxe!>*pOy0(ZDGuh#VrEmW8ZiLe>Ak-2F=mwHnAAnpdY89 z7XlkQr1v(p7rG$V;BJqLgA+gnV19L%`MS}_OC}>bkgCt;;{&W!%o+jRBpqdzANIX9MpiWqd3D_Zj8> zKc4fn|I{G9%j^Djy?HO`Q5}Dm^Hac|f}6W_5xEamo!tuWn}ieKx6;*!r|xp4ZoJtd zh=_?9cKoJwDe#fTquNs3-H5F^y%?>V!IH z8f240bH(5xmF8MyDilSQkqI`VHrWs$3u$Vlu+BO#M*$mgQqT5y!Lz~7P~Xd&?+W{H zbJT}-pbwwG%);|=sX??#C-UpAiGvQMEOk}`dq|m@BXZKHRpM2(Sem^ zdhc?Cwc&#W93Mp1je74Ga2+14%1i@L65z;17+}jug$zI;VlhX0H z4ZBJ!^El-1Uu^VmbmwP{+z0gSocT?_8|2TpG8AbjrwgFFB=AWE4KA@`n_aCMKp_-W zSGIkKGJ=98yvDXw1bdUiup3-PUyz}`*rLb~EZwFe=7;X+G&o;P2>Wmu@x5I6E`a^o z^X%rfee*jRkC@+;uO^)*Xgl8^OD#O2f`yRVaS|NIU0Ws_gFLF!tk{Mt>abevT$(wq zBvy1_%S~t)Ad8Hm*?kurfo`r7jgXbv{@7#-TTL zlvwLH+PMmxS_UrhacX-Vv#B@MGzIx#!&^!ZsG?3Xkw`|cQ0dzR$3Ot-NlIXhdtwab zJpgZEe~MuleN;T__voAN138WI?r_5i)ocByY#J}0ug2?ajzv5eaFGNdVWvvy(6hGL z5eD5=wotEkm9QnL`N6Q)E#C0~LC!Q1t|EUsB9F$P4+Cx*g>7^;R#c{>w?mQoKlS3f z;C)iYz2M%=gU=+K1O9{un^fZ4P>-AG+%{rzwoE7ucaHijjw?8C)xEHXodGYWW{MW8 z)(_-PMHfrXnpF2OIU7ro9UQ1oOJuzh(uZ4b~+%GyMeF5V97eYsKtQZ$XPXA z2=KVKtY)_EmjuJEF0Y6@Y2(iVoEAkM+}Mx5$#}*5t$a0Uu&W8ngYb~uGN>eA(JW_e zur(L#VV`yK7_P!*L+hkZQ9f=`D_I2L06}~Tsn-i^ihx!iswm#Uiw$0B?ySXSD7oy* zFKYR-U}sU;;HdY}%V~ZM?H3`hxL+<@%{!qdIKF|TW+7om;Rr_f4pa`Q3?NPiX30TC zv=!GUHuhLQ-VNrYZKY&`m}KfJRJN4p1VYWhq#zPjdEVgW>#WKy^M2LLp9TDuTNY;$ zUQvH;+hS`n*^;QK9qfBBi^p`92(&1B?QXN<8#9)dOdJfQ&K`li=%{$XDKKHBNigpb zsY-hAahB}%1L2P}0Zoe3@s?q7dD?uxZHxOsuA|23Z;bhyj91X#%GbNJb{IM|6Gl%; z8=dDizFYvlyqxM(7Q*O307ih$a4!aNqS;T^@i-eGcfH8^qB<01yDEDr2d80` z;sC0T-sR5vMJ<08>;|F0!%a~?Nq7bQRJt1T3U<|%w(>JKB*<=wtQ~`ks!^$<%y*+) z#b&jj=18A*i?z4Vb9%}d3~8Y|Yz+`xpwFOLyi*~WHSMx8>DaF;QM>HX&kFgoAm46j zB5*?!-c)lW_YQZfF*A2ssf;VcUZ?J&&NzW7yQQP^>QSF6(b3F-RvPT zR6^<~wA*&d6MY#7;tFREu|&!ll`emeWs!Tp&As;4tDNT|9uc1xucllMi&orFeKZ}R zVzKFiLo4-wl(^jr>w>~xYdRaH{E-&Q!kCH>UK92tJJ7vfb~0NkGAH_-USpQvQ-(`*SStIuWeLFXP6YvK4GmdOXHs-JDUe^@SH@G!Z7kk4zg_sNdR^-^n-~ z4L>hmO`4d(APIExD$ouK7o3A#WlH2WUcm~;vNr0o*-UAtN~|u7!((SVdg!b^qDRy6 z4+I-gOb?{%#lFj(X%fx3Q7u?N{9T;+n@a8k`*!YpCgBY9XB>KthBFj=9A0TgZAB)z zjnu+x79?vijhKOqHKKmQ8IrVhj-*Z24Bjz)ZUr?EW2Hf;$}dpc11B(_%V1smN?T@qmnt z`k*NbU=+xsK~%HBX=Qw0t#$~?YO~birai-N`-tIokjk2hI*Rh;>C?UNJ}KkIaEB;I z;F~tqXA&L(pOvmgEWs+FuFa$CaC5@rRzW{(XC|!ADR$E26OWIM%q*WkGhD(n1Ulzx|6d_rWRnNl#6P+t((K|(ojDsg_%c zN+a$w3evq^o4^0;YUUMm*=Rb`I{;c>@vW#o)d$=-`*gxO}-i1_4 z(G*^BqI)b6&8IiUWN_xQgGF&9ya^V(mz1j{z`zwrqNH8-_(*O&h|o*DNxf*lTgaZ+ zs;GgMdwBZA2)uWJF!(PG)qF9z&jspS9jx&Y%*;AGJU;J-*;L@a&|hmkuLA#OFR$M` zJPG}|g`ka`^c!A_6V*U7#hZ_`hE36mOK9yluBgRa5;9V$TW_+gyHuYxMY19n23t?y z{Q#~im7_&wnvEEN?L})}Xba)1F`B=nh5YCFEgzD3&0q%pMf?i0dVNvmkL?Qk^>+0v z@rQ=>{MEyg*q>Y0ZY<>nT+f94kR2!Dfg1F9fa-`x?A{!=@ZLh{TnDE-C%DvhzfVE> z*zqW>Dk%Oq`+(JuK)g+gD;*TaSZ$-ZuYWa-!T(#?ehtGibBy63@Y2}(nsG!h`D(~UrP6?BKvCYWt{!Nqx%ZlQZl}#WX@fJBG%@;u1^PXO5TP3e5YP>%1cc{vj z`=4v09&h-3#l=QnrRWjZse8I#nmXH-EsG{BuQn3r?PoH-?2K%)OCe&{)ETw}i&jjf zO~(f39Vdb*s57RB*?!&;Os6_f2zWVnxOX#>i`OO0OT16jjuVrHvSl~vg?_x%FC?9Q zeyTX(*{;7h4nb3dJ|5z0R#Z0J;BXcHR-4X8JT*Ui{+49MuZEoS;or=XPa)4z^p&0X zh_c4J_qL|T_we%sB4KsMf92zC3(y4)(*#0gdlQF@X8vLm?U?2iYePsV8U|#B(0;J$ zN^;OA#!wZ5y3>+UL41)0V-jL}1k>O&t%bwh%<}ks_dYTh&kIK_YvLXjg{Kb=!J#I|Zl~W&0=)R21-RxlD1&hnb z?1wWIZv`A{pGfMitZy#_sq!oP$!=!EpI9_h+ZC6}&9v+ym^ag0Mb^B_1oSza!14T; z+NCGvPIGO~OI3vcW5j`SmSAOy(gBXEh-UJMEYT0#GaA6ZVEpmi(`QNu%S|nlr;Bl# zw$}X9csTEs&ZBq!xzKC!U_}6!@kV^*>BLkizT>P)&YGWQT}x3F z!-;dV97}Y(m0fVsp?l|{txocpPIIci(Civf8B^jfYZwdhvXs?dIqPwqy1N!7$wR+u zrSzw7a+NRgh8|^+V=oTPNVckYs*fLw0?;F>bDVWP`Z_Vj(d?HvPE5vLMnc(?Gebzi zA5gK#UWzfBKJcu=Iqf7=R1%>g^#-X902#bYw*8o!ot3y)RJy%*hIjf_i9mv8T~D6p z0sPw~Zmg zv1UtbwND9bXGk}K+v!aC0HuKMEplXPKbmmC$P5(RLaZGW@`RwesxK{9n&vY4WO7~cX`s-lg0(-4!Bu! z?y89Y^>^)|%y6q69;gtUH_)(S;m;u7!wTz2=cW00(P<9TMXTE}+Da)hK(~te?40Vargg!o4u%*Ai!L;Gn3WltBx9-p z-(vV?2iZ(Q(ZmJMG#Qg(REj^GT5(83^d!KXA^U4TSDMYXi=u~ZjtuGYsflqET12< z@H79#VLZ>aSWrNInZ3r(gPy26l9qV>L#Uf=`F)7QpTXe_pjT|pxOl|t0zJjrp189% z%W<78=^L9NR(2c1Yzka?=621|ZpT@6JHnPh0dnm(mPS%Ke$9=V3!EEG`Vek3V40Wq z`h=t#btubsH-zU}74@>IXqSRfn5Ii9Cl ztieD(>>_G!VW^!DSOEme($gLkwc1`wo|S?i;`caPj{ti~>Xg9OSaq1K>}!)WhK#JgOHj!vhq^e-M{FV^u(->OhKawvRo7XAiq|Dk}J zyHA`NbbiU~c;;ItX;I8N+%f4?k^Ghq_b5>CzBvoqHDukQ`W7I<+N8b{aBLEcX?+M$ zlW~W@u-=ZPFpC(GI_bJ2pzZho?KT*2FkJ~SwjL3rq*mrLY*!s>n-RNv*rFaJcrq`l zF)y~_K{Q>;FaPo$`~oQ1hBt@h6NCc6p+m}>Z)!UMY7ypKcC7k%zxD)?31On@D}8p; z09}Nc%?zSXn_82CfsND+_5)iG$oOgk5^cVH| zP+Wjc01{OIY@^kouMC#caJly<9Ax87VLxE``f#NpzDS`0M$rfptRhWXi}w zR04^eQ6~2$0F=GRM=_Re2%W-CDg$0ybhuOh@eSp$XTqC5sM%${y+&j6=@dr9B}^ zeyv6YZrkMoFXSfnqDkTMr=sG&>FYT5jY~pU6xXqhi;F#R{^Z0*r8{ zqo(pvsUdqSWCy+!K4VCmNes88^>W0_2ga6~Zu!Q%H!(F{*tStvcA9fZ zUh$=|03$%$zp$Pww2$%97@Kc)!Mp)Cw_Rm0@`Ilatj-p;p2t<^0ZWHf=S7zt(ii_aIi>P%dgs6T zUYgqLO7xdN?YrygKL!lSREWuCZz0qdi-Jox?fLAgwKM+=->~BrVj39WT zZ|5_gt+(}tGusYq-ID~#A4l$|RH5gn?TG%Wym0NEr?{u4#7EcpAAl*DMD~$2r}iec zdDeiP;;Yi<&Xzf~@w zs}GoC0SfJ}l;yE~)g=HqgZsu}SW07&R-&~`g2s>Q^f!7REqs0gFV^S9Yme`{*qe-Y z_UTP#1g>akd*#BlQkOkT)NdZ*3lI41T2rp)-N`*(gwSTXSP^iHgTLs zMO3%FuoX16zHhY^)Rnj~hpB+@F2R2x8Ah|>bqY+y@~=YUvwYasBQyVXxfRD$hHGlY zgM^f~QY%htiRMbZFJ?#_s&QPOIy;x)^<;`%DvbOCX&C=N#=)Nv?*Bui^>I>FwkaT$ zX7xQ1`v7E2Yad)GAHf#rVZ|&MMNmMrHL$Qok7Wc>H7k1+RpgRVC#_m|>mNw-%H7g0Z@XjVApekY zc{Ed;6pKSmi2qVl{hiS!TX;d<$^E#6kmTAN|CJASEfQhet6~6KDlwA??sM9l?6qkg zR8qS`Aiia*)gI3im7zX|RdKqZt0wVLkMWO0FMQTmc(d?ctZ&DPi{xGO)`x`k4{@}m z%D+6QQ2n-l?F!_I&hbI{aPI=H3Vzm+N~_h%UJdQ2PO#&l$KcZ*K-=_`YPQjlS(o}; zY1j>Lt7&cZ(N5{n_8y}UW+k~i%{3ynv(Zc4^?1YBu)8n^^t)D@4BhWh>7@eLTioVy z9(gU;a~E6j2P5INs!+DH{C;@i9i$s{Je?^YpghOPHR4wKHdw2LGPl6!_1+De0f+22 zLOa-QLp<8^EJI*z#MZl&Kx{J(;+h7mD&755S*|D3r37?Xk=wekE<;Pi0g$2dqj6zx zOS-qA?eTJ*_&D}2bJ>1CwoF&7`f+BTz_}t~a#Wnb``xJG4d+Os!t@#4l37C2^j4+4 z=Fy(V!kWOL^;&!v5Vt@TsSaShy=AziLGFh`)U%M@8ltJ_AR{XG6k1 z7IX8ell9x8#GNVV99L6&QiS7Eeos}@kB-TthXayD`|s@Ha9Yj$a~Z&W$+v7SkSYTA z*3L`8yKceM>GBa^ftVjEnzgnB*Xr(+3A?GyKjDaf=fEiq1{UrY&8g(Kr{ zUS24^_zTXqqkf}4<$u78ool2?quv6h`l`frtDzR*?Y~=wX?$l&VRKmFUM0z$qo)&=~7YUEO1%XHXjk}%DYh`Uw~by_4Qo&2kp*hF6Pf1PxAf5dUBr{8yxGUINjVGnT+=v@KKOEh@c|)aMl6@1i1-_;IH3aGD$R=m}q9tWcHJa*p<*6t>hz%F|Ea`RDs^)GNv&>h3G{7B=Sn9Dvjqrha_Y%OOptbwJ6m{; z=c9n_s3?Jxo&j*ugc*RHd2b!AJ-o)&B9|MUwzkqm%0-KH+!;;l!Dc)3@AXXG;4OXD zytkyHZ~0<>uI^o9^nSfyUU);STRLkqAaEEXY*f7=@r|LzHniCO?Y=~HKr=Cl%WHdi8_?Nn#)oNk?e5&Z8nOZ#Ztw2yMRMwDub|et#u=FB*=^ zXnt)=zKZ3y;ttS$d%1m(cLP)J8o*!?%@&KP3a*NNG?zicj4Y6kSIZXC!}Kkzk18c9 z6To4qS=AxZfegwhZ&97rdX^w^E1V5=aJ^avhJdG*w*c;CBeI&XI68Co`PwHzi9_O9 zmLC4s<6}MB!aOwz^WDSY7v1N`{^cOM;Gn(?uoIW{*AR9tYtKn^cBy?7bVE82#LHXL zV=SwcPS-YFK_uO2;25kjw5Mjl032skrFba4#UNhQf=;K?AD6Ca6=uYf&^V-^7Cacx z1Upo$mWZy?(eFs2KXHvcxHZEkJYio*JAZUu=%485`nvW!MI$cj&PiLOdv$03lM~H3 zBy}Bye5^O!nFF|LoYRFm?fWoR?T%6qGM#U@CANsORzbJ$sUR^S7U5RPiDt@mq|s>F za)JqLEpQ5rC`Fzq)6`8lf27+^AC~^m9rhv0{+IOc_+~-AL zNigwhBB5a9O~w97R;f+Bn02{y#=u>y&Ywj7{G` zb!KgdL>P-e*XeIP+V!NBt_>%iE3;uJQaR_Ylo1uzlRmD6E}3rOtzC_N12xY-qujqP zKeZErKbJ`dU09!AcP6?@jP<#GiGPDqKF!njIr5GzuG+`f+Z}nnP0>0q-0%UwfMhT! zY=jb6Q@_<5_Wh#yxxvyH|P!Lxeo^*x5*7>2((ybppdHPua&IOscw{U-XIkVA2Dl^1_?*Y zU8fJ#U6|R%j+%{^FC~XK!lk-;8=+ zk^P;;YiEi+FWg_18fRPpVbN}^__*4j=h666pY8v@aoRq8U#5E|qo-RsXMWuvd0~Ks zenN`K(LS6K&%gYW7k9nTNdfK6gr04 z`fa35Mb>)v`R18}Kl9|TX#b_Beb&46(~H0*QM)NPz0f{N`FJ9tQE2ia#^zz_hyk79 zGeQdtiOYHrgbr!M6t+^jpj&Ea^;_0R5`Bheq`7I2wrDE^PbK zASzB1Iwy2-J#;~)2Uq=Zw6xr{-O12M3gReC1dIaJ(NbxsNy5Yh*$v%Nb+{OudT|0+ zOF3aCY-{saO33F=mcQ?;eB2Ha`*r;j41A}Fcu{KG&C3?+UEc3kU#*j%e&L6?h{eB= z-tNt^c5zd7w$ObMyRUW#&wGQXp>HS_l$vI}sPkD8=xcAL1DIl4otm$vD_v`5xk5;V z+*mZ&`a_R*h|O}b3hEvVOvkOXmzl_8E$SBt+&&c=KQEVs zzP$DLnj8Ni3&Hi{)el}GUQP2gg7dpKF27{#wCmY3d>Hs+-I{=j*bTRWHtYgje(OOk zkoEmJCSuw^D;6%3LOuoP)2){jIk*ZPWi;xp#-Rx+W2zI3hb3C7t!ZbLZGg3d$F9v| z*0*v4U-4ml%A@zL7NA$P;87%if7l|( zYZaWmOjff-Qz(XWwA`M#lU@^2g`eqDN()!vO0xqYFjm;O9`L*pXNJGbjp-DC=?b03 z1!j&|!3gJ6fqg?w$hE|;D~rGnw5g}zuS>`}4T#-~tQT>w(e-k*eGqp;P=^QlU463U zA)$m=m|)GUiaXA7o%upXA>yE8VjXP^K20~zi#=k()D7<691vP@lL+rY2w$tTJe-F zc=Gw62{$AQZXxcsI(qyIw6%_Dayk4@5v-8_By>QBqa{Vu&b z;mp3IbjW?&fag;7^zbiz1d!Xv0j0Vjbd(IuITEm|Vno75Q8r^9ptW>89>Y~DMf#oG zq`QlyFVS{ytuQKvizwovQM!7S4Vkq+O$Yr&hfjtIt=_v^wJqC?UiilgA2o1O~mo20br_E8bqRDBKYGV$)I0)7=RM;7q|efV+28&VXpZAY2Qy-IHE6$=m+zZeP4qH$0lZ)kIBqEwtM zxvpqSj0={MB2$!2YG6wQdINb|z_U5q0NrMp^f|Wbb13F*W`C%q@~on4UvH8G|3lX6 z`I%nHj(G$ek23aDD2F%gr(r+Fq(!rOHiw4PdS`i7V}lx%8NG}b?wA|QWvdBzk%Q{~ zbY*7UfM~?3%V>Rn$>t`i^@;JIPCPu|`4%QBBx?ys<8$54W25({9yIt9zVLs=+CBRM zFWb8l@8DMfb`Wvk+S$KpA4k1`9uZ@BBpj4jpXNxV9)VRe$y$15WZs;UInsOg=S@*gw)k)0c~|65mRO|FQtWH;9`I# zRAljj;VknWfrYJgO|MxbaIg>!BN<96XKH8(fI~f9dYHfG{j@*mZkE?WdFK;h;bA7u zBV;E@t$!A&>-S;xX@$80Rp=gGn->8)r0!qZ#}RKJs|e$vo|}~BMok%&&6aDRmO4aZ zp46OC8QT3pK~vCJE*D*q>u%TpsmCcF_IiDk9V65Gyqei&2!R?t zU#Olon0X{)i?8gi-nu z0zNZw90K{zZ=sjB@XK4|*Hk`!t`BJrQR@3w1LW|DDgX5Jz7lZodGFsG(%x>UXc<%> znf6&p_PZ)6HeH7=HYx&OmS~A#G+q#Rjj#df!!uON!zPzeqF*VB2xh_pqM%;cvcY)5 z%NXu#W)3s%O9QmH^IY{{jlXq@o&t_mmPS#!TWO=6jAQ$u>sxX39<}^H>I=E}g)iGj z;Ws#DJP`9JJ*-+j%g?tfz8|LEpb-d8%?Ntl8K@gZm-vKNEH(5P6XK$oiWkLd%y#Jk z4`%CRJ}w7}Z*7B#!BSIlNlflNI3NEZU|m?g+s@s6)Ng<2*sTX;YOlS++`nnl`}JC)!Q^uz{vV$+%p?@5J-AOa=IKSL1NY7nza^SHd<~u6vhOM?d8}2Si21F zV`2zQ$7_&?9GB2%xUdQ+EZYING%({{q~5kq|2+u1RC@6qwdFfY*_~i}t+-dPbmuwo z1EFthuaX*_J!=J=Sb(1oAP&>mHs6rcK<(r z5%o@yd%GEMpBf7OhV8(a#22`qeR1Ov*+7`V`PfH?w2^zvNCh|u%Vz+h6FE`bud#1T9l-t$V{r$Tjy={dLkNG= zlDHG{0-W84_F?QBQsxxInrjR>>W%|1EvAy5a=t)r>`@Z-C2XWJ1hox7Q5c~nuxT+l zvQ7TO-jj7HiY5J5=AC1+i+tyMXh1@lf$!J(;G=+-hc+OZt)_xEzq>62U{okYqA7-JeTOM=}ev-*r^$0zPlI~}5TFVxp zXOJy6tX;7N*mKmds0*NQu}PpucoACD42C5FgGwNe`g?KMWyqW>i2$>!RVX@^RP(qC z*c)P4SNIrVDrv#E-EJy2CQN+6ZV)#iiMKk0_HLQtA8GiSZ|(>4T5)slV*$Na41B}6 zy>@{;CSu&IOG(Q@oP}bHm99p`+o7%$zG!b5YcfO=ce>2krQT0hBGR8{O1zCl$%B=l zQ?g356nrNE?4G#VN!W5lL-Obg>ojf)ao;EpeTI3jo_KF|>v2cfAG7E5st*lR{C^@Y znIGTjvhzuB0&s60;4ed7&q?(gP^ane;!5WXrbSOoZ?L3>JqIh-q5(P+vO9(%Wyr9@ zG;5-Hj;@`R?@|gw`fCs!g2)JR_5?g$`_MuoCyd>Y$fC3zBuYtU7^iz4T!+6_Fycn&ra~iUG@!0rG*7!_v1io8 z^ssnZV@P1nCNVu(v5V<=qj>{&>|%Kzsuqz&^@_A&N<=$o*kYtbgAqwf`c}=P#R{KA(Pib zfE!whNQZu%fW2ioTkFHj;t5n-??@g<)o7bX8U)DtfpM55DI60=BQIR6b_2z0=tpZw zRC+SMUgQM5DHsl)c3ME{Ty2VZY#8*iCG4Mv?=74n0+al3(}9&Ym+b9xAAxt16**f- zZRvXRhW8g05AXbx{J$Ch=!{*RcFqI;oXlI@Yb4s3#=VCVKZarvBr8Tx$}1PQ!?lIumiVC=$tliI_nMOE|ws4o{iGM7-mM& zR#fYqUm9h$TMdbX6PYytn<(laIbN80Z$GLxXxOE-L9-3>3ZWa#+wa$My)C*G_bjps z)3gs?69r}PMl|CI!|i(HBa)8)&wB*5*c6}_+M#I~X5@}Jvadn_H8J!ht*v4O(??Xc zF9Sg&q6ovNO~Z*5C?GPXDPa>X(0xoZtBN+*eQ9stZSCyXoyBH@M{|*%GHnF?rEOCk zIF}wi_-$>~^&K7iEYJ@K`M>Mye;#zh&0fUEpVN*R7r{jX+!Pr6`2BX!^VL63sdz6p zw>+lJe;=`T>neQz`Fgao-*Nluk8a9yp#`yHNxl)y~1zNrQ*N|G0%@@BOTI zAI8zV{BhPfjoo6mstsk)+}Z+MOWif1x3BPFiNu@9xJmkBW9auFw`!ck7>)Caisucn z4>o%n9w)d@PNLNus}#c=Ac2ghW7ew13=@603;fjw76*67%yaYGZc)fhiqiG1NtxU3 z;rlzswh{K_fmhASuAVsOy#Aok(R@XZHN5XO656^NSHQpJF_!rw$%H;vX>uRNInMg+ z>{Nc&LQ+{1e(EuNs2~uywe+c?%Yy*N)VVTQ4w`k@CnG@uW_&XfxAk10dbJK~xdn%E z0Z&*Xff-sGEkWE*8B(n_qV6QA_!%*!XE1)vOOI6M6AAP8ARHq=-;PguvqjSUq~}Q! zZRze(2;FV=3fPr`2t;~Y&gBMszkxGkO+cu~=@W{F=T4>YhQkriT(FUpl52ECbp=tv zeV;AiLNFjXj=@$_@hfosYBJu(IR1>0@)*t$?=P=(PB2>RSzV#aiOElA=qgl>y+reX zo@AV^O5Lnv8wgv-iVp7kJwuj?8H#LthOt)GxGOGMDXbPLv+V76{ehPi-U?7^#gqx| zt>uJvc)S%+kJJeAg#Y>o%(Yc@H&062=KxJRYTz?!gYe}E> zkvgkFj-$LWRWqEvn=XviB5Ae|#0zVU1$vT&6a9K@p_Bxoh1{{sG1QI!7xERg|H%-N5h|0TcQOfkHi+nVx{QBFr=Jt%Gn+Dx^8Fx}M zKlt13w@t?3Kgf3*SpVw1mzd`ldQ=zpK}sG5zmV~8)V3?aWbG?TitO{OPpK4$gd;!R zZ*7H&sxD?YKA#dMf#Dd1Clyc7<+|~QI;Q* zre#|6#^h>)PiS!oaM}(^6}X36F6R+a6!_q1I-JfCgDT)C-p7eO{mcpSUAWvxl7F4o z>$A(`=sw|@wxi!sPHx@E-M9zbgJ$~3>wuq2ihDKuG18U>9k^ZQ8|nqrSgn@95NAnC zj^v=~0o+uP-OPg=%XAaG2SU?`B8z64E&X`5ZT1EUBJ6(WPsu`8SNIg-gaJf}bk1gB z>Mrc}taSVY$E_EWUg4n=CElYT-El|hry`s8pzCd z_{_#WXYt`K&weZBfA1`Ll7es4&mZ37sS4}Y0KS#XpGRyFKpZnN!hkA2oA`oUil)0( zP;EjtwAgTNr=#mjoG#zm(13-cNi(n1h&^GtRWi!B*}KercBb4Nt;{1dN=

I^_ucKiqmX@ebAAy5YfxKhT-I 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 O82kXwbuk?P*aQHXRxVWl diff --git a/examples/file-upload/example.tar.gz b/examples/file-upload/example.tar.gz index a3d91f53f7b9450c3ba459f8817e13f6e5d5661b..cd21fa49bf6fe256db1074864f38637f16a3b018 100644 GIT binary patch literal 66544 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 O{*NaWh5(@e*aQI7yUh>) literal 66544 zcmV(0g#x8 zfgmX>;w|3ZdvE+3_V4%y>`!n4L{)(-vI^DBs%~{NHvlv5&6~)3?vMjhXq(@Z0WSi} zM(2tOlCG&5y!g!p3kC~AQNa_I<0poZ%)`51j}s(=e}il;If!$`wH@Aq;@?8nXIMxK z(HunsKPA%yL6R&1mBG;z%hDXi-F)iNUCV2ih{>a`CBrvrmSxY||M5GH;WY6LLci94 zqU9^M|ET^Wk)T`1>sB{X#a0wlV7?0e~UyAaC7tRw@BIW5XV3a6X=MdBRN9^Jzf`Q#^zsdZu+ufBVfa8 zrV0@F%CC7vFYd$8S-`0sz%` zMMuK{9xP}c2Jq2c`NR63fBg6V{@1@F6T?LWUf<6aeBMpX+%h!8aAaU1GmF;+8Q92d ziwH8WONuTbumySlAm+V4<9^+q7}0qRAm4`s|FWOK3RHdS7 zvs@if4S`qHEmRktLh^>E`-8q4+6{sr@87?-W&cHREfq=Dk;ADuKQ9*Vp%$3is0{N2 z`}_>uRi>bArKBD5ZwP!rlABQYjsHBFLGfsucFZ|E8qT?yjF82cPdINaU!y1IOgu1| z@QWZvMTf3LRS$@DQ$v&pO%Kk4gV;X21vo}mSOVt}gRjGo#70>q}u45!6paToCiF+vcU-3(1>X8CbKpbE@zkZJb z0vuQ<;@Un$4A(+_x$9Rjbm&(cU_p9ChfkeX@6qeq^c@sumf_jpk-QWXl5*@oWB`H3 za?!`+!7RACpH(~1>mi=ZJAM_|m_Tq+pE|`llmCZ^fSy2~D-!&SkCE~6{GX<2=9>S% zMY-nxUw4Vx|3!^HQl82GF`Oli*Z&m3Ui1IAC<@FNV21EJB7!;0-*bWLkw5kk_q(4@ zWr5%Q<>m%PFP{w}1;)a#KIHxBpsVkHhgpT@s*Ym9OynKnST6YS=8qr#a`i2rML84y zHDJpZ^8+6c|1tV{{_`f~8vnoU61D$}8hxZZ7yl`WJU;(r3Gy2M-=f^be;B2sVf#n; z+s8!7kN=%|x!-U1+*yzf!03IP9r(aO!_9}Jpem0tgs|;=hG2)C+wYKH{B4L}Kz^~| z5?%mhxN=s3_3qr5zW;8&Px9T5_lyVvbkQ{6LjN7|{?R_gKmSg_yz`H{t%~6|8qo*{9}<4$5C#Xu&>=Ay)LUTX zDi*MB?^gD(E`*U^w-3g*_iu4z1ymw1VfY5RphWr!T25|B_#OU+r*Jw&-S-itJx)+U zdMbruQTmX4-^!%Yse@L>R+U-MMx?kDetVZPLmR5645!Dmj0F%J)B+lBnu;z(XL5b7i(4W^M#c)YVjJojhO}>M6whom~&g^X`D!sm@;)TZE2UN_bU?vDC^b4 z;AnD=5sU1kC(>?7FPY2Y5NnW|mXqe2ED5ZoG|6bw0Yz@8;d~|N_01?34oQdHG4Z-*zTJ;72;C*oR;p^)w6lVmcd@-F-x2Mm#q z=WX~yQ}!MCz9U5(Kp{dp<88oD&(rxg8z9C)7l9r5q6i^a130ys;yA#%?-n~pJqL~; z#~_0q)CtM3^Mh3Mz+*q(pUFG&^WSV5hWdP8t~2M(P&r!@f?qX4BclRqi4YvMJhHx- zq8}=GkMpEC3k=9_M}zktPmnkf68Ik9NL|}clq}${aeYU5_pN747CLz1q;01t7NAk(toi%GBlu%x1ApR};f6T+0v8U7e|_Ad%jU zKq<{R7MkcyF?~w4#25RN7A{j_{UKg41yostM!|8QAmnk=ef?dh<40bshPwDbx zw4S%LUbB|B3#%N};%&Kaa=hBt_+6sN_H#rXt9!0U$dSz92 zb$lamqt0l|qFaHTd#<=>m)r6=&+#&}p3_v^j18w^r))1%aDcFIn*A-*SJCjX5I;&B zRmIhDr7DiHv%b*iF!>B7iA`BXvz}F7=DUeZeni(SoS$kUwIuVEA_I1fA=M?Cm5kQM zIImMBw}To-IC6QU<m4Wz8)*LT5QP>Wx;Zw5Ht(jxI4ZVe6}9YuCZMSWX^fbDL2^&DzBV zSdJDe%1{z#lhq=hDdtqGTwSJ}#vCh) z!)d@c#+F^H>yGMmvxqD8F)PhR)}p)sMq*NwUNx%6 z(@F@X*HMGt`JIoAInh*iIY`3l};G(|JI|jg5Rh(CL zf?b-?a*iHhd5v``f~<{pyr)`lWjoGV<6L2#-toK6G=3rv4x$>8mE1y^E zHADW2GUR7qaLtRqpuE_RCxWT~-AUT^xrB&JaTNBUvG`B|RPDo$WY}?xldP$kD2|$h zENeB<>|tGAQs^NuZQIjkPbiQJbtW0r#cokSEu%bLwGx0t6XRl&>Z=VbZ?|icYST>M z{mep>H%-QB>GR3u6XQo4o3~Hz!$r63&gasCu|F3$Rzs9VQ$$e(9&dr9e~~IF2N#B3 zz@-|J^dbfe2yTFoqzD`k{B`UF+^)X?%S#Xl&oTM9fSo*n3Yj`S2!V32p$ z(c)1*j6163m$2Pg>M5SkQJnZz|9txB;Od?@JT)SryExfha8Q->?KCOxFYJYjx8tL* zkY46(`F@ze`OZl)MPKu(A|~%mWBW9HMEmdq9e*xV=*z;>tT=3Us=A*LoP37E0?;Ep zkUu8?YAN#7+;h|pFD#!Pyg!R~&^0Y%t%wnIo*aC@@km#`0Ok~Va2O*PYQPez_4rsY zB;7xfd-ogmN*x`vholcH3<^eH{1l06sY#Q!?8pF5&cHtCJ)G1&I!HVuG{kL)il}|P zfa?Ia=UGHB=Uo-9#WjDvk3|uuKlw4^fwU*M4xCJI)NxXq0qq0AV$5t5;7@gWzY=^j zEgzk4a37j)IOlfZE|zaNb|l|`I*Xle$O+Bm(xWAZH$fuH5LBs;n%M?DT)3I33wof_ zR5r5Ybns4DVP?~vW$w6yx^DE8S*?{=j*Hul-LLPKTV*!e=yKg0b*5iZz9Couj?Phd z_1>>N8QHFR$~8~9<|$`6u6fEePdUkQ%~S5kK0%(c_gJr!p}@ZV+yp-2XC)hQD$U5W zQ^aLrYz`9J4AshHI_ik24-4~gQ|$qtAaQf<7-poO$dTBFX;oXq9%csR7{;$$o~ zJ-U`1ERBp|xyH12$*d%HK-*~kMwp^Lgnr`q{$cE>@p9J%sZ3xw+hg)G_4D%>BF>&v}^j`TBow%Kn$*pV-t-q_aR@znb-*7Uw&J(=G9RL}6EC zhC;Q*j@KQugwq-58LGP`p*6rsLdZJJ4Dy z40jS1CzTR?ty~xyI5)qrkBGCtc+!u2m?1x5NS_DdLI?9^kn{P@U@pk)VuQ|`=>w%* zst*CrXye&H#;CcQ7*@5?va{CuMjP}eV!6P9?sP>qyLp9l$dT&w6N`*h&(`uN)ilkn z*;vepg-Z!WBezTAm${yBanQYVmGbgL`L%-6`V>FJzXQb3CZ8Q-9QSk*dzxrp)ayW)LNNiRgTIOTe-i!EN8hl&H}e&~ zyfe-sh#9fHMa`YJxvIX&khr&5s&$Pa!Ftf{6*Fc@D05?u*^$~h-RsWGoJMa2X;di< zbN#W|Z;8^1vD#D1>!;1Rvs)ABjM9c^T2LsB+(H? zri)GSEmo^@(r)J!2PI9;mV1K@wcB!Zofr@C+*mfdO>fBJz2T_3s^^D8x;q>V=V?u% zv9?BLM%EyQZDyD$Tzb^$f)r6O!#LsjfbdEOAgECwzOwWfF2#8D_QuDJO(Q9#mHI zncbO9we+e8oLY{k7t`W}|Bny{@0VZb{FyiZ&fbD}6~LaB24Q--AwD?WSwbFHGqcPB zq^ZP&X9Nb+S$pCxi~^UZvaaUh%|V6hj~4@ZIMlK7ZaC^J%x>M5#kxH(@yv)FZ$Xvc zZ23i(uXeb^_`(a1m{5wliT1g|=>A&FYa?hc=ny>ny7;(Jdqb|cUYMe)nkBw#n_JJe zshl$&at*fGY?c!Qy5N{~qnw!JT2p535`DD4EsCg9_NHlKou8KlXSD3jIvWX_@zTmO zF8MddxVZUT!EpM@(`zH+gw#WroFIsgnUc$@rTlg-id(s|T;Nl@>R1!HS)S2}4VvpJ zS&l6&_?}hUEc5(UbjCz(kY?FxC6jd=CatEu`b;S0E1kp$bF1{GZOqxLulW#o9o&g~ zZB#u7I|NhYrds@4or=4|K+savMYpdtdgzV}YbR##G zmei{^u)?@9#f`pBx+^ukETgMcsfg(-yT;UL`cnT9y4Yg)WtRqHU$gkL;`UME`6_@t zlmd}@SP>th_3>n4q!T(NcUOA1S80sv*;yi6-z9{CwrDtgSM+Llw#a04qB|G!Ya(59 zw;bx)Bb+2zFm>{5tP0nbAacoJMD4VBPwamN?N`4w-M8?-M%ULIBlvEhr{HQ zOJi0MxF$fhQjN==83%)O74P(!Oi;UmSrOAYtcEkKDQmad&3fg~m-Ii7b@<0)+Cmjis+=# zU%L)Nt9s9)=1eGP0N>Xv)*u$#QV($0=vjX!7$tlp(U<)Q9DRfV6rI6S%17FXC%4sO>~ba zopCISGbWpmn%WTRo#K#xh>usJ4L_#<-jaJda_Y^K_9}sP8iPZ|LBOKIW;@Bs(x@QQ zBQt>>jcmkij5!;2iagUGh%Kg3uaE){?Mu4I_pzA-jm+HW+apJuP4@y^H3+bqc|Ub_ z;MY`w^*nuqe?d^Y3Dy@t@RPZ?*Jxc~|L1aWCk;l+V^Wl%Qdq}G?enLVnx6IxU zjEh~gpB9W4Bo6ZM;=k^>>yO2Nq^Pu9B(A5hJu)OT5mh-jpVk;5>6)m?h@K32LQjmS68{~Y-hGw3fN7<9d5RI|X&k?E zTI$O{XM46@rE%cw>s#FufsdJ+5II|n)ip}P6~<;mA=(W|Dc&GuPWp;rXfvKMEmt$j zY=bz+(Bc7RIv>D`K|goMJqE-&0m5irjy(tjHei+We(}wsB)^+wrw#jNb&BO*F9L;s zNdzxDe>@rBc-=j9*}?(|+gWBb+o~}Oa>;TVy5|MfoI#|G?9`#bPX_bNVmd@sY`hIE zI3ACUPDT{EO_+lL0rS&2upB44Fbx`F!^h)67%y*4NLrVSxrOs9M-smrgr^h6q1Il; zk8=EJE#Vf=(Qonmq5DU!pEHe5-G0n>uTSkH62e5M+96;8ZzjXVtV8eo?M`K<@FLF9 zbh#3y6|1g0P=+;7X9S|!lpTWgTI-F=jaQZHsLuHH(DSznwZww#Px1XMSr0`3Z?-y& zaM{hm%#9C>J~xNo>GfDM?y*`N)Dm{RS99TqR?myaZ#()UzUjJFqN@3I7jWm)!yH+gq2q#Y!k00dQ3P}e_Ugr-VZHINddYpu_&R_ zK5wcnje`SrG-JUfBp0a6d61Gy-mR$ZZ^Y}MJ^rpC>m#+-0)P)S+cMV%%Hm;VHLsFm z5#dvF@L=MRKaSVup}18-@q0i$_x}jd^S`GmiY>4yGg3IFg_UZLmx5035e=)Dh2G3< zn(Uy7o&_By^BiH3h_sR$-U?)B-$~4&%6LIR5arMVNNh0Nqr-YckJqYC5yNj{^N+CU zow5uEXnvPT=ei6}*WHIcKjsgFP)#I>{*Vxci+YNK9UgYHY}5(18QSY**~H?J`~YEb%w&FcDcK7 zKBbMHbH!TUZH3PxB8R1LN>$+8<8rKk6?Bp@ ztTbehk%{HloM9~w4Oa6hDKz0C3SA)jZXLwGHV@Zn5|(M+O|xS$)7V`f6DPXv?pS)} z9o`;jbS<|ue<5F%2SkS6dc6vdD?OhC(;tb9d*GJZVhg*nv9jLX!Yn(C6fN$5xyy_d^w|#>b zSxU!t@U3>&d|v2vzZU}wm|1v({+o8ktjOXKzu;@7b=mwW5AUsZyKHzwPnFx}Xv;^f z3upD2uQ)b8UWIo1?jLGLA9J+Yz2dITgJ9c7t$wTwe2|smJfO%sMH{ZxApfmG{;GJ# zRrXyEG=X0!hx@kwN8^6#@MB5lOk;&FX^QkyD03ONj;%oGb*L>B@&dmuwmgdtC!lJI zG;7VYD94w%!TC!F?u45hmr?~al(ZPxHs}o&ey`7J(e6%bsjVRaae;#JAz0U`(ugm;7hW(HKI4FtV1+16i{$uERB67-WJ72fOnPbceWYOE# z#Fk`|87UE{2JK32m=l15z^GDKp|H{by#mF71n+EjQ3ffcOaj`eeT9R?V5-QChL`(o z$nU0QO3?C;;OtSy!f$4a|GIcYels55X#5`o%Jd1fx{~ z6M`kmY$u;?Zq}G=>rX%Yw7`wC!vx{94Z}RDgNK6@yzo5Fel>817o(zk$}4?79OnIO#{5e9w1Y3u#MKga%cW|rN<4=~^3{}-lTZ~8w0;OV~y1hkn^$t6eY3!#xM z05|1I zq(H{YbFwhNCJ3=gK`oQ0*oyBbNL?7&Rv4ItAlS-wnCddb%F$iZUDpKe+|G9oir^@s?>9RO^bw?CY@T+4muBv}=k&sl-h1Hp(ZnW&m*(qM zZ++0{#U7uVZAy2Y9X|JiF*tnI5pf^2ddfq1+vH>c^RoM3J-Y`6U7xTzu2uPG4fkrj z;J}EYN$ls9f``Bge5oYU1bbrp#p1xh7(Z^v>z&dhzNZ|Y-twx%xs3lGXU~VBIKFi> zxArl5YL{W{zWkgjk6%jYWy4DbQJR*J@dqJElPt~ z2bVNq3V(M+_Y*?$4zT|_%0tI@w{CnIr0z@A10HaO-D>>cO}}mqW0!DtiwD3T)000R zY5k;?c~^(s-@M-@cL3S#hpml2+=0qqD$A-Gv63#$43&YBf$p1N7!i9&8wRpwGtB_X z9n9}FK|h#oxD3VWzHK^7Ydo{@DKeL86k8sg!3B?G1xkL`PF?ey&bWean}=sV@gei> z1{lu?zD0Z(@v{(y#t#?b5TUkpCz6I>RmzHD{^Y?!RnH zu2Omy`OEvQZ4BryC#o#)8lPsHk`lx^CNb65bPAj5@JfK~QJqSImA#KF&-N-RjwH)g z^C~8x5hYL>?3d8i4=l0)2hAADIzW!x$HsioefmA3cg^$sX`Vk5d&BnUN3A)JH?stT zaA3gHl8h0Nq>RTd#UWc9fE$fxQgQ&(p-1u5I>?ySaKX`xAYk~4O*@3?We$(+ecq+) zB^nh|a_t~7Hn{6F|BX<6JR$f*WZ)f?-O0!OAgFXPM?KR1R1oR>gR{6geA+2{;zuF) zlFl>wUfyjDJjhQVIm2{qWg@yhoK2a`I&e$G^vHus(!@8q?Kj1~WAh`eS~YCkBO^fz zNJLp|m)5`rX}lbw7Tn2aW23Zt3$Tn^shl6t1czZeW)?kp#6QM@3qsF4xVYV#2^%h6 z?iedu#KVJgO^$af98Q+0)sRjmgps^~Nwt@fiM(;Za6a9w#i-c?92Eu>-r3hED>R0) zh+NnA2{Qb@dzy>OF ztCBl(O0L53b`yw5?=T$thTb+~DiD?q$2;HwBYXJ(1R6p(=yP zF32*Nvjq%LF=Q&lv51SV*k6X5sTy$}z$#O)A5ToIllcsYQHwy?mbK|gFw9Ik#xmh> z3PZ6`eV@5z%Mjmh_C7zhGGC4>JlU0(mZU|zK-Ae{0OL46?5iAL8AB)QjOtL=S4ygD zF{#4&J`Nki4t5SCh>;uh>G`7KXp+`w*}{ELk~##AkGH16GHb0<2%37Q8N`R&vBKo? z&F8?@;n71d@oZXuMa37m`zfF9>`oO;QkuK7-`h2d1M$a2(EAJT2Q-g(c)vyaaHa&% zd9cO$J0GRk89Pb#lT09E&a$0xXq&?_62#1k@U1zJ&>UkFbrh~=HVdFV&>zf7kmPn` z6BVo_uUC0pUX>x!?O>A%2yp!*5*ywF(p*A9=JAJ0EIU$)i|tUwwA%pB8=zI31g zK&~P_K!FBI%GDTSw(?As!i~S!{@C0hASsePxjIHgN4%ggFD@$gQ(MgZpdQ{)u z_UGh%G(_9wtk?1GYeC1~Z3|w^T<@qs`+V72(2bE^8g{scD3vBqxd+KYg)(Dv z(|A!Q$0SI^)*B)1P()@=@ztzGKm#<%0jmlA=-}w;W-n*JG+#8sU?cl0l#ABm`w04- zmoM+QR`||h$;;KfS38ycIJL~PvVx$~+TTy3?wuo+z6rUD^Of3ytux-Qb~Vd;q3kl8 z-vCHlZM$A!ERAozY1>&IAZr|Y$u9C!Lh1>o)ulHWaWPl7Rn9ztVYR1|JzjQ4j?LrC0Y_%=0|^aDRKJnU$I5IhB@KS$b<#_nRAW zhr}1L=LqPz>H|K@Cgy&PK~=2VLX2J)Pk6ase|^-`@BZ~oVOOwlv(8QO;?f}&>~#L@ z^U6Q3`Q;SLQ&m?SP3(5Dr0;ohSx`kQUHnK zd_K2hG__ZTjdj=Id_XKZ7G*?tW`= zPl>4Cdt)D%P47Qvgej^#4Ig{I^TQ*jsHG3nG-5x|2w#8h|K;yHVQpHc)$voH*(nO? z;^NAA`jt=H$#+FP8qRmGKRgM$Vo-?S#X@pMBj92fvB=tH=5@9x z;rNwV1m(Ao;HN{3r{k>u17U9;ubyhYNPBE$Pk+dH>1{qXAM9)9^BqCYjr`xQK5Zdi zVLE9+Fw7cQtqX*}xEZ%beA!6|k*rE5Ev22e<7bO_gG)r1MQ%GdB%WDZtDxSbUCwQ_ zwK&OSYKUL)9BsD;BSw($t6ly#L=R1#C-vlQ3VAvj{BexXA8%z(1L@GdlqzNVHS;=` z@N&%RTk&Cfok1-YTBbr#yu=VDs5bUk4-|fI$4}01X)+;Mo=J-;8z3Q;%bY{EW zSuuay3WS2AfFZT&4iqv~(OP@t;k5%U%CAmPFZ=29A(ZzywceYcJGgfHGJ`p(0l#qb zJA1``qBs07f6^as;r|?Ud>B~!^G5zRA&++cw=2&RbSTL8QwMB~W49`G7H4EY=X^B^*wQE5@vEl( z?>4Y2C_ifW8?)PVl5h1tvVALD+a2jF@ zc_D;?3?vR?Z)!oIVi^=XiPJk{igk?+Z#r^xcJ)E}RbAgZr#l_3{B1{4$ooHbwJDwb z<^=Cu769z$jcxLijTrtlWBjNQ!>_YNuOEew6SZEY4x_sc1+AkOnixu9W)7=%ZU$hX z#K#2+<4b%_Rrq?+x*Xx-t7xLDEl4J|OKJwOEJFq_>QZg?`2MSl3%`3K_Oq7v3A?IJ zn>|UGh9Bn*`Qi%0xr9?d_gV4U^#m>I6~AmK$8jO2gKHm<{hg89wm%PmDIOxapQP3X zM<&n=_v^_45&^sivMeA&g) z?_@kDHaNR*wI`GVNC(V*7#bBv6cre(`Q8LPy-Zrpj`=}Ta(2K0Xgo|D3RseO*6-|f z%Xuh$*s_h=yMZ~(mt4%JE~StbvEgklu&OsJ z<`vq&m=}pV1j@#)b_xEdtDOZJqup*IF|t4}N&+_kHda6%tm#2${Y-`111|Qq59NUI z)m`T6MhpL*nQZ-(#d~6g!$VQnPj9FD9!u~q7(0u>px|fe);_HTsFObAC z4$UkS58}pRn!K5M!^Wz_kfvBk*Hc7=>u_2(RH)T+OWks@bs6zV9d`lztd9FZzMU7J z%Xkm^6W*-NkMkfxlcfZx+FXM=GHVz^U&f6_D08MpHW@URbskb^u8}Dr&(oBQvDtK! z_CB(ZC^LaI)`qz$un{NK?11My>;DM#y}bFZu!ozY9^Qc-K7pBq=i^d^;;54*6Q{Cd z6~ig}Zpm|#VT(<)RPRKm-QZNZ@5V%$Y;59<;g5psm{lKUH+AT95vRTTv*Oj9=Z#7GW}0f9!x83&_ZM(9h^!NK?$PI3JX{s2 z3ZNvwk&D2`mXq4c*wFPs)16NuPwC>rb_Y)i+vPUwDk+U)pS^#v(ZA81pEYtH(6@8u zHvw;uKjX?!sG^)EfXfPKJKpJB+p< z18uQGk=|cAbxF*J_Gs5QUrq>XxQzH-u6!53Ugf%0ecQhIos37!@5)z`&SJEgZ;+)L z98tkU$lW;ckK?{6;*Cxo6)Mel!D>3JR(pqLjw^{3ZP;{T8V1Nbozm=~^^ZV1*N9q3 z3-xg9(j%^1ZnW>`%->XUC)l@h=Q9aspg-f#n<|XWbrkL$8BRv zzTfbs+yRQHkxVF(AuN>IZox4SK)RCb>*IkKgY5x;cd$ocSV|vd*Ze*D=KDZS!mJ%` zIH7v2|CCMR<@42e?aeWddL7PVKOl@mE^K<%)O$jw+tL!M^}ZB#6b=%D5NYn|bh=gmb{3@L*#adluB; zMl!ebh@36ssfyc2Z5Bl(oHfcpIKXy~7nG5p`Ks~!ZL6RQsYD@hLfg5pIaWJs?Eo@L z@40a?nPiJW`&}kc_k$do2z*n!AsSdHTV{aFZ=R~TK+89X;{=a>VEWcnqNcvMaV1e zmkU?(j_C=GZy>2&NZ3(0f+4;K3-k3Cv6mJlNOgwp- zE+smKP@^}d5D63{@djt-mt>8H)!-Sc{{=7q^GVZ{~S+djhgg4RzG|3a&T?X;x zY4iQIE$#=o3TwN&G3IYFUO|5=U+>cD(6?wRjINZ_8qaOKZ4P+bC8bT%07eG^7y&xP z-3Y{q`arFtan?i5dXaW{IV^XKn8mcSDmp0xsh~`70M$nKa%cUbmOl%2jZDGerl_AJ zyn=ozU5$AKJIYF3d8rc+WV=Mxw$6p+C|6sIyn&=)| z0|e)5GiVm=6==&ER#6&sPP@WdKlj$E#)b)h zq=h2aDG|ae!kVN5-FZd3Wea)BiC(K!m?_v9I(F{7qmAx&S>t@x$bCTH&W+y$yg~kq zBkPidd8?|^R9WS0eniKers2LC*yQ9{JeZMX@Y`55@@$8UmX?>I0xI( zkjP!Mf@P3pE!1PvncPrvq%8E|v9ldrbXFbFqhWdj!G=?&1CsUP&}KFjhjVUJauyJO z7ia#ak~_h^ojadNI0O9|hn}Os3=CW zpRdN70OoO}1mZ|=!|?#h5h^ncrm>TfOy?69NZGLS>mmn6fjsI&IqU6aiyz9>9zj`k zmbe_%G5oFz8Ey|LtRX9-xV=1mx)>X$-z)A z7UgbN)x+=7P(LZ;E|71yVeuy574fGwEb>fRf^bpR(*O#^CA8TVfedIyN0zj>C5TmG z*JU?l);iqdqfq8MS+MNki0}J)rD$jm{@vK?bc7(G#}bRx zumh+b+dx?^`f%~skv9y)qi`xJ;P24`-xjWI7Vck-YX_5;aF@q+DX$)^B)8)SFLV>< zp>BQOtuN*C{Mm@$&x$`K%edyghbu#gy#dehHkdY3dWx5v=o||~_2`X0>FxP!FsB>| zZ~O)C#>Fc3F>pnaC}~w4K9V~ZBD6xQ6E{5U7h6|s6jVox15AA}0`FZQ4E{?)HD65b zbAdWn2Wxx;Gc|{Y$LIYpn+p6F`fIJ{Rp3AD<@K9~C!s&K5VYRL-G*1ASkci`cIP9l zVia0(F|8iQ)pRkJgp`!4#+@vyHqod$k5}YEXR8T(=)qN~aJ0x!>4*{7K{OA!x)8n^ zqxoA}$bX*S@*$bm3})b8#IG=`*B51e->$GzQ!q z)8j-Oro9&RP!;ls)fwXsKA0$-X&}XOf-~J64hcvfTOOqq8O0xGAFvV-h`UK}xrL$# zt1LA0w6CTy_MmGtdx(h1A4^Hy!PYchjpHsgDLR zKV@PUSe?RP!~Z4kIl5Ivy8SObd@e6h!J&wVD57E>^jbtkq9ny%|A83~A|5?``}P|t zP{oE~*UmwW05R}HJ9;REe5W@nYVmc6w<^O(_S3Nf8-1iGuB zJCruTeA64&Tngi)iPI2ZZZbt{i$2+23BzGS7zg2G*Dm!?sJa{56jr5s{JYgO4hh(@ zqBvz`69`AVMGi^x1<>}qr&n62x;)BXo}FsLwwDO%7z;p zuHxTn)A@*}=4a2}lFazkkaIr#n_2QHgj>!eMXj_-e^0wFe!$So^IUEX^%E9b*`BUz(vn5rl6k@3@kpn0G;z`LKH>T>!sgEXfUqGtE_G&AUuMpTh|p&yT5HdSdQ0*Y>{J=e<0sITbAJ08~ri8HE)G~Rx7^i7#%|DHY^IqvZdh4GHy(SM<1b`WD z#Fw5Z@uB&Op_nQ5Q-z;SOqJq0&Z^|B`Dxa*6jd>tI5*3&1jk$11t%T4cOKg6B%kRt zr}_)ct`U_nCH}I8AqtnJtp3VbkL%R!wJ1p*`durfKYf#{e33WwD2p6>acD-eRfSW1 z{8$u#9#Ng+tn<;=i7}35zr=B3GWIeO%BGwdLK6OfibeKPh}rakXC2OIC!wN}2o^)3-_l5;W_2@;ndV-`1G9d!5r=co&KEOUufa8$hd`xbF}uwMM)_S$ zQ8)aUAo->}c7Z|PjUG18eznkDo;3EPalyF*Zq}T;D&l|rU3(}q+-iphDg@^ZH0)UT za}WCUX*~FVW)+uO4kHgt+9)#evT@^$ecy-TO}Rl05)4jBjq!rS1QvTd=L53Fms)ve zZji&>uS_YSmY1)A{X+8i=Fc!DF)4-^3$})`Jojx%@C~Wu%t?)g5^)L6{*>wB?CG}! z9|-h!b1p&x{H1nYdWNdVNf)d0{zBrX$}0jND?w+aKcPf$;ezpxc;s>DHa~i46l6#Cx2~wQa2Y>MRx3eYBRbyFC36sW2mlwZhiJ4PnMLo7_iZTC{ zdC7i^iN7Kz!s&6nz3cq+BOeXaXD0YJ3@2JU^4Ja&Q%lD_5X@N1xX5>R2AKk7=a3v* zkEgidNjNzed!T1S&y5l#+txMZDnzE1>IVduKT*QC(Ze4YgWk4Po=TnnY~)S*mO z2PlTqX5MZh4dFIHHSG1~6YY(Q*EP)H=h@a_@H>$;kDw&UC)cC$;qC=;$SQ!?>UIoT zDMbe8R#Bf_Q2o`cK6R>tAqK*N3oRUGW$sLpG1Y)?F?_RwY$iLw#HXHVGA6~W=Ii~I zvs*Iew5zkt@KYsPzbR~diWwgvYt}(D%r+(c7wAHU%`KZgq^xk?!`FLQ*QUOgQ{^L| z=cr5Y{H9VNt$?S;LwZn$rZ$N8G_?){O_P(l6CS`r-dW=mTtjSszHLsLr5QUU`WxG5V*6mDARejNc-V6WF0t`&yQL7ng8N2o@ZMuC?LPgUgPIMPt+Yr zOFaJ})Xld1K1AZr;BW@eD>i3bJmPhMo?^5oY^}|5TxU!A#%73>O=Fl%fh*4p*Ie7} zILmHl8ZszAuKmW+NJ_`AxlvQZxzVH#;YI_Nd3mo-$abTyS@N25f=~4nds&0Ilg?ik z7Jmz3eiIwdI{72adsnWw`o>29NkYrvPtk8Y)V5t#!fVE89Y)=z7A}CzuHL9v z1a0$h!}q2X&v`wh;_X_sy=_+(CB~y@7H5sn)LF9HghCy^Vtu=R#>Rr?f?5^@ z{nvy+JW<|bPV)-Fog{qQ&5Px!ey_1WHjHyTPqkQsf&Q+Gs6Ek8J3C+n5GdQ8^`NLl zdo6ih3WA8=<7_?NsV$`~qz0=y>|n$%^R1g&D0*HP(dquzt2lutsfK_7?F-kXSb zxe^_nPG9L?JjfQ;@k`&TP&slad~g>225$eMfSbEdoEmg~$?SOMTPJBz%sSjL=~R*Y zmJjzRQ1HGv-_bQ>-J<#yAi&zBzMbOOBpA2#Aw*5a9RkC8Tb9BsVnphs>y7~0@qxD6 zV8Fp_HHESDh#)1kvY2Dr>QLK^*zLm>^&r8Mc~Omdu@w)Z=~90Am-pZoK*=_|IV_(b z6bKF-Qr==y+fJbtVJ>9Hs*m?;Zz?c5n5gC;kos-U7Rz;qA%t0ak(PK=y9wi}m_Y5J4vZi7EinXm#i-gXL_u-1`#_ zvhn70KVbR#aHS%?K%rBNY9mariZp30P;PaiDHdE>$*Q-*0jTxJ8oi&O$wJk6&3$Y zU&pa;ToS^fxQ=aHTa5IZYaY!WkE@0hV~Y+aC6B{G-tRKH~OK zF3x9=KLzcw2~uYdDLDnU!W@QmX|)FG8qv0@s9WOcwkeDadDb7T>u8KcawY0-JNxyT zhpQWc(Px{+$nAB4=Bz#6htYCV@i%U7IK#mO%-TFLYAPR<8nU-ScHm0^ls>HzaK%&T z7lP*Wd;DhvjCYmSZy>I1#_y#h{hc3LF;gVxn;3fqb1-&Xj>^Z|KSxmws`Q6ieYP5t zKB$OIVi=az%Mr5}7$G$a`NpC*F*SY~(kLuD&4nbd_|kZ~UMOuJ@axh!7BqNZ|PQgcUK)LMT?-%*O069R$ zzfT8NXA4`;!cBYr?OT={Y z^-idFz$L{qza23B8yM~#KX~97_yFa)1(eXP+v74=ka}S|bIziDWZW=UJIL9L5ps_1 zroBjJ34SK;4VrBBt666O0hl!~svJ*-tV*|i#;IG#*db#CU=-Troe=h06Ej*eQFkFTO{eOv z$N{%;1!lObe^fKl5H(qGSg{Ja6 zd}^@kO$TVNH^j$ny&qCE1c|eDEDlWTWF2ZYahyj5RJXldD`P=1RRUW=I^Waa^A| zJD1`0WQtrWjQj&>82>=V!JiTC|3jqpaZ**bDIk?*^*s{%0Ax&SA6zLP!4~LY#fXeD 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 O_&;9hc+(>Q*aQILJU*8I diff --git a/examples/hmac-auth-https/example.tar.gz b/examples/hmac-auth-https/example.tar.gz index cbf288271b84cc4ac51046338d34234a72569485..bd91a9a32934932bf71523b8c0cf2fc1ab01dec7 100644 GIT binary patch delta 76233 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 delta 76320 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

-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 diff --git a/examples/subscriptions-with-transforms/example.tar.gz b/examples/subscriptions-with-transforms/example.tar.gz index 660b52e86eb2bb8404c75aaee8478a6c6bb4e636..320f50a72d6702d71d735ea83426be95c01fb948 100644 GIT binary patch delta 65965 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

B^&QM;V>u_Zz+%LlhX)IfDq6jb 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μ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 diff --git a/examples/type-merging-batching/example.tar.gz b/examples/type-merging-batching/example.tar.gz index 4e2d27ff34259487e682c58858d47720dc88d3fa..a1b28c67d45841d5f1103e538aa60789c9fc7157 100644 GIT binary patch delta 65918 zcmV(>K-j|EJ;+emiqYdr- zf74?uMF1o=V&T^5@5@E*bDx{MM)Ep&f#eZV1%eVuff6NCYPZe0FuJ;ky=hR;) z$T7UZFAIQ|fbHP!$^uax*s^NKQGs_w1>XGd#f5++&M^KJmVd)5LD2ELdsI&{G!(~{ zUvB#G;yEsFL-Vg;>nkiYf$6TQgOAZ9MbUJEg3jPrCXrw{g1h>?M|UYNT|z@1Kd%iG z)QLpmc>EvUlN3p_KVa;6hY?=B^Y{<<|IV7wx=CfLH!)p$zKy5nf0kwFOa6b2a>@VS zcL|UGGX(uk@qgn#9zPcUG{Gbe;-6+H;s@+iV)8qW{~xhX1YBMH_#;*@7no~erUeX4 zHL#2+fi`bQg1P+L)m2AP9Skga-O>OCZ}~Z|YP4>I| z%QkN*GcBs9bAZdd3l{tecWnT0omUM!7~qku&D~JW*eM$7|NPs3|L=eOJ2o^uOyrHt z48rSny2iGtW2UPB8xw5a5EbBH!U_`=-auVpum$^kXYe!f0;<~xV+OAS>}??M&zs7B zpvs>*%ceX(6v+Ma=FrpRmB3c8StVOeuwXeKXhhjxWw*yqom9R=Np zo~>cg3bsE<$7jgq7q|_^4z57%;G8m7+vXUI!I-?p{sn_KSacZ-;|g65=2AKsv2)^V z9t`Z*obHI7Ftcz5>&UmEvnL%1t>D?9Zqb0rM}O1y)C^0<)E${NoDmmuP#B0Xs61CO zZRef_a%>>;VPEEcAA)I4AMRmS0_kT=-7*~zsw3{T-C09Z6#yetZ@=y8>i_=pKmHZ# zC~z|8n>hDzs+f-Zfq{#{7IB-9g4Jj< zwtqm`%5%-A3=CjHHE9DY^b|jbx)HmfZZH=(?%&_yfC5Ky0p>YK*7R)b=dCT#G+x@lXe}B;0fuPxI zl)xBn`7%CW&~HT0^N5i(D}_#{(e?zNpS{2OZ9}WxeA;dx5Yq5~Lq6=D}P8j z(3l|p9CynvH+^Ft_e{M-!*+tsoe$X0h)w#>f{FuKmk0`w&S=2?aBNI(-voU5&HGzT z3M0Ov44+0-Rfg^4Ie*##NISLV6Wa_fBy5G?xtZgt9`g- zO#2VE(*uV6ZQH(I{b6SSw+-*!hYo%ZgJ|q04mfo%E;N=+-5Y3sD;r||?>pZ0?|Dg5 z(WZje&{(o?Yg7HHc-!u0ma@!dW?`8^CzQk>7Q95XLQnn0RRcS}>-DYaw zzYvJOz5DBhIQ&t{qx|3E#VId?C`>)m*u*i7r`vc2|7YRl!v9~PT=@U@UBcu43_-tB z9^(HbNzfEa9-jZwEOX)iuYXYx7r91!>Kd-;pMtlL;jap>5$U-`kU*~*dvI}pJRYKEHL`H5H?G z9_KpXof2x=p8427Rvp(~#SBZII5E?f!!6*^yZfl$Z_Jg~cYUK5-LkE^zFQoHXGtnb z6Y9uKHRN@q(kTv2pnuM1Lz83aF+okz!?whFc_VL4b3LL;FY9iSuO(<;Pvv1sA9Wde z$@IoE(Wor@$+9KWEw++jhQr0jk9SrzRRo6Pqbvo%r~o)L;v_^(Y*muM0%#g810#Aj zkJrCIKg8HQNbLy2U6%;%iBrsdw*z!Kb!Zp45^4SPF%D;tIDg6CmZ@nb4n5+Uf;XNx zN1RQ@s953|&OYoOdiw51)bI6iS66st$*v8z&={#a&FZURHr?`aEaz&AhBI9hL^jh; zk1{wTRLkkOqju8$gUhC-mI+9CtGE{}& z=yq<-wxo1q)}?z6IUUW;w2Iz;+KpF!*`K{bQGd@uz;vPuAOv-fD|xP}Js{;sQ=eaM z%)=F#IwplWLK`2*BBKk{kjzD(a*$y@IWQ9|tBw3^rlJnTcIjUnCd4m+BEByd3_x|F zylwNVCwoN-@w*!va&=>F6_U5jf;23J@msB&2Zf?QGO+@vWsrvtN6t>^P| z)+>_ul+YrMF`L%cO|nH~lx{k+>{qq4ldFPhe=;K$El(;gK+Z`xIzL6JSP$Ir&9b_0zl(Kqgq?Mp(mOk zo2AKmQp9buFq+jPfW{+(Tz`$}XjLNXG|IzL&5Dqn)I?X7wYXh3#>4Xy<9jbQuOEI7 zxBJTOIF}a9&AGs#8+K)MRgyHY;B62^pD#ug|LdYBXlbS_KS{v`qUR$dDghVxfBo|W zZ4bSGUKg%`VkEqz>IV!{+I#irJbkd9+P%?ar*G!(JXGE zYuV;pm3G`2I(T2>o`0{9fq0m>e;6a0ny(VL_3&6Q5Zzp&oAev>${ZZD2cma73g zWSEF&Yf+20ot*)O&cJ5TyF019caXR*XiBR96}$2E1g$;X9#@gTnD;ce7uV5zADW`V zANjuGp0x+G_L7W$)Dh}UU-k}RC(P_Fz#r=Lb|-jmTE3WXaDUI`8}6~UaA)HiuCv28 zpwCX`8%jj?xMY9Iku?xW$0;V?!L4+a?M=MY$OCQAtf@;ycAI3gpvHyK+P2nQM4MOJ zs!*;+ri0w7>2xaV=}HxZrJ+=;eslCK@eR=iaCEN9Yqxpr!Ika8Q!YH^!c&fFTzJZb zr-Z6pc*<7ncYok1n~e1`3D`P6 zHLVS#_OO&FxAUZhvj z^V8;B@0bnH8A^p44zxxyy4K37v`hCjw-cG9>`Jd7L}ViP&MG1187C>>8$rK!@(XAJMA(>K#DBeV3>ElKg( z&19|PYD&osa{3uRIscNkM4M&x$!c4CKUELjh`@Q2k%p;m4n&`H4*5}D~ORzFJyAtJoG2hE{23Dso$+NiK z7}<+X(i*$#IfV<1-oulkcJ9^p_s;~IrGMZXOCXn&@RBLv&iAjD6#|n-5<}2>dTuC8 zv(0{C#krXxlOh@pRqMH4Z&;lt#Wb_Ri(VG*NOflhTE$d{q!bQr1e08P(QMQzsiK~$ zFY5jEsKjMFV(GT6K_b&ss=ou1c!BNUH;LGn{D>>u+!3Tc>GLjXCQGg)#aqOPTz?Ve z3Ma4Ei(EIaE9pYJyJXfYj;&CG9+?>^R;#w?CCGNKUz%02y&l`@^?T!_F0({Kr&E2q zn<170VTtE{X|em2+`~Ej6g-<#VBF5uS(x7i{`Z#7SBryPyGH_ISLF1_kgOZf8{|2! zHfrm=K?~e4{RW{eOw}Avvg1yfmVeQeZK-=h5BbK7OGT8D+DolOT8W60EGW*#g3}a6 zdUBQnZaG6$a!KjTe~)kq-p{|$`6IvlJNgyGivTv<8iZ+h!|CAkgorXIrG(T3B$>#N zkBf0oNjO7qV%~6BChh4SS?dMXESmi%j(sgMSq$@yiuI zY4N2d7a5#+<8dOCPJM~?wZiE3vzV7g(8ka{cs6yX<3?-uxZHeVNt$Nm`Icj?7LLPY z+(D14CTg`>AwuC3ERCQaLIh67Ox{aq`Rr;eNh_r|osc84%2(@1QJxq z7TgB>GWTa34-GZifKw$wt948)C*XQL9zn^vU^^_1-|HKpyDf%4mo(Tq&El_$+c%Eq zj{x?P${wkg4ecSyX}X>gK!OGGI+15IuW_UWklYS`u!pONFO|yKurN95kO?At4pk!r zTQx2v=i*?7DjPQL8th7&uZBc|&#Osa^vLYrDe?I41mYjl1%D?H|D8bmcLMS2E`KKw z|D8bmMc?D5M*k5X6D3)rd!uDNTzL6!SgwCwN43p^x<2T4 zvT1)kSl{kQ{0K^4k=euZRZDwZcF0PZa*9^3{7uAmYqx7EKEask$l>vM%BL~65cwuR zH%d*+Ju?n^=`!BxlQ~Im3wBA4r-&L(w5F_o-D*4Olzm^(e?!*cZ;y@t<+p+!U*=~J zdprsG;q>{f!!c22H&LF6!>HtG#A+f`h0vaCJt>-DKQ$}~?IxM5= z9gm)}p{RjESF<>W)Hh~i!MN0=xgNW8?|UH0pNfZX+=m}w<|UQKgJzx@+OyYP4+(jH z>i8hLgz^Z@(yDCa!N{ycN~1kcoz;W&D3mE`5q6|$GN?fw@)1q#fzhm9GV!!AwWTn~ zN;9Lg4(Yn1(fD3x>)$Dc{TavZH{s>=F~T=617Y9B%mt-K+*~w1oC$r5o!ugpy=+A; z#MIH_gpd41Y&zJope1{%JSFAHoq7MIsN^qSSlw9z zJw2AWZhpHA&?#75o`+~R0`Hc8=B-hl8~4p=b}D1}AE%NjPq+T}6B2Uy$?OfmxcG|p z(}MAW#9kg={P%Dk`eQMmXgV$B#Pt?jhYHO}IqiT5Oa%XhCpz?h^ic#j%%D$bWPIcsGjr%QcsMilKvf?-d&ZuplPLfd5jT%=V=_jb6V=l zKxcclUZt_;?CYk7BY}^Zn~*tI4Am9JAQjGKeKFehDJ5Q`Wls4E!_X!IYg(>ml-U|} z(7q*r?0DKktVD?E~ zJq`YNGQi>b;W%Uq3nXrTCYjM}s>Up+8ON`gju%){7FE`Brw$Ea)SIs5aUWCh;U=_@ zcsMkGj4X7UG6Fj{QmpgyUkyc&}@O8W#=`rch-C>PGdN;K2MG7)?iAM>O zb_G*)83O8Yg9!)C;CX?~c@JKsigzn&`wQ{fYmdKc$ofd_wE*C$W?SakU|F1YR`V)3 z)E+)|hxR5O{q1;to{C!~6u$@5^Z1VtJ^y>GqSykPb5;p|hm5#X?cq$+nH{R(6)Wq_ z)Mh9EOY|%N*vxZ8Igyw}Zg@+GWqcchdjB#*(30~ADIj%cPn56frM_P4){s^9vb9mL0=G#TDxV6gu5#8~ji2klK6fU*P z-G%chZTy@o-clf;fF16*y*~mNO5YQhM$VH?0W6?|Qg_;tm_}rdDB+l{psB~_c!4ai zQO0sgpG5~Ip5s%Nvpg(VPREqkgmM(RVD#NOh<|Q>9WF&$Qs2zD@+Wkz*Mpc7R1&czWW&X8>3`sm6Bcv&LqK&=;o#vA<%{C17ZtG)qo z+c$WBk)?F#hurFS&F6(*k9#q(pqYg?=)dWA$cii;@e93HT9@6Q^6=hjx66(P^i;Wh zj<$T%yKt7Dd5c5$!&PXvAO2K3`jDg5?h$uo?giUEX!S#7;JvIA=LtpMDcW$g2Kg@) z@>j(>uCniXpb7d)Io!A7KN|PrfFDaTZyHN~V#d&vpTe2Tx^-*?Vh5l%bSQ|zs@Mn| z)*nHtDKVTi(W0D~D*LJ>ci!;Z6 zn3Aa6+12ERVv`A_keCKb*DYVufg-e1NeW8Wy`eOct2~7`{3o~>J}Kge<0njpz-zaNAvsm&%jr(YQrx;xDqX-rAWj)}>@El|wg*1VqFsBiMf4o(Ltc;R`S{c7U&4@Skq zF|YLbkfRHKEeq|##{_Bqh%opIPFv>>;&bd@WoG%X{{iNE{Qtu8>&^H_06hJ7LO`1p z)x6{xT^5_U1rp}G=b0R zb0>ZuOl(qkX})Up)CZkjeB*PoPwB3*{p)@(2m9ALAnv1HPk9J$yBsZGUOt?x=fj>s z*B7jgYgPVP!@b%s*fXMkXcGH*r{EM=K`xbKn&3}tzt|ku8{@|h@;b*fiSH@Lr>DFs zaW3Qkht>0bDh^K_%&mQhp4w$tyDwj-%Hx+3dfD-hJ&eHPq_$TPFL8Q*J@GX9URgX{ zx7HZ*gz*wOvq6BFLLk7(3rQHyfd((lK3)&3jnD(k-BRmVZWw}p#t3i|gPBd)6o!r2 zZp=in;4u?VDp!)yn*fBOiDTruJG!3`l6Qdp-%%bqzPoYb<0L)2R6WohXZWqoCvW<7 zcLcwLvs;`1e@IXMe5Cc0R_0wDc7OAJo7^5`w{NyK{s;hDi6+1?qH1vD!#>brL8 zn&))J6>{4=Jo|~K%)1+4JSX@T@qWh7N)&mObr9#(gMC;i9q;2uH}U7RB1y-md$jMSBNDC-@rZZj{>!%HDy3(Uzie-9V<3MvQs<(e32C-2X;G?U3Ritir}43lEJef~ z)Tz>2+Plbq@@%i7<4Cb=HLqd{9?&AKA$|#O{J^3bsMieP3;=WVJ~rly?$fUky=$K5 zPxJhl*c-M#-)hZyqM0N(On^PMR^~VvDU0FIrFnEifJmbWY)bVICiG~5UIiJu?8`jE ziXu)dxfCExFLMNZ=L;@v&#f;5$Cn5vypzKaQ?gv4oi#6(j z_NRhK=O3KK)&A9v*%Lns!IyNN(f6{oHSl0Rf#(^nYfBT=_5NhcX4alt60S!cTv8^n z)@{Ejc7QDmv})OKafgaTEuheayqQ@&8)AsEk68$iPliTmcVwuHTdABM(FFTxJ7g9; zdBi_|#)1n%&pfzjZq0->AJ4X|mC12`?_5*E?UF!}S!y+ulZjz8Un7*-NvUMMcA#)N z-mavmSqD5F1~dWeYK#*b!;vEwvCUc)t%0Sk(3@YS{yYSv5))0~b-Z z+7jNWHiCE~S6m1~Q)Px#kIs!n?3f(^swSJAk+ke`aWyTmLa}h?0tT0WxgC&c(N-mElG=bfuwUq z4M~Qg;u(t3n7KvxkfH!2 zK@2zMf@4=2P>7m(rxnD9+_A#s^2z7G*8bKhn0Pj=e?-L>xce!e?(9w#O;VcMv)}t* z7JK54o1pg>-VbOV@bG?*_TfwgWb$Bxceg%9a}#cq>_(YL#k^%Z!_YSSWh6>}nH3Qm zv!`G=&MwqJxSH4;h;<;pHz^^C-%?FfaDJ%HmWwFai1*!BeC1643DyG-pFqzGjdg$R z@HqJ4{FC!#YYoAPl+nY@A=BtH2kwE?G7_T_C}RR)KQ;HH|y zp}&}LwLQ_1nxAN8$&NB6>2Mo=kM7!=?v%QZhG@H;^*Y{tE$H~GZNZC`>;2WjatuiDw@4$1h!q}m?ZoCM{aRrv})mlsen#}Amv7FQ>WI!g><22D9 z>>XX*?Bpzz=5o^y)^mS}@zH8{A3?wK_T?S-3g6i*dAYmy>PuxmPA&6)tgK-8xcB$d zsC(y#rEfy+;(VpHU;~D`<+kPoFPyt9?>FH8k#}BQin2ih{x5sW_DBww0%8J@ASiow z&mrd=^k-trc)!TXh@#yHsIU2DfZ z4Pi7yLCr$%iUOTQp`<&1iV8 z+~Mf?4@VlufBzA22>JF)A%!0cIvT*c^23veD^@hHH3ri=3krHopWse2X9=xq7kZU= z7So||5)pK?*@&fZKqE^rSd^i>1(nDV4@Vh2Reiu`*~HwgFsO=ub(@dT>*5J7_v^2Z zdive}J}c}B7H-zLNnTt!#Dbm9pM75W=QY2aVtK6Uild3$CKmPWoLtmXSQN7|oWqS6 zPizeCt#n@MqFfRCsZG-41Vh9C5`^h=YR715$s}0A7@y6wgSVQ8^JEpbtZ&F|`_)*B zm*)wydbR#y&8c-havnQ&f2x9(%v@!y~7tr4Q3I zV!zM`Uw`iZvmYl~3Er4@Dgf=ZDuH9)(>oC`9mLCOUf~ z;9?lD$l7M6byU=N9n}j*Y zd@_sIxJZP5S>(2ZL*kjmwF>Hu+QrmXTZ}uua;J{$ngaad)02s>5R16Sn>QI@q~hZqkti{>IUR9Rnb~|KZjQiI4i$8 zLA~s!Plr(6=hS*{g6`nj?aK`2qz3%L&F}0L`-R@{!~98qy@mgC)bU|p?XMg8cS4SK z{@sh*=EOi!VWI*S9H450$C*1v4P5s|Cuq!AZHT=x%Hl5^K{YSQMg=@P+S6S>$ z7}+HN+Ap^=mB0+E6}&drm~pd^*aBfzDNFZOCsZ-8sj}2m_>|mq?idNAkqj7fVGLIY zQR_~VZDDOuPW{_s{h^otO^w6pvE3$c+Y1wa=r1)4Zvsv$^{<78r+Tj#hPSxm!UQU8 zc2>2wXEJ3`<#^jelr~xK_K+l2eoV-239W#<;6q*p5{I$ZHLr|g8RR{Y(>sI0x<-fB z9l3Wl^-laJiafPo&t;-QUzKlk?+Ja^Lsuba3qhvcEBM+xDjcK;a>OqWei|t#M=oO>n;+?H~cbdmzg~bDQdE1vzxy zEe_R;*ox>_ba6SGe)%ZD2MyWJhVI{u#?eoY#^3!S$sMx}zWMIkJCNROU!`Fdreu?F;U-mt%Zlz+rmY$d6BR|plsjOE-^poYG;AQ z-fq{C5LuuXC4n0NYb&647PaGBKU3j$hYP*!Lpfl4b(i_N(ZatoldT`Kc#q6*cqj_{ z@$Ga!VhMhOv9tKQ>tTLh|0%=t%jbuuTCa#o$PraYi_~jOMsN$!8DsH(XwUYf;?1-D zLD$u2r*g~|iPs9d5M)tOEi&?ffMT*fOH-&558bdL{JBSC8tnE()J)%v0qvqa%KNXg zf%l^_p3DDzM!EZsr#$UHHHh!>y1!ko-%C2Gid35N41Ezd8lg;?8d+!1RMzK^LUWBg=JPyF$rzhZ>$LZgnK(9o6If$yn4^HTFsddy zJfE}v&rsjXo9_yHxH;e8`RFt1qohw6-+USxpP zjuNdF4G6KzmBYH_oEr@iHquhP6P$L9kJD|pPsGuBZo^^SU&K88RgfLC>ci}&4t*}- zw0D12yqfd0F=^j_OjE6MIKo`d{TUn$0_%jGd+@my50^!%0w@V^*uhtXz#WT4G9DAM~2r!I-<&>rj> zpO+)T8ZINgmn+`|uvfXRRo}L6ekbFI`Ca*H(pii)(>1bCg9FN&2)Wsh{KJ0R6!BUo z56U>rH^Gt`mdmX}Gl!+f3N~yyF%1J`o>DZsYyAVzPBo(D(?Z=Hy7Yi6mmBT-IrFnh z?gaaG?tCVH;SBU=9C}@avAK%Ets}#UspH~2N-Vc!*45e^C*Zta&rP`l6hR}IP#{B? zFSX5#V<3QZMcLQ)J7OP5I{@Cm-WbDD`XIaJpV2qp2XYc-?Qp{h)ocByY#J}0uf}Vy z4|&wsVI*>4)03v&5<17ZMGs|Ii9K0!`Y5-vk;vqz4`p!Gd& z=((l07M7QWs5O0_ct7>xyWo9P#=YR)%!AJ)oCE%Z2OCuESx|=?$<)##a;wx~s^=EdGEp#Uca4K=JE$q24i$`=C^Rytj&33(=*G42Q zn8@!7jXeN6!B+5`lVQS4Vt?8pVi|YfahB|KJ>l(X0vhFs?Jk1&^0fJW+ZOkOT!ppW z-5B$;j91Xlz zKoVf4Ik;kig2MK{3PzS!*G~+qZ6+SO4adwDAQc9_0@n^;dl?_vvubWjo1NV?6ga)^>c5fYHXOy4>Vuo`dEPQ zim*oMKzClzN^BuZoZz)ug_*paq5ICAcC^v`DQlch8o3YX+qvFGXjK9%!SKS=6gBxeIVCume)5#{96C%1y?Vhug04I z=3%J>!k*xU!w!@qRAw4XV@D;KPDd_~vSH`fMGowF@}Lvtq_-P?3E!2=ErPP@ByqWM z$ILff$Z%UoVGUW?3)1E3)4lLMD&xj*`!GY`n>N;G5{`h+N>?KmVTDju#=)_1Jfujms2>$_7sxk%+^~2P@QV0T8y0ycEU8D06SdhGGSDRht7kbpC6r>7&QAA5&NQegr;(IKySPk2O z>Y)vk#jFo!$Bw*Vpg9Vsf&%^-J@9Se+GgQ?Yg{`Ry@b0Q+oimEu#()4AH2{_oQJyg zeYd`p&+}I!fBvD4N1cPH+wdqI&dNANBThGME%c!fSsv zcjICi`xv-?BuSLCst(_i8y6z9LaP%u+-+x)D>MqKqs0y$e=!2@T_6npTSGNpOzv}m zI#&m4d;~K!hlk_yewa-K{)YZu>vs9j zT5>V19`;LWHWm4ll&i)aEvh!r#&sSq$(hbpBY4+;gUeFkXn`50dyK$#g1O7p8UNK7 z%|FsY{`35n56Qe{Fay64zr(CvUzGV{yTX3IT|G(spi^h#uBAnlZr^2J9?Ov=;H8KtD57G%m?|VF5+w;f{SRjR5b@L5vuEmD zso33r3!2p{2bG4G!6F(%a{(dD2~el0u2dV(=Q=>_eHtP7A%e!*2gI*2SnliS&<8i0 zsu zwriVjQ%iTHx2AGKG<$ndu2<{YfU;Ewo6zKcauV@)x7Pr}wQ6&ohAFj3bZFTqM5G=G zG2cS5oOhL^!KzABS^DnMiXKWK-)RkYw|4v{j$g`fvF>11vSrk9Y9tZRY)Q(o@?WVg zW`vH8mqa}xIIgSreZpK+dLX}(+BI4&iQEkKh#{wwD{(XnH{9IpvJStmISLu(*~D;W0M9wPj!7#M}4vVi_p5l}d9+PWG5**{j~ho4L$rGzFPX zHv*is-yMouf4=PvYYv5R;>2zU5I313wMCz#*TQhv5XOEm3F%S~0nu=5Q5f3p@$XjC zI3!?8vTT>-tuGw$7Ct1+7eL$dnO>`Zft*(rHQpcSJ5=S%`sdoH#|5A7xX|b;6g>hu zbyxFBGdpNml3+m6dMk47elGE=&d4&l6fATNjbTfWV8&G1uq|NGu_K5AJ7bEN?-!k^ zVWR_?fL05edp9GwcwNH0#QRk3I3Z~$TXvFO=*Ojg!0Gh!Q^g6_a=hhn2$CXy^zjf+ zHKVfb_=kV-Z?)-s#8dOL=Wj`7{AlnwAO6iO`4sZ31W(=xk0@(=dT(obd=EcQAQD!0 z{8m0LTYxTbm^vjCwl}fKXzney(T-`(ur>&Xg06!`2<`{#t|<9^Vho}f*qxQ+D(nd~ z5R(wgC71@Msx2IH=eDPm^b$RP=vc+tZ{=WVZsF+|!{GbU3>5!SQ{p$P>r3IXmFSP0{kTruU5k?Bq2IMq`qL-5$`^Sm^ot3y)RJ#514Da-=5`hHC`aij!2k>ue%-lWBY1Q~D zo+V0sX^)lA?($W<`6niMUL_v&o#t5ItA3PHd83x5$=%sQqZd`6I)ZaT7LoV8|0w#Zf$QwN_P!(YA|0*BLAG#jLH>pqj*k zfLt}1aJz*NKCH>gmLC%&-?YX~Wzct`hYhq}Ep(SBjXh~xaPEMcHRrC1_&+~u4`qg1 z?eIW_puB;)6$^jPLBBqY2OiL@;!?|DI)0e8KTuavU z=SGR5WofE>6(Unx^$P@-KT*QC(Ze4YgWk4PoT<6gED^jE|62^B@{# zo09$px{zUW%cc)0E8O>g@bwmS*gb=y&YNV81aiz-SAuMJ&vq1Vf$BqzwDrBJGFA zkhIFNe16Qr&-@pM@I2dMK>_(?_8Q+0a-!~VTH^VOP&eE1`w)qLKZC;=K(E-G@#hh* z3-lCgyTZ=guEuq?q-`yRSX*rjvnXKg8o`F6osPZgcBTP?RLG6jSm{aW_zgE|E^%%& z>4Ui5fFxepYZH=g)Kyd3aJK)co?%!u1LCkMr<5?$vgn93ZS4RK|mL0wn z?X=`JIFaQA-d1>j-IxWnrBY+0b};MeG=TNJEj18POX)R4xz>?MpgOBgZLTrtdzCb{svEXyd&{aW zN{majS)A1agR4beiDi0p)TpxECg`|J&R*-nZxo+Tx>&Z{jC`xc`(WlmWebBv7z%>}hA3i_W3gLtC6$DHOBggZ(2mXjCD zgMP2EKsJnXJP%r|!9YLk!b)$cE1j^it`G=I&w60gYP&6IUh@5j-{WjOs#q&h!{jko z3Iu3RE>yA0Hi@=^nQljEPaE|fIHf!iYz_K2g!JBjM7+yC(b4JjmHx$ptmP(t=vx&k zM-GJ!&cffo?LQQ7bN7l-Tk#;8F6Ebh`3!ymlpMpGpXC#T0>Pm}%3W-0yD8WrjD=*I z_3?h=P6Z}}2-K7N?6v_oFf*U)M4vX)CIwZtV%Ogftm%~82fC=UF18^!hGE5pKT{2# zYO5c$n%vt!avUD_;{2;JdQKk^mz`b)lf$&BbD|z z+_Fmsys^hLx|y~RR9XsFw^m2ViUsQ;(-As+Xh3yr#Uca0x(9nYW0MPKWle~ZSF2IJ z({?!D4Y`T6Y*M)Nsi^pG`Z|t%^^lTN;3&)?NE6qaN?j#r6Gfa7-=+;= ztV^^0Xj4aGERw2Gf7jV>HavuG2}YZ38zZOJ@tZSxz7L|+w(4!2-f)Hk3y8INV$_sB zDt|R(ABF6|mjWn#+NH`BPr)BBlGE?;-w`n0RbIb=xRwz=mz?x>erUx^k(_U0>=ght zK+3<&!Ps&6RX#5N97R>I+8?U**?LTRfV^xH!=SWTjhMwi52#tdHx|8#q4Lw9jX;v! zT!_+|FO8?0g-m-GFOIRrcIPh|P&4SN8?7zFq%?o%y(>&S&ko7WAUJvXj@zMLqJk3f zBL}lpQ`CLw>=b+y2b9YWe!j>Lesy4Vwy^a)t~w7`I;=V`y6lj?_|M5HmA~kn|LS{b zYOgENUjnu7{!a&LXL`xLL`)}d?}T~>T#{Ym+X2(Rf#Kfqg9o004^XaKKnd--{apqM zQZIijH0CVQhsO)ZWCF zufUS-NM9}US%4MH9Ox*=lL4!=X^*k%COo#u z7y%f$?eKO0d98^Nt(d60keH^8I%{&kZ5@FbhV_rCD6f$JR|xGf3+*qF%u06i*VsC#k z+S#WMneID+uI}Xv*Gm2Enu2z76JL11Z`Yb~JtxPn*sD&I>|m$|dQ~bs>aFv8&4o!{ zD4(Ddu*2Gtz8j&HsBN`8SL-p3#!PjO8ic*+0O|FH_?XuE0o4Y<<&2KSfoYwrgUu$6 z^N4_GmK(PGM&Nm7TSgp_8*`XanZAEZ@Lx!VQO$Utd_y+9tI+r?ANKXg%>P_&#W9uP znp*K7A?2;qiql>qxl-?o84`zT9M`+f&SiK#nIe}8!~a4W#=nqp@Mnbk|02@*IH@Yz z6p%`@`W}gW05Ybv5B@11!4~LY#Vi?lDg#JsU}B9P%S=hdsO}X+mP&G+G;4po-Ao$y z8tjs1*PY3PBTEyD8xvHk)$eR&$zIsPk{dG7xJzT0PFjNjyZuXo*FTWvm3yRLK6b~- zLEa(b@@S?wDHeyC5Pwrt{hiS!TX=!r$^E#6kmTANzm*TG7Kt$Kp;(12m6%Bc^*MDx z_S!TLC<+Pm2J@yISsT*lM>>C?Z#Ueo<~p{iVx!g!39B5>m8!I85st$RBfhtRVa7N3 zy50QfvB|~kueOg{;x2n-&lN3GQCBC~9ZNHeO)UAJaO+;+_C@C^ZNt?+!xNEJR^!)s zjK4s;#=Kvz755l}Q{Bff(~Fhbb*biWs1a2cN6KOk%|L!tauAg*!R>#xTGJ!}!r7hO zuj{KBS^@$MR2={hSQPE?JW(BL3rG=WTN*Wpk9v%MN%X>JjfFQG@5cIethk8oMQ?pb zSpN`5TdMrag9_De``4~OuIL>9C?D1?;Hu!~9kH}tudVgais}SA9=Z%Z>s4rro>9#< zGBWC7pDPW!K5jP6KpTJUF&w~PfjOJhL4YqiPH{T`KG zDuBJkZ7%1L*MdEFu@!$X5?-qcWlPKNhbP`ax=YJG%oCIN%uCiJ>ISpAIJV3)>hYPq-W%`U} zN-UwOTC3XL@JP>PA$7_j^;*0NfSZ5TW2&UtYHS6WL->T67mg~q{-7Q#`LT#|otGsM9j`>xt2>=RRvVVP=T zoJc>I9Ht6K#_znmls(}Glx;`-Mt#b^z>J-1q)FqCV5^t?0CL7%B*qxC?i~Q>k>@v5 zj(0?q%a*6x<&|TLXKIMOJo~2XVA0uo)z;Lr!ve~Gv@9>jQ%K1P_8sw3Ugil5SJF;T zv^-lAUYIMhla~djoK(FS2hCH7q00^C1*#M>*8L3@xU6cMj|g`4-Kdc-z^>H#daaY~ zMpl0cwxaQ*)cXHp?@E?bg_iBVys2T(3OEErdJ$9v2QLDURyqMu{Q7HCot9QvrFHIU z?nnhBmA!H|D>K*LpKl)(Kc2DsL9G6F@u!de0CKqo_q#rLqFwuQH3ILfy*lCRvD@nf zhG9x`_QD}kC1kSkNGPUw7%v)SrdDf1Dj|QW=&wz2v;f30>_pWl(1aq?ge8x7PF>jD z0a{q@6j!i?-62!C7XeZ6C|c+B4?Rtg@T*ymzf)+dzq;l*wPozdoL>bUN83V^}TC~-fsuY3y5`W@_APDu~<9X>-EO%+$zeaz7Ian3b~x)@t3d=ZzSD+d@Oyo_3HM|M{XZSwPF*O z?hqz{b>AA}^d=}!b0VU#4G+ATpuvA0$zvs^aCl=g{ivIozSyue5wv^@8N>1hZtT3V zjcleG(b6leFvhXJvF`2%qKPLts0Y^XPY(!|)rT7{JplR#3ws5o>S@oV+hFeSWFWC! zKLm);$U}!ltIpVBQ;qV1>69ad73~mNf#`C+5i7|i(@|B^!YG{agIw*-)iQtYbOCZR zp+SlmNJQEZnyvGwh|4>Tn=?V1A6TvZf{EWB3Ezty$7M9X?MuFk<@e?e(0+foeXw_f zQtt}DU=huOV5)-4vKP-~&@f{Q)OTXz1`w(USL-v2~`1(c}kIlJ0@r!q?@89REZ+9QN=Ct>Q=C4?M@4U}v4qkji ze7+AQUgLYz&?%(|g)&ovrq*uluvofwS5bPMct9(|xzCHhg6Jp9iG+f&Hx+wJS*6#T zVAkcbSs(7ob)0S0ZV4H!P4iHB(c8zXf85<4Rb=r!k>oQzfVh9J5Ba-#iS_j;@X2;F z_x26z@}xspmq+>c8)Cn;q5(tG;~;VjyFfZbI0oxf$tE3}zJu!hl_3&QA_85fxAhp; zla{(RoOrIxMv+JtoV!#;bh4TBa4mAFYzuGgdh`pVdHxyaem?xPoe=!BOgiYo`22Qf zqN~DKU)wM7PjC&&r*`@|BJa4xRr~mQlgLX>e|yMXao5X*&fvAp_HKyHzFfL%gn4_O zIfwMC;{f!sq~4c1|LM%$^HcaaJRdCV@O*f^9nWq^4(Ejrhak5u3}*n#j-w5F9*sZcZ2$iq zY5R1(%Jxb|PnUGgc-=64Re**5h7^%w|8Oci|N18{&U&Gf0@|C!=b!GnA6uW^wvV^E zf#W4yte52Uq?)X3xUebJuXKP`>I^n2e{0Eh7`paXJxxLA8ZQ%&?seB-cPluWRA;J# z$bQ;&Ba)j<49tXQD$k?d)zOt2_1Z|Aj;+=1^UW;>f91(v@%~Fs`)u#lFAoBjOzoQB z^g#P)<@1J!N0G^k7+XY{BZf?l&j>9vBrYc*2puwrDQu-IU|MQq^;*_Q68%2kf0yQ_ zJ=&tJ2$0iOeAv;M!q!uatbA(ypr zu7UX;`K1e%Uaw?*r6#8)yxVk_K2FP;WYy-+?CzQ(O3$TI7$VK z2G!9*Y3NDXPfDsAxs~d02{`qV6tEU@+Mlqk^erM(5bdcDOf9qdR;5$vk zi!VCgDwMxUyt3J#{EdGh|cJGF@i<7dmf$p2weKSLNnHxOa`i5dbscBZh zrkJInzVc=|fGM`s+3@vrscX%wPzb4%TLF)%7+`6TG8Zf_?DEu-X5e7b8+yD$tQWyD z+>kIZ9k((vH<8EosNWE9fBRBs{JdNi`u5c0do=z-27>F$tG{@Nc+RBM%-y-1g{MpNiM=V*mJb0=gI(WRg3Q(B9b z(NeQRAvBiQcr)O6CCLqcQ5e%H05df@O-jrhv4RoJ=@R>anviRWUsnc!zpzg|4S!ui z)@eZOUSz$RdyB5uf1~Y#xf_ByJkaavlPwPk6~w{>Yvy&*aTcrG7di@&gdG#>;FD%G z$+iZ9GKHtlX9VP9neK>vb%udbKyMd#B)H8&L&Q@Y^E=YuEQkSw^3f2kF+u#iUW10$|LD9`d_ z96_~s!V+faMU=z#@?qDKP^`&PmSNYtS3B$8qy_4bScjw3P}s0BEeW1EEVd%p@#vw& zSY?4mm7TN2m-z_8er~K|jGy9U$A@^wmo?F?=!@uq$fZQeyC~X=- zN2$o1BO$vie@7H-lvOk40Y=MK<1t*fGNjijOr{$we2KBimC{!+TvR!PRyEp%NV1i- z`cV>NFeP<1V5{QqEtj~DX8&G-`OPV?Uy(Nd$`bu6I_M8lGk?DFP#b$(F1dTHmUd+o z{>#Gryl(%#j^$wBC20MDy!v04Ciqj`%=4#PNN4Z?f28vTd%K?J!qN88-VO1QbY7xz z(-MSD;&+mbI5jJo7Y5qK!sW_n8N9h%_JDMSv8c3FJ0fdQf{(447y=P-W5gl894J#) zCnpIL&0I5B517ZYd1128^V@&_AY}1BzWE0L{Fc_g4Br!`|4#V6SbGEBmt*atts90< zW({Dxf2mBiD8WVcG_7VvkKT@qQsHHYY^Jj!mNG#pNJ1s!pg$*q&NyxGET@}1BKk^K zuk&Glb*?_`&N&xzY-VK#}A$l;^3 zPYH63)=LRorkkltkOZ8&(+ma13w<65nq;hf_F-F({L`b~2V&ygQwRJmV2&!{2l?>h z9dAfc#I_w}E|ay~*h>~5EIt?sP0%qG^AI%o@Y5W=uwq3izINz++Z$SO~{KJwCPQkX5I~nMy$Jit>-V;!bG(m zF&=DE4-a|1g^3EqS_0DeT(|Ssf9U-wg9d+r3;$PoyB99-a({Qi4t^J42NMUao&B5k z@vb+>BVv6Xi3SzcV>n9LjKI2?EZU#;tdhhFH?X?&a!Sb6w2UoVZ+oC6(`hmMWj<*dGG@2ft3?~F&aNA**qH$zX`w7lFj2i zKL;2YJGT;?t(~c%r2r0*y7Vx<=i{_L=x&wQLwVcYyZ{Y_Twf9{~Pu{=`F5hY}~_% zUa@wl+bP^b&c+Q4X+m`~vK-J!*OC!nq|~TcQSx$Tn-K(R_?1oxySQAK{{yOmB zOx?vKE_@Pn27bT8EAphkp^!gTl zeTzId<>TA>kme9)zJE194xe=8UvAzv1`eF}{>>rn?S_h$K@Cz_kCkMKImKeq3fWS8h8&WW4N=PIsI`@8ldH! z>#7HP{H;y&6mYciERM6?NE`2L9Je33J{3pram!DvzKV-qIN3fLzk!(XK+L1{sBZZz zKi@9-UX*!*Mj$vfCzyF>psxG6#HYMssgc(=AugV&cv&vTY?m4EV7^M{<7%Mz);63N zEIp+b#N^(EfAjGV0jtvT-FD&bqkj8E$8J2RGJEA6+Wy@(y)T*P*+EKw|ELcaVxJ}3 z{uf4!eNOz_uHz&b<4yA)uI?Oh^f0Im$oxEHCn&C`Dk!Y-9wd?ao8!BBQ5*xows6)fGkPW;5^yT0-5$@Y!w zNvz0P7!hyhf>iiJ99Gu_i!F4jlIV1lBQ_*&@Rq6a)zH_GdPy16h#Rb@xCQB6;>(ID zV9kKof7DsaL+LFJ%!b>vxi|modtKx01KHD_Bb_f!%0Jkw^bhG`_y75usCUZ3+qHoE zw4vZHm=2s-e1-ejiJPYZaVPeIMLZT|7w+JEuOY-upmxf-am9J36UT8x<-^$6Ai6oU z<~@lTApVff2f_?4#y&b^jKb@WRDgr9Vg?{OUQrO`P2}89BH>YE=-l;oQ|4X6xK{ED zTKBEF*QR}Y^yYTuY@zN2+`L|_1dyGzke+N%NYtA&Ydz-HNbP||!~)6?kdXhd_hj3t zYRmr0d1tukMeeu{8&Hr=K~d3@Tv;K1YcMl~8BeNfb~2b{`&gRug1cH$!$p!0h0Rni zLCqlTy8Df(1Kr<4SbTz)&OO%evk>uBDzO3blX04p&S~rxDRX1guqP}%B{hE?=L=~b z4_$$-%xM(#rS4Q^d(6RyL}7|8!3tnA^bnEKb_g8!o+wY(hhff2vWHbGR)zw9B}g2T ztv|~yAJ#svp2(f7!ExtBKF0CJcYfMtZ+c!-j=76B&bcOvyybTt<2|rfZDa5J+FDrl(+$S3tSd|T#LRed$sy)yV}S#F z1=>8bXZzj?p;ko3q9P)gX~ismsKo@VGkCVIdn0Mg>(D@6n7jz?ax}@S!Oo8V8t(rM zSnU%s^OxO-U+>cYIsSUT8Sx2Hix9tPB_j^pjQ)jA>Ze)g z>Xru`gr8)xRy{%+QPTY?PHWjB^bE4ahP7)}2Ya>}V%GlMSpR7fsKTnlt7m1P!D?__rm2f3^b_`fOalMzY)tZLn(Kps<+!o@#Qy%&Z z^Ikpi(d^daj

z&*@bk8mRdHi@0QVe5cFKC;kb*y?KDY4tYHpC)IC2ouObI+G4uTz@adDVulIIoSnAtH};rd74@tf(=Jw%h;pGi6~>i5Dfbo zmYRg*)S$sJb>f3UpNxVEJ<#+{PHWR(5Cqt&!+@HzHqFj2bXmH3Yb!sfcvoRWaCG z6|>D^n3_C+ikm&j1AmDc?y^vW0C~|c4im?@ZQy9=2Fvw+ptv>tXf26KPUhFEoS=6F zL-T2;1*Fc^rkKZuL9biF{@HwQZs#EwXU$CwD{n8^+vh$4A0{huwvgJ=_2v!lFDf?g z{FMB^8UN^vU7dE$1OJ-LJ6X3U%z8QZ>!4soV7P%)I7fT#oPRv@{l2hXNT>&AC8k;^ z8S@fTz}iIX?+9Sc&G?>(aWEUe2tKUAtU!&!fLUk{yU~4&%$ME{ma%n0%ea)jW4DG_ z7)S0!M?-I%?b8Zl@S`C9^&;WEk!Tk)mT0hbhaXHodi_eTQ0zKU=SRK0S@@w1HV=UJ z@A;#7i;wbK_kSr)d+lCb&~xAPK%Y<>#{o}CS&`d0jnE>^ZbZ2&nA`40UZ0?fG}1T} zoU2GTCb|%?TGEObC}rV}dq54qe8HX)l2^S%INAi?#y`mYmgcimKEj zWpKq~?_kYu413$pK_mZFFG=({kMjaRCVKL48WkdsK!PK1W>Qc)5NxKb0+qQ_uNrSAT@agvC%m_& z-vVpLP1uaceyp*cO76TJ{gljkKJ38l5;~_foXmOyxr@aJou#8>Fov0tv=h~8?-hEH z?$<*i=6^(H1HcA~+DL}y#-eu^Ra-RZ(%PWj1zCyEwdNiU8@bx$-I9A2S-D|Y&DVr} z;lC5jc*1bI9{Gr*K`k}~=ml0_n7R=Db|i6tl?GNvg(9W2p9L^JD>*4aa0ZQ)&I?|<37$)MvO&-L{`8{KfT7xD4uq+>+6f6)Lp1qMHVza8{^_0Ll(-s{aRk7@Hi zM(o|X3O|0n9`MJ-KmSeKcSpaZQ%#Whw(C?*7=lN&)7UzR|4{fJw~*|8ob~R*IGUF~ z&wo0nv0Lm`wWUm&+n9i3s{2}W4<$Y{Nc& zLQFnDO;Y+*Nad>QxI^%SA+i?yzICwRjA{zoiMQ$;nczAA?3a{H70nG&qNhrBOM^sl3CEWAa z0?q{;lA{Q0H5I=D*Ka1{eT?JJ7%7k89P$48O6LTl#h%qAx|$gLbcU`2<=9I!^XW;- zEmWzS7Hkb+OIcZfhkj3&rF@1WTVRi2%(Xf0iYrzM%4Nc=dWU^~;HJ5|29!!MWP*Ed zIiVdMZ$;E2HG(|hzdizU?xy_nymJQ7V)=Ts=^BG-Z*n`MT5R{Aa;PG%KMt6Uw3zmh zDlG$!queo7G2CK5UFwrQVpV_f!gEM`B~UQP!TB=hoDvcG;%qvFF_CgzSQ?rDZ2-Iy zS5UnU&1kwA=PPRr^%$ap-F5}m>mssWbM-Oo*Es6OJL86+Rvd=sdhu%_6Zfp;Ahqd-j09V*!agu=QM1KnUxSC7@an10Ur+3 zEiw|B4BhLKB4d7kOt(EgAq)b;F$#}Mo}i0O?d}L!Cknfw3iRN@eJfFBPom9rjpUKn0Y8@%_h$HGq%H9~aJ$Sm)b**c zTCV&d&XT4a%6{1cxTzvLsSDYr;ly|kgr*@y=JhmPdC_cFA9NB#*u&nNlKDbi<5P$e z1`s9E8Jh-wiLGQxl= zKbv@hT!@CVQBZ9{*R)u3pte|0kR~BQH_~UjepE0!%i3e4G!xift+2YR1CS(JHJdPT zPbMvH2`{?Yx6mwaEa+(GTa6JNU8;-ni=OB`6NI}HoB2f=(On*DMmpsP{V&{lHSrGB z-n-#{!G}N4nZ3^ofqMW?VTiYvJ7bnvwrF>cIWBF*Y!1|^r(VMj|udu+R%vj*L zv6|ui((>gAkCE88L9fG;sXy)~;~k{a87u{Se-GCbM@91-&x=HBv1s%JJG7>pQy;4z zo$ONa9`C}Wb6mfBD57!V8UL&u&{JQb`#*Jm&X8L~E`~F>q);ImnxlH4ySTs4Q)W?* z$e@SX1n4B%l3uODRE@Mf!(by~ztSVnmSw;kZ1B z@H4gID7%T92<}~Rdn;St-gv^(58RoTrRf`LJ$UT&LQg*1P$|mSakf1tJpA&ZBflJf z0||MnugdMsg%4id>hj3nB`9x{?WbnhI~}{eZO}__Qcl!>G4b zm6WPF>4QtwkhM|F*V$U(m9fKXBf#i|>w%^8>rox`gg#}|8yCO^k?tLOMKbR%ohVj= zkEs2x=k+h*zjq$_XBxUUTZuf&xc@bEe@9c-j~YClc4vF9ao^YI-WyoQzALYPue8>* zv`urKN_#y%SRpab>s=NBRa6qUAlvVYe%G>=qD5gubf@g}y^zH0hH0@P%=bi>U!=Wj1s^55`na?GVSO(UCk&0B1J+YT>P zIJa9IW=>l8nRDk>;&$JbW*(FtKN=z7H%UA8=8S{nLw?3!uS-y?slVHXDzA3-rV_5oevg#z&RwQkSHlR!6W zKy}x(@egqC?)z!Ko6LV4wfSZadkgc0&EEdfn%8F22qsWbTkN6SNYe?8?`LE^TOqaW zn()Lfa6Zn3XiFM%%#*c(WhdG!S8LO?5KOHTX6VG?;lNCzDJUH5ITXu?|3%UJe`bHc z?mvi&Uw_Isv+otK7rwo^)S6+j9?wq#jC4(PF5*bA%qs!{gc1-;!_#_nsv(+3FxZfo zFfwUF?h4P{krKT!ynXtqNFS)Xjj$N6pb98F(Uqy1%)s z{JUh&ag`tY%qstfS@WkT|Gqf?6`Tu$Ud~#__fzs;)5dyCnvEAFvK)lAB$7-)xCU&>>A)NXYD1+&$D6a|ig)xKns62li4LaZV#t^Eu)-IX^tU0GPGE(BZExIMN41wVq@MKY? zbWJz5?1V)21cqkZG&5{Q1ec7BlMB=2e7c4Y2w}N$HHXJgJZu2Lx1QJ&ZqY( zeG~M5t2qC_Rh$n^p1bTJy=?RJ+(W8a^YLgn#9*FX3(j`6;;X6VdWL_&9u{yTY&L~7 zUW5DHPVnH)_tK-6igb(w>a6aA*h$@p& zO)WMDvhzX`yIR-pOZLc~7U=Ll3`(Dxh~D>)7_8>Qn|NQPeyvEB~aNB(CU5|f~^aL7bTQM#(3o^*S++X@l;)EgwEcT0t7x`_u=UHSz4Rw3Punui( z3S2HME|5V8h;{|8WEx^=Svhsx;d(3u*oZYYS4%hiH%s0VO?@WHFA5U$1ea$C1T0~P zhS-zKlqMAdF~GLsCIvC@Ufp zVIT4Byvhhh{St8X)nfl75Po{1e6!BZw z{CQE$|9^k+t9JnTFNpOI4PrgYaPK?6NSz!hz0oGe&%Kq&M9m-{0P9Yfa|DcOiPI3f zbeaX)VHM`nkteyD=1q$Va4DM2DM?~n4?!6ybLL7=4vlDXG@ZH~>V&ZlGZe&IldoB@ z?H}I$*BolNqeeMlrOO)k8R3gpIkVXnkRBx5tGH%r!$Qe6c=h1k!k;YteREh5iRqxFT3F^X3Jk`a8Rz$J%7k ztOS2@;p{`)$VF7{qH;YlvsF+sOOdCt-Hu%)HK45ql_r-VCt*n@a_LwFJh4}HnCx5u z!an6bs*2jbGvi-2dJXLIsWi;hF>q5Z$x9T@DU_cJ(SZH(NN#{&IcsM%yIt;^11toR zU{nPIsdK0uPeaJG)Yc9|padz1wt)S_^;LhKjhhZTET^I-#VP<;`l|5SQuSBH)(wz4 zyB3TmWby%im?n08{M?Uyrx_7LzKnN|-5(kEc+;0_6DxKn6SPVBL4%0oZrO1XnzW

^B?>Mxihlhx=raat|)6v17+r+>d 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®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 M0j}(jw*c4#01mJc?EnA( delta 65929 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

~vHcazC^{?YN4HyQ;W-1Jmf-=vkbX&)V- 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

_J%YQBJ zt0?>!jAio^#j?58!b|`$H1I%?yuDWYhai6^M+7MFN`s1Y-K=>_Sv!Y_N-P9E(~T?+ zNR(Q;QL^oG&iZ9W3N3?Q9G#=mt(GyojT$7*V}t&V?o|-{ce6T)u55n~ zclU6hZVhvjz#My8AnSlZw1FupaA?j<0J7z|#|!m@Xn;J@{O;V?4V^I5rksBm;+^n% zy)}w{N!|Y~Nxn+_^0j^Z&&G(Kefci_nv#nCPhGvC$4XrO+}0bKSmzS9v8A=J%CgFg zK%*|mk31BLu_ECiOS9|9CW%uayX}7l0m62i3$(E+N|Y6-#0vziTM7f6jq5Br3xx}B z2*g^gS05edr!Lnw^!1)Uw=Vq?x97j!&-=O*mD}92$M{2$@)x1cOMQKO!ly;YkCHU1 zkiXPSn?aV`VsC`a^2~KHv*xp&9eS*gCjTiY6^{2iqSV60CoMlEi}y z3vp(Pp+sR3>fD{w!2QwQ>mOiypBejJo$cpuS?_(x75h6M-Rf;8+`7`Nxrxr?mKCD$ zbha5tA6RVwIm-g(CvJP_v6*;UZOnN(RHnyO>8?u=UGR@P)8c4_j}3N{9Lh`sF&6gx zO^ECh{IP4D{GNi&-?8jY2JL^Qn$3;OazZ!(W3sXHw5`L!{M-dZgCet#j??jomgk5Y zTuLVf+dBE%=2RLk#~* zjl)~j<;4MfBjcZUcu{^7RfHef(9be2>+<|`yY!#1UH1_w!YNC}Go?K1tix%lwB^@F z-Jkb)x$Id5X}wA$H+g?vo|w`+f>NLyJkU5~ff7n{cb+UYK%%>hB`j69O2>3HLH@KlFcc#(PEC|uU}^YlsYMBng#Gk*FhbOKS}Su*)%xoJo8h_7sr zpRKg98_~sP5#kN+1yO(S1alWIbbE<~hrHP#=n)ivmR~ij>*RkPHOue<#dTxBWoXNt zC8B%GY8Ka0tL%C={lRPJF?!(lqHkcmotR1!3|AYz=b!~*l|WW-SUJehab5`l&iO-i zJmyM6KmZ0LbBb-ve!XF-gCq%B4vdx;X|&1pP$yPm0wj?Shq7dI9`?oJj5@sRkMPP) zk!05-h$gJuTNZ!hFVpZZlCA!3tiJE+^qu6(g1sA0y*{n^NZS<$z2KmR=@)~B8LAGC zE4VT94r`ov-GuhSux6~%!7|3+OgH1jRcY-H8J&4sUM+l>(RZ8?BEF8s>1^pwix_`1 zz)8_m_cM{8Yv=CIpL^fSe#Q8C;_0W@e@1z&II7Z(d@_F&VNP1I-O3@lEZ2ZStD>#o znw_JdK%v6X3t&F)(E%sGhOX@%HZZjw7=DEz9*!J$yN2isbQu8$_}e38Uv^R^69Bwt z>bMu$e0WP-<-RV~b#x19PS_4&N7AY;=|Y{YEoskf#uesOatF6|3!hJ^7%1!Aj0rU` z6Fp?JFcp6sq}55=N3C-)59S2(%6Wob7B79FsvuvK)yb6+!XqX<@ z1}{>tpuRj$tW`LubOAu^Qok)Y7)h^&@Rj(1J9Z{yi zfnmUrXfC3vv9po04INiCQj0;*+lpa<|F0INdb)p=(%n52J`#j~mU#j6`Dto?wq{Fi zA;3M`i)`bFbKlTxnXG#RMb3qlqQ~51AdfCdADQ_&P-Zx5#Q5d!oYD$nL@ww!AKo~E z&jj6BM=c-gc;$;H_M!CK^6A)x&y9w_$GY`=V^88HDT3=t)NwZ@X!2Z4@pR*2y1CWC z{aa_L$EeKy{1w;r|KkT!Y0PxmS*tMM4TwZ7PFq->2b!hOS`~WR^;}HW=xJT2?g~Kl zwmvWx(28E4YN|rA6fnanvYc0If9WcbnfuEn=Ql2Om$UgjY3@gG)^7g&j?}Bz8*DFw zsqT}G-a{l9Ar8v+)tP#a%0tdnho`aH*#;-{~F!Q)`Yi{_1;5&qA&aE z?0*yX7dOeP%f1QgkI3U5vmWnc-`3#W%v5{f;axe`DP6K1zhD4(y#li?llTPi-2K^w z&T@!5a^vRtQmst&lUpEv-tA*;H#1_UIf@%eZihA!H;2txE$IrjWPP`gJf;if zA(PhS0gciEBkEycCHnSE^<@j2`!8zg_nU|dD3>$w2lnAX{k#Z$0sY#pa3Y;UndYGg z9)sBcrp-vVrHw3VP!5l1&o_X4YFi9{YoE*Ki2gtJ zuB=N{Wl8^)UiX#uGN=p>y}FqM92jI!?A2#2MrEEw{q-%>u(i&%Hs!8+&dYr%Nu&bv z%Or`6_#)y^oPeoTB#4lz?ef5)-%(g-i0ixW>|0jhM~^%99Gtz_H$eMF|Bz$9hIGly zFS5b1th@%!6Z}GqNr-iSq4UN8NQO&3lnU2Y4x(T5{FY7UcE5q`asy(g0aqy=`zlaX$q5n)VA$}pKbS6vC*7* z10Lar*;>9_Z{Us)_XiApEMIuz=X=TB(mNgh=*VbDe}p~9=eqZb;eUe%vmeXXVw~T{ z3VWCOHe0&mq0F#7v#@b%w_-d7taqD=kWrw3=ESOv+!#Hr3|tFSP97I?V-BIVyV^%K z6)$yMaDAx~s@Vm9p*C;~7Rwial2riul z+TsiLymCAlN$cF=ONKR`Bir3lF&@!*pTp;kAMt+N6L|-JpflIUwa05>n6QXJbF)ih z;_UW9Ge*l66k_3iB^+Bzt@#7FnX{hZ!Wn#Br6F2Jft|~4x9ZYXt7h5G!-%Ff#ahuH zqVuH*cSAY(?Ij_+emaLZNF%ST2hHTtsz1p%@YJjJMP@%p{ZYRr40y?E{#m{DVVWkm zugn>TVj4Yv-H#1PUsNup0+-@wOIpBfdH=MXw2Lupl`e3|#O4?U&I&}#*(J`IJxNL4 zaiLb!gac>aVk#U$3d-ZA?7ce=z{HPR(7FA2eyQej#gl|11{@f*c(~>JT2iL} z=}KsS*Iw);-nG}DmA_P0>R7XP%1-SDd+(K}4n2|8`;Qm3<_{QuWo8XB`<7Xq*^M7Q z=2A_c8_-v=FXQ>z81>SAJ(^VzyWyfW3Q0hsWX1$r1+`cT@K#S& zr&_JbjK(86wwlTtG~PFzx2k)R2YgQ?xV_ZAZhz6qudnOMs_wlX#J$O*3%z4E?UJCr z&07gQy4v^NXqum27H3xdk2ja{!yg%>MH7_XujReE_!=%W7&Le{j{Gsm6Dc zt>h$slKUOZC1>%#U}RII8aDQNm(_^HwXA7o##`f#RCn>b*#5*tfY zE!2+}+H`KIrgE8Q5j2@!v?WZFsKp(Q)6!o~ZpQMyAb}M^AM%}&k~Dt6gUN0dQ7XQj zu8WAFcoHio2QM5ih&$MR=$`-kKKbsL?yoz^f4nH5H}iU!j_P+I2=Ck0n`!^xHrJ=N z^s-VA zC&iktWelx0##*TXMF()7jA)xahT&?~V5ajOyY>I*A{mCPgr(Aka-!UdM`26a z9=1|-3ce__W`93RVif&N|Kx{>_>oBay+iYurT2Zoj}PzC588w81_wkQRKSFqu_gHe zs|8jNl=`e?DCUxE<)Z|Iq`%ODT2J?ad~p{Jx`US4EL?%~Vk$2uG~g{-K0CxbX`?)3 z%={$LAKKkNw`rALuVs$h>mTRZg~vs=pRxV@NqUdohktWJDWg7jVg(FnD~>poM>nj> zI9Vcyw9>SIU$^9{%mUV1?XR28OSYszSt+q~wPsXpsqaC1NABtwpcz8MJ196=3yZP| zfbVbs4JHV^b-ibAe45wmxx5rVk$(gD&Do)uDz-k9Zaj2dd6!_eY5+1P>>$wXB##SJ zCBPiOT7S&k%HW*h52em9`k}ReBPpI6yD9wLMmu^s2r{O@RSbu%7fbN?EuoTMhCE0| z^`TQtT{nJY%fg<@B=gfd+`xW!zTdqM0De#IfM{7zE^n1v3Y~0o(nAb7q_9$0AAv;2 zYk$4DT<86K+9Zog;6E%^$7t;6&?CX~Z^3R`mkA7`l9yt7Ow|bx(A5e}H-^{)KX`2qy9Sd_$ zEM#QjGSecmi1`F_A|-L(7#`o{DH8f@+i@(TFHG zNGW;98QDpg=br?vUhW)Dl~SG;B?Y6SK&Si`5?aKG&{HHF3?2{ zi_0L8zc{z^GB{eb_nLI}V|V}ib?X1ukU9uuXPAF5AW#?m@Qm_UzbcH^&(VvJ0V<0^ zDPsZO!1UgORPO+w`!IyYOFLQ5HceJt_6s7*=)5(B@^Hu`9LoJ-;^>h+Wuho;eaWBI z-nxx28JkOHVK5eM4!Hrbup1ZZ=iEI!ve9&NmcBw#2ch%zfKflPC8f zXZY7p23hZ6=`6(`BR!u{41M=gqtw@7z6$IxzJ3f%=TgA-Sez=+THoj~7Jr=2v1Nth zNXi8b5|Myd6#}blWo*nDl}I@4*mqC(79BfmvN_DT0Fh;ShKz+U$D%rM$3$th!gJxp zWs`PqcPoy)_*$TxuLg7-k8UP-hV3pp0R(YJLA)O ztmsqJuaEUu(P5-7YK<93hBkN!D3BAyZmQ^{qRgCyi*;&a%;}<++1|!rdXuSs;7}*C z3P{cc7BQ401-QyfjyRL$Iy#riNt4iRxVrpn>al(X=e1{D{^oCI_TNeF!M$k@W%%Pu z6`BjFrL5?6reLOiu7Al4Jn7AJgKSgfWFWi%qRk4`FI6ECZGUmaXi>`Vms8zZQQGP} zPjv!f_nQN}z5pwl@Mg_~YD7?Pci}>5Ob|Yf%N542emge9^E>aPYt>elvgA4(FF(1b zS=(lv3s;cjaNPn&lo^7T3(e=fUSbg6f*~P!EgMN_R&9D12y*+$@CK~al61nVhvv!kG zgbOAt%PqKr%QYNvICBE_QNDn=iMLIT+p0|*7CvYjYGdk`xU|d`2G6@3H5KKY>n2|yIesl0-0{5i z_ZNXVUVpLzh4AAF2)(nxKw1N{sF*_w2f2{KY$JpOIyMj-f`S=HEakvc9)=66%m{g7 z2Yv!juurXc^!T>=mab-kO6b}l$@;2q|2;=VHwN5V=YLn=wG23zl-hA ze1C5Y)rps+beLRl!se7?Oyo0PoZ$vMK?5wqK)RU8c5yNHGH^C8jKFv*!CT_2-jbA+ ztTzCuTv$V5oFj`7aX1HXi!fF9(-JB}G^=lpdad%S;#B*ihh%Q}DR%x3u^sa7jouPF zfF3Dj0JLUj#*_fd%Xsh4#f1`3aqIJz%73acoIBi^q?9U61%D&WYIH7!(>9zJigDy0pFh z_t;Y@-QaIb*Zal%Gk1gO+^q-QWVQ} zKF_bHsIQDA`x5b9M7tuOC?cqQm_L;=u9Ov4?n0F4F+3hoqO=M~Igi(99H_o+ z1^Ad3JrW&2z;o!e3L- z=jBOWz^zbzao03gaw2ZmrMBd!9ni=-qp$=gMYtYjxrHCL2Z*PUB7ZT0eTk!}+zZ_ zfMnMQDbK`_w%-k-UO4mxDoe$cw@=dy3szGuq>Tlx(ouv22(3{aS5|ShYf9p@=Why{ zR)#j}hzHfW>r+BBQ{kLFZpbo&qrM<4 z=IcGoB?AlA;Z!2V1J_=#c|1bbB{NcDyKpVVi`zM)p>og{7B1apGMS0G91Y^VNby5( zpAq&>`*0=dS5xvB+y4Z$LbFwOcY)I%ir~4JiaVOcnINv|6@R~0=wG)&f9U`}M+flJ zTOpm$qsCeV@iCssud zIuL2#&_cIRxpJRsv}CE-3c_^Oa_BM{vt(AJgEHTD^`9CM!>dVM_JOIh`d!DW_h&z6 zmp;{^du}rXdw)b^oq*QUbh>Jt05#Y~9&F^klTr@f_6K5K7-G@q3{X$~M1|<7J4#JY z6j#Nh50`K|nJ8g@5@subjx|8t(gAsZ)3xL|g(}V^tu4#~0i-|3o_^a#j&2!wh4^-b z_&U}zbk3RE;Hy08FLlhtaf9rf{*Jyicq}(K`PZQOKYyXu>EQKxYt_4JTHvOh|Fnq+ zeZwzbJ2tkc9dvK9$zO`NT zHtmcSK!1vbb3ucpo(ju*YP%k{5h#Fjhw_SUhZr-%7>Q*}7JDdF;^DwHHxp@`i8i-| z@#Rmear1ua!smsVzcbd6#oT?PX%KplfJ=WRQl_QvEJibC20kD0J80P<0WY1YxF&9m zIU-VQz$| zKOnu&Fsn&BU$wwy@*AMR@z~mK1FEa6;EAbcGjjw?xN$Ek+?BXCG_0@A)-%X7aOPl} zVA~Wu7TgRS1samw1+LL67aoUhB7{k~U2)5kuJs{*AkD(!=CUF(GRDvlINBkGA0&~T zmEeLhJX|}By5rrbz3wO}x7SH~zT<4s?9q%igE?sp4rYa~mmR+A@vd7gXSuoqHnt&t zFtzG>kD|tiJ@+NL&VKL**v|#r3j|kpts}e!NahP+)ZQ~>J3$hA#rAV8PNXSX8v6i8 z0qM|x24Y^GcMEjo!_yToRj6PFIIPbP_n|wCR9KN@gX@VZ9LP%tS)i%xeUNfrsIX=) z$NKnR{^!dTCi8AmX%j0TajH3Wqx6oW?*UG723k+b`SR%EYrso7A)P6BCT9y?kG%vZ za4X7sJE=$KB~3B=m8W6~NEDUA-^0d)x|1er)=B7+kzyvdp?)$+&pD=L6BGQF^M0`NW}xAPwB23yWo5LMTc#dNDP z`(U2V23$AeR~o(Ems7l4Dl3vRxk2dDYiw&;7AqiwEtjTbAKkF?2s{AVnjL!U4dbnU z=nwLb%RU`n|9C6_4{Vq#n*?WDK2m+_mId{g*WfkidR|^VXzD${u^Hi%_zF7=B1p?M zD-(*%hRF$Ohgj1CrZak?piw_F#(O)`*%>f)+M@zb4jjl2HULcb4!+TwunxVCI{lu= z@5uOrzCR~!o$}|tKJ6$z5PH{aey-bpJh#*t=z%qJWrTXNt~_p?hG^iRYpYSV@qs8R z5w^#fAcQXrQ38!<0ft!Uo`EJryNkOym`R$h~iR z<9OO>`yCtK;DZsE_XYt6w!N9Ll5h>lxxP#ylif5O&E}&-TydO4QA}4Y#WsA4-GCM2 zzKfDuUP82PefQ&$Misy#K8n@}K!bQK4x{C=zhgN_WS}x1nFu`D7bcvD?2a!0W3BP- z0R#L|w%o5Ib}j9eT_NGrG#H3~C35hLvcmv?k}pUME3gnVg79^958cSV-Y!wtbiX*> zq>g+1`F~W*7<=OmF_KmiYk_Y%Pn8mgZ&(9&#AyP)9$UR=uJg^i$f0QLUm&kDpQjey zx7&!D@v+e1QT6|$-pX$hDV6$KbO@8+4h#Bm4)g@HBA%zqBd2M=XatvkB=*Bm7m3?_ z1MayU$^fm{7x8jM!-Tk7I3k;Gdm1${HXBn71v8zMsW)MyiGz?vIa6eQsErsZmY51t zf|-*nc~3apLyhie&ara%tuQkD8~n)T*(Ky7j$UqCCy)(x(DJ^rw?LsoM;0|#Gi-$V z-~>lC#M{j=N@MX{2mzvhhx$x~KyOf}hOVy1{1iov1=>lv-F&-QIP`4dCh$bB46G5w zK8h%(xZeWh5fmL^9Y@ZW@7xH+L5VG~f|Yn*{^H%HovaI9|=T{Gm;ex?HgqxUQik zPIl>4{@$te`qiU$=I{^7H(v1UXcJS8HyvG)k8Q(G6%y?R3XGWP=7dN12!B(rnnP!$5EJ(TNb@Vl` zbm9$_+O*2DCUQ_tprKxA^%JbutraRb!t%!8^i&S!A{+HPI2Uj4TGGT z?hw;iPM0F1G36@IvkZ)ctsG2cK3q=1!h~{#4-@o2*$^1$JwDp|>kyiD%lR(Rc3lIB z-wi>yD^Duc8kp)O&%gJ!mZ+KPKhf&@a_4)=aGHga(N^ycA0NC=`?>AhX(96ndpSa^ z=I?laZpuiyV+L8c&|-&kN)Dxk1EMu zn)v_oNWB{sNj}7{o}t#$_;lSOo3W%)w3vwqnvEAinn*F_Cd{aL*we_}hj8 zZxUdh;^f}E@ps79IE7U{&&m%)RldySjiAaGa{AX5Vj>}|@Uyym+mmqrNJR9<*4_nL zKWp{<%Kv%aXt{&F2Dz}mk{18(CoR510l(6}8mmG-Be^8MCE6;ZgnYzEtwmaY9=A^a z-k{CNByu##%V|ZDBLL_OItH9N@`R9rDK+WH%A}uym?TV9iD5uD1j=bS9!uzIZ@1ZO zvER8}Xo04Kv8v9x++jO_BGmj0-J#w{xu!e5)b%03!22s^NmHc6vssUD1 zRiBP3DfvEGfuT7ptL4*QvLlx1c#H9T2KV#PRv%(9u??ssEfZZRIyS@i^h^X0pJw>| zOb5YEXz$s18ywpmUJ~&(K#08!MXsl2BezF$+u{xeRrkDca6RDmk;wmlGt3%~r>hpy zEb3oHC0bCIvk^vl)0MRLJ2Y(Mz9xvMgAP$-ks)l*nE){?_dA|Q@i9lzVSh4?dZXDc z9xezQ;qb*Yka!;sH^e+x73eL|c)yL!L5-}N6fAa3X;6Yp7t3-k z06>rPd8WOKIDb8t36|r3X3}ahuyLp|eMX!`dC_uUm&2t!^ovSMvJn2FP-2Y3?kHACv~0`g;!kX&6XMT`qMg`r7p2zL@m>CUmSCo~)3!*n47*%you4{$!1X;|A>=+S1w^iUfd%kk3o0~N6V4<2c5mr1vy zGA)0=U;KrOh7AkN7x0cE;cddqz0g=3mv)Hf91-2d7w1yYfEI;t1VH>?7 zcE%IZE7CzbX?s(7&l>qGokE^74i_WAnOh64H#UkfIx#v!S+$aw7oCFF$2X{+F-+T1-Dj zi~MF3su#L{M*AvN92JAF=dONVUvizUYj0nFvm!OL_ihCzw(FuFVGtWF%{{5x#~x-+ z+SJ$ctEW%!Z`8N9pR^8vrJglF2zyqIU&V&L)*$$t^c%tcXhvM!$5q`{VR@X5}|_d(L$t5 z*~El2G4-Y5VVWv5D1;G>5JbYmRPn#pXFHDLKm(Me+VDNJv3(!Dv(NcChR{yf*>7A( z%=pp`g17APCYtk4ixX48tHV04H;GI&E%6uxzq9p67c`JXfX(v2ViCdb-1di`(V4nVK}MUYmcC?CTo{$`Ud!aO2{>AVYUu@DB~mh^2aNcX)<^Hag~>T zke#^@khkkZ@CtuaHv&G3z@gu@V;f;_YD2kEW*bm^06~i1g8349flF)Y{#oK}D!k*R zEAtM8HMC7kCA~9HOGrCyr(7_Yddz{II}2^7U&B}Q;QkJ->oDR65!ep*8+ZLjI@Mr* zJ{j1xey>!qp-U^2_K+|Ty$}7~kgz;3o}oD4kPWal$pTj`%FOWrJRn@~pSICqJ26Q2m zN&ug+#`MQ4g9eTrOe-=ewqs2(8$YX}|F%SUTM-k7PI3os$&!S1QbHIw zrz$3Xe9c`N$X5k}b_XMi(!s(t7r`%M)a7%XFQLF>h?@{B0rSbO*B8NLyqE`JWPf-< zW!n+y1a_qO{68H3#SfZ}w{iUb-)dVL{}n|C8)^c^q>6L2VcQET_)w&Asyqk@^NHwHIFf;}2EVSR9Llh< zRgFPQycU%^VdZ1m)GJW#L55ZQN@W!E3hI!`L5lmk!{J3lu&iP^9vIc}gMf1DbfC

A$0AHUs&10N4ZocWxMI From aced270f525d92743bcb0ebe85a8e58d6d630824 Mon Sep 17 00:00:00 2001 From: enisdenjo Date: Tue, 15 Jul 2025 15:22:09 +0200 Subject: [PATCH 51/60] export writers json --- packages/logger/package.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/logger/package.json b/packages/logger/package.json index 73f63df07..7288336fe 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -39,6 +39,16 @@ "default": "./dist/request.js" } }, + "./writers/json": { + "require": { + "types": "./dist/writers/json.d.cts", + "default": "./dist/writers/json.cjs" + }, + "import": { + "types": "./dist/writers/json.d.ts", + "default": "./dist/writers/json.js" + } + }, "./writers/logtape": { "require": { "types": "./dist/writers/logtape.d.cts", From f10a0356b9106c354697279c18b9890dd4182c26 Mon Sep 17 00:00:00 2001 From: enisdenjo Date: Tue, 15 Jul 2025 15:28:19 +0200 Subject: [PATCH 52/60] hive logger 1.0.0 with patch changeset because of accidental publish of 1.0.0 --- .changeset/dry-humans-mix.md | 1 - .changeset/tough-elephants-shop.md | 2 +- packages/logger/package.json | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.changeset/dry-humans-mix.md b/.changeset/dry-humans-mix.md index f9595dd86..6b9057ed8 100644 --- a/.changeset/dry-humans-mix.md +++ b/.changeset/dry-humans-mix.md @@ -21,7 +21,6 @@ '@graphql-hive/importer': major '@graphql-hive/gateway': major '@graphql-hive/gateway-runtime': major -'@graphql-hive/logger': major '@graphql-hive/nestjs': major '@graphql-hive/pubsub': major '@graphql-hive/signal': major diff --git a/.changeset/tough-elephants-shop.md b/.changeset/tough-elephants-shop.md index 2c628b131..9f3e6234e 100644 --- a/.changeset/tough-elephants-shop.md +++ b/.changeset/tough-elephants-shop.md @@ -1,5 +1,5 @@ --- -'@graphql-hive/logger': major +'@graphql-hive/logger': patch --- Introducing Hive Logger diff --git a/packages/logger/package.json b/packages/logger/package.json index 7288336fe..e5bc51db8 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@graphql-hive/logger", - "version": "0.0.0", + "version": "1.0.0", "type": "module", "repository": { "type": "git", From d56e4a16201542cdbc486c0feb6d482a2a1a57a0 Mon Sep 17 00:00:00 2001 From: theguild-bot Date: Tue, 15 Jul 2025 13:39:43 +0000 Subject: [PATCH 53/60] docs(examples): converted from e2es --- examples/hmac-auth-https/example.tar.gz | Bin 80838 -> 80838 bytes examples/hmac-auth-https/package-lock.json | 9 +++++---- examples/hmac-auth-https/package.json | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/hmac-auth-https/example.tar.gz b/examples/hmac-auth-https/example.tar.gz index bd91a9a32934932bf71523b8c0cf2fc1ab01dec7..eab9c2a8bb3518a56ae328bba9de3040d6956d6d 100644 GIT binary patch delta 2045 zcmVzJV3d!O^7Ssz=T@{*^f2NL*_~g86@YPJ2(;(-nXDe>XdPcONg8 z|52>?F8{wtdYAuy>~zZidy(K3`-qtu$MMVjfBGGQF%bDFSA4~1xR`!${=Z27qlI86 z9p2i<%jf?{&WGRU|F=l*^Z$>XF7p3=OZfeLynOygQ3QOS|KB1#PyeHZV5c2;VIMD^ z|6vf0vfk(aH%RaE|Brv2p6CA?nf@px{C`>hkHYX1`457Scm4lcB+ZBe>E!;%iH^*B zaw8fJxoV+HUrh?rbn-{Vb**DX^{TVH4wN3-A7I|h-cE&G34&2e8;WrKeTU|W3L zPLdVg*FBDRc*Bi4))L>6N1bQU`yK;KOfmP(x2>ZJKZ};>dbu47=DsHGasJ3@(wE!^ z=)>onCx>42wI0(fXIrlKOOzRNvE_U@)Qcb|%G+%Qd}ugOd2`|B6wAqZs+`kI#X184 z-a`1F{S!qv)s%mAJV>_m`kE+%c{d&pv0bk0dKFFT$29u*$1W%L?bB9goI=^-B5J;^ zavwdHY$i?#{&xS54+-uLD2pE;Zmuc0kH74*KkW@lJk_y+oGAyns^eJB#}AD*RX*xQ zb908~x|%ur@aea$3CZ#E>_{o4q>Ucy0;xaldW;_0S$}`oKYj9ZXYsP)qw0b#yNB|9 zR$AxVr{9kI*UX60(ZluRW&ePhEwm>O_v^3Qk^{$n{E!}#MI=mK{r5gyXKA+nd%s%l zRRw%!udA^mS; zIAzAqPww5bo#v3MC98v*3RwX|q5|w{G1E8~d=edtsE|rm@n6 zhPXIs$0+&lyE{p?<2Z9(hFQry6zUiGPL}VaJ3ms~$?EltIpfdByj25`Nga|*_VN<@ zbLn~hFhrIZ49u3ctY6iEgS3LD>NwiI%{;hp63_YitQ{tv0%kk6j*yNxei`jsFN!9R zeT9Ga$huG>*I5%DPNj?LIqYk zj+DED;b;m^M4AK1TX1zZ>JEKz48DQYgzbd1S?V6?-wfK0`i0B^PEO32iMNMKX4IIB z3dWI+IIP#3WQ*v&w%?ofe@dy)nKPs+?c`@Yup3`Y13gZQ1wGKbT7+(nyD)%Ya{>-FoXUn#cf@%| zVOT5wPrLq#I@Zts8|@~)|1AWZ|L->P{eMHJPar4%ueT1;^Z(kdHqZYn1Qgl&CP;sT z(f0(uqAO`^h6o@rMSpUq`V&`Y$F8p)_6N$xNqrC$?>{u{XLWRH3&CmS302cDNkf4N&0scOmz{eyopmz8rE{cIdl>2{q+AH}pJeNkrjiL6gph5w~V zg+!z_ZRjqT|1AJH&wqRJcW;yazujta z{#OXN|KDxo`2Y6g?_O^HchIP(^S{<%v%&da5m<-X)r3=uaV4`^nE>9Ddi{S$%W@W( z*2J2fWN|QFYM&)G00UnCTk(f`|$nCJ4%;NH9>GjSth=`2YqKj_^TKC%7;=& z3uS3ZE$LZ>3QjftkKm@4E=8++V%C@(cabti_69azudeTJsziub3KY~MZJot! zT1K^I6(=8reAFlYXCe$6UV1g*c`*rvtYCs(tw_48uwfc zRH(*%Y{t-TFErk&w;oAYhqBX8h8*=6*|-KCOLUg_K22BVR?)11znPU;zZ%&PE&$ED z#x4>y7g6odb898X)oh`}+SSZM(yy#i+~`s+(7pkT7P)q+;yK+d+&i;%PaCV}f1C3F zYv+H>2G9R32%P`zHga+Ne|z$8Zw3CZ-b}y$!IY5mzXDJ=|A&Xr-qd(H>_dd)&oP3l zQFuCAF?3)abw{xc{&>d{?hZw1wR6=fMS<-lp6!}_X=>rjY2gy delta 2045 zcmV;h|QH24IVZf~ad-i0HxV?n&K*mwY?g1IWBl zNa6%~zO!?67rhg4zMZZ6k*r;q2VTO7+xo@5*WSAw){_D(y`lWLsIazX{C1NRy)tx+ z_SM;wqn+!Ee{DUD>>F4S9UM(Mu6pEr<6nvMjl{J^B$)rV=d|~fJzam1|97*)clYsf z`5(oK@AChfq<8uM$4;mGzZVH!v5%OkaU8$Q|EJ#}7z2@?a>ZAChKuP3=l_fJKUxTO z(&4RrynOzTRxe}nWs|Nnp3>3ROYk?D_8!vB}`|0oPUk^dkFdDs8HMbeBokWTK8oao5B zCpV(uko%TX9LvakNIi&t`0eL?rKpZn({#DNHV@Sl_qfX3(#(BP>~`_EkV>?+{Y0z# z`Oz;f(RS_|K2`u9gNVuH^*!E{c-=DPwDpB{aWwmFy<-rG+OmJY)g1RlRW|si0Jg=) z?Ic;@ecj`Dhd11)V=eJ5dDM9pz3(x=#1wPieA_yz@Uv){u9w@fVD4+;9_NpoCVk0$ zfIfWAd2;AQU+Xc=a<=7qzeJfa7hBGkL%j%cqP*Q^z=wtdl{Xh|PO+Svr^-3aRID=) z;4Osz**{T)Q%!$a$Ae@`udj(Rn0Mpx5ZmR-u2<2deoUi}f9!H{-#%@1#wnCNE~4h! zD)-TI$!6k|;BWW;_>kc4fU@`j;^vx?`}oT~`_tZ_#8VwB$eD7Gt2&P5eEiU8Q{|&> zG&g5xuB(}|51)S9nvfhn&yJK*O4{hLE|B`;uE*%1o%Mg0{nIBucNQ-zKB_M0vU@1s zXQg$%efsUVf6a_29X(u6UiJ^D*+P5raKHY#Eje)P#}DZ-SwzC*)qn5Pb(Uu9zxS)< zUUl%{)86prK6NAb@f7M&jWkNr#}5MU${70L(-H2^KIkuBzvgbEiDo8OJ`OZV4jaDZ zT;9`MMU#KsGc&|r{`mIS{cwy1jl+u`6L>Efj-O++$BZzFohCgRocrASdEi|fol#jl zBr`p2E~@;uFA1-&b&HSKswazIj#T>mv@v%_1Zb63=RjJ#u*$>>Xug`%$!N6>3%lcIvI7lmas*a=W+suOtC-I!G&)Q+)DPXp9>j>$HQZeL1uZx5BLSUiEbAyCDpX*# z<4CzX7>=g!M5H;8yaiWxqwdfb$KV@SP1sIIo2BlN{>`B6s9(q&;N--NnRt7+WJZn2 zs9+rFh{JllNw$by?BbW6Bv|`>I6~Wodc}WzuWgL0Q`-)9oI`&M@5f`XNfC_2vq!jm zc14xeV*9;m|EH7+ojF6Q(oTNX1H19XG|=O;SkME_t3~MMxC;XaHYeaMc-bw`|c z6o$3(|Fr9`sAK*7ztL{;``<#q`TuSs-~Tss`UG9qBNLT22zi7Li) z<q|9U3zKhc3sy&nI2(1z}U`QHMN^Zd6bfA==&|J$t= z=YNHO`~TfWj{k2@{_f@Ge+P|vI{#}OHXEG(6@hiAT}?Qp7*{fzl?mWYsn>sxv@Bqybs^MyrXpaR1*Yelx5<}d(d|lgui;BuY4$l zv{06o)RLZ6sNhuN{|Ih+=~A@HCuWVwaTh6LWN%>eHLmQhF7U$U?3>`aI?wo`Y!DV} zC(a0498&Rk&0ow)=~o9!+dqF|P(eh87%u&2<)av>2Q`99`0D!prb>i}r9eSF($-nr zre#!XR&nw{$VYwRel=N#f>iI0__{XXpw8DDxTBb!o4$F_q4Hk{~ zuy+2}Z1DWwg24ITZXdo}~A4~~3|0@86^M7~YZYN& diff --git a/examples/hmac-auth-https/package-lock.json b/examples/hmac-auth-https/package-lock.json index 569c2a4a4..1b3661ee1 100644 --- a/examples/hmac-auth-https/package-lock.json +++ b/examples/hmac-auth-https/package-lock.json @@ -11,7 +11,7 @@ "@apollo/server": "^4.12.2", "@apollo/subgraph": "^2.11.2", "@graphql-hive/gateway": "^1.15.4", - "@graphql-hive/logger": "^0.0.0", + "@graphql-hive/logger": "^1.0.0", "@graphql-mesh/compose-cli": "^1.4.10", "@graphql-mesh/hmac-upstream-signature": "^1.2.28", "@graphql-mesh/plugin-jwt-auth": "^1.5.6", @@ -2186,9 +2186,10 @@ } }, "node_modules/@graphql-hive/logger": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@graphql-hive/logger/-/logger-0.0.0.tgz", - "integrity": "sha512-OYT33fYvSvPcbqfjZ4uniKQe+525oAuk2k3MKVwIBMjA7oFIjgCoUH0AlKyRjbXuFlmKDeidn+3bzY3S5nNqFw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@graphql-hive/logger/-/logger-1.0.0.tgz", + "integrity": "sha512-66kcaBS2td3wA9aUAnKCkDfOiuV8CzTOI1kKmiHzsWiSvrFIrqeOgXd+gb9mTAFl9MFuQTaJfS6qb/jnSv+eOQ==", + "deprecated": "Accidental publish of v1. Please use \"next\" releases instead.", "license": "MIT", "engines": { "node": ">=18.0.0" diff --git a/examples/hmac-auth-https/package.json b/examples/hmac-auth-https/package.json index bbb81741d..e5a2a4312 100644 --- a/examples/hmac-auth-https/package.json +++ b/examples/hmac-auth-https/package.json @@ -13,7 +13,7 @@ "@apollo/server": "^4.12.2", "@apollo/subgraph": "^2.11.2", "@graphql-hive/gateway": "^1.15.4", - "@graphql-hive/logger": "^0.0.0", + "@graphql-hive/logger": "^1.0.0", "@graphql-mesh/compose-cli": "^1.4.10", "@graphql-mesh/hmac-upstream-signature": "^1.2.28", "@graphql-mesh/plugin-jwt-auth": "^1.5.6", From 1ba0cf4a6359e41a6ab16f940d8733d3ad9d800b Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Sat, 5 Jul 2025 23:34:31 +0200 Subject: [PATCH 54/60] feat(opentelemtry): Add CLI options for basic setup --- ...@graphql-hive_gateway-1300-dependencies.md | 8 + ..._plugin-opentelemetry-1300-dependencies.md | 7 + e2e/opentelemetry/gateway.config.ts | 68 +++--- e2e/opentelemetry/opentelemetry.e2e.ts | 114 ++++++++++ packages/gateway/package.json | 2 + packages/gateway/src/cli.ts | 43 +++- .../src/commands/handleOpenTelemetryConfig.ts | 58 ++++++ .../src/commands/handleReportingConfig.ts | 43 +++- packages/gateway/src/commands/proxy.ts | 20 ++ packages/gateway/src/commands/subgraph.ts | 22 ++ packages/gateway/src/commands/supergraph.ts | 20 ++ packages/plugins/opentelemetry/package.json | 1 + .../plugins/opentelemetry/src/attributes.ts | 4 + .../opentelemetry/src/hive-span-processor.ts | 197 ++++++++++++++++++ packages/plugins/opentelemetry/src/plugin.ts | 40 +++- packages/plugins/opentelemetry/src/setup.ts | 53 ++++- packages/plugins/opentelemetry/src/spans.ts | 91 ++++++-- .../tests/useOpenTelemetry.spec.ts | 140 ++++++++++++- packages/plugins/opentelemetry/tests/utils.ts | 3 + yarn.lock | 19 ++ 20 files changed, 880 insertions(+), 73 deletions(-) create mode 100644 .changeset/@graphql-hive_gateway-1300-dependencies.md create mode 100644 .changeset/@graphql-mesh_plugin-opentelemetry-1300-dependencies.md create mode 100644 packages/gateway/src/commands/handleOpenTelemetryConfig.ts create mode 100644 packages/plugins/opentelemetry/src/hive-span-processor.ts diff --git a/.changeset/@graphql-hive_gateway-1300-dependencies.md b/.changeset/@graphql-hive_gateway-1300-dependencies.md new file mode 100644 index 000000000..4b06cf543 --- /dev/null +++ b/.changeset/@graphql-hive_gateway-1300-dependencies.md @@ -0,0 +1,8 @@ +--- +'@graphql-hive/gateway': patch +--- + +dependencies updates: + +- Added dependency [`@opentelemetry/context-async-hooks@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-trace-base@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.1) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-1300-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-1300-dependencies.md new file mode 100644 index 000000000..62f8db249 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-1300-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/core@0.13.0-alpha-20250707104821-802de2e836e8fc0fb59533a3c4c63cf53e9fc33c` ↗︎](https://www.npmjs.com/package/@graphql-hive/core/v/0.13.0) (to `dependencies`) diff --git a/e2e/opentelemetry/gateway.config.ts b/e2e/opentelemetry/gateway.config.ts index a13e94db2..d6f95f82a 100644 --- a/e2e/opentelemetry/gateway.config.ts +++ b/e2e/opentelemetry/gateway.config.ts @@ -29,42 +29,46 @@ const useOnFetchTracer = (): GatewayPlugin => { }; }; -const { OTLPTraceExporter } = - process.env['OTLP_EXPORTER_TYPE'] === 'http' - ? await import(`@opentelemetry/exporter-trace-otlp-http`) - : await import(`@opentelemetry/exporter-trace-otlp-grpc`); +if (process.env['DISABLE_OPENTELEMETRY_SETUP'] !== '1') { + const { OTLPTraceExporter } = + process.env['OTLP_EXPORTER_TYPE'] === 'http' + ? await import(`@opentelemetry/exporter-trace-otlp-http`) + : await import(`@opentelemetry/exporter-trace-otlp-grpc`); -const exporter = new OTLPTraceExporter({ - url: process.env['OTLP_EXPORTER_URL'], -}); - -const resource = resources.resourceFromAttributes({ - 'custom.resource': 'custom value', -}); - -// The NodeSDK only actually work in Node. For other envs, it's better to use our own configurator -const runner = process.env['E2E_GATEWAY_RUNNER']; -if (runner === 'node' || runner === 'docker') { - const sdk = new NodeSDK({ - // Use spanProcessor instead of spanExporter to remove batching for test speed - spanProcessors: [new tracing.SimpleSpanProcessor(exporter)], - resource, - instrumentations: getNodeAutoInstrumentations(), - resourceDetectors: getResourceDetectors(), + const exporter = new OTLPTraceExporter({ + url: process.env['OTLP_EXPORTER_URL'], }); - sdk.start(); - ['SIGTERM', 'SIGINT'].forEach((sig) => process.on(sig, () => sdk.shutdown())); -} else { - openTelemetrySetup({ - contextManager: new AsyncLocalStorageContextManager(), - resource, - traces: { - exporter, - // Disable batching to speedup tests - batching: false, - }, + const resource = resources.resourceFromAttributes({ + 'custom.resource': 'custom value', }); + + // The NodeSDK only actually work in Node. For other envs, it's better to use our own configurator + const runner = process.env['E2E_GATEWAY_RUNNER']; + if (runner === 'node' || runner === 'docker') { + const sdk = new NodeSDK({ + // Use spanProcessor instead of spanExporter to remove batching for test speed + spanProcessors: [new tracing.SimpleSpanProcessor(exporter)], + resource, + instrumentations: getNodeAutoInstrumentations(), + resourceDetectors: getResourceDetectors(), + }); + + sdk.start(); + ['SIGTERM', 'SIGINT'].forEach((sig) => + process.on(sig, () => sdk.shutdown()), + ); + } else { + openTelemetrySetup({ + contextManager: new AsyncLocalStorageContextManager(), + resource, + traces: { + exporter, + // Disable batching to speedup tests + batching: false, + }, + }); + } } export const gatewayConfig = defineConfig({ diff --git a/e2e/opentelemetry/opentelemetry.e2e.ts b/e2e/opentelemetry/opentelemetry.e2e.ts index aa09c3aa4..be3ff0e98 100644 --- a/e2e/opentelemetry/opentelemetry.e2e.ts +++ b/e2e/opentelemetry/opentelemetry.e2e.ts @@ -713,6 +713,120 @@ describe('OpenTelemetry', () => { }); }); + it('should report telemetry metrics correctly to jaeger using cli options', async () => { + const serviceName = 'mesh-e2e-test-1'; + const { execute } = await gateway({ + runner, + supergraph, + env: { + DISABLED_OPENTELEMETRY_SETUP: '1', + OTEL_SERVICE_NAME: serviceName, + OTEL_SERVICE_VERSION: '1.0.0', + }, + args: [ + '--opentelemetry', + urls[OTLP_EXPORTER_TYPE], + '--opentelemetry-exporter-type', + `otlp-${OTLP_EXPORTER_TYPE}`, + ], + }); + + await expect( + execute({ query: exampleSetup.query }), + ).resolves.toMatchObject({ + data: {}, + }); + await expectJaegerTraces(serviceName, (traces) => { + const relevantTraces = traces.data.filter((trace) => + trace.spans.some((span) => span.operationName === 'POST /graphql'), + ); + expect(relevantTraces.length).toBe(1); + const relevantTrace = relevantTraces[0]; + expect(relevantTrace).toBeDefined(); + expect(relevantTrace!.spans.length).toBe(20); + + const resource = relevantTrace!.processes['p1']; + expect(resource).toBeDefined(); + + const tags = resource!.tags.map(({ key, value }) => ({ key, value })); + const tagKeys = resource!.tags.map(({ key }) => key); + expect(resource!.serviceName).toBe(serviceName); + [ + ['custom.resource', 'custom value'], + ['otel.library.name', 'gateway'], + ].forEach(([key, value]) => { + return expect(tags).toContainEqual({ key, value }); + }); + + if ( + process.env['E2E_GATEWAY_RUNNER'] === 'node' || + process.env['E2E_GATEWAY_RUNNER'] === 'docker' + ) { + const expectedTags = [ + 'process.owner', + 'host.arch', + 'os.type', + 'service.instance.id', + ]; + if (process.env['E2E_GATEWAY_RUNNER'] === 'docker') { + expectedTags.push('container.id'); + } + expectedTags.forEach((key) => { + return expect(tagKeys).toContain(key); + }); + } + + const spanTree = buildSpanTree(relevantTrace!.spans, 'POST /graphql'); + expect(spanTree).toBeDefined(); + + expect(spanTree!.children).toHaveLength(1); + + const operationSpan = spanTree!.children[0]; + const expectedOperationChildren = [ + 'graphql.parse', + 'graphql.validate', + 'graphql.context', + 'graphql.execute', + ]; + expect(operationSpan!.children).toHaveLength(4); + for (const operationName of expectedOperationChildren) { + expect(operationSpan?.children).toContainEqual( + expect.objectContaining({ + span: expect.objectContaining({ operationName }), + }), + ); + } + + const executeSpan = operationSpan!.children.find( + ({ span }) => span.operationName === 'graphql.execute', + ); + + const expectedExecuteChildren = [ + ['subgraph.execute (accounts)', 2], + ['subgraph.execute (products)', 2], + ['subgraph.execute (inventory)', 1], + ['subgraph.execute (reviews)', 2], + ] as const; + + for (const [operationName, count] of expectedExecuteChildren) { + const matchingChildren = executeSpan!.children.filter( + ({ span }) => span.operationName === operationName, + ); + expect(matchingChildren).toHaveLength(count); + for (const child of matchingChildren) { + expect(child.children).toHaveLength(1); + expect(child.children).toContainEqual( + expect.objectContaining({ + span: expect.objectContaining({ + operationName: 'http.fetch', + }), + }), + ); + } + } + }); + }); + it('should report parse failures correctly', async () => { const serviceName = 'mesh-e2e-test-2'; const { execute } = await gateway({ diff --git a/packages/gateway/package.json b/packages/gateway/package.json index 971689f58..f407ac7e2 100644 --- a/packages/gateway/package.json +++ b/packages/gateway/package.json @@ -84,6 +84,7 @@ "@graphql-yoga/render-graphiql": "^5.15.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.202.0", + "@opentelemetry/context-async-hooks": "^2.0.1", "@opentelemetry/context-zone": "^2.0.1", "@opentelemetry/core": "^2.0.1", "@opentelemetry/exporter-jaeger": "^2.0.1", @@ -93,6 +94,7 @@ "@opentelemetry/sampler-jaeger-remote": "^0.202.0", "@opentelemetry/sdk-logs": "^0.202.0", "@opentelemetry/sdk-metrics": "^2.0.1", + "@opentelemetry/sdk-trace-base": "^2.0.1", "commander": "^13.1.0", "dotenv": "^17.2.0", "graphql-ws": "^6.0.4", diff --git a/packages/gateway/src/cli.ts b/packages/gateway/src/cli.ts index 25ea18296..54ea10c10 100644 --- a/packages/gateway/src/cli.ts +++ b/packages/gateway/src/cli.ts @@ -343,31 +343,64 @@ let cli = new Command() // @ts-expect-error null, ) + .addOption( + new Option( + '--opentelemetry [exporter-endpoint]', + `Enable OpenTelemetry integration with an exporter using this option's value as endpoint. By default, it uses OTLP HTTP, use "--opentelemetry-exporter-type" to change the default.`, + ).env('OPENTELEMETRY'), + ) + .addOption( + new Option( + '--opentelemetry-exporter-type ', + `OpenTelemetry exporter type to use when setting up OpenTelemetry integration. Requires "--opentelemetry" to set the endpoint.`, + ) + .choices(['otlp-http', 'otlp-grpc']) + .default('otlp-http') + .env('OPENTELEMETRY_EXPORTER_TYPE'), + ) .addOption( new Option( '--hive-registry-token ', - '[DEPRECATED: please use "--hive-usage-target" and "--hive-usage-access-token"] Hive registry token for usage metrics reporting', + '[DEPRECATED: please use "--hive-target" and "--hive-access-token"] Hive registry token for usage metrics reporting', ).env('HIVE_REGISTRY_TOKEN'), ) .addOption( new Option( '--hive-usage-target ', - 'Hive registry target to which the usage data should be reported to. requires the "--hive-usage-access-token " option', + '[DEPRECATED] please use --hive-target instead.', ).env('HIVE_USAGE_TARGET'), ) + .addOption( + new Option( + '--hive-target ', + 'Hive registry target to which the usage and tracing data should be reported to. Requires either "--hive-access-token ", "--hive-usage-access-token " or "--hive-trace-access-token" option', + ).env('HIVE_TARGET'), + ) + .addOption( + new Option( + '--hive-access-token ', + 'Hive registry access token for usage metrics reporting and tracing. Enables both usage reporting and tracing. Requires the "--hive-target " option', + ).env('HIVE_ACCESS_TOKEN'), + ) .addOption( new Option( '--hive-usage-access-token ', - 'Hive registry access token for usage metrics reporting. requires the "--hive-usage-target " option', + `Hive registry access token for usage reporting. Enables Hive usage report. Requires the "--hive-target " option. It can't be used together with "--hive-access-token"`, ).env('HIVE_USAGE_ACCESS_TOKEN'), ) + .addOption( + new Option( + '--hive-trace-access-token ', + `Hive registry access token for tracing. Enables Hive tracing. Requires the "--hive-target " option. It can't be used together with "--hive-access-token"`, + ).env('HIVE_TRACE_ACCESS_TOKEN'), + ) .option( '--hive-persisted-documents-endpoint ', - '[EXPERIMENTAL] Hive CDN endpoint for fetching the persisted documents. requires the "--hive-persisted-documents-token " option', + '[EXPERIMENTAL] Hive CDN endpoint for fetching the persisted documents. Requires the "--hive-persisted-documents-token " option', ) .option( '--hive-persisted-documents-token ', - '[EXPERIMENTAL] Hive persisted documents CDN endpoint token. requires the "--hive-persisted-documents-endpoint " option', + '[EXPERIMENTAL] Hive persisted documents CDN endpoint token. Requires the "--hive-persisted-documents-endpoint " option', ) .addOption( new Option( diff --git a/packages/gateway/src/commands/handleOpenTelemetryConfig.ts b/packages/gateway/src/commands/handleOpenTelemetryConfig.ts new file mode 100644 index 000000000..ae329c629 --- /dev/null +++ b/packages/gateway/src/commands/handleOpenTelemetryConfig.ts @@ -0,0 +1,58 @@ +import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'; +import type { CLIContext } from '..'; + +export async function handleOpenTelemetryConfig( + ctx: CLIContext, + cliOpts: { + hiveAccessToken: string | undefined; // TODO: Use it to enable tracing by default once stable + hiveTarget: string | undefined; + hiveTraceAccessToken: string | undefined; + openTelemetryExporterType: 'otlp-http' | 'otlp-grpc' | undefined; + openTelemetry: boolean | string | undefined; + }, +) { + const accessToken = cliOpts.hiveTraceAccessToken; // TODO: also use value of hiveAccessToken + const target = cliOpts.hiveTarget; + const openTelemetry = cliOpts.openTelemetry; + const exporterType = cliOpts.openTelemetryExporterType ?? 'otlp-http'; + + if (typeof openTelemetry === 'string' || accessToken) { + const { openTelemetrySetup, HiveTracingSpanProcessor } = await import( + '@graphql-mesh/plugin-opentelemetry/setup' + ); + const processors = []; + + if (openTelemetry) { + const { OTLPTraceExporter } = await import( + `@opentelemetry/exporter-trace-${exporterType}` + ); + + processors.push( + new BatchSpanProcessor(new OTLPTraceExporter({ url: openTelemetry })), + ); + } + + if (accessToken) { + if (!target) { + ctx.log.error( + 'Hive tracing needs a target. Please provide it through "--hive-target "', + ); + process.exit(1); + } + + processors.push( + new HiveTracingSpanProcessor({ + accessToken, + target, + }), + ); + } + + openTelemetrySetup({ + traces: { processors }, + contextManager: await import('@opentelemetry/context-async-hooks') + .then((module) => new module.AsyncLocalStorageContextManager()) + .catch(() => null), + }); + } +} diff --git a/packages/gateway/src/commands/handleReportingConfig.ts b/packages/gateway/src/commands/handleReportingConfig.ts index 3434d5da3..b39a20405 100644 --- a/packages/gateway/src/commands/handleReportingConfig.ts +++ b/packages/gateway/src/commands/handleReportingConfig.ts @@ -6,9 +6,12 @@ import { } from '..'; export interface ReportingCLIOptions { + hiveTarget: string | undefined; hiveRegistryToken: string | undefined; hiveUsageTarget: string | undefined; + hiveAccessToken: string | undefined; hiveUsageAccessToken: string | undefined; + hiveTraceAccessToken: string | undefined; apolloGraphRef: string | undefined; apolloKey: string | undefined; } @@ -22,7 +25,7 @@ export function handleReportingConfig( ...(loadedConfig.reporting?.type === 'hive' ? { hiveRegistryToken: loadedConfig.reporting.token, - hiveUsageTarget: loadedConfig.reporting.target, + hiveTarget: loadedConfig.reporting.target, hiveUsageAccessToken: loadedConfig.reporting.token, } : {}), @@ -33,7 +36,12 @@ export function handleReportingConfig( } : {}), }; - const opts = { ...confOpts, ...cliOpts }; + const opts = { + ...confOpts, + ...cliOpts, + hiveTarget: + cliOpts.hiveTarget ?? cliOpts.hiveUsageTarget ?? confOpts.hiveTarget, + }; if (cliOpts.hiveRegistryToken && cliOpts.hiveUsageAccessToken) { ctx.log.error( @@ -42,29 +50,46 @@ export function handleReportingConfig( process.exit(1); } - if (cliOpts.hiveRegistryToken && opts.hiveUsageTarget) { + if (cliOpts.hiveUsageTarget && cliOpts.hiveTarget) { + ctx.log.error( + 'Cannot use "--hive-usage-target" with "--hive-target". Please only use "--hive-target"', + ); + process.exit(1); + } + + if (cliOpts.hiveRegistryToken && opts.hiveTarget) { ctx.log.error( 'Cannot use "--hive-registry-token" with a target. Please use "--hive-usage-target" and "--hive-usage-access-token" or the config instead.', ); process.exit(1); } - if (opts.hiveUsageTarget && !opts.hiveUsageAccessToken) { + if ( + opts.hiveTarget && + !opts.hiveAccessToken && + !opts.hiveUsageAccessToken && + !opts.hiveTraceAccessToken + ) { ctx.log.error( - 'Hive usage target needs an access token. Please provide it through the "--hive-usage-access-token " option or the config.', + 'Hive usage target needs an access token. Please provide it through "--hive-access-token ", or specific "--hive-usage-access-token " and "--hive-trace-access-token" options, or the config.', ); process.exit(1); } - if (opts.hiveUsageAccessToken && !opts.hiveUsageTarget) { + if ( + (opts.hiveAccessToken || + opts.hiveUsageAccessToken || + opts.hiveTraceAccessToken) && + !opts.hiveUsageTarget + ) { ctx.log.error( - 'Hive usage access token needs a target. Please provide it through the "--hive-usage-target " option or the config.', + 'Hive access token needs a target. Please provide it through the "--hive-target " option or the config.', ); process.exit(1); } const hiveUsageAccessToken = - opts.hiveUsageAccessToken || opts.hiveRegistryToken; + opts.hiveAccessToken || opts.hiveUsageAccessToken || opts.hiveRegistryToken; if (hiveUsageAccessToken) { // different logs w and w/o the target to disambiguate if (opts.hiveUsageTarget) { @@ -76,7 +101,7 @@ export function handleReportingConfig( ...loadedConfig.reporting, type: 'hive', token: hiveUsageAccessToken, - target: opts.hiveUsageTarget, + target: opts.hiveTarget, }; } diff --git a/packages/gateway/src/commands/proxy.ts b/packages/gateway/src/commands/proxy.ts index 954fccd28..0b5621d6b 100644 --- a/packages/gateway/src/commands/proxy.ts +++ b/packages/gateway/src/commands/proxy.ts @@ -19,6 +19,7 @@ import { } from '../config'; import { startServerForRuntime } from '../servers/startServerForRuntime'; import { handleFork } from './handleFork'; +import { handleOpenTelemetryConfig } from './handleOpenTelemetryConfig'; import { handleReportingConfig } from './handleReportingConfig'; export const addCommand: AddCommand = (ctx, cli) => @@ -34,11 +35,16 @@ export const addCommand: AddCommand = (ctx, cli) => ) .action(async function proxy(endpoint) { const { + opentelemetry, + opentelemetryExporterType, hiveCdnEndpoint, hiveCdnKey, hiveRegistryToken, + hiveTarget, hiveUsageTarget, + hiveAccessToken, hiveUsageAccessToken, + hiveTraceAccessToken, maskedErrors, hivePersistedDocumentsEndpoint, hivePersistedDocumentsToken, @@ -47,6 +53,14 @@ export const addCommand: AddCommand = (ctx, cli) => ctx.log.info(`Starting ${ctx.productName} ${ctx.version} in proxy mode`); + await handleOpenTelemetryConfig(ctx, { + openTelemetry: opentelemetry, + openTelemetryExporterType: opentelemetryExporterType, + hiveAccessToken, + hiveTarget, + hiveTraceAccessToken, + }); + const loadedConfig = await loadConfig({ log: ctx.log, configPath: opts.configPath, @@ -104,8 +118,11 @@ export const addCommand: AddCommand = (ctx, cli) => const registryConfig: Pick = {}; const reporting = handleReportingConfig(ctx, loadedConfig, { hiveRegistryToken, + hiveTarget, hiveUsageTarget, + hiveAccessToken, hiveUsageAccessToken, + hiveTraceAccessToken, // proxy can only do reporting to hive registry apolloGraphRef: undefined, apolloKey: undefined, @@ -128,6 +145,9 @@ export const addCommand: AddCommand = (ctx, cli) => { ...loadedConfig, ...opts, + openTelemetry: opentelemetry + ? { ...loadedConfig.openTelemetry, traces: true } + : loadedConfig.openTelemetry, }, { log: ctx.log, diff --git a/packages/gateway/src/commands/subgraph.ts b/packages/gateway/src/commands/subgraph.ts index daeec0f3c..fa14ffeff 100644 --- a/packages/gateway/src/commands/subgraph.ts +++ b/packages/gateway/src/commands/subgraph.ts @@ -23,6 +23,7 @@ import { } from '../config'; import { startServerForRuntime } from '../servers/startServerForRuntime'; import { handleFork } from './handleFork'; +import { handleOpenTelemetryConfig } from './handleOpenTelemetryConfig'; import { handleReportingConfig } from './handleReportingConfig'; export const addCommand: AddCommand = (ctx, cli) => @@ -37,10 +38,15 @@ export const addCommand: AddCommand = (ctx, cli) => ) .action(async function subgraph(schemaPathOrUrl) { const { + opentelemetry, + opentelemetryExporterType, maskedErrors, hiveRegistryToken, + hiveTarget, hiveUsageTarget, + hiveAccessToken, hiveUsageAccessToken, + hiveTraceAccessToken, hivePersistedDocumentsEndpoint, hivePersistedDocumentsToken, ...opts @@ -48,6 +54,16 @@ export const addCommand: AddCommand = (ctx, cli) => ctx.log.info(`Starting ${ctx.productName} ${ctx.version} as subgraph`); + // Handle hive OTEL tracing before loading config so that the tracer provider is registered + // if users needs it in a custom plugin. + await handleOpenTelemetryConfig(ctx, { + openTelemetry: opentelemetry, + openTelemetryExporterType: opentelemetryExporterType, + hiveTarget, + hiveAccessToken, + hiveTraceAccessToken, + }); + const loadedConfig = await loadConfig({ log: ctx.log, configPath: opts.configPath, @@ -65,8 +81,11 @@ export const addCommand: AddCommand = (ctx, cli) => const registryConfig: Pick = {}; const reporting = handleReportingConfig(ctx, loadedConfig, { hiveRegistryToken, + hiveTarget, hiveUsageTarget, + hiveAccessToken, hiveUsageAccessToken, + hiveTraceAccessToken, // subgraph can only do reporting to hive registry apolloGraphRef: undefined, apolloKey: undefined, @@ -89,6 +108,9 @@ export const addCommand: AddCommand = (ctx, cli) => { ...loadedConfig, ...opts, + openTelemetry: opentelemetry + ? { ...loadedConfig.openTelemetry, traces: true } + : loadedConfig.openTelemetry, }, { log: ctx.log, diff --git a/packages/gateway/src/commands/supergraph.ts b/packages/gateway/src/commands/supergraph.ts index c4da68576..ebedd8715 100644 --- a/packages/gateway/src/commands/supergraph.ts +++ b/packages/gateway/src/commands/supergraph.ts @@ -29,6 +29,7 @@ import { } from '../config'; import { startServerForRuntime } from '../servers/startServerForRuntime'; import { handleFork } from './handleFork'; +import { handleOpenTelemetryConfig } from './handleOpenTelemetryConfig'; import { handleReportingConfig } from './handleReportingConfig'; export const addCommand: AddCommand = (ctx, cli) => @@ -49,11 +50,16 @@ export const addCommand: AddCommand = (ctx, cli) => ) .action(async function supergraph(schemaPathOrUrl) { const { + opentelemetry, + opentelemetryExporterType, hiveCdnEndpoint, hiveCdnKey, hiveRegistryToken, hiveUsageTarget, + hiveTarget, + hiveAccessToken, hiveUsageAccessToken, + hiveTraceAccessToken, maskedErrors, apolloGraphRef, apolloKey, @@ -69,6 +75,14 @@ export const addCommand: AddCommand = (ctx, cli) => `Starting ${ctx.productName} ${ctx.version} with supergraph`, ); + await handleOpenTelemetryConfig(ctx, { + openTelemetry: opentelemetry, + openTelemetryExporterType: opentelemetryExporterType, + hiveAccessToken, + hiveTarget, + hiveTraceAccessToken, + }); + const loadedConfig = await loadConfig({ log: ctx.log, configPath: opts.configPath, @@ -161,6 +175,9 @@ export const addCommand: AddCommand = (ctx, cli) => const registryConfig: Pick = {}; const reporting = handleReportingConfig(ctx, loadedConfig, { + hiveTarget, + hiveAccessToken, + hiveTraceAccessToken, hiveRegistryToken, hiveUsageTarget, hiveUsageAccessToken, @@ -185,6 +202,9 @@ export const addCommand: AddCommand = (ctx, cli) => { ...loadedConfig, ...opts, + openTelemetry: opentelemetry + ? { ...loadedConfig.openTelemetry, traces: true } + : loadedConfig.openTelemetry, }, { log: ctx.log, diff --git a/packages/plugins/opentelemetry/package.json b/packages/plugins/opentelemetry/package.json index 86f5c1ac7..d995c5076 100644 --- a/packages/plugins/opentelemetry/package.json +++ b/packages/plugins/opentelemetry/package.json @@ -52,6 +52,7 @@ "graphql": "^15.9.0 || ^16.9.0" }, "dependencies": { + "@graphql-hive/core": "0.13.0-alpha-20250707104821-802de2e836e8fc0fb59533a3c4c63cf53e9fc33c", "@graphql-hive/gateway-runtime": "workspace:^", "@graphql-hive/logger": "workspace:^", "@graphql-mesh/cross-helpers": "^0.4.10", diff --git a/packages/plugins/opentelemetry/src/attributes.ts b/packages/plugins/opentelemetry/src/attributes.ts index c8c55dddd..71f77e0a0 100644 --- a/packages/plugins/opentelemetry/src/attributes.ts +++ b/packages/plugins/opentelemetry/src/attributes.ts @@ -21,8 +21,12 @@ export { export const SEMATTRS_GRAPHQL_DOCUMENT = 'graphql.document'; export const SEMATTRS_GRAPHQL_OPERATION_TYPE = 'graphql.operation.type'; export const SEMATTRS_GRAPHQL_OPERATION_NAME = 'graphql.operation.name'; +export const SEMATTRS_GRAPHQL_OPERATION_HASH = 'graphql.operation.hash'; export const SEMATTRS_GRAPHQL_ERROR_COUNT = 'graphql.error.count'; +export const SEMATTRS_GRAPHQL_ERROR_CODES = 'graphql.error.codes'; // Gateway-specific attributes export const SEMATTRS_GATEWAY_UPSTREAM_SUBGRAPH_NAME = 'gateway.upstream.subgraph.name'; +export const SEMATTRS_GATEWAY_OPERATION_SUBGRAPH_NAMES = + 'gateway.operation.subgraph.names'; diff --git a/packages/plugins/opentelemetry/src/hive-span-processor.ts b/packages/plugins/opentelemetry/src/hive-span-processor.ts new file mode 100644 index 000000000..032e9f286 --- /dev/null +++ b/packages/plugins/opentelemetry/src/hive-span-processor.ts @@ -0,0 +1,197 @@ +import { Context } from '@opentelemetry/api'; +import { hrTimeDuration } from '@opentelemetry/core'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { + BatchSpanProcessor, + BufferConfig, + Span, + SpanProcessor, +} from '@opentelemetry/sdk-trace-base'; +import type { SpanImpl } from '@opentelemetry/sdk-trace-base/build/src/Span'; +import { SEMATTRS_HTTP_METHOD } from '@opentelemetry/semantic-conventions'; +import { + SEMATTRS_GATEWAY_OPERATION_SUBGRAPH_NAMES, + SEMATTRS_GRAPHQL_ERROR_CODES, + SEMATTRS_GRAPHQL_ERROR_COUNT, +} from './attributes'; + +export type HiveTracingSpanProcessorOptions = + | { + target: string; + accessToken: string; + batching?: BufferConfig; + processor?: never; + } + | { + processor: SpanProcessor; + }; + +type TraceState = { + traceId: string; + rootId: string; + operationRoots: Map; + subgraphExecutions: Map; + httpSpan: SpanImpl; +}; + +export class HiveTracingSpanProcessor implements SpanProcessor { + private traceStateById: Map = new Map(); + private processor: SpanProcessor; + + constructor(config: HiveTracingSpanProcessorOptions) { + if (config.processor) { + this.processor = config.processor; + } else { + this.processor = new BatchSpanProcessor( + new OTLPTraceExporter({ + url: `https://app.graphql-hive.com/opentelemetry/v1/traces`, + headers: { + Authorization: `Bearer ${config.accessToken}`, + 'X-Hive-Target-Ref': config.target, + }, + }), + config.batching, + ); + } + } + + onStart(span: Span, parentContext: Context): void { + this.processor.onStart(span, parentContext); + const { spanId, traceId } = span.spanContext(); + const parentId = span.parentSpanContext?.spanId; + + if (isHttpSpan(span)) { + this.traceStateById.set(traceId, { + traceId, + rootId: spanId, + httpSpan: span as SpanImpl, + operationRoots: new Map(), + subgraphExecutions: new Map(), + }); + return; + } + + const traceState = this.traceStateById.get(traceId); + if (!traceState || !parentId) { + // This is not an HTTP trace, ignore it + return; + } + + if (span.name.startsWith('graphql.operation')) { + traceState?.operationRoots.set(spanId, span as SpanImpl); + return; + } + + const operationRoot = traceState.operationRoots.get(parentId); + if (operationRoot) { + // Set the root for children + traceState.operationRoots.set(spanId, operationRoot); + } + + if (span.name.startsWith('subgraph.execute')) { + traceState.subgraphExecutions.set(spanId, span as SpanImpl); + return; + } + + const subgraphExecution = traceState.subgraphExecutions.get(parentId); + if (subgraphExecution) { + // Set the root for children + traceState.subgraphExecutions.set(spanId, subgraphExecution); + } + } + + onEnd(span: Span): void { + const { traceId, spanId } = span.spanContext(); + const traceState = this.traceStateById.get(traceId); + + if (!traceState) { + // Skip, this is not an HTTP trace + return; + } + + if (traceState.rootId === spanId) { + // Clean up trace state early to avoid any memory leak in case of error thrown + this.traceStateById.delete(traceId); + + for (let operationSpan of new Set(traceState.operationRoots.values())) { + // @ts-expect-error set the start time to the HTTP start time, so that operation span replaces http span + operationSpan.startTime = span.startTime; + operationSpan.endTime = span.endTime; + // @ts-expect-error set the duration time + operationSpan._duration = hrTimeDuration( + operationSpan.startTime, + operationSpan.endTime, + ); + // @ts-expect-error Remove the parenting, so that this span appears as a root span for Hive + operationSpan.parentSpanContext = null; + + // Copy HTTP attributes + for (const attr in span.attributes) { + operationSpan.attributes[attr] ??= span.attributes[attr]; + } + + // Now that operation spans have been updated, we can report it + this.processor.onEnd(operationSpan); + } + + // This is the HTTP, don't report it, we report only the graphql operation + return; + } + + const operationSpan = traceState.operationRoots.get(spanId); + if (!operationSpan) { + // If the operation span is not found, it is probably not related to any request (init, schema loading...). + return; + } + + if (operationSpan === span) { + // It is an operation span, we don't want to report it yet, + // it has to be updated at HTTP end time. + return; + } + + if (span.name === 'graphql.execute') { + copyAttribute(span, operationSpan, SEMATTRS_GRAPHQL_ERROR_CODES); + copyAttribute(span, operationSpan, SEMATTRS_GRAPHQL_ERROR_COUNT); + copyAttribute( + span, + operationSpan, + SEMATTRS_GATEWAY_OPERATION_SUBGRAPH_NAMES, + ); + } + + const subgraphExecution = traceState.subgraphExecutions.get(spanId); + if (span.name === 'http.fetch' && subgraphExecution) { + for (const attr in span.attributes) { + subgraphExecution.attributes[attr] ??= span.attributes[attr]; + } + } + + // Report all spans that belongs to an operation span + this.processor.onEnd(span); + } + + async forceFlush(): Promise { + return this.processor.forceFlush(); + } + + async shutdown(): Promise { + // Clean up resources when shutting down + await this.forceFlush(); + this.traceStateById.clear(); + return this.processor.shutdown(); + } +} + +function isHttpSpan(span: Span): boolean { + return !!span.attributes[SEMATTRS_HTTP_METHOD]; +} + +function copyAttribute( + source: Span, + target: Span, + sourceAttrName: string, + targetAttrName: string = sourceAttrName, +) { + target.attributes[targetAttrName] = source.attributes[sourceAttrName]; +} diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 9f1a7a5c0..55230d102 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -41,6 +41,7 @@ import { createSchemaLoadingSpan, createSubgraphExecuteSpan, createUpstreamHttpFetchSpan, + OperationHashingFn, recordCacheError, recordCacheEvent, registerException, @@ -113,6 +114,13 @@ export type OpenTelemetryGatewayPluginOptions = { * @default 'forceFlush' */ flushOnDispose?: string | false; + /** + * Function to be used to compute the hash of each operation (graphql.operation.hash attribute). + * Note: pass `null` to disable operation hashing + * + * @default `hashOperation` from @graphql-hive/core + */ + hashOperation?: OperationHashingFn | null; /** * Tracing configuration */ @@ -309,7 +317,7 @@ export function useOpenTelemetry( return withState< OpenTelemetryPlugin, OtelState, - OtelState & { skipExecuteSpan?: true }, + OtelState & { skipExecuteSpan?: true; subgraphNames: string[] }, OtelState >((getState) => ({ getTracer: () => tracer, @@ -739,7 +747,7 @@ export function useOpenTelemetry( } }, - onParams: function onParamsOTEL({ state, context: gqlCtx, params }) { + onParams({ state, context: gqlCtx, params }) { if ( !isParentEnabled(state) || !shouldTrace(traces.spans?.graphql, { context: gqlCtx }) @@ -751,11 +759,7 @@ export function useOpenTelemetry( setParamsAttributes({ ctx, params }); }, - onExecutionResult: function onExeResOTEL({ - result, - context: gqlCtx, - state, - }) { + onExecutionResult({ result, context: gqlCtx, state }) { if ( !isParentEnabled(state) || !shouldTrace(traces.spans?.graphql, { context: gqlCtx }) @@ -802,10 +806,11 @@ export function useOpenTelemetry( return; } - setExecutionAttributesOnOperationSpan( - state.forOperation.otel!.root, + setExecutionAttributesOnOperationSpan({ + ctx: state.forOperation.otel!.root, args, - ); + hashOperationFn: options.hashOperation, + }); if (state.forOperation.skipExecuteSpan) { return; @@ -814,13 +819,25 @@ export function useOpenTelemetry( const ctx = getContext(state); setGraphQLExecutionAttributes({ ctx, args }); + state.forOperation.subgraphNames = []; + return { onExecuteDone({ result }) { - setGraphQLExecutionResultAttributes({ ctx, result }); + setGraphQLExecutionResultAttributes({ + ctx, + result, + subgraphNames: state.forOperation.subgraphNames, + }); }, }; }, + onSubgraphExecute({ subgraphName, state }) { + // Keep track of the list of subgraphs that has been hit for this operation + // This list will be added as attribute on onExecuteDone hook + state.forOperation?.subgraphNames?.push(subgraphName); + }, + onFetch(payload) { const { url, setFetchFn, fetchFn, executionRequest } = payload; let { state } = payload; @@ -862,6 +879,7 @@ export function useOpenTelemetry( setUpstreamFetchResponseAttributes({ ctx, response }); }; }, + onSchemaChange(payload) { setSchemaAttributes(payload); diff --git a/packages/plugins/opentelemetry/src/setup.ts b/packages/plugins/opentelemetry/src/setup.ts index 1cdd8d133..afeeb3c84 100644 --- a/packages/plugins/opentelemetry/src/setup.ts +++ b/packages/plugins/opentelemetry/src/setup.ts @@ -31,11 +31,15 @@ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, } from '@opentelemetry/semantic-conventions'; +import { + HiveTracingSpanProcessor, + HiveTracingSpanProcessorOptions, +} from './hive-span-processor'; import { getEnvVar } from './utils'; export * from './attributes'; - export * from './log-writer'; +export * from './hive-span-processor'; // @inject-version globalThis.__OTEL_PLUGIN_VERSION__ here @@ -176,6 +180,53 @@ export function openTelemetrySetup(options: OpentelemetrySetupOptions) { } } +export type HiveTracingOptions = { target?: string } & ( + | { + accessToken?: string; + batching?: BufferConfig; + processor?: never; + } + | { + processor: SpanProcessor; + } +); + +export function hiveTracingSetup( + config: HiveTracingOptions & { contextManager: ContextManager | null }, +) { + config.target ??= getEnvVar('HIVE_TARGET', undefined); + + if (!config.target) { + throw new Error( + 'You must specify the Hive Registry `target`. Either provide `target` option or `HIVE_TARGET` environment variable.', + ); + } + + if (!config.processor) { + config.accessToken ??= + getEnvVar('HIVE_TRACING_ACCESS_TOKEN', undefined) ?? + getEnvVar('HIVE_ACCESS_TOKEN', undefined); + + if (!config.accessToken) { + throw new Error( + 'You must specify the Hive Registry `accessToken`. Either provide `accessToken` option or `HIVE_ACCESS_TOKEN`/`HIVE_TRACE_ACCESS_TOKEN` environment variable.', + ); + } + } + + openTelemetrySetup({ + contextManager: config.contextManager, + resource: resourceFromAttributes({ + 'hive.target_id': config.target, + }), + traces: { + processors: [ + new HiveTracingSpanProcessor(config as HiveTracingSpanProcessorOptions), + ], + }, + }); +} + export type BatchingConfig = boolean | BufferConfig; function resolveBatchingConfig( diff --git a/packages/plugins/opentelemetry/src/spans.ts b/packages/plugins/opentelemetry/src/spans.ts index 9a4ee6686..3f32fccb0 100644 --- a/packages/plugins/opentelemetry/src/spans.ts +++ b/packages/plugins/opentelemetry/src/spans.ts @@ -1,3 +1,4 @@ +import { hashOperation } from '@graphql-hive/core'; import { OnCacheGetHookEventPayload } from '@graphql-hive/gateway-runtime'; import { defaultPrintFn } from '@graphql-mesh/transport-common'; import { @@ -20,16 +21,25 @@ import { SEMATTRS_EXCEPTION_STACKTRACE, SEMATTRS_EXCEPTION_TYPE, } from '@opentelemetry/semantic-conventions'; -import { printSchema, type ExecutionArgs, type GraphQLSchema } from 'graphql'; +import { + DocumentNode, + GraphQLSchema, + printSchema, + TypeInfo, + type ExecutionArgs, +} from 'graphql'; import type { GraphQLParams } from 'graphql-yoga'; import { getRetryInfo, isRetryExecutionRequest, } from '../../../runtime/src/plugins/useUpstreamRetry'; import { + SEMATTRS_GATEWAY_OPERATION_SUBGRAPH_NAMES, SEMATTRS_GATEWAY_UPSTREAM_SUBGRAPH_NAME, SEMATTRS_GRAPHQL_DOCUMENT, + SEMATTRS_GRAPHQL_ERROR_CODES, SEMATTRS_GRAPHQL_ERROR_COUNT, + SEMATTRS_GRAPHQL_OPERATION_HASH, SEMATTRS_GRAPHQL_OPERATION_NAME, SEMATTRS_GRAPHQL_OPERATION_TYPE, SEMATTRS_HTTP_CLIENT_IP, @@ -71,6 +81,10 @@ export function createHttpSpan(input: { ?.split(',')[0], [SEMATTRS_HTTP_USER_AGENT]: request.headers.get('user-agent') || undefined, + 'hive.client.name': + request.headers.get('x-graphql-client-name') || undefined, + 'hive.client.version': + request.headers.get('x-graphql-client-version') || undefined, }, kind: SpanKind.SERVER, }, @@ -127,10 +141,35 @@ export function setParamsAttributes(input: { ); } -export function setExecutionAttributesOnOperationSpan( - ctx: Context, - args: ExecutionArgs, -) { +export type OperationHashingFn = (input: { + document: DocumentNode; + operationName?: string | null; + variableValues?: Record | null; + schema: GraphQLSchema; +}) => string | null; + +const typeInfos = new WeakMap(); +export const defaultOperationHashingFn: OperationHashingFn = (input) => { + if (!typeInfos.has(input.schema)) { + typeInfos.set(input.schema, new TypeInfo(input.schema)); + } + const typeInfo = typeInfos.get(input.schema); + + return hashOperation({ + documentNode: input.document, + operationName: input.operationName ?? null, + schema: input.schema, + variables: input.variableValues ?? null, + typeInfo, + }); +}; + +export function setExecutionAttributesOnOperationSpan(input: { + ctx: Context; + args: ExecutionArgs; + hashOperationFn?: OperationHashingFn | null; +}) { + const { hashOperationFn = defaultOperationHashingFn, args, ctx } = input; const span = trace.getSpan(ctx); if (span) { const operation = getOperationASTFromDocument( @@ -139,6 +178,12 @@ export function setExecutionAttributesOnOperationSpan( ); const operationName = operation.name?.value ?? 'Anonymous'; const document = defaultPrintFn(args.document); + + const hash = hashOperationFn?.({ ...args }); + if (hash) { + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_HASH, hash); + } + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_TYPE, operation.operation); span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_NAME, operationName); span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, document); @@ -271,16 +316,22 @@ export function setGraphQLExecutionAttributes(input: { args.document, args.operationName || undefined, ); - const operationName = operation.name?.value ?? 'Anonymous'; - const document = defaultPrintFn(input.args.document); + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_TYPE, operation.operation); - span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_NAME, operationName); - span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, document); + span.setAttribute( + SEMATTRS_GRAPHQL_OPERATION_NAME, + operation.name?.value ?? 'Anonymous', + ); + span.setAttribute( + SEMATTRS_GRAPHQL_DOCUMENT, + defaultPrintFn(input.args.document), + ); } export function setGraphQLExecutionResultAttributes(input: { ctx: Context; result: ExecutionResult | AsyncIterableIterator; + subgraphNames?: string[]; }) { const { ctx, result } = input; const span = trace.getSpan(ctx); @@ -288,6 +339,13 @@ export function setGraphQLExecutionResultAttributes(input: { return; } + if (input.subgraphNames) { + span.setAttribute( + SEMATTRS_GATEWAY_OPERATION_SUBGRAPH_NAMES, + input.subgraphNames, + ); + } + if ( !isAsyncIterable(result) && // FIXME: Handle async iterable too result.errors && @@ -299,9 +357,12 @@ export function setGraphQLExecutionResultAttributes(input: { message: result.errors.map((e) => e.message).join(', '), }); + const codes: string[] = []; for (const error of result.errors) { span.recordException(error); + codes.push(`${error.extensions['code']}`); // Ensure string using string interpolation } + span.setAttribute(SEMATTRS_GRAPHQL_ERROR_CODES, codes); } } @@ -311,18 +372,20 @@ export function createSubgraphExecuteSpan(input: { executionRequest: ExecutionRequest; subgraphName: string; }): Context { + const operation = getOperationASTFromDocument( + input.executionRequest.document, + input.executionRequest.operationName, + ); + const span = input.tracer.startSpan( `subgraph.execute (${input.subgraphName})`, { attributes: { - [SEMATTRS_GRAPHQL_OPERATION_NAME]: input.executionRequest.operationName, + [SEMATTRS_GRAPHQL_OPERATION_NAME]: operation.name?.value ?? 'Anonymous', [SEMATTRS_GRAPHQL_DOCUMENT]: defaultPrintFn( input.executionRequest.document, ), - [SEMATTRS_GRAPHQL_OPERATION_TYPE]: getOperationASTFromDocument( - input.executionRequest.document, - input.executionRequest.operationName, - )?.operation, + [SEMATTRS_GRAPHQL_OPERATION_TYPE]: operation.operation, [SEMATTRS_GATEWAY_UPSTREAM_SUBGRAPH_NAME]: input.subgraphName, }, kind: SpanKind.CLIENT, diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index 61891f469..3ad934d0e 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -1,8 +1,25 @@ import { Logger } from '@graphql-hive/logger'; import { loggerForRequest } from '@graphql-hive/logger/request'; import { + hiveTracingSetup, + HiveTracingSpanProcessor, OpenTelemetryLogWriter, openTelemetrySetup, + SEMATTRS_GATEWAY_OPERATION_SUBGRAPH_NAMES, + SEMATTRS_GATEWAY_UPSTREAM_SUBGRAPH_NAME, + SEMATTRS_GRAPHQL_DOCUMENT, + SEMATTRS_GRAPHQL_ERROR_CODES, + SEMATTRS_GRAPHQL_ERROR_COUNT, + SEMATTRS_GRAPHQL_OPERATION_HASH, + SEMATTRS_GRAPHQL_OPERATION_NAME, + SEMATTRS_GRAPHQL_OPERATION_TYPE, + SEMATTRS_HTTP_HOST, + SEMATTRS_HTTP_METHOD, + SEMATTRS_HTTP_ROUTE, + SEMATTRS_HTTP_SCHEME, + SEMATTRS_HTTP_STATUS_CODE, + SEMATTRS_HTTP_URL, + SEMATTRS_NET_HOST_NAME, } from '@graphql-mesh/plugin-opentelemetry/setup'; import { ROOT_CONTEXT, @@ -17,7 +34,7 @@ import { W3CBaggagePropagator, W3CTraceContextPropagator, } from '@opentelemetry/core'; -import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; import { resourceFromAttributes } from '@opentelemetry/resources'; import { LoggerProvider, @@ -356,6 +373,29 @@ describe('useOpenTelemetry', () => { }, }); }); + + it('should setup Hive Tracing', () => { + hiveTracingSetup({ + contextManager: new AsyncLocalStorageContextManager(), + target: 'target', + accessToken: 'access-token', + }); + + const processors = getSpanProcessors(); + expect(processors).toHaveLength(1); + expect(processors![0]).toBeInstanceOf(HiveTracingSpanProcessor); + const processor = processors![0] as HiveTracingSpanProcessor; + // @ts-expect-error Access of private field + const subProcessor = processor.processor as BatchSpanProcessor; + expect(subProcessor).toBeInstanceOf(BatchSpanProcessor); + // @ts-expect-error Access of private field + const exporter = subProcessor._exporter as OTLPTraceExporter; + expect(exporter).toBeInstanceOf(OTLPTraceExporter); + // @ts-expect-error Access of private field + expect(exporter._delegate._transport._transport._parameters.url).toBe( + 'https://app.graphql-hive.com/opentelemetry/v1/traces', + ); + }); }); describe('tracing', () => { @@ -1091,4 +1131,102 @@ describe('useOpenTelemetry', () => { }); }); }); + + describe('hive tracing', () => { + beforeEach(() => { + // Register testing OTEL api with a custom Span processor and an Async Context Manager + disableAll(); + hiveTracingSetup({ + target: 'test-target', + contextManager: new AsyncLocalStorageContextManager(), + processor: new SimpleSpanProcessor(spanExporter), + }); + }); + + it('should not report http spans', async () => { + await using gateway = await buildTestGateway(); + await gateway.query(); + + spanExporter.assertNoSpanWithName('POST /graphql'); + }); + + it('should have all attributes required by Hive Tracing', async () => { + await using gateway = await buildTestGateway({ + fetch: (upstreamFetch) => { + let calls = 0; + return (...args) => { + calls++; + if (calls > 1) + return Promise.resolve(new Response(null, { status: 500 })); + else return upstreamFetch(...args); + }; + }, + }); + await gateway.query({ + shouldReturnErrors: true, + body: { query: 'query testOperation { hello }' }, + headers: { + 'x-graphql-client-name': 'test-client-name', + 'x-graphql-client-version': 'test-client-version', + }, + }); + + const operationSpan = spanExporter.assertRoot( + 'graphql.operation testOperation', + ); + + expect(operationSpan.span.resource.attributes).toMatchObject({ + 'hive.target_id': 'test-target', + }); + + // Root span + expect(operationSpan.span.attributes).toMatchObject({ + // HTTP Attributes + [SEMATTRS_HTTP_METHOD]: 'POST', + [SEMATTRS_HTTP_URL]: 'http://localhost:4000/graphql', + [SEMATTRS_HTTP_ROUTE]: '/graphql', + [SEMATTRS_HTTP_SCHEME]: 'http:', + [SEMATTRS_NET_HOST_NAME]: 'localhost', + [SEMATTRS_HTTP_HOST]: 'localhost:4000', + [SEMATTRS_HTTP_STATUS_CODE]: 500, + + // Hive specific + ['hive.client.name']: 'test-client-name', + ['hive.client.version']: 'test-client-version', + + // Operation Attributes + [SEMATTRS_GRAPHQL_DOCUMENT]: 'query testOperation{hello}', + [SEMATTRS_GRAPHQL_OPERATION_NAME]: 'testOperation', + [SEMATTRS_GRAPHQL_OPERATION_TYPE]: 'query', + [SEMATTRS_GRAPHQL_OPERATION_HASH]: 'd40f732de805d03db6284b9b8c6c6f0b', + [SEMATTRS_GRAPHQL_ERROR_COUNT]: 1, + [SEMATTRS_GRAPHQL_ERROR_CODES]: ['DOWNSTREAM_SERVICE_ERROR'], + + // Execution Attributes + [SEMATTRS_GATEWAY_OPERATION_SUBGRAPH_NAMES]: ['upstream'], + }); + + // Subgraph Execution Span + expect( + spanExporter.assertRoot('subgraph.execute (upstream)').span.attributes, + ).toMatchObject({ + // HTTP Attributes + [SEMATTRS_HTTP_METHOD]: 'POST', + [SEMATTRS_HTTP_URL]: 'https://example.com/graphql', + [SEMATTRS_HTTP_ROUTE]: '/graphql', + [SEMATTRS_HTTP_SCHEME]: 'https:', + [SEMATTRS_NET_HOST_NAME]: 'example.com', + [SEMATTRS_HTTP_HOST]: 'example.com', + [SEMATTRS_HTTP_STATUS_CODE]: 500, + + // Operation Attributes + [SEMATTRS_GRAPHQL_DOCUMENT]: 'query testOperation{hello}', + [SEMATTRS_GRAPHQL_OPERATION_TYPE]: 'query', + [SEMATTRS_GRAPHQL_OPERATION_NAME]: 'testOperation', + + // Federation attributes + [SEMATTRS_GATEWAY_UPSTREAM_SUBGRAPH_NAME]: 'upstream', + }); + }); + }); }); diff --git a/packages/plugins/opentelemetry/tests/utils.ts b/packages/plugins/opentelemetry/tests/utils.ts index 72a168f95..b6ac0b85b 100644 --- a/packages/plugins/opentelemetry/tests/utils.ts +++ b/packages/plugins/opentelemetry/tests/utils.ts @@ -104,14 +104,17 @@ export async function buildTestGateway( } `, }, + headers, }: { body?: GraphQLParams; shouldReturnErrors?: boolean; + headers?: Record; } = {}) => { const response = await gateway.fetch('http://localhost:4000/graphql', { method: 'POST', headers: { 'content-type': 'application/json', + ...headers, }, body: JSON.stringify(body), }); diff --git a/yarn.lock b/yarn.lock index 82a94a574..926f43c41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4106,6 +4106,22 @@ __metadata: languageName: node linkType: hard +"@graphql-hive/core@npm:0.13.0-alpha-20250707104821-802de2e836e8fc0fb59533a3c4c63cf53e9fc33c": + version: 0.13.0-alpha-20250707104821-802de2e836e8fc0fb59533a3c4c63cf53e9fc33c + resolution: "@graphql-hive/core@npm:0.13.0-alpha-20250707104821-802de2e836e8fc0fb59533a3c4c63cf53e9fc33c" + dependencies: + "@graphql-tools/utils": "npm:^10.0.0" + "@whatwg-node/fetch": "npm:^0.10.6" + async-retry: "npm:^1.3.3" + js-md5: "npm:0.8.3" + lodash.sortby: "npm:^4.7.0" + tiny-lru: "npm:^8.0.2" + peerDependencies: + graphql: ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 10c0/c5c5a1b3d5d5c63274e81503d148cdba6549eb6cbef21ccd00cf801c71611b9e74193e6aa553e17a08d28ffeefc3299f416431d99799f3d51dc35a0e559aefe7 + languageName: node + linkType: hard + "@graphql-hive/gateway-runtime@workspace:*, @graphql-hive/gateway-runtime@workspace:^, @graphql-hive/gateway-runtime@workspace:packages/runtime": version: 0.0.0-use.local resolution: "@graphql-hive/gateway-runtime@workspace:packages/runtime" @@ -4209,6 +4225,7 @@ __metadata: "@graphql-yoga/render-graphiql": "npm:^5.15.1" "@opentelemetry/api": "npm:^1.9.0" "@opentelemetry/api-logs": "npm:^0.202.0" + "@opentelemetry/context-async-hooks": "npm:^2.0.1" "@opentelemetry/context-zone": "npm:^2.0.1" "@opentelemetry/core": "npm:^2.0.1" "@opentelemetry/exporter-jaeger": "npm:^2.0.1" @@ -4218,6 +4235,7 @@ __metadata: "@opentelemetry/sampler-jaeger-remote": "npm:^0.202.0" "@opentelemetry/sdk-logs": "npm:^0.202.0" "@opentelemetry/sdk-metrics": "npm:^2.0.1" + "@opentelemetry/sdk-trace-base": "npm:^2.0.1" "@rollup/plugin-commonjs": "npm:^28.0.0" "@rollup/plugin-json": "npm:^6.1.0" "@rollup/plugin-node-resolve": "patch:@rollup/plugin-node-resolve@npm%3A16.0.1#~/.yarn/patches/@rollup-plugin-node-resolve-npm-16.0.1-2936474bab.patch" @@ -4672,6 +4690,7 @@ __metadata: version: 0.0.0-use.local resolution: "@graphql-mesh/plugin-opentelemetry@workspace:packages/plugins/opentelemetry" dependencies: + "@graphql-hive/core": "npm:0.13.0-alpha-20250707104821-802de2e836e8fc0fb59533a3c4c63cf53e9fc33c" "@graphql-hive/gateway-runtime": "workspace:^" "@graphql-hive/logger": "workspace:^" "@graphql-mesh/cross-helpers": "npm:^0.4.10" From 7cca9a736dedd76b74903e60a54f792bd789232f Mon Sep 17 00:00:00 2001 From: theguild-bot Date: Tue, 15 Jul 2025 14:31:04 +0000 Subject: [PATCH 55/60] docs(examples): converted from e2es --- examples/hmac-auth-https/example.tar.gz | Bin 80838 -> 80890 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/hmac-auth-https/example.tar.gz b/examples/hmac-auth-https/example.tar.gz index eab9c2a8bb3518a56ae328bba9de3040d6956d6d..3af65e6eb1ab84b1dd1a07b60daa6cbc4a324e67 100644 GIT binary patch delta 80549 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 delta 80546 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 z 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 c3 Date: Tue, 15 Jul 2025 17:15:06 +0200 Subject: [PATCH 56/60] use hivetarget and cli args take precedence --- packages/gateway/src/commands/handleReportingConfig.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/gateway/src/commands/handleReportingConfig.ts b/packages/gateway/src/commands/handleReportingConfig.ts index b39a20405..3fac1aad0 100644 --- a/packages/gateway/src/commands/handleReportingConfig.ts +++ b/packages/gateway/src/commands/handleReportingConfig.ts @@ -40,7 +40,8 @@ export function handleReportingConfig( ...confOpts, ...cliOpts, hiveTarget: - cliOpts.hiveTarget ?? cliOpts.hiveUsageTarget ?? confOpts.hiveTarget, + // cli arguments always take precedence over config + confOpts.hiveTarget ?? cliOpts.hiveTarget ?? cliOpts.hiveUsageTarget, }; if (cliOpts.hiveRegistryToken && cliOpts.hiveUsageAccessToken) { @@ -80,7 +81,7 @@ export function handleReportingConfig( (opts.hiveAccessToken || opts.hiveUsageAccessToken || opts.hiveTraceAccessToken) && - !opts.hiveUsageTarget + !opts.hiveTarget ) { ctx.log.error( 'Hive access token needs a target. Please provide it through the "--hive-target " option or the config.', From 7e0dded488ad46337a19ce0510fdae8cfdf9d1bd Mon Sep 17 00:00:00 2001 From: Laurin Quast Date: Wed, 16 Jul 2025 13:44:27 +0200 Subject: [PATCH 57/60] configure endpoint (#1334) --- packages/gateway/src/cli.ts | 6 ++++++ packages/gateway/src/commands/handleOpenTelemetryConfig.ts | 5 +++++ packages/gateway/src/commands/proxy.ts | 2 ++ packages/gateway/src/commands/subgraph.ts | 2 ++ packages/gateway/src/commands/supergraph.ts | 2 ++ packages/plugins/opentelemetry/src/hive-span-processor.ts | 3 ++- .../plugins/opentelemetry/tests/useOpenTelemetry.spec.ts | 2 +- 7 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/gateway/src/cli.ts b/packages/gateway/src/cli.ts index 54ea10c10..733e3ed0c 100644 --- a/packages/gateway/src/cli.ts +++ b/packages/gateway/src/cli.ts @@ -394,6 +394,12 @@ let cli = new Command() `Hive registry access token for tracing. Enables Hive tracing. Requires the "--hive-target " option. It can't be used together with "--hive-access-token"`, ).env('HIVE_TRACE_ACCESS_TOKEN'), ) + .addOption( + new Option( + '--hive-trace-endpoint ', + `Hive registry trascing endpoint.`, + ).env('HIVE_TRACE_ENDPOINT'), + ) .option( '--hive-persisted-documents-endpoint ', '[EXPERIMENTAL] Hive CDN endpoint for fetching the persisted documents. Requires the "--hive-persisted-documents-token " option', diff --git a/packages/gateway/src/commands/handleOpenTelemetryConfig.ts b/packages/gateway/src/commands/handleOpenTelemetryConfig.ts index ae329c629..bf6652a18 100644 --- a/packages/gateway/src/commands/handleOpenTelemetryConfig.ts +++ b/packages/gateway/src/commands/handleOpenTelemetryConfig.ts @@ -7,11 +7,14 @@ export async function handleOpenTelemetryConfig( hiveAccessToken: string | undefined; // TODO: Use it to enable tracing by default once stable hiveTarget: string | undefined; hiveTraceAccessToken: string | undefined; + hiveTraceEndpoint: string | undefined; openTelemetryExporterType: 'otlp-http' | 'otlp-grpc' | undefined; openTelemetry: boolean | string | undefined; }, ) { const accessToken = cliOpts.hiveTraceAccessToken; // TODO: also use value of hiveAccessToken + const endpoint = + cliOpts.hiveTraceEndpoint ?? `https://api.graphql-hive.com/otel/v1/traces`; const target = cliOpts.hiveTarget; const openTelemetry = cliOpts.openTelemetry; const exporterType = cliOpts.openTelemetryExporterType ?? 'otlp-http'; @@ -40,10 +43,12 @@ export async function handleOpenTelemetryConfig( process.exit(1); } + ctx.log.debug('Hive tracing is enabled for endpont %s', endpoint); processors.push( new HiveTracingSpanProcessor({ accessToken, target, + endpoint, }), ); } diff --git a/packages/gateway/src/commands/proxy.ts b/packages/gateway/src/commands/proxy.ts index 0b5621d6b..2c0004e9d 100644 --- a/packages/gateway/src/commands/proxy.ts +++ b/packages/gateway/src/commands/proxy.ts @@ -45,6 +45,7 @@ export const addCommand: AddCommand = (ctx, cli) => hiveAccessToken, hiveUsageAccessToken, hiveTraceAccessToken, + hiveTraceEndpoint, maskedErrors, hivePersistedDocumentsEndpoint, hivePersistedDocumentsToken, @@ -59,6 +60,7 @@ export const addCommand: AddCommand = (ctx, cli) => hiveAccessToken, hiveTarget, hiveTraceAccessToken, + hiveTraceEndpoint, }); const loadedConfig = await loadConfig({ diff --git a/packages/gateway/src/commands/subgraph.ts b/packages/gateway/src/commands/subgraph.ts index fa14ffeff..6559a5682 100644 --- a/packages/gateway/src/commands/subgraph.ts +++ b/packages/gateway/src/commands/subgraph.ts @@ -47,6 +47,7 @@ export const addCommand: AddCommand = (ctx, cli) => hiveAccessToken, hiveUsageAccessToken, hiveTraceAccessToken, + hiveTraceEndpoint, hivePersistedDocumentsEndpoint, hivePersistedDocumentsToken, ...opts @@ -62,6 +63,7 @@ export const addCommand: AddCommand = (ctx, cli) => hiveTarget, hiveAccessToken, hiveTraceAccessToken, + hiveTraceEndpoint, }); const loadedConfig = await loadConfig({ diff --git a/packages/gateway/src/commands/supergraph.ts b/packages/gateway/src/commands/supergraph.ts index ebedd8715..9f18a3951 100644 --- a/packages/gateway/src/commands/supergraph.ts +++ b/packages/gateway/src/commands/supergraph.ts @@ -60,6 +60,7 @@ export const addCommand: AddCommand = (ctx, cli) => hiveAccessToken, hiveUsageAccessToken, hiveTraceAccessToken, + hiveTraceEndpoint, maskedErrors, apolloGraphRef, apolloKey, @@ -81,6 +82,7 @@ export const addCommand: AddCommand = (ctx, cli) => hiveAccessToken, hiveTarget, hiveTraceAccessToken, + hiveTraceEndpoint, }); const loadedConfig = await loadConfig({ diff --git a/packages/plugins/opentelemetry/src/hive-span-processor.ts b/packages/plugins/opentelemetry/src/hive-span-processor.ts index 032e9f286..be19b8c20 100644 --- a/packages/plugins/opentelemetry/src/hive-span-processor.ts +++ b/packages/plugins/opentelemetry/src/hive-span-processor.ts @@ -19,6 +19,7 @@ export type HiveTracingSpanProcessorOptions = | { target: string; accessToken: string; + endpoint: string; batching?: BufferConfig; processor?: never; } @@ -44,7 +45,7 @@ export class HiveTracingSpanProcessor implements SpanProcessor { } else { this.processor = new BatchSpanProcessor( new OTLPTraceExporter({ - url: `https://app.graphql-hive.com/opentelemetry/v1/traces`, + url: config.endpoint, headers: { Authorization: `Bearer ${config.accessToken}`, 'X-Hive-Target-Ref': config.target, diff --git a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts index 3ad934d0e..f9bce85ed 100644 --- a/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts +++ b/packages/plugins/opentelemetry/tests/useOpenTelemetry.spec.ts @@ -393,7 +393,7 @@ describe('useOpenTelemetry', () => { expect(exporter).toBeInstanceOf(OTLPTraceExporter); // @ts-expect-error Access of private field expect(exporter._delegate._transport._transport._parameters.url).toBe( - 'https://app.graphql-hive.com/opentelemetry/v1/traces', + 'http://localhost:4318/v1/traces', ); }); }); From d94711dad9603bf7cee45770805e1d9026d17e52 Mon Sep 17 00:00:00 2001 From: Valentin Cocaud Date: Wed, 16 Jul 2025 14:49:50 +0200 Subject: [PATCH 58/60] fix opentelemetry not enabled when hive tracing enabled --- package.json | 3 +- packages/gateway/src/cli.ts | 6 +- .../src/commands/handleOpenTelemetryConfig.ts | 136 +++++++++++++----- packages/gateway/src/commands/proxy.ts | 4 +- packages/gateway/src/commands/subgraph.ts | 4 +- packages/gateway/src/commands/supergraph.ts | 4 +- packages/plugins/opentelemetry/src/plugin.ts | 2 +- packages/plugins/opentelemetry/src/setup.ts | 1 + 8 files changed, 111 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 189558287..13628faa9 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ ], "packageManager": "yarn@4.9.2", "scripts": { + "start": "yarn workspace @graphql-hive/gateway start", "bench": "vitest bench --project bench", "build": "yarn workspaces foreach -A -p run build", "bundle": "yarn workspaces foreach -A -p run bundle", @@ -80,4 +81,4 @@ "tsx": "patch:tsx@npm%3A4.20.3#~/.yarn/patches/tsx-npm-4.20.3-7de67a623f.patch", "vite": "6.3.5" } -} +} \ No newline at end of file diff --git a/packages/gateway/src/cli.ts b/packages/gateway/src/cli.ts index 733e3ed0c..a65992305 100644 --- a/packages/gateway/src/cli.ts +++ b/packages/gateway/src/cli.ts @@ -397,8 +397,10 @@ let cli = new Command() .addOption( new Option( '--hive-trace-endpoint ', - `Hive registry trascing endpoint.`, - ).env('HIVE_TRACE_ENDPOINT'), + `Hive registry tracing endpoint.`, + ) + .env('HIVE_TRACE_ENDPOINT') + .default(`https://api.graphql-hive.com/otel/v1/traces`), ) .option( '--hive-persisted-documents-endpoint ', diff --git a/packages/gateway/src/commands/handleOpenTelemetryConfig.ts b/packages/gateway/src/commands/handleOpenTelemetryConfig.ts index bf6652a18..40a04d8ed 100644 --- a/packages/gateway/src/commands/handleOpenTelemetryConfig.ts +++ b/packages/gateway/src/commands/handleOpenTelemetryConfig.ts @@ -1,4 +1,8 @@ -import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'; +import { fakePromise } from '@graphql-tools/utils'; +import { + BatchSpanProcessor, + SpanProcessor, +} from '@opentelemetry/sdk-trace-base'; import type { CLIContext } from '..'; export async function handleOpenTelemetryConfig( @@ -7,57 +11,111 @@ export async function handleOpenTelemetryConfig( hiveAccessToken: string | undefined; // TODO: Use it to enable tracing by default once stable hiveTarget: string | undefined; hiveTraceAccessToken: string | undefined; - hiveTraceEndpoint: string | undefined; + hiveTraceEndpoint: string; openTelemetryExporterType: 'otlp-http' | 'otlp-grpc' | undefined; openTelemetry: boolean | string | undefined; }, -) { +): Promise { const accessToken = cliOpts.hiveTraceAccessToken; // TODO: also use value of hiveAccessToken - const endpoint = - cliOpts.hiveTraceEndpoint ?? `https://api.graphql-hive.com/otel/v1/traces`; + const traceEndpoint = cliOpts.hiveTraceEndpoint; const target = cliOpts.hiveTarget; const openTelemetry = cliOpts.openTelemetry; const exporterType = cliOpts.openTelemetryExporterType ?? 'otlp-http'; - if (typeof openTelemetry === 'string' || accessToken) { - const { openTelemetrySetup, HiveTracingSpanProcessor } = await import( - '@graphql-mesh/plugin-opentelemetry/setup' + const log = ctx.log.child('[OpenTelemetry] '); + + if (openTelemetry || accessToken) { + log.debug( + { openTelemetry, exporterType, target, traceEndpoint }, + 'Initializing OpenTelemetry SDK', ); - const processors = []; - - if (openTelemetry) { - const { OTLPTraceExporter } = await import( - `@opentelemetry/exporter-trace-${exporterType}` - ); - - processors.push( - new BatchSpanProcessor(new OTLPTraceExporter({ url: openTelemetry })), - ); - } - - if (accessToken) { - if (!target) { - ctx.log.error( - 'Hive tracing needs a target. Please provide it through "--hive-target "', + + return fakePromise().then(async () => { + const { openTelemetrySetup, HiveTracingSpanProcessor, getEnvVar } = + await import('@graphql-mesh/plugin-opentelemetry/setup'); + const processors: SpanProcessor[] = []; + + const logAttributes = { + traceEndpoints: [] as { + url: string | null; + type?: string; + target?: string; + }[], + contextManager: false, + }; + + let integrationName: string; + + if (openTelemetry) { + const otelEndpoint = + typeof openTelemetry === 'string' + ? openTelemetry + : getEnvVar('OTEL_EXPORTER_OTLP_ENDPOINT', undefined); + + log.debug({ exporterType, otelEndpoint }, 'Setting up OTLP Exporter'); + + integrationName = 'OpenTelemetry'; + logAttributes.traceEndpoints.push({ + url: otelEndpoint ?? null, + type: exporterType, + }); + + log.debug({ type: exporterType }, 'Loading OpenTelemetry exporter'); + + const { OTLPTraceExporter } = await import( + `@opentelemetry/exporter-trace-${exporterType}` + ); + + processors.push( + new BatchSpanProcessor(new OTLPTraceExporter({ url: otelEndpoint })), ); - process.exit(1); } - ctx.log.debug('Hive tracing is enabled for endpont %s', endpoint); - processors.push( - new HiveTracingSpanProcessor({ - accessToken, + if (accessToken) { + log.debug({ target, traceEndpoint }, 'Setting up Hive Tracing'); + + integrationName ??= 'Hive Tracing'; + if (!target) { + ctx.log.error( + 'Hive tracing needs a target. Please provide it through "--hive-target "', + ); + process.exit(1); + } + + logAttributes.traceEndpoints.push({ + url: traceEndpoint, + type: 'hive tracing', target, - endpoint, - }), - ); - } - - openTelemetrySetup({ - traces: { processors }, - contextManager: await import('@opentelemetry/context-async-hooks') - .then((module) => new module.AsyncLocalStorageContextManager()) - .catch(() => null), + }); + + processors.push( + new HiveTracingSpanProcessor({ + accessToken, + target, + endpoint: traceEndpoint, + }), + ); + } + + log.debug('Trying to load AsyncLocalStorage based Context Manager'); + + const contextManager = await import('@opentelemetry/context-async-hooks') + .then((module) => { + logAttributes.contextManager = true; + return new module.AsyncLocalStorageContextManager(); + }) + .catch(() => null); + + openTelemetrySetup({ + traces: { processors }, + contextManager, + }); + + log.info(logAttributes, `${integrationName!} integration is enabled`); + + return true; }); } + + return false; } diff --git a/packages/gateway/src/commands/proxy.ts b/packages/gateway/src/commands/proxy.ts index 2c0004e9d..9f56530d7 100644 --- a/packages/gateway/src/commands/proxy.ts +++ b/packages/gateway/src/commands/proxy.ts @@ -54,7 +54,7 @@ export const addCommand: AddCommand = (ctx, cli) => ctx.log.info(`Starting ${ctx.productName} ${ctx.version} in proxy mode`); - await handleOpenTelemetryConfig(ctx, { + const openTelemetryEnabledByCLI = await handleOpenTelemetryConfig(ctx, { openTelemetry: opentelemetry, openTelemetryExporterType: opentelemetryExporterType, hiveAccessToken, @@ -147,7 +147,7 @@ export const addCommand: AddCommand = (ctx, cli) => { ...loadedConfig, ...opts, - openTelemetry: opentelemetry + openTelemetry: openTelemetryEnabledByCLI ? { ...loadedConfig.openTelemetry, traces: true } : loadedConfig.openTelemetry, }, diff --git a/packages/gateway/src/commands/subgraph.ts b/packages/gateway/src/commands/subgraph.ts index 6559a5682..87a8028f9 100644 --- a/packages/gateway/src/commands/subgraph.ts +++ b/packages/gateway/src/commands/subgraph.ts @@ -57,7 +57,7 @@ export const addCommand: AddCommand = (ctx, cli) => // Handle hive OTEL tracing before loading config so that the tracer provider is registered // if users needs it in a custom plugin. - await handleOpenTelemetryConfig(ctx, { + const openTelemetryEnabledByCLI = await handleOpenTelemetryConfig(ctx, { openTelemetry: opentelemetry, openTelemetryExporterType: opentelemetryExporterType, hiveTarget, @@ -110,7 +110,7 @@ export const addCommand: AddCommand = (ctx, cli) => { ...loadedConfig, ...opts, - openTelemetry: opentelemetry + openTelemetry: openTelemetryEnabledByCLI ? { ...loadedConfig.openTelemetry, traces: true } : loadedConfig.openTelemetry, }, diff --git a/packages/gateway/src/commands/supergraph.ts b/packages/gateway/src/commands/supergraph.ts index 9f18a3951..288a6d5ba 100644 --- a/packages/gateway/src/commands/supergraph.ts +++ b/packages/gateway/src/commands/supergraph.ts @@ -76,7 +76,7 @@ export const addCommand: AddCommand = (ctx, cli) => `Starting ${ctx.productName} ${ctx.version} with supergraph`, ); - await handleOpenTelemetryConfig(ctx, { + const openTelemetryEnabledByCLI = await handleOpenTelemetryConfig(ctx, { openTelemetry: opentelemetry, openTelemetryExporterType: opentelemetryExporterType, hiveAccessToken, @@ -204,7 +204,7 @@ export const addCommand: AddCommand = (ctx, cli) => { ...loadedConfig, ...opts, - openTelemetry: opentelemetry + openTelemetry: openTelemetryEnabledByCLI ? { ...loadedConfig.openTelemetry, traces: true } : loadedConfig.openTelemetry, }, diff --git a/packages/plugins/opentelemetry/src/plugin.ts b/packages/plugins/opentelemetry/src/plugin.ts index 55230d102..2bf14df45 100644 --- a/packages/plugins/opentelemetry/src/plugin.ts +++ b/packages/plugins/opentelemetry/src/plugin.ts @@ -662,7 +662,7 @@ export function useOpenTelemetry( ], }); - pluginLogger = log.child('[useOpenTelemetry]'); + pluginLogger = log.child('[OpenTelemetry] '); if (options.configureDiagLogger !== false) { const logLevel = diagLogLevelFromEnv(); // We enable the diag only if it is explicitly enabled, as NodeSDK does diff --git a/packages/plugins/opentelemetry/src/setup.ts b/packages/plugins/opentelemetry/src/setup.ts index afeeb3c84..49892a791 100644 --- a/packages/plugins/opentelemetry/src/setup.ts +++ b/packages/plugins/opentelemetry/src/setup.ts @@ -40,6 +40,7 @@ import { getEnvVar } from './utils'; export * from './attributes'; export * from './log-writer'; export * from './hive-span-processor'; +export { getEnvVar }; // @inject-version globalThis.__OTEL_PLUGIN_VERSION__ here From b7400f5754fd16cc8fd6e634e8b82162d46cfa94 Mon Sep 17 00:00:00 2001 From: Laurin Quast Date: Wed, 16 Jul 2025 15:59:26 +0200 Subject: [PATCH 59/60] rename attributes --- .../plugins/opentelemetry/src/attributes.ts | 14 +++++++------ packages/plugins/opentelemetry/src/setup.ts | 2 +- packages/plugins/opentelemetry/src/spans.ts | 20 +++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/plugins/opentelemetry/src/attributes.ts b/packages/plugins/opentelemetry/src/attributes.ts index 71f77e0a0..65b63ecf5 100644 --- a/packages/plugins/opentelemetry/src/attributes.ts +++ b/packages/plugins/opentelemetry/src/attributes.ts @@ -21,12 +21,14 @@ export { export const SEMATTRS_GRAPHQL_DOCUMENT = 'graphql.document'; export const SEMATTRS_GRAPHQL_OPERATION_TYPE = 'graphql.operation.type'; export const SEMATTRS_GRAPHQL_OPERATION_NAME = 'graphql.operation.name'; -export const SEMATTRS_GRAPHQL_OPERATION_HASH = 'graphql.operation.hash'; -export const SEMATTRS_GRAPHQL_ERROR_COUNT = 'graphql.error.count'; -export const SEMATTRS_GRAPHQL_ERROR_CODES = 'graphql.error.codes'; -// Gateway-specific attributes +// GraphQL-specific-non-standard attributes +export const SEMATTRS_GRAPHQL_OPERATION_HASH = 'hive.graphql.operation.hash'; +export const SEMATTRS_GRAPHQL_ERROR_COUNT = 'hive.graphql.error.count'; +export const SEMATTRS_GRAPHQL_ERROR_CODES = 'hive.graphql.error.codes'; + +// Hive Gateway-specific attributes export const SEMATTRS_GATEWAY_UPSTREAM_SUBGRAPH_NAME = - 'gateway.upstream.subgraph.name'; + 'hive.gateway.upstream.subgraph.name'; export const SEMATTRS_GATEWAY_OPERATION_SUBGRAPH_NAMES = - 'gateway.operation.subgraph.names'; + 'hive.gateway.operation.subgraph.names'; diff --git a/packages/plugins/opentelemetry/src/setup.ts b/packages/plugins/opentelemetry/src/setup.ts index 49892a791..bc4e7bd8c 100644 --- a/packages/plugins/opentelemetry/src/setup.ts +++ b/packages/plugins/opentelemetry/src/setup.ts @@ -95,7 +95,7 @@ type OpentelemetrySetupOptions = TracingOptions & }; export function openTelemetrySetup(options: OpentelemetrySetupOptions) { - if (getEnvVar('OTEL_SDK_DISABLED', false) === 'true') { + if (getEnvVar('OTEL_SDK_DISABLED', 'false') === 'true') { return; } diff --git a/packages/plugins/opentelemetry/src/spans.ts b/packages/plugins/opentelemetry/src/spans.ts index 3f32fccb0..d01f5cce0 100644 --- a/packages/plugins/opentelemetry/src/spans.ts +++ b/packages/plugins/opentelemetry/src/spans.ts @@ -137,7 +137,7 @@ export function setParamsAttributes(input: { span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, params.query ?? ''); span.setAttribute( SEMATTRS_GRAPHQL_OPERATION_NAME, - params.operationName ?? 'Anonymous', + params.operationName ?? '', ); } @@ -159,7 +159,8 @@ export const defaultOperationHashingFn: OperationHashingFn = (input) => { documentNode: input.document, operationName: input.operationName ?? null, schema: input.schema, - variables: input.variableValues ?? null, + // NOTE: we should make this configurable at some point. + variables: null, typeInfo, }); }; @@ -176,7 +177,7 @@ export function setExecutionAttributesOnOperationSpan(input: { args.document, args.operationName || undefined, ); - const operationName = operation.name?.value ?? 'Anonymous'; + const operationName = operation.name?.value; const document = defaultPrintFn(args.document); const hash = hashOperationFn?.({ ...args }); @@ -185,9 +186,9 @@ export function setExecutionAttributesOnOperationSpan(input: { } span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_TYPE, operation.operation); - span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_NAME, operationName); + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_NAME, operationName ?? ''); span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, document); - span.updateName(`graphql.operation ${operationName}`); + span.updateName(`graphql.operation ${operationName ?? ''}`); } } @@ -231,10 +232,7 @@ export function setGraphQLParseAttributes(input: { } span.setAttribute(SEMATTRS_GRAPHQL_DOCUMENT, input.query ?? ''); - span.setAttribute( - SEMATTRS_GRAPHQL_OPERATION_NAME, - input.operationName ?? 'Anonymous', - ); + span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_NAME, input.operationName ?? ''); if (input.result instanceof Error) { span.setAttribute(SEMATTRS_GRAPHQL_ERROR_COUNT, 1); @@ -320,7 +318,7 @@ export function setGraphQLExecutionAttributes(input: { span.setAttribute(SEMATTRS_GRAPHQL_OPERATION_TYPE, operation.operation); span.setAttribute( SEMATTRS_GRAPHQL_OPERATION_NAME, - operation.name?.value ?? 'Anonymous', + operation.name?.value ?? '', ); span.setAttribute( SEMATTRS_GRAPHQL_DOCUMENT, @@ -381,7 +379,7 @@ export function createSubgraphExecuteSpan(input: { `subgraph.execute (${input.subgraphName})`, { attributes: { - [SEMATTRS_GRAPHQL_OPERATION_NAME]: operation.name?.value ?? 'Anonymous', + [SEMATTRS_GRAPHQL_OPERATION_NAME]: operation.name?.value ?? '', [SEMATTRS_GRAPHQL_DOCUMENT]: defaultPrintFn( input.executionRequest.document, ), From d36e9fd7459d6a80a9d40a65651ef15e5af38887 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 16 Jul 2025 14:00:00 +0000 Subject: [PATCH 60/60] chore(dependencies): updated changesets for modified dependencies --- ...@graphql-hive_gateway-1335-dependencies.md | 21 ++++++++++++++++ ...-hive_gateway-runtime-1335-dependencies.md | 9 +++++++ .../@graphql-hive_nestjs-1335-dependencies.md | 7 ++++++ ...l-mesh_fusion-runtime-1335-dependencies.md | 7 ++++++ ..._plugin-opentelemetry-1335-dependencies.md | 24 +++++++++++++++++++ ...esh_plugin-prometheus-1335-dependencies.md | 7 ++++++ ...mesh_transport-common-1335-dependencies.md | 7 ++++++ 7 files changed, 82 insertions(+) create mode 100644 .changeset/@graphql-hive_gateway-1335-dependencies.md create mode 100644 .changeset/@graphql-hive_gateway-runtime-1335-dependencies.md create mode 100644 .changeset/@graphql-hive_nestjs-1335-dependencies.md create mode 100644 .changeset/@graphql-mesh_fusion-runtime-1335-dependencies.md create mode 100644 .changeset/@graphql-mesh_plugin-opentelemetry-1335-dependencies.md create mode 100644 .changeset/@graphql-mesh_plugin-prometheus-1335-dependencies.md create mode 100644 .changeset/@graphql-mesh_transport-common-1335-dependencies.md diff --git a/.changeset/@graphql-hive_gateway-1335-dependencies.md b/.changeset/@graphql-hive_gateway-1335-dependencies.md new file mode 100644 index 000000000..530da306b --- /dev/null +++ b/.changeset/@graphql-hive_gateway-1335-dependencies.md @@ -0,0 +1,21 @@ +--- +'@graphql-hive/gateway': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Added dependency [`@opentelemetry/api@^1.9.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api/v/1.9.0) (to `dependencies`) +- Added dependency [`@opentelemetry/api-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api-logs/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/context-async-hooks@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/context-zone@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-zone/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/core@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/exporter-jaeger@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-jaeger/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/exporter-zipkin@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/propagator-b3@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/propagator-b3/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/propagator-jaeger@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/propagator-jaeger/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sampler-jaeger-remote@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sampler-jaeger-remote/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-logs/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-metrics@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-metrics/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-trace-base@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.1) (to `dependencies`) +- Removed dependency [`@graphql-mesh/plugin-mock@^0.105.6` ↗︎](https://www.npmjs.com/package/@graphql-mesh/plugin-mock/v/0.105.6) (from `dependencies`) diff --git a/.changeset/@graphql-hive_gateway-runtime-1335-dependencies.md b/.changeset/@graphql-hive_gateway-runtime-1335-dependencies.md new file mode 100644 index 000000000..102b3e27b --- /dev/null +++ b/.changeset/@graphql-hive_gateway-runtime-1335-dependencies.md @@ -0,0 +1,9 @@ +--- +'@graphql-hive/gateway-runtime': patch +--- + +dependencies updates: + +- Added dependency [`@envelop/instrumentation@^1.0.0` ↗︎](https://www.npmjs.com/package/@envelop/instrumentation/v/1.0.0) (to `dependencies`) +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Removed dependency [`@graphql-hive/logger-json@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger-json/v/workspace:^) (from `dependencies`) diff --git a/.changeset/@graphql-hive_nestjs-1335-dependencies.md b/.changeset/@graphql-hive_nestjs-1335-dependencies.md new file mode 100644 index 000000000..0af93d273 --- /dev/null +++ b/.changeset/@graphql-hive_nestjs-1335-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-hive/nestjs': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_fusion-runtime-1335-dependencies.md b/.changeset/@graphql-mesh_fusion-runtime-1335-dependencies.md new file mode 100644 index 000000000..d381bdd14 --- /dev/null +++ b/.changeset/@graphql-mesh_fusion-runtime-1335-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/fusion-runtime': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-opentelemetry-1335-dependencies.md b/.changeset/@graphql-mesh_plugin-opentelemetry-1335-dependencies.md new file mode 100644 index 000000000..11f34a7b2 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-opentelemetry-1335-dependencies.md @@ -0,0 +1,24 @@ +--- +'@graphql-mesh/plugin-opentelemetry': patch +--- + +dependencies updates: + +- Updated dependency [`@opentelemetry/core@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/core/v/2.0.1) (from `^1.30.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-grpc@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-grpc/v/0.202.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/exporter-trace-otlp-http@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.202.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/instrumentation@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/instrumentation/v/0.202.0) (from `^0.57.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/resources@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.0.1) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/sdk-trace-base@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-base/v/2.0.1) (from `^1.29.0`, in `dependencies`) +- Updated dependency [`@opentelemetry/semantic-conventions@^1.34.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.34.0) (from `^1.28.0`, in `dependencies`) +- Updated dependency [`@whatwg-node/promise-helpers@1.3.0` ↗︎](https://www.npmjs.com/package/@whatwg-node/promise-helpers/v/1.3.0) (from `^1.3.0`, in `dependencies`) +- Added dependency [`@graphql-hive/core@0.13.0-alpha-20250707104821-802de2e836e8fc0fb59533a3c4c63cf53e9fc33c` ↗︎](https://www.npmjs.com/package/@graphql-hive/core/v/0.13.0) (to `dependencies`) +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) +- Added dependency [`@opentelemetry/api-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/api-logs/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/auto-instrumentations-node@^0.60.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.60.1) (to `dependencies`) +- Added dependency [`@opentelemetry/context-async-hooks@^2.0.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/context-async-hooks/v/2.0.1) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-logs@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-logs/v/0.202.0) (to `dependencies`) +- Added dependency [`@opentelemetry/sdk-node@^0.202.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.202.0) (to `dependencies`) +- Removed dependency [`@azure/monitor-opentelemetry-exporter@^1.0.0-beta.27` ↗︎](https://www.npmjs.com/package/@azure/monitor-opentelemetry-exporter/v/1.0.0) (from `dependencies`) +- Removed dependency [`@opentelemetry/exporter-zipkin@^1.29.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-zipkin/v/1.29.0) (from `dependencies`) +- Removed dependency [`@opentelemetry/sdk-trace-web@^1.29.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-trace-web/v/1.29.0) (from `dependencies`) diff --git a/.changeset/@graphql-mesh_plugin-prometheus-1335-dependencies.md b/.changeset/@graphql-mesh_plugin-prometheus-1335-dependencies.md new file mode 100644 index 000000000..02e9f8bf5 --- /dev/null +++ b/.changeset/@graphql-mesh_plugin-prometheus-1335-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/plugin-prometheus': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`) diff --git a/.changeset/@graphql-mesh_transport-common-1335-dependencies.md b/.changeset/@graphql-mesh_transport-common-1335-dependencies.md new file mode 100644 index 000000000..2096b7a2b --- /dev/null +++ b/.changeset/@graphql-mesh_transport-common-1335-dependencies.md @@ -0,0 +1,7 @@ +--- +'@graphql-mesh/transport-common': patch +--- + +dependencies updates: + +- Added dependency [`@graphql-hive/logger@workspace:^` ↗︎](https://www.npmjs.com/package/@graphql-hive/logger/v/workspace:^) (to `dependencies`)

A$0AHUs&10N4ZocWxMI delta 65918 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