From 1aa46acee92d2aff583dde41260c58a666d43aec Mon Sep 17 00:00:00 2001 From: Laurin Date: Wed, 18 Mar 2026 11:04:51 +0100 Subject: [PATCH 01/15] fix: legacy member role mapping for settings should not include delete project (#7866) --- .changeset/fresh-rockets-spend.md | 5 + packages/libraries/laboratory/package.json | 1 + .../src/components/laboratory/laboratory.tsx | 2 +- .../src/components/laboratory/operation.tsx | 85 +- .../src/components/laboratory/settings.tsx | 165 ++- packages/libraries/laboratory/src/index.tsx | 5 +- .../laboratory/src/lib/query-plan.tsx | 1021 +++++++++++++++++ .../libraries/laboratory/src/lib/settings.ts | 22 + .../libraries/render-laboratory/src/index.ts | 1 + .../providers/organization-member-roles.ts | 1 - pnpm-lock.yaml | 18 + 11 files changed, 1318 insertions(+), 8 deletions(-) create mode 100644 .changeset/fresh-rockets-spend.md create mode 100644 packages/libraries/laboratory/src/lib/query-plan.tsx diff --git a/.changeset/fresh-rockets-spend.md b/.changeset/fresh-rockets-spend.md new file mode 100644 index 00000000000..df7524a573a --- /dev/null +++ b/.changeset/fresh-rockets-spend.md @@ -0,0 +1,5 @@ +--- +'hive': patch +--- + +Fix legacy member scope mappings granting access to deleting projects. diff --git a/packages/libraries/laboratory/package.json b/packages/libraries/laboratory/package.json index 45c1d5ff241..3fb96b166b4 100644 --- a/packages/libraries/laboratory/package.json +++ b/packages/libraries/laboratory/package.json @@ -38,6 +38,7 @@ "zod": "^4.1.12" }, "dependencies": { + "dagrejs": "^0.2.1", "radix-ui": "^1.4.3", "uuid": "^13.0.0" }, diff --git a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx index f583a845868..cbb0701cafb 100644 --- a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx @@ -433,7 +433,7 @@ const LaboratoryContent = () => {
-
{contentNode}
+
{contentNode}
diff --git a/packages/libraries/laboratory/src/components/laboratory/operation.tsx b/packages/libraries/laboratory/src/components/laboratory/operation.tsx index 7d1d2da5c1c..acb9e2af11c 100644 --- a/packages/libraries/laboratory/src/components/laboratory/operation.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/operation.tsx @@ -7,15 +7,23 @@ import { FileTextIcon, HistoryIcon, MoreHorizontalIcon, + NetworkIcon, + PanelLeftCloseIcon, + PanelLeftOpenIcon, PlayIcon, PowerIcon, PowerOffIcon, SquarePenIcon, + TextAlignStartIcon, } from 'lucide-react'; import { compressToEncodedURIComponent } from 'lz-string'; import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; import { toast } from 'sonner'; import { z } from 'zod'; +import { GraphQLIcon } from '@/components/icons'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; +import { ToggleGroup, ToggleGroupItem } from '@/laboratory/components/ui/toggle-group'; +import { QueryPlanTree, renderQueryPlan } from '@/lib/query-plan'; import { DropdownMenuTrigger } from '@radix-ui/react-dropdown-menu'; import { useForm } from '@tanstack/react-form'; import type { @@ -178,6 +186,47 @@ export const ResponsePreflight = ({ historyItem }: { historyItem?: LaboratoryHis ); }; +export const ResponseQueryPlan = ({ historyItem }: { historyItem?: LaboratoryHistory | null }) => { + const [mode, setMode] = useState<'text' | 'visual'>('text'); + return ( +
+ setMode(value as 'text' | 'visual')} + > + + + Text + + + + Graph + + + {mode === 'text' ? ( + + ) : ( + + )} +
+ ); +}; export const ResponseSubscription = ({ historyItem, @@ -245,6 +294,8 @@ export const ResponseSubscription = ({ }; export const Response = ({ historyItem }: { historyItem?: LaboratoryHistoryRequest | null }) => { + const [isMaximized, setIsMaximized] = useState(false); + const isError = useMemo(() => { if (!historyItem) { return false; @@ -262,11 +313,38 @@ export const Response = ({ historyItem }: { historyItem?: LaboratoryHistoryReque }, [historyItem]); return ( - - + + + + + + + + {isMaximized ? 'Minimize panel size' : 'Maxmize panel size'} + + Response + + Query Plan + Headers @@ -315,6 +393,9 @@ export const Response = ({ historyItem }: { historyItem?: LaboratoryHistoryReque + + + diff --git a/packages/libraries/laboratory/src/components/laboratory/settings.tsx b/packages/libraries/laboratory/src/components/laboratory/settings.tsx index 852f170dc20..020297ac586 100644 --- a/packages/libraries/laboratory/src/components/laboratory/settings.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/settings.tsx @@ -1,4 +1,6 @@ import { z } from 'zod'; +import { Input } from '@/components/ui/input'; +import { Switch } from '@/components/ui/switch'; import { useForm } from '@tanstack/react-form'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/card'; import { Field, FieldGroup, FieldLabel } from '../ui/field'; @@ -8,6 +10,17 @@ import { useLaboratory } from './context'; const settingsFormSchema = z.object({ fetch: z.object({ credentials: z.enum(['include', 'omit', 'same-origin']), + timeout: z.number().optional(), + retry: z.number().optional(), + useGETForQueries: z.boolean().optional(), + }), + subscriptions: z.object({ + protocol: z.enum(['SSE', 'GRAPHQL_SSE', 'WS', 'LEGACY_WS']), + }), + introspection: z.object({ + queryName: z.string().optional(), + method: z.enum(['GET', 'POST']).optional(), + schemaDescription: z.boolean().optional(), }), }); @@ -25,12 +38,12 @@ export const Settings = () => { }); return ( -
+
@@ -66,6 +79,154 @@ export const Settings = () => { ); }} + + {field => { + return ( + + Timeout + field.handleChange(Number(e.target.value))} + /> + + ); + }} + + + {field => { + return ( + + Retry + field.handleChange(Number(e.target.value))} + /> + + ); + }} + + + {field => { + return ( + + + Use GET for queries + + ); + }} + + + + + + + Subscriptions + + Configure the subscriptions options for the laboratory. + + + + + + {field => { + const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; + + return ( + + Protocol + + + ); + }} + + + + + + + Introspection + + Configure the introspection options for the laboratory. + + + + + + {field => { + return ( + + Query name + field.handleChange(e.target.value)} + /> + + ); + }} + + + {field => { + const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; + + return ( + + Method + + + ); + }} + + + {field => { + return ( + + + Schema description + + ); + }} + diff --git a/packages/libraries/laboratory/src/index.tsx b/packages/libraries/laboratory/src/index.tsx index 27106660e28..88f3661e307 100644 --- a/packages/libraries/laboratory/src/index.tsx +++ b/packages/libraries/laboratory/src/index.tsx @@ -1,5 +1,5 @@ import ReactDOM from 'react-dom/client'; -import { Laboratory } from './components/laboratory/laboratory'; +import { Laboratory, LaboratoryProps } from './components/laboratory/laboratory'; export * from './components/laboratory/laboratory'; export * from './components/laboratory/context'; @@ -17,7 +17,7 @@ export * from './lib/tabs'; export * from './lib/tests'; export * from './lib/plugins'; -export const renderLaboratory = (el: HTMLElement) => { +export const renderLaboratory = (el: HTMLElement, props: LaboratoryProps) => { const prefix = 'hive-laboratory'; const getLocalStorage = (key: string) => { @@ -74,6 +74,7 @@ export const renderLaboratory = (el: HTMLElement) => { onHistoryChange={history => { setLocalStorage('history', history); }} + {...props} />, ); }; diff --git a/packages/libraries/laboratory/src/lib/query-plan.tsx b/packages/libraries/laboratory/src/lib/query-plan.tsx new file mode 100644 index 00000000000..2fe6d11d11e --- /dev/null +++ b/packages/libraries/laboratory/src/lib/query-plan.tsx @@ -0,0 +1,1021 @@ +import { useMemo, useState } from 'react'; +import { parse, print } from 'graphql'; +import { cn } from '@/lib/utils'; +import * as dagre from '@dagrejs/dagre'; + +export type QueryPlan = { + kind: 'QueryPlan'; + node?: PlanNode | null; +}; + +export type PlanNode = + | FetchNodePlan + | BatchFetchNodePlan + | SequenceNodePlan + | ParallelNodePlan + | FlattenNodePlan + | ConditionNodePlan + | SubscriptionNodePlan + | DeferNodePlan; + +export type OperationKind = 'Query' | 'Mutation' | 'Subscription' | string; + +export type SubgraphFetchOperation = { + documentStr: string; + hash?: number | string; + document?: unknown; +}; + +export type SelectionSet = { + items?: SelectionItem[]; +}; + +export type SelectionItem = + | { + kind?: 'Field'; + name: string; + alias?: string | null; + arguments?: Record | Array<[string, Value]> | null; + selections?: SelectionSet | null; + skipIf?: string | null; + includeIf?: string | null; + } + | { + kind?: 'InlineFragment'; + typeCondition?: string | null; + selections?: SelectionSet | null; + } + | { + kind?: 'FragmentSpread'; + name: string; + } + | Record; + +export type ValueObject = { + [key: string]: Value; +}; + +export type Value = + | string + | number + | boolean + | null + | { kind?: 'Variable'; variable?: string; name?: string } + | Value[] + | ValueObject; + +export type FetchNodePlan = { + kind: 'Fetch'; + serviceName: string; + variableUsages?: string[] | Set | null; + operationKind?: OperationKind | null; + operationName?: string | null; + operation: string; + requires?: SelectionSet | null; + inputRewrites?: FetchRewrite[] | null; + outputRewrites?: FetchRewrite[] | null; +}; + +export type BatchFetchNodePlan = { + kind: 'BatchFetch'; + serviceName: string; + variableUsages?: string[] | Set | null; + operationKind?: OperationKind | null; + operationName?: string | null; + operation: string; + entityBatch: EntityBatch; +}; + +export type EntityBatch = { + aliases: EntityBatchAlias[]; +}; + +export type EntityBatchAlias = { + alias: string; + representationsVariableName: string; + paths: FlattenNodePath; + requires: SelectionSet; + inputRewrites?: FetchRewrite[] | null; + outputRewrites?: FetchRewrite[] | null; +}; + +export type FlattenNodePlan = { + kind: 'Flatten'; + path: FlattenNodePath; + node: PlanNode; +}; + +export type SequenceNodePlan = { + kind: 'Sequence'; + nodes: PlanNode[]; +}; + +export type ParallelNodePlan = { + kind: 'Parallel'; + nodes: PlanNode[]; +}; + +export type ConditionNodePlan = { + kind: 'Condition'; + condition: string; + ifClause?: PlanNode | null; + elseClause?: PlanNode | null; +}; + +export type SubscriptionNodePlan = { + kind: 'Subscription'; + primary: PlanNode; +}; + +export type DeferNodePlan = { + kind: 'Defer'; + primary: DeferPrimary; + deferred: DeferredNode[]; +}; + +export type DeferPrimary = { + subselection?: string | null; + node?: PlanNode | null; +}; + +export type DeferredNode = { + depends: DeferDependency[]; + label?: string | null; + queryPath: string[]; + subselection?: string | null; + node?: PlanNode | null; +}; + +export type DeferDependency = { + id: string; + deferLabel?: string | null; +}; + +export type FetchRewrite = ValueSetter | KeyRenamer; + +export type ValueSetter = { + path: FetchNodePathSegment[]; + setValueTo: string; +}; + +export type KeyRenamer = { + path: FetchNodePathSegment[]; + renameKeyTo: string; +}; + +export type FetchNodePathSegment = { Key: string } | { TypenameEquals: string[] | Set }; + +export type FlattenNodePathSegment = + | { Field: string } + | { TypeCondition: string[] | Set } + | '@'; + +export type FlattenNodePath = FlattenNodePathSegment[]; + +/* ---------------------------------- */ +/* helpers */ +/* ---------------------------------- */ + +function indent(depth: number): string { + return ' '.repeat(depth); +} + +function normalizeStringSet(value: string[] | Set | null | undefined): string[] { + if (!value) return []; + return Array.isArray(value) ? value : Array.from(value); +} + +function isObject(value: unknown): value is Record { + return !!value && typeof value === 'object' && !Array.isArray(value); +} + +function renderFlattenPathSegment(seg: FlattenNodePathSegment): string { + if (seg === '@') return '@'; + + if (isObject(seg) && 'Field' in seg) { + return String(seg.Field); + } + + if (isObject(seg) && 'TypeCondition' in seg) { + const names = normalizeStringSet(seg.TypeCondition as string[] | Set); + return `|[${names.join('|')}]`; + } + + return String(seg); +} + +export function renderFlattenPath(path: FlattenNodePath): string { + let out = ''; + + for (let i = 0; i < path.length; i++) { + const current = path[i]; + const next = path[i + 1]; + out += renderFlattenPathSegment(current); + + if (next !== undefined) { + const nextIsTypeCondition = isObject(next) && 'TypeCondition' in next; + if (!nextIsTypeCondition) out += '.'; + } + } + + return out; +} + +/* ---------------------------------- */ +/* selection-set rendering */ +/* ---------------------------------- */ + +function renderValue(value: Value): string { + if (value === null) return 'null'; + + if (typeof value === 'string') return JSON.stringify(value); + if (typeof value === 'number' || typeof value === 'boolean') return String(value); + + if (Array.isArray(value)) { + return `[${value.map(renderValue).join(', ')}]`; + } + + if (isObject(value)) { + if ( + (value.kind === 'Variable' || 'variable' in value || 'name' in value) && + (value.variable || value.name) + ) { + return `$${String(value.variable ?? value.name)}`; + } + + const entries = Object.entries(value); + return `{ ${entries.map(([k, v]) => `${k}: ${renderValue(v as Value)}`).join(', ')} }`; + } + + return String(value); +} + +function renderArguments( + args: Record | Array<[string, Value]> | null | undefined, +): string { + if (!args) return ''; + + const entries: Array<[string, Value]> = Array.isArray(args) ? args : Object.entries(args); + if (entries.length === 0) return ''; + + return `(${entries.map(([k, v]) => `${k}: ${renderValue(v)}`).join(', ')})`; +} + +export function renderSelectionSet( + selectionSet: SelectionSet | null | undefined, + depth = 0, +): string { + if (!selectionSet?.items?.length) return ''; + + const lines: string[] = []; + + for (const item of selectionSet.items) { + if (!isObject(item)) continue; + + if ((item as { kind?: string }).kind === 'Field') { + const field = item as { + name: string; + alias?: string | null; + arguments?: Record | Array<[string, Value]> | null; + selections?: SelectionSet | null; + }; + + const alias = field.alias ? `${String(field.alias)}: ` : ''; + const args = renderArguments( + (field.arguments as Record | Array<[string, Value]> | null | undefined) ?? + null, + ); + const nested = renderSelectionSet( + (field.selections as SelectionSet | null | undefined) ?? null, + depth + 1, + ); + + if (nested) { + lines.push(`${indent(depth)}${alias}${String(field.name)}${args} {`); + lines.push(nested); + lines.push(`${indent(depth)}}`); + } else { + lines.push(`${indent(depth)}${alias}${String(field.name)}${args}`); + } + + continue; + } + + if ('typeCondition' in item) { + const nested = renderSelectionSet( + (item.selections as SelectionSet | null | undefined) ?? null, + depth + 1, + ); + lines.push(`${indent(depth)}... on ${String(item.typeCondition ?? '')} {`); + if (nested) lines.push(nested); + lines.push(`${indent(depth)}}`); + continue; + } + } + + return lines.join('\n'); +} + +/* ---------------------------------- */ +/* plan pretty renderer */ +/* ---------------------------------- */ + +export function renderQueryPlan(plan: QueryPlan): string { + const lines: string[] = []; + lines.push('QueryPlan {'); + + if (plan.node) { + lines.push(renderPlanNode(plan.node, 1)); + } else { + lines.push(`${indent(1)}None`); + } + + lines.push('}'); + return lines.join('\n'); +} + +export function renderPlanNode(node: PlanNode, depth = 0): string { + switch (node.kind) { + case 'Fetch': + return renderFetchNode(node, depth); + + case 'BatchFetch': + return renderBatchFetchNode(node, depth); + + case 'Flatten': + return renderFlattenNode(node, depth); + + case 'Sequence': + return renderSequenceNode(node, depth); + + case 'Parallel': + return renderParallelNode(node, depth); + + case 'Condition': + return renderConditionNode(node, depth); + + case 'Subscription': + return renderSubscriptionNode(node, depth); + + case 'Defer': + return renderDeferNode(node, depth); + + default: + return `${indent(depth)}`; + } +} + +export function renderFetchNode(node: FetchNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Fetch(service: "${node.serviceName}") {`); + + if (node.requires) { + lines.push(`${indent(depth + 1)}requires {`); + const requires = renderSelectionSet(node.requires, depth + 2); + if (requires) lines.push(requires); + lines.push(`${indent(depth + 1)}}`); + } + + lines.push(`${indent(depth + 1)}operation:`); + lines.push(renderMultilineBlock(print(parse(node.operation)), depth + 2)); + + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderBatchFetchNode(node: BatchFetchNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}BatchFetch(service: "${node.serviceName}") {`); + + for (const alias of node.entityBatch.aliases) { + lines.push(`${indent(depth + 1)}alias "${alias.alias}" {`); + lines.push(`${indent(depth + 2)}representations: $${alias.representationsVariableName}`); + lines.push(`${indent(depth + 2)}paths: [${renderFlattenPath(alias.paths)}]`); + lines.push(`${indent(depth + 2)}requires {`); + const requires = renderSelectionSet(alias.requires, depth + 3); + if (requires) lines.push(requires); + lines.push(`${indent(depth + 2)}}`); + lines.push(`${indent(depth + 1)}}`); + } + + lines.push(`${indent(depth + 1)}operation:`); + lines.push(renderMultilineBlock(print(parse(node.operation)), depth + 2)); + + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderFlattenNode(node: FlattenNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Flatten(path: "${renderFlattenPath(node.path)}") {`); + lines.push(renderPlanNode(node.node, depth + 1)); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderSequenceNode(node: SequenceNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Sequence {`); + for (const child of node.nodes) { + lines.push(renderPlanNode(child, depth + 1)); + } + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderParallelNode(node: ParallelNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Parallel {`); + for (const child of node.nodes) { + lines.push(renderPlanNode(child, depth + 1)); + } + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderConditionNode(node: ConditionNodePlan, depth = 0): string { + const lines: string[] = []; + + if (node.ifClause && !node.elseClause) { + lines.push(`${indent(depth)}Include(if: $${node.condition}) {`); + lines.push(renderPlanNode(node.ifClause, depth + 1)); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); + } + + if (!node.ifClause && node.elseClause) { + lines.push(`${indent(depth)}Skip(if: $${node.condition}) {`); + lines.push(renderPlanNode(node.elseClause, depth + 1)); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); + } + + if (node.ifClause && node.elseClause) { + lines.push(`${indent(depth)}Condition(if: $${node.condition}) {`); + lines.push(`${indent(depth + 1)}if {`); + lines.push(renderPlanNode(node.ifClause, depth + 2)); + lines.push(`${indent(depth + 1)}}`); + lines.push(`${indent(depth + 1)}else {`); + lines.push(renderPlanNode(node.elseClause, depth + 2)); + lines.push(`${indent(depth + 1)}}`); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); + } + + return `${indent(depth)}Condition(if: $${node.condition}) {}`; +} + +export function renderSubscriptionNode(node: SubscriptionNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Subscription {`); + lines.push(`${indent(depth + 1)}primary {`); + lines.push(renderPlanNode(node.primary, depth + 2)); + lines.push(`${indent(depth + 1)}}`); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderDeferNode(node: DeferNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Defer {`); + + lines.push(`${indent(depth + 1)}primary {`); + if (node.primary.subselection) { + lines.push(`${indent(depth + 2)}subselection: ${JSON.stringify(node.primary.subselection)}`); + } + if (node.primary.node) { + lines.push(renderPlanNode(node.primary.node, depth + 2)); + } + lines.push(`${indent(depth + 1)}}`); + + if (node.deferred.length > 0) { + lines.push(`${indent(depth + 1)}deferred {`); + for (const d of node.deferred) { + lines.push(`${indent(depth + 2)}item {`); + if (d.label) lines.push(`${indent(depth + 3)}label: ${JSON.stringify(d.label)}`); + lines.push(`${indent(depth + 3)}queryPath: [${d.queryPath.join(', ')}]`); + if (d.subselection) { + lines.push(`${indent(depth + 3)}subselection: ${JSON.stringify(d.subselection)}`); + } + if (d.depends.length) { + lines.push( + `${indent(depth + 3)}depends: [${d.depends + .map(x => (x.deferLabel ? `${x.id}:${x.deferLabel}` : x.id)) + .join(', ')}]`, + ); + } + if (d.node) { + lines.push(renderPlanNode(d.node, depth + 3)); + } + lines.push(`${indent(depth + 2)}}`); + } + lines.push(`${indent(depth + 1)}}`); + } + + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +function renderMultilineBlock(value: string, depth = 0): string { + return value + .split('\n') + .map(line => `${indent(depth)}${line}`) + .join('\n'); +} + +/* ---------------------------------- */ +/* extracting graphql operations */ +/* ---------------------------------- */ + +export type ExtractedOperation = { + path: string; + nodeKind: 'Fetch' | 'BatchFetch'; + serviceName: string; + operationKind?: string | null; + operationName?: string | null; + graphql: string; +}; + +export function extractOperations(plan: QueryPlan): ExtractedOperation[] { + if (!plan.node) return []; + return extractOperationsFromNode(plan.node, 'root'); +} + +function extractOperationsFromNode(node: PlanNode, path: string): ExtractedOperation[] { + switch (node.kind) { + case 'Fetch': + return [ + { + path, + nodeKind: 'Fetch', + serviceName: node.serviceName, + operationKind: node.operationKind ?? null, + operationName: node.operationName ?? null, + graphql: node.operation, + }, + ]; + + case 'BatchFetch': + return [ + { + path, + nodeKind: 'BatchFetch', + serviceName: node.serviceName, + operationKind: node.operationKind ?? null, + operationName: node.operationName ?? null, + graphql: node.operation, + }, + ]; + + case 'Flatten': + return extractOperationsFromNode( + node.node, + `${path}.flatten(${renderFlattenPath(node.path)})`, + ); + + case 'Sequence': + return node.nodes.flatMap((child, i) => + extractOperationsFromNode(child, `${path}.sequence[${i}]`), + ); + + case 'Parallel': + return node.nodes.flatMap((child, i) => + extractOperationsFromNode(child, `${path}.parallel[${i}]`), + ); + + case 'Condition': { + const out: ExtractedOperation[] = []; + if (node.ifClause) { + out.push(...extractOperationsFromNode(node.ifClause, `${path}.if($${node.condition})`)); + } + if (node.elseClause) { + out.push(...extractOperationsFromNode(node.elseClause, `${path}.else($${node.condition})`)); + } + return out; + } + + case 'Subscription': + return extractOperationsFromNode(node.primary, `${path}.subscription.primary`); + + case 'Defer': { + const out: ExtractedOperation[] = []; + if (node.primary.node) { + out.push(...extractOperationsFromNode(node.primary.node, `${path}.defer.primary`)); + } + node.deferred.forEach((d, i) => { + if (d.node) { + out.push( + ...extractOperationsFromNode( + d.node, + `${path}.defer.deferred[${i}]${d.label ? `(${d.label})` : ''}`, + ), + ); + } + }); + return out; + } + + default: + return []; + } +} + +type VizNode = { + id: string; + label: string; + subtitle?: string; + details?: string[]; + width: number; + height: number; + x?: number; + y?: number; + kind: PlanNode['kind'] | 'Root'; +}; + +type VizEdge = { + id: string; + from: string; + to: string; + label?: string; + points?: Array<{ x: number; y: number }>; +}; + +type BuildResult = { + nodes: VizNode[]; + edges: VizEdge[]; + rootId?: string; +}; + +type LayoutedGraph = { + nodes: VizNode[]; + edges: VizEdge[]; + width: number; + height: number; +}; + +function layoutGraph(input: BuildResult): LayoutedGraph { + const g = new dagre.graphlib.Graph(); + + g.setGraph({ + rankdir: 'TB', + nodesep: 80, + ranksep: 80, + marginx: 80, + marginy: 80, + }); + + g.setDefaultEdgeLabel(() => ({})); + + console.log(input); + + for (const node of input.nodes) { + g.setNode(node.id, { + width: node.width, + height: node.height, + }); + } + + for (const edge of input.edges) { + g.setEdge(edge.from, edge.to, { + label: edge.label, + }); + } + + dagre.layout(g); + + const nodes = input.nodes.map(node => { + const p = g.node(node.id) as { x: number; y: number; width: number; height: number }; + return { + ...node, + x: p.x, + y: p.y, + }; + }); + + const edges = input.edges.map(edge => { + const e = g.edge(edge.from, edge.to) as { points?: Array<{ x: number; y: number }> }; + return { + ...edge, + points: e?.points ?? [], + }; + }); + + const graphInfo = g.graph() as { + width?: number; + height?: number; + }; + + return { + nodes, + edges, + width: graphInfo.width ?? 800, + height: graphInfo.height ?? 600, + }; +} + +export type Point = { + x: number; + y: number; +}; + +export function orthogonalPoints(from: Point, to: Point, t = 0.5): [Point, Point, Point, Point] { + const midY = from.y + (to.y - from.y) * t; + + return [from, { x: from.x, y: midY }, { x: to.x, y: midY }, to]; +} + +export function roundedOrthogonalPath( + [p0, p1, p2, p3]: [Point, Point, Point, Point], + radius = 12, +): string { + const r1 = Math.min(radius, Math.abs(p1.y - p0.y), Math.abs(p2.x - p1.x)); + const r2 = Math.min(radius, Math.abs(p2.x - p1.x), Math.abs(p3.y - p2.y)); + + const p1a = { + x: p1.x, + y: p1.y - Math.sign(p1.y - p0.y) * r1, + }; + + const p1b = { + x: p1.x + Math.sign(p2.x - p1.x) * r1, + y: p1.y, + }; + + const p2a = { + x: p2.x - Math.sign(p2.x - p1.x) * r2, + y: p2.y, + }; + + const p2b = { + x: p2.x, + y: p2.y + Math.sign(p3.y - p2.y) * r2, + }; + + return [ + `M ${p0.x} ${p0.y}`, + `L ${p1a.x} ${p1a.y}`, + `Q ${p1.x} ${p1.y} ${p1b.x} ${p1b.y}`, + `L ${p2a.x} ${p2a.y}`, + `Q ${p2.x} ${p2.y} ${p2b.x} ${p2b.y}`, + `L ${p3.x} ${p3.y}`, + ].join(' '); +} + +function makeNode(id: string, kind: VizNode['kind'], label: string): VizNode { + const { width, height } = { width: 160, height: 40 }; + return { id, kind, label, width, height }; +} + +function visitNode( + node: PlanNode, + nextId: () => string, + nodes: VizNode[], + edges: VizEdge[], +): string { + switch (node.kind) { + case 'Fetch': { + const id = nextId(); + nodes.push(makeNode(id, 'Fetch', `Fetch → ${node.serviceName}`)); + return id; + } + + case 'BatchFetch': { + const id = nextId(); + // const aliasSummary = node.entityBatch.aliases.map(a => `alias: ${a.alias}`); + nodes.push(makeNode(id, 'BatchFetch', `BatchFetch → ${node.serviceName}`)); + return id; + } + + case 'Flatten': { + const id = nextId(); + nodes.push(makeNode(id, 'Flatten', 'Flatten')); + const childId = visitNode(node.node, nextId, nodes, edges); + edges.push({ id: `e_${id}_${childId}`, from: id, to: childId }); + return id; + } + + case 'Sequence': { + const id = nextId(); + nodes.push(makeNode(id, 'Sequence', 'Sequence')); + + node.nodes.forEach((child, index) => { + const childId = visitNode(child, nextId, nodes, edges); + edges.push({ + id: `e_${id}_${childId}`, + from: id, + to: childId, + label: String(index + 1), + }); + }); + + return id; + } + + case 'Parallel': { + const id = nextId(); + nodes.push(makeNode(id, 'Parallel', 'Parallel')); + + node.nodes.forEach((child, index) => { + const childId = visitNode(child, nextId, nodes, edges); + edges.push({ + id: `e_${id}_${childId}`, + from: id, + to: childId, + label: `P${index + 1}`, + }); + }); + + return id; + } + + case 'Condition': { + const id = nextId(); + nodes.push(makeNode(id, 'Condition', 'Condition')); + + if (node.ifClause) { + const ifId = visitNode(node.ifClause, nextId, nodes, edges); + edges.push({ id: `e_${id}_${ifId}`, from: id, to: ifId, label: 'if' }); + } + + if (node.elseClause) { + const elseId = visitNode(node.elseClause, nextId, nodes, edges); + edges.push({ id: `e_${id}_${elseId}`, from: id, to: elseId, label: 'else' }); + } + + return id; + } + + case 'Subscription': { + const id = nextId(); + nodes.push(makeNode(id, 'Subscription', 'Subscription')); + const childId = visitNode(node.primary, nextId, nodes, edges); + edges.push({ id: `e_${id}_${childId}`, from: id, to: childId, label: 'primary' }); + return id; + } + + case 'Defer': { + const id = nextId(); + nodes.push(makeNode(id, 'Defer', 'Defer')); + + if (node.primary.node) { + const primaryId = visitNode(node.primary.node, nextId, nodes, edges); + edges.push({ + id: `e_${id}_${primaryId}`, + from: id, + to: primaryId, + label: 'primary', + }); + } + + node.deferred.forEach((part, index) => { + if (!part.node) return; + const childId = visitNode(part.node, nextId, nodes, edges); + edges.push({ + id: `e_${id}_${childId}`, + from: id, + to: childId, + label: part.label ?? `deferred ${index + 1}`, + }); + }); + + return id; + } + + default: { + const id = nextId(); + nodes.push(makeNode(id, 'Root', 'Unknown')); + return id; + } + } +} + +function buildPlanGraph(plan: QueryPlan): BuildResult { + const nodes: VizNode[] = []; + const edges: VizEdge[] = []; + let seq = 0; + + const nextId = () => `n_${seq++}`; + + const rootId = nextId(); + + nodes.push(makeNode(rootId, 'Root', 'QueryPlan')); + + if (!plan.node) { + const emptyId = nextId(); + nodes.push(makeNode(emptyId, 'Root', 'Empty')); + edges.push({ id: `e_${rootId}_${emptyId}`, from: rootId, to: emptyId }); + return { nodes, edges, rootId }; + } + + const childId = visitNode(plan.node, nextId, nodes, edges); + edges.push({ id: `e_${rootId}_${childId}`, from: rootId, to: childId }); + + return { nodes, edges, rootId }; +} + +export function QueryPlanTree(props: { plan: QueryPlan }) { + const [hoverNodeId, setHoverNodeId] = useState(null); + + const g = useMemo(() => { + const built = buildPlanGraph(props.plan); + + return layoutGraph(built); + }, [props.plan]); + + const nodesFollowingHoveredNode = useMemo(() => { + if (!hoverNodeId) { + return []; + } + + const outgoing = new Map(); + for (const edge of g.edges) { + const existing = outgoing.get(edge.from); + if (existing) { + existing.push(edge.to); + } else { + outgoing.set(edge.from, [edge.to]); + } + } + + // All nodes reachable by repeatedly following `from -> to` edges. + const visited = new Set(); + const queue: string[] = [hoverNodeId]; + while (queue.length > 0) { + const current = queue.shift()!; + const next = outgoing.get(current); + if (!next) continue; + + for (const id of next) { + if (visited.has(id)) continue; + visited.add(id); + queue.push(id); + } + } + + return g.nodes.filter(node => visited.has(node.id)); + }, [g.nodes, g.edges, hoverNodeId]); + + const nodesFollowingHoveredNodeIds = useMemo(() => { + return new Set(nodesFollowingHoveredNode.map(n => n.id)); + }, [nodesFollowingHoveredNode]); + + return ( +
+ + {g.edges.map(edge => { + const from = g.nodes.find(node => node.id === edge.from)!; + const to = g.nodes.find(node => node.id === edge.to)!; + const isEdgeFollowingHovered = + !!hoverNodeId && + (edge.from === hoverNodeId || nodesFollowingHoveredNodeIds.has(edge.from)) && + nodesFollowingHoveredNodeIds.has(edge.to); + + return ( + + ); + })} + + {g.nodes.map(node => { + const isHovered = hoverNodeId === node.id; + const isFollowingHovered = !!hoverNodeId && nodesFollowingHoveredNodeIds.has(node.id); + + return ( +
setHoverNodeId(node.id)} + onMouseLeave={() => setHoverNodeId(null)} + > + {node.label} +
+ ); + })} +
+ ); +} diff --git a/packages/libraries/laboratory/src/lib/settings.ts b/packages/libraries/laboratory/src/lib/settings.ts index 5261aa69f33..8b81a4b6d00 100644 --- a/packages/libraries/laboratory/src/lib/settings.ts +++ b/packages/libraries/laboratory/src/lib/settings.ts @@ -3,6 +3,17 @@ import { useCallback, useState } from 'react'; export type LaboratorySettings = { fetch: { credentials: 'include' | 'omit' | 'same-origin'; + timeout?: number; + retry?: number; + useGETForQueries?: boolean; + }; + subscriptions: { + protocol: 'SSE' | 'GRAPHQL_SSE' | 'WS' | 'LEGACY_WS'; + }; + introspection: { + queryName?: string; + method?: 'GET' | 'POST'; + schemaDescription?: boolean; }; }; @@ -22,6 +33,17 @@ export const useSettings = (props: { props.defaultSettings ?? { fetch: { credentials: 'same-origin', + timeout: 10000, + retry: 3, + useGETForQueries: false, + }, + subscriptions: { + protocol: 'WS', + }, + introspection: { + queryName: 'IntrospectionQuery', + method: 'POST', + schemaDescription: false, }, }, ); diff --git a/packages/libraries/render-laboratory/src/index.ts b/packages/libraries/render-laboratory/src/index.ts index 2147449e611..9861d2d3a89 100644 --- a/packages/libraries/render-laboratory/src/index.ts +++ b/packages/libraries/render-laboratory/src/index.ts @@ -8,6 +8,7 @@ import { jsonWorker, typescriptWorker, } from './laboratory.js'; +import { LaboratoryProps } from '@graphql-hive/laboratory'; export const renderLaboratory = (opts?: GraphiQLOptions) => /* HTML */ ` diff --git a/packages/services/api/src/modules/organization/providers/organization-member-roles.ts b/packages/services/api/src/modules/organization/providers/organization-member-roles.ts index 5fc0eec2d39..c2665a71e78 100644 --- a/packages/services/api/src/modules/organization/providers/organization-member-roles.ts +++ b/packages/services/api/src/modules/organization/providers/organization-member-roles.ts @@ -368,7 +368,6 @@ function transformOrganizationMemberLegacyScopesIntoPermissionGroup( break; } case ProjectAccessScope.SETTINGS: { - permissions.add('project:delete'); permissions.add('project:modifySettings'); permissions.add('schemaLinting:modifyProjectRules'); break; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2ab3ae099e9..5c5f23999f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -654,6 +654,9 @@ importers: packages/libraries/laboratory: dependencies: + dagrejs: + specifier: ^0.2.1 + version: 0.2.1 radix-ui: specifier: ^1.4.3 version: 1.4.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12555,6 +12558,9 @@ packages: dagre-d3-es@7.0.11: resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} + dagrejs@0.2.1: + resolution: {integrity: sha512-4bb1y+4aM1xtkK7ieP0V7Xn/34GQfnCapl0yubrOMX8Qb/PIwM1Dii2uUBv/KtuzrQtxPliSP4r5MQBsnP6gNg==} + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -14051,6 +14057,9 @@ packages: react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 + graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + graphql-config@4.5.0: resolution: {integrity: sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==} engines: {node: '>= 10.0.0'} @@ -35480,6 +35489,11 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.23 + dagrejs@0.2.1: + dependencies: + graphlib: 2.1.8 + lodash: 4.17.23 + damerau-levenshtein@1.0.8: {} dashdash@1.14.1: @@ -37347,6 +37361,10 @@ snapshots: - '@types/react-dom' - graphql-ws + graphlib@2.1.8: + dependencies: + lodash: 4.17.23 + graphql-config@4.5.0(@types/node@22.10.5)(encoding@0.1.13)(graphql@16.9.0): dependencies: '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.9.0) From 0fd99db3259f70b99dc2e5c6db65dcfbcdc65f8b Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Fri, 20 Mar 2026 22:21:17 +0100 Subject: [PATCH 02/15] feat: query plan --- packages/libraries/laboratory/package.json | 3 +- .../laboratory/src/components/flow.tsx | 274 ++++ .../src/components/laboratory/operation.tsx | 98 +- .../src/components/laboratory/settings.tsx | 165 ++- packages/libraries/laboratory/src/index.css | 4 +- packages/libraries/laboratory/src/index.tsx | 5 +- .../laboratory/src/lib/query-plan.tsx | 710 +++++++++ .../libraries/laboratory/src/lib/settings.ts | 22 + .../libraries/render-laboratory/src/index.ts | 1 + pnpm-lock.yaml | 1300 +++-------------- 10 files changed, 1491 insertions(+), 1091 deletions(-) create mode 100644 packages/libraries/laboratory/src/components/flow.tsx create mode 100644 packages/libraries/laboratory/src/lib/query-plan.tsx diff --git a/packages/libraries/laboratory/package.json b/packages/libraries/laboratory/package.json index 06e9d51d239..90114391806 100644 --- a/packages/libraries/laboratory/package.json +++ b/packages/libraries/laboratory/package.json @@ -38,11 +38,12 @@ "zod": "^4.1.12" }, "dependencies": { + "dagrejs": "^0.2.1", "radix-ui": "^1.4.3", "uuid": "^13.0.0" }, "devDependencies": { - "@dagrejs/dagre": "^1.1.8", + "@dagrejs/dagre": "^2.0.4", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", diff --git a/packages/libraries/laboratory/src/components/flow.tsx b/packages/libraries/laboratory/src/components/flow.tsx new file mode 100644 index 00000000000..03409175271 --- /dev/null +++ b/packages/libraries/laboratory/src/components/flow.tsx @@ -0,0 +1,274 @@ +import { useCallback, useMemo, useState } from 'react'; +import { LucideProps } from 'lucide-react'; +import { cn } from '@/lib/utils'; +import dagre from '@dagrejs/dagre'; + +export interface FlowNode { + id: string; + title: string; + next?: string[]; + icon?: (props: LucideProps) => React.ReactNode; + content?: (props: { node: FlowNode }) => React.ReactNode; +} + +export interface FlowGraphInternal extends FlowNode { + x: number; + y: number; + width: number; + height: number; +} + +export type Point = { + x: number; + y: number; +}; + +export function orthogonalPoints(from: Point, to: Point, t = 0.5): [Point, Point, Point, Point] { + const midY = from.y + (to.y - from.y) * t; + + return [from, { x: from.x, y: midY }, { x: to.x, y: midY }, to]; +} + +export function roundedOrthogonalPath( + [p0, p1, p2, p3]: [Point, Point, Point, Point], + radius = 12, +): string { + const r1 = Math.min(radius, Math.abs(p1.y - p0.y), Math.abs(p2.x - p1.x)); + const r2 = Math.min(radius, Math.abs(p2.x - p1.x), Math.abs(p3.y - p2.y)); + + const p1a = { + x: p1.x, + y: p1.y - Math.sign(p1.y - p0.y) * r1, + }; + + const p1b = { + x: p1.x + Math.sign(p2.x - p1.x) * r1, + y: p1.y, + }; + + const p2a = { + x: p2.x - Math.sign(p2.x - p1.x) * r2, + y: p2.y, + }; + + const p2b = { + x: p2.x, + y: p2.y + Math.sign(p3.y - p2.y) * r2, + }; + + return [ + `M ${p0.x} ${p0.y}`, + `L ${p1a.x} ${p1a.y}`, + `Q ${p1.x} ${p1.y} ${p1b.x} ${p1b.y}`, + `L ${p2a.x} ${p2a.y}`, + `Q ${p2.x} ${p2.y} ${p2b.x} ${p2b.y}`, + `L ${p3.x} ${p3.y}`, + ].join(' '); +} + +export const Flow = (props: { nodes: FlowNode[] }) => { + const [hoveredNodeId, setHoveredNodeId] = useState(null); + const [nodeSizes, setNodeSizes] = useState>({}); + const [nodes, edges, graphSize] = useMemo(() => { + if (Object.keys(nodeSizes).length === 0) { + return [ + props.nodes.map(node => ({ ...node, x: 0, y: 0, width: 0, height: 0 })), + [], + { width: 0, height: 0 }, + ]; + } + + const graph = new dagre.graphlib.Graph(); + + graph.setDefaultEdgeLabel(() => ({})); + + graph.setGraph({ + rankdir: 'TB', + nodesep: 36, + ranksep: 36, + marginx: 24, + marginy: 24, + graph: 'tight-tree', + }); + + for (const node of props.nodes) { + graph.setNode(node.id, { + width: nodeSizes[node.id]?.width ?? 100, + height: nodeSizes[node.id]?.height ?? 100, + }); + } + + for (const node of props.nodes) { + if (node.next) { + for (const next of node.next) { + graph.setEdge(node.id, next); + } + } + } + + dagre.layout(graph); + + return [ + props.nodes.map(node => { + const graphNode = graph.node(node.id); + + return { + ...node, + x: graphNode?.x ?? 0, + y: graphNode?.y ?? 0, + width: graphNode?.width ?? 0, + height: graphNode?.height ?? 0, + }; + }), + graph.edges().map(edge => { + return { + from: edge.v, + to: edge.w, + }; + }), + { width: graph.graph().width, height: graph.graph().height }, + ]; + }, [nodeSizes, props.nodes]); + + const findFollowers = useCallback( + (nodeId: string): FlowNode[] => { + const node = nodes.find(node => node.id === nodeId); + + if (!node) { + return [] as FlowNode[]; + } + + return ( + (node.next + ?.map(next => { + return [nodes.find(node => node.id === next), ...findFollowers(next)].filter(Boolean); + }) + .flat(Infinity) as FlowNode[]) ?? [] + ); + }, + [nodes], + ); + + const hoveredNodeFollowers = useMemo(() => { + if (!hoveredNodeId) { + return []; + } + + return findFollowers(hoveredNodeId); + }, [hoveredNodeId, findFollowers]); + + return ( +
+
+
+ + {edges.map(edge => { + const fromNode = nodes.find(node => node.id === edge.from); + const toNode = nodes.find(node => node.id === edge.to); + + if (!fromNode || !toNode) { + return null; + } + + const isHovered = hoveredNodeId === edge.from; + const isFollowingHoveredNode = hoveredNodeFollowers.some( + follower => follower.id === edge.from, + ); + + return ( + + ); + })} + + {nodes.map(node => { + const isHovered = hoveredNodeId === node.id; + const isFollowingHoveredNode = hoveredNodeFollowers.some( + follower => follower.id === node.id, + ); + const hasFollowers = !!node.next?.length; + const hasPrevious = nodes.some(n => n.next?.includes(node.id)); + + return ( +
{ + if (ref && !nodeSizes[node.id]) { + setNodeSizes(prev => ({ + ...prev, + [node.id]: { width: ref.clientWidth, height: ref.clientHeight }, + })); + } + }} + className={cn( + 'bg-card absolute flex w-64 flex-col justify-start gap-2 rounded-lg border p-2 text-sm shadow-sm transition-all', + { + 'border-primary shadow-primary/5 shadow-xl': isHovered || isFollowingHoveredNode, + }, + )} + style={{ + left: node.x, + top: node.y, + }} + onMouseEnter={() => setHoveredNodeId(node.id)} + onMouseLeave={() => setHoveredNodeId(null)} + > +
+ {node.icon ? node.icon({ className: 'size-4 text-secondary-foreground' }) : null} + {node.title} +
+
+ {node.content ? node.content({ node }) : null} +
+ {hasFollowers && ( +
+ )} + {hasPrevious && ( +
+ )} +
+ ); + })} +
+
+ ); +}; diff --git a/packages/libraries/laboratory/src/components/laboratory/operation.tsx b/packages/libraries/laboratory/src/components/laboratory/operation.tsx index 7d1d2da5c1c..f4bfe43e056 100644 --- a/packages/libraries/laboratory/src/components/laboratory/operation.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/operation.tsx @@ -1,5 +1,6 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { + AlignLeftIcon, BookmarkIcon, CircleCheckIcon, CircleXIcon, @@ -7,6 +8,10 @@ import { FileTextIcon, HistoryIcon, MoreHorizontalIcon, + NetworkIcon, + PanelLeftCloseIcon, + PanelLeftOpenIcon, + PanelRightCloseIcon, PlayIcon, PowerIcon, PowerOffIcon, @@ -16,6 +21,9 @@ import { compressToEncodedURIComponent } from 'lz-string'; import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; import { toast } from 'sonner'; import { z } from 'zod'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; +import { ToggleGroup, ToggleGroupItem } from '@/laboratory/components/ui/toggle-group'; +import { QueryPlanTree, renderQueryPlan } from '@/lib/query-plan'; import { DropdownMenuTrigger } from '@radix-ui/react-dropdown-menu'; import { useForm } from '@tanstack/react-form'; import type { @@ -178,6 +186,48 @@ export const ResponsePreflight = ({ historyItem }: { historyItem?: LaboratoryHis ); }; +export const ResponseQueryPlan = ({ historyItem }: { historyItem?: LaboratoryHistory | null }) => { + const [mode, setMode] = useState<'text' | 'visual'>('text'); + + return ( +
+ setMode(value as 'text' | 'visual')} + > + + + Text + + + + Visual + + + {mode === 'visual' ? ( + + ) : ( + + )} +
+ ); +}; export const ResponseSubscription = ({ historyItem, @@ -245,6 +295,8 @@ export const ResponseSubscription = ({ }; export const Response = ({ historyItem }: { historyItem?: LaboratoryHistoryRequest | null }) => { + const [isFullScreen, setIsFullScreen] = useState(false); + const isError = useMemo(() => { if (!historyItem) { return false; @@ -262,11 +314,48 @@ export const Response = ({ historyItem }: { historyItem?: LaboratoryHistoryReque }, [historyItem]); return ( - - + + + {isFullScreen ? ( + + + + + Minimize panel + + ) : ( + + + + + Maximize panel + + )} Response + + Query Plan + Headers @@ -315,6 +404,9 @@ export const Response = ({ historyItem }: { historyItem?: LaboratoryHistoryReque + + + @@ -735,7 +827,7 @@ export const Operation = (props: { }, [props.historyItem]); return ( -
+
diff --git a/packages/libraries/laboratory/src/components/laboratory/settings.tsx b/packages/libraries/laboratory/src/components/laboratory/settings.tsx index 852f170dc20..020297ac586 100644 --- a/packages/libraries/laboratory/src/components/laboratory/settings.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/settings.tsx @@ -1,4 +1,6 @@ import { z } from 'zod'; +import { Input } from '@/components/ui/input'; +import { Switch } from '@/components/ui/switch'; import { useForm } from '@tanstack/react-form'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/card'; import { Field, FieldGroup, FieldLabel } from '../ui/field'; @@ -8,6 +10,17 @@ import { useLaboratory } from './context'; const settingsFormSchema = z.object({ fetch: z.object({ credentials: z.enum(['include', 'omit', 'same-origin']), + timeout: z.number().optional(), + retry: z.number().optional(), + useGETForQueries: z.boolean().optional(), + }), + subscriptions: z.object({ + protocol: z.enum(['SSE', 'GRAPHQL_SSE', 'WS', 'LEGACY_WS']), + }), + introspection: z.object({ + queryName: z.string().optional(), + method: z.enum(['GET', 'POST']).optional(), + schemaDescription: z.boolean().optional(), }), }); @@ -25,12 +38,12 @@ export const Settings = () => { }); return ( -
+
@@ -66,6 +79,154 @@ export const Settings = () => { ); }} + + {field => { + return ( + + Timeout + field.handleChange(Number(e.target.value))} + /> + + ); + }} + + + {field => { + return ( + + Retry + field.handleChange(Number(e.target.value))} + /> + + ); + }} + + + {field => { + return ( + + + Use GET for queries + + ); + }} + + + + + + + Subscriptions + + Configure the subscriptions options for the laboratory. + + + + + + {field => { + const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; + + return ( + + Protocol + + + ); + }} + + + + + + + Introspection + + Configure the introspection options for the laboratory. + + + + + + {field => { + return ( + + Query name + field.handleChange(e.target.value)} + /> + + ); + }} + + + {field => { + const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; + + return ( + + Method + + + ); + }} + + + {field => { + return ( + + + Schema description + + ); + }} + diff --git a/packages/libraries/laboratory/src/index.css b/packages/libraries/laboratory/src/index.css index 360dd602c97..89fdfd7f5af 100644 --- a/packages/libraries/laboratory/src/index.css +++ b/packages/libraries/laboratory/src/index.css @@ -64,7 +64,7 @@ --background: var(--hive-laboratory-background, var(--color-neutral-2)); --foreground: var(--hive-laboratory-foreground, var(--color-neutral-11)); - --muted: var(--hive-laboratory-muted, 24 9.8% 10%); + --muted: var(--hive-laboratory-muted, var(--color-neutral-3)); --muted-foreground: var(--hive-laboratory-muted-foreground, var(--color-neutral-11)); --popover: var(--hive-laboratory-popover, var(--color-neutral-3)); @@ -80,7 +80,7 @@ --primary-foreground: var(--hive-laboratory-primary-foreground, var(--color-neutral-1)); --secondary: var(--hive-laboratory-secondary, var(--color-neutral-3)); - --secondary-foreground: var(--hive-laboratory-secondary-foreground, var(--color-neutral-11)); + --secondary-foreground: var(--hive-laboratory-secondary-foreground, var(--color-neutral-8)); --accent: var(--hive-laboratory-accent, var(--color-neutral-4)); --accent-foreground: var(--hive-laboratory-accent-foreground, var(--color-neutral-11)); diff --git a/packages/libraries/laboratory/src/index.tsx b/packages/libraries/laboratory/src/index.tsx index 27106660e28..88f3661e307 100644 --- a/packages/libraries/laboratory/src/index.tsx +++ b/packages/libraries/laboratory/src/index.tsx @@ -1,5 +1,5 @@ import ReactDOM from 'react-dom/client'; -import { Laboratory } from './components/laboratory/laboratory'; +import { Laboratory, LaboratoryProps } from './components/laboratory/laboratory'; export * from './components/laboratory/laboratory'; export * from './components/laboratory/context'; @@ -17,7 +17,7 @@ export * from './lib/tabs'; export * from './lib/tests'; export * from './lib/plugins'; -export const renderLaboratory = (el: HTMLElement) => { +export const renderLaboratory = (el: HTMLElement, props: LaboratoryProps) => { const prefix = 'hive-laboratory'; const getLocalStorage = (key: string) => { @@ -74,6 +74,7 @@ export const renderLaboratory = (el: HTMLElement) => { onHistoryChange={history => { setLocalStorage('history', history); }} + {...props} />, ); }; diff --git a/packages/libraries/laboratory/src/lib/query-plan.tsx b/packages/libraries/laboratory/src/lib/query-plan.tsx new file mode 100644 index 00000000000..63500ace0f6 --- /dev/null +++ b/packages/libraries/laboratory/src/lib/query-plan.tsx @@ -0,0 +1,710 @@ +import { useMemo } from 'react'; +import { parse, print } from 'graphql'; +import { + Box, + Boxes, + ClockIcon, + GitForkIcon, + Layers2Icon, + ListOrderedIcon, + LucideProps, + NetworkIcon, + UnlinkIcon, +} from 'lucide-react'; +import { v4 as uuidv4 } from 'uuid'; +import { Flow, FlowNode } from '@/components/flow'; +import { GraphQLIcon } from '@/components/icons'; +import { cn } from '@/lib/utils'; + +export type QueryPlan = { + kind: 'QueryPlan'; + node?: PlanNode | null; +}; + +export type PlanNode = + | FetchNodePlan + | BatchFetchNodePlan + | SequenceNodePlan + | ParallelNodePlan + | FlattenNodePlan + | ConditionNodePlan + | SubscriptionNodePlan + | DeferNodePlan; + +export type OperationKind = 'Query' | 'Mutation' | 'Subscription' | string; + +export type SubgraphFetchOperation = { + documentStr: string; + hash?: number | string; + document?: unknown; +}; + +export type SelectionSet = SelectionItem[]; + +export type SelectionItem = { + kind?: 'InlineFragment'; + typeCondition?: string | null; + selections?: + | { + kind: 'Field'; + name: string; + }[] + | null; +}; +// | { +// kind?: 'FragmentSpread'; +// name: string; +// } +// | Record; + +export type ValueObject = { + [key: string]: Value; +}; + +export type Value = + | string + | number + | boolean + | null + | { kind?: 'Variable'; variable?: string; name?: string } + | Value[] + | ValueObject; + +export type FetchNodePlan = { + kind: 'Fetch'; + serviceName: string; + variableUsages?: string[] | Set | null; + operationKind?: OperationKind | null; + operationName?: string | null; + operation: string; + requires?: SelectionItem[] | null; + inputRewrites?: FetchRewrite[] | null; + outputRewrites?: FetchRewrite[] | null; +}; + +export type BatchFetchNodePlan = { + kind: 'BatchFetch'; + serviceName: string; + variableUsages?: string[] | Set | null; + operationKind?: OperationKind | null; + operationName?: string | null; + operation: string; + entityBatch: EntityBatch; +}; + +export type EntityBatch = { + aliases: EntityBatchAlias[]; +}; + +export type EntityBatchAlias = { + alias: string; + representationsVariableName: string; + paths: FlattenNodePath; + requires: SelectionSet; + inputRewrites?: FetchRewrite[] | null; + outputRewrites?: FetchRewrite[] | null; +}; + +export type FlattenNodePlan = { + kind: 'Flatten'; + path: FlattenNodePath; + node: PlanNode; +}; + +export type SequenceNodePlan = { + kind: 'Sequence'; + nodes: PlanNode[]; +}; + +export type ParallelNodePlan = { + kind: 'Parallel'; + nodes: PlanNode[]; +}; + +export type ConditionNodePlan = { + kind: 'Condition'; + condition: string; + ifClause?: PlanNode | null; + elseClause?: PlanNode | null; +}; + +export type SubscriptionNodePlan = { + kind: 'Subscription'; + primary: PlanNode; +}; + +export type DeferNodePlan = { + kind: 'Defer'; + primary: DeferPrimary; + deferred: DeferredNode[]; +}; + +export type DeferPrimary = { + subselection?: string | null; + node?: PlanNode | null; +}; + +export type DeferredNode = { + depends: DeferDependency[]; + label?: string | null; + queryPath: string[]; + subselection?: string | null; + node?: PlanNode | null; +}; + +export type DeferDependency = { + id: string; + deferLabel?: string | null; +}; + +export type FetchRewrite = ValueSetter | KeyRenamer; + +export type ValueSetter = { + path: FetchNodePathSegment[]; + setValueTo: string; +}; + +export type KeyRenamer = { + path: FetchNodePathSegment[]; + renameKeyTo: string; +}; + +export type FetchNodePathSegment = { Key: string } | { TypenameEquals: string[] | Set }; + +export type FlattenNodePathSegment = + | { Field: string } + | { TypeCondition: string[] | Set } + | '@'; + +export type FlattenNodePath = FlattenNodePathSegment[]; + +function indent(depth: number): string { + return ' '.repeat(depth); +} + +function normalizeStringSet(value: string[] | Set | null | undefined): string[] { + if (!value) return []; + return Array.isArray(value) ? value : Array.from(value); +} + +function isObject(value: unknown): value is Record { + return !!value && typeof value === 'object' && !Array.isArray(value); +} + +function renderFlattenPathSegment(seg: FlattenNodePathSegment): string { + if (seg === '@') return '@'; + + if (isObject(seg) && 'Field' in seg) { + return String(seg.Field); + } + + if (isObject(seg) && 'TypeCondition' in seg) { + const names = normalizeStringSet(seg.TypeCondition as string[] | Set); + return `|[${names.join('|')}]`; + } + + return String(seg); +} + +export function renderFlattenPath(path: FlattenNodePath): string { + let out = ''; + + for (let i = 0; i < path.length; i++) { + const current = path[i]; + const next = path[i + 1]; + out += renderFlattenPathSegment(current); + + if (next !== undefined) { + const nextIsTypeCondition = isObject(next) && 'TypeCondition' in next; + if (!nextIsTypeCondition) out += '.'; + } + } + + return out; +} + +export function renderSelectionSet( + selectionSet: SelectionItem[] | null | undefined, + depth = 0, +): string { + if (!selectionSet?.length) return ''; + + const lines: string[] = []; + + for (const item of selectionSet) { + lines.push(`${indent(depth)}... on ${item.typeCondition}`); + + for (const property of item.selections ?? []) { + lines.push(`${indent(depth + 1)}${property.name}`); + } + } + + return lines.join('\n'); +} + +export function renderQueryPlan(plan: QueryPlan): string { + const lines: string[] = []; + lines.push('QueryPlan {'); + + if (plan.node) { + lines.push(renderPlanNode(plan.node, 1)); + } else { + lines.push(`${indent(1)}None`); + } + + lines.push('}'); + return lines.join('\n'); +} + +export function renderPlanNode(node: PlanNode, depth = 0): string { + switch (node.kind) { + case 'Fetch': + return renderFetchNode(node, depth); + + case 'BatchFetch': + return renderBatchFetchNode(node, depth); + + case 'Flatten': + return renderFlattenNode(node, depth); + + case 'Sequence': + return renderSequenceNode(node, depth); + + case 'Parallel': + return renderParallelNode(node, depth); + + case 'Condition': + return renderConditionNode(node, depth); + + case 'Subscription': + return renderSubscriptionNode(node, depth); + + case 'Defer': + return renderDeferNode(node, depth); + + default: + return `${indent(depth)}`; + } +} + +export function renderFetchNode(node: FetchNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Fetch(service: "${node.serviceName}") {`); + + if (node.requires) { + lines.push(`${indent(depth + 1)}requires {`); + const requires = renderSelectionSet(node.requires, depth + 2); + if (requires) lines.push(requires); + lines.push(`${indent(depth + 1)}}`); + } + + lines.push(`${indent(depth + 1)}operation {`); + lines.push(renderMultilineBlock(print(parse(node.operation)), depth + 2)); + lines.push(`${indent(depth + 1)}}`); + + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderBatchFetchNode(node: BatchFetchNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}BatchFetch(service: "${node.serviceName}") {`); + + for (const alias of node.entityBatch.aliases) { + lines.push(`${indent(depth + 1)}alias "${alias.alias}" {`); + lines.push(`${indent(depth + 2)}representations: $${alias.representationsVariableName}`); + lines.push(`${indent(depth + 2)}paths: [${renderFlattenPath(alias.paths)}]`); + lines.push(`${indent(depth + 2)}requires {`); + const requires = renderSelectionSet(alias.requires, depth + 3); + if (requires) lines.push(requires); + lines.push(`${indent(depth + 2)}}`); + lines.push(`${indent(depth + 1)}}`); + } + + lines.push(`${indent(depth + 1)}operation {`); + lines.push(renderMultilineBlock(print(parse(node.operation)), depth + 2)); + lines.push(`${indent(depth + 1)}}`); + + return lines.join('\n'); +} + +export function renderFlattenNode(node: FlattenNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Flatten(path: "${renderFlattenPath(node.path)}") {`); + lines.push(renderPlanNode(node.node, depth + 1)); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderSequenceNode(node: SequenceNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Sequence {`); + for (const child of node.nodes) { + lines.push(renderPlanNode(child, depth + 1)); + } + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderParallelNode(node: ParallelNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Parallel {`); + for (const child of node.nodes) { + lines.push(renderPlanNode(child, depth + 1)); + } + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderConditionNode(node: ConditionNodePlan, depth = 0): string { + const lines: string[] = []; + + if (node.ifClause && !node.elseClause) { + lines.push(`${indent(depth)}Include(if: $${node.condition}) {`); + lines.push(renderPlanNode(node.ifClause, depth + 1)); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); + } + + if (!node.ifClause && node.elseClause) { + lines.push(`${indent(depth)}Skip(if: $${node.condition}) {`); + lines.push(renderPlanNode(node.elseClause, depth + 1)); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); + } + + if (node.ifClause && node.elseClause) { + lines.push(`${indent(depth)}Condition(if: $${node.condition}) {`); + lines.push(`${indent(depth + 1)}if {`); + lines.push(renderPlanNode(node.ifClause, depth + 2)); + lines.push(`${indent(depth + 1)}}`); + lines.push(`${indent(depth + 1)}else {`); + lines.push(renderPlanNode(node.elseClause, depth + 2)); + lines.push(`${indent(depth + 1)}}`); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); + } + + return `${indent(depth)}Condition(if: $${node.condition}) {}`; +} + +export function renderSubscriptionNode(node: SubscriptionNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Subscription {`); + lines.push(`${indent(depth + 1)}primary {`); + lines.push(renderPlanNode(node.primary, depth + 2)); + lines.push(`${indent(depth + 1)}}`); + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +export function renderDeferNode(node: DeferNodePlan, depth = 0): string { + const lines: string[] = []; + lines.push(`${indent(depth)}Defer {`); + + lines.push(`${indent(depth + 1)}primary {`); + if (node.primary.subselection) { + lines.push(`${indent(depth + 2)}subselection: ${JSON.stringify(node.primary.subselection)}`); + } + if (node.primary.node) { + lines.push(renderPlanNode(node.primary.node, depth + 2)); + } + lines.push(`${indent(depth + 1)}}`); + + if (node.deferred.length > 0) { + lines.push(`${indent(depth + 1)}deferred {`); + for (const d of node.deferred) { + lines.push(`${indent(depth + 2)}item {`); + if (d.label) lines.push(`${indent(depth + 3)}label: ${JSON.stringify(d.label)}`); + lines.push(`${indent(depth + 3)}queryPath: [${d.queryPath.join(', ')}]`); + if (d.subselection) { + lines.push(`${indent(depth + 3)}subselection: ${JSON.stringify(d.subselection)}`); + } + if (d.depends.length) { + lines.push( + `${indent(depth + 3)}depends: [${d.depends + .map(x => (x.deferLabel ? `${x.id}:${x.deferLabel}` : x.id)) + .join(', ')}]`, + ); + } + if (d.node) { + lines.push(renderPlanNode(d.node, depth + 3)); + } + lines.push(`${indent(depth + 2)}}`); + } + lines.push(`${indent(depth + 1)}}`); + } + + lines.push(`${indent(depth)}}`); + return lines.join('\n'); +} + +function renderMultilineBlock(value: string, depth = 0): string { + return value + .split('\n') + .map(line => `${indent(depth)}${line}`) + .join('\n'); +} + +export type ExtractedOperation = { + path: string; + nodeKind: 'Fetch' | 'BatchFetch'; + serviceName: string; + operationKind?: string | null; + operationName?: string | null; + graphql: string; +}; + +export function extractOperations(plan: QueryPlan): ExtractedOperation[] { + if (!plan.node) return []; + return extractOperationsFromNode(plan.node, 'root'); +} + +function extractOperationsFromNode(node: PlanNode, path: string): ExtractedOperation[] { + switch (node.kind) { + case 'Fetch': + return [ + { + path, + nodeKind: 'Fetch', + serviceName: node.serviceName, + operationKind: node.operationKind ?? null, + operationName: node.operationName ?? null, + graphql: node.operation, + }, + ]; + + case 'BatchFetch': + return [ + { + path, + nodeKind: 'BatchFetch', + serviceName: node.serviceName, + operationKind: node.operationKind ?? null, + operationName: node.operationName ?? null, + graphql: node.operation, + }, + ]; + + case 'Flatten': + return extractOperationsFromNode( + node.node, + `${path}.flatten(${renderFlattenPath(node.path)})`, + ); + + case 'Sequence': + return node.nodes.flatMap((child, i) => + extractOperationsFromNode(child, `${path}.sequence[${i}]`), + ); + + case 'Parallel': + return node.nodes.flatMap((child, i) => + extractOperationsFromNode(child, `${path}.parallel[${i}]`), + ); + + case 'Condition': { + const out: ExtractedOperation[] = []; + if (node.ifClause) { + out.push(...extractOperationsFromNode(node.ifClause, `${path}.if($${node.condition})`)); + } + if (node.elseClause) { + out.push(...extractOperationsFromNode(node.elseClause, `${path}.else($${node.condition})`)); + } + return out; + } + + case 'Subscription': + return extractOperationsFromNode(node.primary, `${path}.subscription.primary`); + + case 'Defer': { + const out: ExtractedOperation[] = []; + if (node.primary.node) { + out.push(...extractOperationsFromNode(node.primary.node, `${path}.defer.primary`)); + } + node.deferred.forEach((d, i) => { + if (d.node) { + out.push( + ...extractOperationsFromNode( + d.node, + `${path}.defer.deferred[${i}]${d.label ? `(${d.label})` : ''}`, + ), + ); + } + }); + return out; + } + + default: + return []; + } +} + +export interface QueryPlanNode extends FlowNode { + kind: PlanNode['kind'] | 'Root'; +} + +function visitNode( + node: PlanNode, + parentNode: Partial, + nodes: QueryPlanNode[], +): void { + const result: Partial = { id: uuidv4() }; + result.title = node.kind; + result.kind = node.kind; + + switch (node.kind) { + case 'Fetch': + result.content = () => { + return ( +
+ Service + + {node.serviceName} + +
+ ); + }; + break; + + case 'BatchFetch': + result.content = () => { + return ( +
+ {node.entityBatch.aliases.map(alias => { + return ( +
+ {alias.alias} +
+ Paths + +
{alias.paths.length}
+
+
+
+ ); + })} +
+ ); + }; + break; + + case 'Flatten': + result.content = () => { + return ( +
+ Path + + {renderFlattenPath(node.path)} + +
+ ); + }; + visitNode(node.node, result, nodes); + break; + + case 'Sequence': + for (const child of node.nodes) { + visitNode(child, result, nodes); + } + break; + + case 'Parallel': + for (const child of node.nodes) { + visitNode(child, result, nodes); + } + break; + + case 'Condition': + result.content = () => { + return ( +
+ If + + ${node.condition} + +
+ ); + }; + + if (node.ifClause) { + result.title = 'Include'; + visitNode(node.ifClause, result, nodes); + } + if (node.elseClause) { + result.title = 'Skip'; + visitNode(node.elseClause, result, nodes); + } + break; + + case 'Subscription': + visitNode(node.primary, result, nodes); + break; + + case 'Defer': + if (node.primary.node) { + visitNode(node.primary.node, result, nodes); + } + for (const deferred of node.deferred) { + if (deferred.node) { + visitNode(deferred.node, result, nodes); + } + } + break; + + default: + break; + } + + parentNode.next = [...(parentNode.next ?? []), result.id!]; + + nodes.push(result as QueryPlanNode); +} + +export const queryPlanNodeIcon = ( + kind: QueryPlanNode['kind'], +): ((props: LucideProps) => React.ReactNode) => { + return (props: LucideProps) => { + switch (kind) { + case 'Root': + return ; + case 'Fetch': + return ; + case 'BatchFetch': + return ; + case 'Flatten': + return ; + case 'Sequence': + return ; + case 'Parallel': + return ; + case 'Condition': + return ; + case 'Subscription': + return ; + case 'Defer': + return ; + } + }; +}; + +export function QueryPlanTree(props: { plan: QueryPlan }) { + const nodes = useMemo(() => { + const nodes: QueryPlanNode[] = []; + + const rootNode: QueryPlanNode = { + id: uuidv4(), + title: 'QueryPlan', + kind: 'Root', + }; + + nodes.push(rootNode); + + if (props.plan.node) { + visitNode(props.plan.node, rootNode, nodes); + } + + return nodes.map(node => ({ ...node, icon: queryPlanNodeIcon(node.kind) })); + }, [props.plan]); + + return ; +} diff --git a/packages/libraries/laboratory/src/lib/settings.ts b/packages/libraries/laboratory/src/lib/settings.ts index 5261aa69f33..8b81a4b6d00 100644 --- a/packages/libraries/laboratory/src/lib/settings.ts +++ b/packages/libraries/laboratory/src/lib/settings.ts @@ -3,6 +3,17 @@ import { useCallback, useState } from 'react'; export type LaboratorySettings = { fetch: { credentials: 'include' | 'omit' | 'same-origin'; + timeout?: number; + retry?: number; + useGETForQueries?: boolean; + }; + subscriptions: { + protocol: 'SSE' | 'GRAPHQL_SSE' | 'WS' | 'LEGACY_WS'; + }; + introspection: { + queryName?: string; + method?: 'GET' | 'POST'; + schemaDescription?: boolean; }; }; @@ -22,6 +33,17 @@ export const useSettings = (props: { props.defaultSettings ?? { fetch: { credentials: 'same-origin', + timeout: 10000, + retry: 3, + useGETForQueries: false, + }, + subscriptions: { + protocol: 'WS', + }, + introspection: { + queryName: 'IntrospectionQuery', + method: 'POST', + schemaDescription: false, }, }, ); diff --git a/packages/libraries/render-laboratory/src/index.ts b/packages/libraries/render-laboratory/src/index.ts index 2147449e611..9861d2d3a89 100644 --- a/packages/libraries/render-laboratory/src/index.ts +++ b/packages/libraries/render-laboratory/src/index.ts @@ -8,6 +8,7 @@ import { jsonWorker, typescriptWorker, } from './laboratory.js'; +import { LaboratoryProps } from '@graphql-hive/laboratory'; export const renderLaboratory = (opts?: GraphiQLOptions) => /* HTML */ ` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19c39bf9c77..b48c8b731a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -284,7 +284,7 @@ importers: devDependencies: '@graphql-hive/gateway': specifier: ^2.1.19 - version: 2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3) + version: 2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3) '@types/js-yaml': specifier: 4.0.9 version: 4.0.9 @@ -644,6 +644,9 @@ importers: packages/libraries/laboratory: dependencies: + dagrejs: + specifier: ^0.2.1 + version: 0.2.1 radix-ui: specifier: ^1.4.3 version: 1.4.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -652,8 +655,8 @@ importers: version: 13.0.0 devDependencies: '@dagrejs/dagre': - specifier: ^1.1.8 - version: 1.1.8 + specifier: ^2.0.4 + version: 2.0.4 '@dnd-kit/core': specifier: ^6.3.1 version: 6.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -830,7 +833,7 @@ importers: version: 0.52.2 monaco-graphql: specifier: ^1.7.3 - version: 1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.8.1) + version: 1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.4.2) monacopilot: specifier: ^1.2.12 version: 1.2.12(monaco-editor@0.52.2) @@ -917,7 +920,7 @@ importers: version: 0.16.6(typescript@5.7.3) graphql-yoga: specifier: 5.13.3 - version: 5.13.3(graphql@16.12.0) + version: 5.13.3(graphql@16.9.0) ioredis: specifier: ^5.0.0 version: 5.8.2 @@ -936,7 +939,7 @@ importers: version: link:../laboratory graphql-yoga: specifier: 5.13.3 - version: 5.13.3(graphql@16.12.0) + version: 5.13.3(graphql@16.9.0) publishDirectory: dist packages/libraries/router: {} @@ -1670,7 +1673,7 @@ importers: version: 1.0.9(pino@10.3.0) '@graphql-hive/plugin-opentelemetry': specifier: 1.3.0 - version: 1.3.0(encoding@0.1.13)(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0) + version: 1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@opentelemetry/api': specifier: 1.9.0 version: 1.9.0 @@ -2351,7 +2354,7 @@ importers: version: 0.52.2 monaco-graphql: specifier: ^1.7.2 - version: 1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.8.1) + version: 1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.4.2) monaco-themes: specifier: 0.4.4 version: 0.4.4 @@ -4045,12 +4048,11 @@ packages: '@cypress/xvfb@1.2.4': resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} - '@dagrejs/dagre@1.1.8': - resolution: {integrity: sha512-5SEDlndt4W/LaVzPYJW+bSmSEZc9EzTf8rJ20WCKvjS5EAZAN0b+x0Yww7VMT4R3Wootkg+X9bUfUxazYw6Blw==} + '@dagrejs/dagre@2.0.4': + resolution: {integrity: sha512-J6vCWTNpicHF4zFlZG1cS5DkGzMr9941gddYkakjrg3ZNev4bbqEgLHFTWiFrcJm7UCRu7olO3K6IRDd9gSGhA==} - '@dagrejs/graphlib@2.2.4': - resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==} - engines: {node: '>17.0.0'} + '@dagrejs/graphlib@3.0.4': + resolution: {integrity: sha512-HxZ7fCvAwTLCWCO0WjDkzAFQze8LdC6iOpKbetDKHIuDfIgMlIzYzqZ4nxwLlclQX+3ZVeZ1K2OuaOE2WWcyOg==} '@date-fns/utc@2.1.1': resolution: {integrity: sha512-SlJDfG6RPeEX8wEVv6ZB3kak4MmbtyiI2qX/5zuKdordbrhB/iaJ58GVMZgJ6P1sJaM1gMgENFYYeg1JWrCFrA==} @@ -12387,6 +12389,9 @@ packages: resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} engines: {node: '>=12'} + dagrejs@0.2.1: + resolution: {integrity: sha512-4bb1y+4aM1xtkK7ieP0V7Xn/34GQfnCapl0yubrOMX8Qb/PIwM1Dii2uUBv/KtuzrQtxPliSP4r5MQBsnP6gNg==} + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -13921,6 +13926,9 @@ packages: react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 + graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + graphql-config@4.5.0: resolution: {integrity: sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==} engines: {node: '>= 10.0.0'} @@ -19911,14 +19919,6 @@ snapshots: '@apollo/utils.logger': 2.0.0 graphql: 16.9.0 - '@apollo/server-gateway-interface@2.0.0(graphql@16.12.0)': - dependencies: - '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.fetcher': 3.1.0 - '@apollo/utils.keyvaluecache': 4.0.0 - '@apollo/utils.logger': 3.0.0 - graphql: 16.12.0 - '@apollo/server-gateway-interface@2.0.0(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -19979,10 +19979,6 @@ snapshots: '@apollo/utils.isnodelike': 3.0.0 sha.js: 2.4.11 - '@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 @@ -20016,50 +20012,23 @@ snapshots: '@apollo/utils.logger@3.0.0': {} - '@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 - '@apollo/utils.removealiases@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@apollo/utils.removealiases@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 - '@apollo/utils.sortast@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - lodash.sortby: 4.7.0 - '@apollo/utils.sortast@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 lodash.sortby: 4.7.0 - '@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 - '@apollo/utils.usagereporting@2.1.0(graphql@16.12.0)': - dependencies: - '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.dropunuseddefinitions': 2.0.1(graphql@16.12.0) - '@apollo/utils.printwithreducedwhitespace': 2.0.1(graphql@16.12.0) - '@apollo/utils.removealiases': 2.0.1(graphql@16.12.0) - '@apollo/utils.sortast': 2.0.1(graphql@16.12.0) - '@apollo/utils.stripsensitiveliterals': 2.0.1(graphql@16.12.0) - graphql: 16.12.0 - '@apollo/utils.usagereporting@2.1.0(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -22727,11 +22696,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@dagrejs/dagre@1.1.8': + '@dagrejs/dagre@2.0.4': dependencies: - '@dagrejs/graphlib': 2.2.4 + '@dagrejs/graphlib': 3.0.4 - '@dagrejs/graphlib@2.2.4': {} + '@dagrejs/graphlib@3.0.4': {} '@date-fns/utc@2.1.1': {} @@ -22901,25 +22870,12 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@envelop/disable-introspection@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - graphql: 16.12.0 - tslib: 2.8.1 - '@envelop/disable-introspection@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 graphql: 16.9.0 tslib: 2.8.1 - '@envelop/extended-validation@7.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@envelop/extended-validation@7.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -22927,16 +22883,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@envelop/generic-auth@11.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/extended-validation': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@envelop/generic-auth@11.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -22972,12 +22918,6 @@ snapshots: '@envelop/core': 5.5.1 graphql: 16.9.0 - '@envelop/on-resolve@7.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - '@envelop/on-resolve@7.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -22993,22 +22933,22 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@envelop/prometheus@14.0.0(@envelop/core@5.5.1)(graphql@16.12.0)(prom-client@15.1.3)': + '@envelop/prometheus@14.0.0(@envelop/core@5.5.1)(graphql@16.9.0)(prom-client@15.1.3)': dependencies: '@envelop/core': 5.5.1 - '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - graphql: 16.12.0 + '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.9.0) + graphql: 16.9.0 prom-client: 15.1.3 tslib: 2.8.1 - '@envelop/rate-limiter@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': + '@envelop/rate-limiter@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 - '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.9.0) + '@graphql-tools/utils': 10.9.1(graphql@16.9.0) '@types/picomatch': 4.0.2 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 lodash.get: 4.4.2 ms: 2.1.3 picomatch: 4.0.3 @@ -23024,17 +22964,6 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 - '@envelop/response-cache@7.1.3(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - fast-json-stable-stringify: 2.1.0 - graphql: 16.12.0 - lru-cache: 10.2.0 - tslib: 2.8.1 - '@envelop/response-cache@7.1.3(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -23046,17 +22975,6 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 - '@envelop/response-cache@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - fast-json-stable-stringify: 2.1.0 - graphql: 16.12.0 - lru-cache: 11.0.2 - tslib: 2.8.1 - '@envelop/response-cache@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -23739,23 +23657,6 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-hive/core@0.18.0(graphql@16.12.0)(pino@10.3.0)': - dependencies: - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/signal': 2.0.0 - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@whatwg-node/fetch': 0.10.13 - async-retry: 1.3.3 - events: 3.3.0 - graphql: 16.12.0 - js-md5: 0.8.3 - lodash.sortby: 4.7.0 - tiny-lru: 8.0.2 - transitivePeerDependencies: - - '@logtape/logtape' - - pino - - winston - '@graphql-hive/core@0.18.0(graphql@16.9.0)(pino@10.3.0)': dependencies: '@graphql-hive/logger': 1.0.9(pino@10.3.0) @@ -23773,106 +23674,6 @@ snapshots: - pino - winston - '@graphql-hive/gateway-runtime@2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/disable-introspection': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@envelop/generic-auth': 11.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@envelop/instrumentation': 1.0.0 - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-hive/signal': 2.0.0 - '@graphql-hive/yoga': 0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@25.5.0)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-response-cache': 0.104.18(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@graphql-yoga/plugin-apollo-usage-report': 0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@graphql-yoga/plugin-csrf-prevention': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) - '@graphql-yoga/plugin-defer-stream': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@types/node': 25.5.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.17 - '@whatwg-node/server-plugin-cookies': 1.0.5 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@fastify/websocket' - - '@logtape/logtape' - - '@nats-io/nats-core' - - crossws - - ioredis - - pino - - uWebSockets.js - - winston - - ws - - '@graphql-hive/gateway-runtime@2.5.0(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/disable-introspection': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@envelop/generic-auth': 11.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@envelop/instrumentation': 1.0.0 - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-hive/signal': 2.0.0 - '@graphql-hive/yoga': 0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@25.5.0)(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0) - '@graphql-mesh/plugin-response-cache': 0.104.18(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@graphql-yoga/plugin-apollo-usage-report': 0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@graphql-yoga/plugin-csrf-prevention': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) - '@graphql-yoga/plugin-defer-stream': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@types/node': 25.5.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.17 - '@whatwg-node/server-plugin-cookies': 1.0.5 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@fastify/websocket' - - '@logtape/logtape' - - '@nats-io/nats-core' - - crossws - - ioredis - - pino - - uWebSockets.js - - winston - - ws - '@graphql-hive/gateway-runtime@2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': dependencies: '@envelop/core': 5.5.1 @@ -23923,41 +23724,41 @@ snapshots: - winston - ws - '@graphql-hive/gateway@2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)': + '@graphql-hive/gateway@2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)': dependencies: '@commander-js/extra-typings': 14.0.0(commander@14.0.2) '@envelop/core': 5.5.1 '@escape.tech/graphql-armor-block-field-suggestions': 3.0.1 '@escape.tech/graphql-armor-max-depth': 2.4.2 '@escape.tech/graphql-armor-max-tokens': 2.5.1 - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/importer': 2.0.0 '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/plugin-aws-sigv4': 2.0.17(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-hive/plugin-opentelemetry': 1.3.0(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/plugin-aws-sigv4': 2.0.17(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-hive/plugin-opentelemetry': 1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-mesh/cache-cfw-kv': 0.105.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/cache-localforage': 0.105.17(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/cache-redis': 0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.12.0) - '@graphql-mesh/cache-upstash-redis': 0.1.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-http-cache': 0.105.17(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-jit': 0.2.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-jwt-auth': 2.0.9(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-prometheus': 2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0) - '@graphql-mesh/plugin-rate-limit': 0.105.5(@envelop/core@5.5.1)(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-snapshot': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/transport-http': 1.0.12(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/transport-http-callback': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/transport-ws': 2.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/code-file-loader': 8.1.26(graphql@16.12.0) - '@graphql-tools/graphql-file-loader': 8.1.7(graphql@16.12.0) - '@graphql-tools/load': 8.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-yoga/render-graphiql': 5.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) + '@graphql-mesh/cache-cfw-kv': 0.105.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cache-localforage': 0.105.17(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cache-redis': 0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.9.0) + '@graphql-mesh/cache-upstash-redis': 0.1.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-http-cache': 0.105.17(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-jit': 0.2.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-jwt-auth': 2.0.9(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-prometheus': 2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0) + '@graphql-mesh/plugin-rate-limit': 0.105.5(@envelop/core@5.5.1)(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-snapshot': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/transport-http': 1.0.12(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/transport-http-callback': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/transport-ws': 2.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/code-file-loader': 8.1.26(graphql@16.9.0) + '@graphql-tools/graphql-file-loader': 8.1.7(graphql@16.9.0) + '@graphql-tools/load': 8.1.6(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-yoga/render-graphiql': 5.16.2(graphql-yoga@5.17.1(graphql@16.9.0)) '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.208.0 '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) @@ -23973,9 +23774,9 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) commander: 14.0.2 dotenv: 17.2.3 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) - graphql-yoga: 5.17.1(graphql@16.12.0) + graphql: 16.9.0 + graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) + graphql-yoga: 5.17.1(graphql@16.9.0) tslib: 2.8.1 ws: 8.18.0 transitivePeerDependencies: @@ -24002,13 +23803,13 @@ snapshots: optionalDependencies: pino: 10.3.0 - '@graphql-hive/plugin-aws-sigv4@2.0.17(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-hive/plugin-aws-sigv4@2.0.17(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@aws-sdk/client-sts': 3.939.0 - '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) '@whatwg-node/promise-helpers': 1.3.2 aws4: 1.13.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -24019,84 +23820,6 @@ snapshots: - pino - winston - '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': - dependencies: - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.208.0 - '@opentelemetry/auto-instrumentations-node': 0.67.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@fastify/websocket' - - '@logtape/logtape' - - '@nats-io/nats-core' - - crossws - - encoding - - ioredis - - pino - - supports-color - - uWebSockets.js - - winston - - ws - - '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0)': - dependencies: - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.208.0 - '@opentelemetry/auto-instrumentations-node': 0.67.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@fastify/websocket' - - '@logtape/logtape' - - '@nats-io/nats-core' - - crossws - - encoding - - ioredis - - pino - - supports-color - - uWebSockets.js - - winston - - ws - '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': dependencies: '@graphql-hive/core': 0.18.0(graphql@16.9.0)(pino@10.3.0) @@ -24148,18 +23871,6 @@ snapshots: '@graphql-hive/signal@2.0.0': {} - '@graphql-hive/yoga@0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0)': - dependencies: - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - transitivePeerDependencies: - - '@logtape/logtape' - - pino - - winston - '@graphql-hive/yoga@0.46.0(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(pino@10.3.0)': dependencies: '@graphql-hive/core': 0.18.0(graphql@16.9.0)(pino@10.3.0) @@ -24403,48 +24114,48 @@ snapshots: - '@graphql-inspector/loaders' - yargs - '@graphql-mesh/cache-cfw-kv@0.105.16(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-cfw-kv@0.105.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-inmemory-lru@0.8.17(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-inmemory-lru@0.8.17(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-localforage@0.105.17(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-localforage@0.105.17(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cache-inmemory-lru': 0.8.17(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - graphql: 16.12.0 + '@graphql-mesh/cache-inmemory-lru': 0.8.17(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + graphql: 16.9.0 localforage: 1.10.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-redis@0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.12.0)': + '@graphql-mesh/cache-redis@0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.9.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@opentelemetry/api': 1.9.0 '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 + graphql: 16.9.0 ioredis: 5.8.2 ioredis-mock: 8.13.1(@types/ioredis-mock@8.2.5)(ioredis@5.8.2) tslib: 2.8.1 @@ -24453,114 +24164,46 @@ snapshots: - '@types/ioredis-mock' - supports-color - '@graphql-mesh/cache-upstash-redis@0.1.16(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-upstash-redis@0.1.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@upstash/redis': 1.35.6 '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cross-helpers@0.4.10(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - path-browserify: 1.0.1 - '@graphql-mesh/cross-helpers@0.4.10(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 path-browserify: 1.0.1 - '@graphql-mesh/fusion-runtime@1.6.2(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/fusion-runtime@1.6.2(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@envelop/core': 5.5.1 '@envelop/instrumentation': 1.0.0 '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@24.10.9)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@logtape/logtape' - - '@nats-io/nats-core' - - '@types/node' - - ioredis - - pino - - winston - - '@graphql-mesh/fusion-runtime@1.6.2(@types/node@25.5.0)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/instrumentation': 1.0.0 - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@logtape/logtape' - - '@nats-io/nats-core' - - '@types/node' - - ioredis - - pino - - winston - - '@graphql-mesh/fusion-runtime@1.6.2(@types/node@25.5.0)(graphql@16.12.0)(pino@10.3.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/instrumentation': 1.0.0 - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) + '@graphql-tools/executor': 1.5.0(graphql@16.9.0) + '@graphql-tools/federation': 4.2.6(@types/node@24.10.9)(graphql@16.9.0) + '@graphql-tools/merge': 9.1.5(graphql@16.9.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.9.0) + '@graphql-tools/stitching-directives': 4.0.8(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.9.0) '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) + graphql: 16.9.0 + graphql-yoga: 5.17.1(graphql@16.9.0) tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -24601,36 +24244,6 @@ snapshots: - pino - winston - '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.12.0)': - dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - json-stable-stringify: 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - - '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.12.0)(ioredis@5.8.2)': - dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - json-stable-stringify: 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) @@ -24646,37 +24259,37 @@ snapshots: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-http-cache@0.105.17(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-http-cache@0.105.17(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 http-cache-semantics: 4.1.1 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-jit@0.2.16(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-jit@0.2.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@envelop/core': 5.5.1 - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - graphql-jit: 0.8.7(graphql@16.12.0) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.9.1(graphql@16.9.0) + graphql: 16.9.0 + graphql-jit: 0.8.7(graphql@16.9.0) tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-jwt-auth@2.0.9(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-jwt-auth@2.0.9(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-yoga/plugin-jwt': 3.10.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-yoga/plugin-jwt': 3.10.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0) + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' @@ -24684,16 +24297,16 @@ snapshots: - ioredis - supports-color - '@graphql-mesh/plugin-prometheus@2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0)': + '@graphql-mesh/plugin-prometheus@2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0)': dependencies: - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-yoga/plugin-prometheus': 6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(prom-client@15.1.3) - graphql: 16.12.0 + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-yoga/plugin-prometheus': 6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(prom-client@15.1.3) + graphql: 16.9.0 prom-client: 15.1.3 tslib: 2.8.1 transitivePeerDependencies: @@ -24709,60 +24322,22 @@ snapshots: - winston - ws - '@graphql-mesh/plugin-rate-limit@0.105.5(@envelop/core@5.5.1)(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-rate-limit@0.105.5(@envelop/core@5.5.1)(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@envelop/rate-limiter': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@envelop/rate-limiter': 9.0.0(@envelop/core@5.5.1)(graphql@16.9.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.9.1(graphql@16.9.0) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@envelop/core' - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/response-cache': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-yoga/plugin-response-cache': 3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - cache-control-parser: 2.0.6 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - - '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.12.0)(ioredis@5.8.2)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/response-cache': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-yoga/plugin-response-cache': 3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - cache-control-parser: 2.0.6 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@envelop/core': 5.5.1 @@ -24782,28 +24357,20 @@ snapshots: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-snapshot@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-snapshot@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@whatwg-node/fetch': 0.10.13 - graphql: 16.12.0 + graphql: 16.9.0 minimatch: 10.2.4 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/string-interpolation@0.5.9(graphql@16.12.0)': - dependencies: - dayjs: 1.11.18 - graphql: 16.12.0 - json-pointer: 0.6.2 - lodash.get: 4.4.2 - tslib: 2.8.1 - '@graphql-mesh/string-interpolation@0.5.9(graphql@16.9.0)': dependencies: dayjs: 1.11.18 @@ -24812,44 +24379,6 @@ snapshots: lodash.get: 4.4.2 tslib: 2.8.1 - '@graphql-mesh/transport-common@1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-hive/signal': 2.0.0 - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@logtape/logtape' - - '@nats-io/nats-core' - - ioredis - - pino - - winston - - '@graphql-mesh/transport-common@1.0.12(graphql@16.12.0)(pino@10.3.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-hive/signal': 2.0.0 - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@logtape/logtape' - - '@nats-io/nats-core' - - ioredis - - pino - - winston - '@graphql-mesh/transport-common@1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@envelop/core': 5.5.1 @@ -24869,20 +24398,20 @@ snapshots: - pino - winston - '@graphql-mesh/transport-http-callback@1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-http-callback@1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@graphql-hive/signal': 2.0.0 - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -24891,17 +24420,17 @@ snapshots: - pino - winston - '@graphql-mesh/transport-http@1.0.12(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-http@1.0.12(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -24911,17 +24440,17 @@ snapshots: - pino - winston - '@graphql-mesh/transport-ws@2.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-ws@2.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor-graphql-ws': 3.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/executor-graphql-ws': 3.1.3(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + graphql: 16.9.0 + graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) tslib: 2.8.1 ws: 8.18.0 transitivePeerDependencies: @@ -24936,36 +24465,6 @@ snapshots: - utf-8-validate - winston - '@graphql-mesh/types@0.104.16(graphql@16.12.0)': - dependencies: - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - - '@graphql-mesh/types@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': - dependencies: - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - '@graphql-mesh/types@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) @@ -24981,54 +24480,6 @@ snapshots: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/utils@0.104.16(graphql@16.12.0)': - dependencies: - '@envelop/instrumentation': 1.0.0 - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-tools/wrap': 11.0.5(graphql@16.12.0) - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - dset: 3.1.4 - graphql: 16.12.0 - js-yaml: 4.1.1 - lodash.get: 4.4.2 - lodash.topath: 4.5.2 - tiny-lru: 11.4.7 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - - '@graphql-mesh/utils@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': - dependencies: - '@envelop/instrumentation': 1.0.0 - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-tools/wrap': 11.0.5(graphql@16.12.0) - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - dset: 3.1.4 - graphql: 16.12.0 - js-yaml: 4.1.1 - lodash.get: 4.4.2 - lodash.topath: 4.5.2 - tiny-lru: 11.4.7 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - '@graphql-mesh/utils@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@envelop/instrumentation': 1.0.0 @@ -25061,15 +24512,6 @@ snapshots: sync-fetch: 0.6.0-2 tslib: 2.8.1 - '@graphql-tools/batch-delegate@10.0.5(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/batch-delegate@10.0.5(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 11.1.3(graphql@16.9.0) @@ -25079,15 +24521,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/batch-delegate@10.0.8(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/batch-delegate@10.0.8(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) @@ -25106,14 +24539,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/batch-execute@10.0.4(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/batch-execute@10.0.4(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -25179,17 +24604,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/code-file-loader@8.1.26(graphql@16.12.0)': - dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.25(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - globby: 11.1.0 - graphql: 16.12.0 - tslib: 2.8.1 - unixify: 1.0.0 - transitivePeerDependencies: - - supports-color - '@graphql-tools/code-file-loader@8.1.26(graphql@16.9.0)': dependencies: '@graphql-tools/graphql-tag-pluck': 8.3.25(graphql@16.9.0) @@ -25226,18 +24640,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/delegate@11.1.3(graphql@16.12.0)': - dependencies: - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/delegate@11.1.3(graphql@16.9.0)': dependencies: '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) @@ -25250,18 +24652,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/delegate@12.0.2(graphql@16.12.0)': - dependencies: - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/delegate@12.0.2(graphql@16.9.0)': dependencies: '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) @@ -25309,12 +24699,6 @@ snapshots: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 - '@graphql-tools/executor-common@1.0.5(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - '@graphql-tools/executor-common@1.0.5(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -25380,13 +24764,13 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-graphql-ws@3.1.3(graphql@16.12.0)': + '@graphql-tools/executor-graphql-ws@3.1.3(graphql@16.9.0)': dependencies: - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) + graphql: 16.9.0 + graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) isows: 1.0.7(ws@8.18.0) tslib: 2.8.1 ws: 8.18.0 @@ -25440,36 +24824,21 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-http@3.0.7(@types/node@24.10.9)(graphql@16.12.0)': + '@graphql-tools/executor-http@3.0.7(@types/node@24.10.9)(graphql@16.9.0)': dependencies: '@graphql-hive/signal': 2.0.0 - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 meros: 1.3.2(@types/node@24.10.9) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-http@3.0.7(@types/node@25.5.0)(graphql@16.12.0)': - dependencies: - '@graphql-hive/signal': 2.0.0 - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - meros: 1.3.2(@types/node@25.5.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@types/node' - '@graphql-tools/executor-http@3.0.7(@types/node@25.5.0)(graphql@16.9.0)': dependencies: '@graphql-hive/signal': 2.0.0 @@ -25540,16 +24909,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/executor@1.5.0(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/executor@1.5.0(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -25560,42 +24919,22 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/federation@4.2.6(@types/node@24.10.9)(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@graphql-yoga/typed-event-target': 3.0.2 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/events': 0.1.2 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@types/node' - - '@graphql-tools/federation@4.2.6(@types/node@25.5.0)(graphql@16.12.0)': + '@graphql-tools/federation@4.2.6(@types/node@24.10.9)(graphql@16.9.0)': dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) + '@graphql-tools/executor': 1.5.0(graphql@16.9.0) + '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.9.0) + '@graphql-tools/merge': 9.1.5(graphql@16.9.0) + '@graphql-tools/schema': 10.0.29(graphql@16.9.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.9.0) '@graphql-yoga/typed-event-target': 3.0.2 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/events': 0.1.2 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -25704,17 +25043,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/graphql-file-loader@8.1.7(graphql@16.12.0)': - dependencies: - '@graphql-tools/import': 7.1.7(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - globby: 11.1.0 - graphql: 16.12.0 - tslib: 2.8.1 - unixify: 1.0.0 - transitivePeerDependencies: - - supports-color - '@graphql-tools/graphql-file-loader@8.1.7(graphql@16.9.0)': dependencies: '@graphql-tools/import': 7.1.7(graphql@16.9.0) @@ -25778,19 +25106,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.25(graphql@16.12.0)': - dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.29.0 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.25(graphql@16.9.0)': dependencies: '@babel/core': 7.28.5 @@ -25828,16 +25143,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.1.7(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@theguild/federation-composition': 0.20.2(graphql@16.12.0) - graphql: 16.12.0 - resolve-from: 5.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@graphql-tools/import@7.1.7(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -25896,11 +25201,11 @@ snapshots: p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/load@8.1.6(graphql@16.12.0)': + '@graphql-tools/load@8.1.6(graphql@16.9.0)': dependencies: - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/schema': 10.0.29(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + graphql: 16.9.0 p-limit: 3.1.0 tslib: 2.8.1 @@ -25910,24 +25215,12 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/merge@9.1.1(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/merge@9.1.1(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/merge@9.1.5(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/merge@9.1.5(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -25954,13 +25247,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/schema@10.0.25(graphql@16.12.0)': - dependencies: - '@graphql-tools/merge': 9.1.1(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/schema@10.0.25(graphql@16.9.0)': dependencies: '@graphql-tools/merge': 9.1.1(graphql@16.9.0) @@ -25968,13 +25254,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/schema@10.0.29(graphql@16.12.0)': - dependencies: - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/schema@10.0.29(graphql@16.9.0)': dependencies: '@graphql-tools/merge': 9.1.5(graphql@16.9.0) @@ -25990,19 +25269,6 @@ snapshots: tslib: 2.8.1 value-or-promise: 1.0.12 - '@graphql-tools/stitch@10.1.6(graphql@16.12.0)': - dependencies: - '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/stitch@10.1.6(graphql@16.9.0)': dependencies: '@graphql-tools/batch-delegate': 10.0.8(graphql@16.9.0) @@ -26036,13 +25302,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/stitching-directives@4.0.8(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/stitching-directives@4.0.8(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) @@ -26139,14 +25398,6 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/utils@10.11.0(graphql@16.12.0)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - cross-inspect: 1.0.1 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/utils@10.11.0(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -26172,15 +25423,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/utils@10.9.1(graphql@16.12.0)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.1 - cross-inspect: 1.0.1 - dset: 3.1.4 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/utils@10.9.1(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -26222,15 +25464,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/wrap@11.0.5(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/wrap@11.0.5(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 11.1.3(graphql@16.9.0) @@ -26240,15 +25473,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/wrap@11.1.2(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/wrap@11.1.2(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) @@ -26267,10 +25491,6 @@ snapshots: tslib: 2.8.1 value-or-promise: 1.0.12 - '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@graphql-typed-document-node/core@3.2.0(graphql@16.9.0)': dependencies: graphql: 16.9.0 @@ -26279,16 +25499,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@graphql-yoga/plugin-apollo-inline-trace@3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@apollo/usage-reporting-protobuf': 4.1.1 - '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@envelop/core' - '@graphql-yoga/plugin-apollo-inline-trace@3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -26299,20 +25509,6 @@ snapshots: transitivePeerDependencies: - '@envelop/core' - '@graphql-yoga/plugin-apollo-usage-report@0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@apollo/server-gateway-interface': 2.0.0(graphql@16.12.0) - '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.usagereporting': 2.1.0(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-yoga/plugin-apollo-inline-trace': 3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@envelop/core' - '@graphql-yoga/plugin-apollo-usage-report@0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@apollo/server-gateway-interface': 2.0.0(graphql@16.9.0) @@ -26327,20 +25523,10 @@ snapshots: transitivePeerDependencies: - '@envelop/core' - '@graphql-yoga/plugin-csrf-prevention@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))': - dependencies: - graphql-yoga: 5.17.1(graphql@16.12.0) - '@graphql-yoga/plugin-csrf-prevention@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))': dependencies: graphql-yoga: 5.17.1(graphql@16.9.0) - '@graphql-yoga/plugin-defer-stream@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - '@graphql-yoga/plugin-defer-stream@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) @@ -26364,24 +25550,18 @@ snapshots: graphql-sse: 2.6.0(graphql@16.9.0) graphql-yoga: 5.13.3(graphql@16.9.0) - '@graphql-yoga/plugin-jwt@3.10.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': + '@graphql-yoga/plugin-jwt@3.10.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@whatwg-node/promise-helpers': 1.3.2 '@whatwg-node/server-plugin-cookies': 1.0.5 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) + graphql: 16.9.0 + graphql-yoga: 5.17.1(graphql@16.9.0) jsonwebtoken: 9.0.3 jwks-rsa: 3.2.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-yoga/plugin-persisted-operations@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - '@graphql-yoga/plugin-persisted-operations@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@whatwg-node/promise-helpers': 1.3.2 @@ -26394,11 +25574,11 @@ snapshots: graphql: 16.9.0 graphql-yoga: 5.13.3(graphql@16.9.0) - '@graphql-yoga/plugin-prometheus@6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(prom-client@15.1.3)': + '@graphql-yoga/plugin-prometheus@6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(prom-client@15.1.3)': dependencies: - '@envelop/prometheus': 14.0.0(@envelop/core@5.5.1)(graphql@16.12.0)(prom-client@15.1.3) - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) + '@envelop/prometheus': 14.0.0(@envelop/core@5.5.1)(graphql@16.9.0)(prom-client@15.1.3) + graphql: 16.9.0 + graphql-yoga: 5.17.1(graphql@16.9.0) prom-client: 15.1.3 transitivePeerDependencies: - '@envelop/core' @@ -26411,14 +25591,6 @@ snapshots: graphql: 16.9.0 graphql-yoga: 5.13.3(graphql@16.9.0) - '@graphql-yoga/plugin-response-cache@3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/response-cache': 7.1.3(@envelop/core@5.5.1)(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.0 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - '@graphql-yoga/plugin-response-cache@3.15.4(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -26441,9 +25613,9 @@ snapshots: '@whatwg-node/events': 0.1.2 ioredis: 5.8.2 - '@graphql-yoga/render-graphiql@5.16.2(graphql-yoga@5.17.1(graphql@16.12.0))': + '@graphql-yoga/render-graphiql@5.16.2(graphql-yoga@5.17.1(graphql@16.9.0))': dependencies: - graphql-yoga: 5.17.1(graphql@16.12.0) + graphql-yoga: 5.17.1(graphql@16.9.0) '@graphql-yoga/subscription@5.0.5': dependencies: @@ -31997,7 +31169,7 @@ snapshots: eslint: 8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0) eslint-config-prettier: 9.1.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) eslint-plugin-jsonc: 2.18.2(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) eslint-plugin-mdx: 3.1.5(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) @@ -32027,16 +31199,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@theguild/federation-composition@0.20.2(graphql@16.12.0)': - dependencies: - constant-case: 3.0.4 - debug: 4.4.3(supports-color@8.1.1) - graphql: 16.12.0 - json5: 2.2.3 - lodash.sortby: 4.7.0 - transitivePeerDependencies: - - supports-color - '@theguild/federation-composition@0.20.2(graphql@16.9.0)': dependencies: constant-case: 3.0.4 @@ -32877,14 +32039,14 @@ snapshots: msw: 2.12.7(@types/node@24.10.9)(typescript@5.7.3) vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0) - '@vitest/mocker@4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0))': + '@vitest/mocker@4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0))': dependencies: '@vitest/spy': 4.0.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.7(@types/node@25.5.0)(typescript@5.7.3) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0) '@vitest/pretty-format@4.0.9': dependencies: @@ -34463,6 +33625,11 @@ snapshots: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) + dagrejs@0.2.1: + dependencies: + graphlib: 2.1.8 + lodash: 4.17.23 + damerau-levenshtein@1.0.8: {} dashdash@1.14.1: @@ -35097,7 +34264,7 @@ snapshots: is-bun-module: 1.3.0 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -35195,7 +34362,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)))(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0))(typescript@5.7.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1(patch_hash=08d9d41d21638cb74d0f9f34877a8839601a4e5a8263066ff23e7032addbcba0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -36464,6 +35631,10 @@ snapshots: - '@types/react-dom' - graphql-ws + graphlib@2.1.8: + dependencies: + lodash: 4.17.23 + graphql-config@4.5.0(@types/node@25.5.0)(encoding@0.1.13)(graphql@16.9.0): dependencies: '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.9.0) @@ -36523,12 +35694,12 @@ snapshots: lodash.merge: 4.6.2 lodash.mergewith: 4.6.2 - graphql-jit@0.8.7(graphql@16.12.0): + graphql-jit@0.8.7(graphql@16.9.0): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) fast-json-stringify: 5.16.1 generate-function: 2.3.1 - graphql: 16.12.0 + graphql: 16.9.0 lodash.memoize: 4.1.2 lodash.merge: 4.6.2 lodash.mergewith: 4.6.2 @@ -36677,23 +35848,6 @@ snapshots: optionalDependencies: ws: 8.18.0 - graphql-yoga@5.13.3(graphql@16.12.0): - dependencies: - '@envelop/core': 5.5.1 - '@envelop/instrumentation': 1.0.0 - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.25(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-yoga/logger': 2.0.1 - '@graphql-yoga/subscription': 5.0.5 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.17 - dset: 3.1.4 - graphql: 16.12.0 - lru-cache: 10.2.0 - tslib: 2.8.1 - graphql-yoga@5.13.3(graphql@16.9.0): dependencies: '@envelop/core': 5.5.1 @@ -36711,22 +35865,6 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 - graphql-yoga@5.17.1(graphql@16.12.0): - dependencies: - '@envelop/core': 5.5.1 - '@envelop/instrumentation': 1.0.0 - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.25(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-yoga/logger': 2.0.1 - '@graphql-yoga/subscription': 5.0.5 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.17 - graphql: 16.12.0 - lru-cache: 10.2.0 - tslib: 2.8.1 - graphql-yoga@5.17.1(graphql@16.9.0): dependencies: '@envelop/core': 5.5.1 @@ -39267,21 +38405,21 @@ snapshots: monaco-editor@0.52.2: {} - monaco-graphql@1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.8.1): + monaco-graphql@1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.4.2): dependencies: graphql: 16.12.0 graphql-language-service: 5.5.0(graphql@16.12.0) monaco-editor: 0.52.2 picomatch-browser: 2.2.6 - prettier: 3.8.1 + prettier: 3.4.2 - monaco-graphql@1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.8.1): + monaco-graphql@1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.4.2): dependencies: graphql: 16.9.0 graphql-language-service: 5.5.0(graphql@16.9.0) monaco-editor: 0.52.2 picomatch-browser: 2.2.6 - prettier: 3.8.1 + prettier: 3.4.2 monaco-themes@0.4.4: dependencies: @@ -43002,7 +42140,7 @@ snapshots: vitest@4.0.9(@types/debug@4.1.12)(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0): dependencies: '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0)) + '@vitest/mocker': 4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.5.0)) '@vitest/pretty-format': 4.0.9 '@vitest/runner': 4.0.9 '@vitest/snapshot': 4.0.9 From 6493b7d6f7df1b5a927d1bde8962ba0bdf724054 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Thu, 2 Apr 2026 14:13:07 +0200 Subject: [PATCH 03/15] feat: lab settings --- packages/libraries/laboratory/package.json | 4 + .../src/components/laboratory/laboratory.tsx | 13 +- .../src/components/laboratory/settings.tsx | 24 +- .../libraries/laboratory/src/lib/endpoint.ts | 68 +- .../laboratory/src/lib/operations.ts | 126 +- .../libraries/laboratory/src/lib/request.ts | 32 + .../libraries/laboratory/src/lib/settings.ts | 62 +- .../laboratory/src/lib/subscriptions.ts | 139 ++ .../app/src/pages/target-laboratory-new.tsx | 6 +- pnpm-lock.yaml | 1328 +++-------------- 10 files changed, 622 insertions(+), 1180 deletions(-) create mode 100644 packages/libraries/laboratory/src/lib/request.ts create mode 100644 packages/libraries/laboratory/src/lib/subscriptions.ts diff --git a/packages/libraries/laboratory/package.json b/packages/libraries/laboratory/package.json index b8b3c5618e4..549bf4a4b74 100644 --- a/packages/libraries/laboratory/package.json +++ b/packages/libraries/laboratory/package.json @@ -29,11 +29,13 @@ "peerDependencies": { "@tanstack/react-form": "^1.23.8", "date-fns": "^4.1.0", + "graphql-sse": "^2.5.3", "graphql-ws": "^6.0.6", "lucide-react": "^0.548.0", "lz-string": "^1.5.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", + "subscriptions-transport-ws": "^0.11.0", "tslib": "^2.8.1", "zod": "^4.1.12" }, @@ -98,6 +100,7 @@ "eslint-plugin-react-refresh": "^0.4.26", "globals": "^16.5.0", "graphql": "^16.12.0", + "graphql-sse": "^2.5.3", "graphql-ws": "^6.0.6", "lodash": "^4.17.23", "lucide-react": "^0.548.0", @@ -114,6 +117,7 @@ "react-shadow": "^20.6.0", "rollup-plugin-typescript2": "^0.36.0", "sonner": "^2.0.7", + "subscriptions-transport-ws": "^0.11.0", "tailwind-merge": "^3.4.0", "tailwindcss": "^4.1.18", "tailwindcss-scoped-preflight": "^3.5.7", diff --git a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx index e232b787fd6..7a72293bf17 100644 --- a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx @@ -250,7 +250,7 @@ const LaboratoryContent = () => { } return ( - + @@ -344,7 +344,7 @@ const LaboratoryContent = () => {
{ > Preflight Script - {/* + { const tab = @@ -416,7 +416,7 @@ const LaboratoryContent = () => { }} > Settings - */} + Settings @@ -514,7 +514,10 @@ export const Laboratory = ( const pluginsApi = usePlugins(props); const testsApi = useTests(props); const tabsApi = useTabs(props); - const endpointApi = useEndpoint(props); + const endpointApi = useEndpoint({ + ...props, + settingsApi, + }); const collectionsApi = useCollections({ ...props, tabsApi, diff --git a/packages/libraries/laboratory/src/components/laboratory/settings.tsx b/packages/libraries/laboratory/src/components/laboratory/settings.tsx index 020297ac586..daaf83047dc 100644 --- a/packages/libraries/laboratory/src/components/laboratory/settings.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/settings.tsx @@ -87,8 +87,12 @@ export const Settings = () => { field.handleChange(Number(e.target.value))} + value={field.state.value ?? ''} + onChange={e => + field.handleChange( + e.target.value === '' ? undefined : Number(e.target.value), + ) + } /> ); @@ -102,8 +106,12 @@ export const Settings = () => { field.handleChange(Number(e.target.value))} + value={field.state.value ?? ''} + onChange={e => + field.handleChange( + e.target.value === '' ? undefined : Number(e.target.value), + ) + } /> ); @@ -115,7 +123,7 @@ export const Settings = () => { Use GET for queries @@ -182,8 +190,8 @@ export const Settings = () => { Query name field.handleChange(e.target.value)} + value={field.state.value ?? ''} + onChange={e => field.handleChange(e.target.value || undefined)} /> ); @@ -219,7 +227,7 @@ export const Settings = () => { Schema description diff --git a/packages/libraries/laboratory/src/lib/endpoint.ts b/packages/libraries/laboratory/src/lib/endpoint.ts index f2daa3681b6..07d27095aa6 100644 --- a/packages/libraries/laboratory/src/lib/endpoint.ts +++ b/packages/libraries/laboratory/src/lib/endpoint.ts @@ -8,6 +8,8 @@ import { import { toast } from 'sonner'; import z from 'zod'; import { asyncInterval } from '@/lib/utils'; +import { createRequestSignal } from './request'; +import type { LaboratorySettingsActions, LaboratorySettingsState } from './settings'; export interface LaboratoryEndpointState { endpoint: string | null; @@ -22,6 +24,21 @@ export interface LaboratoryEndpointActions { restoreDefaultEndpoint: () => void; } +function buildIntrospectionRequest( + queryName?: string, + method?: 'GET' | 'POST', + schemaDescription?: boolean, +) { + const query = getIntrospectionQuery({ + schemaDescription, + }).replace('query IntrospectionQuery', `query ${queryName ?? 'IntrospectionQuery'}`); + + return { + method, + query, + } as const; +} + const GraphQLResponseErrorSchema = z .object({ errors: z.array( @@ -36,6 +53,7 @@ export const useEndpoint = (props: { defaultEndpoint?: string | null; onEndpointChange?: (endpoint: string | null) => void; defaultSchemaIntrospection?: IntrospectionQuery | null; + settingsApi?: LaboratorySettingsState & LaboratorySettingsActions; }): LaboratoryEndpointState & LaboratoryEndpointActions => { const [endpoint, _setEndpoint] = useState(props.defaultEndpoint ?? null); const [introspection, setIntrospection] = useState(null); @@ -65,15 +83,40 @@ export const useEndpoint = (props: { } try { - const response = await fetch(endpoint, { + const introspectionRequest = buildIntrospectionRequest( + props.settingsApi?.settings.introspection.queryName, + props.settingsApi?.settings.introspection.method, + props.settingsApi?.settings.introspection.schemaDescription, + ); + + const requestSignal = createRequestSignal( signal, - method: 'POST', - body: JSON.stringify({ - query: getIntrospectionQuery(), - }), - headers: { - 'Content-Type': 'application/json', - }, + props.settingsApi?.settings.fetch.timeout, + ); + const requestUrl = + introspectionRequest.method === 'GET' + ? (() => { + const url = new URL(endpoint); + url.searchParams.set('query', introspectionRequest.query); + return url.toString(); + })() + : endpoint; + + const response = await fetch(requestUrl, { + signal: requestSignal, + method: introspectionRequest.method, + body: + introspectionRequest.method === 'POST' + ? JSON.stringify({ + query: introspectionRequest.query, + }) + : undefined, + headers: + introspectionRequest.method === 'POST' + ? { + 'Content-Type': 'application/json', + } + : undefined, }).then(r => r.json()); const parsedResponse = GraphQLResponseErrorSchema.safeParse(response); @@ -104,7 +147,13 @@ export const useEndpoint = (props: { throw error; } }, - [endpoint], + [ + endpoint, + props.settingsApi?.settings.fetch.timeout, + props.settingsApi?.settings.introspection.queryName, + props.settingsApi?.settings.introspection.method, + props.settingsApi?.settings.introspection.schemaDescription, + ], ); const shouldPollSchema = useMemo(() => { @@ -129,6 +178,7 @@ export const useEndpoint = (props: { 5000, intervalController.signal, ); + return () => { intervalController.abort(); }; diff --git a/packages/libraries/laboratory/src/lib/operations.ts b/packages/libraries/laboratory/src/lib/operations.ts index ffbe430b53f..af5a6cb5345 100644 --- a/packages/libraries/laboratory/src/lib/operations.ts +++ b/packages/libraries/laboratory/src/lib/operations.ts @@ -1,6 +1,5 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; -import type { GraphQLSchema } from 'graphql'; -import { createClient } from 'graphql-ws'; +import { getOperationAST, parse, type GraphQLSchema } from 'graphql'; import { decompressFromEncodedURIComponent } from 'lz-string'; import { v4 as uuidv4 } from 'uuid'; import { LaboratoryPermission, LaboratoryPermissions } from '../components/laboratory/context'; @@ -20,9 +19,19 @@ import { } from './operations.utils'; import { LaboratoryPlugin, LaboratoryPluginsActions, LaboratoryPluginsState } from './plugins'; import type { LaboratoryPreflightActions, LaboratoryPreflightState } from './preflight'; +import { createRequestSignal, fetchWithRetry } from './request'; import type { LaboratorySettingsActions, LaboratorySettingsState } from './settings'; +import { createSubscriptionExecutor } from './subscriptions'; import type { LaboratoryTabOperation, LaboratoryTabsActions, LaboratoryTabsState } from './tabs'; +function getOperationType(query: string): 'query' | 'mutation' | 'subscription' | null { + try { + return getOperationAST(parse(query))?.operation ?? null; + } catch { + return null; + } +} + export interface LaboratoryOperation { id: string; name: string; @@ -381,36 +390,14 @@ export const useOperations = ( }), ) : {}; - - if (activeOperation.query.startsWith('subscription')) { - const client = createClient({ - url: endpoint.replace('http', 'ws'), - connectionParams: { - ...mergedHeaders, - }, - }); - - client.on('connected', () => { - console.log('connected'); - }); - - client.on('error', () => { - setStopOperationsFunctions(prev => { - const newStopOperationsFunctions = { ...prev }; - delete newStopOperationsFunctions[activeOperation.id]; - return newStopOperationsFunctions; - }); - }); - - client.on('closed', () => { - setStopOperationsFunctions(prev => { - const newStopOperationsFunctions = { ...prev }; - delete newStopOperationsFunctions[activeOperation.id]; - return newStopOperationsFunctions; - }); - }); - - client.subscribe( + const operationType = getOperationType(activeOperation.query); + + if (operationType === 'subscription') { + const unsubscribe = createSubscriptionExecutor({ + endpoint, + protocol: props.settingsApi?.settings.subscriptions.protocol ?? 'WS', + headers: mergedHeaders, + }).subscribe( { query: activeOperation.query, variables, @@ -420,15 +407,27 @@ export const useOperations = ( next: message => { options?.onResponse?.(JSON.stringify(message ?? {})); }, - error: () => {}, - complete: () => {}, + error: () => { + setStopOperationsFunctions(prev => { + const newStopOperationsFunctions = { ...prev }; + delete newStopOperationsFunctions[activeOperation.id]; + return newStopOperationsFunctions; + }); + }, + complete: () => { + setStopOperationsFunctions(prev => { + const newStopOperationsFunctions = { ...prev }; + delete newStopOperationsFunctions[activeOperation.id]; + return newStopOperationsFunctions; + }); + }, }, ); setStopOperationsFunctions(prev => ({ ...prev, [activeOperation.id]: () => { - void client.dispose(); + unsubscribe(); setStopOperationsFunctions(prev => { const newStopOperationsFunctions = { ...prev }; delete newStopOperationsFunctions[activeOperation.id]; @@ -441,21 +440,48 @@ export const useOperations = ( } const abortController = new AbortController(); + const signal = createRequestSignal( + abortController.signal, + props.settingsApi?.settings.fetch.timeout, + ); - const response = fetch(endpoint, { - method: 'POST', - credentials: props.settingsApi?.settings.fetch.credentials, - body: JSON.stringify({ - query: activeOperation.query, - variables, - extensions, - }), - headers: { - ...mergedHeaders, - 'Content-Type': 'application/json', + const shouldUseGet = + props.settingsApi?.settings.fetch.useGETForQueries === true && operationType === 'query'; + const requestUrl = shouldUseGet + ? (() => { + const url = new URL(endpoint); + url.searchParams.set('query', activeOperation.query); + if (Object.keys(variables).length > 0) { + url.searchParams.set('variables', JSON.stringify(variables)); + } + if (Object.keys(extensions).length > 0) { + url.searchParams.set('extensions', JSON.stringify(extensions)); + } + return url.toString(); + })() + : endpoint; + + const response = fetchWithRetry( + requestUrl, + { + method: shouldUseGet ? 'GET' : 'POST', + body: shouldUseGet + ? undefined + : JSON.stringify({ + query: activeOperation.query, + variables, + extensions, + }), + headers: shouldUseGet + ? mergedHeaders + : { + ...mergedHeaders, + 'Content-Type': 'application/json', + }, + signal, }, - signal: abortController.signal, - }).finally(() => { + props.settingsApi?.settings.fetch.retry, + ).finally(() => { setStopOperationsFunctions(prev => { const newStopOperationsFunctions = { ...prev }; delete newStopOperationsFunctions[activeOperation.id]; @@ -471,11 +497,11 @@ export const useOperations = ( return response; }, - [activeOperation, props.preflightApi, props.envApi, props.pluginsApi], + [activeOperation, props.preflightApi, props.envApi, props.pluginsApi, props.settingsApi], ); const isOperationSubscription = useCallback((operation: LaboratoryOperation) => { - return operation.query?.startsWith('subscription') ?? false; + return getOperationType(operation.query) === 'subscription'; }, []); const isActiveOperationSubscription = useMemo(() => { diff --git a/packages/libraries/laboratory/src/lib/request.ts b/packages/libraries/laboratory/src/lib/request.ts new file mode 100644 index 00000000000..75e40f46a24 --- /dev/null +++ b/packages/libraries/laboratory/src/lib/request.ts @@ -0,0 +1,32 @@ +export function createRequestSignal( + signal?: AbortSignal, + timeout?: number, +): AbortSignal | undefined { + if (typeof timeout === 'number' && timeout > 0) { + return signal + ? AbortSignal.any([signal, AbortSignal.timeout(timeout)]) + : AbortSignal.timeout(timeout); + } + + return signal; +} + +export async function fetchWithRetry( + input: RequestInfo | URL, + init: RequestInit, + retryCount = 0, +): Promise { + let attempt = 0; + + while (true) { + try { + return await fetch(input, init); + } catch (error) { + if (attempt >= retryCount) { + throw error; + } + + attempt++; + } + } +} diff --git a/packages/libraries/laboratory/src/lib/settings.ts b/packages/libraries/laboratory/src/lib/settings.ts index 8b81a4b6d00..23f8967b558 100644 --- a/packages/libraries/laboratory/src/lib/settings.ts +++ b/packages/libraries/laboratory/src/lib/settings.ts @@ -17,6 +17,46 @@ export type LaboratorySettings = { }; }; +export const defaultLaboratorySettings: LaboratorySettings = { + fetch: { + credentials: 'same-origin', + timeout: 10000, + retry: 3, + useGETForQueries: false, + }, + subscriptions: { + protocol: 'WS', + }, + introspection: { + queryName: 'IntrospectionQuery', + method: 'POST', + schemaDescription: false, + }, +}; + +export const normalizeLaboratorySettings = ( + settings?: Partial | null, +): LaboratorySettings => ({ + fetch: { + credentials: settings?.fetch?.credentials ?? defaultLaboratorySettings.fetch.credentials, + timeout: settings?.fetch?.timeout ?? defaultLaboratorySettings.fetch.timeout, + retry: settings?.fetch?.retry ?? defaultLaboratorySettings.fetch.retry, + useGETForQueries: + settings?.fetch?.useGETForQueries ?? defaultLaboratorySettings.fetch.useGETForQueries, + }, + subscriptions: { + protocol: settings?.subscriptions?.protocol ?? defaultLaboratorySettings.subscriptions.protocol, + }, + introspection: { + queryName: + settings?.introspection?.queryName ?? defaultLaboratorySettings.introspection.queryName, + method: settings?.introspection?.method ?? defaultLaboratorySettings.introspection.method, + schemaDescription: + settings?.introspection?.schemaDescription ?? + defaultLaboratorySettings.introspection.schemaDescription, + }, +}); + export interface LaboratorySettingsState { settings: LaboratorySettings; } @@ -30,28 +70,14 @@ export const useSettings = (props: { onSettingsChange?: (settings: LaboratorySettings | null) => void; }): LaboratorySettingsState & LaboratorySettingsActions => { const [settings, _setSettings] = useState( - props.defaultSettings ?? { - fetch: { - credentials: 'same-origin', - timeout: 10000, - retry: 3, - useGETForQueries: false, - }, - subscriptions: { - protocol: 'WS', - }, - introspection: { - queryName: 'IntrospectionQuery', - method: 'POST', - schemaDescription: false, - }, - }, + normalizeLaboratorySettings(props.defaultSettings), ); const setSettings = useCallback( (settings: LaboratorySettings) => { - _setSettings(settings); - props.onSettingsChange?.(settings); + const normalizedSettings = normalizeLaboratorySettings(settings); + _setSettings(normalizedSettings); + props.onSettingsChange?.(normalizedSettings); }, [props], ); diff --git a/packages/libraries/laboratory/src/lib/subscriptions.ts b/packages/libraries/laboratory/src/lib/subscriptions.ts new file mode 100644 index 00000000000..1fce9eceb96 --- /dev/null +++ b/packages/libraries/laboratory/src/lib/subscriptions.ts @@ -0,0 +1,139 @@ +import { + createClient as createSSEClient, + type ExecutionResult as SSEExecutionResult, +} from 'graphql-sse'; +import { createClient as createGraphQLWSClient, type ExecutionResult } from 'graphql-ws'; +import { SubscriptionClient } from 'subscriptions-transport-ws'; +import type { LaboratorySettings } from './settings'; + +type SubscriptionProtocol = LaboratorySettings['subscriptions']['protocol']; + +type SubscriptionRequest = { + query: string; + variables?: Record; + extensions?: Record; +}; + +type SubscriptionSink = { + next: (result: ExecutionResult | SSEExecutionResult) => void; + error: (error: Error) => void; + complete: () => void; +}; + +export function getSubscriptionUrl(endpoint: string, protocol: SubscriptionProtocol): string { + const url = new URL(endpoint); + + if (protocol === 'WS' || protocol === 'LEGACY_WS') { + if (url.protocol === 'https:') { + url.protocol = 'wss:'; + } else if (url.protocol === 'http:') { + url.protocol = 'ws:'; + } + } + + return url.toString(); +} + +function normalizeError(error: unknown): Error { + if (error instanceof Error) { + return error; + } + + if (typeof error === 'string') { + return new Error(error); + } + + return new Error('Unexpected subscription error.'); +} + +function createSSESubscriptionExecutor( + endpoint: string, + headers: Record, + singleConnection: boolean, +) { + const client = createSSEClient({ + url: endpoint, + singleConnection, + headers, + }); + + return { + subscribe(request: SubscriptionRequest, sink: SubscriptionSink) { + const unsubscribe = client.subscribe(request, { + next: sink.next, + error: error => sink.error(normalizeError(error)), + complete: sink.complete, + }); + + return () => { + unsubscribe(); + client.dispose(); + }; + }, + }; +} + +function createLegacyWSSubscriptionExecutor(endpoint: string, headers: Record) { + const client = new SubscriptionClient(endpoint, { + reconnect: false, + lazy: true, + connectionParams: headers, + }); + + return { + subscribe(request: SubscriptionRequest, sink: SubscriptionSink) { + const subscription = client.request(request).subscribe({ + next: sink.next, + error: error => sink.error(normalizeError(error)), + complete: sink.complete, + }); + + return () => { + subscription.unsubscribe(); + client.close(false, false); + }; + }, + }; +} + +function createWSSubscriptionExecutor(endpoint: string, headers: Record) { + const client = createGraphQLWSClient({ + url: endpoint, + connectionParams: headers, + }); + + return { + subscribe(request: SubscriptionRequest, sink: SubscriptionSink) { + const unsubscribe = client.subscribe(request, { + next: sink.next, + error: error => sink.error(normalizeError(error)), + complete: sink.complete, + }); + + return () => { + unsubscribe(); + void client.dispose(); + }; + }, + }; +} + +export function createSubscriptionExecutor(args: { + endpoint: string; + protocol: SubscriptionProtocol; + headers: Record; +}) { + const subscriptionUrl = getSubscriptionUrl(args.endpoint, args.protocol); + + switch (args.protocol) { + case 'SSE': + return createSSESubscriptionExecutor(subscriptionUrl, args.headers, false); + case 'GRAPHQL_SSE': + return createSSESubscriptionExecutor(subscriptionUrl, args.headers, true); + case 'LEGACY_WS': + return createLegacyWSSubscriptionExecutor(subscriptionUrl, args.headers); + case 'WS': + default: + return createWSSubscriptionExecutor(subscriptionUrl, args.headers); + } +} diff --git a/packages/web/app/src/pages/target-laboratory-new.tsx b/packages/web/app/src/pages/target-laboratory-new.tsx index 6e14634af7e..dc6834d15d1 100644 --- a/packages/web/app/src/pages/target-laboratory-new.tsx +++ b/packages/web/app/src/pages/target-laboratory-new.tsx @@ -596,11 +596,7 @@ function useLaboratoryState(props: { defaultHistory: historyData ?? [], defaultTabs, defaultActiveTabId: getLocalStorageState('activeTabId', null), - defaultSettings: getLocalStorageState('settings', { - fetch: { - credentials: 'same-origin', - }, - }), + defaultSettings: getLocalStorageState('settings', null), defaultPreflight: preflight?.preflightScript?.sourceCode ? { script: preflight.preflightScript.sourceCode, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7e479e2004..e93e89a19c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -288,7 +288,7 @@ importers: devDependencies: '@graphql-hive/gateway': specifier: ^2.1.19 - version: 2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3) + version: 2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3) '@types/js-yaml': specifier: 4.0.9 version: 4.0.9 @@ -836,6 +836,9 @@ importers: graphql: specifier: ^16.12.0 version: 16.12.0 + graphql-sse: + specifier: ^2.5.3 + version: 2.6.0(graphql@16.12.0) graphql-ws: specifier: ^6.0.6 version: 6.0.6(graphql@16.12.0)(ws@8.18.0) @@ -853,7 +856,7 @@ importers: version: 0.52.2 monaco-graphql: specifier: ^1.7.3 - version: 1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.8.1) + version: 1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.4.2) monacopilot: specifier: ^1.2.12 version: 1.2.12(monaco-editor@0.52.2) @@ -884,6 +887,9 @@ importers: sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + subscriptions-transport-ws: + specifier: ^0.11.0 + version: 0.11.0(graphql@16.12.0) tailwind-merge: specifier: ^3.4.0 version: 3.4.0 @@ -940,7 +946,7 @@ importers: version: 0.16.6(typescript@5.7.3) graphql-yoga: specifier: 5.13.3 - version: 5.13.3(graphql@16.12.0) + version: 5.13.3(graphql@16.9.0) ioredis: specifier: ^5.0.0 version: 5.8.2 @@ -959,7 +965,7 @@ importers: version: link:../laboratory graphql-yoga: specifier: 5.13.3 - version: 5.13.3(graphql@16.12.0) + version: 5.13.3(graphql@16.9.0) publishDirectory: dist packages/libraries/router: {} @@ -1440,7 +1446,7 @@ importers: devDependencies: '@graphql-eslint/eslint-plugin': specifier: 3.20.1 - version: 3.20.1(patch_hash=695fba67df25ba9d46472c8398c94c6a2ccf75d902321d8f95150f68e940313e)(@babel/core@7.28.5)(@types/node@25.5.0)(cosmiconfig-toml-loader@1.0.0)(encoding@0.1.13)(graphql@16.9.0) + version: 3.20.1(patch_hash=695fba67df25ba9d46472c8398c94c6a2ccf75d902321d8f95150f68e940313e)(@babel/core@7.28.5)(@types/node@24.10.9)(cosmiconfig-toml-loader@1.0.0)(encoding@0.1.13)(graphql@16.9.0) '@hive/service-common': specifier: workspace:* version: link:../service-common @@ -1699,7 +1705,7 @@ importers: version: 1.0.9(pino@10.3.0) '@graphql-hive/plugin-opentelemetry': specifier: 1.3.0 - version: 1.3.0(encoding@0.1.13)(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0) + version: 1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@opentelemetry/api': specifier: 1.9.0 version: 1.9.0 @@ -2383,7 +2389,7 @@ importers: version: 0.52.2 monaco-graphql: specifier: ^1.7.2 - version: 1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.8.1) + version: 1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.4.2) monaco-themes: specifier: 0.4.4 version: 0.4.4 @@ -11009,6 +11015,9 @@ packages: babel-plugin-react-compiler@19.1.0-rc.3: resolution: {integrity: sha512-mjRn69WuTz4adL0bXGx8Rsyk1086zFJeKmes6aK0xPuK3aaXmDJdLHqwKKMrpm6KAI1MCoUK72d2VeqQbu8YIA==} + backo2@1.0.2: + resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==} + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -12692,6 +12701,9 @@ packages: eventemitter2@6.4.7: resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} + eventemitter3@3.1.2: + resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -14276,6 +14288,9 @@ packages: isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + iterall@1.3.0: + resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} + iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} @@ -17765,6 +17780,12 @@ packages: stylis@4.1.3: resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} + subscriptions-transport-ws@0.11.0: + resolution: {integrity: sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==} + deprecated: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md + peerDependencies: + graphql: ^15.7.2 || ^16.0.0 + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -17810,6 +17831,10 @@ packages: swap-case@2.0.2: resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + symbol-observable@1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + sync-fetch@0.6.0-2: resolution: {integrity: sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==} engines: {node: '>=18'} @@ -19253,14 +19278,6 @@ snapshots: '@apollo/utils.logger': 2.0.0 graphql: 16.9.0 - '@apollo/server-gateway-interface@2.0.0(graphql@16.12.0)': - dependencies: - '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.fetcher': 3.1.0 - '@apollo/utils.keyvaluecache': 4.0.0 - '@apollo/utils.logger': 3.0.0 - graphql: 16.12.0 - '@apollo/server-gateway-interface@2.0.0(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -19321,10 +19338,6 @@ snapshots: '@apollo/utils.isnodelike': 3.0.0 sha.js: 2.4.11 - '@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 @@ -19358,50 +19371,23 @@ snapshots: '@apollo/utils.logger@3.0.0': {} - '@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 - '@apollo/utils.removealiases@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@apollo/utils.removealiases@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 - '@apollo/utils.sortast@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - lodash.sortby: 4.7.0 - '@apollo/utils.sortast@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 lodash.sortby: 4.7.0 - '@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 - '@apollo/utils.usagereporting@2.1.0(graphql@16.12.0)': - dependencies: - '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.dropunuseddefinitions': 2.0.1(graphql@16.12.0) - '@apollo/utils.printwithreducedwhitespace': 2.0.1(graphql@16.12.0) - '@apollo/utils.removealiases': 2.0.1(graphql@16.12.0) - '@apollo/utils.sortast': 2.0.1(graphql@16.12.0) - '@apollo/utils.stripsensitiveliterals': 2.0.1(graphql@16.12.0) - graphql: 16.12.0 - '@apollo/utils.usagereporting@2.1.0(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -21478,25 +21464,12 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@envelop/disable-introspection@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - graphql: 16.12.0 - tslib: 2.8.1 - '@envelop/disable-introspection@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 graphql: 16.9.0 tslib: 2.8.1 - '@envelop/extended-validation@7.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@envelop/extended-validation@7.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -21504,16 +21477,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@envelop/generic-auth@11.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/extended-validation': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@envelop/generic-auth@11.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -21549,12 +21512,6 @@ snapshots: '@envelop/core': 5.5.1 graphql: 16.9.0 - '@envelop/on-resolve@7.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - '@envelop/on-resolve@7.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -21570,22 +21527,22 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@envelop/prometheus@14.0.0(@envelop/core@5.5.1)(graphql@16.12.0)(prom-client@15.1.3)': + '@envelop/prometheus@14.0.0(@envelop/core@5.5.1)(graphql@16.9.0)(prom-client@15.1.3)': dependencies: '@envelop/core': 5.5.1 - '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - graphql: 16.12.0 + '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.9.0) + graphql: 16.9.0 prom-client: 15.1.3 tslib: 2.8.1 - '@envelop/rate-limiter@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': + '@envelop/rate-limiter@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 - '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.9.0) + '@graphql-tools/utils': 10.9.1(graphql@16.9.0) '@types/picomatch': 4.0.2 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 lodash.get: 4.4.2 ms: 2.1.3 picomatch: 4.0.4 @@ -21601,17 +21558,6 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 - '@envelop/response-cache@7.1.3(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - fast-json-stable-stringify: 2.1.0 - graphql: 16.12.0 - lru-cache: 10.2.0 - tslib: 2.8.1 - '@envelop/response-cache@7.1.3(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -21623,17 +21569,6 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 - '@envelop/response-cache@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - fast-json-stable-stringify: 2.1.0 - graphql: 16.12.0 - lru-cache: 11.0.2 - tslib: 2.8.1 - '@envelop/response-cache@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -22304,46 +22239,6 @@ snapshots: - supports-color - utf-8-validate - '@graphql-eslint/eslint-plugin@3.20.1(patch_hash=695fba67df25ba9d46472c8398c94c6a2ccf75d902321d8f95150f68e940313e)(@babel/core@7.28.5)(@types/node@25.5.0)(cosmiconfig-toml-loader@1.0.0)(encoding@0.1.13)(graphql@16.9.0)': - dependencies: - '@babel/code-frame': 7.29.0 - '@graphql-tools/code-file-loader': 7.3.23(@babel/core@7.28.5)(graphql@16.9.0) - '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.28.5)(graphql@16.9.0) - '@graphql-tools/utils': 9.2.1(graphql@16.9.0) - chalk: 4.1.2 - debug: 4.4.3(supports-color@8.1.1) - fast-glob: 3.3.3 - graphql: 16.9.0 - graphql-config: 4.5.0(@types/node@25.5.0)(cosmiconfig-toml-loader@1.0.0)(encoding@0.1.13)(graphql@16.9.0) - graphql-depth-limit: 1.1.0(graphql@16.9.0) - lodash.lowercase: 4.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@babel/core' - - '@types/node' - - bufferutil - - cosmiconfig-toml-loader - - encoding - - supports-color - - utf-8-validate - - '@graphql-hive/core@0.18.0(graphql@16.12.0)(pino@10.3.0)': - dependencies: - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/signal': 2.0.0 - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@whatwg-node/fetch': 0.10.13 - async-retry: 1.3.3 - events: 3.3.0 - graphql: 16.12.0 - js-md5: 0.8.3 - lodash.sortby: 4.7.0 - tiny-lru: 8.0.2 - transitivePeerDependencies: - - '@logtape/logtape' - - pino - - winston - '@graphql-hive/core@0.18.0(graphql@16.9.0)(pino@10.3.0)': dependencies: '@graphql-hive/logger': 1.0.9(pino@10.3.0) @@ -22361,106 +22256,6 @@ snapshots: - pino - winston - '@graphql-hive/gateway-runtime@2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/disable-introspection': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@envelop/generic-auth': 11.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@envelop/instrumentation': 1.0.0 - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-hive/signal': 2.0.0 - '@graphql-hive/yoga': 0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@25.5.0)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-response-cache': 0.104.18(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@graphql-yoga/plugin-apollo-usage-report': 0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@graphql-yoga/plugin-csrf-prevention': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) - '@graphql-yoga/plugin-defer-stream': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@types/node': 25.5.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.17 - '@whatwg-node/server-plugin-cookies': 1.0.5 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@fastify/websocket' - - '@logtape/logtape' - - '@nats-io/nats-core' - - crossws - - ioredis - - pino - - uWebSockets.js - - winston - - ws - - '@graphql-hive/gateway-runtime@2.5.0(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/disable-introspection': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@envelop/generic-auth': 11.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@envelop/instrumentation': 1.0.0 - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-hive/signal': 2.0.0 - '@graphql-hive/yoga': 0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@25.5.0)(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0) - '@graphql-mesh/plugin-response-cache': 0.104.18(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@graphql-yoga/plugin-apollo-usage-report': 0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@graphql-yoga/plugin-csrf-prevention': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) - '@graphql-yoga/plugin-defer-stream': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@types/node': 25.5.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.17 - '@whatwg-node/server-plugin-cookies': 1.0.5 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@fastify/websocket' - - '@logtape/logtape' - - '@nats-io/nats-core' - - crossws - - ioredis - - pino - - uWebSockets.js - - winston - - ws - '@graphql-hive/gateway-runtime@2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': dependencies: '@envelop/core': 5.5.1 @@ -22511,41 +22306,41 @@ snapshots: - winston - ws - '@graphql-hive/gateway@2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)': + '@graphql-hive/gateway@2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)': dependencies: '@commander-js/extra-typings': 14.0.0(commander@14.0.2) '@envelop/core': 5.5.1 '@escape.tech/graphql-armor-block-field-suggestions': 3.0.1 '@escape.tech/graphql-armor-max-depth': 2.4.2 '@escape.tech/graphql-armor-max-tokens': 2.5.1 - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/importer': 2.0.0 '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/plugin-aws-sigv4': 2.0.17(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-hive/plugin-opentelemetry': 1.3.0(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/plugin-aws-sigv4': 2.0.17(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-hive/plugin-opentelemetry': 1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-mesh/cache-cfw-kv': 0.105.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/cache-localforage': 0.105.17(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/cache-redis': 0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.12.0) - '@graphql-mesh/cache-upstash-redis': 0.1.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-http-cache': 0.105.17(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-jit': 0.2.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-jwt-auth': 2.0.9(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-prometheus': 2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0) - '@graphql-mesh/plugin-rate-limit': 0.105.5(@envelop/core@5.5.1)(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-snapshot': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/transport-http': 1.0.12(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/transport-http-callback': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/transport-ws': 2.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/code-file-loader': 8.1.26(graphql@16.12.0) - '@graphql-tools/graphql-file-loader': 8.1.7(graphql@16.12.0) - '@graphql-tools/load': 8.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-yoga/render-graphiql': 5.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) + '@graphql-mesh/cache-cfw-kv': 0.105.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cache-localforage': 0.105.17(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cache-redis': 0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.9.0) + '@graphql-mesh/cache-upstash-redis': 0.1.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-http-cache': 0.105.17(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-jit': 0.2.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-jwt-auth': 2.0.9(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-prometheus': 2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0) + '@graphql-mesh/plugin-rate-limit': 0.105.5(@envelop/core@5.5.1)(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-snapshot': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/transport-http': 1.0.12(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/transport-http-callback': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/transport-ws': 2.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/code-file-loader': 8.1.26(graphql@16.9.0) + '@graphql-tools/graphql-file-loader': 8.1.7(graphql@16.9.0) + '@graphql-tools/load': 8.1.6(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-yoga/render-graphiql': 5.16.2(graphql-yoga@5.17.1(graphql@16.9.0)) '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.208.0 '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) @@ -22561,9 +22356,9 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) commander: 14.0.2 dotenv: 17.2.3 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) - graphql-yoga: 5.17.1(graphql@16.12.0) + graphql: 16.9.0 + graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) + graphql-yoga: 5.17.1(graphql@16.9.0) tslib: 2.8.1 ws: 8.18.0 transitivePeerDependencies: @@ -22590,13 +22385,13 @@ snapshots: optionalDependencies: pino: 10.3.0 - '@graphql-hive/plugin-aws-sigv4@2.0.17(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-hive/plugin-aws-sigv4@2.0.17(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@aws-sdk/client-sts': 3.939.0 - '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) '@whatwg-node/promise-helpers': 1.3.2 aws4: 1.13.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -22607,84 +22402,6 @@ snapshots: - pino - winston - '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': - dependencies: - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.208.0 - '@opentelemetry/auto-instrumentations-node': 0.67.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@fastify/websocket' - - '@logtape/logtape' - - '@nats-io/nats-core' - - crossws - - encoding - - ioredis - - pino - - supports-color - - uWebSockets.js - - winston - - ws - - '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0)': - dependencies: - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.208.0 - '@opentelemetry/auto-instrumentations-node': 0.67.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.38.0 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@fastify/websocket' - - '@logtape/logtape' - - '@nats-io/nats-core' - - crossws - - encoding - - ioredis - - pino - - supports-color - - uWebSockets.js - - winston - - ws - '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': dependencies: '@graphql-hive/core': 0.18.0(graphql@16.9.0)(pino@10.3.0) @@ -22736,18 +22453,6 @@ snapshots: '@graphql-hive/signal@2.0.0': {} - '@graphql-hive/yoga@0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0)': - dependencies: - '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - transitivePeerDependencies: - - '@logtape/logtape' - - pino - - winston - '@graphql-hive/yoga@0.46.0(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(pino@10.3.0)': dependencies: '@graphql-hive/core': 0.18.0(graphql@16.9.0)(pino@10.3.0) @@ -22991,48 +22696,48 @@ snapshots: - '@graphql-inspector/loaders' - yargs - '@graphql-mesh/cache-cfw-kv@0.105.16(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-cfw-kv@0.105.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-inmemory-lru@0.8.17(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-inmemory-lru@0.8.17(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-localforage@0.105.17(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-localforage@0.105.17(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cache-inmemory-lru': 0.8.17(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - graphql: 16.12.0 + '@graphql-mesh/cache-inmemory-lru': 0.8.17(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + graphql: 16.9.0 localforage: 1.10.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-redis@0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.12.0)': + '@graphql-mesh/cache-redis@0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.9.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@opentelemetry/api': 1.9.0 '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 + graphql: 16.9.0 ioredis: 5.8.2 ioredis-mock: 8.13.1(@types/ioredis-mock@8.2.5)(ioredis@5.8.2) tslib: 2.8.1 @@ -23041,114 +22746,46 @@ snapshots: - '@types/ioredis-mock' - supports-color - '@graphql-mesh/cache-upstash-redis@0.1.16(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-upstash-redis@0.1.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@upstash/redis': 1.35.6 '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cross-helpers@0.4.10(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - path-browserify: 1.0.1 - '@graphql-mesh/cross-helpers@0.4.10(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 path-browserify: 1.0.1 - '@graphql-mesh/fusion-runtime@1.6.2(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/instrumentation': 1.0.0 - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@24.10.9)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@logtape/logtape' - - '@nats-io/nats-core' - - '@types/node' - - ioredis - - pino - - winston - - '@graphql-mesh/fusion-runtime@1.6.2(@types/node@25.5.0)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/instrumentation': 1.0.0 - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@logtape/logtape' - - '@nats-io/nats-core' - - '@types/node' - - ioredis - - pino - - winston - - '@graphql-mesh/fusion-runtime@1.6.2(@types/node@25.5.0)(graphql@16.12.0)(pino@10.3.0)': + '@graphql-mesh/fusion-runtime@1.6.2(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@envelop/core': 5.5.1 '@envelop/instrumentation': 1.0.0 '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) + '@graphql-tools/executor': 1.5.0(graphql@16.9.0) + '@graphql-tools/federation': 4.2.6(@types/node@24.10.9)(graphql@16.9.0) + '@graphql-tools/merge': 9.1.5(graphql@16.9.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.9.0) + '@graphql-tools/stitching-directives': 4.0.8(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.9.0) '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) + graphql: 16.9.0 + graphql-yoga: 5.17.1(graphql@16.9.0) tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -23189,36 +22826,6 @@ snapshots: - pino - winston - '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.12.0)': - dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - json-stable-stringify: 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - - '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.12.0)(ioredis@5.8.2)': - dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - json-stable-stringify: 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) @@ -23234,37 +22841,37 @@ snapshots: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-http-cache@0.105.17(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-http-cache@0.105.17(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 http-cache-semantics: 4.1.1 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-jit@0.2.16(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-jit@0.2.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@envelop/core': 5.5.1 - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - graphql-jit: 0.8.7(graphql@16.12.0) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.9.1(graphql@16.9.0) + graphql: 16.9.0 + graphql-jit: 0.8.7(graphql@16.9.0) tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-jwt-auth@2.0.9(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-jwt-auth@2.0.9(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-yoga/plugin-jwt': 3.10.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-yoga/plugin-jwt': 3.10.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0) + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' @@ -23272,16 +22879,16 @@ snapshots: - ioredis - supports-color - '@graphql-mesh/plugin-prometheus@2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0)': + '@graphql-mesh/plugin-prometheus@2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0)': dependencies: - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-yoga/plugin-prometheus': 6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(prom-client@15.1.3) - graphql: 16.12.0 + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-yoga/plugin-prometheus': 6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(prom-client@15.1.3) + graphql: 16.9.0 prom-client: 15.1.3 tslib: 2.8.1 transitivePeerDependencies: @@ -23297,60 +22904,22 @@ snapshots: - winston - ws - '@graphql-mesh/plugin-rate-limit@0.105.5(@envelop/core@5.5.1)(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-rate-limit@0.105.5(@envelop/core@5.5.1)(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@envelop/rate-limiter': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@envelop/rate-limiter': 9.0.0(@envelop/core@5.5.1)(graphql@16.9.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.9.1(graphql@16.9.0) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@envelop/core' - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/response-cache': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-yoga/plugin-response-cache': 3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - cache-control-parser: 2.0.6 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - - '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.12.0)(ioredis@5.8.2)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/response-cache': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-yoga/plugin-response-cache': 3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - cache-control-parser: 2.0.6 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@envelop/core': 5.5.1 @@ -23370,28 +22939,20 @@ snapshots: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-snapshot@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-snapshot@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) '@whatwg-node/fetch': 0.10.13 - graphql: 16.12.0 + graphql: 16.9.0 minimatch: 10.2.4 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/string-interpolation@0.5.9(graphql@16.12.0)': - dependencies: - dayjs: 1.11.18 - graphql: 16.12.0 - json-pointer: 0.6.2 - lodash.get: 4.4.2 - tslib: 2.8.1 - '@graphql-mesh/string-interpolation@0.5.9(graphql@16.9.0)': dependencies: dayjs: 1.11.18 @@ -23400,44 +22961,6 @@ snapshots: lodash.get: 4.4.2 tslib: 2.8.1 - '@graphql-mesh/transport-common@1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-hive/signal': 2.0.0 - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@logtape/logtape' - - '@nats-io/nats-core' - - ioredis - - pino - - winston - - '@graphql-mesh/transport-common@1.0.12(graphql@16.12.0)(pino@10.3.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-hive/signal': 2.0.0 - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@logtape/logtape' - - '@nats-io/nats-core' - - ioredis - - pino - - winston - '@graphql-mesh/transport-common@1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@envelop/core': 5.5.1 @@ -23457,20 +22980,20 @@ snapshots: - pino - winston - '@graphql-mesh/transport-http-callback@1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-http-callback@1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@graphql-hive/signal': 2.0.0 - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -23479,17 +23002,17 @@ snapshots: - pino - winston - '@graphql-mesh/transport-http@1.0.12(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-http@1.0.12(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -23499,17 +23022,17 @@ snapshots: - pino - winston - '@graphql-mesh/transport-ws@2.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-ws@2.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/executor-graphql-ws': 3.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-tools/executor-graphql-ws': 3.1.3(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + graphql: 16.9.0 + graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) tslib: 2.8.1 ws: 8.18.0 transitivePeerDependencies: @@ -23524,36 +23047,6 @@ snapshots: - utf-8-validate - winston - '@graphql-mesh/types@0.104.16(graphql@16.12.0)': - dependencies: - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - - '@graphql-mesh/types@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': - dependencies: - '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - '@graphql-mesh/types@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) @@ -23569,54 +23062,6 @@ snapshots: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/utils@0.104.16(graphql@16.12.0)': - dependencies: - '@envelop/instrumentation': 1.0.0 - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0) - '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-tools/wrap': 11.0.5(graphql@16.12.0) - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - dset: 3.1.4 - graphql: 16.12.0 - js-yaml: 4.1.1 - lodash.get: 4.4.2 - lodash.topath: 4.5.2 - tiny-lru: 11.4.7 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - - '@graphql-mesh/utils@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': - dependencies: - '@envelop/instrumentation': 1.0.0 - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) - '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) - '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-tools/wrap': 11.0.5(graphql@16.12.0) - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - dset: 3.1.4 - graphql: 16.12.0 - js-yaml: 4.1.1 - lodash.get: 4.4.2 - lodash.topath: 4.5.2 - tiny-lru: 11.4.7 - tslib: 2.8.1 - transitivePeerDependencies: - - '@nats-io/nats-core' - - ioredis - '@graphql-mesh/utils@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@envelop/instrumentation': 1.0.0 @@ -23649,15 +23094,6 @@ snapshots: sync-fetch: 0.6.0-2 tslib: 2.8.1 - '@graphql-tools/batch-delegate@10.0.5(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/batch-delegate@10.0.5(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 11.1.3(graphql@16.9.0) @@ -23667,15 +23103,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/batch-delegate@10.0.8(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/batch-delegate@10.0.8(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) @@ -23694,14 +23121,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/batch-execute@10.0.4(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/batch-execute@10.0.4(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -23779,12 +23198,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/code-file-loader@8.1.26(graphql@16.12.0)': + '@graphql-tools/code-file-loader@8.1.26(graphql@16.9.0)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.25(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/graphql-tag-pluck': 8.3.25(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) globby: 11.1.0 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: @@ -23815,18 +23234,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/delegate@11.1.3(graphql@16.12.0)': - dependencies: - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/delegate@11.1.3(graphql@16.9.0)': dependencies: '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) @@ -23839,18 +23246,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/delegate@12.0.2(graphql@16.12.0)': - dependencies: - '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - dataloader: 2.2.3 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/delegate@12.0.2(graphql@16.9.0)': dependencies: '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) @@ -23898,12 +23293,6 @@ snapshots: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 - '@graphql-tools/executor-common@1.0.5(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - '@graphql-tools/executor-common@1.0.5(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -23969,13 +23358,13 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-graphql-ws@3.1.3(graphql@16.12.0)': + '@graphql-tools/executor-graphql-ws@3.1.3(graphql@16.9.0)': dependencies: - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.12.0 - graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) + graphql: 16.9.0 + graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) isows: 1.0.7(ws@8.18.0) tslib: 2.8.1 ws: 8.18.0 @@ -24043,36 +23432,21 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-http@3.0.7(@types/node@24.10.9)(graphql@16.12.0)': + '@graphql-tools/executor-http@3.0.7(@types/node@24.10.9)(graphql@16.9.0)': dependencies: '@graphql-hive/signal': 2.0.0 - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 meros: 1.3.2(@types/node@24.10.9) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-http@3.0.7(@types/node@25.5.0)(graphql@16.12.0)': - dependencies: - '@graphql-hive/signal': 2.0.0 - '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - meros: 1.3.2(@types/node@25.5.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@types/node' - '@graphql-tools/executor-http@3.0.7(@types/node@25.5.0)(graphql@16.9.0)': dependencies: '@graphql-hive/signal': 2.0.0 @@ -24143,16 +23517,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/executor@1.5.0(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/executor@1.5.0(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -24163,42 +23527,22 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/federation@4.2.6(@types/node@24.10.9)(graphql@16.12.0)': + '@graphql-tools/federation@4.2.6(@types/node@24.10.9)(graphql@16.9.0)': dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@graphql-yoga/typed-event-target': 3.0.2 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/events': 0.1.2 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@types/node' - - '@graphql-tools/federation@4.2.6(@types/node@25.5.0)(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) + '@graphql-tools/executor': 1.5.0(graphql@16.9.0) + '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.9.0) + '@graphql-tools/merge': 9.1.5(graphql@16.9.0) + '@graphql-tools/schema': 10.0.29(graphql@16.9.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.9.0) '@graphql-yoga/typed-event-target': 3.0.2 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/events': 0.1.2 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 + graphql: 16.9.0 tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -24307,17 +23651,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/graphql-file-loader@8.1.7(graphql@16.12.0)': - dependencies: - '@graphql-tools/import': 7.1.7(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - globby: 11.1.0 - graphql: 16.12.0 - tslib: 2.8.1 - unixify: 1.0.0 - transitivePeerDependencies: - - supports-color - '@graphql-tools/graphql-file-loader@8.1.7(graphql@16.9.0)': dependencies: '@graphql-tools/import': 7.1.7(graphql@16.9.0) @@ -24394,19 +23727,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.25(graphql@16.12.0)': - dependencies: - '@babel/core': 7.28.5 - '@babel/parser': 7.29.0 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.25(graphql@16.9.0)': dependencies: '@babel/core': 7.28.5 @@ -24444,16 +23764,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.1.7(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@theguild/federation-composition': 0.20.2(graphql@16.12.0) - graphql: 16.12.0 - resolve-from: 5.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@graphql-tools/import@7.1.7(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -24512,11 +23822,11 @@ snapshots: p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/load@8.1.6(graphql@16.12.0)': + '@graphql-tools/load@8.1.6(graphql@16.9.0)': dependencies: - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 + '@graphql-tools/schema': 10.0.29(graphql@16.9.0) + '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + graphql: 16.9.0 p-limit: 3.1.0 tslib: 2.8.1 @@ -24526,24 +23836,12 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/merge@9.1.1(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/merge@9.1.1(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/merge@9.1.5(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/merge@9.1.5(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -24570,13 +23868,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/schema@10.0.25(graphql@16.12.0)': - dependencies: - '@graphql-tools/merge': 9.1.1(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/schema@10.0.25(graphql@16.9.0)': dependencies: '@graphql-tools/merge': 9.1.1(graphql@16.9.0) @@ -24584,13 +23875,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/schema@10.0.29(graphql@16.12.0)': - dependencies: - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/schema@10.0.29(graphql@16.9.0)': dependencies: '@graphql-tools/merge': 9.1.5(graphql@16.9.0) @@ -24606,19 +23890,6 @@ snapshots: tslib: 2.8.1 value-or-promise: 1.0.12 - '@graphql-tools/stitch@10.1.6(graphql@16.12.0)': - dependencies: - '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/merge': 9.1.5(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/stitch@10.1.6(graphql@16.9.0)': dependencies: '@graphql-tools/batch-delegate': 10.0.8(graphql@16.9.0) @@ -24652,13 +23923,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/stitching-directives@4.0.8(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/stitching-directives@4.0.8(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) @@ -24777,14 +24041,6 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/utils@10.11.0(graphql@16.12.0)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - cross-inspect: 1.0.1 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/utils@10.11.0(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -24810,15 +24066,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/utils@10.9.1(graphql@16.12.0)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.1 - cross-inspect: 1.0.1 - dset: 3.1.4 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/utils@10.9.1(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -24860,15 +24107,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/wrap@11.0.5(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/wrap@11.0.5(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 11.1.3(graphql@16.9.0) @@ -24878,15 +24116,6 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/wrap@11.1.2(graphql@16.12.0)': - dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) - '@graphql-tools/schema': 10.0.29(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - tslib: 2.8.1 - '@graphql-tools/wrap@11.1.2(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) @@ -24905,10 +24134,6 @@ snapshots: tslib: 2.8.1 value-or-promise: 1.0.12 - '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': - dependencies: - graphql: 16.12.0 - '@graphql-typed-document-node/core@3.2.0(graphql@16.9.0)': dependencies: graphql: 16.9.0 @@ -24917,16 +24142,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@graphql-yoga/plugin-apollo-inline-trace@3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@apollo/usage-reporting-protobuf': 4.1.1 - '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@envelop/core' - '@graphql-yoga/plugin-apollo-inline-trace@3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -24937,20 +24152,6 @@ snapshots: transitivePeerDependencies: - '@envelop/core' - '@graphql-yoga/plugin-apollo-usage-report@0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@apollo/server-gateway-interface': 2.0.0(graphql@16.12.0) - '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.usagereporting': 2.1.0(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-yoga/plugin-apollo-inline-trace': 3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - tslib: 2.8.1 - transitivePeerDependencies: - - '@envelop/core' - '@graphql-yoga/plugin-apollo-usage-report@0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@apollo/server-gateway-interface': 2.0.0(graphql@16.9.0) @@ -24965,20 +24166,10 @@ snapshots: transitivePeerDependencies: - '@envelop/core' - '@graphql-yoga/plugin-csrf-prevention@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))': - dependencies: - graphql-yoga: 5.17.1(graphql@16.12.0) - '@graphql-yoga/plugin-csrf-prevention@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))': dependencies: graphql-yoga: 5.17.1(graphql@16.9.0) - '@graphql-yoga/plugin-defer-stream@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - '@graphql-yoga/plugin-defer-stream@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) @@ -25002,24 +24193,18 @@ snapshots: graphql-sse: 2.6.0(graphql@16.9.0) graphql-yoga: 5.13.3(graphql@16.9.0) - '@graphql-yoga/plugin-jwt@3.10.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': + '@graphql-yoga/plugin-jwt@3.10.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@whatwg-node/promise-helpers': 1.3.2 '@whatwg-node/server-plugin-cookies': 1.0.5 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) + graphql: 16.9.0 + graphql-yoga: 5.17.1(graphql@16.9.0) jsonwebtoken: 9.0.3 jwks-rsa: 3.2.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-yoga/plugin-persisted-operations@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - '@graphql-yoga/plugin-persisted-operations@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@whatwg-node/promise-helpers': 1.3.2 @@ -25032,11 +24217,11 @@ snapshots: graphql: 16.9.0 graphql-yoga: 5.13.3(graphql@16.9.0) - '@graphql-yoga/plugin-prometheus@6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(prom-client@15.1.3)': + '@graphql-yoga/plugin-prometheus@6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(prom-client@15.1.3)': dependencies: - '@envelop/prometheus': 14.0.0(@envelop/core@5.5.1)(graphql@16.12.0)(prom-client@15.1.3) - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) + '@envelop/prometheus': 14.0.0(@envelop/core@5.5.1)(graphql@16.9.0)(prom-client@15.1.3) + graphql: 16.9.0 + graphql-yoga: 5.17.1(graphql@16.9.0) prom-client: 15.1.3 transitivePeerDependencies: - '@envelop/core' @@ -25049,14 +24234,6 @@ snapshots: graphql: 16.9.0 graphql-yoga: 5.13.3(graphql@16.9.0) - '@graphql-yoga/plugin-response-cache@3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': - dependencies: - '@envelop/core': 5.5.1 - '@envelop/response-cache': 7.1.3(@envelop/core@5.5.1)(graphql@16.12.0) - '@whatwg-node/promise-helpers': 1.3.0 - graphql: 16.12.0 - graphql-yoga: 5.17.1(graphql@16.12.0) - '@graphql-yoga/plugin-response-cache@3.15.4(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -25079,9 +24256,9 @@ snapshots: '@whatwg-node/events': 0.1.2 ioredis: 5.8.2 - '@graphql-yoga/render-graphiql@5.16.2(graphql-yoga@5.17.1(graphql@16.12.0))': + '@graphql-yoga/render-graphiql@5.16.2(graphql-yoga@5.17.1(graphql@16.9.0))': dependencies: - graphql-yoga: 5.17.1(graphql@16.12.0) + graphql-yoga: 5.17.1(graphql@16.9.0) '@graphql-yoga/subscription@5.0.5': dependencies: @@ -30672,16 +29849,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@theguild/federation-composition@0.20.2(graphql@16.12.0)': - dependencies: - constant-case: 3.0.4 - debug: 4.4.3(supports-color@8.1.1) - graphql: 16.12.0 - json5: 2.2.3 - lodash.sortby: 4.7.0 - transitivePeerDependencies: - - supports-color - '@theguild/federation-composition@0.20.2(graphql@16.9.0)': dependencies: constant-case: 3.0.4 @@ -31508,14 +30675,14 @@ snapshots: msw: 2.12.7(@types/node@24.10.9)(typescript@5.7.3) vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3) - '@vitest/mocker@4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3))': + '@vitest/mocker@4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.7(@types/node@25.5.0)(typescript@5.7.3) - vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3) '@vitest/pretty-format@4.0.9': dependencies: @@ -32096,6 +31263,8 @@ snapshots: dependencies: '@babel/types': 7.28.5 + backo2@1.0.2: {} + bail@2.0.2: {} balanced-match@1.0.2: {} @@ -34100,6 +33269,8 @@ snapshots: eventemitter2@6.4.7: {} + eventemitter3@3.1.2: {} + eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} @@ -35020,12 +34191,12 @@ snapshots: lodash.merge: 4.6.2 lodash.mergewith: 4.6.2 - graphql-jit@0.8.7(graphql@16.12.0): + graphql-jit@0.8.7(graphql@16.9.0): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) fast-json-stringify: 5.16.1 generate-function: 2.3.1 - graphql: 16.12.0 + graphql: 16.9.0 lodash.memoize: 4.1.2 lodash.merge: 4.6.2 lodash.mergewith: 4.6.2 @@ -35141,6 +34312,10 @@ snapshots: dependencies: graphql: 16.9.0 + graphql-sse@2.6.0(graphql@16.12.0): + dependencies: + graphql: 16.12.0 + graphql-sse@2.6.0(graphql@16.9.0): dependencies: graphql: 16.9.0 @@ -35174,23 +34349,6 @@ snapshots: optionalDependencies: ws: 8.18.0 - graphql-yoga@5.13.3(graphql@16.12.0): - dependencies: - '@envelop/core': 5.5.1 - '@envelop/instrumentation': 1.0.0 - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.25(graphql@16.12.0) - '@graphql-tools/utils': 10.9.1(graphql@16.12.0) - '@graphql-yoga/logger': 2.0.1 - '@graphql-yoga/subscription': 5.0.5 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.17 - dset: 3.1.4 - graphql: 16.12.0 - lru-cache: 10.2.0 - tslib: 2.8.1 - graphql-yoga@5.13.3(graphql@16.9.0): dependencies: '@envelop/core': 5.5.1 @@ -35208,22 +34366,6 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 - graphql-yoga@5.17.1(graphql@16.12.0): - dependencies: - '@envelop/core': 5.5.1 - '@envelop/instrumentation': 1.0.0 - '@graphql-tools/executor': 1.5.0(graphql@16.12.0) - '@graphql-tools/schema': 10.0.25(graphql@16.12.0) - '@graphql-tools/utils': 10.11.0(graphql@16.12.0) - '@graphql-yoga/logger': 2.0.1 - '@graphql-yoga/subscription': 5.0.5 - '@whatwg-node/fetch': 0.10.13 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.17 - graphql: 16.12.0 - lru-cache: 10.2.0 - tslib: 2.8.1 - graphql-yoga@5.17.1(graphql@16.9.0): dependencies: '@envelop/core': 5.5.1 @@ -36093,6 +35235,8 @@ snapshots: isstream@0.1.2: {} + iterall@1.3.0: {} + iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 @@ -37734,21 +36878,21 @@ snapshots: monaco-editor@0.52.2: {} - monaco-graphql@1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.8.1): + monaco-graphql@1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.4.2): dependencies: graphql: 16.12.0 graphql-language-service: 5.5.0(graphql@16.12.0) monaco-editor: 0.52.2 picomatch-browser: 2.2.6 - prettier: 3.8.1 + prettier: 3.4.2 - monaco-graphql@1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.8.1): + monaco-graphql@1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.4.2): dependencies: graphql: 16.9.0 graphql-language-service: 5.5.0(graphql@16.9.0) monaco-editor: 0.52.2 picomatch-browser: 2.2.6 - prettier: 3.8.1 + prettier: 3.4.2 monaco-themes@0.4.4: dependencies: @@ -40327,6 +39471,18 @@ snapshots: stylis@4.1.3: {} + subscriptions-transport-ws@0.11.0(graphql@16.12.0): + dependencies: + backo2: 1.0.2 + eventemitter3: 3.1.2 + graphql: 16.12.0 + iterall: 1.3.0 + symbol-observable: 1.2.0 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -40379,6 +39535,8 @@ snapshots: dependencies: tslib: 2.8.1 + symbol-observable@1.2.0: {} + sync-fetch@0.6.0-2: dependencies: node-fetch: 3.3.2 @@ -41434,7 +40592,7 @@ snapshots: vitest@4.0.9(@types/debug@4.1.12)(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3)) + '@vitest/mocker': 4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.9 '@vitest/runner': 4.0.9 '@vitest/snapshot': 4.0.9 From 1a7dbf06d24de1a3d7fe58ea854944ee4c09e878 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Fri, 3 Apr 2026 14:25:34 +0200 Subject: [PATCH 04/15] enhancement: migrated lab operation to graphql-tools implementation --- packages/libraries/laboratory/package.json | 1 + .../src/components/laboratory/operation.tsx | 18 +- .../laboratory/src/lib/operations.ts | 183 +-- .../laboratory/src/lib/subscriptions.ts | 139 -- pnpm-lock.yaml | 1429 ++++++++++++++--- 5 files changed, 1316 insertions(+), 454 deletions(-) delete mode 100644 packages/libraries/laboratory/src/lib/subscriptions.ts diff --git a/packages/libraries/laboratory/package.json b/packages/libraries/laboratory/package.json index 549bf4a4b74..f3db7d8fbce 100644 --- a/packages/libraries/laboratory/package.json +++ b/packages/libraries/laboratory/package.json @@ -41,6 +41,7 @@ }, "dependencies": { "@base-ui/react": "^1.1.0", + "@graphql-tools/url-loader": "^9.1.0", "radix-ui": "^1.4.3", "react-zoom-pan-pinch": "^3.7.0", "uuid": "^13.0.0" diff --git a/packages/libraries/laboratory/src/components/laboratory/operation.tsx b/packages/libraries/laboratory/src/components/laboratory/operation.tsx index 348aabbdbdc..a504aa3143d 100644 --- a/packages/libraries/laboratory/src/components/laboratory/operation.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/operation.tsx @@ -535,16 +535,28 @@ export const Query = (props: { return; } - const status = response.status; + const extensionsResponse = response.extensions?.response as { + status: number; + headers: Record; + }; + + delete response.extensions?.request; + delete response.extensions?.response; + + if (Object.keys(response.extensions ?? {}).length === 0) { + delete response.extensions; + } + + const status = extensionsResponse.status; const duration = performance.now() - startTime; - const responseText = await response.text(); + const responseText = JSON.stringify(response, null, 2); const size = responseText.length; const newItemHistory = addHistory({ status, duration, size, - headers: JSON.stringify(Object.fromEntries(response.headers.entries()), null, 2), + headers: JSON.stringify(extensionsResponse.headers, null, 2), operation, preflightLogs: result?.logs ?? [], response: responseText, diff --git a/packages/libraries/laboratory/src/lib/operations.ts b/packages/libraries/laboratory/src/lib/operations.ts index af5a6cb5345..152ad55aac5 100644 --- a/packages/libraries/laboratory/src/lib/operations.ts +++ b/packages/libraries/laboratory/src/lib/operations.ts @@ -1,7 +1,16 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; -import { getOperationAST, parse, type GraphQLSchema } from 'graphql'; +import { + DocumentNode, + ExecutionResult, + getOperationAST, + Kind, + parse, + type GraphQLSchema, +} from 'graphql'; +import { isAsyncIterable } from 'graphql-sse'; import { decompressFromEncodedURIComponent } from 'lz-string'; import { v4 as uuidv4 } from 'uuid'; +import { SubscriptionProtocol, UrlLoader } from '@graphql-tools/url-loader'; import { LaboratoryPermission, LaboratoryPermissions } from '../components/laboratory/context'; import type { LaboratoryCollectionOperation, @@ -19,9 +28,7 @@ import { } from './operations.utils'; import { LaboratoryPlugin, LaboratoryPluginsActions, LaboratoryPluginsState } from './plugins'; import type { LaboratoryPreflightActions, LaboratoryPreflightState } from './preflight'; -import { createRequestSignal, fetchWithRetry } from './request'; import type { LaboratorySettingsActions, LaboratorySettingsState } from './settings'; -import { createSubscriptionExecutor } from './subscriptions'; import type { LaboratoryTabOperation, LaboratoryTabsActions, LaboratoryTabsState } from './tabs'; function getOperationType(query: string): 'query' | 'mutation' | 'subscription' | null { @@ -65,7 +72,7 @@ export interface LaboratoryOperationsActions { headers?: Record; onResponse?: (response: string) => void; }, - ) => Promise; + ) => Promise; stopActiveOperation: (() => void) | null; isActiveOperationLoading: boolean; isOperationLoading: (operationId: string) => boolean; @@ -79,6 +86,27 @@ export interface LaboratoryOperationsCallbacks { onOperationDelete?: (operation: LaboratoryOperation) => void; } +const getOperationWithFragments = ( + document: DocumentNode, + operationName?: string, +): DocumentNode => { + const definitions = document.definitions.filter(definition => { + if ( + definition.kind === Kind.OPERATION_DEFINITION && + operationName && + definition.name?.value !== operationName + ) { + return false; + } + return true; + }); + + return { + kind: Kind.DOCUMENT, + definitions, + }; +}; + export const useOperations = ( props: { checkPermissions: ( @@ -325,6 +353,8 @@ export const useOperations = ( return activeOperation ? isOperationLoading(activeOperation.id) : false; }, [activeOperation, isOperationLoading]); + const loader = useMemo(() => new UrlLoader(), []); + const runActiveOperation = useCallback( async ( endpoint: string, @@ -335,7 +365,7 @@ export const useOperations = ( }, plugins: LaboratoryPlugin[] = props.pluginsApi?.plugins ?? [], pluginsState: Record = props.pluginsApi?.pluginsState ?? {}, - ) => { + ): Promise => { if (!activeOperation?.query) { return null; } @@ -390,110 +420,67 @@ export const useOperations = ( }), ) : {}; - const operationType = getOperationType(activeOperation.query); - if (operationType === 'subscription') { - const unsubscribe = createSubscriptionExecutor({ - endpoint, - protocol: props.settingsApi?.settings.subscriptions.protocol ?? 'WS', - headers: mergedHeaders, - }).subscribe( - { - query: activeOperation.query, - variables, - extensions, - }, - { - next: message => { - options?.onResponse?.(JSON.stringify(message ?? {})); - }, - error: () => { - setStopOperationsFunctions(prev => { - const newStopOperationsFunctions = { ...prev }; - delete newStopOperationsFunctions[activeOperation.id]; - return newStopOperationsFunctions; - }); - }, - complete: () => { - setStopOperationsFunctions(prev => { - const newStopOperationsFunctions = { ...prev }; - delete newStopOperationsFunctions[activeOperation.id]; - return newStopOperationsFunctions; - }); - }, - }, - ); + const executor = loader.getExecutorAsync(endpoint, { + subscriptionsEndpoint: endpoint, + subscriptionsProtocol: + (props.settingsApi?.settings.subscriptions.protocol as SubscriptionProtocol) ?? + SubscriptionProtocol.GRAPHQL_SSE, + credentials: props.settingsApi?.settings.fetch.credentials, + specifiedByUrl: true, + directiveIsRepeatable: true, + inputValueDeprecation: true, + retry: props.settingsApi?.settings.fetch.retry, + timeout: props.settingsApi?.settings.fetch.timeout, + useGETForQueries: props.settingsApi?.settings.fetch.useGETForQueries, + exposeHTTPDetailsInExtensions: true, + fetch, + }); - setStopOperationsFunctions(prev => ({ - ...prev, - [activeOperation.id]: () => { - unsubscribe(); - setStopOperationsFunctions(prev => { - const newStopOperationsFunctions = { ...prev }; - delete newStopOperationsFunctions[activeOperation.id]; - return newStopOperationsFunctions; - }); - }, - })); - - return Promise.resolve(new Response()); - } + const document = getOperationWithFragments(parse(activeOperation.query)); const abortController = new AbortController(); - const signal = createRequestSignal( - abortController.signal, - props.settingsApi?.settings.fetch.timeout, - ); - const shouldUseGet = - props.settingsApi?.settings.fetch.useGETForQueries === true && operationType === 'query'; - const requestUrl = shouldUseGet - ? (() => { - const url = new URL(endpoint); - url.searchParams.set('query', activeOperation.query); - if (Object.keys(variables).length > 0) { - url.searchParams.set('variables', JSON.stringify(variables)); - } - if (Object.keys(extensions).length > 0) { - url.searchParams.set('extensions', JSON.stringify(extensions)); - } - return url.toString(); - })() - : endpoint; - - const response = fetchWithRetry( - requestUrl, - { - method: shouldUseGet ? 'GET' : 'POST', - body: shouldUseGet - ? undefined - : JSON.stringify({ - query: activeOperation.query, - variables, - extensions, - }), - headers: shouldUseGet - ? mergedHeaders - : { - ...mergedHeaders, - 'Content-Type': 'application/json', - }, - signal, + setStopOperationsFunctions(prev => ({ + ...prev, + [activeOperation.id]: () => { + abortController.abort(); }, - props.settingsApi?.settings.fetch.retry, - ).finally(() => { + })); + + const response = await executor({ + document, + variables, + extensions: { + ...extensions, + headers: mergedHeaders, + }, + signal: abortController.signal, + }); + + if (isAsyncIterable(response)) { + try { + for await (const item of response) { + options?.onResponse?.(JSON.stringify(item ?? {})); + } + } finally { + setStopOperationsFunctions(prev => { + const newStopOperationsFunctions = { ...prev }; + delete newStopOperationsFunctions[activeOperation.id]; + return newStopOperationsFunctions; + }); + } + + return null; + } else { + delete response.extensions.response.body; + setStopOperationsFunctions(prev => { const newStopOperationsFunctions = { ...prev }; delete newStopOperationsFunctions[activeOperation.id]; - return newStopOperationsFunctions; }); - }); - - setStopOperationsFunctions(prev => ({ - ...prev, - [activeOperation.id]: () => abortController.abort(), - })); + } return response; }, diff --git a/packages/libraries/laboratory/src/lib/subscriptions.ts b/packages/libraries/laboratory/src/lib/subscriptions.ts deleted file mode 100644 index 1fce9eceb96..00000000000 --- a/packages/libraries/laboratory/src/lib/subscriptions.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { - createClient as createSSEClient, - type ExecutionResult as SSEExecutionResult, -} from 'graphql-sse'; -import { createClient as createGraphQLWSClient, type ExecutionResult } from 'graphql-ws'; -import { SubscriptionClient } from 'subscriptions-transport-ws'; -import type { LaboratorySettings } from './settings'; - -type SubscriptionProtocol = LaboratorySettings['subscriptions']['protocol']; - -type SubscriptionRequest = { - query: string; - variables?: Record; - extensions?: Record; -}; - -type SubscriptionSink = { - next: (result: ExecutionResult | SSEExecutionResult) => void; - error: (error: Error) => void; - complete: () => void; -}; - -export function getSubscriptionUrl(endpoint: string, protocol: SubscriptionProtocol): string { - const url = new URL(endpoint); - - if (protocol === 'WS' || protocol === 'LEGACY_WS') { - if (url.protocol === 'https:') { - url.protocol = 'wss:'; - } else if (url.protocol === 'http:') { - url.protocol = 'ws:'; - } - } - - return url.toString(); -} - -function normalizeError(error: unknown): Error { - if (error instanceof Error) { - return error; - } - - if (typeof error === 'string') { - return new Error(error); - } - - return new Error('Unexpected subscription error.'); -} - -function createSSESubscriptionExecutor( - endpoint: string, - headers: Record, - singleConnection: boolean, -) { - const client = createSSEClient({ - url: endpoint, - singleConnection, - headers, - }); - - return { - subscribe(request: SubscriptionRequest, sink: SubscriptionSink) { - const unsubscribe = client.subscribe(request, { - next: sink.next, - error: error => sink.error(normalizeError(error)), - complete: sink.complete, - }); - - return () => { - unsubscribe(); - client.dispose(); - }; - }, - }; -} - -function createLegacyWSSubscriptionExecutor(endpoint: string, headers: Record) { - const client = new SubscriptionClient(endpoint, { - reconnect: false, - lazy: true, - connectionParams: headers, - }); - - return { - subscribe(request: SubscriptionRequest, sink: SubscriptionSink) { - const subscription = client.request(request).subscribe({ - next: sink.next, - error: error => sink.error(normalizeError(error)), - complete: sink.complete, - }); - - return () => { - subscription.unsubscribe(); - client.close(false, false); - }; - }, - }; -} - -function createWSSubscriptionExecutor(endpoint: string, headers: Record) { - const client = createGraphQLWSClient({ - url: endpoint, - connectionParams: headers, - }); - - return { - subscribe(request: SubscriptionRequest, sink: SubscriptionSink) { - const unsubscribe = client.subscribe(request, { - next: sink.next, - error: error => sink.error(normalizeError(error)), - complete: sink.complete, - }); - - return () => { - unsubscribe(); - void client.dispose(); - }; - }, - }; -} - -export function createSubscriptionExecutor(args: { - endpoint: string; - protocol: SubscriptionProtocol; - headers: Record; -}) { - const subscriptionUrl = getSubscriptionUrl(args.endpoint, args.protocol); - - switch (args.protocol) { - case 'SSE': - return createSSESubscriptionExecutor(subscriptionUrl, args.headers, false); - case 'GRAPHQL_SSE': - return createSSESubscriptionExecutor(subscriptionUrl, args.headers, true); - case 'LEGACY_WS': - return createLegacyWSSubscriptionExecutor(subscriptionUrl, args.headers); - case 'WS': - default: - return createWSSubscriptionExecutor(subscriptionUrl, args.headers); - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e93e89a19c1..14038e6337c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -288,7 +288,7 @@ importers: devDependencies: '@graphql-hive/gateway': specifier: ^2.1.19 - version: 2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3) + version: 2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3) '@types/js-yaml': specifier: 4.0.9 version: 4.0.9 @@ -664,6 +664,9 @@ importers: '@base-ui/react': specifier: ^1.1.0 version: 1.1.0(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@graphql-tools/url-loader': + specifier: ^9.1.0 + version: 9.1.0(@types/node@24.10.9)(graphql@16.12.0) radix-ui: specifier: ^1.4.3 version: 1.4.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -856,7 +859,7 @@ importers: version: 0.52.2 monaco-graphql: specifier: ^1.7.3 - version: 1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.4.2) + version: 1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.8.1) monacopilot: specifier: ^1.2.12 version: 1.2.12(monaco-editor@0.52.2) @@ -946,7 +949,7 @@ importers: version: 0.16.6(typescript@5.7.3) graphql-yoga: specifier: 5.13.3 - version: 5.13.3(graphql@16.9.0) + version: 5.13.3(graphql@16.12.0) ioredis: specifier: ^5.0.0 version: 5.8.2 @@ -965,7 +968,7 @@ importers: version: link:../laboratory graphql-yoga: specifier: 5.13.3 - version: 5.13.3(graphql@16.9.0) + version: 5.13.3(graphql@16.12.0) publishDirectory: dist packages/libraries/router: {} @@ -980,7 +983,7 @@ importers: version: 1.0.9(pino@10.3.0) '@graphql-yoga/plugin-persisted-operations': specifier: ^3.9.0 - version: 3.9.0(@graphql-tools/utils@11.0.0(graphql@16.9.0))(graphql-yoga@5.13.3(graphql@16.9.0))(graphql@16.9.0) + version: 3.9.0(@graphql-tools/utils@11.0.1-alpha-20260403104244-04c5cf56aba6702e37b7efb722f6b5158f5a9de2(graphql@16.9.0))(graphql-yoga@5.13.3(graphql@16.9.0))(graphql@16.9.0) graphql: specifier: ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 version: 16.9.0 @@ -1446,7 +1449,7 @@ importers: devDependencies: '@graphql-eslint/eslint-plugin': specifier: 3.20.1 - version: 3.20.1(patch_hash=695fba67df25ba9d46472c8398c94c6a2ccf75d902321d8f95150f68e940313e)(@babel/core@7.28.5)(@types/node@24.10.9)(cosmiconfig-toml-loader@1.0.0)(encoding@0.1.13)(graphql@16.9.0) + version: 3.20.1(patch_hash=695fba67df25ba9d46472c8398c94c6a2ccf75d902321d8f95150f68e940313e)(@babel/core@7.28.5)(@types/node@25.5.0)(cosmiconfig-toml-loader@1.0.0)(encoding@0.1.13)(graphql@16.9.0) '@hive/service-common': specifier: workspace:* version: link:../service-common @@ -1705,7 +1708,7 @@ importers: version: 1.0.9(pino@10.3.0) '@graphql-hive/plugin-opentelemetry': specifier: 1.3.0 - version: 1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + version: 1.3.0(encoding@0.1.13)(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0) '@opentelemetry/api': specifier: 1.9.0 version: 1.9.0 @@ -2389,7 +2392,7 @@ importers: version: 0.52.2 monaco-graphql: specifier: ^1.7.2 - version: 1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.4.2) + version: 1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.8.1) monaco-themes: specifier: 0.4.4 version: 0.4.4 @@ -4749,6 +4752,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-common@1.0.6': + resolution: {integrity: sha512-23/K5C+LSlHDI0mj2SwCJ33RcELCcyDUgABm1Z8St7u/4Z5+95i925H/NAjUyggRjiaY8vYtNiMOPE49aPX1sg==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-graphql-ws@0.0.14': resolution: {integrity: sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==} peerDependencies: @@ -4778,6 +4787,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-graphql-ws@3.1.5': + resolution: {integrity: sha512-WXRsfwu9AkrORD9nShrd61OwwxeQ5+eXYcABRR3XPONFIS8pWQfDJGGqxql9/227o/s0DV5SIfkBURb5Knzv+A==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-http@0.1.9': resolution: {integrity: sha512-tNzMt5qc1ptlHKfpSv9wVBVKCZ7gks6Yb/JcYJluxZIT4qRV+TtOFjpptfBU63usgrGVOVcGjzWc/mt7KhmmpQ==} peerDependencies: @@ -4801,6 +4816,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-http@3.2.1': + resolution: {integrity: sha512-53i0TYO0cznIlZDJcnq4gQ6SOZ8efGgCDV33MYh6oqEapcp36tCMEVnVGVxcX5qRRyNHkqTY6hkA+/AyK9kicQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-legacy-ws@0.0.11': resolution: {integrity: sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==} peerDependencies: @@ -4818,6 +4839,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-legacy-ws@1.1.26': + resolution: {integrity: sha512-rlFHk8XoRCXjARQAlHTgtisyE5KJxMb9UyR4hRbD6tLlYjmzNf9ms8GjsLYe/j1QpHJ7fNDm9aXqj1+evhQ/MQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor@0.0.17': resolution: {integrity: sha512-DVKyMclsNY8ei14FUrR4jn24VHB3EuFldD8yGWrcJ8cudSh47sknznvXN6q0ffqDeAf0IlZSaBCHrOTBqA7OfQ==} peerDependencies: @@ -5085,6 +5112,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/url-loader@9.1.0': + resolution: {integrity: sha512-G3Ul5sLsLOJlfT4LkdQSKcHoJ+4CuSeUbRT1XjBXZSgNkeXZt2MXHJQX0X8+b4mJq7fI3thcfbiB+5sEUlnT7g==} + engines: {node: '>=20.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@10.11.0': resolution: {integrity: sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==} engines: {node: '>=16.0.0'} @@ -5115,6 +5148,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@11.0.1-alpha-20260403104244-04c5cf56aba6702e37b7efb722f6b5158f5a9de2': + resolution: {integrity: sha512-8uABmdEMr7gS7hOcEO0p6Y3cQZXNREE/4YWcSZWPuDSDU90rGJscwMlTcgW3zFwb3qqJ9ZpskQRq4ae8gMpa1Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@9.2.1': resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} peerDependencies: @@ -5132,12 +5171,6 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/wrap@11.0.5': - resolution: {integrity: sha512-W0lm1AWLUAF2uKyrplC5PmyVJGCD/n7HO/R+bxoAIGQlZ2ESTbdB1DqZalMUF3D6AwmdzgTsDgoZBJgndnWs9g==} - engines: {node: '>=20.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/wrap@11.1.2': resolution: {integrity: sha512-TcKZzUzJNmuyMBQ1oMdnxhBUUacN/5VEJu0/1KVce2aIzCwTTaN9JTU3MgjO7l5Ixn4QLkc6XbxYNv0cHDQgtQ==} engines: {node: '>=20.0.0'} @@ -17835,6 +17868,10 @@ packages: resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} engines: {node: '>=0.10.0'} + sync-fetch@0.6.0: + resolution: {integrity: sha512-IELLEvzHuCfc1uTsshPK58ViSdNqXxlml1U+fmwJIKLYKOr/rAtBrorE2RYm5IHaMpDNlmC0fr1LAvdXvyheEQ==} + engines: {node: '>=18'} + sync-fetch@0.6.0-2: resolution: {integrity: sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==} engines: {node: '>=18'} @@ -19278,6 +19315,14 @@ snapshots: '@apollo/utils.logger': 2.0.0 graphql: 16.9.0 + '@apollo/server-gateway-interface@2.0.0(graphql@16.12.0)': + dependencies: + '@apollo/usage-reporting-protobuf': 4.1.1 + '@apollo/utils.fetcher': 3.1.0 + '@apollo/utils.keyvaluecache': 4.0.0 + '@apollo/utils.logger': 3.0.0 + graphql: 16.12.0 + '@apollo/server-gateway-interface@2.0.0(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -19338,6 +19383,10 @@ snapshots: '@apollo/utils.isnodelike': 3.0.0 sha.js: 2.4.11 + '@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + '@apollo/utils.dropunuseddefinitions@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 @@ -19371,23 +19420,50 @@ snapshots: '@apollo/utils.logger@3.0.0': {} + '@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + '@apollo/utils.printwithreducedwhitespace@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 + '@apollo/utils.removealiases@2.0.1(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + '@apollo/utils.removealiases@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 + '@apollo/utils.sortast@2.0.1(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + lodash.sortby: 4.7.0 + '@apollo/utils.sortast@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 lodash.sortby: 4.7.0 + '@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + '@apollo/utils.stripsensitiveliterals@2.0.1(graphql@16.9.0)': dependencies: graphql: 16.9.0 + '@apollo/utils.usagereporting@2.1.0(graphql@16.12.0)': + dependencies: + '@apollo/usage-reporting-protobuf': 4.1.1 + '@apollo/utils.dropunuseddefinitions': 2.0.1(graphql@16.12.0) + '@apollo/utils.printwithreducedwhitespace': 2.0.1(graphql@16.12.0) + '@apollo/utils.removealiases': 2.0.1(graphql@16.12.0) + '@apollo/utils.sortast': 2.0.1(graphql@16.12.0) + '@apollo/utils.stripsensitiveliterals': 2.0.1(graphql@16.12.0) + graphql: 16.12.0 + '@apollo/utils.usagereporting@2.1.0(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -21464,12 +21540,25 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 + '@envelop/disable-introspection@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + graphql: 16.12.0 + tslib: 2.8.1 + '@envelop/disable-introspection@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 graphql: 16.9.0 tslib: 2.8.1 + '@envelop/extended-validation@7.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + '@envelop/extended-validation@7.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -21477,6 +21566,16 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@envelop/generic-auth@11.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@envelop/extended-validation': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + tslib: 2.8.1 + '@envelop/generic-auth@11.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -21512,6 +21611,12 @@ snapshots: '@envelop/core': 5.5.1 graphql: 16.9.0 + '@envelop/on-resolve@7.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + '@envelop/on-resolve@7.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -21527,22 +21632,22 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@envelop/prometheus@14.0.0(@envelop/core@5.5.1)(graphql@16.9.0)(prom-client@15.1.3)': + '@envelop/prometheus@14.0.0(@envelop/core@5.5.1)(graphql@16.12.0)(prom-client@15.1.3)': dependencies: '@envelop/core': 5.5.1 - '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.9.0) - graphql: 16.9.0 + '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + graphql: 16.12.0 prom-client: 15.1.3 tslib: 2.8.1 - '@envelop/rate-limiter@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': + '@envelop/rate-limiter@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': dependencies: '@envelop/core': 5.5.1 - '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.9.0) - '@graphql-tools/utils': 10.9.1(graphql@16.9.0) + '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) '@types/picomatch': 4.0.2 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 lodash.get: 4.4.2 ms: 2.1.3 picomatch: 4.0.4 @@ -21558,6 +21663,17 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 + '@envelop/response-cache@7.1.3(@envelop/core@5.5.1)(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + fast-json-stable-stringify: 2.1.0 + graphql: 16.12.0 + lru-cache: 10.2.0 + tslib: 2.8.1 + '@envelop/response-cache@7.1.3(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -21569,6 +21685,17 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 + '@envelop/response-cache@9.0.0(@envelop/core@5.5.1)(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + fast-json-stable-stringify: 2.1.0 + graphql: 16.12.0 + lru-cache: 11.0.2 + tslib: 2.8.1 + '@envelop/response-cache@9.0.0(@envelop/core@5.5.1)(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -22239,6 +22366,46 @@ snapshots: - supports-color - utf-8-validate + '@graphql-eslint/eslint-plugin@3.20.1(patch_hash=695fba67df25ba9d46472c8398c94c6a2ccf75d902321d8f95150f68e940313e)(@babel/core@7.28.5)(@types/node@25.5.0)(cosmiconfig-toml-loader@1.0.0)(encoding@0.1.13)(graphql@16.9.0)': + dependencies: + '@babel/code-frame': 7.29.0 + '@graphql-tools/code-file-loader': 7.3.23(@babel/core@7.28.5)(graphql@16.9.0) + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.28.5)(graphql@16.9.0) + '@graphql-tools/utils': 9.2.1(graphql@16.9.0) + chalk: 4.1.2 + debug: 4.4.3(supports-color@8.1.1) + fast-glob: 3.3.3 + graphql: 16.9.0 + graphql-config: 4.5.0(@types/node@25.5.0)(cosmiconfig-toml-loader@1.0.0)(encoding@0.1.13)(graphql@16.9.0) + graphql-depth-limit: 1.1.0(graphql@16.9.0) + lodash.lowercase: 4.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - encoding + - supports-color + - utf-8-validate + + '@graphql-hive/core@0.18.0(graphql@16.12.0)(pino@10.3.0)': + dependencies: + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-hive/signal': 2.0.0 + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@whatwg-node/fetch': 0.10.13 + async-retry: 1.3.3 + events: 3.3.0 + graphql: 16.12.0 + js-md5: 0.8.3 + lodash.sortby: 4.7.0 + tiny-lru: 8.0.2 + transitivePeerDependencies: + - '@logtape/logtape' + - pino + - winston + '@graphql-hive/core@0.18.0(graphql@16.9.0)(pino@10.3.0)': dependencies: '@graphql-hive/logger': 1.0.9(pino@10.3.0) @@ -22256,6 +22423,106 @@ snapshots: - pino - winston + '@graphql-hive/gateway-runtime@2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': + dependencies: + '@envelop/core': 5.5.1 + '@envelop/disable-introspection': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@envelop/generic-auth': 11.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@envelop/instrumentation': 1.0.0 + '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) + '@graphql-hive/signal': 2.0.0 + '@graphql-hive/yoga': 0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@25.5.0)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-response-cache': 0.104.18(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) + '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@graphql-yoga/plugin-apollo-usage-report': 0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@graphql-yoga/plugin-csrf-prevention': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) + '@graphql-yoga/plugin-defer-stream': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@types/node': 25.5.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + '@whatwg-node/server': 0.10.17 + '@whatwg-node/server-plugin-cookies': 1.0.5 + graphql: 16.12.0 + graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) + graphql-yoga: 5.17.1(graphql@16.12.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@logtape/logtape' + - '@nats-io/nats-core' + - crossws + - ioredis + - pino + - uWebSockets.js + - winston + - ws + + '@graphql-hive/gateway-runtime@2.5.0(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0)': + dependencies: + '@envelop/core': 5.5.1 + '@envelop/disable-introspection': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@envelop/generic-auth': 11.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@envelop/instrumentation': 1.0.0 + '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) + '@graphql-hive/signal': 2.0.0 + '@graphql-hive/yoga': 0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@25.5.0)(graphql@16.12.0)(pino@10.3.0) + '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0) + '@graphql-mesh/plugin-response-cache': 0.104.18(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) + '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) + '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@graphql-yoga/plugin-apollo-usage-report': 0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@graphql-yoga/plugin-csrf-prevention': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) + '@graphql-yoga/plugin-defer-stream': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@types/node': 25.5.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + '@whatwg-node/server': 0.10.17 + '@whatwg-node/server-plugin-cookies': 1.0.5 + graphql: 16.12.0 + graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) + graphql-yoga: 5.17.1(graphql@16.12.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@logtape/logtape' + - '@nats-io/nats-core' + - crossws + - ioredis + - pino + - uWebSockets.js + - winston + - ws + '@graphql-hive/gateway-runtime@2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': dependencies: '@envelop/core': 5.5.1 @@ -22306,41 +22573,41 @@ snapshots: - winston - ws - '@graphql-hive/gateway@2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)': + '@graphql-hive/gateway@2.1.19(@types/ioredis-mock@8.2.5)(@types/node@24.10.9)(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)': dependencies: '@commander-js/extra-typings': 14.0.0(commander@14.0.2) '@envelop/core': 5.5.1 '@escape.tech/graphql-armor-block-field-suggestions': 3.0.1 '@escape.tech/graphql-armor-max-depth': 2.4.2 '@escape.tech/graphql-armor-max-tokens': 2.5.1 - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/importer': 2.0.0 '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-hive/plugin-aws-sigv4': 2.0.17(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-hive/plugin-opentelemetry': 1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/plugin-aws-sigv4': 2.0.17(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-hive/plugin-opentelemetry': 1.3.0(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) - '@graphql-mesh/cache-cfw-kv': 0.105.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/cache-localforage': 0.105.17(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/cache-redis': 0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.9.0) - '@graphql-mesh/cache-upstash-redis': 0.1.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-http-cache': 0.105.17(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-jit': 0.2.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-jwt-auth': 2.0.9(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-prometheus': 2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0) - '@graphql-mesh/plugin-rate-limit': 0.105.5(@envelop/core@5.5.1)(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/plugin-snapshot': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/transport-http': 1.0.12(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/transport-http-callback': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/transport-ws': 2.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-tools/code-file-loader': 8.1.26(graphql@16.9.0) - '@graphql-tools/graphql-file-loader': 8.1.7(graphql@16.9.0) - '@graphql-tools/load': 8.1.6(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) - '@graphql-yoga/render-graphiql': 5.16.2(graphql-yoga@5.17.1(graphql@16.9.0)) + '@graphql-mesh/cache-cfw-kv': 0.105.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cache-localforage': 0.105.17(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cache-redis': 0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.12.0) + '@graphql-mesh/cache-upstash-redis': 0.1.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/hmac-upstream-signature': 2.0.8(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-http-cache': 0.105.17(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-jit': 0.2.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-jwt-auth': 2.0.9(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-prometheus': 2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0) + '@graphql-mesh/plugin-rate-limit': 0.105.5(@envelop/core@5.5.1)(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/plugin-snapshot': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/transport-http': 1.0.12(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/transport-http-callback': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/transport-ws': 2.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/code-file-loader': 8.1.26(graphql@16.12.0) + '@graphql-tools/graphql-file-loader': 8.1.7(graphql@16.12.0) + '@graphql-tools/load': 8.1.6(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-yoga/render-graphiql': 5.16.2(graphql-yoga@5.17.1(graphql@16.12.0)) '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.208.0 '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) @@ -22356,9 +22623,9 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) commander: 14.0.2 dotenv: 17.2.3 - graphql: 16.9.0 - graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) - graphql-yoga: 5.17.1(graphql@16.9.0) + graphql: 16.12.0 + graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) + graphql-yoga: 5.17.1(graphql@16.12.0) tslib: 2.8.1 ws: 8.18.0 transitivePeerDependencies: @@ -22385,13 +22652,13 @@ snapshots: optionalDependencies: pino: 10.3.0 - '@graphql-hive/plugin-aws-sigv4@2.0.17(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-hive/plugin-aws-sigv4@2.0.17(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@aws-sdk/client-sts': 3.939.0 - '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/fusion-runtime': 1.6.2(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) '@whatwg-node/promise-helpers': 1.3.2 aws4: 1.13.2 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -22402,6 +22669,84 @@ snapshots: - pino - winston + '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': + dependencies: + '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) + '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/auto-instrumentations-node': 0.67.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@logtape/logtape' + - '@nats-io/nats-core' + - crossws + - encoding + - ioredis + - pino + - supports-color + - uWebSockets.js + - winston + - ws + + '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0)': + dependencies: + '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) + '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/auto-instrumentations-node': 0.67.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@logtape/logtape' + - '@nats-io/nats-core' + - crossws + - encoding + - ioredis + - pino + - supports-color + - uWebSockets.js + - winston + - ws + '@graphql-hive/plugin-opentelemetry@1.3.0(encoding@0.1.13)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0)': dependencies: '@graphql-hive/core': 0.18.0(graphql@16.9.0)(pino@10.3.0) @@ -22453,6 +22798,18 @@ snapshots: '@graphql-hive/signal@2.0.0': {} + '@graphql-hive/yoga@0.46.0(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(pino@10.3.0)': + dependencies: + '@graphql-hive/core': 0.18.0(graphql@16.12.0)(pino@10.3.0) + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-yoga/plugin-persisted-operations': 3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + transitivePeerDependencies: + - '@logtape/logtape' + - pino + - winston + '@graphql-hive/yoga@0.46.0(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(pino@10.3.0)': dependencies: '@graphql-hive/core': 0.18.0(graphql@16.9.0)(pino@10.3.0) @@ -22696,48 +23053,48 @@ snapshots: - '@graphql-inspector/loaders' - yargs - '@graphql-mesh/cache-cfw-kv@0.105.16(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-cfw-kv@0.105.16(graphql@16.12.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-inmemory-lru@0.8.17(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-inmemory-lru@0.8.17(graphql@16.12.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-localforage@0.105.17(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-localforage@0.105.17(graphql@16.12.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cache-inmemory-lru': 0.8.17(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - graphql: 16.9.0 + '@graphql-mesh/cache-inmemory-lru': 0.8.17(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + graphql: 16.12.0 localforage: 1.10.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/cache-redis@0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.9.0)': + '@graphql-mesh/cache-redis@0.105.2(@types/ioredis-mock@8.2.5)(graphql@16.12.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) '@opentelemetry/api': 1.9.0 '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.9.0 + graphql: 16.12.0 ioredis: 5.8.2 ioredis-mock: 8.13.1(@types/ioredis-mock@8.2.5)(ioredis@5.8.2) tslib: 2.8.1 @@ -22746,46 +23103,114 @@ snapshots: - '@types/ioredis-mock' - supports-color - '@graphql-mesh/cache-upstash-redis@0.1.16(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/cache-upstash-redis@0.1.16(graphql@16.12.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) '@upstash/redis': 1.35.6 '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis + '@graphql-mesh/cross-helpers@0.4.10(graphql@16.12.0)': + dependencies: + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + graphql: 16.12.0 + path-browserify: 1.0.1 + '@graphql-mesh/cross-helpers@0.4.10(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 path-browserify: 1.0.1 - '@graphql-mesh/fusion-runtime@1.6.2(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/fusion-runtime@1.6.2(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@envelop/core': 5.5.1 '@envelop/instrumentation': 1.0.0 '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) - '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) - '@graphql-tools/executor': 1.5.0(graphql@16.9.0) - '@graphql-tools/federation': 4.2.6(@types/node@24.10.9)(graphql@16.9.0) - '@graphql-tools/merge': 9.1.5(graphql@16.9.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.9.0) - '@graphql-tools/stitching-directives': 4.0.8(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.9.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/federation': 4.2.6(@types/node@24.10.9)(graphql@16.12.0) + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) + '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 - graphql-yoga: 5.17.1(graphql@16.9.0) + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@logtape/logtape' + - '@nats-io/nats-core' + - '@types/node' + - ioredis + - pino + - winston + + '@graphql-mesh/fusion-runtime@1.6.2(@types/node@25.5.0)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + dependencies: + '@envelop/core': 5.5.1 + '@envelop/instrumentation': 1.0.0 + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) + '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@logtape/logtape' + - '@nats-io/nats-core' + - '@types/node' + - ioredis + - pino + - winston + + '@graphql-mesh/fusion-runtime@1.6.2(@types/node@25.5.0)(graphql@16.12.0)(pino@10.3.0)': + dependencies: + '@envelop/core': 5.5.1 + '@envelop/instrumentation': 1.0.0 + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) + '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/federation': 4.2.6(@types/node@25.5.0)(graphql@16.12.0) + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) + '@graphql-tools/stitching-directives': 4.0.8(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -22826,6 +23251,36 @@ snapshots: - pino - winston + '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.12.0)': + dependencies: + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + json-stable-stringify: 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@nats-io/nats-core' + - ioredis + + '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.12.0)(ioredis@5.8.2)': + dependencies: + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + json-stable-stringify: 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@nats-io/nats-core' + - ioredis + '@graphql-mesh/hmac-upstream-signature@2.0.8(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) @@ -22841,37 +23296,37 @@ snapshots: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-http-cache@0.105.17(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-http-cache@0.105.17(graphql@16.12.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 http-cache-semantics: 4.1.1 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-jit@0.2.16(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-jit@0.2.16(graphql@16.12.0)(ioredis@5.8.2)': dependencies: '@envelop/core': 5.5.1 - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.9.1(graphql@16.9.0) - graphql: 16.9.0 - graphql-jit: 0.8.7(graphql@16.9.0) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + graphql: 16.12.0 + graphql-jit: 0.8.7(graphql@16.12.0) tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-jwt-auth@2.0.9(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-jwt-auth@2.0.9(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-yoga/plugin-jwt': 3.10.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0) - graphql: 16.9.0 + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-yoga/plugin-jwt': 3.10.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' @@ -22879,16 +23334,16 @@ snapshots: - ioredis - supports-color - '@graphql-mesh/plugin-prometheus@2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0)': + '@graphql-mesh/plugin-prometheus@2.1.5(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(prom-client@15.1.3)(ws@8.18.0)': dependencies: - '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) + '@graphql-hive/gateway-runtime': 2.5.0(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)(ws@8.18.0) '@graphql-hive/logger': 1.0.9(pino@10.3.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) - '@graphql-yoga/plugin-prometheus': 6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(prom-client@15.1.3) - graphql: 16.9.0 + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-yoga/plugin-prometheus': 6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(prom-client@15.1.3) + graphql: 16.12.0 prom-client: 15.1.3 tslib: 2.8.1 transitivePeerDependencies: @@ -22904,22 +23359,60 @@ snapshots: - winston - ws - '@graphql-mesh/plugin-rate-limit@0.105.5(@envelop/core@5.5.1)(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-rate-limit@0.105.5(@envelop/core@5.5.1)(graphql@16.12.0)(ioredis@5.8.2)': dependencies: - '@envelop/rate-limiter': 9.0.0(@envelop/core@5.5.1)(graphql@16.9.0) - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-tools/utils': 10.9.1(graphql@16.9.0) + '@envelop/rate-limiter': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@envelop/core' - '@nats-io/nats-core' - ioredis + '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@envelop/response-cache': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@graphql-yoga/plugin-response-cache': 3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + cache-control-parser: 2.0.6 + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@nats-io/nats-core' + - ioredis + + '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.12.0)(ioredis@5.8.2)': + dependencies: + '@envelop/core': 5.5.1 + '@envelop/response-cache': 9.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@graphql-yoga/plugin-response-cache': 3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + cache-control-parser: 2.0.6 + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@nats-io/nats-core' + - ioredis + '@graphql-mesh/plugin-response-cache@0.104.18(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@envelop/core': 5.5.1 @@ -22939,20 +23432,28 @@ snapshots: - '@nats-io/nats-core' - ioredis - '@graphql-mesh/plugin-snapshot@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': + '@graphql-mesh/plugin-snapshot@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) '@whatwg-node/fetch': 0.10.13 - graphql: 16.9.0 + graphql: 16.12.0 minimatch: 10.2.4 tslib: 2.8.1 transitivePeerDependencies: - '@nats-io/nats-core' - ioredis + '@graphql-mesh/string-interpolation@0.5.9(graphql@16.12.0)': + dependencies: + dayjs: 1.11.18 + graphql: 16.12.0 + json-pointer: 0.6.2 + lodash.get: 4.4.2 + tslib: 2.8.1 + '@graphql-mesh/string-interpolation@0.5.9(graphql@16.9.0)': dependencies: dayjs: 1.11.18 @@ -22961,6 +23462,44 @@ snapshots: lodash.get: 4.4.2 tslib: 2.8.1 + '@graphql-mesh/transport-common@1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': + dependencies: + '@envelop/core': 5.5.1 + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) + '@graphql-hive/signal': 2.0.0 + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@logtape/logtape' + - '@nats-io/nats-core' + - ioredis + - pino + - winston + + '@graphql-mesh/transport-common@1.0.12(graphql@16.12.0)(pino@10.3.0)': + dependencies: + '@envelop/core': 5.5.1 + '@graphql-hive/logger': 1.0.9(pino@10.3.0) + '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) + '@graphql-hive/signal': 2.0.0 + '@graphql-mesh/types': 0.104.16(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@logtape/logtape' + - '@nats-io/nats-core' + - ioredis + - pino + - winston + '@graphql-mesh/transport-common@1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@envelop/core': 5.5.1 @@ -22980,20 +23519,20 @@ snapshots: - pino - winston - '@graphql-mesh/transport-http-callback@1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-http-callback@1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: '@graphql-hive/signal': 2.0.0 - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -23002,17 +23541,17 @@ snapshots: - pino - winston - '@graphql-mesh/transport-http@1.0.12(@types/node@24.10.9)(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-http@1.0.12(@types/node@24.10.9)(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@logtape/logtape' @@ -23022,17 +23561,17 @@ snapshots: - pino - winston - '@graphql-mesh/transport-ws@2.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0)': + '@graphql-mesh/transport-ws@2.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0)': dependencies: - '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.9.0) - '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.9.0) - '@graphql-mesh/transport-common': 1.0.12(graphql@16.9.0)(ioredis@5.8.2)(pino@10.3.0) - '@graphql-mesh/types': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-mesh/utils': 0.104.16(graphql@16.9.0)(ioredis@5.8.2) - '@graphql-tools/executor-graphql-ws': 3.1.3(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) - graphql: 16.9.0 - graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/transport-common': 1.0.12(graphql@16.12.0)(ioredis@5.8.2)(pino@10.3.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-mesh/utils': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/executor-graphql-ws': 3.1.3(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) tslib: 2.8.1 ws: 8.18.0 transitivePeerDependencies: @@ -23047,6 +23586,36 @@ snapshots: - utf-8-validate - winston + '@graphql-mesh/types@0.104.16(graphql@16.12.0)': + dependencies: + '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) + '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) + '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.6 + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@nats-io/nats-core' + - ioredis + + '@graphql-mesh/types@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': + dependencies: + '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) + '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) + '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.6 + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@nats-io/nats-core' + - ioredis + '@graphql-mesh/types@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@graphql-hive/pubsub': 2.1.1(ioredis@5.8.2) @@ -23062,6 +23631,54 @@ snapshots: - '@nats-io/nats-core' - ioredis + '@graphql-mesh/utils@0.104.16(graphql@16.12.0)': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0) + '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) + '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + dset: 3.1.4 + graphql: 16.12.0 + js-yaml: 4.1.1 + lodash.get: 4.4.2 + lodash.topath: 4.5.2 + tiny-lru: 11.4.7 + tslib: 2.8.1 + transitivePeerDependencies: + - '@nats-io/nats-core' + - ioredis + + '@graphql-mesh/utils@0.104.16(graphql@16.12.0)(ioredis@5.8.2)': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@graphql-mesh/cross-helpers': 0.4.10(graphql@16.12.0) + '@graphql-mesh/string-interpolation': 0.5.9(graphql@16.12.0) + '@graphql-mesh/types': 0.104.16(graphql@16.12.0)(ioredis@5.8.2) + '@graphql-tools/batch-delegate': 10.0.5(graphql@16.12.0) + '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + dset: 3.1.4 + graphql: 16.12.0 + js-yaml: 4.1.1 + lodash.get: 4.4.2 + lodash.topath: 4.5.2 + tiny-lru: 11.4.7 + tslib: 2.8.1 + transitivePeerDependencies: + - '@nats-io/nats-core' + - ioredis + '@graphql-mesh/utils@0.104.16(graphql@16.9.0)(ioredis@5.8.2)': dependencies: '@envelop/instrumentation': 1.0.0 @@ -23071,7 +23688,7 @@ snapshots: '@graphql-tools/batch-delegate': 10.0.5(graphql@16.9.0) '@graphql-tools/delegate': 11.1.3(graphql@16.9.0) '@graphql-tools/utils': 10.9.1(graphql@16.9.0) - '@graphql-tools/wrap': 11.0.5(graphql@16.9.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.9.0) '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 @@ -23094,6 +23711,15 @@ snapshots: sync-fetch: 0.6.0-2 tslib: 2.8.1 + '@graphql-tools/batch-delegate@10.0.5(graphql@16.12.0)': + dependencies: + '@graphql-tools/delegate': 11.1.3(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/batch-delegate@10.0.5(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 11.1.3(graphql@16.9.0) @@ -23103,6 +23729,15 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/batch-delegate@10.0.8(graphql@16.12.0)': + dependencies: + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/batch-delegate@10.0.8(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) @@ -23121,6 +23756,14 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/batch-execute@10.0.4(graphql@16.12.0)': + dependencies: + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/batch-execute@10.0.4(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -23198,12 +23841,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/code-file-loader@8.1.26(graphql@16.9.0)': + '@graphql-tools/code-file-loader@8.1.26(graphql@16.12.0)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.25(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-tools/graphql-tag-pluck': 8.3.25(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) globby: 11.1.0 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: @@ -23234,6 +23877,18 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/delegate@11.1.3(graphql@16.12.0)': + dependencies: + '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/delegate@11.1.3(graphql@16.9.0)': dependencies: '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) @@ -23246,6 +23901,18 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/delegate@12.0.2(graphql@16.12.0)': + dependencies: + '@graphql-tools/batch-execute': 10.0.4(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + dataloader: 2.2.3 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/delegate@12.0.2(graphql@16.9.0)': dependencies: '@graphql-tools/batch-execute': 10.0.4(graphql@16.9.0) @@ -23293,12 +23960,24 @@ snapshots: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 + '@graphql-tools/executor-common@1.0.5(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + '@graphql-tools/executor-common@1.0.5(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 '@graphql-tools/utils': 10.11.0(graphql@16.9.0) graphql: 16.9.0 + '@graphql-tools/executor-common@1.0.6(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@graphql-tools/utils': 11.0.0(graphql@16.12.0) + graphql: 16.12.0 + '@graphql-tools/executor-graphql-ws@0.0.14(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) @@ -23358,13 +24037,30 @@ snapshots: - uWebSockets.js - utf-8-validate - '@graphql-tools/executor-graphql-ws@3.1.3(graphql@16.9.0)': + '@graphql-tools/executor-graphql-ws@3.1.3(graphql@16.12.0)': dependencies: - '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.9.0 - graphql-ws: 6.0.6(graphql@16.9.0)(ws@8.18.0) + graphql: 16.12.0 + graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) + isows: 1.0.7(ws@8.18.0) + tslib: 2.8.1 + ws: 8.18.0 + transitivePeerDependencies: + - '@fastify/websocket' + - bufferutil + - crossws + - uWebSockets.js + - utf-8-validate + + '@graphql-tools/executor-graphql-ws@3.1.5(graphql@16.12.0)': + dependencies: + '@graphql-tools/executor-common': 1.0.6(graphql@16.12.0) + '@graphql-tools/utils': 11.0.0(graphql@16.12.0) + '@whatwg-node/disposablestack': 0.0.6 + graphql: 16.12.0 + graphql-ws: 6.0.6(graphql@16.12.0)(ws@8.18.0) isows: 1.0.7(ws@8.18.0) tslib: 2.8.1 ws: 8.18.0 @@ -23427,26 +24123,41 @@ snapshots: '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.9.0 - meros: 1.2.1(@types/node@24.10.9) + meros: 1.3.2(@types/node@24.10.9) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-http@3.0.7(@types/node@24.10.9)(graphql@16.9.0)': + '@graphql-tools/executor-http@3.0.7(@types/node@24.10.9)(graphql@16.12.0)': dependencies: '@graphql-hive/signal': 2.0.0 - '@graphql-tools/executor-common': 1.0.5(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 meros: 1.3.2(@types/node@24.10.9) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' + '@graphql-tools/executor-http@3.0.7(@types/node@25.5.0)(graphql@16.12.0)': + dependencies: + '@graphql-hive/signal': 2.0.0 + '@graphql-tools/executor-common': 1.0.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + meros: 1.3.2(@types/node@25.5.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + '@graphql-tools/executor-http@3.0.7(@types/node@25.5.0)(graphql@16.9.0)': dependencies: '@graphql-hive/signal': 2.0.0 @@ -23462,6 +24173,21 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@graphql-tools/executor-http@3.2.1(@types/node@24.10.9)(graphql@16.12.0)': + dependencies: + '@graphql-hive/signal': 2.0.0 + '@graphql-tools/executor-common': 1.0.6(graphql@16.12.0) + '@graphql-tools/utils': 11.0.0(graphql@16.12.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + meros: 1.3.2(@types/node@24.10.9) + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + '@graphql-tools/executor-legacy-ws@0.0.11(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) @@ -23498,6 +24224,18 @@ snapshots: - bufferutil - utf-8-validate + '@graphql-tools/executor-legacy-ws@1.1.26(graphql@16.12.0)': + dependencies: + '@graphql-tools/utils': 11.0.0(graphql@16.12.0) + '@types/ws': 8.5.3 + graphql: 16.12.0 + isomorphic-ws: 5.0.0(ws@8.18.0) + tslib: 2.8.1 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@graphql-tools/executor@0.0.17(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.9.0) @@ -23517,6 +24255,16 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/executor@1.5.0(graphql@16.12.0)': + dependencies: + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/executor@1.5.0(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -23527,22 +24275,42 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/federation@4.2.6(@types/node@24.10.9)(graphql@16.9.0)': + '@graphql-tools/federation@4.2.6(@types/node@24.10.9)(graphql@16.12.0)': dependencies: - '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) - '@graphql-tools/executor': 1.5.0(graphql@16.9.0) - '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.9.0) - '@graphql-tools/merge': 9.1.5(graphql@16.9.0) - '@graphql-tools/schema': 10.0.29(graphql@16.9.0) - '@graphql-tools/stitch': 10.1.6(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) - '@graphql-tools/wrap': 11.1.2(graphql@16.9.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/executor-http': 3.0.7(@types/node@24.10.9)(graphql@16.12.0) + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) '@graphql-yoga/typed-event-target': 3.0.2 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/events': 0.1.2 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + + '@graphql-tools/federation@4.2.6(@types/node@25.5.0)(graphql@16.12.0)': + dependencies: + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/executor-http': 3.0.7(@types/node@25.5.0)(graphql@16.12.0) + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/stitch': 10.1.6(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@graphql-yoga/typed-event-target': 3.0.2 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/events': 0.1.2 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 tslib: 2.8.1 transitivePeerDependencies: - '@types/node' @@ -23651,6 +24419,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@graphql-tools/graphql-file-loader@8.1.7(graphql@16.12.0)': + dependencies: + '@graphql-tools/import': 7.1.7(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + globby: 11.1.0 + graphql: 16.12.0 + tslib: 2.8.1 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + '@graphql-tools/graphql-file-loader@8.1.7(graphql@16.9.0)': dependencies: '@graphql-tools/import': 7.1.7(graphql@16.9.0) @@ -23727,6 +24506,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@graphql-tools/graphql-tag-pluck@8.3.25(graphql@16.12.0)': + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5) + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@graphql-tools/graphql-tag-pluck@8.3.25(graphql@16.9.0)': dependencies: '@babel/core': 7.28.5 @@ -23764,6 +24556,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@graphql-tools/import@7.1.7(graphql@16.12.0)': + dependencies: + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@theguild/federation-composition': 0.20.2(graphql@16.12.0) + graphql: 16.12.0 + resolve-from: 5.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@graphql-tools/import@7.1.7(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -23822,11 +24624,11 @@ snapshots: p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/load@8.1.6(graphql@16.9.0)': + '@graphql-tools/load@8.1.6(graphql@16.12.0)': dependencies: - '@graphql-tools/schema': 10.0.29(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) - graphql: 16.9.0 + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 p-limit: 3.1.0 tslib: 2.8.1 @@ -23836,12 +24638,24 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/merge@9.1.1(graphql@16.12.0)': + dependencies: + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/merge@9.1.1(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/merge@9.1.5(graphql@16.12.0)': + dependencies: + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/merge@9.1.5(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.11.0(graphql@16.9.0) @@ -23868,6 +24682,13 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/schema@10.0.25(graphql@16.12.0)': + dependencies: + '@graphql-tools/merge': 9.1.1(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/schema@10.0.25(graphql@16.9.0)': dependencies: '@graphql-tools/merge': 9.1.1(graphql@16.9.0) @@ -23875,6 +24696,13 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/schema@10.0.29(graphql@16.12.0)': + dependencies: + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/schema@10.0.29(graphql@16.9.0)': dependencies: '@graphql-tools/merge': 9.1.5(graphql@16.9.0) @@ -23890,6 +24718,19 @@ snapshots: tslib: 2.8.1 value-or-promise: 1.0.12 + '@graphql-tools/stitch@10.1.6(graphql@16.12.0)': + dependencies: + '@graphql-tools/batch-delegate': 10.0.8(graphql@16.12.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/merge': 9.1.5(graphql@16.12.0) + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/stitch@10.1.6(graphql@16.9.0)': dependencies: '@graphql-tools/batch-delegate': 10.0.8(graphql@16.9.0) @@ -23923,6 +24764,13 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/stitching-directives@4.0.8(graphql@16.12.0)': + dependencies: + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/stitching-directives@4.0.8(graphql@16.9.0)': dependencies: '@graphql-tools/delegate': 12.0.2(graphql@16.9.0) @@ -24041,6 +24889,37 @@ snapshots: - uWebSockets.js - utf-8-validate + '@graphql-tools/url-loader@9.1.0(@types/node@24.10.9)(graphql@16.12.0)': + dependencies: + '@graphql-tools/executor-graphql-ws': 3.1.5(graphql@16.12.0) + '@graphql-tools/executor-http': 3.2.1(@types/node@24.10.9)(graphql@16.12.0) + '@graphql-tools/executor-legacy-ws': 1.1.26(graphql@16.12.0) + '@graphql-tools/utils': 11.0.0(graphql@16.12.0) + '@graphql-tools/wrap': 11.1.2(graphql@16.12.0) + '@types/ws': 8.5.3 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + isomorphic-ws: 5.0.0(ws@8.18.0) + sync-fetch: 0.6.0 + tslib: 2.8.1 + ws: 8.18.0 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - crossws + - uWebSockets.js + - utf-8-validate + + '@graphql-tools/utils@10.11.0(graphql@16.12.0)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/utils@10.11.0(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -24066,6 +24945,15 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/utils@10.9.1(graphql@16.12.0)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.1 + cross-inspect: 1.0.1 + dset: 3.1.4 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/utils@10.9.1(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -24075,6 +24963,14 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/utils@11.0.0(graphql@16.12.0)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.12.0 + tslib: 2.8.1 + '@graphql-tools/utils@11.0.0(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -24083,6 +24979,14 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/utils@11.0.1-alpha-20260403104244-04c5cf56aba6702e37b7efb722f6b5158f5a9de2(graphql@16.9.0)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + '@whatwg-node/promise-helpers': 1.3.2 + cross-inspect: 1.0.1 + graphql: 16.9.0 + tslib: 2.8.1 + '@graphql-tools/utils@9.2.1(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -24107,13 +25011,13 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 - '@graphql-tools/wrap@11.0.5(graphql@16.9.0)': + '@graphql-tools/wrap@11.1.2(graphql@16.12.0)': dependencies: - '@graphql-tools/delegate': 11.1.3(graphql@16.9.0) - '@graphql-tools/schema': 10.0.29(graphql@16.9.0) - '@graphql-tools/utils': 10.11.0(graphql@16.9.0) + '@graphql-tools/delegate': 12.0.2(graphql@16.12.0) + '@graphql-tools/schema': 10.0.29(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.9.0 + graphql: 16.12.0 tslib: 2.8.1 '@graphql-tools/wrap@11.1.2(graphql@16.9.0)': @@ -24134,6 +25038,10 @@ snapshots: tslib: 2.8.1 value-or-promise: 1.0.12 + '@graphql-typed-document-node/core@3.2.0(graphql@16.12.0)': + dependencies: + graphql: 16.12.0 + '@graphql-typed-document-node/core@3.2.0(graphql@16.9.0)': dependencies: graphql: 16.9.0 @@ -24142,6 +25050,16 @@ snapshots: dependencies: tslib: 2.8.1 + '@graphql-yoga/plugin-apollo-inline-trace@3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': + dependencies: + '@apollo/usage-reporting-protobuf': 4.1.1 + '@envelop/on-resolve': 7.0.0(@envelop/core@5.5.1)(graphql@16.12.0) + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@envelop/core' + '@graphql-yoga/plugin-apollo-inline-trace@3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 @@ -24152,6 +25070,20 @@ snapshots: transitivePeerDependencies: - '@envelop/core' + '@graphql-yoga/plugin-apollo-usage-report@0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': + dependencies: + '@apollo/server-gateway-interface': 2.0.0(graphql@16.12.0) + '@apollo/usage-reporting-protobuf': 4.1.1 + '@apollo/utils.usagereporting': 2.1.0(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-yoga/plugin-apollo-inline-trace': 3.17.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@envelop/core' + '@graphql-yoga/plugin-apollo-usage-report@0.12.1(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@apollo/server-gateway-interface': 2.0.0(graphql@16.9.0) @@ -24166,10 +25098,20 @@ snapshots: transitivePeerDependencies: - '@envelop/core' + '@graphql-yoga/plugin-csrf-prevention@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))': + dependencies: + graphql-yoga: 5.17.1(graphql@16.12.0) + '@graphql-yoga/plugin-csrf-prevention@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))': dependencies: graphql-yoga: 5.17.1(graphql@16.9.0) + '@graphql-yoga/plugin-defer-stream@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': + dependencies: + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + '@graphql-yoga/plugin-defer-stream@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.9.0) @@ -24193,35 +25135,41 @@ snapshots: graphql-sse: 2.6.0(graphql@16.9.0) graphql-yoga: 5.13.3(graphql@16.9.0) - '@graphql-yoga/plugin-jwt@3.10.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': + '@graphql-yoga/plugin-jwt@3.10.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': dependencies: '@whatwg-node/promise-helpers': 1.3.2 '@whatwg-node/server-plugin-cookies': 1.0.5 - graphql: 16.9.0 - graphql-yoga: 5.17.1(graphql@16.9.0) + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) jsonwebtoken: 9.0.3 jwks-rsa: 3.2.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color + '@graphql-yoga/plugin-persisted-operations@3.16.2(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + '@graphql-yoga/plugin-persisted-operations@3.16.2(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.9.0 graphql-yoga: 5.17.1(graphql@16.9.0) - '@graphql-yoga/plugin-persisted-operations@3.9.0(@graphql-tools/utils@11.0.0(graphql@16.9.0))(graphql-yoga@5.13.3(graphql@16.9.0))(graphql@16.9.0)': + '@graphql-yoga/plugin-persisted-operations@3.9.0(@graphql-tools/utils@11.0.1-alpha-20260403104244-04c5cf56aba6702e37b7efb722f6b5158f5a9de2(graphql@16.9.0))(graphql-yoga@5.13.3(graphql@16.9.0))(graphql@16.9.0)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.9.0) + '@graphql-tools/utils': 11.0.1-alpha-20260403104244-04c5cf56aba6702e37b7efb722f6b5158f5a9de2(graphql@16.9.0) graphql: 16.9.0 graphql-yoga: 5.13.3(graphql@16.9.0) - '@graphql-yoga/plugin-prometheus@6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)(prom-client@15.1.3)': + '@graphql-yoga/plugin-prometheus@6.11.3(@envelop/core@5.5.1)(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)(prom-client@15.1.3)': dependencies: - '@envelop/prometheus': 14.0.0(@envelop/core@5.5.1)(graphql@16.9.0)(prom-client@15.1.3) - graphql: 16.9.0 - graphql-yoga: 5.17.1(graphql@16.9.0) + '@envelop/prometheus': 14.0.0(@envelop/core@5.5.1)(graphql@16.12.0)(prom-client@15.1.3) + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) prom-client: 15.1.3 transitivePeerDependencies: - '@envelop/core' @@ -24234,6 +25182,14 @@ snapshots: graphql: 16.9.0 graphql-yoga: 5.13.3(graphql@16.9.0) + '@graphql-yoga/plugin-response-cache@3.15.4(graphql-yoga@5.17.1(graphql@16.12.0))(graphql@16.12.0)': + dependencies: + '@envelop/core': 5.5.1 + '@envelop/response-cache': 7.1.3(@envelop/core@5.5.1)(graphql@16.12.0) + '@whatwg-node/promise-helpers': 1.3.0 + graphql: 16.12.0 + graphql-yoga: 5.17.1(graphql@16.12.0) + '@graphql-yoga/plugin-response-cache@3.15.4(graphql-yoga@5.17.1(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@envelop/core': 5.5.1 @@ -24256,9 +25212,9 @@ snapshots: '@whatwg-node/events': 0.1.2 ioredis: 5.8.2 - '@graphql-yoga/render-graphiql@5.16.2(graphql-yoga@5.17.1(graphql@16.9.0))': + '@graphql-yoga/render-graphiql@5.16.2(graphql-yoga@5.17.1(graphql@16.12.0))': dependencies: - graphql-yoga: 5.17.1(graphql@16.9.0) + graphql-yoga: 5.17.1(graphql@16.12.0) '@graphql-yoga/subscription@5.0.5': dependencies: @@ -29849,6 +30805,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@theguild/federation-composition@0.20.2(graphql@16.12.0)': + dependencies: + constant-case: 3.0.4 + debug: 4.4.3(supports-color@8.1.1) + graphql: 16.12.0 + json5: 2.2.3 + lodash.sortby: 4.7.0 + transitivePeerDependencies: + - supports-color + '@theguild/federation-composition@0.20.2(graphql@16.9.0)': dependencies: constant-case: 3.0.4 @@ -30675,14 +31641,14 @@ snapshots: msw: 2.12.7(@types/node@24.10.9)(typescript@5.7.3) vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3) - '@vitest/mocker@4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3))': + '@vitest/mocker@4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.0.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.7(@types/node@25.5.0)(typescript@5.7.3) - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3) '@vitest/pretty-format@4.0.9': dependencies: @@ -34191,12 +35157,12 @@ snapshots: lodash.merge: 4.6.2 lodash.mergewith: 4.6.2 - graphql-jit@0.8.7(graphql@16.9.0): + graphql-jit@0.8.7(graphql@16.12.0): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) fast-json-stringify: 5.16.1 generate-function: 2.3.1 - graphql: 16.9.0 + graphql: 16.12.0 lodash.memoize: 4.1.2 lodash.merge: 4.6.2 lodash.mergewith: 4.6.2 @@ -34349,6 +35315,23 @@ snapshots: optionalDependencies: ws: 8.18.0 + graphql-yoga@5.13.3(graphql@16.12.0): + dependencies: + '@envelop/core': 5.5.1 + '@envelop/instrumentation': 1.0.0 + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/schema': 10.0.25(graphql@16.12.0) + '@graphql-tools/utils': 10.9.1(graphql@16.12.0) + '@graphql-yoga/logger': 2.0.1 + '@graphql-yoga/subscription': 5.0.5 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + '@whatwg-node/server': 0.10.17 + dset: 3.1.4 + graphql: 16.12.0 + lru-cache: 10.2.0 + tslib: 2.8.1 + graphql-yoga@5.13.3(graphql@16.9.0): dependencies: '@envelop/core': 5.5.1 @@ -34366,6 +35349,22 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 + graphql-yoga@5.17.1(graphql@16.12.0): + dependencies: + '@envelop/core': 5.5.1 + '@envelop/instrumentation': 1.0.0 + '@graphql-tools/executor': 1.5.0(graphql@16.12.0) + '@graphql-tools/schema': 10.0.25(graphql@16.12.0) + '@graphql-tools/utils': 10.11.0(graphql@16.12.0) + '@graphql-yoga/logger': 2.0.1 + '@graphql-yoga/subscription': 5.0.5 + '@whatwg-node/fetch': 0.10.13 + '@whatwg-node/promise-helpers': 1.3.2 + '@whatwg-node/server': 0.10.17 + graphql: 16.12.0 + lru-cache: 10.2.0 + tslib: 2.8.1 + graphql-yoga@5.17.1(graphql@16.9.0): dependencies: '@envelop/core': 5.5.1 @@ -36149,10 +37148,6 @@ snapshots: merge2@1.4.1: {} - meros@1.2.1(@types/node@24.10.9): - optionalDependencies: - '@types/node': 24.10.9 - meros@1.2.1(@types/node@25.5.0): optionalDependencies: '@types/node': 25.5.0 @@ -36878,21 +37873,21 @@ snapshots: monaco-editor@0.52.2: {} - monaco-graphql@1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.4.2): + monaco-graphql@1.7.3(graphql@16.12.0)(monaco-editor@0.52.2)(prettier@3.8.1): dependencies: graphql: 16.12.0 graphql-language-service: 5.5.0(graphql@16.12.0) monaco-editor: 0.52.2 picomatch-browser: 2.2.6 - prettier: 3.4.2 + prettier: 3.8.1 - monaco-graphql@1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.4.2): + monaco-graphql@1.7.3(graphql@16.9.0)(monaco-editor@0.52.2)(prettier@3.8.1): dependencies: graphql: 16.9.0 graphql-language-service: 5.5.0(graphql@16.9.0) monaco-editor: 0.52.2 picomatch-browser: 2.2.6 - prettier: 3.4.2 + prettier: 3.8.1 monaco-themes@0.4.4: dependencies: @@ -39537,6 +40532,12 @@ snapshots: symbol-observable@1.2.0: {} + sync-fetch@0.6.0: + dependencies: + node-fetch: 3.3.2 + timeout-signal: 2.0.0 + whatwg-mimetype: 4.0.0 + sync-fetch@0.6.0-2: dependencies: node-fetch: 3.3.2 @@ -40592,7 +41593,7 @@ snapshots: vitest@4.0.9(@types/debug@4.1.12)(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.9 - '@vitest/mocker': 4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3)) + '@vitest/mocker': 4.0.9(msw@2.12.7(@types/node@25.5.0)(typescript@5.7.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.31.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.3)) '@vitest/pretty-format': 4.0.9 '@vitest/runner': 4.0.9 '@vitest/snapshot': 4.0.9 From ca3cf533dcdb7642b5cf578fae730aaf0776f7b9 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Mon, 6 Apr 2026 22:01:24 +0200 Subject: [PATCH 05/15] fix: qp fit in view & text mode rendering --- .../laboratory/src/components/flow.tsx | 12 ++-- .../src/components/laboratory/laboratory.tsx | 4 +- .../laboratory/src/lib/query-plan/utils.tsx | 55 ++++++++++++++----- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/packages/libraries/laboratory/src/components/flow.tsx b/packages/libraries/laboratory/src/components/flow.tsx index 2785ea0b0a3..dbb5e32680b 100644 --- a/packages/libraries/laboratory/src/components/flow.tsx +++ b/packages/libraries/laboratory/src/components/flow.tsx @@ -239,14 +239,10 @@ export const Flow = (props: { const { width: containerWidth, height: containerHeight } = container.getBoundingClientRect(); - console.log({ - width, - height, - containerWidth, - containerHeight, - }); - - const scale = Math.min(MAX_SCALE, Math.max(MIN_SCALE, containerWidth / width)); + const scale = Math.min( + MAX_SCALE, + Math.max(MIN_SCALE, Math.min(containerWidth / width, containerHeight / height)), + ); setView(prev => ({ ...prev, diff --git a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx index e232b787fd6..45e942e7b05 100644 --- a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx @@ -250,7 +250,7 @@ const LaboratoryContent = () => { } return ( - + @@ -344,7 +344,7 @@ const LaboratoryContent = () => {
`); } - lines.push(renderMultilineBlock(print(parse(node.operation)), depth + 2), `${indent(depth)}}`); + const slice = node.operation.includes('_entities') ? 2 : 1; + + try { + lines.push( + `${indent(depth + 1)}{`, + renderMultilineBlock( + print(parse(node.operation)) + .split('\n') + .slice(slice, slice * -1) + .join('\n'), + depth + 1, + ), + `${indent(depth + 1)}}`, + ); + } catch { + lines.push(`${indent(depth + 1)}${node.operation}`); + } return lines.join('\n'); } @@ -178,21 +196,29 @@ export function renderBatchFetchNode(node: BatchFetchNodePlan, depth = 0): strin const lines: string[] = []; lines.push(`${indent(depth)}BatchFetch(service: "${node.serviceName}") {`); - for (const alias of node.entityBatch.aliases) { + for (let i = 0; i < node.entityBatch.aliases.length; i++) { + const alias = node.entityBatch.aliases[i]; + lines.push( `${indent(depth + 1)}${alias.alias} {`, - `${indent(depth + 2)}paths [`, - ...alias.paths.map( - (path, index) => - `${indent(depth + 3)}${renderFlattenPath(path)}${index < alias.paths.length - 1 ? ',' : ''}`, - ), + `${indent(depth + 2)}paths: [`, + ...alias.paths.map(path => `${indent(depth + 3)}"${renderFlattenPath(path)}"`), `${indent(depth + 2)}]`, - `${indent(depth + 2)}{`, ); + const requires = renderSelectionSet(alias.requires, depth + 3); - if (requires) lines.push(requires); + + if (requires) { + lines.push(`${indent(depth + 2)}{`, requires, `${indent(depth + 2)}}`); + } + + if (i < node.entityBatch.aliases.length - 1) { + lines.push(`${indent(depth + 1)}}`); + } + } + + try { lines.push( - `${indent(depth + 2)}}`, `${indent(depth + 1)}}`, `${indent(depth + 1)}{`, renderMultilineBlock( @@ -200,9 +226,11 @@ export function renderBatchFetchNode(node: BatchFetchNodePlan, depth = 0): strin depth + 1, ), `${indent(depth + 1)}}`, + `${indent(depth)}}`, ); + } catch { + lines.push(`${indent(depth + 1)}${node.operation}`); } - lines.push(`${indent(depth)}}`); return lines.join('\n'); } @@ -597,7 +625,7 @@ function visitNode( ); break; - case 'Sequence': + case 'Sequence': { result = null; let prevChild: QueryPlanNode | null = null; @@ -619,6 +647,7 @@ function visitNode( } break; + } case 'Parallel': result.children = []; From 586c363dbd53d292a23a1829350ccbe357643783 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Tue, 7 Apr 2026 11:12:22 +0200 Subject: [PATCH 06/15] fix: qp to show full node details (include condition and skip in fetch), modal to disable move canvas when open --- .../laboratory/src/components/flow.tsx | 30 ++++++++++++++- .../src/components/laboratory/laboratory.tsx | 6 +-- .../laboratory/src/components/ui/dialog.tsx | 5 ++- .../laboratory/src/lib/query-plan/utils.tsx | 37 ++++++++++++++----- 4 files changed, 62 insertions(+), 16 deletions(-) diff --git a/packages/libraries/laboratory/src/components/flow.tsx b/packages/libraries/laboratory/src/components/flow.tsx index dbb5e32680b..11562af4f06 100644 --- a/packages/libraries/laboratory/src/components/flow.tsx +++ b/packages/libraries/laboratory/src/components/flow.tsx @@ -199,6 +199,14 @@ export const Flow = (props: { const handleMouseDown = useCallback( (event: MouseEvent) => { + if (!containerRef.current) { + return; + } + + if (!event.nativeEvent.composedPath().includes(containerRef.current)) { + return; + } + if (props.disableGestures) { return; } @@ -206,6 +214,17 @@ export const Flow = (props: { event.preventDefault(); setIsPanning(true); panStartRef.current = { x: event.clientX, y: event.clientY }; + + function handleMouseUp() { + stopPanning(); + setIsCanvasActive(false); + } + + document.addEventListener('mouseup', handleMouseUp); + + return () => { + document.removeEventListener('mouseup', handleMouseUp); + }; }, [props.disableGestures], ); @@ -239,6 +258,14 @@ export const Flow = (props: { const { width: containerWidth, height: containerHeight } = container.getBoundingClientRect(); + console.log({ + container, + containerWidth, + containerHeight, + width, + height, + }); + const scale = Math.min( MAX_SCALE, Math.max(MIN_SCALE, Math.min(containerWidth / width, containerHeight / height)), @@ -302,7 +329,7 @@ export const Flow = (props: {
{ stopPanning(); setIsCanvasActive(false); diff --git a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx index 45e942e7b05..1194532881e 100644 --- a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx @@ -623,7 +623,7 @@ export const Laboratory = ( [], ); - const containerRef = useRef(null); + const [container, setContainer] = useState(null); const [isFullScreen, setIsFullScreen] = useState(false); @@ -642,7 +642,7 @@ export const Laboratory = ( className={cn('hive-laboratory bg-background size-full', props.theme, { 'fixed inset-0 z-50': isFullScreen, })} - ref={containerRef} + ref={setContainer} > @@ -809,7 +809,7 @@ export const Laboratory = ( {...collectionsApi} {...operationsApi} {...historyApi} - container={containerRef.current} + container={container} openAddCollectionDialog={openAddCollectionDialog} openUpdateEndpointDialog={openUpdateEndpointDialog} openAddTestDialog={openAddTestDialog} diff --git a/packages/libraries/laboratory/src/components/ui/dialog.tsx b/packages/libraries/laboratory/src/components/ui/dialog.tsx index fbe68d5652f..191d62fdf6f 100644 --- a/packages/libraries/laboratory/src/components/ui/dialog.tsx +++ b/packages/libraries/laboratory/src/components/ui/dialog.tsx @@ -13,6 +13,7 @@ function DialogTrigger({ ...props }: React.ComponentProps) { const { container } = useLaboratory(); + return ; } @@ -44,8 +45,10 @@ function DialogContent({ }: React.ComponentProps & { showCloseButton?: boolean; }) { + const { container } = useLaboratory(); + return ( - + `); @@ -181,7 +181,7 @@ export function renderFetchNode(node: FetchNodePlan, depth = 0): string { .split('\n') .slice(slice, slice * -1) .join('\n'), - depth + 1, + depth + 2 - slice, ), `${indent(depth + 1)}}`, ); @@ -189,6 +189,8 @@ export function renderFetchNode(node: FetchNodePlan, depth = 0): string { lines.push(`${indent(depth + 1)}${node.operation}`); } + lines.push(`${indent(depth)}}`); + return lines.join('\n'); } @@ -464,6 +466,7 @@ function visitNode( parentNode: QueryPlanNode | null, nodes: QueryPlanNode[], contentPrefix?: React.ReactNode, + detailsContent?: string, ): QueryPlanNode { let result: QueryPlanNode | null = { id: uuidv4(), @@ -475,7 +478,6 @@ function visitNode( case 'Fetch': result.content = () => { const entity = (node.requires?.[0] as SelectionInlineFragment)?.typeCondition; - return (
{contentPrefix} @@ -505,7 +507,7 @@ function visitNode( Fetch
- +
@@ -585,7 +587,13 @@ function visitNode( Show details - + { + e.preventDefault(); + e.stopPropagation(); + }} + > BatchFetch @@ -622,6 +630,7 @@ function visitNode(
, + detailsContent ?? renderFlattenNode(node), ); break; @@ -633,7 +642,13 @@ function visitNode( for (let i = 0; i < node.nodes.length; i++) { const child = node.nodes[i]; - const childNode = visitNode(child, prevChild, i === 0 ? [] : nodes); + const childNode = visitNode( + child, + prevChild, + i === 0 ? [] : nodes, + contentPrefix, + detailsContent, + ); if (i === 0) { result = childNode; @@ -653,7 +668,7 @@ function visitNode( result.children = []; for (const child of node.nodes) { - visitNode(child, result, result.children); + visitNode(child, result, result.children, contentPrefix, detailsContent); } break; @@ -672,6 +687,7 @@ function visitNode( if: ${node.condition}
, + renderConditionNode(node), ); } if (node.elseClause) { @@ -685,21 +701,22 @@ function visitNode( if: ${node.condition}
, + renderConditionNode(node), ); } break; case 'Subscription': - visitNode(node.primary, result, nodes); + visitNode(node.primary, result, nodes, contentPrefix, detailsContent); break; case 'Defer': if (node.primary.node) { - visitNode(node.primary.node, result, nodes); + visitNode(node.primary.node, result, nodes, contentPrefix, detailsContent); } for (const deferred of node.deferred) { if (deferred.node) { - visitNode(deferred.node, result, nodes); + visitNode(deferred.node, result, nodes, contentPrefix, detailsContent); } } break; From 9d9cb47fca35a6faf7977e99f09038f19c018b26 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Tue, 14 Apr 2026 14:18:23 +0200 Subject: [PATCH 07/15] fix: remove extra logger --- .../laboratory/src/components/laboratory/operation.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/libraries/laboratory/src/components/laboratory/operation.tsx b/packages/libraries/laboratory/src/components/laboratory/operation.tsx index 348aabbdbdc..2fa1f08fafb 100644 --- a/packages/libraries/laboratory/src/components/laboratory/operation.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/operation.tsx @@ -330,8 +330,6 @@ export const Response = ({ historyItem }: { historyItem?: LaboratoryHistoryReque return false; } - console.log(QueryPlanSchema.safeParse(queryPlan).error?.message); - return QueryPlanSchema.safeParse(queryPlan).success; }, [historyItem?.response]); From be46f5744b6fe6497b3d8d7fa30baa35971255bf Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Tue, 14 Apr 2026 14:26:18 +0200 Subject: [PATCH 08/15] fix: safe parse of query plan --- .../src/components/laboratory/operation.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/libraries/laboratory/src/components/laboratory/operation.tsx b/packages/libraries/laboratory/src/components/laboratory/operation.tsx index 2fa1f08fafb..d82ce7efd55 100644 --- a/packages/libraries/laboratory/src/components/laboratory/operation.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/operation.tsx @@ -192,15 +192,19 @@ export const ResponseQueryPlan = ({ historyItem }: { historyItem?: LaboratoryHis const [mode, setMode] = useState<'text' | 'visual'>('text'); const queryPlan = useMemo(() => { - const queryPlan = - JSON.parse((historyItem as LaboratoryHistoryRequest)?.response ?? '{}').extensions - ?.queryPlan ?? {}; + try { + const queryPlan = + JSON.parse((historyItem as LaboratoryHistoryRequest)?.response ?? '{}').extensions + ?.queryPlan ?? {}; - if (!queryPlan) { + if (!queryPlan) { + return null; + } + + return QueryPlanSchema.safeParse(queryPlan).success ? queryPlan : null; + } catch { return null; } - - return QueryPlanSchema.safeParse(queryPlan).success ? queryPlan : null; }, [historyItem]); return ( From ce3d72b8eb539ceb473120c16d1452f953b0cca3 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Tue, 14 Apr 2026 14:34:34 +0200 Subject: [PATCH 09/15] fix: linter errors --- .../libraries/laboratory/src/lib/operations.ts | 16 ++++++++-------- packages/libraries/laboratory/src/lib/request.ts | 8 +++----- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/libraries/laboratory/src/lib/operations.ts b/packages/libraries/laboratory/src/lib/operations.ts index 152ad55aac5..a4297f83ec7 100644 --- a/packages/libraries/laboratory/src/lib/operations.ts +++ b/packages/libraries/laboratory/src/lib/operations.ts @@ -472,16 +472,16 @@ export const useOperations = ( } return null; - } else { - delete response.extensions.response.body; - - setStopOperationsFunctions(prev => { - const newStopOperationsFunctions = { ...prev }; - delete newStopOperationsFunctions[activeOperation.id]; - return newStopOperationsFunctions; - }); } + delete response.extensions.response.body; + + setStopOperationsFunctions(prev => { + const newStopOperationsFunctions = { ...prev }; + delete newStopOperationsFunctions[activeOperation.id]; + return newStopOperationsFunctions; + }); + return response; }, [activeOperation, props.preflightApi, props.envApi, props.pluginsApi, props.settingsApi], diff --git a/packages/libraries/laboratory/src/lib/request.ts b/packages/libraries/laboratory/src/lib/request.ts index 75e40f46a24..716326691c0 100644 --- a/packages/libraries/laboratory/src/lib/request.ts +++ b/packages/libraries/laboratory/src/lib/request.ts @@ -16,17 +16,15 @@ export async function fetchWithRetry( init: RequestInit, retryCount = 0, ): Promise { - let attempt = 0; - - while (true) { + for (let attempt = 0; attempt <= retryCount; attempt++) { try { return await fetch(input, init); } catch (error) { if (attempt >= retryCount) { throw error; } - - attempt++; } } + + throw new Error('Unreachable'); } From 669c442139089ce96a4b43b15d02346da204009e Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Tue, 14 Apr 2026 14:46:39 +0200 Subject: [PATCH 10/15] added map of graphiql options to lab in render-laboratory --- .../libraries/render-laboratory/src/index.ts | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/libraries/render-laboratory/src/index.ts b/packages/libraries/render-laboratory/src/index.ts index 2147449e611..a3557660645 100644 --- a/packages/libraries/render-laboratory/src/index.ts +++ b/packages/libraries/render-laboratory/src/index.ts @@ -1,4 +1,5 @@ import type { GraphiQLOptions } from 'graphql-yoga'; +import type { LaboratoryProps } from '@graphql-hive/laboratory'; import { editorWorkerService, favicon, @@ -9,6 +10,31 @@ import { typescriptWorker, } from './laboratory.js'; +const mapGraphiQLOptionsToLaboratoryProps = (opts?: GraphiQLOptions): LaboratoryProps => { + if (!opts) { + return {}; + } + + return { + defaultSettings: { + fetch: { + credentials: opts.credentials ?? 'same-origin', + timeout: opts.timeout, + retry: opts.retry, + useGETForQueries: opts.useGETForQueries, + }, + subscriptions: { + protocol: opts.subscriptionsProtocol ?? 'WS', + }, + introspection: { + queryName: opts.introspectionQueryName, + method: opts.method, + schemaDescription: opts.schemaDescription, + }, + }, + } satisfies LaboratoryProps; +}; + export const renderLaboratory = (opts?: GraphiQLOptions) => /* HTML */ ` @@ -63,7 +89,10 @@ export const renderLaboratory = (opts?: GraphiQLOptions) => /* HTML */ ` ${js}; - HiveLaboratory.renderLaboratory(window.document.querySelector('#root')); + HiveLaboratory.renderLaboratory( + window.document.querySelector('#root'), + ${JSON.stringify(mapGraphiQLOptionsToLaboratoryProps(opts))}, + ); From 152a348cfc12028301f8054f23901917d83169d8 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Tue, 14 Apr 2026 14:48:00 +0200 Subject: [PATCH 11/15] removed fetchWithRetry fn that isn't in use --- .../libraries/laboratory/src/lib/request.ts | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/packages/libraries/laboratory/src/lib/request.ts b/packages/libraries/laboratory/src/lib/request.ts index 716326691c0..e80bd6dd06e 100644 --- a/packages/libraries/laboratory/src/lib/request.ts +++ b/packages/libraries/laboratory/src/lib/request.ts @@ -10,21 +10,3 @@ export function createRequestSignal( return signal; } - -export async function fetchWithRetry( - input: RequestInfo | URL, - init: RequestInit, - retryCount = 0, -): Promise { - for (let attempt = 0; attempt <= retryCount; attempt++) { - try { - return await fetch(input, init); - } catch (error) { - if (attempt >= retryCount) { - throw error; - } - } - } - - throw new Error('Unreachable'); -} From 1960f7f30bed179293b831f53168e6f21aef2196 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Tue, 14 Apr 2026 19:59:21 +0200 Subject: [PATCH 12/15] fix: to load schema using url loader as well --- .../src/components/laboratory/laboratory.tsx | 4 +- .../src/components/laboratory/operation.tsx | 7 +- .../src/components/laboratory/settings.tsx | 15 --- .../libraries/laboratory/src/lib/endpoint.ts | 104 ++++++------------ .../laboratory/src/lib/operations.ts | 4 +- .../libraries/laboratory/src/lib/request.ts | 12 -- .../libraries/laboratory/src/lib/settings.ts | 4 - 7 files changed, 42 insertions(+), 108 deletions(-) delete mode 100644 packages/libraries/laboratory/src/lib/request.ts diff --git a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx index 2ce8a50d86f..5170d8fab75 100644 --- a/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/laboratory.tsx @@ -402,7 +402,7 @@ const LaboratoryContent = () => { > Preflight Script - {/* + { const tab = @@ -416,7 +416,7 @@ const LaboratoryContent = () => { }} > Settings - */} + Settings diff --git a/packages/libraries/laboratory/src/components/laboratory/operation.tsx b/packages/libraries/laboratory/src/components/laboratory/operation.tsx index 8d986498ecc..e9b4077559c 100644 --- a/packages/libraries/laboratory/src/components/laboratory/operation.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/operation.tsx @@ -392,7 +392,7 @@ export const Response = ({ historyItem }: { historyItem?: LaboratoryHistoryReque )} {historyItem ? (
- {historyItem?.status && ( + {!!historyItem?.status && ( ; + }) ?? { + status: 0, + headers: {}, }; delete response.extensions?.request; diff --git a/packages/libraries/laboratory/src/components/laboratory/settings.tsx b/packages/libraries/laboratory/src/components/laboratory/settings.tsx index daaf83047dc..92f6a9802f2 100644 --- a/packages/libraries/laboratory/src/components/laboratory/settings.tsx +++ b/packages/libraries/laboratory/src/components/laboratory/settings.tsx @@ -18,7 +18,6 @@ const settingsFormSchema = z.object({ protocol: z.enum(['SSE', 'GRAPHQL_SSE', 'WS', 'LEGACY_WS']), }), introspection: z.object({ - queryName: z.string().optional(), method: z.enum(['GET', 'POST']).optional(), schemaDescription: z.boolean().optional(), }), @@ -183,20 +182,6 @@ export const Settings = () => { - - {field => { - return ( - - Query name - field.handleChange(e.target.value || undefined)} - /> - - ); - }} - {field => { const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; diff --git a/packages/libraries/laboratory/src/lib/endpoint.ts b/packages/libraries/laboratory/src/lib/endpoint.ts index 07d27095aa6..2e653ff3fe6 100644 --- a/packages/libraries/laboratory/src/lib/endpoint.ts +++ b/packages/libraries/laboratory/src/lib/endpoint.ts @@ -1,14 +1,14 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { buildClientSchema, - getIntrospectionQuery, GraphQLSchema, + introspectionFromSchema, type IntrospectionQuery, } from 'graphql'; import { toast } from 'sonner'; -import z from 'zod'; +// import z from 'zod'; import { asyncInterval } from '@/lib/utils'; -import { createRequestSignal } from './request'; +import { SubscriptionProtocol, UrlLoader } from '@graphql-tools/url-loader'; import type { LaboratorySettingsActions, LaboratorySettingsState } from './settings'; export interface LaboratoryEndpointState { @@ -24,31 +24,6 @@ export interface LaboratoryEndpointActions { restoreDefaultEndpoint: () => void; } -function buildIntrospectionRequest( - queryName?: string, - method?: 'GET' | 'POST', - schemaDescription?: boolean, -) { - const query = getIntrospectionQuery({ - schemaDescription, - }).replace('query IntrospectionQuery', `query ${queryName ?? 'IntrospectionQuery'}`); - - return { - method, - query, - } as const; -} - -const GraphQLResponseErrorSchema = z - .object({ - errors: z.array( - z.object({ - message: z.string(), - }), - ), - }) - .strict(); - export const useEndpoint = (props: { defaultEndpoint?: string | null; onEndpointChange?: (endpoint: string | null) => void; @@ -70,6 +45,8 @@ export const useEndpoint = (props: { return introspection ? buildClientSchema(introspection) : null; }, [introspection]); + const loader = useMemo(() => new UrlLoader(), []); + const fetchSchema = useCallback( async (signal?: AbortSignal) => { if (endpoint === props.defaultEndpoint && props.defaultSchemaIntrospection) { @@ -83,53 +60,37 @@ export const useEndpoint = (props: { } try { - const introspectionRequest = buildIntrospectionRequest( - props.settingsApi?.settings.introspection.queryName, - props.settingsApi?.settings.introspection.method, - props.settingsApi?.settings.introspection.schemaDescription, - ); - - const requestSignal = createRequestSignal( - signal, - props.settingsApi?.settings.fetch.timeout, - ); - const requestUrl = - introspectionRequest.method === 'GET' - ? (() => { - const url = new URL(endpoint); - url.searchParams.set('query', introspectionRequest.query); - return url.toString(); - })() - : endpoint; - - const response = await fetch(requestUrl, { - signal: requestSignal, - method: introspectionRequest.method, - body: - introspectionRequest.method === 'POST' - ? JSON.stringify({ - query: introspectionRequest.query, - }) - : undefined, - headers: - introspectionRequest.method === 'POST' - ? { - 'Content-Type': 'application/json', - } - : undefined, - }).then(r => r.json()); - - const parsedResponse = GraphQLResponseErrorSchema.safeParse(response); - - if (parsedResponse.success) { - throw new Error(parsedResponse.data.errors.map(e => e.message).join('\n')); + const result = await loader.load(endpoint, { + subscriptionsEndpoint: endpoint, + subscriptionsProtocol: + (props.settingsApi?.settings.subscriptions.protocol as SubscriptionProtocol) ?? + SubscriptionProtocol.GRAPHQL_SSE, + credentials: props.settingsApi?.settings.fetch.credentials, + specifiedByUrl: true, + directiveIsRepeatable: true, + inputValueDeprecation: true, + retry: props.settingsApi?.settings.fetch.retry, + timeout: props.settingsApi?.settings.fetch.timeout, + useGETForQueries: props.settingsApi?.settings.fetch.useGETForQueries, + exposeHTTPDetailsInExtensions: true, + descriptions: props.settingsApi?.settings.introspection.schemaDescription ?? false, + method: props.settingsApi?.settings.introspection.method ?? 'POST', + fetch: (input: string | URL | Request, init?: RequestInit) => + fetch(input, { + ...init, + signal, + }), + }); + + if (result.length === 0) { + throw new Error('Failed to fetch schema'); } - if (response.error && typeof response.error === 'string') { - throw new Error(response.error); + if (!result[0].schema) { + throw new Error('Failed to fetch schema'); } - setIntrospection(response.data as IntrospectionQuery); + setIntrospection(introspectionFromSchema(result[0].schema)); } catch (error: unknown) { if ( error && @@ -150,7 +111,6 @@ export const useEndpoint = (props: { [ endpoint, props.settingsApi?.settings.fetch.timeout, - props.settingsApi?.settings.introspection.queryName, props.settingsApi?.settings.introspection.method, props.settingsApi?.settings.introspection.schemaDescription, ], diff --git a/packages/libraries/laboratory/src/lib/operations.ts b/packages/libraries/laboratory/src/lib/operations.ts index a4297f83ec7..0e3c3753406 100644 --- a/packages/libraries/laboratory/src/lib/operations.ts +++ b/packages/libraries/laboratory/src/lib/operations.ts @@ -474,7 +474,9 @@ export const useOperations = ( return null; } - delete response.extensions.response.body; + if (response.extensions?.response?.body) { + delete response.extensions.response.body; + } setStopOperationsFunctions(prev => { const newStopOperationsFunctions = { ...prev }; diff --git a/packages/libraries/laboratory/src/lib/request.ts b/packages/libraries/laboratory/src/lib/request.ts deleted file mode 100644 index e80bd6dd06e..00000000000 --- a/packages/libraries/laboratory/src/lib/request.ts +++ /dev/null @@ -1,12 +0,0 @@ -export function createRequestSignal( - signal?: AbortSignal, - timeout?: number, -): AbortSignal | undefined { - if (typeof timeout === 'number' && timeout > 0) { - return signal - ? AbortSignal.any([signal, AbortSignal.timeout(timeout)]) - : AbortSignal.timeout(timeout); - } - - return signal; -} diff --git a/packages/libraries/laboratory/src/lib/settings.ts b/packages/libraries/laboratory/src/lib/settings.ts index 23f8967b558..20edcfe701b 100644 --- a/packages/libraries/laboratory/src/lib/settings.ts +++ b/packages/libraries/laboratory/src/lib/settings.ts @@ -11,7 +11,6 @@ export type LaboratorySettings = { protocol: 'SSE' | 'GRAPHQL_SSE' | 'WS' | 'LEGACY_WS'; }; introspection: { - queryName?: string; method?: 'GET' | 'POST'; schemaDescription?: boolean; }; @@ -28,7 +27,6 @@ export const defaultLaboratorySettings: LaboratorySettings = { protocol: 'WS', }, introspection: { - queryName: 'IntrospectionQuery', method: 'POST', schemaDescription: false, }, @@ -48,8 +46,6 @@ export const normalizeLaboratorySettings = ( protocol: settings?.subscriptions?.protocol ?? defaultLaboratorySettings.subscriptions.protocol, }, introspection: { - queryName: - settings?.introspection?.queryName ?? defaultLaboratorySettings.introspection.queryName, method: settings?.introspection?.method ?? defaultLaboratorySettings.introspection.method, schemaDescription: settings?.introspection?.schemaDescription ?? From 17e1c35cf207aec6f6f51752b46a6c6b1efdac82 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Wed, 15 Apr 2026 11:31:18 +0200 Subject: [PATCH 13/15] fix: removed query name option mapping from render-laboratory --- packages/libraries/render-laboratory/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/libraries/render-laboratory/src/index.ts b/packages/libraries/render-laboratory/src/index.ts index a3557660645..985ed96574e 100644 --- a/packages/libraries/render-laboratory/src/index.ts +++ b/packages/libraries/render-laboratory/src/index.ts @@ -27,7 +27,6 @@ const mapGraphiQLOptionsToLaboratoryProps = (opts?: GraphiQLOptions): Laboratory protocol: opts.subscriptionsProtocol ?? 'WS', }, introspection: { - queryName: opts.introspectionQueryName, method: opts.method, schemaDescription: opts.schemaDescription, }, From 2fb3be0ad382b5bdf0e2c63b441b30d0d974d5a3 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Wed, 15 Apr 2026 13:52:15 +0200 Subject: [PATCH 14/15] fix: remove graphql-sse and graphql-ws deps --- packages/libraries/laboratory/package.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/libraries/laboratory/package.json b/packages/libraries/laboratory/package.json index a88c1797b93..a03431fa67e 100644 --- a/packages/libraries/laboratory/package.json +++ b/packages/libraries/laboratory/package.json @@ -29,8 +29,6 @@ "peerDependencies": { "@tanstack/react-form": "^1.23.8", "date-fns": "^4.1.0", - "graphql-sse": "^2.5.3", - "graphql-ws": "^6.0.6", "lucide-react": "^0.548.0", "lz-string": "^1.5.0", "react": "^18.0.0 || ^19.0.0", @@ -101,8 +99,6 @@ "eslint-plugin-react-refresh": "^0.4.26", "globals": "^16.5.0", "graphql": "^16.12.0", - "graphql-sse": "^2.5.3", - "graphql-ws": "^6.0.6", "lodash": "^4.18.1", "lucide-react": "^0.548.0", "lz-string": "^1.5.0", From 4edc0b8da7b327f752f18e2cc3f48432e495ab11 Mon Sep 17 00:00:00 2001 From: Mykhailo Skorokhodov Date: Thu, 16 Apr 2026 10:31:01 +0200 Subject: [PATCH 15/15] pnpm lock fix --- packages/libraries/laboratory/src/lib/operations.ts | 2 +- packages/libraries/laboratory/src/lib/utils.ts | 4 ++++ pnpm-lock.yaml | 12 ------------ 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/libraries/laboratory/src/lib/operations.ts b/packages/libraries/laboratory/src/lib/operations.ts index 438d057d06d..9f631d81cf1 100644 --- a/packages/libraries/laboratory/src/lib/operations.ts +++ b/packages/libraries/laboratory/src/lib/operations.ts @@ -7,9 +7,9 @@ import { parse, type GraphQLSchema, } from 'graphql'; -import { isAsyncIterable } from 'graphql-sse'; import { decompressFromEncodedURIComponent } from 'lz-string'; import { v4 as uuidv4 } from 'uuid'; +import { isAsyncIterable } from '@/lib/utils'; import { SubscriptionProtocol, UrlLoader } from '@graphql-tools/url-loader'; import { LaboratoryPermission, LaboratoryPermissions } from '../components/laboratory/context'; import type { diff --git a/packages/libraries/laboratory/src/lib/utils.ts b/packages/libraries/laboratory/src/lib/utils.ts index 2f4142e3ebc..8d81f279660 100644 --- a/packages/libraries/laboratory/src/lib/utils.ts +++ b/packages/libraries/laboratory/src/lib/utils.ts @@ -40,3 +40,7 @@ export async function asyncInterval( }); } } + +export function isAsyncIterable(val: unknown): val is AsyncIterable { + return typeof Object(val)[Symbol.asyncIterator] === 'function'; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9acd38d8cc1..6798f62caf9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -851,12 +851,6 @@ importers: graphql: specifier: ^16.12.0 version: 16.12.0 - graphql-sse: - specifier: ^2.5.3 - version: 2.6.0(graphql@16.12.0) - graphql-ws: - specifier: ^6.0.6 - version: 6.0.6(graphql@16.12.0)(ws@8.18.0) lodash: specifier: ^4.17.23 version: 4.18.1 @@ -983,8 +977,6 @@ importers: version: 5.13.3(graphql@16.12.0) publishDirectory: dist - packages/libraries/router: {} - packages/libraries/yoga: dependencies: '@graphql-hive/core': @@ -35487,10 +35479,6 @@ snapshots: dependencies: graphql: 16.9.0 - graphql-sse@2.6.0(graphql@16.12.0): - dependencies: - graphql: 16.12.0 - graphql-sse@2.6.0(graphql@16.9.0): dependencies: graphql: 16.9.0